Contract 0x23805449f91bb2d2054d9ba288fdc8f09b5eac79 1

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xd7806e3c0cf68c24f33cd1b7984be586272c8e9057b2e684306da09742ece1d7Add Liquidity588228852023-02-07 14:45:3226 mins ago0x211f4bc4a77fd03e5c5b3a3c85a94ebaece92381 IN  0x23805449f91bb2d2054d9ba288fdc8f09b5eac790 ETH0.00012985
0xa2050ee001e7cdeb5a8a3a2156ba67c2034999e5b0178e9feba4f8b971dd3cf5Swap Exact Token...588221312023-02-07 14:42:0929 mins ago0x211f4bc4a77fd03e5c5b3a3c85a94ebaece92381 IN  0x23805449f91bb2d2054d9ba288fdc8f09b5eac790 ETH0.00012291
0x7a08c99f367e8ea39d8044f8822745a42cd7e84ebd9262da5faa607e8f31d310Add Liquidity588200102023-02-07 14:32:5738 mins ago0xb7a88772f5bf81eae6549aa3d29b6ba4f62e71c9 IN  0x23805449f91bb2d2054d9ba288fdc8f09b5eac790 ETH0.00013006
0x22612f6e70594225b915e4c4bd7a33e863bd5486ce696170c92a027589e23d89Swap Exact Token...588193952023-02-07 14:30:1241 mins ago0xbadd1e72738584fb64c443e4eb86be81ded7043d IN  0x23805449f91bb2d2054d9ba288fdc8f09b5eac790 ETH0.00012128
0x814bb8d9b2bbb16d5a32437860206b76018808b819b69f66ee76d622f1260c5fSwap Exact Token...588193622023-02-07 14:30:0441 mins ago0x211f4bc4a77fd03e5c5b3a3c85a94ebaece92381 IN  0x23805449f91bb2d2054d9ba288fdc8f09b5eac790 ETH0.00012348
0x1be353e2eb316350f33fb2d8fd03409c326685aeecd5e4716299e77b3e705faeSwap Exact Token...588187432023-02-07 14:27:2844 mins ago0x21e3b19f3b1702ada91b263d59620d9ad5fc124e IN  0x23805449f91bb2d2054d9ba288fdc8f09b5eac790 ETH0.00011719
0xce9ebc37ea413b9024e2f5914958e1f57dac5e4811d6e310c950ec45144cb554Swap Exact Token...588173902023-02-07 14:21:2350 mins ago0xc0e282b5284a728698f4e1da0ba34ff308e1e82b IN  0x23805449f91bb2d2054d9ba288fdc8f09b5eac790 ETH0.00012027
0x25c01aa8615186603cfa15055b9ac7d22d4cdd99ea10c9d7b8e0ba1c4449989cAdd Liquidity588123892023-02-07 13:59:281 hr 12 mins ago0x336119a76dabe37b29c4f4cd69897d7959c6b56a IN  0x23805449f91bb2d2054d9ba288fdc8f09b5eac790 ETH0.00013892
0x1f05ae6094d400d4456699b3b3b41fe264f242cfb0da35883894518985fc4f8fSwap Exact Token...588116452023-02-07 13:56:081 hr 15 mins ago0x0ee614194e8693da786fac2089a4a7f665eb958c IN  0x23805449f91bb2d2054d9ba288fdc8f09b5eac790 ETH0.00013188
0x650fe88b99d70b2c7031b355c22f392abd8e82415afc248562f3be597e16ff1dSwap Exact Token...588088482023-02-07 13:43:291 hr 28 mins ago0x70861964c4cf710c421958aa18ec0cfb128f43a8 IN  0x23805449f91bb2d2054d9ba288fdc8f09b5eac790 ETH0.00010731
0xbb480fe408374b54758a6d09fb26c48a1e64d29a469eee6e256e509b909aedcfSwap Exact Token...588082092023-02-07 13:40:471 hr 30 mins ago0x70861964c4cf710c421958aa18ec0cfb128f43a8 IN  0x23805449f91bb2d2054d9ba288fdc8f09b5eac790 ETH0.00010943
0x081d85f8b6c53614cdfcecb986029c07716de9cc02bf666c2e9d6313daa5fd40Swap Exact Token...588075042023-02-07 13:37:411 hr 33 mins ago0x855bd65907484e5968e0f3c8651186da61d74be5 IN  0x23805449f91bb2d2054d9ba288fdc8f09b5eac790 ETH0.00010863
0x4d34f0ef84b61b6ec3f9328ffd98694c95227f6d3ec50b80cef540c458a08a4aSwap Exact Token...588063272023-02-07 13:32:401 hr 38 mins ago0xee7164c2a20ca710433e6e9c68b33c6549fd91d7 IN  0x23805449f91bb2d2054d9ba288fdc8f09b5eac790 ETH0.00011076
0xdff8a99d26cf15e44a8abcbc4f34cdab894659cf0dba256f2251d5632acbc8a3Swap Exact Token...588052992023-02-07 13:28:131 hr 43 mins ago0x0316196c7d2bc1354723d3fbf445f783d8febe53 IN  0x23805449f91bb2d2054d9ba288fdc8f09b5eac790 ETH0.000106
0x565bbcd4e5893a4e384b5ad0891e42ca1d916df12a5e98d7020e530358c1ec05Swap Exact Token...588043972023-02-07 13:24:181 hr 47 mins ago0xb9f831f19f94f09709cf75c757e5bd7a9a812819 IN  0x23805449f91bb2d2054d9ba288fdc8f09b5eac790 ETH0.00010625
0x0ff258c2be5d16bb78c3264c1e97d271220a7cc2bbfec04df2f7d83262dfa410Add Liquidity588028882023-02-07 13:17:451 hr 53 mins ago0x8a52d0acb9906b980c01a6b4fe441e5386766ab8 IN  0x23805449f91bb2d2054d9ba288fdc8f09b5eac790 ETH0.00010649
0x127d0c9686bb1c89c465f4780513732b5bf7d2f120c264726956d19851b44f23Swap Exact Token...588023482023-02-07 13:15:271 hr 56 mins ago0x8a52d0acb9906b980c01a6b4fe441e5386766ab8 IN  0x23805449f91bb2d2054d9ba288fdc8f09b5eac790 ETH0.00009743
0x75ba482039101caaa1b4daf898cee4b2071ac205d9f7c3e27e3a3c8fce592493Swap Exact Token...588003162023-02-07 13:06:192 hrs 5 mins ago0x9abcd812bffc1ef2e81a2dde75b5ed8809289d9d IN  0x23805449f91bb2d2054d9ba288fdc8f09b5eac790 ETH0.00009898
0x84f9e0dd94c80ef3aadc797855d1c34e9a674c66ec991edfafeb584f0fa03a1bSwap Exact Token...587996862023-02-07 13:03:352 hrs 7 mins ago0x1caf7569bde07f5bb60c5673fbc56db863f7b564 IN  0x23805449f91bb2d2054d9ba288fdc8f09b5eac790 ETH0.00009521
0x6eefbd4fa919b29f94f355ac5a135ae76d5ef7a5e532b085f6aa18e7e040d10dSwap Exact Token...587904802023-02-07 12:23:072 hrs 48 mins ago0x87046466a53e9972db029364e564b0755ba12e7f IN  0x23805449f91bb2d2054d9ba288fdc8f09b5eac790 ETH0.00009359
0x3ced65dcd9dc7e21211bf087ff8866d626f7d5f98deae7149a252c32ff4f867cAdd Liquidity587891272023-02-07 12:17:232 hrs 54 mins ago0xcf39d51a2103f1e4e5c12d9d281859d9063fe4e1 IN  0x23805449f91bb2d2054d9ba288fdc8f09b5eac790 ETH0.00010089
0x43281900b974b8c6d26432b7a7216ef10b52484333b714eb18b423606fbaeefdSwap Exact Token...587889122023-02-07 12:16:272 hrs 55 mins ago0xcf39d51a2103f1e4e5c12d9d281859d9063fe4e1 IN  0x23805449f91bb2d2054d9ba288fdc8f09b5eac790 ETH0.00009263
0xd0ab9f6947326d3ad5e431108c92d6f31ebc8d2000966befab7a4efed9e70870Swap Exact Token...587887492023-02-07 12:15:462 hrs 55 mins ago0xcf39d51a2103f1e4e5c12d9d281859d9063fe4e1 IN  0x23805449f91bb2d2054d9ba288fdc8f09b5eac790 ETH0.0000958
0x6ff4ff459ca73ee47c0993a5e9ef746f46e5e888fad3452a43edadfeb5a293e6Add Liquidity587883082023-02-07 12:13:522 hrs 57 mins ago0xc48b29b7dbfd991db45170e6624eceeb25f93af4 IN  0x23805449f91bb2d2054d9ba288fdc8f09b5eac790 ETH0.0001005
0x8e08f62db59e75d832f55d94426e53af4e3f06cb13ff19f8a76e1d6cb165a66cSwap Exact Token...587872672023-02-07 12:09:293 hrs 2 mins ago0xc48b29b7dbfd991db45170e6624eceeb25f93af4 IN  0x23805449f91bb2d2054d9ba288fdc8f09b5eac790 ETH0.00010307
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xd7806e3c0cf68c24f33cd1b7984be586272c8e9057b2e684306da09742ece1d7588228852023-02-07 14:45:3226 mins ago 0x23805449f91bb2d2054d9ba288fdc8f09b5eac790x088f2bd3667f385427d9289c28725d43d4b74ab40 ETH
0xd7806e3c0cf68c24f33cd1b7984be586272c8e9057b2e684306da09742ece1d7588228852023-02-07 14:45:3226 mins ago 0x23805449f91bb2d2054d9ba288fdc8f09b5eac79 BattleFly: GFLY Token0 ETH
0xd7806e3c0cf68c24f33cd1b7984be586272c8e9057b2e684306da09742ece1d7588228852023-02-07 14:45:3226 mins ago 0x23805449f91bb2d2054d9ba288fdc8f09b5eac79Treasure DAO: Magic Token0 ETH
0xd7806e3c0cf68c24f33cd1b7984be586272c8e9057b2e684306da09742ece1d7588228852023-02-07 14:45:3226 mins ago 0x23805449f91bb2d2054d9ba288fdc8f09b5eac790x088f2bd3667f385427d9289c28725d43d4b74ab40 ETH
0xd7806e3c0cf68c24f33cd1b7984be586272c8e9057b2e684306da09742ece1d7588228852023-02-07 14:45:3226 mins ago 0x23805449f91bb2d2054d9ba288fdc8f09b5eac79 0x015e379ce0ff195228b3a9ebdfa13f9afc155dd70 ETH
0xa2050ee001e7cdeb5a8a3a2156ba67c2034999e5b0178e9feba4f8b971dd3cf5588221312023-02-07 14:42:0929 mins ago 0x23805449f91bb2d2054d9ba288fdc8f09b5eac790x088f2bd3667f385427d9289c28725d43d4b74ab40 ETH
0xa2050ee001e7cdeb5a8a3a2156ba67c2034999e5b0178e9feba4f8b971dd3cf5588221312023-02-07 14:42:0929 mins ago 0x23805449f91bb2d2054d9ba288fdc8f09b5eac79Treasure DAO: Magic Token0 ETH
0xa2050ee001e7cdeb5a8a3a2156ba67c2034999e5b0178e9feba4f8b971dd3cf5588221312023-02-07 14:42:0929 mins ago 0x23805449f91bb2d2054d9ba288fdc8f09b5eac790x088f2bd3667f385427d9289c28725d43d4b74ab40 ETH
0x7a08c99f367e8ea39d8044f8822745a42cd7e84ebd9262da5faa607e8f31d310588200102023-02-07 14:32:5738 mins ago 0x23805449f91bb2d2054d9ba288fdc8f09b5eac79 0xf904469497e6a179a9d47a7b468e4be42ec56e650 ETH
0x7a08c99f367e8ea39d8044f8822745a42cd7e84ebd9262da5faa607e8f31d310588200102023-02-07 14:32:5738 mins ago 0x23805449f91bb2d2054d9ba288fdc8f09b5eac79Treasure DAO: Magic Token0 ETH
0x7a08c99f367e8ea39d8044f8822745a42cd7e84ebd9262da5faa607e8f31d310588200102023-02-07 14:32:5738 mins ago 0x23805449f91bb2d2054d9ba288fdc8f09b5eac79 ELLERIUM: ELM Token0 ETH
0x7a08c99f367e8ea39d8044f8822745a42cd7e84ebd9262da5faa607e8f31d310588200102023-02-07 14:32:5738 mins ago 0x23805449f91bb2d2054d9ba288fdc8f09b5eac79 0xf904469497e6a179a9d47a7b468e4be42ec56e650 ETH
0x7a08c99f367e8ea39d8044f8822745a42cd7e84ebd9262da5faa607e8f31d310588200102023-02-07 14:32:5738 mins ago 0x23805449f91bb2d2054d9ba288fdc8f09b5eac79 0x015e379ce0ff195228b3a9ebdfa13f9afc155dd70 ETH
0x22612f6e70594225b915e4c4bd7a33e863bd5486ce696170c92a027589e23d89588193952023-02-07 14:30:1241 mins ago 0x23805449f91bb2d2054d9ba288fdc8f09b5eac790x088f2bd3667f385427d9289c28725d43d4b74ab40 ETH
0x22612f6e70594225b915e4c4bd7a33e863bd5486ce696170c92a027589e23d89588193952023-02-07 14:30:1241 mins ago 0x23805449f91bb2d2054d9ba288fdc8f09b5eac79 BattleFly: GFLY Token0 ETH
0x22612f6e70594225b915e4c4bd7a33e863bd5486ce696170c92a027589e23d89588193952023-02-07 14:30:1241 mins ago 0x23805449f91bb2d2054d9ba288fdc8f09b5eac790x088f2bd3667f385427d9289c28725d43d4b74ab40 ETH
0x814bb8d9b2bbb16d5a32437860206b76018808b819b69f66ee76d622f1260c5f588193622023-02-07 14:30:0441 mins ago 0x23805449f91bb2d2054d9ba288fdc8f09b5eac790x088f2bd3667f385427d9289c28725d43d4b74ab40 ETH
0x814bb8d9b2bbb16d5a32437860206b76018808b819b69f66ee76d622f1260c5f588193622023-02-07 14:30:0441 mins ago 0x23805449f91bb2d2054d9ba288fdc8f09b5eac79Treasure DAO: Magic Token0 ETH
0x814bb8d9b2bbb16d5a32437860206b76018808b819b69f66ee76d622f1260c5f588193622023-02-07 14:30:0441 mins ago 0x23805449f91bb2d2054d9ba288fdc8f09b5eac790x088f2bd3667f385427d9289c28725d43d4b74ab40 ETH
0x1be353e2eb316350f33fb2d8fd03409c326685aeecd5e4716299e77b3e705fae588187432023-02-07 14:27:2844 mins ago 0x23805449f91bb2d2054d9ba288fdc8f09b5eac79 0xf904469497e6a179a9d47a7b468e4be42ec56e650 ETH
0x1be353e2eb316350f33fb2d8fd03409c326685aeecd5e4716299e77b3e705fae588187432023-02-07 14:27:2844 mins ago 0x23805449f91bb2d2054d9ba288fdc8f09b5eac79 ELLERIUM: ELM Token0 ETH
0x1be353e2eb316350f33fb2d8fd03409c326685aeecd5e4716299e77b3e705fae588187432023-02-07 14:27:2844 mins ago 0x23805449f91bb2d2054d9ba288fdc8f09b5eac79 0xf904469497e6a179a9d47a7b468e4be42ec56e650 ETH
0xce9ebc37ea413b9024e2f5914958e1f57dac5e4811d6e310c950ec45144cb554588173902023-02-07 14:21:2350 mins ago 0x23805449f91bb2d2054d9ba288fdc8f09b5eac790x088f2bd3667f385427d9289c28725d43d4b74ab40 ETH
0xce9ebc37ea413b9024e2f5914958e1f57dac5e4811d6e310c950ec45144cb554588173902023-02-07 14:21:2350 mins ago 0x23805449f91bb2d2054d9ba288fdc8f09b5eac79 BattleFly: GFLY Token0 ETH
0xce9ebc37ea413b9024e2f5914958e1f57dac5e4811d6e310c950ec45144cb554588173902023-02-07 14:21:2350 mins ago 0x23805449f91bb2d2054d9ba288fdc8f09b5eac790x088f2bd3667f385427d9289c28725d43d4b74ab40 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
UniswapV2Router02

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 10 : UniswapV2Router02.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity 0.6.12;

