{
  "id": "c52e412639e624305533d83d8bedcada",
  "_format": "hh-sol-build-info-1",
  "solcVersion": "0.6.12",
  "solcLongVersion": "0.6.12+commit.27d51765",
  "input": {
    "language": "Solidity",
    "sources": {
      "contracts/flat/SushiSwapSwapperFlat.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.6.12;\n\n// Version 11-Mar-2021\n\n// File @boringcrypto/boring-solidity/contracts/libraries/BoringMath.sol@v1.1.0\n// License-Identifier: MIT\n\n/// @notice A library for performing overflow-/underflow-safe math,\n/// updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math).\nlibrary BoringMath {\n    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {\n        require((c = a + b) >= b, \"BoringMath: Add Overflow\");\n    }\n\n    function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {\n        require((c = a - b) <= a, \"BoringMath: Underflow\");\n    }\n\n    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {\n        require(b == 0 || (c = a * b) / b == a, \"BoringMath: Mul Overflow\");\n    }\n}\n\n// File @sushiswap/core/contracts/uniswapv2/interfaces/IUniswapV2Factory.sol@v1.4.2\n// License-Identifier: GPL-3.0\ninterface IUniswapV2Factory {\n    function getPair(address tokenA, address tokenB) external view returns (address pair);\n}\n\n// File @sushiswap/core/contracts/uniswapv2/interfaces/IUniswapV2Pair.sol@v1.4.2\n// License-Identifier: GPL-3.0\ninterface IUniswapV2Pair {\n    function token0() external view returns (address);\n\n    function getReserves()\n        external\n        view\n        returns (\n            uint112 reserve0,\n            uint112 reserve1,\n            uint32 blockTimestampLast\n        );\n\n    function swap(\n        uint256 amount0Out,\n        uint256 amount1Out,\n        address to,\n        bytes calldata data\n    ) external;\n}\n\n// File @boringcrypto/boring-solidity/contracts/interfaces/IERC20.sol@v1.1.0\n// License-Identifier: MIT\ninterface IERC20 {\n\n}\n\n// File @sushiswap/bentobox-sdk/contracts/IBentoBoxV1.sol@v1.0.0\n// License-Identifier: MIT\ninterface IBentoBoxV1 {\n    function deposit(\n        IERC20 token_,\n        address from,\n        address to,\n        uint256 amount,\n        uint256 share\n    ) external payable returns (uint256 amountOut, uint256 shareOut);\n\n    function toAmount(\n        IERC20 token,\n        uint256 share,\n        bool roundUp\n    ) external view returns (uint256 amount);\n\n    function toShare(\n        IERC20 token,\n        uint256 amount,\n        bool roundUp\n    ) external view returns (uint256 share);\n\n    function transfer(\n        IERC20 token,\n        address from,\n        address to,\n        uint256 share\n    ) external;\n\n    function withdraw(\n        IERC20 token_,\n        address from,\n        address to,\n        uint256 amount,\n        uint256 share\n    ) external returns (uint256 amountOut, uint256 shareOut);\n}\n\n// File contracts/swappers/SushiSwapSwapper.sol\n// License-Identifier: MIT\ncontract SushiSwapSwapperV1 {\n    using BoringMath for uint256;\n\n    // Local variables\n    IBentoBoxV1 public immutable bentoBox;\n    IUniswapV2Factory public immutable factory;\n    bytes32 public pairCodeHash;\n\n    constructor(\n        IBentoBoxV1 bentoBox_,\n        IUniswapV2Factory factory_,\n        bytes32 pairCodeHash_\n    ) public {\n        bentoBox = bentoBox_;\n        factory = factory_;\n        pairCodeHash = pairCodeHash_;\n    }\n\n    // Given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset\n    function getAmountOut(\n        uint256 amountIn,\n        uint256 reserveIn,\n        uint256 reserveOut\n    ) internal pure returns (uint256 amountOut) {\n        uint256 amountInWithFee = amountIn.mul(997);\n        uint256 numerator = amountInWithFee.mul(reserveOut);\n        uint256 denominator = reserveIn.mul(1000).add(amountInWithFee);\n        amountOut = numerator / denominator;\n    }\n\n    // Given an output amount of an asset and pair reserves, returns a required input amount of the other asset\n    function getAmountIn(\n        uint256 amountOut,\n        uint256 reserveIn,\n        uint256 reserveOut\n    ) internal pure returns (uint256 amountIn) {\n        uint256 numerator = reserveIn.mul(amountOut).mul(1000);\n        uint256 denominator = reserveOut.sub(amountOut).mul(997);\n        amountIn = (numerator / denominator).add(1);\n    }\n\n    // Swaps to a flexible amount, from an exact input amount\n    /// @notice Withdraws 'amountFrom' of token 'from' from the BentoBox account for this swapper.\n    /// Swaps it for at least 'amountToMin' of token 'to'.\n    /// Transfers the swapped tokens of 'to' into the BentoBox using a plain ERC20 transfer.\n    /// Returns the amount of tokens 'to' transferred to BentoBox.\n    /// (The BentoBox skim function will be used by the caller to get the swapped funds).\n    function swap(\n        IERC20 fromToken,\n        IERC20 toToken,\n        address recipient,\n        uint256 shareToMin,\n        uint256 shareFrom\n    ) public returns (uint256 extraShare, uint256 shareReturned) {\n        (IERC20 token0, IERC20 token1) = fromToken < toToken ? (fromToken, toToken) : (toToken, fromToken);\n        IUniswapV2Pair pair =\n            IUniswapV2Pair(\n                uint256(\n                    keccak256(abi.encodePacked(hex\"ff\", factory, keccak256(abi.encodePacked(address(token0), address(token1))), pairCodeHash))\n                )\n            );\n\n        (uint256 amountFrom, ) = bentoBox.withdraw(fromToken, address(this), address(pair), 0, shareFrom);\n\n        (uint256 reserve0, uint256 reserve1, ) = pair.getReserves();\n        uint256 amountTo;\n        if (toToken > fromToken) {\n            amountTo = getAmountOut(amountFrom, reserve0, reserve1);\n            pair.swap(0, amountTo, address(bentoBox), new bytes(0));\n        } else {\n            amountTo = getAmountOut(amountFrom, reserve1, reserve0);\n            pair.swap(amountTo, 0, address(bentoBox), new bytes(0));\n        }\n        (, shareReturned) = bentoBox.deposit(toToken, address(bentoBox), recipient, amountTo, 0);\n        extraShare = shareReturned.sub(shareToMin);\n    }\n\n    // Swaps to an exact amount, from a flexible input amount\n    /// @notice Calculates the amount of token 'from' needed to complete the swap (amountFrom),\n    /// this should be less than or equal to amountFromMax.\n    /// Withdraws 'amountFrom' of token 'from' from the BentoBox account for this swapper.\n    /// Swaps it for exactly 'exactAmountTo' of token 'to'.\n    /// Transfers the swapped tokens of 'to' into the BentoBox using a plain ERC20 transfer.\n    /// Transfers allocated, but unused 'from' tokens within the BentoBox to 'refundTo' (amountFromMax - amountFrom).\n    /// Returns the amount of 'from' tokens withdrawn from BentoBox (amountFrom).\n    /// (The BentoBox skim function will be used by the caller to get the swapped funds).\n    function swapExact(\n        IERC20 fromToken,\n        IERC20 toToken,\n        address recipient,\n        address refundTo,\n        uint256 shareFromSupplied,\n        uint256 shareToExact\n    ) public returns (uint256 shareUsed, uint256 shareReturned) {\n        IUniswapV2Pair pair;\n        {\n            (IERC20 token0, IERC20 token1) = fromToken < toToken ? (fromToken, toToken) : (toToken, fromToken);\n            pair = IUniswapV2Pair(\n                uint256(\n                    keccak256(abi.encodePacked(hex\"ff\", factory, keccak256(abi.encodePacked(address(token0), address(token1))), pairCodeHash))\n                )\n            );\n        }\n        (uint256 reserve0, uint256 reserve1, ) = pair.getReserves();\n\n        uint256 amountToExact = bentoBox.toAmount(toToken, shareToExact, true);\n\n        uint256 amountFrom;\n        if (toToken > fromToken) {\n            amountFrom = getAmountIn(amountToExact, reserve0, reserve1);\n            (, shareUsed) = bentoBox.withdraw(fromToken, address(this), address(pair), amountFrom, 0);\n            pair.swap(0, amountToExact, address(bentoBox), \"\");\n        } else {\n            amountFrom = getAmountIn(amountToExact, reserve1, reserve0);\n            (, shareUsed) = bentoBox.withdraw(fromToken, address(this), address(pair), amountFrom, 0);\n            pair.swap(amountToExact, 0, address(bentoBox), \"\");\n        }\n        bentoBox.deposit(toToken, address(bentoBox), recipient, 0, shareToExact);\n        shareReturned = shareFromSupplied.sub(shareUsed);\n        if (shareReturned > 0) {\n            bentoBox.transfer(fromToken, address(this), refundTo, shareReturned);\n        }\n    }\n}\n"
      }
    },
    "settings": {
      "optimizer": {
        "enabled": true,
        "runs": 350
      },
      "outputSelection": {
        "*": {
          "*": [
            "abi",
            "evm.bytecode",
            "evm.deployedBytecode",
            "evm.methodIdentifiers",
            "metadata",
            "devdoc",
            "userdoc",
            "storageLayout",
            "evm.gasEstimates"
          ],
          "": [
            "ast"
          ]
        }
      },
      "metadata": {
        "useLiteralContent": true
      }
    }
  },
  "output": {
    "contracts": {
      "contracts/flat/SushiSwapSwapperFlat.sol": {
        "BoringMath": {
          "abi": [],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220de0db64fa87b9721b08e8f6b1cd54266130a0597d16ae70d90bebb3981879b0964736f6c634300060c0033",
              "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDE 0xD 0xB6 0x4F 0xA8 PUSH28 0x9721B08E8F6B1CD54266130A0597D16AE70D90BEBB3981879B096473 PUSH16 0x6C634300060C00330000000000000000 ",
              "sourceMap": "340:467:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220de0db64fa87b9721b08e8f6b1cd54266130a0597d16ae70d90bebb3981879b0964736f6c634300060c0033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDE 0xD 0xB6 0x4F 0xA8 PUSH28 0x9721B08E8F6B1CD54266130A0597D16AE70D90BEBB3981879B096473 PUSH16 0x6C634300060C00330000000000000000 ",
              "sourceMap": "340:467:0:-:0;;;;;;;;"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "17200",
                "executionCost": "97",
                "totalCost": "17297"
              },
              "internal": {
                "add(uint256,uint256)": "infinite",
                "mul(uint256,uint256)": "infinite",
                "sub(uint256,uint256)": "infinite"
              }
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"A library for performing overflow-/underflow-safe math, updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math).\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/flat/SushiSwapSwapperFlat.sol\":\"BoringMath\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":350},\"remappings\":[]},\"sources\":{\"contracts/flat/SushiSwapSwapperFlat.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.6.12;\\n\\n// Version 11-Mar-2021\\n\\n// File @boringcrypto/boring-solidity/contracts/libraries/BoringMath.sol@v1.1.0\\n// License-Identifier: MIT\\n\\n/// @notice A library for performing overflow-/underflow-safe math,\\n/// updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math).\\nlibrary BoringMath {\\n    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require((c = a + b) >= b, \\\"BoringMath: Add Overflow\\\");\\n    }\\n\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require((c = a - b) <= a, \\\"BoringMath: Underflow\\\");\\n    }\\n\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require(b == 0 || (c = a * b) / b == a, \\\"BoringMath: Mul Overflow\\\");\\n    }\\n}\\n\\n// File @sushiswap/core/contracts/uniswapv2/interfaces/IUniswapV2Factory.sol@v1.4.2\\n// License-Identifier: GPL-3.0\\ninterface IUniswapV2Factory {\\n    function getPair(address tokenA, address tokenB) external view returns (address pair);\\n}\\n\\n// File @sushiswap/core/contracts/uniswapv2/interfaces/IUniswapV2Pair.sol@v1.4.2\\n// License-Identifier: GPL-3.0\\ninterface IUniswapV2Pair {\\n    function token0() external view returns (address);\\n\\n    function getReserves()\\n        external\\n        view\\n        returns (\\n            uint112 reserve0,\\n            uint112 reserve1,\\n            uint32 blockTimestampLast\\n        );\\n\\n    function swap(\\n        uint256 amount0Out,\\n        uint256 amount1Out,\\n        address to,\\n        bytes calldata data\\n    ) external;\\n}\\n\\n// File @boringcrypto/boring-solidity/contracts/interfaces/IERC20.sol@v1.1.0\\n// License-Identifier: MIT\\ninterface IERC20 {\\n\\n}\\n\\n// File @sushiswap/bentobox-sdk/contracts/IBentoBoxV1.sol@v1.0.0\\n// License-Identifier: MIT\\ninterface IBentoBoxV1 {\\n    function deposit(\\n        IERC20 token_,\\n        address from,\\n        address to,\\n        uint256 amount,\\n        uint256 share\\n    ) external payable returns (uint256 amountOut, uint256 shareOut);\\n\\n    function toAmount(\\n        IERC20 token,\\n        uint256 share,\\n        bool roundUp\\n    ) external view returns (uint256 amount);\\n\\n    function toShare(\\n        IERC20 token,\\n        uint256 amount,\\n        bool roundUp\\n    ) external view returns (uint256 share);\\n\\n    function transfer(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 share\\n    ) external;\\n\\n    function withdraw(\\n        IERC20 token_,\\n        address from,\\n        address to,\\n        uint256 amount,\\n        uint256 share\\n    ) external returns (uint256 amountOut, uint256 shareOut);\\n}\\n\\n// File contracts/swappers/SushiSwapSwapper.sol\\n// License-Identifier: MIT\\ncontract SushiSwapSwapperV1 {\\n    using BoringMath for uint256;\\n\\n    // Local variables\\n    IBentoBoxV1 public immutable bentoBox;\\n    IUniswapV2Factory public immutable factory;\\n    bytes32 public pairCodeHash;\\n\\n    constructor(\\n        IBentoBoxV1 bentoBox_,\\n        IUniswapV2Factory factory_,\\n        bytes32 pairCodeHash_\\n    ) public {\\n        bentoBox = bentoBox_;\\n        factory = factory_;\\n        pairCodeHash = pairCodeHash_;\\n    }\\n\\n    // Given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset\\n    function getAmountOut(\\n        uint256 amountIn,\\n        uint256 reserveIn,\\n        uint256 reserveOut\\n    ) internal pure returns (uint256 amountOut) {\\n        uint256 amountInWithFee = amountIn.mul(997);\\n        uint256 numerator = amountInWithFee.mul(reserveOut);\\n        uint256 denominator = reserveIn.mul(1000).add(amountInWithFee);\\n        amountOut = numerator / denominator;\\n    }\\n\\n    // Given an output amount of an asset and pair reserves, returns a required input amount of the other asset\\n    function getAmountIn(\\n        uint256 amountOut,\\n        uint256 reserveIn,\\n        uint256 reserveOut\\n    ) internal pure returns (uint256 amountIn) {\\n        uint256 numerator = reserveIn.mul(amountOut).mul(1000);\\n        uint256 denominator = reserveOut.sub(amountOut).mul(997);\\n        amountIn = (numerator / denominator).add(1);\\n    }\\n\\n    // Swaps to a flexible amount, from an exact input amount\\n    /// @notice Withdraws 'amountFrom' of token 'from' from the BentoBox account for this swapper.\\n    /// Swaps it for at least 'amountToMin' of token 'to'.\\n    /// Transfers the swapped tokens of 'to' into the BentoBox using a plain ERC20 transfer.\\n    /// Returns the amount of tokens 'to' transferred to BentoBox.\\n    /// (The BentoBox skim function will be used by the caller to get the swapped funds).\\n    function swap(\\n        IERC20 fromToken,\\n        IERC20 toToken,\\n        address recipient,\\n        uint256 shareToMin,\\n        uint256 shareFrom\\n    ) public returns (uint256 extraShare, uint256 shareReturned) {\\n        (IERC20 token0, IERC20 token1) = fromToken < toToken ? (fromToken, toToken) : (toToken, fromToken);\\n        IUniswapV2Pair pair =\\n            IUniswapV2Pair(\\n                uint256(\\n                    keccak256(abi.encodePacked(hex\\\"ff\\\", factory, keccak256(abi.encodePacked(address(token0), address(token1))), pairCodeHash))\\n                )\\n            );\\n\\n        (uint256 amountFrom, ) = bentoBox.withdraw(fromToken, address(this), address(pair), 0, shareFrom);\\n\\n        (uint256 reserve0, uint256 reserve1, ) = pair.getReserves();\\n        uint256 amountTo;\\n        if (toToken > fromToken) {\\n            amountTo = getAmountOut(amountFrom, reserve0, reserve1);\\n            pair.swap(0, amountTo, address(bentoBox), new bytes(0));\\n        } else {\\n            amountTo = getAmountOut(amountFrom, reserve1, reserve0);\\n            pair.swap(amountTo, 0, address(bentoBox), new bytes(0));\\n        }\\n        (, shareReturned) = bentoBox.deposit(toToken, address(bentoBox), recipient, amountTo, 0);\\n        extraShare = shareReturned.sub(shareToMin);\\n    }\\n\\n    // Swaps to an exact amount, from a flexible input amount\\n    /// @notice Calculates the amount of token 'from' needed to complete the swap (amountFrom),\\n    /// this should be less than or equal to amountFromMax.\\n    /// Withdraws 'amountFrom' of token 'from' from the BentoBox account for this swapper.\\n    /// Swaps it for exactly 'exactAmountTo' of token 'to'.\\n    /// Transfers the swapped tokens of 'to' into the BentoBox using a plain ERC20 transfer.\\n    /// Transfers allocated, but unused 'from' tokens within the BentoBox to 'refundTo' (amountFromMax - amountFrom).\\n    /// Returns the amount of 'from' tokens withdrawn from BentoBox (amountFrom).\\n    /// (The BentoBox skim function will be used by the caller to get the swapped funds).\\n    function swapExact(\\n        IERC20 fromToken,\\n        IERC20 toToken,\\n        address recipient,\\n        address refundTo,\\n        uint256 shareFromSupplied,\\n        uint256 shareToExact\\n    ) public returns (uint256 shareUsed, uint256 shareReturned) {\\n        IUniswapV2Pair pair;\\n        {\\n            (IERC20 token0, IERC20 token1) = fromToken < toToken ? (fromToken, toToken) : (toToken, fromToken);\\n            pair = IUniswapV2Pair(\\n                uint256(\\n                    keccak256(abi.encodePacked(hex\\\"ff\\\", factory, keccak256(abi.encodePacked(address(token0), address(token1))), pairCodeHash))\\n                )\\n            );\\n        }\\n        (uint256 reserve0, uint256 reserve1, ) = pair.getReserves();\\n\\n        uint256 amountToExact = bentoBox.toAmount(toToken, shareToExact, true);\\n\\n        uint256 amountFrom;\\n        if (toToken > fromToken) {\\n            amountFrom = getAmountIn(amountToExact, reserve0, reserve1);\\n            (, shareUsed) = bentoBox.withdraw(fromToken, address(this), address(pair), amountFrom, 0);\\n            pair.swap(0, amountToExact, address(bentoBox), \\\"\\\");\\n        } else {\\n            amountFrom = getAmountIn(amountToExact, reserve1, reserve0);\\n            (, shareUsed) = bentoBox.withdraw(fromToken, address(this), address(pair), amountFrom, 0);\\n            pair.swap(amountToExact, 0, address(bentoBox), \\\"\\\");\\n        }\\n        bentoBox.deposit(toToken, address(bentoBox), recipient, 0, shareToExact);\\n        shareReturned = shareFromSupplied.sub(shareUsed);\\n        if (shareReturned > 0) {\\n            bentoBox.transfer(fromToken, address(this), refundTo, shareReturned);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xa4f3c014fd3ff555fbf4387354077c8276660de72c1d8d4c81ec85d528e771b6\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "notice": "A library for performing overflow-/underflow-safe math, updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math).",
            "version": 1
          }
        },
        "IBentoBoxV1": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "contract IERC20",
                  "name": "token_",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "share",
                  "type": "uint256"
                }
              ],
              "name": "deposit",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "shareOut",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "contract IERC20",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "share",
                  "type": "uint256"
                },
                {
                  "internalType": "bool",
                  "name": "roundUp",
                  "type": "bool"
                }
              ],
              "name": "toAmount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "contract IERC20",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                },
                {
                  "internalType": "bool",
                  "name": "roundUp",
                  "type": "bool"
                }
              ],
              "name": "toShare",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "share",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "contract IERC20",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "share",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "contract IERC20",
                  "name": "token_",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "share",
                  "type": "uint256"
                }
              ],
              "name": "withdraw",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "shareOut",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "deposit(address,address,address,uint256,uint256)": "02b9446c",
              "toAmount(address,uint256,bool)": "56623118",
              "toShare(address,uint256,bool)": "da5139ca",
              "transfer(address,address,address,uint256)": "f18d03cc",
              "withdraw(address,address,address,uint256,uint256)": "97da6d30"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"share\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"shareOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"share\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"roundUp\",\"type\":\"bool\"}],\"name\":\"toAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"roundUp\",\"type\":\"bool\"}],\"name\":\"toShare\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"share\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"share\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"share\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"shareOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/flat/SushiSwapSwapperFlat.sol\":\"IBentoBoxV1\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":350},\"remappings\":[]},\"sources\":{\"contracts/flat/SushiSwapSwapperFlat.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.6.12;\\n\\n// Version 11-Mar-2021\\n\\n// File @boringcrypto/boring-solidity/contracts/libraries/BoringMath.sol@v1.1.0\\n// License-Identifier: MIT\\n\\n/// @notice A library for performing overflow-/underflow-safe math,\\n/// updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math).\\nlibrary BoringMath {\\n    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require((c = a + b) >= b, \\\"BoringMath: Add Overflow\\\");\\n    }\\n\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require((c = a - b) <= a, \\\"BoringMath: Underflow\\\");\\n    }\\n\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require(b == 0 || (c = a * b) / b == a, \\\"BoringMath: Mul Overflow\\\");\\n    }\\n}\\n\\n// File @sushiswap/core/contracts/uniswapv2/interfaces/IUniswapV2Factory.sol@v1.4.2\\n// License-Identifier: GPL-3.0\\ninterface IUniswapV2Factory {\\n    function getPair(address tokenA, address tokenB) external view returns (address pair);\\n}\\n\\n// File @sushiswap/core/contracts/uniswapv2/interfaces/IUniswapV2Pair.sol@v1.4.2\\n// License-Identifier: GPL-3.0\\ninterface IUniswapV2Pair {\\n    function token0() external view returns (address);\\n\\n    function getReserves()\\n        external\\n        view\\n        returns (\\n            uint112 reserve0,\\n            uint112 reserve1,\\n            uint32 blockTimestampLast\\n        );\\n\\n    function swap(\\n        uint256 amount0Out,\\n        uint256 amount1Out,\\n        address to,\\n        bytes calldata data\\n    ) external;\\n}\\n\\n// File @boringcrypto/boring-solidity/contracts/interfaces/IERC20.sol@v1.1.0\\n// License-Identifier: MIT\\ninterface IERC20 {\\n\\n}\\n\\n// File @sushiswap/bentobox-sdk/contracts/IBentoBoxV1.sol@v1.0.0\\n// License-Identifier: MIT\\ninterface IBentoBoxV1 {\\n    function deposit(\\n        IERC20 token_,\\n        address from,\\n        address to,\\n        uint256 amount,\\n        uint256 share\\n    ) external payable returns (uint256 amountOut, uint256 shareOut);\\n\\n    function toAmount(\\n        IERC20 token,\\n        uint256 share,\\n        bool roundUp\\n    ) external view returns (uint256 amount);\\n\\n    function toShare(\\n        IERC20 token,\\n        uint256 amount,\\n        bool roundUp\\n    ) external view returns (uint256 share);\\n\\n    function transfer(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 share\\n    ) external;\\n\\n    function withdraw(\\n        IERC20 token_,\\n        address from,\\n        address to,\\n        uint256 amount,\\n        uint256 share\\n    ) external returns (uint256 amountOut, uint256 shareOut);\\n}\\n\\n// File contracts/swappers/SushiSwapSwapper.sol\\n// License-Identifier: MIT\\ncontract SushiSwapSwapperV1 {\\n    using BoringMath for uint256;\\n\\n    // Local variables\\n    IBentoBoxV1 public immutable bentoBox;\\n    IUniswapV2Factory public immutable factory;\\n    bytes32 public pairCodeHash;\\n\\n    constructor(\\n        IBentoBoxV1 bentoBox_,\\n        IUniswapV2Factory factory_,\\n        bytes32 pairCodeHash_\\n    ) public {\\n        bentoBox = bentoBox_;\\n        factory = factory_;\\n        pairCodeHash = pairCodeHash_;\\n    }\\n\\n    // Given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset\\n    function getAmountOut(\\n        uint256 amountIn,\\n        uint256 reserveIn,\\n        uint256 reserveOut\\n    ) internal pure returns (uint256 amountOut) {\\n        uint256 amountInWithFee = amountIn.mul(997);\\n        uint256 numerator = amountInWithFee.mul(reserveOut);\\n        uint256 denominator = reserveIn.mul(1000).add(amountInWithFee);\\n        amountOut = numerator / denominator;\\n    }\\n\\n    // Given an output amount of an asset and pair reserves, returns a required input amount of the other asset\\n    function getAmountIn(\\n        uint256 amountOut,\\n        uint256 reserveIn,\\n        uint256 reserveOut\\n    ) internal pure returns (uint256 amountIn) {\\n        uint256 numerator = reserveIn.mul(amountOut).mul(1000);\\n        uint256 denominator = reserveOut.sub(amountOut).mul(997);\\n        amountIn = (numerator / denominator).add(1);\\n    }\\n\\n    // Swaps to a flexible amount, from an exact input amount\\n    /// @notice Withdraws 'amountFrom' of token 'from' from the BentoBox account for this swapper.\\n    /// Swaps it for at least 'amountToMin' of token 'to'.\\n    /// Transfers the swapped tokens of 'to' into the BentoBox using a plain ERC20 transfer.\\n    /// Returns the amount of tokens 'to' transferred to BentoBox.\\n    /// (The BentoBox skim function will be used by the caller to get the swapped funds).\\n    function swap(\\n        IERC20 fromToken,\\n        IERC20 toToken,\\n        address recipient,\\n        uint256 shareToMin,\\n        uint256 shareFrom\\n    ) public returns (uint256 extraShare, uint256 shareReturned) {\\n        (IERC20 token0, IERC20 token1) = fromToken < toToken ? (fromToken, toToken) : (toToken, fromToken);\\n        IUniswapV2Pair pair =\\n            IUniswapV2Pair(\\n                uint256(\\n                    keccak256(abi.encodePacked(hex\\\"ff\\\", factory, keccak256(abi.encodePacked(address(token0), address(token1))), pairCodeHash))\\n                )\\n            );\\n\\n        (uint256 amountFrom, ) = bentoBox.withdraw(fromToken, address(this), address(pair), 0, shareFrom);\\n\\n        (uint256 reserve0, uint256 reserve1, ) = pair.getReserves();\\n        uint256 amountTo;\\n        if (toToken > fromToken) {\\n            amountTo = getAmountOut(amountFrom, reserve0, reserve1);\\n            pair.swap(0, amountTo, address(bentoBox), new bytes(0));\\n        } else {\\n            amountTo = getAmountOut(amountFrom, reserve1, reserve0);\\n            pair.swap(amountTo, 0, address(bentoBox), new bytes(0));\\n        }\\n        (, shareReturned) = bentoBox.deposit(toToken, address(bentoBox), recipient, amountTo, 0);\\n        extraShare = shareReturned.sub(shareToMin);\\n    }\\n\\n    // Swaps to an exact amount, from a flexible input amount\\n    /// @notice Calculates the amount of token 'from' needed to complete the swap (amountFrom),\\n    /// this should be less than or equal to amountFromMax.\\n    /// Withdraws 'amountFrom' of token 'from' from the BentoBox account for this swapper.\\n    /// Swaps it for exactly 'exactAmountTo' of token 'to'.\\n    /// Transfers the swapped tokens of 'to' into the BentoBox using a plain ERC20 transfer.\\n    /// Transfers allocated, but unused 'from' tokens within the BentoBox to 'refundTo' (amountFromMax - amountFrom).\\n    /// Returns the amount of 'from' tokens withdrawn from BentoBox (amountFrom).\\n    /// (The BentoBox skim function will be used by the caller to get the swapped funds).\\n    function swapExact(\\n        IERC20 fromToken,\\n        IERC20 toToken,\\n        address recipient,\\n        address refundTo,\\n        uint256 shareFromSupplied,\\n        uint256 shareToExact\\n    ) public returns (uint256 shareUsed, uint256 shareReturned) {\\n        IUniswapV2Pair pair;\\n        {\\n            (IERC20 token0, IERC20 token1) = fromToken < toToken ? (fromToken, toToken) : (toToken, fromToken);\\n            pair = IUniswapV2Pair(\\n                uint256(\\n                    keccak256(abi.encodePacked(hex\\\"ff\\\", factory, keccak256(abi.encodePacked(address(token0), address(token1))), pairCodeHash))\\n                )\\n            );\\n        }\\n        (uint256 reserve0, uint256 reserve1, ) = pair.getReserves();\\n\\n        uint256 amountToExact = bentoBox.toAmount(toToken, shareToExact, true);\\n\\n        uint256 amountFrom;\\n        if (toToken > fromToken) {\\n            amountFrom = getAmountIn(amountToExact, reserve0, reserve1);\\n            (, shareUsed) = bentoBox.withdraw(fromToken, address(this), address(pair), amountFrom, 0);\\n            pair.swap(0, amountToExact, address(bentoBox), \\\"\\\");\\n        } else {\\n            amountFrom = getAmountIn(amountToExact, reserve1, reserve0);\\n            (, shareUsed) = bentoBox.withdraw(fromToken, address(this), address(pair), amountFrom, 0);\\n            pair.swap(amountToExact, 0, address(bentoBox), \\\"\\\");\\n        }\\n        bentoBox.deposit(toToken, address(bentoBox), recipient, 0, shareToExact);\\n        shareReturned = shareFromSupplied.sub(shareUsed);\\n        if (shareReturned > 0) {\\n            bentoBox.transfer(fromToken, address(this), refundTo, shareReturned);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xa4f3c014fd3ff555fbf4387354077c8276660de72c1d8d4c81ec85d528e771b6\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        },
        "IERC20": {
          "abi": [],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/flat/SushiSwapSwapperFlat.sol\":\"IERC20\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":350},\"remappings\":[]},\"sources\":{\"contracts/flat/SushiSwapSwapperFlat.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.6.12;\\n\\n// Version 11-Mar-2021\\n\\n// File @boringcrypto/boring-solidity/contracts/libraries/BoringMath.sol@v1.1.0\\n// License-Identifier: MIT\\n\\n/// @notice A library for performing overflow-/underflow-safe math,\\n/// updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math).\\nlibrary BoringMath {\\n    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require((c = a + b) >= b, \\\"BoringMath: Add Overflow\\\");\\n    }\\n\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require((c = a - b) <= a, \\\"BoringMath: Underflow\\\");\\n    }\\n\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require(b == 0 || (c = a * b) / b == a, \\\"BoringMath: Mul Overflow\\\");\\n    }\\n}\\n\\n// File @sushiswap/core/contracts/uniswapv2/interfaces/IUniswapV2Factory.sol@v1.4.2\\n// License-Identifier: GPL-3.0\\ninterface IUniswapV2Factory {\\n    function getPair(address tokenA, address tokenB) external view returns (address pair);\\n}\\n\\n// File @sushiswap/core/contracts/uniswapv2/interfaces/IUniswapV2Pair.sol@v1.4.2\\n// License-Identifier: GPL-3.0\\ninterface IUniswapV2Pair {\\n    function token0() external view returns (address);\\n\\n    function getReserves()\\n        external\\n        view\\n        returns (\\n            uint112 reserve0,\\n            uint112 reserve1,\\n            uint32 blockTimestampLast\\n        );\\n\\n    function swap(\\n        uint256 amount0Out,\\n        uint256 amount1Out,\\n        address to,\\n        bytes calldata data\\n    ) external;\\n}\\n\\n// File @boringcrypto/boring-solidity/contracts/interfaces/IERC20.sol@v1.1.0\\n// License-Identifier: MIT\\ninterface IERC20 {\\n\\n}\\n\\n// File @sushiswap/bentobox-sdk/contracts/IBentoBoxV1.sol@v1.0.0\\n// License-Identifier: MIT\\ninterface IBentoBoxV1 {\\n    function deposit(\\n        IERC20 token_,\\n        address from,\\n        address to,\\n        uint256 amount,\\n        uint256 share\\n    ) external payable returns (uint256 amountOut, uint256 shareOut);\\n\\n    function toAmount(\\n        IERC20 token,\\n        uint256 share,\\n        bool roundUp\\n    ) external view returns (uint256 amount);\\n\\n    function toShare(\\n        IERC20 token,\\n        uint256 amount,\\n        bool roundUp\\n    ) external view returns (uint256 share);\\n\\n    function transfer(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 share\\n    ) external;\\n\\n    function withdraw(\\n        IERC20 token_,\\n        address from,\\n        address to,\\n        uint256 amount,\\n        uint256 share\\n    ) external returns (uint256 amountOut, uint256 shareOut);\\n}\\n\\n// File contracts/swappers/SushiSwapSwapper.sol\\n// License-Identifier: MIT\\ncontract SushiSwapSwapperV1 {\\n    using BoringMath for uint256;\\n\\n    // Local variables\\n    IBentoBoxV1 public immutable bentoBox;\\n    IUniswapV2Factory public immutable factory;\\n    bytes32 public pairCodeHash;\\n\\n    constructor(\\n        IBentoBoxV1 bentoBox_,\\n        IUniswapV2Factory factory_,\\n        bytes32 pairCodeHash_\\n    ) public {\\n        bentoBox = bentoBox_;\\n        factory = factory_;\\n        pairCodeHash = pairCodeHash_;\\n    }\\n\\n    // Given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset\\n    function getAmountOut(\\n        uint256 amountIn,\\n        uint256 reserveIn,\\n        uint256 reserveOut\\n    ) internal pure returns (uint256 amountOut) {\\n        uint256 amountInWithFee = amountIn.mul(997);\\n        uint256 numerator = amountInWithFee.mul(reserveOut);\\n        uint256 denominator = reserveIn.mul(1000).add(amountInWithFee);\\n        amountOut = numerator / denominator;\\n    }\\n\\n    // Given an output amount of an asset and pair reserves, returns a required input amount of the other asset\\n    function getAmountIn(\\n        uint256 amountOut,\\n        uint256 reserveIn,\\n        uint256 reserveOut\\n    ) internal pure returns (uint256 amountIn) {\\n        uint256 numerator = reserveIn.mul(amountOut).mul(1000);\\n        uint256 denominator = reserveOut.sub(amountOut).mul(997);\\n        amountIn = (numerator / denominator).add(1);\\n    }\\n\\n    // Swaps to a flexible amount, from an exact input amount\\n    /// @notice Withdraws 'amountFrom' of token 'from' from the BentoBox account for this swapper.\\n    /// Swaps it for at least 'amountToMin' of token 'to'.\\n    /// Transfers the swapped tokens of 'to' into the BentoBox using a plain ERC20 transfer.\\n    /// Returns the amount of tokens 'to' transferred to BentoBox.\\n    /// (The BentoBox skim function will be used by the caller to get the swapped funds).\\n    function swap(\\n        IERC20 fromToken,\\n        IERC20 toToken,\\n        address recipient,\\n        uint256 shareToMin,\\n        uint256 shareFrom\\n    ) public returns (uint256 extraShare, uint256 shareReturned) {\\n        (IERC20 token0, IERC20 token1) = fromToken < toToken ? (fromToken, toToken) : (toToken, fromToken);\\n        IUniswapV2Pair pair =\\n            IUniswapV2Pair(\\n                uint256(\\n                    keccak256(abi.encodePacked(hex\\\"ff\\\", factory, keccak256(abi.encodePacked(address(token0), address(token1))), pairCodeHash))\\n                )\\n            );\\n\\n        (uint256 amountFrom, ) = bentoBox.withdraw(fromToken, address(this), address(pair), 0, shareFrom);\\n\\n        (uint256 reserve0, uint256 reserve1, ) = pair.getReserves();\\n        uint256 amountTo;\\n        if (toToken > fromToken) {\\n            amountTo = getAmountOut(amountFrom, reserve0, reserve1);\\n            pair.swap(0, amountTo, address(bentoBox), new bytes(0));\\n        } else {\\n            amountTo = getAmountOut(amountFrom, reserve1, reserve0);\\n            pair.swap(amountTo, 0, address(bentoBox), new bytes(0));\\n        }\\n        (, shareReturned) = bentoBox.deposit(toToken, address(bentoBox), recipient, amountTo, 0);\\n        extraShare = shareReturned.sub(shareToMin);\\n    }\\n\\n    // Swaps to an exact amount, from a flexible input amount\\n    /// @notice Calculates the amount of token 'from' needed to complete the swap (amountFrom),\\n    /// this should be less than or equal to amountFromMax.\\n    /// Withdraws 'amountFrom' of token 'from' from the BentoBox account for this swapper.\\n    /// Swaps it for exactly 'exactAmountTo' of token 'to'.\\n    /// Transfers the swapped tokens of 'to' into the BentoBox using a plain ERC20 transfer.\\n    /// Transfers allocated, but unused 'from' tokens within the BentoBox to 'refundTo' (amountFromMax - amountFrom).\\n    /// Returns the amount of 'from' tokens withdrawn from BentoBox (amountFrom).\\n    /// (The BentoBox skim function will be used by the caller to get the swapped funds).\\n    function swapExact(\\n        IERC20 fromToken,\\n        IERC20 toToken,\\n        address recipient,\\n        address refundTo,\\n        uint256 shareFromSupplied,\\n        uint256 shareToExact\\n    ) public returns (uint256 shareUsed, uint256 shareReturned) {\\n        IUniswapV2Pair pair;\\n        {\\n            (IERC20 token0, IERC20 token1) = fromToken < toToken ? (fromToken, toToken) : (toToken, fromToken);\\n            pair = IUniswapV2Pair(\\n                uint256(\\n                    keccak256(abi.encodePacked(hex\\\"ff\\\", factory, keccak256(abi.encodePacked(address(token0), address(token1))), pairCodeHash))\\n                )\\n            );\\n        }\\n        (uint256 reserve0, uint256 reserve1, ) = pair.getReserves();\\n\\n        uint256 amountToExact = bentoBox.toAmount(toToken, shareToExact, true);\\n\\n        uint256 amountFrom;\\n        if (toToken > fromToken) {\\n            amountFrom = getAmountIn(amountToExact, reserve0, reserve1);\\n            (, shareUsed) = bentoBox.withdraw(fromToken, address(this), address(pair), amountFrom, 0);\\n            pair.swap(0, amountToExact, address(bentoBox), \\\"\\\");\\n        } else {\\n            amountFrom = getAmountIn(amountToExact, reserve1, reserve0);\\n            (, shareUsed) = bentoBox.withdraw(fromToken, address(this), address(pair), amountFrom, 0);\\n            pair.swap(amountToExact, 0, address(bentoBox), \\\"\\\");\\n        }\\n        bentoBox.deposit(toToken, address(bentoBox), recipient, 0, shareToExact);\\n        shareReturned = shareFromSupplied.sub(shareUsed);\\n        if (shareReturned > 0) {\\n            bentoBox.transfer(fromToken, address(this), refundTo, shareReturned);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xa4f3c014fd3ff555fbf4387354077c8276660de72c1d8d4c81ec85d528e771b6\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        },
        "IUniswapV2Factory": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "tokenA",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenB",
                  "type": "address"
                }
              ],
              "name": "getPair",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "pair",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "getPair(address,address)": "e6a43905"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"}],\"name\":\"getPair\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"pair\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/flat/SushiSwapSwapperFlat.sol\":\"IUniswapV2Factory\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":350},\"remappings\":[]},\"sources\":{\"contracts/flat/SushiSwapSwapperFlat.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.6.12;\\n\\n// Version 11-Mar-2021\\n\\n// File @boringcrypto/boring-solidity/contracts/libraries/BoringMath.sol@v1.1.0\\n// License-Identifier: MIT\\n\\n/// @notice A library for performing overflow-/underflow-safe math,\\n/// updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math).\\nlibrary BoringMath {\\n    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require((c = a + b) >= b, \\\"BoringMath: Add Overflow\\\");\\n    }\\n\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require((c = a - b) <= a, \\\"BoringMath: Underflow\\\");\\n    }\\n\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require(b == 0 || (c = a * b) / b == a, \\\"BoringMath: Mul Overflow\\\");\\n    }\\n}\\n\\n// File @sushiswap/core/contracts/uniswapv2/interfaces/IUniswapV2Factory.sol@v1.4.2\\n// License-Identifier: GPL-3.0\\ninterface IUniswapV2Factory {\\n    function getPair(address tokenA, address tokenB) external view returns (address pair);\\n}\\n\\n// File @sushiswap/core/contracts/uniswapv2/interfaces/IUniswapV2Pair.sol@v1.4.2\\n// License-Identifier: GPL-3.0\\ninterface IUniswapV2Pair {\\n    function token0() external view returns (address);\\n\\n    function getReserves()\\n        external\\n        view\\n        returns (\\n            uint112 reserve0,\\n            uint112 reserve1,\\n            uint32 blockTimestampLast\\n        );\\n\\n    function swap(\\n        uint256 amount0Out,\\n        uint256 amount1Out,\\n        address to,\\n        bytes calldata data\\n    ) external;\\n}\\n\\n// File @boringcrypto/boring-solidity/contracts/interfaces/IERC20.sol@v1.1.0\\n// License-Identifier: MIT\\ninterface IERC20 {\\n\\n}\\n\\n// File @sushiswap/bentobox-sdk/contracts/IBentoBoxV1.sol@v1.0.0\\n// License-Identifier: MIT\\ninterface IBentoBoxV1 {\\n    function deposit(\\n        IERC20 token_,\\n        address from,\\n        address to,\\n        uint256 amount,\\n        uint256 share\\n    ) external payable returns (uint256 amountOut, uint256 shareOut);\\n\\n    function toAmount(\\n        IERC20 token,\\n        uint256 share,\\n        bool roundUp\\n    ) external view returns (uint256 amount);\\n\\n    function toShare(\\n        IERC20 token,\\n        uint256 amount,\\n        bool roundUp\\n    ) external view returns (uint256 share);\\n\\n    function transfer(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 share\\n    ) external;\\n\\n    function withdraw(\\n        IERC20 token_,\\n        address from,\\n        address to,\\n        uint256 amount,\\n        uint256 share\\n    ) external returns (uint256 amountOut, uint256 shareOut);\\n}\\n\\n// File contracts/swappers/SushiSwapSwapper.sol\\n// License-Identifier: MIT\\ncontract SushiSwapSwapperV1 {\\n    using BoringMath for uint256;\\n\\n    // Local variables\\n    IBentoBoxV1 public immutable bentoBox;\\n    IUniswapV2Factory public immutable factory;\\n    bytes32 public pairCodeHash;\\n\\n    constructor(\\n        IBentoBoxV1 bentoBox_,\\n        IUniswapV2Factory factory_,\\n        bytes32 pairCodeHash_\\n    ) public {\\n        bentoBox = bentoBox_;\\n        factory = factory_;\\n        pairCodeHash = pairCodeHash_;\\n    }\\n\\n    // Given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset\\n    function getAmountOut(\\n        uint256 amountIn,\\n        uint256 reserveIn,\\n        uint256 reserveOut\\n    ) internal pure returns (uint256 amountOut) {\\n        uint256 amountInWithFee = amountIn.mul(997);\\n        uint256 numerator = amountInWithFee.mul(reserveOut);\\n        uint256 denominator = reserveIn.mul(1000).add(amountInWithFee);\\n        amountOut = numerator / denominator;\\n    }\\n\\n    // Given an output amount of an asset and pair reserves, returns a required input amount of the other asset\\n    function getAmountIn(\\n        uint256 amountOut,\\n        uint256 reserveIn,\\n        uint256 reserveOut\\n    ) internal pure returns (uint256 amountIn) {\\n        uint256 numerator = reserveIn.mul(amountOut).mul(1000);\\n        uint256 denominator = reserveOut.sub(amountOut).mul(997);\\n        amountIn = (numerator / denominator).add(1);\\n    }\\n\\n    // Swaps to a flexible amount, from an exact input amount\\n    /// @notice Withdraws 'amountFrom' of token 'from' from the BentoBox account for this swapper.\\n    /// Swaps it for at least 'amountToMin' of token 'to'.\\n    /// Transfers the swapped tokens of 'to' into the BentoBox using a plain ERC20 transfer.\\n    /// Returns the amount of tokens 'to' transferred to BentoBox.\\n    /// (The BentoBox skim function will be used by the caller to get the swapped funds).\\n    function swap(\\n        IERC20 fromToken,\\n        IERC20 toToken,\\n        address recipient,\\n        uint256 shareToMin,\\n        uint256 shareFrom\\n    ) public returns (uint256 extraShare, uint256 shareReturned) {\\n        (IERC20 token0, IERC20 token1) = fromToken < toToken ? (fromToken, toToken) : (toToken, fromToken);\\n        IUniswapV2Pair pair =\\n            IUniswapV2Pair(\\n                uint256(\\n                    keccak256(abi.encodePacked(hex\\\"ff\\\", factory, keccak256(abi.encodePacked(address(token0), address(token1))), pairCodeHash))\\n                )\\n            );\\n\\n        (uint256 amountFrom, ) = bentoBox.withdraw(fromToken, address(this), address(pair), 0, shareFrom);\\n\\n        (uint256 reserve0, uint256 reserve1, ) = pair.getReserves();\\n        uint256 amountTo;\\n        if (toToken > fromToken) {\\n            amountTo = getAmountOut(amountFrom, reserve0, reserve1);\\n            pair.swap(0, amountTo, address(bentoBox), new bytes(0));\\n        } else {\\n            amountTo = getAmountOut(amountFrom, reserve1, reserve0);\\n            pair.swap(amountTo, 0, address(bentoBox), new bytes(0));\\n        }\\n        (, shareReturned) = bentoBox.deposit(toToken, address(bentoBox), recipient, amountTo, 0);\\n        extraShare = shareReturned.sub(shareToMin);\\n    }\\n\\n    // Swaps to an exact amount, from a flexible input amount\\n    /// @notice Calculates the amount of token 'from' needed to complete the swap (amountFrom),\\n    /// this should be less than or equal to amountFromMax.\\n    /// Withdraws 'amountFrom' of token 'from' from the BentoBox account for this swapper.\\n    /// Swaps it for exactly 'exactAmountTo' of token 'to'.\\n    /// Transfers the swapped tokens of 'to' into the BentoBox using a plain ERC20 transfer.\\n    /// Transfers allocated, but unused 'from' tokens within the BentoBox to 'refundTo' (amountFromMax - amountFrom).\\n    /// Returns the amount of 'from' tokens withdrawn from BentoBox (amountFrom).\\n    /// (The BentoBox skim function will be used by the caller to get the swapped funds).\\n    function swapExact(\\n        IERC20 fromToken,\\n        IERC20 toToken,\\n        address recipient,\\n        address refundTo,\\n        uint256 shareFromSupplied,\\n        uint256 shareToExact\\n    ) public returns (uint256 shareUsed, uint256 shareReturned) {\\n        IUniswapV2Pair pair;\\n        {\\n            (IERC20 token0, IERC20 token1) = fromToken < toToken ? (fromToken, toToken) : (toToken, fromToken);\\n            pair = IUniswapV2Pair(\\n                uint256(\\n                    keccak256(abi.encodePacked(hex\\\"ff\\\", factory, keccak256(abi.encodePacked(address(token0), address(token1))), pairCodeHash))\\n                )\\n            );\\n        }\\n        (uint256 reserve0, uint256 reserve1, ) = pair.getReserves();\\n\\n        uint256 amountToExact = bentoBox.toAmount(toToken, shareToExact, true);\\n\\n        uint256 amountFrom;\\n        if (toToken > fromToken) {\\n            amountFrom = getAmountIn(amountToExact, reserve0, reserve1);\\n            (, shareUsed) = bentoBox.withdraw(fromToken, address(this), address(pair), amountFrom, 0);\\n            pair.swap(0, amountToExact, address(bentoBox), \\\"\\\");\\n        } else {\\n            amountFrom = getAmountIn(amountToExact, reserve1, reserve0);\\n            (, shareUsed) = bentoBox.withdraw(fromToken, address(this), address(pair), amountFrom, 0);\\n            pair.swap(amountToExact, 0, address(bentoBox), \\\"\\\");\\n        }\\n        bentoBox.deposit(toToken, address(bentoBox), recipient, 0, shareToExact);\\n        shareReturned = shareFromSupplied.sub(shareUsed);\\n        if (shareReturned > 0) {\\n            bentoBox.transfer(fromToken, address(this), refundTo, shareReturned);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xa4f3c014fd3ff555fbf4387354077c8276660de72c1d8d4c81ec85d528e771b6\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        },
        "IUniswapV2Pair": {
          "abi": [
            {
              "inputs": [],
              "name": "getReserves",
              "outputs": [
                {
                  "internalType": "uint112",
                  "name": "reserve0",
                  "type": "uint112"
                },
                {
                  "internalType": "uint112",
                  "name": "reserve1",
                  "type": "uint112"
                },
                {
                  "internalType": "uint32",
                  "name": "blockTimestampLast",
                  "type": "uint32"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amount0Out",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1Out",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "swap",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "token0",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "getReserves()": "0902f1ac",
              "swap(uint256,uint256,address,bytes)": "022c0d9f",
              "token0()": "0dfe1681"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getReserves\",\"outputs\":[{\"internalType\":\"uint112\",\"name\":\"reserve0\",\"type\":\"uint112\"},{\"internalType\":\"uint112\",\"name\":\"reserve1\",\"type\":\"uint112\"},{\"internalType\":\"uint32\",\"name\":\"blockTimestampLast\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0Out\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Out\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"swap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token0\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/flat/SushiSwapSwapperFlat.sol\":\"IUniswapV2Pair\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":350},\"remappings\":[]},\"sources\":{\"contracts/flat/SushiSwapSwapperFlat.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.6.12;\\n\\n// Version 11-Mar-2021\\n\\n// File @boringcrypto/boring-solidity/contracts/libraries/BoringMath.sol@v1.1.0\\n// License-Identifier: MIT\\n\\n/// @notice A library for performing overflow-/underflow-safe math,\\n/// updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math).\\nlibrary BoringMath {\\n    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require((c = a + b) >= b, \\\"BoringMath: Add Overflow\\\");\\n    }\\n\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require((c = a - b) <= a, \\\"BoringMath: Underflow\\\");\\n    }\\n\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require(b == 0 || (c = a * b) / b == a, \\\"BoringMath: Mul Overflow\\\");\\n    }\\n}\\n\\n// File @sushiswap/core/contracts/uniswapv2/interfaces/IUniswapV2Factory.sol@v1.4.2\\n// License-Identifier: GPL-3.0\\ninterface IUniswapV2Factory {\\n    function getPair(address tokenA, address tokenB) external view returns (address pair);\\n}\\n\\n// File @sushiswap/core/contracts/uniswapv2/interfaces/IUniswapV2Pair.sol@v1.4.2\\n// License-Identifier: GPL-3.0\\ninterface IUniswapV2Pair {\\n    function token0() external view returns (address);\\n\\n    function getReserves()\\n        external\\n        view\\n        returns (\\n            uint112 reserve0,\\n            uint112 reserve1,\\n            uint32 blockTimestampLast\\n        );\\n\\n    function swap(\\n        uint256 amount0Out,\\n        uint256 amount1Out,\\n        address to,\\n        bytes calldata data\\n    ) external;\\n}\\n\\n// File @boringcrypto/boring-solidity/contracts/interfaces/IERC20.sol@v1.1.0\\n// License-Identifier: MIT\\ninterface IERC20 {\\n\\n}\\n\\n// File @sushiswap/bentobox-sdk/contracts/IBentoBoxV1.sol@v1.0.0\\n// License-Identifier: MIT\\ninterface IBentoBoxV1 {\\n    function deposit(\\n        IERC20 token_,\\n        address from,\\n        address to,\\n        uint256 amount,\\n        uint256 share\\n    ) external payable returns (uint256 amountOut, uint256 shareOut);\\n\\n    function toAmount(\\n        IERC20 token,\\n        uint256 share,\\n        bool roundUp\\n    ) external view returns (uint256 amount);\\n\\n    function toShare(\\n        IERC20 token,\\n        uint256 amount,\\n        bool roundUp\\n    ) external view returns (uint256 share);\\n\\n    function transfer(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 share\\n    ) external;\\n\\n    function withdraw(\\n        IERC20 token_,\\n        address from,\\n        address to,\\n        uint256 amount,\\n        uint256 share\\n    ) external returns (uint256 amountOut, uint256 shareOut);\\n}\\n\\n// File contracts/swappers/SushiSwapSwapper.sol\\n// License-Identifier: MIT\\ncontract SushiSwapSwapperV1 {\\n    using BoringMath for uint256;\\n\\n    // Local variables\\n    IBentoBoxV1 public immutable bentoBox;\\n    IUniswapV2Factory public immutable factory;\\n    bytes32 public pairCodeHash;\\n\\n    constructor(\\n        IBentoBoxV1 bentoBox_,\\n        IUniswapV2Factory factory_,\\n        bytes32 pairCodeHash_\\n    ) public {\\n        bentoBox = bentoBox_;\\n        factory = factory_;\\n        pairCodeHash = pairCodeHash_;\\n    }\\n\\n    // Given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset\\n    function getAmountOut(\\n        uint256 amountIn,\\n        uint256 reserveIn,\\n        uint256 reserveOut\\n    ) internal pure returns (uint256 amountOut) {\\n        uint256 amountInWithFee = amountIn.mul(997);\\n        uint256 numerator = amountInWithFee.mul(reserveOut);\\n        uint256 denominator = reserveIn.mul(1000).add(amountInWithFee);\\n        amountOut = numerator / denominator;\\n    }\\n\\n    // Given an output amount of an asset and pair reserves, returns a required input amount of the other asset\\n    function getAmountIn(\\n        uint256 amountOut,\\n        uint256 reserveIn,\\n        uint256 reserveOut\\n    ) internal pure returns (uint256 amountIn) {\\n        uint256 numerator = reserveIn.mul(amountOut).mul(1000);\\n        uint256 denominator = reserveOut.sub(amountOut).mul(997);\\n        amountIn = (numerator / denominator).add(1);\\n    }\\n\\n    // Swaps to a flexible amount, from an exact input amount\\n    /// @notice Withdraws 'amountFrom' of token 'from' from the BentoBox account for this swapper.\\n    /// Swaps it for at least 'amountToMin' of token 'to'.\\n    /// Transfers the swapped tokens of 'to' into the BentoBox using a plain ERC20 transfer.\\n    /// Returns the amount of tokens 'to' transferred to BentoBox.\\n    /// (The BentoBox skim function will be used by the caller to get the swapped funds).\\n    function swap(\\n        IERC20 fromToken,\\n        IERC20 toToken,\\n        address recipient,\\n        uint256 shareToMin,\\n        uint256 shareFrom\\n    ) public returns (uint256 extraShare, uint256 shareReturned) {\\n        (IERC20 token0, IERC20 token1) = fromToken < toToken ? (fromToken, toToken) : (toToken, fromToken);\\n        IUniswapV2Pair pair =\\n            IUniswapV2Pair(\\n                uint256(\\n                    keccak256(abi.encodePacked(hex\\\"ff\\\", factory, keccak256(abi.encodePacked(address(token0), address(token1))), pairCodeHash))\\n                )\\n            );\\n\\n        (uint256 amountFrom, ) = bentoBox.withdraw(fromToken, address(this), address(pair), 0, shareFrom);\\n\\n        (uint256 reserve0, uint256 reserve1, ) = pair.getReserves();\\n        uint256 amountTo;\\n        if (toToken > fromToken) {\\n            amountTo = getAmountOut(amountFrom, reserve0, reserve1);\\n            pair.swap(0, amountTo, address(bentoBox), new bytes(0));\\n        } else {\\n            amountTo = getAmountOut(amountFrom, reserve1, reserve0);\\n            pair.swap(amountTo, 0, address(bentoBox), new bytes(0));\\n        }\\n        (, shareReturned) = bentoBox.deposit(toToken, address(bentoBox), recipient, amountTo, 0);\\n        extraShare = shareReturned.sub(shareToMin);\\n    }\\n\\n    // Swaps to an exact amount, from a flexible input amount\\n    /// @notice Calculates the amount of token 'from' needed to complete the swap (amountFrom),\\n    /// this should be less than or equal to amountFromMax.\\n    /// Withdraws 'amountFrom' of token 'from' from the BentoBox account for this swapper.\\n    /// Swaps it for exactly 'exactAmountTo' of token 'to'.\\n    /// Transfers the swapped tokens of 'to' into the BentoBox using a plain ERC20 transfer.\\n    /// Transfers allocated, but unused 'from' tokens within the BentoBox to 'refundTo' (amountFromMax - amountFrom).\\n    /// Returns the amount of 'from' tokens withdrawn from BentoBox (amountFrom).\\n    /// (The BentoBox skim function will be used by the caller to get the swapped funds).\\n    function swapExact(\\n        IERC20 fromToken,\\n        IERC20 toToken,\\n        address recipient,\\n        address refundTo,\\n        uint256 shareFromSupplied,\\n        uint256 shareToExact\\n    ) public returns (uint256 shareUsed, uint256 shareReturned) {\\n        IUniswapV2Pair pair;\\n        {\\n            (IERC20 token0, IERC20 token1) = fromToken < toToken ? (fromToken, toToken) : (toToken, fromToken);\\n            pair = IUniswapV2Pair(\\n                uint256(\\n                    keccak256(abi.encodePacked(hex\\\"ff\\\", factory, keccak256(abi.encodePacked(address(token0), address(token1))), pairCodeHash))\\n                )\\n            );\\n        }\\n        (uint256 reserve0, uint256 reserve1, ) = pair.getReserves();\\n\\n        uint256 amountToExact = bentoBox.toAmount(toToken, shareToExact, true);\\n\\n        uint256 amountFrom;\\n        if (toToken > fromToken) {\\n            amountFrom = getAmountIn(amountToExact, reserve0, reserve1);\\n            (, shareUsed) = bentoBox.withdraw(fromToken, address(this), address(pair), amountFrom, 0);\\n            pair.swap(0, amountToExact, address(bentoBox), \\\"\\\");\\n        } else {\\n            amountFrom = getAmountIn(amountToExact, reserve1, reserve0);\\n            (, shareUsed) = bentoBox.withdraw(fromToken, address(this), address(pair), amountFrom, 0);\\n            pair.swap(amountToExact, 0, address(bentoBox), \\\"\\\");\\n        }\\n        bentoBox.deposit(toToken, address(bentoBox), recipient, 0, shareToExact);\\n        shareReturned = shareFromSupplied.sub(shareUsed);\\n        if (shareReturned > 0) {\\n            bentoBox.transfer(fromToken, address(this), refundTo, shareReturned);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xa4f3c014fd3ff555fbf4387354077c8276660de72c1d8d4c81ec85d528e771b6\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        },
        "SushiSwapSwapperV1": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "contract IBentoBoxV1",
                  "name": "bentoBox_",
                  "type": "address"
                },
                {
                  "internalType": "contract IUniswapV2Factory",
                  "name": "factory_",
                  "type": "address"
                },
                {
                  "internalType": "bytes32",
                  "name": "pairCodeHash_",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "bentoBox",
              "outputs": [
                {
                  "internalType": "contract IBentoBoxV1",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "factory",
              "outputs": [
                {
                  "internalType": "contract IUniswapV2Factory",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pairCodeHash",
              "outputs": [
                {
                  "internalType": "bytes32",
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "contract IERC20",
                  "name": "fromToken",
                  "type": "address"
                },
                {
                  "internalType": "contract IERC20",
                  "name": "toToken",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "shareToMin",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "shareFrom",
                  "type": "uint256"
                }
              ],
              "name": "swap",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "extraShare",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "shareReturned",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "contract IERC20",
                  "name": "fromToken",
                  "type": "address"
                },
                {
                  "internalType": "contract IERC20",
                  "name": "toToken",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "refundTo",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "shareFromSupplied",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "shareToExact",
                  "type": "uint256"
                }
              ],
              "name": "swapExact",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "shareUsed",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "shareReturned",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60c060405234801561001057600080fd5b506040516110243803806110248339818101604052606081101561003357600080fd5b50805160208201516040909201516001600160601b0319606092831b81166080529290911b90911660a05260005560805160601c60a05160601c610f596100cb600039806101ca528061080852806108a95250806102e05280610378528061046e52806104fb52806105f1528061068a528061076952806107de52806109435280610a925280610bb05280610cae5250610f596000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80634622be901461005c5780636b2ace87146100c15780639aab9248146100e5578063c45a0155146100ff578063e343fe1214610107575b600080fd5b6100a8600480360360c081101561007257600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a00135610149565b6040805192835260208301919091528051918290030190f35b6100c96107dc565b604080516001600160a01b039092168252519081900360200190f35b6100ed610800565b60408051918252519081900360200190f35b6100c9610806565b6100a8600480360360a081101561011d57600080fd5b506001600160a01b0381358116916020810135821691604082013516906060810135906080013561082a565b6000806000806000896001600160a01b03168b6001600160a01b03161061017157898b610174565b8a8a5b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b8116603483015282516028818403018152604883018452805190850120600080546001600160f81b031960688601527f0000000000000000000000000000000000000000000000000000000000000000881b9093166069850152607d840191909152609d808401929092528351808403909201825260bd830180855282519290950191909120630240bc6b60e21b90945291519296509094508493506001600160a01b03861692630902f1ac9260c180840193829003018186803b15801561026057600080fd5b505afa158015610274573d6000803e3d6000fd5b505050506040513d606081101561028a57600080fd5b50805160209182015160408051630acc462360e31b81526001600160a01b038f81166004830152602482018c90526001604483015291516dffffffffffffffffffffffffffff94851697509390921694506000937f0000000000000000000000000000000000000000000000000000000000000000909116926356623118926064808201939291829003018186803b15801561032557600080fd5b505afa158015610339573d6000803e3d6000fd5b505050506040513d602081101561034f57600080fd5b5051905060006001600160a01b03808e16908d1611156104ec57610374828585610d65565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166397da6d308e30888560006040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001846001600160a01b03168152602001838152602001828152602001955050505050506040805180830381600087803b15801561041757600080fd5b505af115801561042b573d6000803e3d6000fd5b505050506040513d604081101561044157600080fd5b50602001516040805163022c0d9f60e01b8152600060048201819052602482018690526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116604484015260806064840152608483018290529251939a509188169263022c0d9f9260c48084019391929182900301818387803b1580156104cf57600080fd5b505af11580156104e3573d6000803e3d6000fd5b5050505061066b565b6104f7828486610d65565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166397da6d308e30888560006040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001846001600160a01b03168152602001838152602001828152602001955050505050506040805180830381600087803b15801561059a57600080fd5b505af11580156105ae573d6000803e3d6000fd5b505050506040513d60408110156105c457600080fd5b50602001516040805163022c0d9f60e01b8152600481018590526000602482018190526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116604484015260806064840152608483018290529251939a509188169263022c0d9f9260c48084019391929182900301818387803b15801561065257600080fd5b505af1158015610666573d6000803e3d6000fd5b505050505b6040805162ae511b60e21b81526001600160a01b038e811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301819052908e166044830152600060648301819052608483018c9052835191936302b9446c9360a4808201949293918390030190829087803b1580156106f357600080fd5b505af1158015610707573d6000803e3d6000fd5b505050506040513d604081101561071d57600080fd5b5061072a90508988610db3565b955085156107cc5760408051633c6340f360e21b81526001600160a01b038f811660048301523060248301528c811660448301526064820189905291517f00000000000000000000000000000000000000000000000000000000000000009092169163f18d03cc9160848082019260009290919082900301818387803b1580156107b357600080fd5b505af11580156107c7573d6000803e3d6000fd5b505050505b5050505050965096945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600080876001600160a01b0316896001600160a01b031610610850578789610853565b88885b604080516bffffffffffffffffffffffff19606085811b821660208085019190915285821b8316603485015284516028818603018152604885018652805190820120600080546001600160f81b031960688801527f000000000000000000000000000000000000000000000000000000000000000090941b9094166069860152607d850152609d808501929092528451808503909201825260bd84018086528251929091019190912063097da6d360e41b9091526001600160a01b038f811660c18501523060e1850152818116610101850152610121840183905261014184018c905284519698509496509490937f000000000000000000000000000000000000000000000000000000000000000016926397da6d3092610161808201939182900301818787803b15801561098757600080fd5b505af115801561099b573d6000803e3d6000fd5b505050506040513d60408110156109b157600080fd5b505160408051630240bc6b60e21b8152905191925060009182916001600160a01b03861691630902f1ac91600480820192606092909190829003018186803b1580156109fc57600080fd5b505afa158015610a10573d6000803e3d6000fd5b505050506040513d6060811015610a2657600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905060006001600160a01b03808f16908e161115610b7a57610a67848484610e11565b604080516000808252602082019283905263022c0d9f60e01b835260248201818152604483018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b038181166064860152608060848601908152855160a48701819052979850908c169663022c0d9f96949589959394909390929160c4850191908083838b5b83811015610b0e578181015183820152602001610af6565b50505050905090810190601f168015610b3b5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015610b5d57600080fd5b505af1158015610b71573d6000803e3d6000fd5b50505050610c8f565b610b85848385610e11565b604080516000808252602082019283905263022c0d9f60e01b835260248201848152604483018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b038181166064860152608060848601908152855160a48701819052979850908c169663022c0d9f9689969394929160c4850191908083838a5b83811015610c27578181015183820152602001610c0f565b50505050905090810190601f168015610c545780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015610c7657600080fd5b505af1158015610c8a573d6000803e3d6000fd5b505050505b6040805162ae511b60e21b81526001600160a01b038f811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301819052908f16604483015260648201849052600060848301819052835191936302b9446c9360a4808201949293918390030190829087803b158015610d1757600080fd5b505af1158015610d2b573d6000803e3d6000fd5b505050506040513d6040811015610d4157600080fd5b50602001519750610d52888c610db3565b9850505050505050509550959350505050565b600080610d7e6103e8610d788688610e5f565b90610e5f565b90506000610d926103e5610d788689610db3565b9050610da96001828481610da257fe5b0490610ecb565b9695505050505050565b80820382811115610e0b576040805162461bcd60e51b815260206004820152601560248201527f426f72696e674d6174683a20556e646572666c6f770000000000000000000000604482015290519081900360640190fd5b92915050565b600080610e20856103e5610e5f565b90506000610e2e8285610e5f565b90506000610e4883610e42886103e8610e5f565b90610ecb565b9050808281610e5357fe5b04979650505050505050565b6000811580610e7a57505080820282828281610e7757fe5b04145b610e0b576040805162461bcd60e51b815260206004820152601860248201527f426f72696e674d6174683a204d756c204f766572666c6f770000000000000000604482015290519081900360640190fd5b81810181811015610e0b576040805162461bcd60e51b815260206004820152601860248201527f426f72696e674d6174683a20416464204f766572666c6f770000000000000000604482015290519081900360640190fdfea2646970667358221220b0821ad68e3c1366868c70647d159c133d710b42d14e32c1ac281849614395bd64736f6c634300060c0033",
              "opcodes": "PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x1024 CODESIZE SUB DUP1 PUSH2 0x1024 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 SWAP1 SWAP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP3 DUP4 SHL DUP2 AND PUSH1 0x80 MSTORE SWAP3 SWAP1 SWAP2 SHL SWAP1 SWAP2 AND PUSH1 0xA0 MSTORE PUSH1 0x0 SSTORE PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH2 0xF59 PUSH2 0xCB PUSH1 0x0 CODECOPY DUP1 PUSH2 0x1CA MSTORE DUP1 PUSH2 0x808 MSTORE DUP1 PUSH2 0x8A9 MSTORE POP DUP1 PUSH2 0x2E0 MSTORE DUP1 PUSH2 0x378 MSTORE DUP1 PUSH2 0x46E MSTORE DUP1 PUSH2 0x4FB MSTORE DUP1 PUSH2 0x5F1 MSTORE DUP1 PUSH2 0x68A MSTORE DUP1 PUSH2 0x769 MSTORE DUP1 PUSH2 0x7DE MSTORE DUP1 PUSH2 0x943 MSTORE DUP1 PUSH2 0xA92 MSTORE DUP1 PUSH2 0xBB0 MSTORE DUP1 PUSH2 0xCAE MSTORE POP PUSH2 0xF59 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x57 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4622BE90 EQ PUSH2 0x5C JUMPI DUP1 PUSH4 0x6B2ACE87 EQ PUSH2 0xC1 JUMPI DUP1 PUSH4 0x9AAB9248 EQ PUSH2 0xE5 JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0xFF JUMPI DUP1 PUSH4 0xE343FE12 EQ PUSH2 0x107 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xC0 DUP2 LT ISZERO PUSH2 0x72 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xA0 ADD CALLDATALOAD PUSH2 0x149 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0xC9 PUSH2 0x7DC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xED PUSH2 0x800 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xC9 PUSH2 0x806 JUMP JUMPDEST PUSH2 0xA8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x11D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x80 ADD CALLDATALOAD PUSH2 0x82A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x171 JUMPI DUP10 DUP12 PUSH2 0x174 JUMP JUMPDEST DUP11 DUP11 JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT PUSH1 0x60 SWAP5 DUP6 SHL DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 DUP6 SHL DUP2 AND PUSH1 0x34 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x28 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x48 DUP4 ADD DUP5 MSTORE DUP1 MLOAD SWAP1 DUP6 ADD KECCAK256 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT PUSH1 0x68 DUP7 ADD MSTORE PUSH32 0x0 DUP9 SHL SWAP1 SWAP4 AND PUSH1 0x69 DUP6 ADD MSTORE PUSH1 0x7D DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x9D DUP1 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP3 ADD DUP3 MSTORE PUSH1 0xBD DUP4 ADD DUP1 DUP6 MSTORE DUP3 MLOAD SWAP3 SWAP1 SWAP6 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH4 0x240BC6B PUSH1 0xE2 SHL SWAP1 SWAP5 MSTORE SWAP2 MLOAD SWAP3 SWAP7 POP SWAP1 SWAP5 POP DUP5 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP3 PUSH4 0x902F1AC SWAP3 PUSH1 0xC1 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x260 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x274 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x28A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xACC4623 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP13 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x44 DUP4 ADD MSTORE SWAP2 MLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND SWAP8 POP SWAP4 SWAP1 SWAP3 AND SWAP5 POP PUSH1 0x0 SWAP4 PUSH32 0x0 SWAP1 SWAP2 AND SWAP3 PUSH4 0x56623118 SWAP3 PUSH1 0x64 DUP1 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x325 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x339 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x34F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP15 AND SWAP1 DUP14 AND GT ISZERO PUSH2 0x4EC JUMPI PUSH2 0x374 DUP3 DUP6 DUP6 PUSH2 0xD65 JUMP JUMPDEST SWAP1 POP PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x97DA6D30 DUP15 ADDRESS DUP9 DUP6 PUSH1 0x0 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP6 POP POP POP POP POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x417 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x42B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x441 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x22C0D9F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x80 PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x84 DUP4 ADD DUP3 SWAP1 MSTORE SWAP3 MLOAD SWAP4 SWAP11 POP SWAP2 DUP9 AND SWAP3 PUSH4 0x22C0D9F SWAP3 PUSH1 0xC4 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4E3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x66B JUMP JUMPDEST PUSH2 0x4F7 DUP3 DUP5 DUP7 PUSH2 0xD65 JUMP JUMPDEST SWAP1 POP PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x97DA6D30 DUP15 ADDRESS DUP9 DUP6 PUSH1 0x0 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP6 POP POP POP POP POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x59A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5AE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x5C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x22C0D9F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x0 PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x80 PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x84 DUP4 ADD DUP3 SWAP1 MSTORE SWAP3 MLOAD SWAP4 SWAP11 POP SWAP2 DUP9 AND SWAP3 PUSH4 0x22C0D9F SWAP3 PUSH1 0xC4 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x652 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x666 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH3 0xAE511B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP15 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 DUP2 AND PUSH1 0x24 DUP4 ADD DUP2 SWAP1 MSTORE SWAP1 DUP15 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x0 PUSH1 0x64 DUP4 ADD DUP2 SWAP1 MSTORE PUSH1 0x84 DUP4 ADD DUP13 SWAP1 MSTORE DUP4 MLOAD SWAP2 SWAP4 PUSH4 0x2B9446C SWAP4 PUSH1 0xA4 DUP1 DUP3 ADD SWAP5 SWAP3 SWAP4 SWAP2 DUP4 SWAP1 SUB ADD SWAP1 DUP3 SWAP1 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x707 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x71D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x72A SWAP1 POP DUP10 DUP9 PUSH2 0xDB3 JUMP JUMPDEST SWAP6 POP DUP6 ISZERO PUSH2 0x7CC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH4 0x3C6340F3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE DUP13 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD DUP10 SWAP1 MSTORE SWAP2 MLOAD PUSH32 0x0 SWAP1 SWAP3 AND SWAP2 PUSH4 0xF18D03CC SWAP2 PUSH1 0x84 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7C7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP POP POP POP SWAP7 POP SWAP7 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x850 JUMPI DUP8 DUP10 PUSH2 0x853 JUMP JUMPDEST DUP9 DUP9 JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT PUSH1 0x60 DUP6 DUP2 SHL DUP3 AND PUSH1 0x20 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP6 DUP3 SHL DUP4 AND PUSH1 0x34 DUP6 ADD MSTORE DUP5 MLOAD PUSH1 0x28 DUP2 DUP7 SUB ADD DUP2 MSTORE PUSH1 0x48 DUP6 ADD DUP7 MSTORE DUP1 MLOAD SWAP1 DUP3 ADD KECCAK256 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT PUSH1 0x68 DUP9 ADD MSTORE PUSH32 0x0 SWAP1 SWAP5 SHL SWAP1 SWAP5 AND PUSH1 0x69 DUP7 ADD MSTORE PUSH1 0x7D DUP6 ADD MSTORE PUSH1 0x9D DUP1 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP5 MLOAD DUP1 DUP6 SUB SWAP1 SWAP3 ADD DUP3 MSTORE PUSH1 0xBD DUP5 ADD DUP1 DUP7 MSTORE DUP3 MLOAD SWAP3 SWAP1 SWAP2 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH4 0x97DA6D3 PUSH1 0xE4 SHL SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 DUP2 AND PUSH1 0xC1 DUP6 ADD MSTORE ADDRESS PUSH1 0xE1 DUP6 ADD MSTORE DUP2 DUP2 AND PUSH2 0x101 DUP6 ADD MSTORE PUSH2 0x121 DUP5 ADD DUP4 SWAP1 MSTORE PUSH2 0x141 DUP5 ADD DUP13 SWAP1 MSTORE DUP5 MLOAD SWAP7 SWAP9 POP SWAP5 SWAP7 POP SWAP5 SWAP1 SWAP4 PUSH32 0x0 AND SWAP3 PUSH4 0x97DA6D30 SWAP3 PUSH2 0x161 DUP1 DUP3 ADD SWAP4 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP8 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x987 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x99B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x9B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x240BC6B PUSH1 0xE2 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x902F1AC SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x60 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x9FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA10 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xA26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP4 POP AND SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP16 AND SWAP1 DUP15 AND GT ISZERO PUSH2 0xB7A JUMPI PUSH2 0xA67 DUP5 DUP5 DUP5 PUSH2 0xE11 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 DUP4 SWAP1 MSTORE PUSH4 0x22C0D9F PUSH1 0xE0 SHL DUP4 MSTORE PUSH1 0x24 DUP3 ADD DUP2 DUP2 MSTORE PUSH1 0x44 DUP4 ADD DUP6 SWAP1 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x64 DUP7 ADD MSTORE PUSH1 0x80 PUSH1 0x84 DUP7 ADD SWAP1 DUP2 MSTORE DUP6 MLOAD PUSH1 0xA4 DUP8 ADD DUP2 SWAP1 MSTORE SWAP8 SWAP9 POP SWAP1 DUP13 AND SWAP7 PUSH4 0x22C0D9F SWAP7 SWAP5 SWAP6 DUP10 SWAP6 SWAP4 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 SWAP2 PUSH1 0xC4 DUP6 ADD SWAP2 SWAP1 DUP1 DUP4 DUP4 DUP12 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xB0E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xAF6 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xB3B JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP6 POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB5D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB71 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0xC8F JUMP JUMPDEST PUSH2 0xB85 DUP5 DUP4 DUP6 PUSH2 0xE11 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 DUP4 SWAP1 MSTORE PUSH4 0x22C0D9F PUSH1 0xE0 SHL DUP4 MSTORE PUSH1 0x24 DUP3 ADD DUP5 DUP2 MSTORE PUSH1 0x44 DUP4 ADD DUP3 SWAP1 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x64 DUP7 ADD MSTORE PUSH1 0x80 PUSH1 0x84 DUP7 ADD SWAP1 DUP2 MSTORE DUP6 MLOAD PUSH1 0xA4 DUP8 ADD DUP2 SWAP1 MSTORE SWAP8 SWAP9 POP SWAP1 DUP13 AND SWAP7 PUSH4 0x22C0D9F SWAP7 DUP10 SWAP7 SWAP4 SWAP5 SWAP3 SWAP2 PUSH1 0xC4 DUP6 ADD SWAP2 SWAP1 DUP1 DUP4 DUP4 DUP11 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xC27 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xC0F JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xC54 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP6 POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC76 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC8A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH3 0xAE511B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 DUP2 AND PUSH1 0x24 DUP4 ADD DUP2 SWAP1 MSTORE SWAP1 DUP16 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0x0 PUSH1 0x84 DUP4 ADD DUP2 SWAP1 MSTORE DUP4 MLOAD SWAP2 SWAP4 PUSH4 0x2B9446C SWAP4 PUSH1 0xA4 DUP1 DUP3 ADD SWAP5 SWAP3 SWAP4 SWAP2 DUP4 SWAP1 SUB ADD SWAP1 DUP3 SWAP1 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD17 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD2B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xD41 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 ADD MLOAD SWAP8 POP PUSH2 0xD52 DUP9 DUP13 PUSH2 0xDB3 JUMP JUMPDEST SWAP9 POP POP POP POP POP POP POP POP SWAP6 POP SWAP6 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xD7E PUSH2 0x3E8 PUSH2 0xD78 DUP7 DUP9 PUSH2 0xE5F JUMP JUMPDEST SWAP1 PUSH2 0xE5F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xD92 PUSH2 0x3E5 PUSH2 0xD78 DUP7 DUP10 PUSH2 0xDB3 JUMP JUMPDEST SWAP1 POP PUSH2 0xDA9 PUSH1 0x1 DUP3 DUP5 DUP2 PUSH2 0xDA2 JUMPI INVALID JUMPDEST DIV SWAP1 PUSH2 0xECB JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0xE0B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x426F72696E674D6174683A20556E646572666C6F770000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xE20 DUP6 PUSH2 0x3E5 PUSH2 0xE5F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xE2E DUP3 DUP6 PUSH2 0xE5F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xE48 DUP4 PUSH2 0xE42 DUP9 PUSH2 0x3E8 PUSH2 0xE5F JUMP JUMPDEST SWAP1 PUSH2 0xECB JUMP JUMPDEST SWAP1 POP DUP1 DUP3 DUP2 PUSH2 0xE53 JUMPI INVALID JUMPDEST DIV SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0xE7A JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0xE77 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0xE0B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x426F72696E674D6174683A204D756C204F766572666C6F770000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP2 ADD DUP2 DUP2 LT ISZERO PUSH2 0xE0B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x426F72696E674D6174683A20416464204F766572666C6F770000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB0 DUP3 BYTE 0xD6 DUP15 EXTCODECOPY SGT PUSH7 0x868C70647D159C SGT RETURNDATASIZE PUSH18 0xB42D14E32C1AC281849614395BD64736F6C PUSH4 0x4300060C STOP CALLER ",
              "sourceMap": "2688:5563:0:-:0;;;2905:226;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2905:226:0;;;;;;;;;;;-1:-1:-1;;;;;;2905:226:0;3038:20;;;;;;;3068:18;;;;;;;;;3096:12;:28;2688:5563;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {
                "185": [
                  {
                    "length": 32,
                    "start": 736
                  },
                  {
                    "length": 32,
                    "start": 888
                  },
                  {
                    "length": 32,
                    "start": 1134
                  },
                  {
                    "length": 32,
                    "start": 1275
                  },
                  {
                    "length": 32,
                    "start": 1521
                  },
                  {
                    "length": 32,
                    "start": 1674
                  },
                  {
                    "length": 32,
                    "start": 1897
                  },
                  {
                    "length": 32,
                    "start": 2014
                  },
                  {
                    "length": 32,
                    "start": 2371
                  },
                  {
                    "length": 32,
                    "start": 2706
                  },
                  {
                    "length": 32,
                    "start": 2992
                  },
                  {
                    "length": 32,
                    "start": 3246
                  }
                ],
                "187": [
                  {
                    "length": 32,
                    "start": 458
                  },
                  {
                    "length": 32,
                    "start": 2056
                  },
                  {
                    "length": 32,
                    "start": 2217
                  }
                ]
              },
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106100575760003560e01c80634622be901461005c5780636b2ace87146100c15780639aab9248146100e5578063c45a0155146100ff578063e343fe1214610107575b600080fd5b6100a8600480360360c081101561007257600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a00135610149565b6040805192835260208301919091528051918290030190f35b6100c96107dc565b604080516001600160a01b039092168252519081900360200190f35b6100ed610800565b60408051918252519081900360200190f35b6100c9610806565b6100a8600480360360a081101561011d57600080fd5b506001600160a01b0381358116916020810135821691604082013516906060810135906080013561082a565b6000806000806000896001600160a01b03168b6001600160a01b03161061017157898b610174565b8a8a5b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b8116603483015282516028818403018152604883018452805190850120600080546001600160f81b031960688601527f0000000000000000000000000000000000000000000000000000000000000000881b9093166069850152607d840191909152609d808401929092528351808403909201825260bd830180855282519290950191909120630240bc6b60e21b90945291519296509094508493506001600160a01b03861692630902f1ac9260c180840193829003018186803b15801561026057600080fd5b505afa158015610274573d6000803e3d6000fd5b505050506040513d606081101561028a57600080fd5b50805160209182015160408051630acc462360e31b81526001600160a01b038f81166004830152602482018c90526001604483015291516dffffffffffffffffffffffffffff94851697509390921694506000937f0000000000000000000000000000000000000000000000000000000000000000909116926356623118926064808201939291829003018186803b15801561032557600080fd5b505afa158015610339573d6000803e3d6000fd5b505050506040513d602081101561034f57600080fd5b5051905060006001600160a01b03808e16908d1611156104ec57610374828585610d65565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166397da6d308e30888560006040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001846001600160a01b03168152602001838152602001828152602001955050505050506040805180830381600087803b15801561041757600080fd5b505af115801561042b573d6000803e3d6000fd5b505050506040513d604081101561044157600080fd5b50602001516040805163022c0d9f60e01b8152600060048201819052602482018690526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116604484015260806064840152608483018290529251939a509188169263022c0d9f9260c48084019391929182900301818387803b1580156104cf57600080fd5b505af11580156104e3573d6000803e3d6000fd5b5050505061066b565b6104f7828486610d65565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166397da6d308e30888560006040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001846001600160a01b03168152602001838152602001828152602001955050505050506040805180830381600087803b15801561059a57600080fd5b505af11580156105ae573d6000803e3d6000fd5b505050506040513d60408110156105c457600080fd5b50602001516040805163022c0d9f60e01b8152600481018590526000602482018190526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116604484015260806064840152608483018290529251939a509188169263022c0d9f9260c48084019391929182900301818387803b15801561065257600080fd5b505af1158015610666573d6000803e3d6000fd5b505050505b6040805162ae511b60e21b81526001600160a01b038e811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301819052908e166044830152600060648301819052608483018c9052835191936302b9446c9360a4808201949293918390030190829087803b1580156106f357600080fd5b505af1158015610707573d6000803e3d6000fd5b505050506040513d604081101561071d57600080fd5b5061072a90508988610db3565b955085156107cc5760408051633c6340f360e21b81526001600160a01b038f811660048301523060248301528c811660448301526064820189905291517f00000000000000000000000000000000000000000000000000000000000000009092169163f18d03cc9160848082019260009290919082900301818387803b1580156107b357600080fd5b505af11580156107c7573d6000803e3d6000fd5b505050505b5050505050965096945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600080876001600160a01b0316896001600160a01b031610610850578789610853565b88885b604080516bffffffffffffffffffffffff19606085811b821660208085019190915285821b8316603485015284516028818603018152604885018652805190820120600080546001600160f81b031960688801527f000000000000000000000000000000000000000000000000000000000000000090941b9094166069860152607d850152609d808501929092528451808503909201825260bd84018086528251929091019190912063097da6d360e41b9091526001600160a01b038f811660c18501523060e1850152818116610101850152610121840183905261014184018c905284519698509496509490937f000000000000000000000000000000000000000000000000000000000000000016926397da6d3092610161808201939182900301818787803b15801561098757600080fd5b505af115801561099b573d6000803e3d6000fd5b505050506040513d60408110156109b157600080fd5b505160408051630240bc6b60e21b8152905191925060009182916001600160a01b03861691630902f1ac91600480820192606092909190829003018186803b1580156109fc57600080fd5b505afa158015610a10573d6000803e3d6000fd5b505050506040513d6060811015610a2657600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905060006001600160a01b03808f16908e161115610b7a57610a67848484610e11565b604080516000808252602082019283905263022c0d9f60e01b835260248201818152604483018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b038181166064860152608060848601908152855160a48701819052979850908c169663022c0d9f96949589959394909390929160c4850191908083838b5b83811015610b0e578181015183820152602001610af6565b50505050905090810190601f168015610b3b5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015610b5d57600080fd5b505af1158015610b71573d6000803e3d6000fd5b50505050610c8f565b610b85848385610e11565b604080516000808252602082019283905263022c0d9f60e01b835260248201848152604483018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b038181166064860152608060848601908152855160a48701819052979850908c169663022c0d9f9689969394929160c4850191908083838a5b83811015610c27578181015183820152602001610c0f565b50505050905090810190601f168015610c545780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015610c7657600080fd5b505af1158015610c8a573d6000803e3d6000fd5b505050505b6040805162ae511b60e21b81526001600160a01b038f811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301819052908f16604483015260648201849052600060848301819052835191936302b9446c9360a4808201949293918390030190829087803b158015610d1757600080fd5b505af1158015610d2b573d6000803e3d6000fd5b505050506040513d6040811015610d4157600080fd5b50602001519750610d52888c610db3565b9850505050505050509550959350505050565b600080610d7e6103e8610d788688610e5f565b90610e5f565b90506000610d926103e5610d788689610db3565b9050610da96001828481610da257fe5b0490610ecb565b9695505050505050565b80820382811115610e0b576040805162461bcd60e51b815260206004820152601560248201527f426f72696e674d6174683a20556e646572666c6f770000000000000000000000604482015290519081900360640190fd5b92915050565b600080610e20856103e5610e5f565b90506000610e2e8285610e5f565b90506000610e4883610e42886103e8610e5f565b90610ecb565b9050808281610e5357fe5b04979650505050505050565b6000811580610e7a57505080820282828281610e7757fe5b04145b610e0b576040805162461bcd60e51b815260206004820152601860248201527f426f72696e674d6174683a204d756c204f766572666c6f770000000000000000604482015290519081900360640190fd5b81810181811015610e0b576040805162461bcd60e51b815260206004820152601860248201527f426f72696e674d6174683a20416464204f766572666c6f770000000000000000604482015290519081900360640190fdfea2646970667358221220b0821ad68e3c1366868c70647d159c133d710b42d14e32c1ac281849614395bd64736f6c634300060c0033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x57 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4622BE90 EQ PUSH2 0x5C JUMPI DUP1 PUSH4 0x6B2ACE87 EQ PUSH2 0xC1 JUMPI DUP1 PUSH4 0x9AAB9248 EQ PUSH2 0xE5 JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0xFF JUMPI DUP1 PUSH4 0xE343FE12 EQ PUSH2 0x107 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xC0 DUP2 LT ISZERO PUSH2 0x72 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xA0 ADD CALLDATALOAD PUSH2 0x149 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0xC9 PUSH2 0x7DC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xED PUSH2 0x800 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xC9 PUSH2 0x806 JUMP JUMPDEST PUSH2 0xA8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x11D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x80 ADD CALLDATALOAD PUSH2 0x82A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x171 JUMPI DUP10 DUP12 PUSH2 0x174 JUMP JUMPDEST DUP11 DUP11 JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT PUSH1 0x60 SWAP5 DUP6 SHL DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 DUP6 SHL DUP2 AND PUSH1 0x34 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x28 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x48 DUP4 ADD DUP5 MSTORE DUP1 MLOAD SWAP1 DUP6 ADD KECCAK256 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT PUSH1 0x68 DUP7 ADD MSTORE PUSH32 0x0 DUP9 SHL SWAP1 SWAP4 AND PUSH1 0x69 DUP6 ADD MSTORE PUSH1 0x7D DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x9D DUP1 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP3 ADD DUP3 MSTORE PUSH1 0xBD DUP4 ADD DUP1 DUP6 MSTORE DUP3 MLOAD SWAP3 SWAP1 SWAP6 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH4 0x240BC6B PUSH1 0xE2 SHL SWAP1 SWAP5 MSTORE SWAP2 MLOAD SWAP3 SWAP7 POP SWAP1 SWAP5 POP DUP5 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP3 PUSH4 0x902F1AC SWAP3 PUSH1 0xC1 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x260 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x274 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x28A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xACC4623 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP13 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x44 DUP4 ADD MSTORE SWAP2 MLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND SWAP8 POP SWAP4 SWAP1 SWAP3 AND SWAP5 POP PUSH1 0x0 SWAP4 PUSH32 0x0 SWAP1 SWAP2 AND SWAP3 PUSH4 0x56623118 SWAP3 PUSH1 0x64 DUP1 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x325 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x339 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x34F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP15 AND SWAP1 DUP14 AND GT ISZERO PUSH2 0x4EC JUMPI PUSH2 0x374 DUP3 DUP6 DUP6 PUSH2 0xD65 JUMP JUMPDEST SWAP1 POP PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x97DA6D30 DUP15 ADDRESS DUP9 DUP6 PUSH1 0x0 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP6 POP POP POP POP POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x417 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x42B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x441 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x22C0D9F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x80 PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x84 DUP4 ADD DUP3 SWAP1 MSTORE SWAP3 MLOAD SWAP4 SWAP11 POP SWAP2 DUP9 AND SWAP3 PUSH4 0x22C0D9F SWAP3 PUSH1 0xC4 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4E3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x66B JUMP JUMPDEST PUSH2 0x4F7 DUP3 DUP5 DUP7 PUSH2 0xD65 JUMP JUMPDEST SWAP1 POP PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x97DA6D30 DUP15 ADDRESS DUP9 DUP6 PUSH1 0x0 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP6 POP POP POP POP POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x59A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5AE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x5C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x22C0D9F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x0 PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x80 PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x84 DUP4 ADD DUP3 SWAP1 MSTORE SWAP3 MLOAD SWAP4 SWAP11 POP SWAP2 DUP9 AND SWAP3 PUSH4 0x22C0D9F SWAP3 PUSH1 0xC4 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x652 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x666 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH3 0xAE511B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP15 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 DUP2 AND PUSH1 0x24 DUP4 ADD DUP2 SWAP1 MSTORE SWAP1 DUP15 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x0 PUSH1 0x64 DUP4 ADD DUP2 SWAP1 MSTORE PUSH1 0x84 DUP4 ADD DUP13 SWAP1 MSTORE DUP4 MLOAD SWAP2 SWAP4 PUSH4 0x2B9446C SWAP4 PUSH1 0xA4 DUP1 DUP3 ADD SWAP5 SWAP3 SWAP4 SWAP2 DUP4 SWAP1 SUB ADD SWAP1 DUP3 SWAP1 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x707 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x71D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x72A SWAP1 POP DUP10 DUP9 PUSH2 0xDB3 JUMP JUMPDEST SWAP6 POP DUP6 ISZERO PUSH2 0x7CC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH4 0x3C6340F3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE DUP13 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD DUP10 SWAP1 MSTORE SWAP2 MLOAD PUSH32 0x0 SWAP1 SWAP3 AND SWAP2 PUSH4 0xF18D03CC SWAP2 PUSH1 0x84 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7C7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP POP POP POP SWAP7 POP SWAP7 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x850 JUMPI DUP8 DUP10 PUSH2 0x853 JUMP JUMPDEST DUP9 DUP9 JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT PUSH1 0x60 DUP6 DUP2 SHL DUP3 AND PUSH1 0x20 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP6 DUP3 SHL DUP4 AND PUSH1 0x34 DUP6 ADD MSTORE DUP5 MLOAD PUSH1 0x28 DUP2 DUP7 SUB ADD DUP2 MSTORE PUSH1 0x48 DUP6 ADD DUP7 MSTORE DUP1 MLOAD SWAP1 DUP3 ADD KECCAK256 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT PUSH1 0x68 DUP9 ADD MSTORE PUSH32 0x0 SWAP1 SWAP5 SHL SWAP1 SWAP5 AND PUSH1 0x69 DUP7 ADD MSTORE PUSH1 0x7D DUP6 ADD MSTORE PUSH1 0x9D DUP1 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP5 MLOAD DUP1 DUP6 SUB SWAP1 SWAP3 ADD DUP3 MSTORE PUSH1 0xBD DUP5 ADD DUP1 DUP7 MSTORE DUP3 MLOAD SWAP3 SWAP1 SWAP2 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH4 0x97DA6D3 PUSH1 0xE4 SHL SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 DUP2 AND PUSH1 0xC1 DUP6 ADD MSTORE ADDRESS PUSH1 0xE1 DUP6 ADD MSTORE DUP2 DUP2 AND PUSH2 0x101 DUP6 ADD MSTORE PUSH2 0x121 DUP5 ADD DUP4 SWAP1 MSTORE PUSH2 0x141 DUP5 ADD DUP13 SWAP1 MSTORE DUP5 MLOAD SWAP7 SWAP9 POP SWAP5 SWAP7 POP SWAP5 SWAP1 SWAP4 PUSH32 0x0 AND SWAP3 PUSH4 0x97DA6D30 SWAP3 PUSH2 0x161 DUP1 DUP3 ADD SWAP4 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP8 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x987 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x99B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x9B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x240BC6B PUSH1 0xE2 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x902F1AC SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x60 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x9FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA10 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xA26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP4 POP AND SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP16 AND SWAP1 DUP15 AND GT ISZERO PUSH2 0xB7A JUMPI PUSH2 0xA67 DUP5 DUP5 DUP5 PUSH2 0xE11 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 DUP4 SWAP1 MSTORE PUSH4 0x22C0D9F PUSH1 0xE0 SHL DUP4 MSTORE PUSH1 0x24 DUP3 ADD DUP2 DUP2 MSTORE PUSH1 0x44 DUP4 ADD DUP6 SWAP1 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x64 DUP7 ADD MSTORE PUSH1 0x80 PUSH1 0x84 DUP7 ADD SWAP1 DUP2 MSTORE DUP6 MLOAD PUSH1 0xA4 DUP8 ADD DUP2 SWAP1 MSTORE SWAP8 SWAP9 POP SWAP1 DUP13 AND SWAP7 PUSH4 0x22C0D9F SWAP7 SWAP5 SWAP6 DUP10 SWAP6 SWAP4 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 SWAP2 PUSH1 0xC4 DUP6 ADD SWAP2 SWAP1 DUP1 DUP4 DUP4 DUP12 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xB0E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xAF6 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xB3B JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP6 POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB5D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB71 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0xC8F JUMP JUMPDEST PUSH2 0xB85 DUP5 DUP4 DUP6 PUSH2 0xE11 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 DUP4 SWAP1 MSTORE PUSH4 0x22C0D9F PUSH1 0xE0 SHL DUP4 MSTORE PUSH1 0x24 DUP3 ADD DUP5 DUP2 MSTORE PUSH1 0x44 DUP4 ADD DUP3 SWAP1 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x64 DUP7 ADD MSTORE PUSH1 0x80 PUSH1 0x84 DUP7 ADD SWAP1 DUP2 MSTORE DUP6 MLOAD PUSH1 0xA4 DUP8 ADD DUP2 SWAP1 MSTORE SWAP8 SWAP9 POP SWAP1 DUP13 AND SWAP7 PUSH4 0x22C0D9F SWAP7 DUP10 SWAP7 SWAP4 SWAP5 SWAP3 SWAP2 PUSH1 0xC4 DUP6 ADD SWAP2 SWAP1 DUP1 DUP4 DUP4 DUP11 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xC27 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xC0F JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xC54 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP6 POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC76 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC8A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH3 0xAE511B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 DUP2 AND PUSH1 0x24 DUP4 ADD DUP2 SWAP1 MSTORE SWAP1 DUP16 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0x0 PUSH1 0x84 DUP4 ADD DUP2 SWAP1 MSTORE DUP4 MLOAD SWAP2 SWAP4 PUSH4 0x2B9446C SWAP4 PUSH1 0xA4 DUP1 DUP3 ADD SWAP5 SWAP3 SWAP4 SWAP2 DUP4 SWAP1 SUB ADD SWAP1 DUP3 SWAP1 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD17 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD2B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xD41 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 ADD MLOAD SWAP8 POP PUSH2 0xD52 DUP9 DUP13 PUSH2 0xDB3 JUMP JUMPDEST SWAP9 POP POP POP POP POP POP POP POP SWAP6 POP SWAP6 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xD7E PUSH2 0x3E8 PUSH2 0xD78 DUP7 DUP9 PUSH2 0xE5F JUMP JUMPDEST SWAP1 PUSH2 0xE5F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xD92 PUSH2 0x3E5 PUSH2 0xD78 DUP7 DUP10 PUSH2 0xDB3 JUMP JUMPDEST SWAP1 POP PUSH2 0xDA9 PUSH1 0x1 DUP3 DUP5 DUP2 PUSH2 0xDA2 JUMPI INVALID JUMPDEST DIV SWAP1 PUSH2 0xECB JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0xE0B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x426F72696E674D6174683A20556E646572666C6F770000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xE20 DUP6 PUSH2 0x3E5 PUSH2 0xE5F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xE2E DUP3 DUP6 PUSH2 0xE5F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xE48 DUP4 PUSH2 0xE42 DUP9 PUSH2 0x3E8 PUSH2 0xE5F JUMP JUMPDEST SWAP1 PUSH2 0xECB JUMP JUMPDEST SWAP1 POP DUP1 DUP3 DUP2 PUSH2 0xE53 JUMPI INVALID JUMPDEST DIV SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0xE7A JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0xE77 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0xE0B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x426F72696E674D6174683A204D756C204F766572666C6F770000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP2 ADD DUP2 DUP2 LT ISZERO PUSH2 0xE0B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x426F72696E674D6174683A20416464204F766572666C6F770000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB0 DUP3 BYTE 0xD6 DUP15 EXTCODECOPY SGT PUSH7 0x868C70647D159C SGT RETURNDATASIZE PUSH18 0xB42D14E32C1AC281849614395BD64736F6C PUSH4 0x4300060C STOP CALLER ",
              "sourceMap": "2688:5563:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6608:1641;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6608:1641:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2780:37;;;:::i;:::-;;;;-1:-1:-1;;;;;2780:37:0;;;;;;;;;;;;;;2871:27;;;:::i;:::-;;;;;;;;;;;;;;;;2823:42;;;:::i;4573:1277::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4573:1277:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;6608:1641::-;6817:17;6836:21;6869:19;6913:13;6928;6957:7;-1:-1:-1;;;;;6945:19:0;:9;-1:-1:-1;;;;;6945:19:0;;:65;;6991:7;7000:9;6945:65;;;6968:9;6979:7;6945:65;7147:50;;;-1:-1:-1;;7147:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7137:61;;;;;;-1:-1:-1;7200:12:0;;-1:-1:-1;;;;;;7102:111:0;;;;7128:7;7102:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7092:122;;;;;;;;;;-1:-1:-1;;;7307:18:0;;;;;7092:122;;-1:-1:-1;;;;;;;;;;;;7307:16:0;;;;;:18;;;;;;;;;;:16;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7307:18:0;;;;;;;;7360:46;;-1:-1:-1;;;7360:46:0;;-1:-1:-1;;;;;7360:46:0;;;;;;;;;;;;;7401:4;7360:46;;;;;;7266:59;;;;;-1:-1:-1;7266:59:0;;;;;-1:-1:-1;;;7360:8:0;:17;;;;;;:46;;;;;7307:18;7360:46;;;;;;:17;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7360:46:0;;-1:-1:-1;7417:18:0;-1:-1:-1;;;;;7449:19:0;;;;;;;7445:533;;;7497:46;7509:13;7524:8;7534;7497:11;:46::i;:::-;7484:59;;7573:8;-1:-1:-1;;;;;7573:17:0;;7591:9;7610:4;7625;7632:10;7644:1;7573:73;;;;;;;;;;;;;-1:-1:-1;;;;;7573:73:0;;;;;;-1:-1:-1;;;;;7573:73:0;;;;;;-1:-1:-1;;;;;7573:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7573:73:0;;;;7660:50;;-1:-1:-1;;;7660:50:0;;7670:1;7660:50;;;;;;;;;;;;-1:-1:-1;;;;;7696:8:0;7660:50;;;;;;;;;;;;;;;;;;;7573:73;;-1:-1:-1;7660:9:0;;;;;;:50;;;;;7670:1;;7660:50;;;;;;7670:1;7660:9;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7445:533;;;7754:46;7766:13;7781:8;7791;7754:11;:46::i;:::-;7741:59;;7830:8;-1:-1:-1;;;;;7830:17:0;;7848:9;7867:4;7882;7889:10;7901:1;7830:73;;;;;;;;;;;;;-1:-1:-1;;;;;7830:73:0;;;;;;-1:-1:-1;;;;;7830:73:0;;;;;;-1:-1:-1;;;;;7830:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7830:73:0;;;;7917:50;;-1:-1:-1;;;7917:50:0;;;;;;;;-1:-1:-1;7917:50:0;;;;;;-1:-1:-1;;;;;7953:8:0;7917:50;;;;;;;;;;;;;;;;;;;7830:73;;-1:-1:-1;7917:9:0;;;;;;:50;;;;;-1:-1:-1;;7917:50:0;;;;;;-1:-1:-1;7917:9:0;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7445:533;7987:72;;;-1:-1:-1;;;7987:72:0;;-1:-1:-1;;;;;7987:72:0;;;;;;;:8;:16;;:72;;;;;;;;;;;;;8043:1;7987:72;;;;;;;;;;;;;;:16;;;;:72;;;;;;;;;;;;;;;:16;:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8085:32:0;;-1:-1:-1;8085:17:0;8107:9;8085:21;:32::i;:::-;8069:48;-1:-1:-1;8131:17:0;;8127:116;;8164:68;;;-1:-1:-1;;;8164:68:0;;-1:-1:-1;;;;;8164:68:0;;;;;;;8201:4;8164:68;;;;;;;;;;;;;;;;;;;:8;:17;;;;;;:68;;;;;-1:-1:-1;;8164:68:0;;;;;;;;-1:-1:-1;8164:17:0;:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8127:116;6608:1641;;;;;;;;;;;;;;:::o;2780:37::-;;;:::o;2871:27::-;;;;:::o;2823:42::-;;;:::o;4573:1277::-;4741:18;4761:21;4795:13;4810;4839:7;-1:-1:-1;;;;;4827:19:0;:9;-1:-1:-1;;;;;4827:19:0;;:65;;4873:7;4882:9;4827:65;;;4850:9;4861:7;4827:65;5052:50;;;-1:-1:-1;;5052:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5042:61;;;;;;4902:19;5105:12;;-1:-1:-1;;;;;;5007:111:0;;;;5033:7;5007:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4997:122;;;;;;;;;;-1:-1:-1;;;5187:72:0;;;-1:-1:-1;;;;;5187:72:0;;;;;;;5224:4;5187:72;;;;;;;;;;;;;;;;;;;;;;;;;4794:98;;-1:-1:-1;4794:98:0;;-1:-1:-1;4997:122:0;4902:19;;5187:8;:17;;;;:72;;;;;;;;;;;4902:19;5187:17;:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5187:72:0;;5311:18;;-1:-1:-1;;;5311:18:0;;;;5187:72;;-1:-1:-1;5271:16:0;;;;-1:-1:-1;;;;;5311:16:0;;;;;:18;;;;;;;;;;;;;;;:16;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5311:18:0;;;;;;;5270:59;;;;;-1:-1:-1;5270:59:0;;-1:-1:-1;5339:16:0;-1:-1:-1;;;;;5369:19:0;;;;;;;5365:329;;;5415:44;5428:10;5440:8;5450;5415:12;:44::i;:::-;5515:12;;;5483:1;5515:12;;;;;;;;;;-1:-1:-1;;;5473:55:0;;;;;;;;;;;;;;5504:8;-1:-1:-1;;;;;5473:55:0;;;;;;;;;;;;;;;;;;;;;;5404;;-1:-1:-1;5473:9:0;;;;;;5483:1;;5404:55;;5504:8;;5515:12;;5473:55;;;;;;;5515:12;5473:55;;5515:12;5483:1;5473:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5365:329;;;5570:44;5583:10;5595:8;5605;5570:12;:44::i;:::-;5670:12;;;5648:1;5670:12;;;;;;;;;;-1:-1:-1;;;5628:55:0;;;;;;;;;;;;;;5659:8;-1:-1:-1;;;;;5628:55:0;;;;;;;;;;;;;;;;;;;;;;5559;;-1:-1:-1;5628:9:0;;;;;;5559:55;;5659:8;;5628:55;;;;;;5670:12;5628:55;;5670:12;5648:1;5628:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5365:329;5723:68;;;-1:-1:-1;;;5723:68:0;;-1:-1:-1;;;;;5723:68:0;;;;;;;:8;:16;;:68;;;;;;;;;;;;;;;;;;;5789:1;5723:68;;;;;;;;:16;;;;:68;;;;;;;;;;;;;;;:16;:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5723:68:0;;;;-1:-1:-1;5814:29:0;5723:68;5832:10;5814:17;:29::i;:::-;5801:42;;4573:1277;;;;;;;;;;;;;;;:::o;3757:340::-;3889:16;;3937:34;3966:4;3937:24;:9;3951;3937:13;:24::i;:::-;:28;;:34::i;:::-;3917:54;-1:-1:-1;3981:19:0;4003:34;4033:3;4003:25;:10;4018:9;4003:14;:25::i;:34::-;3981:56;;4058:32;4088:1;4071:11;4059:9;:23;;;;;;;4058:29;:32::i;:::-;4047:43;3757:340;-1:-1:-1;;;;;;3757:340:0:o;510:136::-;602:5;;;597:16;;;;589:50;;;;;-1:-1:-1;;;589:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;510:136;;;;:::o;3250:389::-;3382:17;;3437;:8;3450:3;3437:12;:17::i;:::-;3411:43;-1:-1:-1;3464:17:0;3484:31;3411:43;3504:10;3484:19;:31::i;:::-;3464:51;-1:-1:-1;3525:19:0;3547:40;3571:15;3547:19;:9;3561:4;3547:13;:19::i;:::-;:23;;:40::i;:::-;3525:62;;3621:11;3609:9;:23;;;;;;;3250:389;-1:-1:-1;;;;;;;3250:389:0:o;652:153::-;710:9;739:6;;;:30;;-1:-1:-1;;754:5:0;;;768:1;763;754:5;763:1;749:15;;;;;:20;739:30;731:67;;;;;-1:-1:-1;;;731:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;365:139;457:5;;;452:16;;;;444:53;;;;;-1:-1:-1;;;444:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "785800",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "bentoBox()": "infinite",
                "factory()": "infinite",
                "pairCodeHash()": "1020",
                "swap(address,address,address,uint256,uint256)": "infinite",
                "swapExact(address,address,address,address,uint256,uint256)": "infinite"
              },
              "internal": {
                "getAmountIn(uint256,uint256,uint256)": "infinite",
                "getAmountOut(uint256,uint256,uint256)": "infinite"
              }
            },
            "methodIdentifiers": {
              "bentoBox()": "6b2ace87",
              "factory()": "c45a0155",
              "pairCodeHash()": "9aab9248",
              "swap(address,address,address,uint256,uint256)": "e343fe12",
              "swapExact(address,address,address,address,uint256,uint256)": "4622be90"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IBentoBoxV1\",\"name\":\"bentoBox_\",\"type\":\"address\"},{\"internalType\":\"contract IUniswapV2Factory\",\"name\":\"factory_\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"pairCodeHash_\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"bentoBox\",\"outputs\":[{\"internalType\":\"contract IBentoBoxV1\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"contract IUniswapV2Factory\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pairCodeHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"fromToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"toToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shareToMin\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"shareFrom\",\"type\":\"uint256\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"extraShare\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"shareReturned\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"fromToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"toToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shareFromSupplied\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"shareToExact\",\"type\":\"uint256\"}],\"name\":\"swapExact\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shareUsed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"shareReturned\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"swap(address,address,address,uint256,uint256)\":{\"notice\":\"Withdraws 'amountFrom' of token 'from' from the BentoBox account for this swapper. Swaps it for at least 'amountToMin' of token 'to'. Transfers the swapped tokens of 'to' into the BentoBox using a plain ERC20 transfer. Returns the amount of tokens 'to' transferred to BentoBox. (The BentoBox skim function will be used by the caller to get the swapped funds).\"},\"swapExact(address,address,address,address,uint256,uint256)\":{\"notice\":\"Calculates the amount of token 'from' needed to complete the swap (amountFrom), this should be less than or equal to amountFromMax. Withdraws 'amountFrom' of token 'from' from the BentoBox account for this swapper. Swaps it for exactly 'exactAmountTo' of token 'to'. Transfers the swapped tokens of 'to' into the BentoBox using a plain ERC20 transfer. Transfers allocated, but unused 'from' tokens within the BentoBox to 'refundTo' (amountFromMax - amountFrom). Returns the amount of 'from' tokens withdrawn from BentoBox (amountFrom). (The BentoBox skim function will be used by the caller to get the swapped funds).\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/flat/SushiSwapSwapperFlat.sol\":\"SushiSwapSwapperV1\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":350},\"remappings\":[]},\"sources\":{\"contracts/flat/SushiSwapSwapperFlat.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.6.12;\\n\\n// Version 11-Mar-2021\\n\\n// File @boringcrypto/boring-solidity/contracts/libraries/BoringMath.sol@v1.1.0\\n// License-Identifier: MIT\\n\\n/// @notice A library for performing overflow-/underflow-safe math,\\n/// updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math).\\nlibrary BoringMath {\\n    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require((c = a + b) >= b, \\\"BoringMath: Add Overflow\\\");\\n    }\\n\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require((c = a - b) <= a, \\\"BoringMath: Underflow\\\");\\n    }\\n\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require(b == 0 || (c = a * b) / b == a, \\\"BoringMath: Mul Overflow\\\");\\n    }\\n}\\n\\n// File @sushiswap/core/contracts/uniswapv2/interfaces/IUniswapV2Factory.sol@v1.4.2\\n// License-Identifier: GPL-3.0\\ninterface IUniswapV2Factory {\\n    function getPair(address tokenA, address tokenB) external view returns (address pair);\\n}\\n\\n// File @sushiswap/core/contracts/uniswapv2/interfaces/IUniswapV2Pair.sol@v1.4.2\\n// License-Identifier: GPL-3.0\\ninterface IUniswapV2Pair {\\n    function token0() external view returns (address);\\n\\n    function getReserves()\\n        external\\n        view\\n        returns (\\n            uint112 reserve0,\\n            uint112 reserve1,\\n            uint32 blockTimestampLast\\n        );\\n\\n    function swap(\\n        uint256 amount0Out,\\n        uint256 amount1Out,\\n        address to,\\n        bytes calldata data\\n    ) external;\\n}\\n\\n// File @boringcrypto/boring-solidity/contracts/interfaces/IERC20.sol@v1.1.0\\n// License-Identifier: MIT\\ninterface IERC20 {\\n\\n}\\n\\n// File @sushiswap/bentobox-sdk/contracts/IBentoBoxV1.sol@v1.0.0\\n// License-Identifier: MIT\\ninterface IBentoBoxV1 {\\n    function deposit(\\n        IERC20 token_,\\n        address from,\\n        address to,\\n        uint256 amount,\\n        uint256 share\\n    ) external payable returns (uint256 amountOut, uint256 shareOut);\\n\\n    function toAmount(\\n        IERC20 token,\\n        uint256 share,\\n        bool roundUp\\n    ) external view returns (uint256 amount);\\n\\n    function toShare(\\n        IERC20 token,\\n        uint256 amount,\\n        bool roundUp\\n    ) external view returns (uint256 share);\\n\\n    function transfer(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 share\\n    ) external;\\n\\n    function withdraw(\\n        IERC20 token_,\\n        address from,\\n        address to,\\n        uint256 amount,\\n        uint256 share\\n    ) external returns (uint256 amountOut, uint256 shareOut);\\n}\\n\\n// File contracts/swappers/SushiSwapSwapper.sol\\n// License-Identifier: MIT\\ncontract SushiSwapSwapperV1 {\\n    using BoringMath for uint256;\\n\\n    // Local variables\\n    IBentoBoxV1 public immutable bentoBox;\\n    IUniswapV2Factory public immutable factory;\\n    bytes32 public pairCodeHash;\\n\\n    constructor(\\n        IBentoBoxV1 bentoBox_,\\n        IUniswapV2Factory factory_,\\n        bytes32 pairCodeHash_\\n    ) public {\\n        bentoBox = bentoBox_;\\n        factory = factory_;\\n        pairCodeHash = pairCodeHash_;\\n    }\\n\\n    // Given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset\\n    function getAmountOut(\\n        uint256 amountIn,\\n        uint256 reserveIn,\\n        uint256 reserveOut\\n    ) internal pure returns (uint256 amountOut) {\\n        uint256 amountInWithFee = amountIn.mul(997);\\n        uint256 numerator = amountInWithFee.mul(reserveOut);\\n        uint256 denominator = reserveIn.mul(1000).add(amountInWithFee);\\n        amountOut = numerator / denominator;\\n    }\\n\\n    // Given an output amount of an asset and pair reserves, returns a required input amount of the other asset\\n    function getAmountIn(\\n        uint256 amountOut,\\n        uint256 reserveIn,\\n        uint256 reserveOut\\n    ) internal pure returns (uint256 amountIn) {\\n        uint256 numerator = reserveIn.mul(amountOut).mul(1000);\\n        uint256 denominator = reserveOut.sub(amountOut).mul(997);\\n        amountIn = (numerator / denominator).add(1);\\n    }\\n\\n    // Swaps to a flexible amount, from an exact input amount\\n    /// @notice Withdraws 'amountFrom' of token 'from' from the BentoBox account for this swapper.\\n    /// Swaps it for at least 'amountToMin' of token 'to'.\\n    /// Transfers the swapped tokens of 'to' into the BentoBox using a plain ERC20 transfer.\\n    /// Returns the amount of tokens 'to' transferred to BentoBox.\\n    /// (The BentoBox skim function will be used by the caller to get the swapped funds).\\n    function swap(\\n        IERC20 fromToken,\\n        IERC20 toToken,\\n        address recipient,\\n        uint256 shareToMin,\\n        uint256 shareFrom\\n    ) public returns (uint256 extraShare, uint256 shareReturned) {\\n        (IERC20 token0, IERC20 token1) = fromToken < toToken ? (fromToken, toToken) : (toToken, fromToken);\\n        IUniswapV2Pair pair =\\n            IUniswapV2Pair(\\n                uint256(\\n                    keccak256(abi.encodePacked(hex\\\"ff\\\", factory, keccak256(abi.encodePacked(address(token0), address(token1))), pairCodeHash))\\n                )\\n            );\\n\\n        (uint256 amountFrom, ) = bentoBox.withdraw(fromToken, address(this), address(pair), 0, shareFrom);\\n\\n        (uint256 reserve0, uint256 reserve1, ) = pair.getReserves();\\n        uint256 amountTo;\\n        if (toToken > fromToken) {\\n            amountTo = getAmountOut(amountFrom, reserve0, reserve1);\\n            pair.swap(0, amountTo, address(bentoBox), new bytes(0));\\n        } else {\\n            amountTo = getAmountOut(amountFrom, reserve1, reserve0);\\n            pair.swap(amountTo, 0, address(bentoBox), new bytes(0));\\n        }\\n        (, shareReturned) = bentoBox.deposit(toToken, address(bentoBox), recipient, amountTo, 0);\\n        extraShare = shareReturned.sub(shareToMin);\\n    }\\n\\n    // Swaps to an exact amount, from a flexible input amount\\n    /// @notice Calculates the amount of token 'from' needed to complete the swap (amountFrom),\\n    /// this should be less than or equal to amountFromMax.\\n    /// Withdraws 'amountFrom' of token 'from' from the BentoBox account for this swapper.\\n    /// Swaps it for exactly 'exactAmountTo' of token 'to'.\\n    /// Transfers the swapped tokens of 'to' into the BentoBox using a plain ERC20 transfer.\\n    /// Transfers allocated, but unused 'from' tokens within the BentoBox to 'refundTo' (amountFromMax - amountFrom).\\n    /// Returns the amount of 'from' tokens withdrawn from BentoBox (amountFrom).\\n    /// (The BentoBox skim function will be used by the caller to get the swapped funds).\\n    function swapExact(\\n        IERC20 fromToken,\\n        IERC20 toToken,\\n        address recipient,\\n        address refundTo,\\n        uint256 shareFromSupplied,\\n        uint256 shareToExact\\n    ) public returns (uint256 shareUsed, uint256 shareReturned) {\\n        IUniswapV2Pair pair;\\n        {\\n            (IERC20 token0, IERC20 token1) = fromToken < toToken ? (fromToken, toToken) : (toToken, fromToken);\\n            pair = IUniswapV2Pair(\\n                uint256(\\n                    keccak256(abi.encodePacked(hex\\\"ff\\\", factory, keccak256(abi.encodePacked(address(token0), address(token1))), pairCodeHash))\\n                )\\n            );\\n        }\\n        (uint256 reserve0, uint256 reserve1, ) = pair.getReserves();\\n\\n        uint256 amountToExact = bentoBox.toAmount(toToken, shareToExact, true);\\n\\n        uint256 amountFrom;\\n        if (toToken > fromToken) {\\n            amountFrom = getAmountIn(amountToExact, reserve0, reserve1);\\n            (, shareUsed) = bentoBox.withdraw(fromToken, address(this), address(pair), amountFrom, 0);\\n            pair.swap(0, amountToExact, address(bentoBox), \\\"\\\");\\n        } else {\\n            amountFrom = getAmountIn(amountToExact, reserve1, reserve0);\\n            (, shareUsed) = bentoBox.withdraw(fromToken, address(this), address(pair), amountFrom, 0);\\n            pair.swap(amountToExact, 0, address(bentoBox), \\\"\\\");\\n        }\\n        bentoBox.deposit(toToken, address(bentoBox), recipient, 0, shareToExact);\\n        shareReturned = shareFromSupplied.sub(shareUsed);\\n        if (shareReturned > 0) {\\n            bentoBox.transfer(fromToken, address(this), refundTo, shareReturned);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xa4f3c014fd3ff555fbf4387354077c8276660de72c1d8d4c81ec85d528e771b6\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 189,
                "contract": "contracts/flat/SushiSwapSwapperFlat.sol:SushiSwapSwapperV1",
                "label": "pairCodeHash",
                "offset": 0,
                "slot": "0",
                "type": "t_bytes32"
              }
            ],
            "types": {
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "kind": "user",
            "methods": {
              "swap(address,address,address,uint256,uint256)": {
                "notice": "Withdraws 'amountFrom' of token 'from' from the BentoBox account for this swapper. Swaps it for at least 'amountToMin' of token 'to'. Transfers the swapped tokens of 'to' into the BentoBox using a plain ERC20 transfer. Returns the amount of tokens 'to' transferred to BentoBox. (The BentoBox skim function will be used by the caller to get the swapped funds)."
              },
              "swapExact(address,address,address,address,uint256,uint256)": {
                "notice": "Calculates the amount of token 'from' needed to complete the swap (amountFrom), this should be less than or equal to amountFromMax. Withdraws 'amountFrom' of token 'from' from the BentoBox account for this swapper. Swaps it for exactly 'exactAmountTo' of token 'to'. Transfers the swapped tokens of 'to' into the BentoBox using a plain ERC20 transfer. Transfers allocated, but unused 'from' tokens within the BentoBox to 'refundTo' (amountFromMax - amountFrom). Returns the amount of 'from' tokens withdrawn from BentoBox (amountFrom). (The BentoBox skim function will be used by the caller to get the swapped funds)."
              }
            },
            "version": 1
          }
        }
      }
    },
    "sources": {
      "contracts/flat/SushiSwapSwapperFlat.sol": {
        "ast": {
          "absolutePath": "contracts/flat/SushiSwapSwapperFlat.sol",
          "exportedSymbols": {
            "BoringMath": [
              75
            ],
            "IBentoBoxV1": [
              180
            ],
            "IERC20": [
              112
            ],
            "IUniswapV2Factory": [
              85
            ],
            "IUniswapV2Pair": [
              111
            ],
            "SushiSwapSwapperV1": [
              669
            ]
          },
          "id": 670,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1,
              "literals": [
                "solidity",
                "0.6",
                ".12"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:23:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 2,
                "nodeType": "StructuredDocumentation",
                "src": "189:151:0",
                "text": "@notice A library for performing overflow-/underflow-safe math,\n updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math)."
              },
              "fullyImplemented": true,
              "id": 75,
              "linearizedBaseContracts": [
                75
              ],
              "name": "BoringMath",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 23,
                    "nodeType": "Block",
                    "src": "434:70:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 19,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "id": 16,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "id": 12,
                                      "name": "c",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9,
                                      "src": "453:1:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 15,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 13,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4,
                                        "src": "457:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 14,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6,
                                        "src": "461:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "457:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "453:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 17,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "452:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 18,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6,
                                "src": "467:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "452:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "426f72696e674d6174683a20416464204f766572666c6f77",
                              "id": 20,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "470:26:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_77ffeda554f4c047bf45dac1a596ee270f922490aa5e98c6ba2b9599856e6fdf",
                                "typeString": "literal_string \"BoringMath: Add Overflow\""
                              },
                              "value": "BoringMath: Add Overflow"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_77ffeda554f4c047bf45dac1a596ee270f922490aa5e98c6ba2b9599856e6fdf",
                                "typeString": "literal_string \"BoringMath: Add Overflow\""
                              }
                            ],
                            "id": 11,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "444:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 21,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "444:53:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 22,
                        "nodeType": "ExpressionStatement",
                        "src": "444:53:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 24,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "add",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 7,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 24,
                        "src": "378:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "378:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 24,
                        "src": "389:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "389:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "377:22:0"
                  },
                  "returnParameters": {
                    "id": 10,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9,
                        "mutability": "mutable",
                        "name": "c",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 24,
                        "src": "423:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "423:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "422:11:0"
                  },
                  "scope": 75,
                  "src": "365:139:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 45,
                    "nodeType": "Block",
                    "src": "579:67:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 41,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "id": 38,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "id": 34,
                                      "name": "c",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 31,
                                      "src": "598:1:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 37,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 35,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 26,
                                        "src": "602:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 36,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 28,
                                        "src": "606:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "602:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "598:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 39,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "597:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 40,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 26,
                                "src": "612:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "597:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "426f72696e674d6174683a20556e646572666c6f77",
                              "id": 42,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "615:23:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_00354eeca4367367797d07bf5ab6743c0cc453fe689bbb72132c3c4e2b5612aa",
                                "typeString": "literal_string \"BoringMath: Underflow\""
                              },
                              "value": "BoringMath: Underflow"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_00354eeca4367367797d07bf5ab6743c0cc453fe689bbb72132c3c4e2b5612aa",
                                "typeString": "literal_string \"BoringMath: Underflow\""
                              }
                            ],
                            "id": 33,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "589:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 43,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "589:50:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 44,
                        "nodeType": "ExpressionStatement",
                        "src": "589:50:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 46,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sub",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 29,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 26,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 46,
                        "src": "523:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 25,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "523:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 28,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 46,
                        "src": "534:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 27,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "534:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "522:22:0"
                  },
                  "returnParameters": {
                    "id": 32,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 31,
                        "mutability": "mutable",
                        "name": "c",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 46,
                        "src": "568:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 30,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "568:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "567:11:0"
                  },
                  "scope": 75,
                  "src": "510:136:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 73,
                    "nodeType": "Block",
                    "src": "721:84:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 69,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 58,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 56,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 50,
                                  "src": "739:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 57,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "744:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "739:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 68,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 66,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "components": [
                                      {
                                        "argumentTypes": null,
                                        "id": 63,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                          "argumentTypes": null,
                                          "id": 59,
                                          "name": "c",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 53,
                                          "src": "750:1:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 62,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "id": 60,
                                            "name": "a",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 48,
                                            "src": "754:1:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "*",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "id": 61,
                                            "name": "b",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 50,
                                            "src": "758:1:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "754:5:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "750:9:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 64,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "749:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 65,
                                    "name": "b",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 50,
                                    "src": "763:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "749:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 67,
                                  "name": "a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 48,
                                  "src": "768:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "749:20:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "739:30:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "426f72696e674d6174683a204d756c204f766572666c6f77",
                              "id": 70,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "771:26:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_efa2024ddfa13946089ac6325359d421926f574cb871587fa659a82734fa675e",
                                "typeString": "literal_string \"BoringMath: Mul Overflow\""
                              },
                              "value": "BoringMath: Mul Overflow"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_efa2024ddfa13946089ac6325359d421926f574cb871587fa659a82734fa675e",
                                "typeString": "literal_string \"BoringMath: Mul Overflow\""
                              }
                            ],
                            "id": 55,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "731:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 71,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "731:67:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 72,
                        "nodeType": "ExpressionStatement",
                        "src": "731:67:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 74,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mul",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 51,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 48,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 74,
                        "src": "665:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 47,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "665:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 50,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 74,
                        "src": "676:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 49,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "676:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "664:22:0"
                  },
                  "returnParameters": {
                    "id": 54,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 53,
                        "mutability": "mutable",
                        "name": "c",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 74,
                        "src": "710:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 52,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "710:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "709:11:0"
                  },
                  "scope": 75,
                  "src": "652:153:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 670,
              "src": "340:467:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": null,
              "fullyImplemented": false,
              "id": 85,
              "linearizedBaseContracts": [
                85
              ],
              "name": "IUniswapV2Factory",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "e6a43905",
                  "id": 84,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getPair",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 80,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 77,
                        "mutability": "mutable",
                        "name": "tokenA",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 84,
                        "src": "975:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 76,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "975:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 79,
                        "mutability": "mutable",
                        "name": "tokenB",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 84,
                        "src": "991:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 78,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "991:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "974:32:0"
                  },
                  "returnParameters": {
                    "id": 83,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 82,
                        "mutability": "mutable",
                        "name": "pair",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 84,
                        "src": "1030:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 81,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1030:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1029:14:0"
                  },
                  "scope": 85,
                  "src": "958:86:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 670,
              "src": "924:122:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": null,
              "fullyImplemented": false,
              "id": 111,
              "linearizedBaseContracts": [
                111
              ],
              "name": "IUniswapV2Pair",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "0dfe1681",
                  "id": 90,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "token0",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 86,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1206:2:0"
                  },
                  "returnParameters": {
                    "id": 89,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 88,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 90,
                        "src": "1232:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 87,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1232:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1231:9:0"
                  },
                  "scope": 111,
                  "src": "1191:50:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "0902f1ac",
                  "id": 99,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getReserves",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 91,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1267:2:0"
                  },
                  "returnParameters": {
                    "id": 98,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 93,
                        "mutability": "mutable",
                        "name": "reserve0",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 99,
                        "src": "1330:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        },
                        "typeName": {
                          "id": 92,
                          "name": "uint112",
                          "nodeType": "ElementaryTypeName",
                          "src": "1330:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 95,
                        "mutability": "mutable",
                        "name": "reserve1",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 99,
                        "src": "1360:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        },
                        "typeName": {
                          "id": 94,
                          "name": "uint112",
                          "nodeType": "ElementaryTypeName",
                          "src": "1360:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 97,
                        "mutability": "mutable",
                        "name": "blockTimestampLast",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 99,
                        "src": "1390:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 96,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1390:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1316:109:0"
                  },
                  "scope": 111,
                  "src": "1247:179:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "022c0d9f",
                  "id": 110,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "swap",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 108,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 101,
                        "mutability": "mutable",
                        "name": "amount0Out",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 110,
                        "src": "1455:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 100,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1455:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 103,
                        "mutability": "mutable",
                        "name": "amount1Out",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 110,
                        "src": "1483:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 102,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1483:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 105,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 110,
                        "src": "1511:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 104,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1511:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 107,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 110,
                        "src": "1531:19:0",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 106,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1531:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1445:111:0"
                  },
                  "returnParameters": {
                    "id": 109,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1565:0:0"
                  },
                  "scope": 111,
                  "src": "1432:134:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 670,
              "src": "1160:408:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": null,
              "fullyImplemented": true,
              "id": 112,
              "linearizedBaseContracts": [
                112
              ],
              "name": "IERC20",
              "nodeType": "ContractDefinition",
              "nodes": [],
              "scope": 670,
              "src": "1674:21:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": null,
              "fullyImplemented": false,
              "id": 180,
              "linearizedBaseContracts": [
                180
              ],
              "name": "IBentoBoxV1",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "02b9446c",
                  "id": 129,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "deposit",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 123,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 114,
                        "mutability": "mutable",
                        "name": "token_",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 129,
                        "src": "1843:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$112",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 113,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 112,
                          "src": "1843:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$112",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 116,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 129,
                        "src": "1866:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 115,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1866:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 118,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 129,
                        "src": "1888:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 117,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1888:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 120,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 129,
                        "src": "1908:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 119,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1908:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 122,
                        "mutability": "mutable",
                        "name": "share",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 129,
                        "src": "1932:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 121,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1932:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1833:118:0"
                  },
                  "returnParameters": {
                    "id": 128,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 125,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 129,
                        "src": "1978:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 124,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1978:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 127,
                        "mutability": "mutable",
                        "name": "shareOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 129,
                        "src": "1997:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 126,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1997:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1977:37:0"
                  },
                  "scope": 180,
                  "src": "1817:198:0",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "56623118",
                  "id": 140,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toAmount",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 136,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 131,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 140,
                        "src": "2048:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$112",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 130,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 112,
                          "src": "2048:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$112",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 133,
                        "mutability": "mutable",
                        "name": "share",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 140,
                        "src": "2070:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 132,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2070:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 135,
                        "mutability": "mutable",
                        "name": "roundUp",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 140,
                        "src": "2093:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 134,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2093:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2038:73:0"
                  },
                  "returnParameters": {
                    "id": 139,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 138,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 140,
                        "src": "2135:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 137,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2135:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2134:16:0"
                  },
                  "scope": 180,
                  "src": "2021:130:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "da5139ca",
                  "id": 151,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toShare",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 147,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 142,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 151,
                        "src": "2183:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$112",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 141,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 112,
                          "src": "2183:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$112",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 144,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 151,
                        "src": "2205:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 143,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2205:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 146,
                        "mutability": "mutable",
                        "name": "roundUp",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 151,
                        "src": "2229:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 145,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2229:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2173:74:0"
                  },
                  "returnParameters": {
                    "id": 150,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 149,
                        "mutability": "mutable",
                        "name": "share",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 151,
                        "src": "2271:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 148,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2271:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2270:15:0"
                  },
                  "scope": 180,
                  "src": "2157:129:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "f18d03cc",
                  "id": 162,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 160,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 153,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 162,
                        "src": "2319:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$112",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 152,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 112,
                          "src": "2319:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$112",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 155,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 162,
                        "src": "2341:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 154,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2341:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 157,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 162,
                        "src": "2363:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 156,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2363:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 159,
                        "mutability": "mutable",
                        "name": "share",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 162,
                        "src": "2383:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 158,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2383:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2309:93:0"
                  },
                  "returnParameters": {
                    "id": 161,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2411:0:0"
                  },
                  "scope": 180,
                  "src": "2292:120:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "97da6d30",
                  "id": 179,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdraw",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 173,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 164,
                        "mutability": "mutable",
                        "name": "token_",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 179,
                        "src": "2445:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$112",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 163,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 112,
                          "src": "2445:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$112",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 166,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 179,
                        "src": "2468:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 165,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2468:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 168,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 179,
                        "src": "2490:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 167,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2490:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 170,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 179,
                        "src": "2510:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 169,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2510:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 172,
                        "mutability": "mutable",
                        "name": "share",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 179,
                        "src": "2534:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 171,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2534:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2435:118:0"
                  },
                  "returnParameters": {
                    "id": 178,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 175,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 179,
                        "src": "2572:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 174,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2572:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 177,
                        "mutability": "mutable",
                        "name": "shareOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 179,
                        "src": "2591:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 176,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2591:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2571:37:0"
                  },
                  "scope": 180,
                  "src": "2418:191:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 670,
              "src": "1789:822:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": null,
              "fullyImplemented": true,
              "id": 669,
              "linearizedBaseContracts": [
                669
              ],
              "name": "SushiSwapSwapperV1",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 183,
                  "libraryName": {
                    "contractScope": null,
                    "id": 181,
                    "name": "BoringMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 75,
                    "src": "2728:10:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_BoringMath_$75",
                      "typeString": "library BoringMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "2722:29:0",
                  "typeName": {
                    "id": 182,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2743:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "constant": false,
                  "functionSelector": "6b2ace87",
                  "id": 185,
                  "mutability": "immutable",
                  "name": "bentoBox",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 669,
                  "src": "2780:37:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IBentoBoxV1_$180",
                    "typeString": "contract IBentoBoxV1"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 184,
                    "name": "IBentoBoxV1",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 180,
                    "src": "2780:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IBentoBoxV1_$180",
                      "typeString": "contract IBentoBoxV1"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "functionSelector": "c45a0155",
                  "id": 187,
                  "mutability": "immutable",
                  "name": "factory",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 669,
                  "src": "2823:42:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IUniswapV2Factory_$85",
                    "typeString": "contract IUniswapV2Factory"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 186,
                    "name": "IUniswapV2Factory",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 85,
                    "src": "2823:17:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IUniswapV2Factory_$85",
                      "typeString": "contract IUniswapV2Factory"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "functionSelector": "9aab9248",
                  "id": 189,
                  "mutability": "mutable",
                  "name": "pairCodeHash",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 669,
                  "src": "2871:27:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 188,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2871:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 210,
                    "nodeType": "Block",
                    "src": "3028:103:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 200,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 198,
                            "name": "bentoBox",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 185,
                            "src": "3038:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IBentoBoxV1_$180",
                              "typeString": "contract IBentoBoxV1"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 199,
                            "name": "bentoBox_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 191,
                            "src": "3049:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IBentoBoxV1_$180",
                              "typeString": "contract IBentoBoxV1"
                            }
                          },
                          "src": "3038:20:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IBentoBoxV1_$180",
                            "typeString": "contract IBentoBoxV1"
                          }
                        },
                        "id": 201,
                        "nodeType": "ExpressionStatement",
                        "src": "3038:20:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 204,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 202,
                            "name": "factory",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 187,
                            "src": "3068:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IUniswapV2Factory_$85",
                              "typeString": "contract IUniswapV2Factory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 203,
                            "name": "factory_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 193,
                            "src": "3078:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IUniswapV2Factory_$85",
                              "typeString": "contract IUniswapV2Factory"
                            }
                          },
                          "src": "3068:18:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IUniswapV2Factory_$85",
                            "typeString": "contract IUniswapV2Factory"
                          }
                        },
                        "id": 205,
                        "nodeType": "ExpressionStatement",
                        "src": "3068:18:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 208,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 206,
                            "name": "pairCodeHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 189,
                            "src": "3096:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 207,
                            "name": "pairCodeHash_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 195,
                            "src": "3111:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3096:28:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 209,
                        "nodeType": "ExpressionStatement",
                        "src": "3096:28:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 211,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 196,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 191,
                        "mutability": "mutable",
                        "name": "bentoBox_",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 211,
                        "src": "2926:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBentoBoxV1_$180",
                          "typeString": "contract IBentoBoxV1"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 190,
                          "name": "IBentoBoxV1",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 180,
                          "src": "2926:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IBentoBoxV1_$180",
                            "typeString": "contract IBentoBoxV1"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 193,
                        "mutability": "mutable",
                        "name": "factory_",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 211,
                        "src": "2957:26:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IUniswapV2Factory_$85",
                          "typeString": "contract IUniswapV2Factory"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 192,
                          "name": "IUniswapV2Factory",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 85,
                          "src": "2957:17:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IUniswapV2Factory_$85",
                            "typeString": "contract IUniswapV2Factory"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 195,
                        "mutability": "mutable",
                        "name": "pairCodeHash_",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 211,
                        "src": "2993:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 194,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2993:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2916:104:0"
                  },
                  "returnParameters": {
                    "id": 197,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3028:0:0"
                  },
                  "scope": 669,
                  "src": "2905:226:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 252,
                    "nodeType": "Block",
                    "src": "3401:238:0",
                    "statements": [
                      {
                        "assignments": [
                          223
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 223,
                            "mutability": "mutable",
                            "name": "amountInWithFee",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 252,
                            "src": "3411:23:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 222,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3411:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 228,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "393937",
                              "id": 226,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3450:3:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_997_by_1",
                                "typeString": "int_const 997"
                              },
                              "value": "997"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_997_by_1",
                                "typeString": "int_const 997"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 224,
                              "name": "amountIn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 213,
                              "src": "3437:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 225,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 74,
                            "src": "3437:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 227,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3437:17:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3411:43:0"
                      },
                      {
                        "assignments": [
                          230
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 230,
                            "mutability": "mutable",
                            "name": "numerator",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 252,
                            "src": "3464:17:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 229,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3464:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 235,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 233,
                              "name": "reserveOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 217,
                              "src": "3504:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 231,
                              "name": "amountInWithFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 223,
                              "src": "3484:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 232,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 74,
                            "src": "3484:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 234,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3484:31:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3464:51:0"
                      },
                      {
                        "assignments": [
                          237
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 237,
                            "mutability": "mutable",
                            "name": "denominator",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 252,
                            "src": "3525:19:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 236,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3525:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 245,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 243,
                              "name": "amountInWithFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 223,
                              "src": "3571:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "31303030",
                                  "id": 240,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3561:4:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1000_by_1",
                                    "typeString": "int_const 1000"
                                  },
                                  "value": "1000"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_1000_by_1",
                                    "typeString": "int_const 1000"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 238,
                                  "name": "reserveIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 215,
                                  "src": "3547:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 239,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 74,
                                "src": "3547:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 241,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3547:19:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 242,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 24,
                            "src": "3547:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 244,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3547:40:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3525:62:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 250,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 246,
                            "name": "amountOut",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 220,
                            "src": "3597:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 249,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 247,
                              "name": "numerator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 230,
                              "src": "3609:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "/",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 248,
                              "name": "denominator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 237,
                              "src": "3621:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "3609:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3597:35:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 251,
                        "nodeType": "ExpressionStatement",
                        "src": "3597:35:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 253,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getAmountOut",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 218,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 213,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 253,
                        "src": "3281:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 212,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3281:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 215,
                        "mutability": "mutable",
                        "name": "reserveIn",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 253,
                        "src": "3307:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 214,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3307:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 217,
                        "mutability": "mutable",
                        "name": "reserveOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 253,
                        "src": "3334:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 216,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3334:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3271:87:0"
                  },
                  "returnParameters": {
                    "id": 221,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 220,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 253,
                        "src": "3382:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 219,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3382:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3381:19:0"
                  },
                  "scope": 669,
                  "src": "3250:389:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 294,
                    "nodeType": "Block",
                    "src": "3907:190:0",
                    "statements": [
                      {
                        "assignments": [
                          265
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 265,
                            "mutability": "mutable",
                            "name": "numerator",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 294,
                            "src": "3917:17:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 264,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3917:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 273,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "31303030",
                              "id": 271,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3966:4:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1000_by_1",
                                "typeString": "int_const 1000"
                              },
                              "value": "1000"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_1000_by_1",
                                "typeString": "int_const 1000"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 268,
                                  "name": "amountOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 255,
                                  "src": "3951:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 266,
                                  "name": "reserveIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 257,
                                  "src": "3937:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 267,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 74,
                                "src": "3937:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 269,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3937:24:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 270,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 74,
                            "src": "3937:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 272,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3937:34:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3917:54:0"
                      },
                      {
                        "assignments": [
                          275
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 275,
                            "mutability": "mutable",
                            "name": "denominator",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 294,
                            "src": "3981:19:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 274,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3981:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 283,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "393937",
                              "id": 281,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4033:3:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_997_by_1",
                                "typeString": "int_const 997"
                              },
                              "value": "997"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_997_by_1",
                                "typeString": "int_const 997"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 278,
                                  "name": "amountOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 255,
                                  "src": "4018:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 276,
                                  "name": "reserveOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 259,
                                  "src": "4003:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 277,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sub",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 46,
                                "src": "4003:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 279,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4003:25:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 280,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 74,
                            "src": "4003:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 282,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4003:34:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3981:56:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 292,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 284,
                            "name": "amountIn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 262,
                            "src": "4047:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 290,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4088:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 287,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 285,
                                      "name": "numerator",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 265,
                                      "src": "4059:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "/",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 286,
                                      "name": "denominator",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 275,
                                      "src": "4071:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "4059:23:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 288,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "4058:25:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 289,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 24,
                              "src": "4058:29:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 291,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4058:32:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4047:43:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 293,
                        "nodeType": "ExpressionStatement",
                        "src": "4047:43:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 295,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getAmountIn",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 260,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 255,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 295,
                        "src": "3787:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 254,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3787:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 257,
                        "mutability": "mutable",
                        "name": "reserveIn",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 295,
                        "src": "3814:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 256,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3814:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 259,
                        "mutability": "mutable",
                        "name": "reserveOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 295,
                        "src": "3841:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 258,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3841:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3777:88:0"
                  },
                  "returnParameters": {
                    "id": 263,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 262,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 295,
                        "src": "3889:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 261,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3889:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3888:18:0"
                  },
                  "scope": 669,
                  "src": "3757:340:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 459,
                    "nodeType": "Block",
                    "src": "4784:1066:0",
                    "statements": [
                      {
                        "assignments": [
                          314,
                          316
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 314,
                            "mutability": "mutable",
                            "name": "token0",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 459,
                            "src": "4795:13:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$112",
                              "typeString": "contract IERC20"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 313,
                              "name": "IERC20",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 112,
                              "src": "4795:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$112",
                                "typeString": "contract IERC20"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 316,
                            "mutability": "mutable",
                            "name": "token1",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 459,
                            "src": "4810:13:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$112",
                              "typeString": "contract IERC20"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 315,
                              "name": "IERC20",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 112,
                              "src": "4810:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$112",
                                "typeString": "contract IERC20"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 327,
                        "initialValue": {
                          "argumentTypes": null,
                          "condition": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_contract$_IERC20_$112",
                              "typeString": "contract IERC20"
                            },
                            "id": 319,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 317,
                              "name": "fromToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 298,
                              "src": "4827:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$112",
                                "typeString": "contract IERC20"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 318,
                              "name": "toToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 300,
                              "src": "4839:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$112",
                                "typeString": "contract IERC20"
                              }
                            },
                            "src": "4827:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "id": 323,
                                "name": "toToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 300,
                                "src": "4873:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20_$112",
                                  "typeString": "contract IERC20"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 324,
                                "name": "fromToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 298,
                                "src": "4882:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20_$112",
                                  "typeString": "contract IERC20"
                                }
                              }
                            ],
                            "id": 325,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "4872:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_contract$_IERC20_$112_$_t_contract$_IERC20_$112_$",
                              "typeString": "tuple(contract IERC20,contract IERC20)"
                            }
                          },
                          "id": 326,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "4827:65:0",
                          "trueExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "id": 320,
                                "name": "fromToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 298,
                                "src": "4850:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20_$112",
                                  "typeString": "contract IERC20"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 321,
                                "name": "toToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 300,
                                "src": "4861:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20_$112",
                                  "typeString": "contract IERC20"
                                }
                              }
                            ],
                            "id": 322,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "4849:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_contract$_IERC20_$112_$_t_contract$_IERC20_$112_$",
                              "typeString": "tuple(contract IERC20,contract IERC20)"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_contract$_IERC20_$112_$_t_contract$_IERC20_$112_$",
                            "typeString": "tuple(contract IERC20,contract IERC20)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4794:98:0"
                      },
                      {
                        "assignments": [
                          329
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 329,
                            "mutability": "mutable",
                            "name": "pair",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 459,
                            "src": "4902:19:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IUniswapV2Pair_$111",
                              "typeString": "contract IUniswapV2Pair"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 328,
                              "name": "IUniswapV2Pair",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 111,
                              "src": "4902:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IUniswapV2Pair_$111",
                                "typeString": "contract IUniswapV2Pair"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 356,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "hexValue": "ff",
                                          "id": 336,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "string",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "5024:7:0",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_stringliteral_8b1a944cf13a9a1c08facb2c9e98623ef3254d2ddb48113885c3e8e97fec8db9",
                                            "typeString": "literal_string (contains invalid UTF-8 sequence at position 0)"
                                          },
                                          "value": null
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 337,
                                          "name": "factory",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 187,
                                          "src": "5033:7:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IUniswapV2Factory_$85",
                                            "typeString": "contract IUniswapV2Factory"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "arguments": [
                                            {
                                              "argumentTypes": null,
                                              "arguments": [
                                                {
                                                  "argumentTypes": null,
                                                  "arguments": [
                                                    {
                                                      "argumentTypes": null,
                                                      "id": 343,
                                                      "name": "token0",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 314,
                                                      "src": "5077:6:0",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_contract$_IERC20_$112",
                                                        "typeString": "contract IERC20"
                                                      }
                                                    }
                                                  ],
                                                  "expression": {
                                                    "argumentTypes": [
                                                      {
                                                        "typeIdentifier": "t_contract$_IERC20_$112",
                                                        "typeString": "contract IERC20"
                                                      }
                                                    ],
                                                    "id": 342,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "5069:7:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_type$_t_address_$",
                                                      "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                      "id": 341,
                                                      "name": "address",
                                                      "nodeType": "ElementaryTypeName",
                                                      "src": "5069:7:0",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": null,
                                                        "typeString": null
                                                      }
                                                    }
                                                  },
                                                  "id": 344,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "kind": "typeConversion",
                                                  "lValueRequested": false,
                                                  "names": [],
                                                  "nodeType": "FunctionCall",
                                                  "src": "5069:15:0",
                                                  "tryCall": false,
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  }
                                                },
                                                {
                                                  "argumentTypes": null,
                                                  "arguments": [
                                                    {
                                                      "argumentTypes": null,
                                                      "id": 347,
                                                      "name": "token1",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 316,
                                                      "src": "5094:6:0",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_contract$_IERC20_$112",
                                                        "typeString": "contract IERC20"
                                                      }
                                                    }
                                                  ],
                                                  "expression": {
                                                    "argumentTypes": [
                                                      {
                                                        "typeIdentifier": "t_contract$_IERC20_$112",
                                                        "typeString": "contract IERC20"
                                                      }
                                                    ],
                                                    "id": 346,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "5086:7:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_type$_t_address_$",
                                                      "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                      "id": 345,
                                                      "name": "address",
                                                      "nodeType": "ElementaryTypeName",
                                                      "src": "5086:7:0",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": null,
                                                        "typeString": null
                                                      }
                                                    }
                                                  },
                                                  "id": 348,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "kind": "typeConversion",
                                                  "lValueRequested": false,
                                                  "names": [],
                                                  "nodeType": "FunctionCall",
                                                  "src": "5086:15:0",
                                                  "tryCall": false,
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  }
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": [
                                                  {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  },
                                                  {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": null,
                                                  "id": 339,
                                                  "name": "abi",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": -1,
                                                  "src": "5052:3:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_abi",
                                                    "typeString": "abi"
                                                  }
                                                },
                                                "id": 340,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "memberName": "encodePacked",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": null,
                                                "src": "5052:16:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                  "typeString": "function () pure returns (bytes memory)"
                                                }
                                              },
                                              "id": 349,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "kind": "functionCall",
                                              "lValueRequested": false,
                                              "names": [],
                                              "nodeType": "FunctionCall",
                                              "src": "5052:50:0",
                                              "tryCall": false,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                              }
                                            ],
                                            "id": 338,
                                            "name": "keccak256",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -8,
                                            "src": "5042:9:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                              "typeString": "function (bytes memory) pure returns (bytes32)"
                                            }
                                          },
                                          "id": 350,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "5042:61:0",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 351,
                                          "name": "pairCodeHash",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 189,
                                          "src": "5105:12:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_stringliteral_8b1a944cf13a9a1c08facb2c9e98623ef3254d2ddb48113885c3e8e97fec8db9",
                                            "typeString": "literal_string (contains invalid UTF-8 sequence at position 0)"
                                          },
                                          {
                                            "typeIdentifier": "t_contract$_IUniswapV2Factory_$85",
                                            "typeString": "contract IUniswapV2Factory"
                                          },
                                          {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          },
                                          {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 334,
                                          "name": "abi",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -1,
                                          "src": "5007:3:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_abi",
                                            "typeString": "abi"
                                          }
                                        },
                                        "id": 335,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "memberName": "encodePacked",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "5007:16:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                          "typeString": "function () pure returns (bytes memory)"
                                        }
                                      },
                                      "id": 352,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "5007:111:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    ],
                                    "id": 333,
                                    "name": "keccak256",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -8,
                                    "src": "4997:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                      "typeString": "function (bytes memory) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 353,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4997:122:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "id": 332,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "4968:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": {
                                  "id": 331,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "4968:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 354,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4968:169:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 330,
                            "name": "IUniswapV2Pair",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 111,
                            "src": "4936:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IUniswapV2Pair_$111_$",
                              "typeString": "type(contract IUniswapV2Pair)"
                            }
                          },
                          "id": 355,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4936:215:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IUniswapV2Pair_$111",
                            "typeString": "contract IUniswapV2Pair"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4902:249:0"
                      },
                      {
                        "assignments": [
                          358,
                          null
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 358,
                            "mutability": "mutable",
                            "name": "amountFrom",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 459,
                            "src": "5163:18:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 357,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "5163:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          null
                        ],
                        "id": 373,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 361,
                              "name": "fromToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 298,
                              "src": "5205:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$112",
                                "typeString": "contract IERC20"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 364,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "5224:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_SushiSwapSwapperV1_$669",
                                    "typeString": "contract SushiSwapSwapperV1"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_SushiSwapSwapperV1_$669",
                                    "typeString": "contract SushiSwapSwapperV1"
                                  }
                                ],
                                "id": 363,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "5216:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 362,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5216:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 365,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5216:13:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 368,
                                  "name": "pair",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 329,
                                  "src": "5239:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IUniswapV2Pair_$111",
                                    "typeString": "contract IUniswapV2Pair"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IUniswapV2Pair_$111",
                                    "typeString": "contract IUniswapV2Pair"
                                  }
                                ],
                                "id": 367,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "5231:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 366,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5231:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 369,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5231:13:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 370,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5246:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "argumentTypes": null,
                              "id": 371,
                              "name": "shareFrom",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 306,
                              "src": "5249:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$112",
                                "typeString": "contract IERC20"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 359,
                              "name": "bentoBox",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 185,
                              "src": "5187:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBentoBoxV1_$180",
                                "typeString": "contract IBentoBoxV1"
                              }
                            },
                            "id": 360,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "withdraw",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 179,
                            "src": "5187:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_contract$_IERC20_$112_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                              "typeString": "function (contract IERC20,address,address,uint256,uint256) external returns (uint256,uint256)"
                            }
                          },
                          "id": 372,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5187:72:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5162:97:0"
                      },
                      {
                        "assignments": [
                          375,
                          377,
                          null
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 375,
                            "mutability": "mutable",
                            "name": "reserve0",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 459,
                            "src": "5271:16:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 374,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "5271:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 377,
                            "mutability": "mutable",
                            "name": "reserve1",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 459,
                            "src": "5289:16:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 376,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "5289:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          null
                        ],
                        "id": 381,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 378,
                              "name": "pair",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 329,
                              "src": "5311:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IUniswapV2Pair_$111",
                                "typeString": "contract IUniswapV2Pair"
                              }
                            },
                            "id": 379,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getReserves",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 99,
                            "src": "5311:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint112_$_t_uint112_$_t_uint32_$",
                              "typeString": "function () view external returns (uint112,uint112,uint32)"
                            }
                          },
                          "id": 380,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5311:18:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint112_$_t_uint112_$_t_uint32_$",
                            "typeString": "tuple(uint112,uint112,uint32)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5270:59:0"
                      },
                      {
                        "assignments": [
                          383
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 383,
                            "mutability": "mutable",
                            "name": "amountTo",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 459,
                            "src": "5339:16:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 382,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "5339:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 384,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5339:16:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_contract$_IERC20_$112",
                            "typeString": "contract IERC20"
                          },
                          "id": 387,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 385,
                            "name": "toToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 300,
                            "src": "5369:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$112",
                              "typeString": "contract IERC20"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 386,
                            "name": "fromToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 298,
                            "src": "5379:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$112",
                              "typeString": "contract IERC20"
                            }
                          },
                          "src": "5369:19:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 435,
                          "nodeType": "Block",
                          "src": "5545:149:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 418,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 412,
                                  "name": "amountTo",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 383,
                                  "src": "5559:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 414,
                                      "name": "amountFrom",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 358,
                                      "src": "5583:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 415,
                                      "name": "reserve1",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 377,
                                      "src": "5595:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 416,
                                      "name": "reserve0",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 375,
                                      "src": "5605:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 413,
                                    "name": "getAmountOut",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 253,
                                    "src": "5570:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 417,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5570:44:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5559:55:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 419,
                              "nodeType": "ExpressionStatement",
                              "src": "5559:55:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 423,
                                    "name": "amountTo",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 383,
                                    "src": "5638:8:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 424,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5648:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 427,
                                        "name": "bentoBox",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 185,
                                        "src": "5659:8:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_IBentoBoxV1_$180",
                                          "typeString": "contract IBentoBoxV1"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_IBentoBoxV1_$180",
                                          "typeString": "contract IBentoBoxV1"
                                        }
                                      ],
                                      "id": 426,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "5651:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 425,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5651:7:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": null,
                                          "typeString": null
                                        }
                                      }
                                    },
                                    "id": 428,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "5651:17:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "hexValue": "30",
                                        "id": 431,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "5680:1:0",
                                        "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": 430,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "NewExpression",
                                      "src": "5670:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                                        "typeString": "function (uint256) pure returns (bytes memory)"
                                      },
                                      "typeName": {
                                        "id": 429,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5674:5:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_storage_ptr",
                                          "typeString": "bytes"
                                        }
                                      }
                                    },
                                    "id": 432,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "5670:12:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 420,
                                    "name": "pair",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 329,
                                    "src": "5628:4:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IUniswapV2Pair_$111",
                                      "typeString": "contract IUniswapV2Pair"
                                    }
                                  },
                                  "id": 422,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "swap",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 110,
                                  "src": "5628:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$returns$__$",
                                    "typeString": "function (uint256,uint256,address,bytes memory) external"
                                  }
                                },
                                "id": 433,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5628:55:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 434,
                              "nodeType": "ExpressionStatement",
                              "src": "5628:55:0"
                            }
                          ]
                        },
                        "id": 436,
                        "nodeType": "IfStatement",
                        "src": "5365:329:0",
                        "trueBody": {
                          "id": 411,
                          "nodeType": "Block",
                          "src": "5390:149:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 394,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 388,
                                  "name": "amountTo",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 383,
                                  "src": "5404:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 390,
                                      "name": "amountFrom",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 358,
                                      "src": "5428:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 391,
                                      "name": "reserve0",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 375,
                                      "src": "5440:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 392,
                                      "name": "reserve1",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 377,
                                      "src": "5450:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 389,
                                    "name": "getAmountOut",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 253,
                                    "src": "5415:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 393,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5415:44:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5404:55:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 395,
                              "nodeType": "ExpressionStatement",
                              "src": "5404:55:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 399,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5483:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 400,
                                    "name": "amountTo",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 383,
                                    "src": "5486:8:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 403,
                                        "name": "bentoBox",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 185,
                                        "src": "5504:8:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_IBentoBoxV1_$180",
                                          "typeString": "contract IBentoBoxV1"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_IBentoBoxV1_$180",
                                          "typeString": "contract IBentoBoxV1"
                                        }
                                      ],
                                      "id": 402,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "5496:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 401,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5496:7:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": null,
                                          "typeString": null
                                        }
                                      }
                                    },
                                    "id": 404,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "5496:17:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "hexValue": "30",
                                        "id": 407,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "5525:1:0",
                                        "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": 406,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "NewExpression",
                                      "src": "5515:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                                        "typeString": "function (uint256) pure returns (bytes memory)"
                                      },
                                      "typeName": {
                                        "id": 405,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5519:5:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_storage_ptr",
                                          "typeString": "bytes"
                                        }
                                      }
                                    },
                                    "id": 408,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "5515:12:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 396,
                                    "name": "pair",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 329,
                                    "src": "5473:4:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IUniswapV2Pair_$111",
                                      "typeString": "contract IUniswapV2Pair"
                                    }
                                  },
                                  "id": 398,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "swap",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 110,
                                  "src": "5473:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$returns$__$",
                                    "typeString": "function (uint256,uint256,address,bytes memory) external"
                                  }
                                },
                                "id": 409,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5473:55:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 410,
                              "nodeType": "ExpressionStatement",
                              "src": "5473:55:0"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 450,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "components": [
                              null,
                              {
                                "argumentTypes": null,
                                "id": 437,
                                "name": "shareReturned",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 311,
                                "src": "5706:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 438,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "5703:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$_t_uint256_$",
                              "typeString": "tuple(,uint256)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 441,
                                "name": "toToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 300,
                                "src": "5740:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20_$112",
                                  "typeString": "contract IERC20"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 444,
                                    "name": "bentoBox",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 185,
                                    "src": "5757:8:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IBentoBoxV1_$180",
                                      "typeString": "contract IBentoBoxV1"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_IBentoBoxV1_$180",
                                      "typeString": "contract IBentoBoxV1"
                                    }
                                  ],
                                  "id": 443,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "5749:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 442,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5749:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 445,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5749:17:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 446,
                                "name": "recipient",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 302,
                                "src": "5768:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 447,
                                "name": "amountTo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 383,
                                "src": "5779:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 448,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5789:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IERC20_$112",
                                  "typeString": "contract IERC20"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 439,
                                "name": "bentoBox",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 185,
                                "src": "5723:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IBentoBoxV1_$180",
                                  "typeString": "contract IBentoBoxV1"
                                }
                              },
                              "id": 440,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "deposit",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 129,
                              "src": "5723:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_payable$_t_contract$_IERC20_$112_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                                "typeString": "function (contract IERC20,address,address,uint256,uint256) payable external returns (uint256,uint256)"
                              }
                            },
                            "id": 449,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5723:68:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(uint256,uint256)"
                            }
                          },
                          "src": "5703:88:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 451,
                        "nodeType": "ExpressionStatement",
                        "src": "5703:88:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 457,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 452,
                            "name": "extraShare",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 309,
                            "src": "5801:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 455,
                                "name": "shareToMin",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 304,
                                "src": "5832:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 453,
                                "name": "shareReturned",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 311,
                                "src": "5814:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 454,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 46,
                              "src": "5814:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 456,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5814:29:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5801:42:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 458,
                        "nodeType": "ExpressionStatement",
                        "src": "5801:42:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 296,
                    "nodeType": "StructuredDocumentation",
                    "src": "4165:403:0",
                    "text": "@notice Withdraws 'amountFrom' of token 'from' from the BentoBox account for this swapper.\n Swaps it for at least 'amountToMin' of token 'to'.\n Transfers the swapped tokens of 'to' into the BentoBox using a plain ERC20 transfer.\n Returns the amount of tokens 'to' transferred to BentoBox.\n (The BentoBox skim function will be used by the caller to get the swapped funds)."
                  },
                  "functionSelector": "e343fe12",
                  "id": 460,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "swap",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 307,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 298,
                        "mutability": "mutable",
                        "name": "fromToken",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 460,
                        "src": "4596:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$112",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 297,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 112,
                          "src": "4596:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$112",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 300,
                        "mutability": "mutable",
                        "name": "toToken",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 460,
                        "src": "4622:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$112",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 299,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 112,
                          "src": "4622:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$112",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 302,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 460,
                        "src": "4646:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 301,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4646:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 304,
                        "mutability": "mutable",
                        "name": "shareToMin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 460,
                        "src": "4673:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 303,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4673:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 306,
                        "mutability": "mutable",
                        "name": "shareFrom",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 460,
                        "src": "4701:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 305,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4701:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "4586:138:0"
                  },
                  "returnParameters": {
                    "id": 312,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 309,
                        "mutability": "mutable",
                        "name": "extraShare",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 460,
                        "src": "4741:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 308,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4741:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 311,
                        "mutability": "mutable",
                        "name": "shareReturned",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 460,
                        "src": "4761:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 310,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4761:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "4740:43:0"
                  },
                  "scope": 669,
                  "src": "4573:1277:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 667,
                    "nodeType": "Block",
                    "src": "6859:1390:0",
                    "statements": [
                      {
                        "assignments": [
                          481
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 481,
                            "mutability": "mutable",
                            "name": "pair",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 667,
                            "src": "6869:19:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IUniswapV2Pair_$111",
                              "typeString": "contract IUniswapV2Pair"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 480,
                              "name": "IUniswapV2Pair",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 111,
                              "src": "6869:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IUniswapV2Pair_$111",
                                "typeString": "contract IUniswapV2Pair"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 482,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6869:19:0"
                      },
                      {
                        "id": 527,
                        "nodeType": "Block",
                        "src": "6898:359:0",
                        "statements": [
                          {
                            "assignments": [
                              484,
                              486
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 484,
                                "mutability": "mutable",
                                "name": "token0",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 527,
                                "src": "6913:13:0",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20_$112",
                                  "typeString": "contract IERC20"
                                },
                                "typeName": {
                                  "contractScope": null,
                                  "id": 483,
                                  "name": "IERC20",
                                  "nodeType": "UserDefinedTypeName",
                                  "referencedDeclaration": 112,
                                  "src": "6913:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$112",
                                    "typeString": "contract IERC20"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 486,
                                "mutability": "mutable",
                                "name": "token1",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 527,
                                "src": "6928:13:0",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20_$112",
                                  "typeString": "contract IERC20"
                                },
                                "typeName": {
                                  "contractScope": null,
                                  "id": 485,
                                  "name": "IERC20",
                                  "nodeType": "UserDefinedTypeName",
                                  "referencedDeclaration": 112,
                                  "src": "6928:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$112",
                                    "typeString": "contract IERC20"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              }
                            ],
                            "id": 497,
                            "initialValue": {
                              "argumentTypes": null,
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_contract$_IERC20_$112",
                                  "typeString": "contract IERC20"
                                },
                                "id": 489,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 487,
                                  "name": "fromToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 463,
                                  "src": "6945:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$112",
                                    "typeString": "contract IERC20"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 488,
                                  "name": "toToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 465,
                                  "src": "6957:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$112",
                                    "typeString": "contract IERC20"
                                  }
                                },
                                "src": "6945:19:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "id": 493,
                                    "name": "toToken",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 465,
                                    "src": "6991:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC20_$112",
                                      "typeString": "contract IERC20"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 494,
                                    "name": "fromToken",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 463,
                                    "src": "7000:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC20_$112",
                                      "typeString": "contract IERC20"
                                    }
                                  }
                                ],
                                "id": 495,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "6990:20:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_contract$_IERC20_$112_$_t_contract$_IERC20_$112_$",
                                  "typeString": "tuple(contract IERC20,contract IERC20)"
                                }
                              },
                              "id": 496,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "Conditional",
                              "src": "6945:65:0",
                              "trueExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "id": 490,
                                    "name": "fromToken",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 463,
                                    "src": "6968:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC20_$112",
                                      "typeString": "contract IERC20"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 491,
                                    "name": "toToken",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 465,
                                    "src": "6979:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC20_$112",
                                      "typeString": "contract IERC20"
                                    }
                                  }
                                ],
                                "id": 492,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "6967:20:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_contract$_IERC20_$112_$_t_contract$_IERC20_$112_$",
                                  "typeString": "tuple(contract IERC20,contract IERC20)"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_contract$_IERC20_$112_$_t_contract$_IERC20_$112_$",
                                "typeString": "tuple(contract IERC20,contract IERC20)"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "6912:98:0"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 525,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 498,
                                "name": "pair",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 481,
                                "src": "7024:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IUniswapV2Pair_$111",
                                  "typeString": "contract IUniswapV2Pair"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "arguments": [
                                              {
                                                "argumentTypes": null,
                                                "hexValue": "ff",
                                                "id": 505,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "7119:7:0",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_stringliteral_8b1a944cf13a9a1c08facb2c9e98623ef3254d2ddb48113885c3e8e97fec8db9",
                                                  "typeString": "literal_string (contains invalid UTF-8 sequence at position 0)"
                                                },
                                                "value": null
                                              },
                                              {
                                                "argumentTypes": null,
                                                "id": 506,
                                                "name": "factory",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 187,
                                                "src": "7128:7:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_contract$_IUniswapV2Factory_$85",
                                                  "typeString": "contract IUniswapV2Factory"
                                                }
                                              },
                                              {
                                                "argumentTypes": null,
                                                "arguments": [
                                                  {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                      {
                                                        "argumentTypes": null,
                                                        "arguments": [
                                                          {
                                                            "argumentTypes": null,
                                                            "id": 512,
                                                            "name": "token0",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 484,
                                                            "src": "7172:6:0",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_contract$_IERC20_$112",
                                                              "typeString": "contract IERC20"
                                                            }
                                                          }
                                                        ],
                                                        "expression": {
                                                          "argumentTypes": [
                                                            {
                                                              "typeIdentifier": "t_contract$_IERC20_$112",
                                                              "typeString": "contract IERC20"
                                                            }
                                                          ],
                                                          "id": 511,
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "lValueRequested": false,
                                                          "nodeType": "ElementaryTypeNameExpression",
                                                          "src": "7164:7:0",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                          },
                                                          "typeName": {
                                                            "id": 510,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "7164:7:0",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": null,
                                                              "typeString": null
                                                            }
                                                          }
                                                        },
                                                        "id": 513,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "7164:15:0",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_address",
                                                          "typeString": "address"
                                                        }
                                                      },
                                                      {
                                                        "argumentTypes": null,
                                                        "arguments": [
                                                          {
                                                            "argumentTypes": null,
                                                            "id": 516,
                                                            "name": "token1",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 486,
                                                            "src": "7189:6:0",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_contract$_IERC20_$112",
                                                              "typeString": "contract IERC20"
                                                            }
                                                          }
                                                        ],
                                                        "expression": {
                                                          "argumentTypes": [
                                                            {
                                                              "typeIdentifier": "t_contract$_IERC20_$112",
                                                              "typeString": "contract IERC20"
                                                            }
                                                          ],
                                                          "id": 515,
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "lValueRequested": false,
                                                          "nodeType": "ElementaryTypeNameExpression",
                                                          "src": "7181:7:0",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                          },
                                                          "typeName": {
                                                            "id": 514,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "7181:7:0",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": null,
                                                              "typeString": null
                                                            }
                                                          }
                                                        },
                                                        "id": 517,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "7181:15:0",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_address",
                                                          "typeString": "address"
                                                        }
                                                      }
                                                    ],
                                                    "expression": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_address",
                                                          "typeString": "address"
                                                        },
                                                        {
                                                          "typeIdentifier": "t_address",
                                                          "typeString": "address"
                                                        }
                                                      ],
                                                      "expression": {
                                                        "argumentTypes": null,
                                                        "id": 508,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -1,
                                                        "src": "7147:3:0",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_magic_abi",
                                                          "typeString": "abi"
                                                        }
                                                      },
                                                      "id": 509,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "memberName": "encodePacked",
                                                      "nodeType": "MemberAccess",
                                                      "referencedDeclaration": null,
                                                      "src": "7147:16:0",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                        "typeString": "function () pure returns (bytes memory)"
                                                      }
                                                    },
                                                    "id": 518,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "7147:50:0",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_bytes_memory_ptr",
                                                      "typeString": "bytes memory"
                                                    }
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_bytes_memory_ptr",
                                                      "typeString": "bytes memory"
                                                    }
                                                  ],
                                                  "id": 507,
                                                  "name": "keccak256",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": -8,
                                                  "src": "7137:9:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                    "typeString": "function (bytes memory) pure returns (bytes32)"
                                                  }
                                                },
                                                "id": 519,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "7137:61:0",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bytes32",
                                                  "typeString": "bytes32"
                                                }
                                              },
                                              {
                                                "argumentTypes": null,
                                                "id": 520,
                                                "name": "pairCodeHash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 189,
                                                "src": "7200:12:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bytes32",
                                                  "typeString": "bytes32"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_stringliteral_8b1a944cf13a9a1c08facb2c9e98623ef3254d2ddb48113885c3e8e97fec8db9",
                                                  "typeString": "literal_string (contains invalid UTF-8 sequence at position 0)"
                                                },
                                                {
                                                  "typeIdentifier": "t_contract$_IUniswapV2Factory_$85",
                                                  "typeString": "contract IUniswapV2Factory"
                                                },
                                                {
                                                  "typeIdentifier": "t_bytes32",
                                                  "typeString": "bytes32"
                                                },
                                                {
                                                  "typeIdentifier": "t_bytes32",
                                                  "typeString": "bytes32"
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": null,
                                                "id": 503,
                                                "name": "abi",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": -1,
                                                "src": "7102:3:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_magic_abi",
                                                  "typeString": "abi"
                                                }
                                              },
                                              "id": 504,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "memberName": "encodePacked",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": null,
                                              "src": "7102:16:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function () pure returns (bytes memory)"
                                              }
                                            },
                                            "id": 521,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "7102:111:0",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          ],
                                          "id": 502,
                                          "name": "keccak256",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -8,
                                          "src": "7092:9:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                            "typeString": "function (bytes memory) pure returns (bytes32)"
                                          }
                                        },
                                        "id": 522,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7092:122:0",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "id": 501,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "7063:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint256_$",
                                        "typeString": "type(uint256)"
                                      },
                                      "typeName": {
                                        "id": 500,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7063:7:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": null,
                                          "typeString": null
                                        }
                                      }
                                    },
                                    "id": 523,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "7063:169:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 499,
                                  "name": "IUniswapV2Pair",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 111,
                                  "src": "7031:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IUniswapV2Pair_$111_$",
                                    "typeString": "type(contract IUniswapV2Pair)"
                                  }
                                },
                                "id": 524,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7031:215:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IUniswapV2Pair_$111",
                                  "typeString": "contract IUniswapV2Pair"
                                }
                              },
                              "src": "7024:222:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IUniswapV2Pair_$111",
                                "typeString": "contract IUniswapV2Pair"
                              }
                            },
                            "id": 526,
                            "nodeType": "ExpressionStatement",
                            "src": "7024:222:0"
                          }
                        ]
                      },
                      {
                        "assignments": [
                          529,
                          531,
                          null
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 529,
                            "mutability": "mutable",
                            "name": "reserve0",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 667,
                            "src": "7267:16:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 528,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "7267:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 531,
                            "mutability": "mutable",
                            "name": "reserve1",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 667,
                            "src": "7285:16:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 530,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "7285:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          null
                        ],
                        "id": 535,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 532,
                              "name": "pair",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 481,
                              "src": "7307:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IUniswapV2Pair_$111",
                                "typeString": "contract IUniswapV2Pair"
                              }
                            },
                            "id": 533,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getReserves",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 99,
                            "src": "7307:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint112_$_t_uint112_$_t_uint32_$",
                              "typeString": "function () view external returns (uint112,uint112,uint32)"
                            }
                          },
                          "id": 534,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7307:18:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint112_$_t_uint112_$_t_uint32_$",
                            "typeString": "tuple(uint112,uint112,uint32)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7266:59:0"
                      },
                      {
                        "assignments": [
                          537
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 537,
                            "mutability": "mutable",
                            "name": "amountToExact",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 667,
                            "src": "7336:21:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 536,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "7336:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 544,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 540,
                              "name": "toToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 465,
                              "src": "7378:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$112",
                                "typeString": "contract IERC20"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 541,
                              "name": "shareToExact",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 473,
                              "src": "7387:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "74727565",
                              "id": 542,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7401:4:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$112",
                                "typeString": "contract IERC20"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 538,
                              "name": "bentoBox",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 185,
                              "src": "7360:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBentoBoxV1_$180",
                                "typeString": "contract IBentoBoxV1"
                              }
                            },
                            "id": 539,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "toAmount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 140,
                            "src": "7360:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_contract$_IERC20_$112_$_t_uint256_$_t_bool_$returns$_t_uint256_$",
                              "typeString": "function (contract IERC20,uint256,bool) view external returns (uint256)"
                            }
                          },
                          "id": 543,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7360:46:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7336:70:0"
                      },
                      {
                        "assignments": [
                          546
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 546,
                            "mutability": "mutable",
                            "name": "amountFrom",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 667,
                            "src": "7417:18:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 545,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "7417:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 547,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7417:18:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_contract$_IERC20_$112",
                            "typeString": "contract IERC20"
                          },
                          "id": 550,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 548,
                            "name": "toToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 465,
                            "src": "7449:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$112",
                              "typeString": "contract IERC20"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 549,
                            "name": "fromToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 463,
                            "src": "7459:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$112",
                              "typeString": "contract IERC20"
                            }
                          },
                          "src": "7449:19:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 628,
                          "nodeType": "Block",
                          "src": "7727:251:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 596,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 590,
                                  "name": "amountFrom",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 546,
                                  "src": "7741:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 592,
                                      "name": "amountToExact",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 537,
                                      "src": "7766:13:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 593,
                                      "name": "reserve1",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 531,
                                      "src": "7781:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 594,
                                      "name": "reserve0",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 529,
                                      "src": "7791:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 591,
                                    "name": "getAmountIn",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 295,
                                    "src": "7754:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 595,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "7754:46:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "7741:59:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 597,
                              "nodeType": "ExpressionStatement",
                              "src": "7741:59:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 614,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "components": [
                                    null,
                                    {
                                      "argumentTypes": null,
                                      "id": 598,
                                      "name": "shareUsed",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 476,
                                      "src": "7817:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 599,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "TupleExpression",
                                  "src": "7814:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$__$_t_uint256_$",
                                    "typeString": "tuple(,uint256)"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 602,
                                      "name": "fromToken",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 463,
                                      "src": "7848:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$112",
                                        "typeString": "contract IERC20"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 605,
                                          "name": "this",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -28,
                                          "src": "7867:4:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_SushiSwapSwapperV1_$669",
                                            "typeString": "contract SushiSwapSwapperV1"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_contract$_SushiSwapSwapperV1_$669",
                                            "typeString": "contract SushiSwapSwapperV1"
                                          }
                                        ],
                                        "id": 604,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "7859:7:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_address_$",
                                          "typeString": "type(address)"
                                        },
                                        "typeName": {
                                          "id": 603,
                                          "name": "address",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "7859:7:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": null,
                                            "typeString": null
                                          }
                                        }
                                      },
                                      "id": 606,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "7859:13:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 609,
                                          "name": "pair",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 481,
                                          "src": "7882:4:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IUniswapV2Pair_$111",
                                            "typeString": "contract IUniswapV2Pair"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_contract$_IUniswapV2Pair_$111",
                                            "typeString": "contract IUniswapV2Pair"
                                          }
                                        ],
                                        "id": 608,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "7874:7:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_address_$",
                                          "typeString": "type(address)"
                                        },
                                        "typeName": {
                                          "id": 607,
                                          "name": "address",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "7874:7:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": null,
                                            "typeString": null
                                          }
                                        }
                                      },
                                      "id": 610,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "7874:13:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 611,
                                      "name": "amountFrom",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 546,
                                      "src": "7889:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 612,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "7901:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_IERC20_$112",
                                        "typeString": "contract IERC20"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 600,
                                      "name": "bentoBox",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 185,
                                      "src": "7830:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IBentoBoxV1_$180",
                                        "typeString": "contract IBentoBoxV1"
                                      }
                                    },
                                    "id": 601,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "withdraw",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 179,
                                    "src": "7830:17:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_nonpayable$_t_contract$_IERC20_$112_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                                      "typeString": "function (contract IERC20,address,address,uint256,uint256) external returns (uint256,uint256)"
                                    }
                                  },
                                  "id": 613,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "7830:73:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                    "typeString": "tuple(uint256,uint256)"
                                  }
                                },
                                "src": "7814:89:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 615,
                              "nodeType": "ExpressionStatement",
                              "src": "7814:89:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 619,
                                    "name": "amountToExact",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 537,
                                    "src": "7927:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 620,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "7942:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 623,
                                        "name": "bentoBox",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 185,
                                        "src": "7953:8:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_IBentoBoxV1_$180",
                                          "typeString": "contract IBentoBoxV1"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_IBentoBoxV1_$180",
                                          "typeString": "contract IBentoBoxV1"
                                        }
                                      ],
                                      "id": 622,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "7945:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 621,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7945:7:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": null,
                                          "typeString": null
                                        }
                                      }
                                    },
                                    "id": 624,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "7945:17:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "",
                                    "id": 625,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "7964:2:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                      "typeString": "literal_string \"\""
                                    },
                                    "value": ""
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                      "typeString": "literal_string \"\""
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 616,
                                    "name": "pair",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 481,
                                    "src": "7917:4:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IUniswapV2Pair_$111",
                                      "typeString": "contract IUniswapV2Pair"
                                    }
                                  },
                                  "id": 618,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "swap",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 110,
                                  "src": "7917:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$returns$__$",
                                    "typeString": "function (uint256,uint256,address,bytes memory) external"
                                  }
                                },
                                "id": 626,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7917:50:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 627,
                              "nodeType": "ExpressionStatement",
                              "src": "7917:50:0"
                            }
                          ]
                        },
                        "id": 629,
                        "nodeType": "IfStatement",
                        "src": "7445:533:0",
                        "trueBody": {
                          "id": 589,
                          "nodeType": "Block",
                          "src": "7470:251:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 557,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 551,
                                  "name": "amountFrom",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 546,
                                  "src": "7484:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 553,
                                      "name": "amountToExact",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 537,
                                      "src": "7509:13:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 554,
                                      "name": "reserve0",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 529,
                                      "src": "7524:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 555,
                                      "name": "reserve1",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 531,
                                      "src": "7534:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 552,
                                    "name": "getAmountIn",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 295,
                                    "src": "7497:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 556,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "7497:46:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "7484:59:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 558,
                              "nodeType": "ExpressionStatement",
                              "src": "7484:59:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 575,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "components": [
                                    null,
                                    {
                                      "argumentTypes": null,
                                      "id": 559,
                                      "name": "shareUsed",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 476,
                                      "src": "7560:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 560,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "TupleExpression",
                                  "src": "7557:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$__$_t_uint256_$",
                                    "typeString": "tuple(,uint256)"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 563,
                                      "name": "fromToken",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 463,
                                      "src": "7591:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$112",
                                        "typeString": "contract IERC20"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 566,
                                          "name": "this",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -28,
                                          "src": "7610:4:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_SushiSwapSwapperV1_$669",
                                            "typeString": "contract SushiSwapSwapperV1"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_contract$_SushiSwapSwapperV1_$669",
                                            "typeString": "contract SushiSwapSwapperV1"
                                          }
                                        ],
                                        "id": 565,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "7602:7:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_address_$",
                                          "typeString": "type(address)"
                                        },
                                        "typeName": {
                                          "id": 564,
                                          "name": "address",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "7602:7:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": null,
                                            "typeString": null
                                          }
                                        }
                                      },
                                      "id": 567,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "7602:13:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 570,
                                          "name": "pair",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 481,
                                          "src": "7625:4:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IUniswapV2Pair_$111",
                                            "typeString": "contract IUniswapV2Pair"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_contract$_IUniswapV2Pair_$111",
                                            "typeString": "contract IUniswapV2Pair"
                                          }
                                        ],
                                        "id": 569,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "7617:7:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_address_$",
                                          "typeString": "type(address)"
                                        },
                                        "typeName": {
                                          "id": 568,
                                          "name": "address",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "7617:7:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": null,
                                            "typeString": null
                                          }
                                        }
                                      },
                                      "id": 571,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "7617:13:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 572,
                                      "name": "amountFrom",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 546,
                                      "src": "7632:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 573,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "7644:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_IERC20_$112",
                                        "typeString": "contract IERC20"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 561,
                                      "name": "bentoBox",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 185,
                                      "src": "7573:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IBentoBoxV1_$180",
                                        "typeString": "contract IBentoBoxV1"
                                      }
                                    },
                                    "id": 562,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "withdraw",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 179,
                                    "src": "7573:17:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_nonpayable$_t_contract$_IERC20_$112_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                                      "typeString": "function (contract IERC20,address,address,uint256,uint256) external returns (uint256,uint256)"
                                    }
                                  },
                                  "id": 574,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "7573:73:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                    "typeString": "tuple(uint256,uint256)"
                                  }
                                },
                                "src": "7557:89:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 576,
                              "nodeType": "ExpressionStatement",
                              "src": "7557:89:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 580,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "7670:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 581,
                                    "name": "amountToExact",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 537,
                                    "src": "7673:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 584,
                                        "name": "bentoBox",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 185,
                                        "src": "7696:8:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_IBentoBoxV1_$180",
                                          "typeString": "contract IBentoBoxV1"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_IBentoBoxV1_$180",
                                          "typeString": "contract IBentoBoxV1"
                                        }
                                      ],
                                      "id": 583,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "7688:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 582,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7688:7:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": null,
                                          "typeString": null
                                        }
                                      }
                                    },
                                    "id": 585,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "7688:17:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "",
                                    "id": 586,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "7707:2:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                      "typeString": "literal_string \"\""
                                    },
                                    "value": ""
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                      "typeString": "literal_string \"\""
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 577,
                                    "name": "pair",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 481,
                                    "src": "7660:4:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IUniswapV2Pair_$111",
                                      "typeString": "contract IUniswapV2Pair"
                                    }
                                  },
                                  "id": 579,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "swap",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 110,
                                  "src": "7660:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$returns$__$",
                                    "typeString": "function (uint256,uint256,address,bytes memory) external"
                                  }
                                },
                                "id": 587,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7660:50:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 588,
                              "nodeType": "ExpressionStatement",
                              "src": "7660:50:0"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 633,
                              "name": "toToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 465,
                              "src": "8004:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$112",
                                "typeString": "contract IERC20"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 636,
                                  "name": "bentoBox",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 185,
                                  "src": "8021:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IBentoBoxV1_$180",
                                    "typeString": "contract IBentoBoxV1"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IBentoBoxV1_$180",
                                    "typeString": "contract IBentoBoxV1"
                                  }
                                ],
                                "id": 635,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8013:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 634,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8013:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 637,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8013:17:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 638,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 467,
                              "src": "8032:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 639,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8043:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "argumentTypes": null,
                              "id": 640,
                              "name": "shareToExact",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 473,
                              "src": "8046:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$112",
                                "typeString": "contract IERC20"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 630,
                              "name": "bentoBox",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 185,
                              "src": "7987:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBentoBoxV1_$180",
                                "typeString": "contract IBentoBoxV1"
                              }
                            },
                            "id": 632,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "deposit",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 129,
                            "src": "7987:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_payable$_t_contract$_IERC20_$112_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                              "typeString": "function (contract IERC20,address,address,uint256,uint256) payable external returns (uint256,uint256)"
                            }
                          },
                          "id": 641,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7987:72:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256)"
                          }
                        },
                        "id": 642,
                        "nodeType": "ExpressionStatement",
                        "src": "7987:72:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 648,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 643,
                            "name": "shareReturned",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 478,
                            "src": "8069:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 646,
                                "name": "shareUsed",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 476,
                                "src": "8107:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 644,
                                "name": "shareFromSupplied",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 471,
                                "src": "8085:17:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 645,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 46,
                              "src": "8085:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 647,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8085:32:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8069:48:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 649,
                        "nodeType": "ExpressionStatement",
                        "src": "8069:48:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 652,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 650,
                            "name": "shareReturned",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 478,
                            "src": "8131:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 651,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8147:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "8131:17:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 666,
                        "nodeType": "IfStatement",
                        "src": "8127:116:0",
                        "trueBody": {
                          "id": 665,
                          "nodeType": "Block",
                          "src": "8150:93:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 656,
                                    "name": "fromToken",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 463,
                                    "src": "8182:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC20_$112",
                                      "typeString": "contract IERC20"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 659,
                                        "name": "this",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -28,
                                        "src": "8201:4:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_SushiSwapSwapperV1_$669",
                                          "typeString": "contract SushiSwapSwapperV1"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_SushiSwapSwapperV1_$669",
                                          "typeString": "contract SushiSwapSwapperV1"
                                        }
                                      ],
                                      "id": 658,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "8193:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 657,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8193:7:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": null,
                                          "typeString": null
                                        }
                                      }
                                    },
                                    "id": 660,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "8193:13:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 661,
                                    "name": "refundTo",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 469,
                                    "src": "8208:8:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 662,
                                    "name": "shareReturned",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 478,
                                    "src": "8218:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_IERC20_$112",
                                      "typeString": "contract IERC20"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 653,
                                    "name": "bentoBox",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 185,
                                    "src": "8164:8:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IBentoBoxV1_$180",
                                      "typeString": "contract IBentoBoxV1"
                                    }
                                  },
                                  "id": 655,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "transfer",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 162,
                                  "src": "8164:17:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_contract$_IERC20_$112_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                    "typeString": "function (contract IERC20,address,address,uint256) external"
                                  }
                                },
                                "id": 663,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8164:68:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 664,
                              "nodeType": "ExpressionStatement",
                              "src": "8164:68:0"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 461,
                    "nodeType": "StructuredDocumentation",
                    "src": "5918:685:0",
                    "text": "@notice Calculates the amount of token 'from' needed to complete the swap (amountFrom),\n this should be less than or equal to amountFromMax.\n Withdraws 'amountFrom' of token 'from' from the BentoBox account for this swapper.\n Swaps it for exactly 'exactAmountTo' of token 'to'.\n Transfers the swapped tokens of 'to' into the BentoBox using a plain ERC20 transfer.\n Transfers allocated, but unused 'from' tokens within the BentoBox to 'refundTo' (amountFromMax - amountFrom).\n Returns the amount of 'from' tokens withdrawn from BentoBox (amountFrom).\n (The BentoBox skim function will be used by the caller to get the swapped funds)."
                  },
                  "functionSelector": "4622be90",
                  "id": 668,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "swapExact",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 474,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 463,
                        "mutability": "mutable",
                        "name": "fromToken",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 668,
                        "src": "6636:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$112",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 462,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 112,
                          "src": "6636:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$112",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 465,
                        "mutability": "mutable",
                        "name": "toToken",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 668,
                        "src": "6662:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$112",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 464,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 112,
                          "src": "6662:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$112",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 467,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 668,
                        "src": "6686:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 466,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6686:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 469,
                        "mutability": "mutable",
                        "name": "refundTo",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 668,
                        "src": "6713:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 468,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6713:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 471,
                        "mutability": "mutable",
                        "name": "shareFromSupplied",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 668,
                        "src": "6739:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 470,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6739:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 473,
                        "mutability": "mutable",
                        "name": "shareToExact",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 668,
                        "src": "6774:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 472,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6774:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "6626:174:0"
                  },
                  "returnParameters": {
                    "id": 479,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 476,
                        "mutability": "mutable",
                        "name": "shareUsed",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 668,
                        "src": "6817:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 475,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6817:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 478,
                        "mutability": "mutable",
                        "name": "shareReturned",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 668,
                        "src": "6836:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 477,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6836:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "6816:42:0"
                  },
                  "scope": 669,
                  "src": "6608:1641:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                }
              ],
              "scope": 670,
              "src": "2688:5563:0"
            }
          ],
          "src": "32:8220:0"
        },
        "id": 0
      }
    }
  }
}
