{
  "contractName": "IUniswapExchange",
  "abi": [
    {
      "payable": true,
      "stateMutability": "payable",
      "type": "fallback"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "buyer",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "eth_sold",
          "type": "uint256"
        },
        {
          "indexed": true,
          "name": "tokens_bought",
          "type": "uint256"
        }
      ],
      "name": "TokenPurchase",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "buyer",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "tokens_sold",
          "type": "uint256"
        },
        {
          "indexed": true,
          "name": "eth_bought",
          "type": "uint256"
        }
      ],
      "name": "EthPurchase",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "provider",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "eth_amount",
          "type": "uint256"
        },
        {
          "indexed": true,
          "name": "token_amount",
          "type": "uint256"
        }
      ],
      "name": "AddLiquidity",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "provider",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "eth_amount",
          "type": "uint256"
        },
        {
          "indexed": true,
          "name": "token_amount",
          "type": "uint256"
        }
      ],
      "name": "RemoveLiquidity",
      "type": "event"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "input_amount",
          "type": "uint256"
        },
        {
          "name": "input_reserve",
          "type": "uint256"
        },
        {
          "name": "output_reserve",
          "type": "uint256"
        }
      ],
      "name": "getInputPrice",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "output_amount",
          "type": "uint256"
        },
        {
          "name": "input_reserve",
          "type": "uint256"
        },
        {
          "name": "output_reserve",
          "type": "uint256"
        }
      ],
      "name": "getOutputPrice",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "min_tokens",
          "type": "uint256"
        },
        {
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "ethToTokenSwapInput",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "min_tokens",
          "type": "uint256"
        },
        {
          "name": "deadline",
          "type": "uint256"
        },
        {
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "ethToTokenTransferInput",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "tokens_bought",
          "type": "uint256"
        },
        {
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "ethToTokenSwapOutput",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "tokens_bought",
          "type": "uint256"
        },
        {
          "name": "deadline",
          "type": "uint256"
        },
        {
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "ethToTokenTransferOutput",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "tokens_sold",
          "type": "uint256"
        },
        {
          "name": "min_eth",
          "type": "uint256"
        },
        {
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "tokenToEthSwapInput",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "tokens_sold",
          "type": "uint256"
        },
        {
          "name": "min_eth",
          "type": "uint256"
        },
        {
          "name": "deadline",
          "type": "uint256"
        },
        {
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "tokenToEthTransferInput",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "eth_bought",
          "type": "uint256"
        },
        {
          "name": "max_tokens",
          "type": "uint256"
        },
        {
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "tokenToEthSwapOutput",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "eth_bought",
          "type": "uint256"
        },
        {
          "name": "max_tokens",
          "type": "uint256"
        },
        {
          "name": "deadline",
          "type": "uint256"
        },
        {
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "tokenToEthTransferOutput",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "tokens_sold",
          "type": "uint256"
        },
        {
          "name": "min_tokens_bought",
          "type": "uint256"
        },
        {
          "name": "min_eth_bought",
          "type": "uint256"
        },
        {
          "name": "deadline",
          "type": "uint256"
        },
        {
          "name": "token_addr",
          "type": "address"
        }
      ],
      "name": "tokenToTokenSwapInput",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "tokens_sold",
          "type": "uint256"
        },
        {
          "name": "min_tokens_bought",
          "type": "uint256"
        },
        {
          "name": "min_eth_bought",
          "type": "uint256"
        },
        {
          "name": "deadline",
          "type": "uint256"
        },
        {
          "name": "recipient",
          "type": "address"
        },
        {
          "name": "token_addr",
          "type": "address"
        }
      ],
      "name": "tokenToTokenTransferInput",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "tokens_bought",
          "type": "uint256"
        },
        {
          "name": "max_tokens_sold",
          "type": "uint256"
        },
        {
          "name": "max_eth_sold",
          "type": "uint256"
        },
        {
          "name": "deadline",
          "type": "uint256"
        },
        {
          "name": "token_addr",
          "type": "address"
        }
      ],
      "name": "tokenToTokenSwapOutput",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "tokens_bought",
          "type": "uint256"
        },
        {
          "name": "max_tokens_sold",
          "type": "uint256"
        },
        {
          "name": "max_eth_sold",
          "type": "uint256"
        },
        {
          "name": "deadline",
          "type": "uint256"
        },
        {
          "name": "recipient",
          "type": "address"
        },
        {
          "name": "token_addr",
          "type": "address"
        }
      ],
      "name": "tokenToTokenTransferOutput",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "tokens_sold",
          "type": "uint256"
        },
        {
          "name": "min_tokens_bought",
          "type": "uint256"
        },
        {
          "name": "min_eth_bought",
          "type": "uint256"
        },
        {
          "name": "deadline",
          "type": "uint256"
        },
        {
          "name": "exchange_addr",
          "type": "address"
        }
      ],
      "name": "tokenToExchangeSwapInput",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "tokens_sold",
          "type": "uint256"
        },
        {
          "name": "min_tokens_bought",
          "type": "uint256"
        },
        {
          "name": "min_eth_bought",
          "type": "uint256"
        },
        {
          "name": "deadline",
          "type": "uint256"
        },
        {
          "name": "recipient",
          "type": "address"
        },
        {
          "name": "exchange_addr",
          "type": "address"
        }
      ],
      "name": "tokenToExchangeTransferInput",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "tokens_bought",
          "type": "uint256"
        },
        {
          "name": "max_tokens_sold",
          "type": "uint256"
        },
        {
          "name": "max_eth_sold",
          "type": "uint256"
        },
        {
          "name": "deadline",
          "type": "uint256"
        },
        {
          "name": "exchange_addr",
          "type": "address"
        }
      ],
      "name": "tokenToExchangeSwapOutput",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "tokens_bought",
          "type": "uint256"
        },
        {
          "name": "max_tokens_sold",
          "type": "uint256"
        },
        {
          "name": "max_eth_sold",
          "type": "uint256"
        },
        {
          "name": "deadline",
          "type": "uint256"
        },
        {
          "name": "recipient",
          "type": "address"
        },
        {
          "name": "exchange_addr",
          "type": "address"
        }
      ],
      "name": "tokenToExchangeTransferOutput",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "eth_sold",
          "type": "uint256"
        }
      ],
      "name": "getEthToTokenInputPrice",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "tokens_bought",
          "type": "uint256"
        }
      ],
      "name": "getEthToTokenOutputPrice",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "tokens_sold",
          "type": "uint256"
        }
      ],
      "name": "getTokenToEthInputPrice",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "eth_bought",
          "type": "uint256"
        }
      ],
      "name": "getTokenToEthOutputPrice",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "tokenAddress",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "factoryAddress",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "min_liquidity",
          "type": "uint256"
        },
        {
          "name": "max_tokens",
          "type": "uint256"
        },
        {
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "addLiquidity",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "amount",
          "type": "uint256"
        },
        {
          "name": "min_eth",
          "type": "uint256"
        },
        {
          "name": "min_tokens",
          "type": "uint256"
        },
        {
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "removeLiquidity",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        },
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "sourceMap": "",
  "deployedSourceMap": "",
  "source": "pragma solidity ^0.5.0;\n\ninterface IUniswapExchange {\n  event TokenPurchase(address indexed buyer, uint256 indexed eth_sold, uint256 indexed tokens_bought);\n  event EthPurchase(address indexed buyer, uint256 indexed tokens_sold, uint256 indexed eth_bought);\n  event AddLiquidity(address indexed provider, uint256 indexed eth_amount, uint256 indexed token_amount);\n  event RemoveLiquidity(address indexed provider, uint256 indexed eth_amount, uint256 indexed token_amount);\n\n   /**\n   * @notice Convert ETH to Tokens.\n   * @dev User specifies exact input (msg.value).\n   * @dev User cannot specify minimum output or deadline.\n   */\n  function () external payable;\n\n /**\n   * @dev Pricing function for converting between ETH && Tokens.\n   * @param input_amount Amount of ETH or Tokens being sold.\n   * @param input_reserve Amount of ETH or Tokens (input type) in exchange reserves.\n   * @param output_reserve Amount of ETH or Tokens (output type) in exchange reserves.\n   * @return Amount of ETH or Tokens bought.\n   */\n  function getInputPrice(uint256 input_amount, uint256 input_reserve, uint256 output_reserve) external view returns (uint256);\n\n /**\n   * @dev Pricing function for converting between ETH && Tokens.\n   * @param output_amount Amount of ETH or Tokens being bought.\n   * @param input_reserve Amount of ETH or Tokens (input type) in exchange reserves.\n   * @param output_reserve Amount of ETH or Tokens (output type) in exchange reserves.\n   * @return Amount of ETH or Tokens sold.\n   */\n  function getOutputPrice(uint256 output_amount, uint256 input_reserve, uint256 output_reserve) external view returns (uint256);\n\n\n  /** \n   * @notice Convert ETH to Tokens.\n   * @dev User specifies exact input (msg.value) && minimum output.\n   * @param min_tokens Minimum Tokens bought.\n   * @param deadline Time after which this transaction can no longer be executed.\n   * @return Amount of Tokens bought.\n   */ \n  function ethToTokenSwapInput(uint256 min_tokens, uint256 deadline) external payable returns (uint256);\n\n  /** \n   * @notice Convert ETH to Tokens && transfers Tokens to recipient.\n   * @dev User specifies exact input (msg.value) && minimum output\n   * @param min_tokens Minimum Tokens bought.\n   * @param deadline Time after which this transaction can no longer be executed.\n   * @param recipient The address that receives output Tokens.\n   * @return  Amount of Tokens bought.\n   */\n  function ethToTokenTransferInput(uint256 min_tokens, uint256 deadline, address recipient) external payable returns(uint256);\n\n\n  /** \n   * @notice Convert ETH to Tokens.\n   * @dev User specifies maximum input (msg.value) && exact output.\n   * @param tokens_bought Amount of tokens bought.\n   * @param deadline Time after which this transaction can no longer be executed.\n   * @return Amount of ETH sold.\n   */\n  function ethToTokenSwapOutput(uint256 tokens_bought, uint256 deadline) external payable returns(uint256);\n  /** \n   * @notice Convert ETH to Tokens && transfers Tokens to recipient.\n   * @dev User specifies maximum input (msg.value) && exact output.\n   * @param tokens_bought Amount of tokens bought.\n   * @param deadline Time after which this transaction can no longer be executed.\n   * @param recipient The address that receives output Tokens.\n   * @return Amount of ETH sold.\n   */\n  function ethToTokenTransferOutput(uint256 tokens_bought, uint256 deadline, address recipient) external payable returns (uint256);\n\n  /** \n   * @notice Convert Tokens to ETH.\n   * @dev User specifies exact input && minimum output.\n   * @param tokens_sold Amount of Tokens sold.\n   * @param min_eth Minimum ETH purchased.\n   * @param deadline Time after which this transaction can no longer be executed.\n   * @return Amount of ETH bought.\n   */\n  function tokenToEthSwapInput(uint256 tokens_sold, uint256 min_eth, uint256 deadline) external returns (uint256);\n\n  /** \n   * @notice Convert Tokens to ETH && transfers ETH to recipient.\n   * @dev User specifies exact input && minimum output.\n   * @param tokens_sold Amount of Tokens sold.\n   * @param min_eth Minimum ETH purchased.\n   * @param deadline Time after which this transaction can no longer be executed.\n   * @param recipient The address that receives output ETH.\n   * @return  Amount of ETH bought.\n   */\n  function tokenToEthTransferInput(uint256 tokens_sold, uint256 min_eth, uint256 deadline, address recipient) external returns (uint256);\n\n  /** \n   * @notice Convert Tokens to ETH.\n   * @dev User specifies maximum input && exact output.\n   * @param eth_bought Amount of ETH purchased.\n   * @param max_tokens Maximum Tokens sold.\n   * @param deadline Time after which this transaction can no longer be executed.\n   * @return Amount of Tokens sold.\n   */\n  function tokenToEthSwapOutput(uint256 eth_bought, uint256 max_tokens, uint256 deadline) external returns (uint256);\n\n  /**\n   * @notice Convert Tokens to ETH && transfers ETH to recipient.\n   * @dev User specifies maximum input && exact output.\n   * @param eth_bought Amount of ETH purchased.\n   * @param max_tokens Maximum Tokens sold.\n   * @param deadline Time after which this transaction can no longer be executed.\n   * @param recipient The address that receives output ETH.\n   * @return Amount of Tokens sold.\n   */\n  function tokenToEthTransferOutput(uint256 eth_bought, uint256 max_tokens, uint256 deadline, address recipient) external returns (uint256);\n\n  /**\n   * @notice Convert Tokens (token) to Tokens (token_addr).\n   * @dev User specifies exact input && minimum output.\n   * @param tokens_sold Amount of Tokens sold.\n   * @param min_tokens_bought Minimum Tokens (token_addr) purchased.\n   * @param min_eth_bought Minimum ETH purchased as intermediary.\n   * @param deadline Time after which this transaction can no longer be executed.\n   * @param token_addr The address of the token being purchased.\n   * @return Amount of Tokens (token_addr) bought.\n   */\n  function tokenToTokenSwapInput(\n    uint256 tokens_sold, \n    uint256 min_tokens_bought, \n    uint256 min_eth_bought, \n    uint256 deadline, \n    address token_addr) \n    external returns (uint256);\n\n  /**\n   * @notice Convert Tokens (token) to Tokens (token_addr) && transfers\n   *         Tokens (token_addr) to recipient.\n   * @dev User specifies exact input && minimum output.\n   * @param tokens_sold Amount of Tokens sold.\n   * @param min_tokens_bought Minimum Tokens (token_addr) purchased.\n   * @param min_eth_bought Minimum ETH purchased as intermediary.\n   * @param deadline Time after which this transaction can no longer be executed.\n   * @param recipient The address that receives output ETH.\n   * @param token_addr The address of the token being purchased.\n   * @return Amount of Tokens (token_addr) bought.\n   */\n  function tokenToTokenTransferInput(\n    uint256 tokens_sold, \n    uint256 min_tokens_bought, \n    uint256 min_eth_bought, \n    uint256 deadline, \n    address recipient, \n    address token_addr) \n    external returns (uint256);\n\n\n  /**\n   * @notice Convert Tokens (token) to Tokens (token_addr).\n   * @dev User specifies maximum input && exact output.\n   * @param tokens_bought Amount of Tokens (token_addr) bought.\n   * @param max_tokens_sold Maximum Tokens (token) sold.\n   * @param max_eth_sold Maximum ETH purchased as intermediary.\n   * @param deadline Time after which this transaction can no longer be executed.\n   * @param token_addr The address of the token being purchased.\n   * @return Amount of Tokens (token) sold.\n   */\n  function tokenToTokenSwapOutput(\n    uint256 tokens_bought, \n    uint256 max_tokens_sold, \n    uint256 max_eth_sold, \n    uint256 deadline, \n    address token_addr) \n    external returns (uint256);\n\n  /**\n   * @notice Convert Tokens (token) to Tokens (token_addr) && transfers\n   *         Tokens (token_addr) to recipient.\n   * @dev User specifies maximum input && exact output.\n   * @param tokens_bought Amount of Tokens (token_addr) bought.\n   * @param max_tokens_sold Maximum Tokens (token) sold.\n   * @param max_eth_sold Maximum ETH purchased as intermediary.\n   * @param deadline Time after which this transaction can no longer be executed.\n   * @param recipient The address that receives output ETH.\n   * @param token_addr The address of the token being purchased.\n   * @return Amount of Tokens (token) sold.\n   */\n  function tokenToTokenTransferOutput(\n    uint256 tokens_bought, \n    uint256 max_tokens_sold, \n    uint256 max_eth_sold, \n    uint256 deadline, \n    address recipient, \n    address token_addr) \n    external returns (uint256);\n\n  /**\n   * @notice Convert Tokens (token) to Tokens (exchange_addr.token).\n   * @dev Allows trades through contracts that were not deployed from the same factory.\n   * @dev User specifies exact input && minimum output.\n   * @param tokens_sold Amount of Tokens sold.\n   * @param min_tokens_bought Minimum Tokens (token_addr) purchased.\n   * @param min_eth_bought Minimum ETH purchased as intermediary.\n   * @param deadline Time after which this transaction can no longer be executed.\n   * @param exchange_addr The address of the exchange for the token being purchased.\n   * @return Amount of Tokens (exchange_addr.token) bought.\n   */\n  function tokenToExchangeSwapInput(\n    uint256 tokens_sold, \n    uint256 min_tokens_bought, \n    uint256 min_eth_bought, \n    uint256 deadline, \n    address exchange_addr) \n    external returns (uint256);\n\n  /**\n   * @notice Convert Tokens (token) to Tokens (exchange_addr.token) && transfers\n   *         Tokens (exchange_addr.token) to recipient.\n   * @dev Allows trades through contracts that were not deployed from the same factory.\n   * @dev User specifies exact input && minimum output.\n   * @param tokens_sold Amount of Tokens sold.\n   * @param min_tokens_bought Minimum Tokens (token_addr) purchased.\n   * @param min_eth_bought Minimum ETH purchased as intermediary.\n   * @param deadline Time after which this transaction can no longer be executed.\n   * @param recipient The address that receives output ETH.\n   * @param exchange_addr The address of the exchange for the token being purchased.\n   * @return Amount of Tokens (exchange_addr.token) bought.\n   */\n  function tokenToExchangeTransferInput(\n    uint256 tokens_sold, \n    uint256 min_tokens_bought, \n    uint256 min_eth_bought, \n    uint256 deadline, \n    address recipient, \n    address exchange_addr) \n    external returns (uint256);\n\n  /**\n   * @notice Convert Tokens (token) to Tokens (exchange_addr.token).\n   * @dev Allows trades through contracts that were not deployed from the same factory.\n   * @dev User specifies maximum input && exact output.\n   * @param tokens_bought Amount of Tokens (token_addr) bought.\n   * @param max_tokens_sold Maximum Tokens (token) sold.\n   * @param max_eth_sold Maximum ETH purchased as intermediary.\n   * @param deadline Time after which this transaction can no longer be executed.\n   * @param exchange_addr The address of the exchange for the token being purchased.\n   * @return Amount of Tokens (token) sold.\n   */\n  function tokenToExchangeSwapOutput(\n    uint256 tokens_bought, \n    uint256 max_tokens_sold, \n    uint256 max_eth_sold, \n    uint256 deadline, \n    address exchange_addr) \n    external returns (uint256);\n\n  /**\n   * @notice Convert Tokens (token) to Tokens (exchange_addr.token) && transfers\n   *         Tokens (exchange_addr.token) to recipient.\n   * @dev Allows trades through contracts that were not deployed from the same factory.\n   * @dev User specifies maximum input && exact output.\n   * @param tokens_bought Amount of Tokens (token_addr) bought.\n   * @param max_tokens_sold Maximum Tokens (token) sold.\n   * @param max_eth_sold Maximum ETH purchased as intermediary.\n   * @param deadline Time after which this transaction can no longer be executed.\n   * @param recipient The address that receives output ETH.\n   * @param exchange_addr The address of the exchange for the token being purchased.\n   * @return Amount of Tokens (token) sold.\n   */\n  function tokenToExchangeTransferOutput(\n    uint256 tokens_bought, \n    uint256 max_tokens_sold, \n    uint256 max_eth_sold, \n    uint256 deadline, \n    address recipient, \n    address exchange_addr) \n    external returns (uint256);\n\n\n  /***********************************|\n  |         Getter Functions          |\n  |__________________________________*/\n\n  /**\n   * @notice external price function for ETH to Token trades with an exact input.\n   * @param eth_sold Amount of ETH sold.\n   * @return Amount of Tokens that can be bought with input ETH.\n   */\n  function getEthToTokenInputPrice(uint256 eth_sold) external view returns (uint256);\n\n  /**\n   * @notice external price function for ETH to Token trades with an exact output.\n   * @param tokens_bought Amount of Tokens bought.\n   * @return Amount of ETH needed to buy output Tokens.\n   */\n  function getEthToTokenOutputPrice(uint256 tokens_bought) external view returns (uint256);\n\n  /**\n   * @notice external price function for Token to ETH trades with an exact input.\n   * @param tokens_sold Amount of Tokens sold.\n   * @return Amount of ETH that can be bought with input Tokens.\n   */\n  function getTokenToEthInputPrice(uint256 tokens_sold) external view returns (uint256);\n\n  /**\n   * @notice external price function for Token to ETH trades with an exact output.\n   * @param eth_bought Amount of output ETH.\n   * @return Amount of Tokens needed to buy output ETH.\n   */\n  function getTokenToEthOutputPrice(uint256 eth_bought) external view returns (uint256);\n\n  /** \n   * @return Address of Token that is sold on this exchange.\n   */\n  function tokenAddress() external view returns (address);\n\n  /**\n   * @return Address of factory that created this exchange.\n   */\n  function factoryAddress() external view returns (address);\n\n\n  /***********************************|\n  |        Liquidity Functions        |\n  |__________________________________*/\n\n  /** \n   * @notice Deposit ETH && Tokens (token) at current ratio to mint UNI tokens.\n   * @dev min_liquidity does nothing when total UNI supply is 0.\n   * @param min_liquidity Minimum number of UNI sender will mint if total UNI supply is greater than 0.\n   * @param max_tokens Maximum number of tokens deposited. Deposits max amount if total UNI supply is 0.\n   * @param deadline Time after which this transaction can no longer be executed.\n   * @return The amount of UNI minted.\n   */\n  function addLiquidity(uint256 min_liquidity, uint256 max_tokens, uint256 deadline) external payable returns (uint256);\n\n  /**\n   * @dev Burn UNI tokens to withdraw ETH && Tokens at current ratio.\n   * @param amount Amount of UNI burned.\n   * @param min_eth Minimum ETH withdrawn.\n   * @param min_tokens Minimum Tokens withdrawn.\n   * @param deadline Time after which this transaction can no longer be executed.\n   * @return The amount of ETH && Tokens withdrawn.\n   */\n  function removeLiquidity(uint256 amount, uint256 min_eth, uint256 min_tokens, uint256 deadline) external returns (uint256, uint256);\n}",
  "sourcePath": "/home/binyu/Desktop/Synthetix/prod/swap-solidity/contracts/merged/IUniswapExchange.sol",
  "ast": {
    "absolutePath": "/home/binyu/Desktop/Synthetix/prod/swap-solidity/contracts/merged/IUniswapExchange.sol",
    "exportedSymbols": {
      "IUniswapExchange": [
        1255
      ]
    },
    "id": 1256,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 917,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:5"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "interface",
        "documentation": null,
        "fullyImplemented": false,
        "id": 1255,
        "linearizedBaseContracts": [
          1255
        ],
        "name": "IUniswapExchange",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": null,
            "id": 925,
            "name": "TokenPurchase",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 924,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 919,
                  "indexed": true,
                  "name": "buyer",
                  "nodeType": "VariableDeclaration",
                  "scope": 925,
                  "src": "76:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 918,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "76:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 921,
                  "indexed": true,
                  "name": "eth_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 925,
                  "src": "99:24:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 920,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "99:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 923,
                  "indexed": true,
                  "name": "tokens_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 925,
                  "src": "125:29:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 922,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "125:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "75:80:5"
            },
            "src": "56:100:5"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 933,
            "name": "EthPurchase",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 932,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 927,
                  "indexed": true,
                  "name": "buyer",
                  "nodeType": "VariableDeclaration",
                  "scope": 933,
                  "src": "177:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 926,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "177:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 929,
                  "indexed": true,
                  "name": "tokens_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 933,
                  "src": "200:27:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 928,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "200:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 931,
                  "indexed": true,
                  "name": "eth_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 933,
                  "src": "229:26:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 930,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "229:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "176:80:5"
            },
            "src": "159:98:5"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 941,
            "name": "AddLiquidity",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 940,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 935,
                  "indexed": true,
                  "name": "provider",
                  "nodeType": "VariableDeclaration",
                  "scope": 941,
                  "src": "279:24:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 934,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "279:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 937,
                  "indexed": true,
                  "name": "eth_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 941,
                  "src": "305:26:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 936,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "305:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 939,
                  "indexed": true,
                  "name": "token_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 941,
                  "src": "333:28:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 938,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "333:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "278:84:5"
            },
            "src": "260:103:5"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 949,
            "name": "RemoveLiquidity",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 948,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 943,
                  "indexed": true,
                  "name": "provider",
                  "nodeType": "VariableDeclaration",
                  "scope": 949,
                  "src": "388:24:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 942,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "388:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 945,
                  "indexed": true,
                  "name": "eth_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 949,
                  "src": "414:26:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 944,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "414:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 947,
                  "indexed": true,
                  "name": "token_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 949,
                  "src": "442:28:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 946,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "442:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "387:84:5"
            },
            "src": "366:106:5"
          },
          {
            "body": null,
            "documentation": "@notice Convert ETH to Tokens.\n@dev User specifies exact input (msg.value).\n@dev User cannot specify minimum output or deadline.",
            "id": 952,
            "implemented": false,
            "kind": "fallback",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 950,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "642:2:5"
            },
            "returnParameters": {
              "id": 951,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "661:0:5"
            },
            "scope": 1255,
            "src": "633:29:5",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@dev Pricing function for converting between ETH && Tokens.\n@param input_amount Amount of ETH or Tokens being sold.\n@param input_reserve Amount of ETH or Tokens (input type) in exchange reserves.\n@param output_reserve Amount of ETH or Tokens (output type) in exchange reserves.\n@return Amount of ETH or Tokens bought.",
            "id": 963,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getInputPrice",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 959,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 954,
                  "name": "input_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 963,
                  "src": "1043:20:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 953,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1043:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 956,
                  "name": "input_reserve",
                  "nodeType": "VariableDeclaration",
                  "scope": 963,
                  "src": "1065:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 955,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1065:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 958,
                  "name": "output_reserve",
                  "nodeType": "VariableDeclaration",
                  "scope": 963,
                  "src": "1088:22:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 957,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1088:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1042:69:5"
            },
            "returnParameters": {
              "id": 962,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 961,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 963,
                  "src": "1135:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 960,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1135:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1134:9:5"
            },
            "scope": 1255,
            "src": "1020:124:5",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@dev Pricing function for converting between ETH && Tokens.\n@param output_amount Amount of ETH or Tokens being bought.\n@param input_reserve Amount of ETH or Tokens (input type) in exchange reserves.\n@param output_reserve Amount of ETH or Tokens (output type) in exchange reserves.\n@return Amount of ETH or Tokens sold.",
            "id": 974,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getOutputPrice",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 970,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 965,
                  "name": "output_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 974,
                  "src": "1527:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 964,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1527:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 967,
                  "name": "input_reserve",
                  "nodeType": "VariableDeclaration",
                  "scope": 974,
                  "src": "1550:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 966,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1550:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 969,
                  "name": "output_reserve",
                  "nodeType": "VariableDeclaration",
                  "scope": 974,
                  "src": "1573:22:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 968,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1573:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1526:70:5"
            },
            "returnParameters": {
              "id": 973,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 972,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 974,
                  "src": "1620:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 971,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1620:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1619:9:5"
            },
            "scope": 1255,
            "src": "1503:126:5",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Convert ETH to Tokens.\n@dev User specifies exact input (msg.value) && minimum output.\n@param min_tokens Minimum Tokens bought.\n@param deadline Time after which this transaction can no longer be executed.\n@return Amount of Tokens bought.",
            "id": 983,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ethToTokenSwapInput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 979,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 976,
                  "name": "min_tokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 983,
                  "src": "1947:18:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 975,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1947:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 978,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 983,
                  "src": "1967:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 977,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1967:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1946:38:5"
            },
            "returnParameters": {
              "id": 982,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 981,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 983,
                  "src": "2011:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 980,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2011:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2010:9:5"
            },
            "scope": 1255,
            "src": "1918:102:5",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Convert ETH to Tokens && transfers Tokens to recipient.\n@dev User specifies exact input (msg.value) && minimum output\n@param min_tokens Minimum Tokens bought.\n@param deadline Time after which this transaction can no longer be executed.\n@param recipient The address that receives output Tokens.\n@return  Amount of Tokens bought.",
            "id": 994,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ethToTokenTransferInput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 990,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 985,
                  "name": "min_tokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 994,
                  "src": "2436:18:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 984,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2436:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 987,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 994,
                  "src": "2456:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 986,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2456:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 989,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 994,
                  "src": "2474:17:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 988,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2474:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2435:57:5"
            },
            "returnParameters": {
              "id": 993,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 992,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 994,
                  "src": "2518:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 991,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2518:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2517:9:5"
            },
            "scope": 1255,
            "src": "2403:124:5",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Convert ETH to Tokens.\n@dev User specifies maximum input (msg.value) && exact output.\n@param tokens_bought Amount of tokens bought.\n@param deadline Time after which this transaction can no longer be executed.\n@return Amount of ETH sold.",
            "id": 1003,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ethToTokenSwapOutput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 999,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 996,
                  "name": "tokens_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1003,
                  "src": "2845:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 995,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2845:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 998,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 1003,
                  "src": "2868:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 997,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2868:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2844:41:5"
            },
            "returnParameters": {
              "id": 1002,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1001,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1003,
                  "src": "2911:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1000,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2911:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2910:9:5"
            },
            "scope": 1255,
            "src": "2815:105:5",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Convert ETH to Tokens && transfers Tokens to recipient.\n@dev User specifies maximum input (msg.value) && exact output.\n@param tokens_bought Amount of tokens bought.\n@param deadline Time after which this transaction can no longer be executed.\n@param recipient The address that receives output Tokens.\n@return Amount of ETH sold.",
            "id": 1014,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ethToTokenTransferOutput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1010,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1005,
                  "name": "tokens_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1014,
                  "src": "3336:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1004,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3336:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1007,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 1014,
                  "src": "3359:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1006,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3359:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1009,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 1014,
                  "src": "3377:17:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1008,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3377:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3335:60:5"
            },
            "returnParameters": {
              "id": 1013,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1012,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1014,
                  "src": "3422:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1011,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3422:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3421:9:5"
            },
            "scope": 1255,
            "src": "3302:129:5",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Convert Tokens to ETH.\n@dev User specifies exact input && minimum output.\n@param tokens_sold Amount of Tokens sold.\n@param min_eth Minimum ETH purchased.\n@param deadline Time after which this transaction can no longer be executed.\n@return Amount of ETH bought.",
            "id": 1025,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "tokenToEthSwapInput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1021,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1016,
                  "name": "tokens_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 1025,
                  "src": "3776:19:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1015,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3776:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1018,
                  "name": "min_eth",
                  "nodeType": "VariableDeclaration",
                  "scope": 1025,
                  "src": "3797:15:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1017,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3797:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1020,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 1025,
                  "src": "3814:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1019,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3814:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3775:56:5"
            },
            "returnParameters": {
              "id": 1024,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1023,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1025,
                  "src": "3850:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1022,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3850:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3849:9:5"
            },
            "scope": 1255,
            "src": "3747:112:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Convert Tokens to ETH && transfers ETH to recipient.\n@dev User specifies exact input && minimum output.\n@param tokens_sold Amount of Tokens sold.\n@param min_eth Minimum ETH purchased.\n@param deadline Time after which this transaction can no longer be executed.\n@param recipient The address that receives output ETH.\n@return  Amount of ETH bought.",
            "id": 1038,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "tokenToEthTransferInput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1034,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1027,
                  "name": "tokens_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 1038,
                  "src": "4299:19:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1026,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4299:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1029,
                  "name": "min_eth",
                  "nodeType": "VariableDeclaration",
                  "scope": 1038,
                  "src": "4320:15:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1028,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4320:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1031,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 1038,
                  "src": "4337:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1030,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4337:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1033,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 1038,
                  "src": "4355:17:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1032,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4355:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4298:75:5"
            },
            "returnParameters": {
              "id": 1037,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1036,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1038,
                  "src": "4392:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1035,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4392:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4391:9:5"
            },
            "scope": 1255,
            "src": "4266:135:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Convert Tokens to ETH.\n@dev User specifies maximum input && exact output.\n@param eth_bought Amount of ETH purchased.\n@param max_tokens Maximum Tokens sold.\n@param deadline Time after which this transaction can no longer be executed.\n@return Amount of Tokens sold.",
            "id": 1049,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "tokenToEthSwapOutput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1045,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1040,
                  "name": "eth_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1049,
                  "src": "4750:18:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1039,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4750:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1042,
                  "name": "max_tokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 1049,
                  "src": "4770:18:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1041,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4770:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1044,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 1049,
                  "src": "4790:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1043,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4790:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4749:58:5"
            },
            "returnParameters": {
              "id": 1048,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1047,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1049,
                  "src": "4826:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1046,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4826:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4825:9:5"
            },
            "scope": 1255,
            "src": "4720:115:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Convert Tokens to ETH && transfers ETH to recipient.\n@dev User specifies maximum input && exact output.\n@param eth_bought Amount of ETH purchased.\n@param max_tokens Maximum Tokens sold.\n@param deadline Time after which this transaction can no longer be executed.\n@param recipient The address that receives output ETH.\n@return Amount of Tokens sold.",
            "id": 1062,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "tokenToEthTransferOutput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1058,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1051,
                  "name": "eth_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1062,
                  "src": "5277:18:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1050,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5277:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1053,
                  "name": "max_tokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 1062,
                  "src": "5297:18:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1052,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5297:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1055,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 1062,
                  "src": "5317:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1054,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5317:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1057,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 1062,
                  "src": "5335:17:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1056,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5335:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5276:77:5"
            },
            "returnParameters": {
              "id": 1061,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1060,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1062,
                  "src": "5372:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1059,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5372:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5371:9:5"
            },
            "scope": 1255,
            "src": "5243:138:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Convert Tokens (token) to Tokens (token_addr).\n@dev User specifies exact input && minimum output.\n@param tokens_sold Amount of Tokens sold.\n@param min_tokens_bought Minimum Tokens (token_addr) purchased.\n@param min_eth_bought Minimum ETH purchased as intermediary.\n@param deadline Time after which this transaction can no longer be executed.\n@param token_addr The address of the token being purchased.\n@return Amount of Tokens (token_addr) bought.",
            "id": 1077,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "tokenToTokenSwapInput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1073,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1064,
                  "name": "tokens_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 1077,
                  "src": "5929:19:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1063,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5929:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1066,
                  "name": "min_tokens_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1077,
                  "src": "5955:25:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1065,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5955:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1068,
                  "name": "min_eth_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1077,
                  "src": "5987:22:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1067,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5987:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1070,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 1077,
                  "src": "6016:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1069,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6016:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1072,
                  "name": "token_addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 1077,
                  "src": "6039:18:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1071,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6039:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5923:135:5"
            },
            "returnParameters": {
              "id": 1076,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1075,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1077,
                  "src": "6082:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1074,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6082:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6081:9:5"
            },
            "scope": 1255,
            "src": "5893:198:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Convert Tokens (token) to Tokens (token_addr) && transfers\n        Tokens (token_addr) to recipient.\n@dev User specifies exact input && minimum output.\n@param tokens_sold Amount of Tokens sold.\n@param min_tokens_bought Minimum Tokens (token_addr) purchased.\n@param min_eth_bought Minimum ETH purchased as intermediary.\n@param deadline Time after which this transaction can no longer be executed.\n@param recipient The address that receives output ETH.\n@param token_addr The address of the token being purchased.\n@return Amount of Tokens (token_addr) bought.",
            "id": 1094,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "tokenToTokenTransferInput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1090,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1079,
                  "name": "tokens_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 1094,
                  "src": "6762:19:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1078,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6762:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1081,
                  "name": "min_tokens_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1094,
                  "src": "6788:25:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1080,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6788:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1083,
                  "name": "min_eth_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1094,
                  "src": "6820:22:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1082,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6820:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1085,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 1094,
                  "src": "6849:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1084,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6849:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1087,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 1094,
                  "src": "6872:17:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1086,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6872:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1089,
                  "name": "token_addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 1094,
                  "src": "6896:18:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1088,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6896:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6756:159:5"
            },
            "returnParameters": {
              "id": 1093,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1092,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1094,
                  "src": "6939:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1091,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6939:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6938:9:5"
            },
            "scope": 1255,
            "src": "6722:226:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Convert Tokens (token) to Tokens (token_addr).\n@dev User specifies maximum input && exact output.\n@param tokens_bought Amount of Tokens (token_addr) bought.\n@param max_tokens_sold Maximum Tokens (token) sold.\n@param max_eth_sold Maximum ETH purchased as intermediary.\n@param deadline Time after which this transaction can no longer be executed.\n@param token_addr The address of the token being purchased.\n@return Amount of Tokens (token) sold.",
            "id": 1109,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "tokenToTokenSwapOutput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1105,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1096,
                  "name": "tokens_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1109,
                  "src": "7494:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1095,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7494:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1098,
                  "name": "max_tokens_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 1109,
                  "src": "7522:23:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1097,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7522:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1100,
                  "name": "max_eth_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 1109,
                  "src": "7552:20:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1099,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7552:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1102,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 1109,
                  "src": "7579:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1101,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7579:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1104,
                  "name": "token_addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 1109,
                  "src": "7602:18:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1103,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7602:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7488:133:5"
            },
            "returnParameters": {
              "id": 1108,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1107,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1109,
                  "src": "7645:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1106,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7645:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7644:9:5"
            },
            "scope": 1255,
            "src": "7457:197:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Convert Tokens (token) to Tokens (token_addr) && transfers\n        Tokens (token_addr) to recipient.\n@dev User specifies maximum input && exact output.\n@param tokens_bought Amount of Tokens (token_addr) bought.\n@param max_tokens_sold Maximum Tokens (token) sold.\n@param max_eth_sold Maximum ETH purchased as intermediary.\n@param deadline Time after which this transaction can no longer be executed.\n@param recipient The address that receives output ETH.\n@param token_addr The address of the token being purchased.\n@return Amount of Tokens (token) sold.",
            "id": 1126,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "tokenToTokenTransferOutput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1122,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1111,
                  "name": "tokens_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1126,
                  "src": "8322:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1110,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8322:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1113,
                  "name": "max_tokens_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 1126,
                  "src": "8350:23:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1112,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8350:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1115,
                  "name": "max_eth_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 1126,
                  "src": "8380:20:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1114,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8380:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1117,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 1126,
                  "src": "8407:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1116,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8407:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1119,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 1126,
                  "src": "8430:17:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1118,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8430:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1121,
                  "name": "token_addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 1126,
                  "src": "8454:18:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1120,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8454:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8316:157:5"
            },
            "returnParameters": {
              "id": 1125,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1124,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1126,
                  "src": "8497:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1123,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8497:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8496:9:5"
            },
            "scope": 1255,
            "src": "8281:225:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Convert Tokens (token) to Tokens (exchange_addr.token).\n@dev Allows trades through contracts that were not deployed from the same factory.\n@dev User specifies exact input && minimum output.\n@param tokens_sold Amount of Tokens sold.\n@param min_tokens_bought Minimum Tokens (token_addr) purchased.\n@param min_eth_bought Minimum ETH purchased as intermediary.\n@param deadline Time after which this transaction can no longer be executed.\n@param exchange_addr The address of the exchange for the token being purchased.\n@return Amount of Tokens (exchange_addr.token) bought.",
            "id": 1141,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "tokenToExchangeSwapInput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1137,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1128,
                  "name": "tokens_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 1141,
                  "src": "9183:19:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1127,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9183:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1130,
                  "name": "min_tokens_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1141,
                  "src": "9209:25:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1129,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9209:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1132,
                  "name": "min_eth_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1141,
                  "src": "9241:22:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1131,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9241:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1134,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 1141,
                  "src": "9270:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1133,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9270:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1136,
                  "name": "exchange_addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 1141,
                  "src": "9293:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1135,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9293:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9177:138:5"
            },
            "returnParameters": {
              "id": 1140,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1139,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1141,
                  "src": "9339:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1138,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9339:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9338:9:5"
            },
            "scope": 1255,
            "src": "9144:204:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Convert Tokens (token) to Tokens (exchange_addr.token) && transfers\n        Tokens (exchange_addr.token) to recipient.\n@dev Allows trades through contracts that were not deployed from the same factory.\n@dev User specifies exact input && minimum output.\n@param tokens_sold Amount of Tokens sold.\n@param min_tokens_bought Minimum Tokens (token_addr) purchased.\n@param min_eth_bought Minimum ETH purchased as intermediary.\n@param deadline Time after which this transaction can no longer be executed.\n@param recipient The address that receives output ETH.\n@param exchange_addr The address of the exchange for the token being purchased.\n@return Amount of Tokens (exchange_addr.token) bought.",
            "id": 1158,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "tokenToExchangeTransferInput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1154,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1143,
                  "name": "tokens_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 1158,
                  "src": "10157:19:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1142,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10157:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1145,
                  "name": "min_tokens_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1158,
                  "src": "10183:25:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1144,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10183:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1147,
                  "name": "min_eth_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1158,
                  "src": "10215:22:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1146,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10215:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1149,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 1158,
                  "src": "10244:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1148,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10244:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1151,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 1158,
                  "src": "10267:17:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1150,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10267:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1153,
                  "name": "exchange_addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 1158,
                  "src": "10291:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1152,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10291:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10151:162:5"
            },
            "returnParameters": {
              "id": 1157,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1156,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1158,
                  "src": "10337:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1155,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10337:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10336:9:5"
            },
            "scope": 1255,
            "src": "10114:232:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Convert Tokens (token) to Tokens (exchange_addr.token).\n@dev Allows trades through contracts that were not deployed from the same factory.\n@dev User specifies maximum input && exact output.\n@param tokens_bought Amount of Tokens (token_addr) bought.\n@param max_tokens_sold Maximum Tokens (token) sold.\n@param max_eth_sold Maximum ETH purchased as intermediary.\n@param deadline Time after which this transaction can no longer be executed.\n@param exchange_addr The address of the exchange for the token being purchased.\n@return Amount of Tokens (token) sold.",
            "id": 1173,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "tokenToExchangeSwapOutput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1169,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1160,
                  "name": "tokens_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1173,
                  "src": "11011:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1159,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11011:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1162,
                  "name": "max_tokens_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 1173,
                  "src": "11039:23:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1161,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11039:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1164,
                  "name": "max_eth_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 1173,
                  "src": "11069:20:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1163,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11069:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1166,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 1173,
                  "src": "11096:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1165,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11096:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1168,
                  "name": "exchange_addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 1173,
                  "src": "11119:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1167,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11119:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11005:136:5"
            },
            "returnParameters": {
              "id": 1172,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1171,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1173,
                  "src": "11165:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1170,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11165:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11164:9:5"
            },
            "scope": 1255,
            "src": "10971:203:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Convert Tokens (token) to Tokens (exchange_addr.token) && transfers\n        Tokens (exchange_addr.token) to recipient.\n@dev Allows trades through contracts that were not deployed from the same factory.\n@dev User specifies maximum input && exact output.\n@param tokens_bought Amount of Tokens (token_addr) bought.\n@param max_tokens_sold Maximum Tokens (token) sold.\n@param max_eth_sold Maximum ETH purchased as intermediary.\n@param deadline Time after which this transaction can no longer be executed.\n@param recipient The address that receives output ETH.\n@param exchange_addr The address of the exchange for the token being purchased.\n@return Amount of Tokens (token) sold.",
            "id": 1190,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "tokenToExchangeTransferOutput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1186,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1175,
                  "name": "tokens_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1190,
                  "src": "11971:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1174,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11971:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1177,
                  "name": "max_tokens_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 1190,
                  "src": "11999:23:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1176,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11999:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1179,
                  "name": "max_eth_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 1190,
                  "src": "12029:20:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1178,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12029:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1181,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 1190,
                  "src": "12056:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1180,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12056:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1183,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 1190,
                  "src": "12079:17:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1182,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12079:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1185,
                  "name": "exchange_addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 1190,
                  "src": "12103:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1184,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12103:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11965:160:5"
            },
            "returnParameters": {
              "id": 1189,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1188,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1190,
                  "src": "12149:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1187,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12149:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12148:9:5"
            },
            "scope": 1255,
            "src": "11927:231:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice external price function for ETH to Token trades with an exact input.\n@param eth_sold Amount of ETH sold.\n@return Amount of Tokens that can be bought with input ETH.",
            "id": 1197,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getEthToTokenInputPrice",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1193,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1192,
                  "name": "eth_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 1197,
                  "src": "12517:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1191,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12517:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12516:18:5"
            },
            "returnParameters": {
              "id": 1196,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1195,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1197,
                  "src": "12558:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1194,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12558:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12557:9:5"
            },
            "scope": 1255,
            "src": "12484:83:5",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice external price function for ETH to Token trades with an exact output.\n@param tokens_bought Amount of Tokens bought.\n@return Amount of ETH needed to buy output Tokens.",
            "id": 1204,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getEthToTokenOutputPrice",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1200,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1199,
                  "name": "tokens_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1204,
                  "src": "12807:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1198,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12807:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12806:23:5"
            },
            "returnParameters": {
              "id": 1203,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1202,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1204,
                  "src": "12853:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1201,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12853:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12852:9:5"
            },
            "scope": 1255,
            "src": "12773:89:5",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice external price function for Token to ETH trades with an exact input.\n@param tokens_sold Amount of Tokens sold.\n@return Amount of ETH that can be bought with input Tokens.",
            "id": 1211,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getTokenToEthInputPrice",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1207,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1206,
                  "name": "tokens_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 1211,
                  "src": "13105:19:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1205,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13105:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13104:21:5"
            },
            "returnParameters": {
              "id": 1210,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1209,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1211,
                  "src": "13149:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1208,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13149:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13148:9:5"
            },
            "scope": 1255,
            "src": "13072:86:5",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice external price function for Token to ETH trades with an exact output.\n@param eth_bought Amount of output ETH.\n@return Amount of Tokens needed to buy output ETH.",
            "id": 1218,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getTokenToEthOutputPrice",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1214,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1213,
                  "name": "eth_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1218,
                  "src": "13392:18:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1212,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13392:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13391:20:5"
            },
            "returnParameters": {
              "id": 1217,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1216,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1218,
                  "src": "13435:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1215,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13435:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13434:9:5"
            },
            "scope": 1255,
            "src": "13358:86:5",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@return Address of Token that is sold on this exchange.",
            "id": 1223,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "tokenAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1219,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13543:2:5"
            },
            "returnParameters": {
              "id": 1222,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1221,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1223,
                  "src": "13569:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1220,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13569:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13568:9:5"
            },
            "scope": 1255,
            "src": "13522:56:5",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@return Address of factory that created this exchange.",
            "id": 1228,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "factoryAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1224,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13677:2:5"
            },
            "returnParameters": {
              "id": 1227,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1226,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1228,
                  "src": "13703:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1225,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13703:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13702:9:5"
            },
            "scope": 1255,
            "src": "13654:58:5",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Deposit ETH && Tokens (token) at current ratio to mint UNI tokens.\n@dev min_liquidity does nothing when total UNI supply is 0.\n@param min_liquidity Minimum number of UNI sender will mint if total UNI supply is greater than 0.\n@param max_tokens Maximum number of tokens deposited. Deposits max amount if total UNI supply is 0.\n@param deadline Time after which this transaction can no longer be executed.\n@return The amount of UNI minted.",
            "id": 1239,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "addLiquidity",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1235,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1230,
                  "name": "min_liquidity",
                  "nodeType": "VariableDeclaration",
                  "scope": 1239,
                  "src": "14348:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1229,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14348:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1232,
                  "name": "max_tokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 1239,
                  "src": "14371:18:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1231,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14371:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1234,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 1239,
                  "src": "14391:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1233,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14391:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14347:61:5"
            },
            "returnParameters": {
              "id": 1238,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1237,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1239,
                  "src": "14435:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1236,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14435:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14434:9:5"
            },
            "scope": 1255,
            "src": "14326:118:5",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@dev Burn UNI tokens to withdraw ETH && Tokens at current ratio.\n@param amount Amount of UNI burned.\n@param min_eth Minimum ETH withdrawn.\n@param min_tokens Minimum Tokens withdrawn.\n@param deadline Time after which this transaction can no longer be executed.\n@return The amount of ETH && Tokens withdrawn.",
            "id": 1254,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "removeLiquidity",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1248,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1241,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1254,
                  "src": "14822:14:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1240,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14822:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1243,
                  "name": "min_eth",
                  "nodeType": "VariableDeclaration",
                  "scope": 1254,
                  "src": "14838:15:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1242,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14838:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1245,
                  "name": "min_tokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 1254,
                  "src": "14855:18:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1244,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14855:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1247,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 1254,
                  "src": "14875:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1246,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14875:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14821:71:5"
            },
            "returnParameters": {
              "id": 1253,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1250,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1254,
                  "src": "14911:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1249,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14911:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1252,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1254,
                  "src": "14920:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1251,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14920:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14910:18:5"
            },
            "scope": 1255,
            "src": "14797:132:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 1256,
        "src": "25:14906:5"
      }
    ],
    "src": "0:14931:5"
  },
  "legacyAST": {
    "absolutePath": "/home/binyu/Desktop/Synthetix/prod/swap-solidity/contracts/merged/IUniswapExchange.sol",
    "exportedSymbols": {
      "IUniswapExchange": [
        1255
      ]
    },
    "id": 1256,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 917,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:5"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "interface",
        "documentation": null,
        "fullyImplemented": false,
        "id": 1255,
        "linearizedBaseContracts": [
          1255
        ],
        "name": "IUniswapExchange",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": null,
            "id": 925,
            "name": "TokenPurchase",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 924,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 919,
                  "indexed": true,
                  "name": "buyer",
                  "nodeType": "VariableDeclaration",
                  "scope": 925,
                  "src": "76:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 918,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "76:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 921,
                  "indexed": true,
                  "name": "eth_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 925,
                  "src": "99:24:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 920,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "99:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 923,
                  "indexed": true,
                  "name": "tokens_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 925,
                  "src": "125:29:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 922,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "125:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "75:80:5"
            },
            "src": "56:100:5"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 933,
            "name": "EthPurchase",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 932,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 927,
                  "indexed": true,
                  "name": "buyer",
                  "nodeType": "VariableDeclaration",
                  "scope": 933,
                  "src": "177:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 926,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "177:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 929,
                  "indexed": true,
                  "name": "tokens_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 933,
                  "src": "200:27:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 928,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "200:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 931,
                  "indexed": true,
                  "name": "eth_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 933,
                  "src": "229:26:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 930,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "229:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "176:80:5"
            },
            "src": "159:98:5"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 941,
            "name": "AddLiquidity",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 940,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 935,
                  "indexed": true,
                  "name": "provider",
                  "nodeType": "VariableDeclaration",
                  "scope": 941,
                  "src": "279:24:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 934,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "279:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 937,
                  "indexed": true,
                  "name": "eth_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 941,
                  "src": "305:26:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 936,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "305:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 939,
                  "indexed": true,
                  "name": "token_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 941,
                  "src": "333:28:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 938,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "333:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "278:84:5"
            },
            "src": "260:103:5"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 949,
            "name": "RemoveLiquidity",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 948,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 943,
                  "indexed": true,
                  "name": "provider",
                  "nodeType": "VariableDeclaration",
                  "scope": 949,
                  "src": "388:24:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 942,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "388:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 945,
                  "indexed": true,
                  "name": "eth_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 949,
                  "src": "414:26:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 944,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "414:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 947,
                  "indexed": true,
                  "name": "token_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 949,
                  "src": "442:28:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 946,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "442:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "387:84:5"
            },
            "src": "366:106:5"
          },
          {
            "body": null,
            "documentation": "@notice Convert ETH to Tokens.\n@dev User specifies exact input (msg.value).\n@dev User cannot specify minimum output or deadline.",
            "id": 952,
            "implemented": false,
            "kind": "fallback",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 950,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "642:2:5"
            },
            "returnParameters": {
              "id": 951,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "661:0:5"
            },
            "scope": 1255,
            "src": "633:29:5",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@dev Pricing function for converting between ETH && Tokens.\n@param input_amount Amount of ETH or Tokens being sold.\n@param input_reserve Amount of ETH or Tokens (input type) in exchange reserves.\n@param output_reserve Amount of ETH or Tokens (output type) in exchange reserves.\n@return Amount of ETH or Tokens bought.",
            "id": 963,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getInputPrice",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 959,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 954,
                  "name": "input_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 963,
                  "src": "1043:20:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 953,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1043:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 956,
                  "name": "input_reserve",
                  "nodeType": "VariableDeclaration",
                  "scope": 963,
                  "src": "1065:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 955,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1065:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 958,
                  "name": "output_reserve",
                  "nodeType": "VariableDeclaration",
                  "scope": 963,
                  "src": "1088:22:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 957,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1088:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1042:69:5"
            },
            "returnParameters": {
              "id": 962,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 961,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 963,
                  "src": "1135:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 960,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1135:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1134:9:5"
            },
            "scope": 1255,
            "src": "1020:124:5",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@dev Pricing function for converting between ETH && Tokens.\n@param output_amount Amount of ETH or Tokens being bought.\n@param input_reserve Amount of ETH or Tokens (input type) in exchange reserves.\n@param output_reserve Amount of ETH or Tokens (output type) in exchange reserves.\n@return Amount of ETH or Tokens sold.",
            "id": 974,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getOutputPrice",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 970,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 965,
                  "name": "output_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 974,
                  "src": "1527:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 964,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1527:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 967,
                  "name": "input_reserve",
                  "nodeType": "VariableDeclaration",
                  "scope": 974,
                  "src": "1550:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 966,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1550:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 969,
                  "name": "output_reserve",
                  "nodeType": "VariableDeclaration",
                  "scope": 974,
                  "src": "1573:22:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 968,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1573:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1526:70:5"
            },
            "returnParameters": {
              "id": 973,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 972,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 974,
                  "src": "1620:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 971,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1620:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1619:9:5"
            },
            "scope": 1255,
            "src": "1503:126:5",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Convert ETH to Tokens.\n@dev User specifies exact input (msg.value) && minimum output.\n@param min_tokens Minimum Tokens bought.\n@param deadline Time after which this transaction can no longer be executed.\n@return Amount of Tokens bought.",
            "id": 983,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ethToTokenSwapInput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 979,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 976,
                  "name": "min_tokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 983,
                  "src": "1947:18:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 975,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1947:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 978,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 983,
                  "src": "1967:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 977,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1967:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1946:38:5"
            },
            "returnParameters": {
              "id": 982,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 981,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 983,
                  "src": "2011:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 980,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2011:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2010:9:5"
            },
            "scope": 1255,
            "src": "1918:102:5",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Convert ETH to Tokens && transfers Tokens to recipient.\n@dev User specifies exact input (msg.value) && minimum output\n@param min_tokens Minimum Tokens bought.\n@param deadline Time after which this transaction can no longer be executed.\n@param recipient The address that receives output Tokens.\n@return  Amount of Tokens bought.",
            "id": 994,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ethToTokenTransferInput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 990,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 985,
                  "name": "min_tokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 994,
                  "src": "2436:18:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 984,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2436:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 987,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 994,
                  "src": "2456:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 986,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2456:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 989,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 994,
                  "src": "2474:17:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 988,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2474:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2435:57:5"
            },
            "returnParameters": {
              "id": 993,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 992,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 994,
                  "src": "2518:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 991,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2518:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2517:9:5"
            },
            "scope": 1255,
            "src": "2403:124:5",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Convert ETH to Tokens.\n@dev User specifies maximum input (msg.value) && exact output.\n@param tokens_bought Amount of tokens bought.\n@param deadline Time after which this transaction can no longer be executed.\n@return Amount of ETH sold.",
            "id": 1003,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ethToTokenSwapOutput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 999,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 996,
                  "name": "tokens_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1003,
                  "src": "2845:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 995,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2845:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 998,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 1003,
                  "src": "2868:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 997,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2868:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2844:41:5"
            },
            "returnParameters": {
              "id": 1002,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1001,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1003,
                  "src": "2911:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1000,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2911:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2910:9:5"
            },
            "scope": 1255,
            "src": "2815:105:5",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Convert ETH to Tokens && transfers Tokens to recipient.\n@dev User specifies maximum input (msg.value) && exact output.\n@param tokens_bought Amount of tokens bought.\n@param deadline Time after which this transaction can no longer be executed.\n@param recipient The address that receives output Tokens.\n@return Amount of ETH sold.",
            "id": 1014,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ethToTokenTransferOutput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1010,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1005,
                  "name": "tokens_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1014,
                  "src": "3336:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1004,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3336:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1007,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 1014,
                  "src": "3359:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1006,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3359:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1009,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 1014,
                  "src": "3377:17:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1008,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3377:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3335:60:5"
            },
            "returnParameters": {
              "id": 1013,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1012,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1014,
                  "src": "3422:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1011,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3422:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3421:9:5"
            },
            "scope": 1255,
            "src": "3302:129:5",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Convert Tokens to ETH.\n@dev User specifies exact input && minimum output.\n@param tokens_sold Amount of Tokens sold.\n@param min_eth Minimum ETH purchased.\n@param deadline Time after which this transaction can no longer be executed.\n@return Amount of ETH bought.",
            "id": 1025,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "tokenToEthSwapInput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1021,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1016,
                  "name": "tokens_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 1025,
                  "src": "3776:19:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1015,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3776:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1018,
                  "name": "min_eth",
                  "nodeType": "VariableDeclaration",
                  "scope": 1025,
                  "src": "3797:15:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1017,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3797:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1020,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 1025,
                  "src": "3814:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1019,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3814:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3775:56:5"
            },
            "returnParameters": {
              "id": 1024,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1023,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1025,
                  "src": "3850:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1022,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3850:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3849:9:5"
            },
            "scope": 1255,
            "src": "3747:112:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Convert Tokens to ETH && transfers ETH to recipient.\n@dev User specifies exact input && minimum output.\n@param tokens_sold Amount of Tokens sold.\n@param min_eth Minimum ETH purchased.\n@param deadline Time after which this transaction can no longer be executed.\n@param recipient The address that receives output ETH.\n@return  Amount of ETH bought.",
            "id": 1038,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "tokenToEthTransferInput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1034,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1027,
                  "name": "tokens_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 1038,
                  "src": "4299:19:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1026,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4299:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1029,
                  "name": "min_eth",
                  "nodeType": "VariableDeclaration",
                  "scope": 1038,
                  "src": "4320:15:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1028,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4320:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1031,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 1038,
                  "src": "4337:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1030,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4337:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1033,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 1038,
                  "src": "4355:17:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1032,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4355:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4298:75:5"
            },
            "returnParameters": {
              "id": 1037,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1036,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1038,
                  "src": "4392:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1035,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4392:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4391:9:5"
            },
            "scope": 1255,
            "src": "4266:135:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Convert Tokens to ETH.\n@dev User specifies maximum input && exact output.\n@param eth_bought Amount of ETH purchased.\n@param max_tokens Maximum Tokens sold.\n@param deadline Time after which this transaction can no longer be executed.\n@return Amount of Tokens sold.",
            "id": 1049,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "tokenToEthSwapOutput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1045,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1040,
                  "name": "eth_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1049,
                  "src": "4750:18:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1039,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4750:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1042,
                  "name": "max_tokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 1049,
                  "src": "4770:18:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1041,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4770:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1044,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 1049,
                  "src": "4790:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1043,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4790:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4749:58:5"
            },
            "returnParameters": {
              "id": 1048,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1047,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1049,
                  "src": "4826:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1046,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4826:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4825:9:5"
            },
            "scope": 1255,
            "src": "4720:115:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Convert Tokens to ETH && transfers ETH to recipient.\n@dev User specifies maximum input && exact output.\n@param eth_bought Amount of ETH purchased.\n@param max_tokens Maximum Tokens sold.\n@param deadline Time after which this transaction can no longer be executed.\n@param recipient The address that receives output ETH.\n@return Amount of Tokens sold.",
            "id": 1062,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "tokenToEthTransferOutput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1058,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1051,
                  "name": "eth_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1062,
                  "src": "5277:18:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1050,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5277:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1053,
                  "name": "max_tokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 1062,
                  "src": "5297:18:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1052,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5297:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1055,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 1062,
                  "src": "5317:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1054,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5317:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1057,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 1062,
                  "src": "5335:17:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1056,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5335:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5276:77:5"
            },
            "returnParameters": {
              "id": 1061,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1060,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1062,
                  "src": "5372:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1059,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5372:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5371:9:5"
            },
            "scope": 1255,
            "src": "5243:138:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Convert Tokens (token) to Tokens (token_addr).\n@dev User specifies exact input && minimum output.\n@param tokens_sold Amount of Tokens sold.\n@param min_tokens_bought Minimum Tokens (token_addr) purchased.\n@param min_eth_bought Minimum ETH purchased as intermediary.\n@param deadline Time after which this transaction can no longer be executed.\n@param token_addr The address of the token being purchased.\n@return Amount of Tokens (token_addr) bought.",
            "id": 1077,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "tokenToTokenSwapInput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1073,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1064,
                  "name": "tokens_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 1077,
                  "src": "5929:19:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1063,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5929:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1066,
                  "name": "min_tokens_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1077,
                  "src": "5955:25:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1065,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5955:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1068,
                  "name": "min_eth_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1077,
                  "src": "5987:22:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1067,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5987:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1070,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 1077,
                  "src": "6016:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1069,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6016:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1072,
                  "name": "token_addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 1077,
                  "src": "6039:18:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1071,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6039:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5923:135:5"
            },
            "returnParameters": {
              "id": 1076,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1075,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1077,
                  "src": "6082:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1074,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6082:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6081:9:5"
            },
            "scope": 1255,
            "src": "5893:198:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Convert Tokens (token) to Tokens (token_addr) && transfers\n        Tokens (token_addr) to recipient.\n@dev User specifies exact input && minimum output.\n@param tokens_sold Amount of Tokens sold.\n@param min_tokens_bought Minimum Tokens (token_addr) purchased.\n@param min_eth_bought Minimum ETH purchased as intermediary.\n@param deadline Time after which this transaction can no longer be executed.\n@param recipient The address that receives output ETH.\n@param token_addr The address of the token being purchased.\n@return Amount of Tokens (token_addr) bought.",
            "id": 1094,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "tokenToTokenTransferInput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1090,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1079,
                  "name": "tokens_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 1094,
                  "src": "6762:19:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1078,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6762:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1081,
                  "name": "min_tokens_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1094,
                  "src": "6788:25:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1080,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6788:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1083,
                  "name": "min_eth_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1094,
                  "src": "6820:22:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1082,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6820:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1085,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 1094,
                  "src": "6849:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1084,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6849:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1087,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 1094,
                  "src": "6872:17:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1086,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6872:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1089,
                  "name": "token_addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 1094,
                  "src": "6896:18:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1088,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6896:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6756:159:5"
            },
            "returnParameters": {
              "id": 1093,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1092,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1094,
                  "src": "6939:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1091,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6939:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6938:9:5"
            },
            "scope": 1255,
            "src": "6722:226:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Convert Tokens (token) to Tokens (token_addr).\n@dev User specifies maximum input && exact output.\n@param tokens_bought Amount of Tokens (token_addr) bought.\n@param max_tokens_sold Maximum Tokens (token) sold.\n@param max_eth_sold Maximum ETH purchased as intermediary.\n@param deadline Time after which this transaction can no longer be executed.\n@param token_addr The address of the token being purchased.\n@return Amount of Tokens (token) sold.",
            "id": 1109,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "tokenToTokenSwapOutput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1105,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1096,
                  "name": "tokens_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1109,
                  "src": "7494:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1095,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7494:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1098,
                  "name": "max_tokens_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 1109,
                  "src": "7522:23:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1097,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7522:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1100,
                  "name": "max_eth_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 1109,
                  "src": "7552:20:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1099,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7552:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1102,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 1109,
                  "src": "7579:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1101,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7579:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1104,
                  "name": "token_addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 1109,
                  "src": "7602:18:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1103,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7602:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7488:133:5"
            },
            "returnParameters": {
              "id": 1108,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1107,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1109,
                  "src": "7645:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1106,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7645:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7644:9:5"
            },
            "scope": 1255,
            "src": "7457:197:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Convert Tokens (token) to Tokens (token_addr) && transfers\n        Tokens (token_addr) to recipient.\n@dev User specifies maximum input && exact output.\n@param tokens_bought Amount of Tokens (token_addr) bought.\n@param max_tokens_sold Maximum Tokens (token) sold.\n@param max_eth_sold Maximum ETH purchased as intermediary.\n@param deadline Time after which this transaction can no longer be executed.\n@param recipient The address that receives output ETH.\n@param token_addr The address of the token being purchased.\n@return Amount of Tokens (token) sold.",
            "id": 1126,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "tokenToTokenTransferOutput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1122,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1111,
                  "name": "tokens_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1126,
                  "src": "8322:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1110,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8322:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1113,
                  "name": "max_tokens_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 1126,
                  "src": "8350:23:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1112,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8350:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1115,
                  "name": "max_eth_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 1126,
                  "src": "8380:20:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1114,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8380:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1117,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 1126,
                  "src": "8407:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1116,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8407:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1119,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 1126,
                  "src": "8430:17:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1118,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8430:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1121,
                  "name": "token_addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 1126,
                  "src": "8454:18:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1120,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8454:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8316:157:5"
            },
            "returnParameters": {
              "id": 1125,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1124,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1126,
                  "src": "8497:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1123,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8497:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8496:9:5"
            },
            "scope": 1255,
            "src": "8281:225:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Convert Tokens (token) to Tokens (exchange_addr.token).\n@dev Allows trades through contracts that were not deployed from the same factory.\n@dev User specifies exact input && minimum output.\n@param tokens_sold Amount of Tokens sold.\n@param min_tokens_bought Minimum Tokens (token_addr) purchased.\n@param min_eth_bought Minimum ETH purchased as intermediary.\n@param deadline Time after which this transaction can no longer be executed.\n@param exchange_addr The address of the exchange for the token being purchased.\n@return Amount of Tokens (exchange_addr.token) bought.",
            "id": 1141,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "tokenToExchangeSwapInput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1137,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1128,
                  "name": "tokens_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 1141,
                  "src": "9183:19:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1127,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9183:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1130,
                  "name": "min_tokens_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1141,
                  "src": "9209:25:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1129,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9209:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1132,
                  "name": "min_eth_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1141,
                  "src": "9241:22:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1131,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9241:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1134,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 1141,
                  "src": "9270:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1133,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9270:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1136,
                  "name": "exchange_addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 1141,
                  "src": "9293:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1135,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9293:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9177:138:5"
            },
            "returnParameters": {
              "id": 1140,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1139,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1141,
                  "src": "9339:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1138,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9339:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9338:9:5"
            },
            "scope": 1255,
            "src": "9144:204:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Convert Tokens (token) to Tokens (exchange_addr.token) && transfers\n        Tokens (exchange_addr.token) to recipient.\n@dev Allows trades through contracts that were not deployed from the same factory.\n@dev User specifies exact input && minimum output.\n@param tokens_sold Amount of Tokens sold.\n@param min_tokens_bought Minimum Tokens (token_addr) purchased.\n@param min_eth_bought Minimum ETH purchased as intermediary.\n@param deadline Time after which this transaction can no longer be executed.\n@param recipient The address that receives output ETH.\n@param exchange_addr The address of the exchange for the token being purchased.\n@return Amount of Tokens (exchange_addr.token) bought.",
            "id": 1158,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "tokenToExchangeTransferInput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1154,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1143,
                  "name": "tokens_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 1158,
                  "src": "10157:19:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1142,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10157:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1145,
                  "name": "min_tokens_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1158,
                  "src": "10183:25:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1144,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10183:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1147,
                  "name": "min_eth_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1158,
                  "src": "10215:22:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1146,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10215:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1149,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 1158,
                  "src": "10244:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1148,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10244:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1151,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 1158,
                  "src": "10267:17:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1150,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10267:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1153,
                  "name": "exchange_addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 1158,
                  "src": "10291:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1152,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10291:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10151:162:5"
            },
            "returnParameters": {
              "id": 1157,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1156,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1158,
                  "src": "10337:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1155,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10337:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10336:9:5"
            },
            "scope": 1255,
            "src": "10114:232:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Convert Tokens (token) to Tokens (exchange_addr.token).\n@dev Allows trades through contracts that were not deployed from the same factory.\n@dev User specifies maximum input && exact output.\n@param tokens_bought Amount of Tokens (token_addr) bought.\n@param max_tokens_sold Maximum Tokens (token) sold.\n@param max_eth_sold Maximum ETH purchased as intermediary.\n@param deadline Time after which this transaction can no longer be executed.\n@param exchange_addr The address of the exchange for the token being purchased.\n@return Amount of Tokens (token) sold.",
            "id": 1173,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "tokenToExchangeSwapOutput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1169,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1160,
                  "name": "tokens_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1173,
                  "src": "11011:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1159,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11011:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1162,
                  "name": "max_tokens_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 1173,
                  "src": "11039:23:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1161,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11039:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1164,
                  "name": "max_eth_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 1173,
                  "src": "11069:20:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1163,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11069:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1166,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 1173,
                  "src": "11096:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1165,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11096:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1168,
                  "name": "exchange_addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 1173,
                  "src": "11119:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1167,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11119:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11005:136:5"
            },
            "returnParameters": {
              "id": 1172,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1171,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1173,
                  "src": "11165:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1170,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11165:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11164:9:5"
            },
            "scope": 1255,
            "src": "10971:203:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Convert Tokens (token) to Tokens (exchange_addr.token) && transfers\n        Tokens (exchange_addr.token) to recipient.\n@dev Allows trades through contracts that were not deployed from the same factory.\n@dev User specifies maximum input && exact output.\n@param tokens_bought Amount of Tokens (token_addr) bought.\n@param max_tokens_sold Maximum Tokens (token) sold.\n@param max_eth_sold Maximum ETH purchased as intermediary.\n@param deadline Time after which this transaction can no longer be executed.\n@param recipient The address that receives output ETH.\n@param exchange_addr The address of the exchange for the token being purchased.\n@return Amount of Tokens (token) sold.",
            "id": 1190,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "tokenToExchangeTransferOutput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1186,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1175,
                  "name": "tokens_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1190,
                  "src": "11971:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1174,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11971:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1177,
                  "name": "max_tokens_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 1190,
                  "src": "11999:23:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1176,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11999:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1179,
                  "name": "max_eth_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 1190,
                  "src": "12029:20:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1178,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12029:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1181,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 1190,
                  "src": "12056:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1180,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12056:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1183,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 1190,
                  "src": "12079:17:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1182,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12079:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1185,
                  "name": "exchange_addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 1190,
                  "src": "12103:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1184,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12103:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11965:160:5"
            },
            "returnParameters": {
              "id": 1189,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1188,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1190,
                  "src": "12149:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1187,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12149:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12148:9:5"
            },
            "scope": 1255,
            "src": "11927:231:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice external price function for ETH to Token trades with an exact input.\n@param eth_sold Amount of ETH sold.\n@return Amount of Tokens that can be bought with input ETH.",
            "id": 1197,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getEthToTokenInputPrice",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1193,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1192,
                  "name": "eth_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 1197,
                  "src": "12517:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1191,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12517:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12516:18:5"
            },
            "returnParameters": {
              "id": 1196,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1195,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1197,
                  "src": "12558:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1194,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12558:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12557:9:5"
            },
            "scope": 1255,
            "src": "12484:83:5",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice external price function for ETH to Token trades with an exact output.\n@param tokens_bought Amount of Tokens bought.\n@return Amount of ETH needed to buy output Tokens.",
            "id": 1204,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getEthToTokenOutputPrice",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1200,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1199,
                  "name": "tokens_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1204,
                  "src": "12807:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1198,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12807:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12806:23:5"
            },
            "returnParameters": {
              "id": 1203,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1202,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1204,
                  "src": "12853:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1201,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12853:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12852:9:5"
            },
            "scope": 1255,
            "src": "12773:89:5",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice external price function for Token to ETH trades with an exact input.\n@param tokens_sold Amount of Tokens sold.\n@return Amount of ETH that can be bought with input Tokens.",
            "id": 1211,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getTokenToEthInputPrice",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1207,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1206,
                  "name": "tokens_sold",
                  "nodeType": "VariableDeclaration",
                  "scope": 1211,
                  "src": "13105:19:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1205,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13105:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13104:21:5"
            },
            "returnParameters": {
              "id": 1210,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1209,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1211,
                  "src": "13149:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1208,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13149:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13148:9:5"
            },
            "scope": 1255,
            "src": "13072:86:5",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice external price function for Token to ETH trades with an exact output.\n@param eth_bought Amount of output ETH.\n@return Amount of Tokens needed to buy output ETH.",
            "id": 1218,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getTokenToEthOutputPrice",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1214,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1213,
                  "name": "eth_bought",
                  "nodeType": "VariableDeclaration",
                  "scope": 1218,
                  "src": "13392:18:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1212,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13392:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13391:20:5"
            },
            "returnParameters": {
              "id": 1217,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1216,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1218,
                  "src": "13435:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1215,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13435:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13434:9:5"
            },
            "scope": 1255,
            "src": "13358:86:5",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@return Address of Token that is sold on this exchange.",
            "id": 1223,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "tokenAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1219,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13543:2:5"
            },
            "returnParameters": {
              "id": 1222,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1221,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1223,
                  "src": "13569:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1220,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13569:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13568:9:5"
            },
            "scope": 1255,
            "src": "13522:56:5",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@return Address of factory that created this exchange.",
            "id": 1228,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "factoryAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1224,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13677:2:5"
            },
            "returnParameters": {
              "id": 1227,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1226,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1228,
                  "src": "13703:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1225,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13703:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13702:9:5"
            },
            "scope": 1255,
            "src": "13654:58:5",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@notice Deposit ETH && Tokens (token) at current ratio to mint UNI tokens.\n@dev min_liquidity does nothing when total UNI supply is 0.\n@param min_liquidity Minimum number of UNI sender will mint if total UNI supply is greater than 0.\n@param max_tokens Maximum number of tokens deposited. Deposits max amount if total UNI supply is 0.\n@param deadline Time after which this transaction can no longer be executed.\n@return The amount of UNI minted.",
            "id": 1239,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "addLiquidity",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1235,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1230,
                  "name": "min_liquidity",
                  "nodeType": "VariableDeclaration",
                  "scope": 1239,
                  "src": "14348:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1229,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14348:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1232,
                  "name": "max_tokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 1239,
                  "src": "14371:18:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1231,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14371:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1234,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 1239,
                  "src": "14391:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1233,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14391:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14347:61:5"
            },
            "returnParameters": {
              "id": 1238,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1237,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1239,
                  "src": "14435:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1236,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14435:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14434:9:5"
            },
            "scope": 1255,
            "src": "14326:118:5",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@dev Burn UNI tokens to withdraw ETH && Tokens at current ratio.\n@param amount Amount of UNI burned.\n@param min_eth Minimum ETH withdrawn.\n@param min_tokens Minimum Tokens withdrawn.\n@param deadline Time after which this transaction can no longer be executed.\n@return The amount of ETH && Tokens withdrawn.",
            "id": 1254,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "removeLiquidity",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1248,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1241,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1254,
                  "src": "14822:14:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1240,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14822:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1243,
                  "name": "min_eth",
                  "nodeType": "VariableDeclaration",
                  "scope": 1254,
                  "src": "14838:15:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1242,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14838:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1245,
                  "name": "min_tokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 1254,
                  "src": "14855:18:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1244,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14855:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1247,
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 1254,
                  "src": "14875:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1246,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14875:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14821:71:5"
            },
            "returnParameters": {
              "id": 1253,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1250,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1254,
                  "src": "14911:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1249,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14911:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1252,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1254,
                  "src": "14920:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1251,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14920:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14910:18:5"
            },
            "scope": 1255,
            "src": "14797:132:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 1256,
        "src": "25:14906:5"
      }
    ],
    "src": "0:14931:5"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.8+commit.1f148fe1.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "2.0.1",
  "updatedAt": "2020-05-03T00:37:19.464Z"
}