import './libraries/UniswapV2Library.sol';
import './libraries/SafeMath.sol';
import './libraries/TransferHelper.sol';
import './interfaces/IUniswapV2Router02.sol';
import './interfaces/IUniswapV2Factory.sol';
import './interfaces/IERC20.sol';
import './interfaces/IWETH.sol';

contract UniswapV2Router02 is IUniswapV2Router02 {
    using SafeMathUniswap for uint;

    address public immutable override factory;
    address public immutable override WETH;

    modifier ensure(uint deadline) {
        require(deadline >= block.timestamp, 'UniswapV2Router: EXPIRED');
        _;
    }

    constructor(address _factory, address _WETH) public {
        factory = _factory;
        WETH = _WETH;
    }

    receive() external payable {
        assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract
    }

    // **** ADD LIQUIDITY ****
    function _addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin
    ) internal virtual returns (uint amountA, uint amountB) {
        // create the pair if it doesn't exist yet
        if (IUniswapV2Factory(factory).getPair(tokenA, tokenB) == address(0)) {
            IUniswapV2Factory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = UniswapV2Library.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = UniswapV2Library.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'UniswapV2Router: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = UniswapV2Library.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'UniswapV2Router: INSUFFICIENT_A_AMOUNT');
                (amountA, amountB) = (amountAOptimal, amountBDesired);
            }
        }
    }
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) {
        (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin);
        address pair = UniswapV2Library.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IUniswapV2Pair(pair).mint(to);
    }

    // **** REMOVE LIQUIDITY ****
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountA, uint amountB) {
        address pair = UniswapV2Library.pairFor(factory, tokenA, tokenB);
        IUniswapV2Pair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = IUniswapV2Pair(pair).burn(to);
        (address token0,) = UniswapV2Library.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'UniswapV2Router: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'UniswapV2Router: INSUFFICIENT_B_AMOUNT');
    }
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountToken, uint amountETH) {
        (amountToken, amountETH) = removeLiquidity(
            token,
            WETH,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, amountToken);
        IWETH(WETH).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountA, uint amountB) {
        address pair = UniswapV2Library.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        IUniswapV2Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline);
    }
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountToken, uint amountETH) {
        address pair = UniswapV2Library.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IUniswapV2Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline);
    }

    // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) ****
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountETH) {
        (, amountETH) = removeLiquidity(
            token,
            WETH,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, IERC20Uniswap(token).balanceOf(address(this)));
        IWETH(WETH).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountETH) {
        address pair = UniswapV2Library.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IUniswapV2Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        amountETH = removeLiquidityETHSupportingFeeOnTransferTokens(
            token, liquidity, amountTokenMin, amountETHMin, to, deadline
        );
    }

    // **** SWAP ****
    // requires the initial amount to have already been sent to the first pair
    function _swap(uint[] memory amounts, address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = UniswapV2Library.sortTokens(input, output);
            uint amountOut = amounts[i + 1];
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0));
            address to = i < path.length - 2 ? UniswapV2Library.pairFor(factory, output, path[i + 2]) : _to;
            IUniswapV2Pair(UniswapV2Library.pairFor(factory, input, output)).swap(
                amount0Out, amount1Out, to, new bytes(0)
            );
        }
    }
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint[] memory amounts) {
        amounts = UniswapV2Library.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint[] memory amounts) {
        amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[path.length - 1] == WETH, 'UniswapV2Router: INVALID_PATH');
        amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWETH(WETH).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[path.length - 1] == WETH, 'UniswapV2Router: INVALID_PATH');
        amounts = UniswapV2Library.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWETH(WETH).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }

    // **** SWAP (supporting fee-on-transfer tokens) ****
    // requires the initial amount to have already been sent to the first pair
    function _swapSupportingFeeOnTransferTokens(address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = UniswapV2Library.sortTokens(input, output);
            IUniswapV2Pair pair = IUniswapV2Pair(UniswapV2Library.pairFor(factory, input, output));
            uint amountInput;
            uint amountOutput;
            { // scope to avoid stack too deep errors
            (uint reserve0, uint reserve1,) = pair.getReserves();
            (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
            amountInput = IERC20Uniswap(input).balanceOf(address(pair)).sub(reserveInput);
            amountOutput = UniswapV2Library.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? UniswapV2Library.pairFor(factory, output, path[i + 2]) : _to;
            pair.swap(amount0Out, amount1Out, to, new bytes(0));
        }
    }
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) {
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amountIn
        );
        uint balanceBefore = IERC20Uniswap(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20Uniswap(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        ensure(deadline)
    {
        require(path[path.length - 1] == WETH, 'UniswapV2Router: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20Uniswap(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).withdraw(amountOut);
        TransferHelper.safeTransferETH(to, amountOut);
    }

    // **** LIBRARY FUNCTIONS ****
    function quote(uint amountA, uint reserveA, uint reserveB) public pure virtual override returns (uint amountB) {
        return UniswapV2Library.quote(amountA, reserveA, reserveB);
    }

    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut)
        public
        pure
        virtual
        override
        returns (uint amountOut)
    {
        return UniswapV2Library.getAmountOut(amountIn, reserveIn, reserveOut);
    }

    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut)
        public
        pure
        virtual
        override
        returns (uint amountIn)
    {
        return UniswapV2Library.getAmountIn(amountOut, reserveIn, reserveOut);
    }

    function getAmountsOut(uint amountIn, address[] memory path)
        public
        view
        virtual
        override
        returns (uint[] memory amounts)
    {
        return UniswapV2Library.getAmountsOut(factory, amountIn, path);
    }

    function getAmountsIn(uint amountOut, address[] memory path)
        public
        view
        virtual
        override
        returns (uint[] memory amounts)
    {
        return UniswapV2Library.getAmountsIn(factory, amountOut, path);
    }
}

File 2 of 10 : UniswapV2Library.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity 0.6.12;

import '../interfaces/IUniswapV2Pair.sol';

import "./SafeMath.sol";

library UniswapV2Library {
    using SafeMathUniswap for uint;

    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
        require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'UniswapV2Library: ZERO_ADDRESS');
    }

    // calculates the CREATE2 address for a pair without making any external calls
    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {
        (address token0, address token1) = sortTokens(tokenA, tokenB);
        pair = address(uint(keccak256(abi.encodePacked(
                hex'ff',
                factory,
                keccak256(abi.encodePacked(token0, token1)),
                hex'b8e4be4952d944618a3bb790422efbc7c5db90b3540efa005bc8c5c9410ac1ce' // init code hash
            ))));
    }

    // fetches and sorts the reserves for a pair
    function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) {
        (address token0,) = sortTokens(tokenA, tokenB);
        (uint reserve0, uint reserve1,) = IUniswapV2Pair(pairFor(factory, tokenA, tokenB)).getReserves();
        (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
    }

    // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset
    function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) {
        require(amountA > 0, 'UniswapV2Library: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');
        amountB = amountA.mul(reserveB) / reserveA;
    }

    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {
        require(amountIn > 0, 'UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(970);
        uint numerator = amountInWithFee.mul(reserveOut);
        uint denominator = reserveIn.mul(1000).add(amountInWithFee);
        amountOut = numerator / denominator;
    }

    // given an output amount of an asset and pair reserves, returns a required input amount of the other asset
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) {
        require(amountOut > 0, 'UniswapV2Library: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');
        uint numerator = reserveIn.mul(amountOut).mul(1000);
        uint denominator = reserveOut.sub(amountOut).mul(970);
        amountIn = (numerator / denominator).add(1);
    }

    // performs chained getAmountOut calculations on any number of pairs
    function getAmountsOut(address factory, uint amountIn, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'UniswapV2Library: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[0] = amountIn;
        for (uint i; i < path.length - 1; i++) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i], path[i + 1]);
            amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut);
        }
    }

    // performs chained getAmountIn calculations on any number of pairs
    function getAmountsIn(address factory, uint amountOut, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'UniswapV2Library: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[amounts.length - 1] = amountOut;
        for (uint i = path.length - 1; i > 0; i--) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i]);
            amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut);
        }
    }
}

File 3 of 10 : SafeMath.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.6.6;

// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)

library SafeMathUniswap {
    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x, 'ds-math-add-overflow');
    }

    function sub(uint x, uint y) internal pure returns (uint z) {
        require((z = x - y) <= x, 'ds-math-sub-underflow');
    }

    function mul(uint x, uint y) internal pure returns (uint z) {
        require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');
    }
}

File 4 of 10 : TransferHelper.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.6.0;

// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
    function safeApprove(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED');
    }

    function safeTransfer(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
    }

    function safeTransferFrom(address token, address from, address to, uint value) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
    }

    function safeTransferETH(address to, uint value) internal {
        (bool success,) = to.call{value:value}(new bytes(0));
        require(success, 'TransferHelper: ETH_TRANSFER_FAILED');
    }
}

File 5 of 10 : IUniswapV2Router02.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.6.2;

import './IUniswapV2Router01.sol';

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

File 6 of 10 : IUniswapV2Factory.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function migrator() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
    function setMigrator(address) external;
}

File 7 of 10 : IERC20.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.5.0;

interface IERC20Uniswap {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
}

File 8 of 10 : IWETH.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.5.0;

interface IWETH {
    function deposit() external payable;
    function transfer(address to, uint value) external returns (bool);
    function withdraw(uint) external;
}

File 9 of 10 : IUniswapV2Pair.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

File 10 of 10 : IUniswapV2Router01.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 999999
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  },
  "libraries": {}
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405234801561001057600080fd5b506040516200439b3803806200439b8339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c61427562000126600039806101805280610c255280610c605280610d9d528061106052806114ba528061169e5280611bb45280611cf35280611e015280611fe2528061208952806121575280612571525080610e8f5280610f8d5280611133528061116c528061131752806115ac528061167c52806118695280611f18528061226452806124f6528061251f528061254f528061272c5280613126528061316952806134b3528061367e5280613ba15280613c8e5280613d6852506142756000f3fe6080604052600436106101635760003560e01c806385f8c259116100c0578063baa2abde11610074578063d06ca61f11610059578063d06ca61f146109e8578063ded9382a14610a9f578063e8e3370014610b1f576101a9565b8063baa2abde14610969578063c45a0155146109d3576101a9565b8063ad5c4648116100a5578063ad5c464814610895578063ad615dec146108d3578063af2979eb14610909576101a9565b806385f8c259146107ba5780638803dbee146107f0576101a9565b806338ed1739116101175780635b0d5984116100fc5780635b0d5984146105f05780635c11d79514610670578063791ac94714610715576101a9565b806338ed1739146104a65780634a25d94a1461054b576101a9565b806318cbafe51161014857806318cbafe51461026f5780631f00ca74146103645780632195995c1461041b576101a9565b806302751cec146101ae578063054d50d414610227576101a9565b366101a9573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101a757fe5b005b600080fd5b3480156101ba57600080fd5b5061020e600480360360c08110156101d157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135610bac565b6040805192835260208301919091528051918290030190f35b34801561023357600080fd5b5061025d6004803603606081101561024a57600080fd5b5080359060208101359060400135610cff565b60408051918252519081900360200190f35b34801561027b57600080fd5b50610314600480360360a081101561029257600080fd5b8135916020810135918101906060810160408201356401000000008111156102b957600080fd5b8201836020820111156102cb57600080fd5b803590602001918460208302840111640100000000831117156102ed57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135610d14565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610350578181015183820152602001610338565b505050509050019250505060405180910390f35b34801561037057600080fd5b506103146004803603604081101561038757600080fd5b813591908101906040810160208201356401000000008111156103a957600080fd5b8201836020820111156103bb57600080fd5b803590602001918460208302840111640100000000831117156103dd57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061112c945050505050565b34801561042757600080fd5b5061020e600480360361016081101561043f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611162565b3480156104b257600080fd5b50610314600480360360a08110156104c957600080fd5b8135916020810135918101906060810160408201356401000000008111156104f057600080fd5b82018360208201111561050257600080fd5b8035906020019184602083028401116401000000008311171561052457600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356112a0565b34801561055757600080fd5b50610314600480360360a081101561056e57600080fd5b81359160208101359181019060608101604082013564010000000081111561059557600080fd5b8201836020820111156105a757600080fd5b803590602001918460208302840111640100000000831117156105c957600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611431565b3480156105fc57600080fd5b5061025d600480360361014081101561061457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611674565b34801561067c57600080fd5b506101a7600480360360a081101561069357600080fd5b8135916020810135918101906060810160408201356401000000008111156106ba57600080fd5b8201836020820111156106cc57600080fd5b803590602001918460208302840111640100000000831117156106ee57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356117c6565b34801561072157600080fd5b506101a7600480360360a081101561073857600080fd5b81359160208101359181019060608101604082013564010000000081111561075f57600080fd5b82018360208201111561077157600080fd5b8035906020019184602083028401116401000000008311171561079357600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611b2d565b3480156107c657600080fd5b5061025d600480360360608110156107dd57600080fd5b5080359060208101359060400135611e94565b3480156107fc57600080fd5b50610314600480360360a081101561081357600080fd5b81359160208101359181019060608101604082013564010000000081111561083a57600080fd5b82018360208201111561084c57600080fd5b8035906020019184602083028401116401000000008311171561086e57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611ea1565b3480156108a157600080fd5b506108aa611fe0565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156108df57600080fd5b5061025d600480360360608110156108f657600080fd5b5080359060208101359060400135612004565b34801561091557600080fd5b5061025d600480360360c081101561092c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135612011565b34801561097557600080fd5b5061020e600480360360e081101561098c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356121ea565b3480156109df57600080fd5b506108aa6124f4565b3480156109f457600080fd5b5061031460048036036040811015610a0b57600080fd5b81359190810190604081016020820135640100000000811115610a2d57600080fd5b820183602082011115610a3f57600080fd5b80359060200191846020830284011164010000000083111715610a6157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612518945050505050565b348015610aab57600080fd5b5061020e6004803603610140811015610ac357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612545565b348015610b2b57600080fd5b50610b8e6004803603610100811015610b4357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e0013561269d565b60408051938452602084019290925282820152519081900360600190f35b6000808242811015610c1f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b610c4e897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6121ea565b9093509150610c5e898685612816565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610cd157600080fd5b505af1158015610ce5573d6000803e3d6000fd5b50505050610cf385836129f3565b50965096945050505050565b6000610d0c848484612b30565b949350505050565b60608142811015610d8657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110610deb57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e8a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b610ee87f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612c3c92505050565b91508682600184510381518110610efb57fe5b60200260200101511015610f5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806141c6602b913960400191505060405180910390fd5b61101f86866000818110610f6a57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16336110057f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fb957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b6001818110610fe357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16612da2565b8560008151811061101257fe5b6020026020010151612e8d565b61105e8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061305d915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836001855103815181106110aa57fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110e857600080fd5b505af11580156110fc573d6000803e3d6000fd5b50505050611121848360018551038151811061111457fe5b60200260200101516129f3565b509695505050505050565b60606111597f000000000000000000000000000000000000000000000000000000000000000084846132ce565b90505b92915050565b60008060006111927f00000000000000000000000000000000000000000000000000000000000000008f8f612da2565b90506000876111a1578c6111c3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561125f57600080fd5b505af1158015611273573d6000803e3d6000fd5b505050506112868f8f8f8f8f8f8f6121ea565b809450819550505050509b509b9950505050505050505050565b6060814281101561131257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b6113707f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612c3c92505050565b9150868260018451038151811061138357fe5b602002602001015110156113e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806141c6602b913960400191505060405180910390fd5b6113f286866000818110610f6a57fe5b6111218287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061305d915050565b606081428110156114a357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061150857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115a757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b6116057f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506132ce92505050565b9150868260008151811061161557fe5b60200260200101511115610f5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806141566027913960400191505060405180910390fd5b6000806116c27f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000612da2565b90506000866116d1578b6116f3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c48101879052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561178f57600080fd5b505af11580156117a3573d6000803e3d6000fd5b505050506117b58d8d8d8d8d8d612011565b9d9c50505050505050505050505050565b804281101561183657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b6118c58585600081811061184657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16336118bf7f00000000000000000000000000000000000000000000000000000000000000008989600081811061189557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a6001818110610fe357fe5b8a612e8d565b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181106118f557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561197857600080fd5b505afa15801561198c573d6000803e3d6000fd5b505050506040513d60208110156119a257600080fd5b505160408051602088810282810182019093528882529293506119e492909189918991829185019084908082843760009201919091525088925061345c915050565b86611acc8288887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611a1757fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611a9a57600080fd5b505afa158015611aae573d6000803e3d6000fd5b505050506040513d6020811015611ac457600080fd5b5051906137d9565b1015611b23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806141c6602b913960400191505060405180910390fd5b5050505050505050565b8042811015611b9d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001685857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611c0257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ca157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b611cb18585600081811061184657fe5b611cef85858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061345c915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611d7857600080fd5b505afa158015611d8c573d6000803e3d6000fd5b505050506040513d6020811015611da257600080fd5b5051905086811015611dff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806141c6602b913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611e7257600080fd5b505af1158015611e86573d6000803e3d6000fd5b50505050611b2384826129f3565b6000610d0c84848461384b565b60608142811015611f1357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b611f717f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506132ce92505050565b91508682600081518110611f8157fe5b602002602001015111156113e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806141566027913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610d0c848484613957565b6000814281101561208357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b6120b2887f000000000000000000000000000000000000000000000000000000000000000089898930896121ea565b90508092505061215588858a73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561212457600080fd5b505afa158015612138573d6000803e3d6000fd5b505050506040513d602081101561214e57600080fd5b5051612816565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156121c857600080fd5b505af11580156121dc573d6000803e3d6000fd5b5050505061112184836129f3565b600080824281101561225d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b600061228a7f00000000000000000000000000000000000000000000000000000000000000008c8c612da2565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561230b57600080fd5b505af115801561231f573d6000803e3d6000fd5b505050506040513d602081101561233557600080fd5b5050604080517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156123a857600080fd5b505af11580156123bc573d6000803e3d6000fd5b505050506040513d60408110156123d257600080fd5b508051602090910151909250905060006123ec8e8e613a31565b5090508073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff161461242957818361242c565b82825b90975095508a87101561248a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061417d6026913960400191505060405180910390fd5b898610156124e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806140e36026913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111597f00000000000000000000000000000000000000000000000000000000000000008484612c3c565b60008060006125957f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000612da2565b90506000876125a4578c6125c6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561266257600080fd5b505af1158015612676573d6000803e3d6000fd5b505050506126888e8e8e8e8e8e610bac565b909f909e509c50505050505050505050505050565b6000806000834281101561271257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b6127208c8c8c8c8c8c613b84565b909450925060006127527f00000000000000000000000000000000000000000000000000000000000000008e8e612da2565b90506127608d338388612e8d565b61276c8c338387612e8d565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156127d557600080fd5b505af11580156127e9573d6000803e3d6000fd5b505050506040513d60208110156127ff57600080fd5b5051949d939c50939a509198505050505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b602083106128ec57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016128af565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461294e576040519150601f19603f3d011682016040523d82523d6000602084013e612953565b606091505b5091509150818015612981575080511580612981575080806020019051602081101561297e57600080fd5b50515b6129ec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310612a6a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612a2d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612acc576040519150601f19603f3d011682016040523d82523d6000602084013e612ad1565b606091505b5050905080612b2b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806141a36023913960400191505060405180910390fd5b505050565b6000808411612b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180614215602b913960400191505060405180910390fd5b600083118015612b9a5750600082115b612bef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806141096028913960400191505060405180910390fd5b6000612bfd856103ca613eb1565b90506000612c0b8285613eb1565b90506000612c2583612c1f886103e8613eb1565b90613f37565b9050808281612c3057fe5b04979650505050505050565b6060600282511015612caf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff81118015612cc757600080fd5b50604051908082528060200260200182016040528015612cf1578160200160208202803683370190505b5090508281600081518110612d0257fe5b60200260200101818152505060005b6001835103811015612d9a57600080612d5487868581518110612d3057fe5b6020026020010151878660010181518110612d4757fe5b6020026020010151613fa9565b91509150612d76848481518110612d6757fe5b60200260200101518383612b30565b848460010181518110612d8557fe5b60209081029190910101525050600101612d11565b509392505050565b6000806000612db18585613a31565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527fb8e4be4952d944618a3bb790422efbc7c5db90b3540efa005bc8c5c9410ac1ce609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b60208310612f6b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612f2e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612fcd576040519150601f19603f3d011682016040523d82523d6000602084013e612fd2565b606091505b50915091508180156130005750805115806130005750808060200190516020811015612ffd57600080fd5b50515b613055576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806141f16024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156132c85760008084838151811061307b57fe5b602002602001015185846001018151811061309257fe5b60200260200101519150915060006130aa8383613a31565b50905060008785600101815181106130be57fe5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146131065782600061310a565b6000835b91509150600060028a510388106131215788613162565b6131627f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061315557fe5b6020026020010151612da2565b905061318f7f00000000000000000000000000000000000000000000000000000000000000008888612da2565b73ffffffffffffffffffffffffffffffffffffffff1663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156131d9576020820181803683370190505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561324e578181015183820152602001613236565b50505050905090810190601f16801561327b5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561329d57600080fd5b505af11580156132b1573d6000803e3d6000fd5b505060019099019850613060975050505050505050565b50505050565b606060028251101561334157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561335957600080fd5b50604051908082528060200260200182016040528015613383578160200160208202803683370190505b509050828160018351038151811061339757fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b8015612d9a576000806133f7878660018603815181106133e357fe5b6020026020010151878681518110612d4757fe5b9150915061341984848151811061340a57fe5b6020026020010151838361384b565b84600185038151811061342857fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016133c7565b60005b6001835103811015612b2b5760008084838151811061347a57fe5b602002602001015185846001018151811061349157fe5b60200260200101519150915060006134a98383613a31565b50905060006134d97f00000000000000000000000000000000000000000000000000000000000000008585612da2565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561352757600080fd5b505afa15801561353b573d6000803e3d6000fd5b505050506040513d606081101561355157600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905060008073ffffffffffffffffffffffffffffffffffffffff8a81169089161461359b57828461359e565b83835b9150915061360d828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611a9a57600080fd5b955061361a868383612b30565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461365e57826000613662565b6000835b91509150600060028c51038a10613679578a6136ad565b6136ad7f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061315557fe5b60408051600080825260208201928390527f022c0d9f000000000000000000000000000000000000000000000000000000008352602482018781526044830187905273ffffffffffffffffffffffffffffffffffffffff8086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b8381101561375d578181015183820152602001613745565b50505050905090810190601f16801561378a5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156137ac57600080fd5b505af11580156137c0573d6000803e3d6000fd5b50506001909b019a5061345f9950505050505050505050565b8082038281111561115c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b60008084116138a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614092602c913960400191505060405180910390fd5b6000831180156138b55750600082115b61390a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806141096028913960400191505060405180910390fd5b60006139226103e861391c8688613eb1565b90613eb1565b905060006139366103ca61391c86896137d9565b905061394d600182848161394657fe5b0490613f37565b9695505050505050565b60008084116139b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806141316025913960400191505060405180910390fd5b6000831180156139c15750600082115b613a16576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806141096028913960400191505060405180910390fd5b82613a218584613eb1565b81613a2857fe5b04949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613ab9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806140be6025913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610613af3578284613af6565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216613b7d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b600080600073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e6a439058a8a6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015613c4457600080fd5b505afa158015613c58573d6000803e3d6000fd5b505050506040513d6020811015613c6e57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff161415613d60577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c9c6539689896040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015613d3357600080fd5b505af1158015613d47573d6000803e3d6000fd5b505050506040513d6020811015613d5d57600080fd5b50505b600080613d8e7f00000000000000000000000000000000000000000000000000000000000000008b8b613fa9565b91509150816000148015613da0575080155b15613db057879350869250613ea4565b6000613dbd898484613957565b9050878111613e2a5785811015613e1f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806140e36026913960400191505060405180910390fd5b889450925082613ea2565b6000613e37898486613957565b905089811115613e4357fe5b87811015613e9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061417d6026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6000811580613ecc57505080820282828281613ec957fe5b04145b61115c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b8082018281101561115c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b6000806000613fb88585613a31565b509050600080613fc9888888612da2565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561400e57600080fd5b505afa158015614022573d6000803e3d6000fd5b505050506040513d606081101561403857600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff8781169084161461407f578082614082565b81815b9099909850965050505050505056fe556e697377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056324c6962726172793a204944454e544943414c5f414444524553534553556e69737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e54556e697377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459556e697377617056324c6962726172793a20494e53554646494349454e545f414d4f554e54556e69737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54556e69737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544556e69737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544556e697377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54a264697066735822122049320fea17d7bd1ee7b690b574517243618c2cf76fe886b54c9b0dacc846197164736f6c634300060c0033000000000000000000000000015e379ce0ff195228b3a9ebdfa13f9afc155dd7000000000000000000000000539bde0d7dbd336b79148aa742883198bbf60342

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000015e379ce0ff195228b3a9ebdfa13f9afc155dd7000000000000000000000000539bde0d7dbd336b79148aa742883198bbf60342

-----Decoded View---------------
Arg [0] : _factory (address): 0x015e379ce0ff195228b3a9ebdfa13f9afc155dd7
Arg [1] : _WETH (address): 0x539bde0d7dbd336b79148aa742883198bbf60342

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000015e379ce0ff195228b3a9ebdfa13f9afc155dd7
Arg [1] : 000000000000000000000000539bde0d7dbd336b79148aa742883198bbf60342


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.