Contract 0x1b02da8cb0d097eb8d57a175b88c7d8b47997506 21

Contract Overview

SushiSwap: Router
Balance:
0 MOVR

MOVR Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x0c6bfa827c6f28fe8d1260056dfc62d7ef6492e2b24eba19f61ae48f4230b185Swap Exact Token...43429492023-05-29 10:50:121 hr 53 mins ago0x1d3286a3348fa99852d147c57a79045b41c4f713 IN  SushiSwap: Router0 MOVR0.00035969679
0xe4ad699600861a25d34ce4779a2fce9f8f1befcbc1ff5d31519f451430bf0358Swap Exact Token...43429402023-05-29 10:48:181 hr 54 mins ago0x1d3286a3348fa99852d147c57a79045b41c4f713 IN  SushiSwap: Router0 MOVR0.00011495323
0x5ff42326889799c67d38862d13a7b84d0bfce349b82db1b8e6d9969ff429fd61Swap Exact Token...43429382023-05-29 10:47:541 hr 55 mins ago0x1d3286a3348fa99852d147c57a79045b41c4f713 IN  SushiSwap: Router0 MOVR0.00035969679
0x4287a4ae0b16502aa39d1128a8399a21a26d1b4030dc75755776d570c714bb11Swap Exact Token...43426662023-05-29 9:51:542 hrs 51 mins ago0xd290a062c19ea6a98de3b467d0b25848d7fa6e6e IN  SushiSwap: Router0 MOVR0.00031188575
0x75b1f9e787d5b809e04219b31c9756f9cbd27f2bed67e26c8c88e63529dfec61Swap Exact Token...43426582023-05-29 9:50:182 hrs 52 mins ago0xd290a062c19ea6a98de3b467d0b25848d7fa6e6e IN  SushiSwap: Router0 MOVR0.00045534775
0x8e2064d33fb21ec7f1e59e531cf60cc43eac58d19cd47acda04f643861221475Swap Exact Token...43426502023-05-29 9:48:422 hrs 54 mins ago0xd290a062c19ea6a98de3b467d0b25848d7fa6e6e IN  SushiSwap: Router0 MOVR0.000311465
0x286581a9b47c38f5cfd9728a9429c0b292ee06edf9dc851caf6d9e7a1b99231bSwap Exact Token...43410682023-05-29 4:25:488 hrs 17 mins ago0x87781e085a81277db1152bc9ba3de646dd4da997 IN  SushiSwap: Router0 MOVR0.00057069925
0x97fcdaf66c6004f0a63245133893b102772e1ed6e93d463c19e4f511de546304Swap Exact Token...43410602023-05-29 4:24:128 hrs 19 mins ago0x1026df41a10bb5057d4f08261d907893f2d5f78b IN  SushiSwap: Router0 MOVR0.000136348257
0x8102ed5152772b8e6c1c95050d6ec2e1bc83e54293f0e39be32875577a3a0b7eSwap Exact Token...43409992023-05-29 4:11:488 hrs 31 mins ago0x1026df41a10bb5057d4f08261d907893f2d5f78b IN  SushiSwap: Router0 MOVR0.000136348257
0x0ebae45fbcd72f464b24506d70e2da5347ce263bda15ac63b288056fc76b0327Swap Exact Token...43406962023-05-29 3:10:309 hrs 32 mins ago0x1026df41a10bb5057d4f08261d907893f2d5f78b IN  SushiSwap: Router0 MOVR0.000136348257
0x882e8e4efe02c79bedaf8d12bb4876a5b38afd777740d0bddf5c787f6f342dbfSwap Exact Token...43404412023-05-29 2:18:4210 hrs 24 mins ago0x1d3286a3348fa99852d147c57a79045b41c4f713 IN  SushiSwap: Router0 MOVR0.00011495323
0x65269880482f1d604e017fe9959a0c13e11e1ab9d01eeac94adc726f9699e475Swap Exact Token...43404402023-05-29 2:18:3010 hrs 24 mins ago0x1d3286a3348fa99852d147c57a79045b41c4f713 IN  SushiSwap: Router0 MOVR0.00035969679
0x84b6b86eae06aab9ca994edcbeccd0b917c7ea59f5935b2fcdabd39b6d2efa07Swap Exact Token...43402752023-05-29 1:45:1810 hrs 57 mins ago0x1026df41a10bb5057d4f08261d907893f2d5f78b IN  SushiSwap: Router0 MOVR0.000136348257
0xd01345deb957cb8917407c8401c3c5b61424d464fcbe2a0ea08e9037f22562feSwap Exact Token...43400772023-05-29 1:04:3011 hrs 38 mins ago0x1d3286a3348fa99852d147c57a79045b41c4f713 IN  SushiSwap: Router0 MOVR0.00035969679
0x342578c1ef59725ea0850a9106a5a55dbee2aebeda24100deb48d419b58917c0Swap Exact Token...43400662023-05-29 1:02:1211 hrs 41 mins ago0x1d3286a3348fa99852d147c57a79045b41c4f713 IN  SushiSwap: Router0 MOVR0.00035969679
0xc40f21a9944932993cd994367b3522711efcc2f28a5aa1f7cb3875bf8e0b1ba9Swap Exact Token...43400462023-05-29 0:58:1211 hrs 45 mins ago0x1d3286a3348fa99852d147c57a79045b41c4f713 IN  SushiSwap: Router0 MOVR0.00035978343
0xf10edf90ef48787d459ae8cf6af64a41d3c6a95f0786cc2451e5b7fa0449dab9Swap Exact Token...43398802023-05-29 0:24:1212 hrs 19 mins ago0x1d3286a3348fa99852d147c57a79045b41c4f713 IN  SushiSwap: Router0 MOVR0.00035870765
0x211d4a1285208f292176d04ee14503a3c32157f1ab8d5c4c81720fb34db6ef03Swap Exact Token...43397102023-05-28 23:49:5412 hrs 53 mins ago0x1d3286a3348fa99852d147c57a79045b41c4f713 IN  SushiSwap: Router0 MOVR0.00035875097
0xf910cb569198a8a0795008bbbbd57ae45253ac3a60383b6b7d8e7e0cf9825736Swap Exact Token...43392042023-05-28 22:06:4214 hrs 36 mins ago0x1d3286a3348fa99852d147c57a79045b41c4f713 IN  SushiSwap: Router0 MOVR0.00035969679
0xda1b9fca18376d894d7387a9a77c45c8c62c0a32410cfef5b88661b2d679ea37Swap Exact Token...43391862023-05-28 22:02:5414 hrs 40 mins ago0x1026df41a10bb5057d4f08261d907893f2d5f78b IN  SushiSwap: Router0 MOVR0.000122829458
0x179407b3f668f207f6e8ec7200b2fd43700974c46cdfb668160461fa89e71b36Swap Exact Token...43391862023-05-28 22:02:5414 hrs 40 mins ago0x1d3286a3348fa99852d147c57a79045b41c4f713 IN  SushiSwap: Router0 MOVR0.00011506153
0x1bccc38dd330d8841b2db040bbb13af0f81acad4c315b093502e26002bcab485Swap Exact Token...43391852023-05-28 22:02:4214 hrs 40 mins ago0x1026df41a10bb5057d4f08261d907893f2d5f78b IN  SushiSwap: Router0 MOVR0.000188209813
0xd32f0340ca075d9a4933e3b1c0cd255e265718490aecaa66d6ddc11e27a64f31Swap Exact Token...43391852023-05-28 22:02:4214 hrs 40 mins ago0x1d3286a3348fa99852d147c57a79045b41c4f713 IN  SushiSwap: Router0 MOVR0.00035883761
0xcc19dc3fbfba7fc3f1b325b9985c20e4ad86c2556a37a7984c32b52a75e79290Swap Exact Token...43391822023-05-28 22:02:0614 hrs 41 mins ago0x1026df41a10bb5057d4f08261d907893f2d5f78b IN  SushiSwap: Router0 MOVR0.000122829458
0x14195ceb78bb055ea3d0a4f0ad86f0156e6005140f7235148550db6407dbd0d7Swap Exact Token...43391822023-05-28 22:02:0614 hrs 41 mins ago0x1d3286a3348fa99852d147c57a79045b41c4f713 IN  SushiSwap: Router0 MOVR0.00035875097
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x406185180ffa3f63b60753c98f3586c731dd44704e4541749018b9d1f304b8d243433702023-05-29 12:15:1827 mins ago SushiSwap: Router 0xf50225a84382c74cbdea10b0c176f71fc3de0c4d0.002226707332203917 MOVR
0x406185180ffa3f63b60753c98f3586c731dd44704e4541749018b9d1f304b8d243433702023-05-29 12:15:1827 mins ago MoonRover: $ROVR Token SushiSwap: Router0.002226707332203917 MOVR
0x406185180ffa3f63b60753c98f3586c731dd44704e4541749018b9d1f304b8d243433702023-05-29 12:15:1827 mins ago SushiSwap: Router MoonRover: $ROVR Token0.002226707332203917 MOVR
0x406185180ffa3f63b60753c98f3586c731dd44704e4541749018b9d1f304b8d243433702023-05-29 12:15:1827 mins ago 0xf50225a84382c74cbdea10b0c176f71fc3de0c4d SushiSwap: Router0.002226707332203917 MOVR
0x18c069421552e4ec900df7fc00b96780ac9517af1bbec46b7e4744afa583e42343431922023-05-29 11:39:241 hr 3 mins ago SushiSwap: Router MoonRover: $ROVR Token0.001822610755232428 MOVR
0x18c069421552e4ec900df7fc00b96780ac9517af1bbec46b7e4744afa583e42343431922023-05-29 11:39:241 hr 3 mins ago SushiSwap: Router 0xf50225a84382c74cbdea10b0c176f71fc3de0c4d0.002233376579483083 MOVR
0x18c069421552e4ec900df7fc00b96780ac9517af1bbec46b7e4744afa583e42343431922023-05-29 11:39:241 hr 3 mins ago MoonRover: $ROVR Token SushiSwap: Router0.004055987334715511 MOVR
0x18c069421552e4ec900df7fc00b96780ac9517af1bbec46b7e4744afa583e42343431922023-05-29 11:39:241 hr 3 mins ago SushiSwap: Router MoonRover: $ROVR Token0.004055987334715511 MOVR
0x18c069421552e4ec900df7fc00b96780ac9517af1bbec46b7e4744afa583e42343431922023-05-29 11:39:241 hr 3 mins ago 0xf50225a84382c74cbdea10b0c176f71fc3de0c4d SushiSwap: Router0.004055987334715511 MOVR
0xeb79c0f26c35cffe94c6b00673e49711904f5c6634ea2d400ccb6a414389006f43431732023-05-29 11:35:301 hr 7 mins ago SushiSwap: Router 0xf50225a84382c74cbdea10b0c176f71fc3de0c4d0.002226769005213835 MOVR
0xeb79c0f26c35cffe94c6b00673e49711904f5c6634ea2d400ccb6a414389006f43431732023-05-29 11:35:301 hr 7 mins ago MoonRover: $ROVR Token SushiSwap: Router0.002226769005213835 MOVR
0xeb79c0f26c35cffe94c6b00673e49711904f5c6634ea2d400ccb6a414389006f43431732023-05-29 11:35:301 hr 7 mins ago SushiSwap: Router MoonRover: $ROVR Token0.002226769005213835 MOVR
0xeb79c0f26c35cffe94c6b00673e49711904f5c6634ea2d400ccb6a414389006f43431732023-05-29 11:35:301 hr 7 mins ago 0xf50225a84382c74cbdea10b0c176f71fc3de0c4d SushiSwap: Router0.002226769005213835 MOVR
0xeb79c0f26c35cffe94c6b00673e49711904f5c6634ea2d400ccb6a414389006f43431732023-05-29 11:35:301 hr 7 mins ago SushiSwap: Router 0xf50225a84382c74cbdea10b0c176f71fc3de0c4d0.002226830681640168 MOVR
0xeb79c0f26c35cffe94c6b00673e49711904f5c6634ea2d400ccb6a414389006f43431732023-05-29 11:35:301 hr 7 mins ago MoonRover: $ROVR Token SushiSwap: Router0.002226830681640168 MOVR
0xeb79c0f26c35cffe94c6b00673e49711904f5c6634ea2d400ccb6a414389006f43431732023-05-29 11:35:301 hr 7 mins ago SushiSwap: Router MoonRover: $ROVR Token0.002226830681640168 MOVR
0xeb79c0f26c35cffe94c6b00673e49711904f5c6634ea2d400ccb6a414389006f43431732023-05-29 11:35:301 hr 7 mins ago 0xf50225a84382c74cbdea10b0c176f71fc3de0c4d SushiSwap: Router0.002226830681640168 MOVR
0x4287a4ae0b16502aa39d1128a8399a21a26d1b4030dc75755776d570c714bb1143426662023-05-29 9:51:542 hrs 51 mins ago SushiSwap: Router0xd290a062c19ea6a98de3b467d0b25848d7fa6e6e0.524711866371400115 MOVR
0x4287a4ae0b16502aa39d1128a8399a21a26d1b4030dc75755776d570c714bb1143426662023-05-29 9:51:542 hrs 51 mins ago 0xf50225a84382c74cbdea10b0c176f71fc3de0c4d SushiSwap: Router0.524711866371400115 MOVR
0x75b1f9e787d5b809e04219b31c9756f9cbd27f2bed67e26c8c88e63529dfec6143426582023-05-29 9:50:182 hrs 52 mins ago SushiSwap: Router0xd290a062c19ea6a98de3b467d0b25848d7fa6e6e0.102777082014790946 MOVR
0x75b1f9e787d5b809e04219b31c9756f9cbd27f2bed67e26c8c88e63529dfec6143426582023-05-29 9:50:182 hrs 52 mins ago 0xf50225a84382c74cbdea10b0c176f71fc3de0c4d SushiSwap: Router0.102777082014790946 MOVR
0x8e2064d33fb21ec7f1e59e531cf60cc43eac58d19cd47acda04f64386122147543426502023-05-29 9:48:422 hrs 54 mins ago SushiSwap: Router0xd290a062c19ea6a98de3b467d0b25848d7fa6e6e0.11879351484296549 MOVR
0x8e2064d33fb21ec7f1e59e531cf60cc43eac58d19cd47acda04f64386122147543426502023-05-29 9:48:422 hrs 54 mins ago 0xf50225a84382c74cbdea10b0c176f71fc3de0c4d SushiSwap: Router0.11879351484296549 MOVR
0x164bcd50c581261df56dcad68b753d8dd8ac674ae25325e97d9bb9186a66585e43382852023-05-28 19:00:3017 hrs 42 mins ago SushiSwap: Router 0xf50225a84382c74cbdea10b0c176f71fc3de0c4d0.002226892361483201 MOVR
0x164bcd50c581261df56dcad68b753d8dd8ac674ae25325e97d9bb9186a66585e43382852023-05-28 19:00:3017 hrs 42 mins ago MoonRover: $ROVR Token SushiSwap: Router0.002226892361483201 MOVR
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
UniswapV2Router02

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at moonriver.moonscan.io on 2021-11-18
*/

/**
 *Submitted for verification at Etherscan.io on 2020-09-04
*/

// File: contracts/uniswapv2/interfaces/IUniswapV2Pair.sol

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: contracts/uniswapv2/libraries/SafeMath.sol

pragma solidity =0.6.12;

// 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: contracts/uniswapv2/libraries/UniswapV2Library.sol

pragma solidity >=0.5.0;



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'e18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303' // 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(997);
        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(997);
        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: contracts/uniswapv2/libraries/TransferHelper.sol

// SPDX-License-Identifier: GPL-3.0-or-later

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: contracts/uniswapv2/interfaces/IUniswapV2Router01.sol

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 addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, 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 swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        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 swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        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);
}

// File: contracts/uniswapv2/interfaces/IUniswapV2Router02.sol

pragma solidity >=0.6.2;


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 swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

// File: contracts/uniswapv2/interfaces/IUniswapV2Factory.sol

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: contracts/uniswapv2/interfaces/IERC20.sol

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: contracts/uniswapv2/interfaces/IWETH.sol

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: contracts/uniswapv2/UniswapV2Router02.sol

pragma solidity =0.6.12;








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);
    }
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) {
        (amountToken, amountETH) = _addLiquidity(
            token,
            WETH,
            amountTokenDesired,
            msg.value,
            amountTokenMin,
            amountETHMin
        );
        address pair = UniswapV2Library.pairFor(factory, token, WETH);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWETH(WETH).deposit{value: amountETH}();
        assert(IWETH(WETH).transfer(pair, amountETH));
        liquidity = IUniswapV2Pair(pair).mint(to);
        // refund dust eth, if any
        if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH);
    }

    // **** 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 swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WETH, 'UniswapV2Router: INVALID_PATH');
        amounts = UniswapV2Library.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(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]);
    }
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WETH, 'UniswapV2Router: INVALID_PATH');
        amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
        // refund dust eth, if any
        if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]);
    }

    // **** 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 swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WETH, 'UniswapV2Router: INVALID_PATH');
        uint amountIn = msg.value;
        IWETH(WETH).deposit{value: amountIn}();
        assert(IWETH(WETH).transfer(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);
    }
}

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":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","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":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","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":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"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":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"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":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","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"}]

60c060405234801561001057600080fd5b50604051620046e7380380620046e78339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c614562620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118d352806119ae5280611a885280611b565280611c9c5280611d245280611f605280611fdb528061208f528061215b52806121f05280612264528061274752806129b15280612a075280612a3b5280612aaf5280612c3d5280612d805280612e08525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611be95280611d565280611eb0528061229652806124d452806126cc52806126f55280612725528061289252806129e55280612cd05280612e3a52806136c0528061370352806139dd5280613b535280613f445280613ffd52806140b052506145626000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b038135169060200135611885565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b0e565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e58565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e65565b34801561088157600080fd5b5061088a611f5e565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f82565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611f8f565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b038135169060200135612115565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612486565b348015610a1c57600080fd5b5061088a6126ca565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506126ee945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561271b565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e0013561282f565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612962565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612bf5565b6000808242811015610cde576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612486565b9093509150610d1d898685612f6e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da585836130d8565b50965096945050505050565b6000610dbe8484846131d0565b949350505050565b60608142811015610e0c576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b815260206004820152601d602482015260008051602061442a833981519152604482015290519081900360640190fd5b610efd7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506132a892505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b815260040180806020018281038252602b815260200180614493602b913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b03166133f4565b85600081518110610fe657fe5b60200260200101516134b4565b61103282878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613611915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b60200260200101516130d8565b509695505050505050565b60606111207f0000000000000000000000000000000000000000000000000000000000000000848461384e565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f6133f4565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f612486565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6112c77f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506132a892505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b815260040180806020018281038252602b815260200180614493602b913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e882878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613611915050565b606081428110156113b4576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b815260206004820152601d602482015260008051602061442a833981519152604482015290519081900360640190fd5b6114a57f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061384e92505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b81526004018080602001828103825260278152602001806144036027913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006133f4565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611f8f565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a6134b4565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561172f57600080fd5b505afa158015611743573d6000803e3d6000fd5b505050506040513d602081101561175957600080fd5b5051604080516020888102828101820190935288825292935061179b929091899189918291850190849080828437600092019190915250889250613986915050565b8661183e82888860001981018181106117b057fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561180c57600080fd5b505afa158015611820573d6000803e3d6000fd5b505050506040513d602081101561183657600080fd5b505190613c88565b101561187b5760405162461bcd60e51b815260040180806020018281038252602b815260200180614493602b913960400191505060405180910390fd5b5050505050505050565b80428110156118c9576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061190357fe5b905060200201356001600160a01b03166001600160a01b03161461195c576040805162461bcd60e51b815260206004820152601d602482015260008051602061442a833981519152604482015290519081900360640190fd5b61196c8585600081811061165c57fe5b6119aa858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613986915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611a1957600080fd5b505afa158015611a2d573d6000803e3d6000fd5b505050506040513d6020811015611a4357600080fd5b5051905086811015611a865760405162461bcd60e51b815260040180806020018281038252602b815260200180614493602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aec57600080fd5b505af1158015611b00573d6000803e3d6000fd5b5050505061187b84826130d8565b60608142811015611b54576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b8b57fe5b905060200201356001600160a01b03166001600160a01b031614611be4576040805162461bcd60e51b815260206004820152601d602482015260008051602061442a833981519152604482015290519081900360640190fd5b611c427f0000000000000000000000000000000000000000000000000000000000000000348888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506132a892505050565b91508682600184510381518110611c5557fe5b60200260200101511015611c9a5760405162461bcd60e51b815260040180806020018281038252602b815260200180614493602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611cd657fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d0957600080fd5b505af1158015611d1d573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d827f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611d8f57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611ddd57600080fd5b505af1158015611df1573d6000803e3d6000fd5b505050506040513d6020811015611e0757600080fd5b5051611e0f57fe5b611e4e82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613611915050565b5095945050505050565b6000610dbe848484613cd8565b60608142811015611eab576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b611f097f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061384e92505050565b91508682600081518110611f1957fe5b6020026020010151111561131f5760405162461bcd60e51b81526004018080602001828103825260278152602001806144036027913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613db0565b60008142811015611fd5576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b612004887f00000000000000000000000000000000000000000000000000000000000000008989893089612486565b90508092505061208d88858a6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561205c57600080fd5b505afa158015612070573d6000803e3d6000fd5b505050506040513d602081101561208657600080fd5b5051612f6e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156120f357600080fd5b505af1158015612107573d6000803e3d6000fd5b505050506110e884836130d8565b8042811015612159576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168585600081811061219057fe5b905060200201356001600160a01b03166001600160a01b0316146121e9576040805162461bcd60e51b815260206004820152601d602482015260008051602061442a833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561224957600080fd5b505af115801561225d573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122c27f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561230957600080fd5b505af115801561231d573d6000803e3d6000fd5b505050506040513d602081101561233357600080fd5b505161233b57fe5b60008686600019810181811061234d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156123a957600080fd5b505afa1580156123bd573d6000803e3d6000fd5b505050506040513d60208110156123d357600080fd5b505160408051602089810282810182019093528982529293506124159290918a918a918291850190849080828437600092019190915250899250613986915050565b8761183e828989600019810181811061242a57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561180c57600080fd5b60008082428110156124cd576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b60006124fa7f00000000000000000000000000000000000000000000000000000000000000008c8c6133f4565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561255557600080fd5b505af1158015612569573d6000803e3d6000fd5b505050506040513d602081101561257f57600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125cc57600080fd5b505af11580156125e0573d6000803e3d6000fd5b505050506040513d60408110156125f657600080fd5b508051602090910151909250905060006126108e8e613e56565b509050806001600160a01b03168e6001600160a01b031614612633578183612636565b82825b90975095508a87101561267a5760405162461bcd60e51b815260040180806020018281038252602681526020018061444a6026913960400191505060405180910390fd5b898610156126b95760405162461bcd60e51b81526004018080602001828103825260268152602001806143906026913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846132a8565b600080600061276b7f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006133f4565b905060008761277a578c61277e565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156127f457600080fd5b505af1158015612808573d6000803e3d6000fd5b5050505061281a8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b60008060008342811015612878576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6128868c8c8c8c8c8c613f34565b909450925060006128b87f00000000000000000000000000000000000000000000000000000000000000008e8e6133f4565b90506128c68d3383886134b4565b6128d28c3383876134b4565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b15801561292157600080fd5b505af1158015612935573d6000803e3d6000fd5b505050506040513d602081101561294b57600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129ab576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6129d98a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613f34565b90945092506000612a2b7f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006133f4565b9050612a398b3383886134b4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a9457600080fd5b505af1158015612aa8573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b2457600080fd5b505af1158015612b38573d6000803e3d6000fd5b505050506040513d6020811015612b4e57600080fd5b5051612b5657fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b158015612ba557600080fd5b505af1158015612bb9573d6000803e3d6000fd5b505050506040513d6020811015612bcf57600080fd5b5051925034841015612be757612be7338534036130d8565b505096509650969350505050565b60608142811015612c3b576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612c7257fe5b905060200201356001600160a01b03166001600160a01b031614612ccb576040805162461bcd60e51b815260206004820152601d602482015260008051602061442a833981519152604482015290519081900360640190fd5b612d297f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061384e92505050565b91503482600081518110612d3957fe5b60200260200101511115612d7e5760405162461bcd60e51b81526004018080602001828103825260278152602001806144036027913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612dba57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612ded57600080fd5b505af1158015612e01573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612e667f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612e7357fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612ec157600080fd5b505af1158015612ed5573d6000803e3d6000fd5b505050506040513d6020811015612eeb57600080fd5b5051612ef357fe5b612f3282878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613611915050565b81600081518110612f3f57fe5b6020026020010151341115611e4e57611e4e3383600081518110612f5f57fe5b602002602001015134036130d8565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310612feb5780518252601f199092019160209182019101612fcc565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461304d576040519150601f19603f3d011682016040523d82523d6000602084013e613052565b606091505b5091509150818015613080575080511580613080575080806020019051602081101561307d57600080fd5b50515b6130d1576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106131245780518252601f199092019160209182019101613105565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613186576040519150601f19603f3d011682016040523d82523d6000602084013e61318b565b606091505b50509050806131cb5760405162461bcd60e51b81526004018080602001828103825260238152602001806144706023913960400191505060405180910390fd5b505050565b60008084116132105760405162461bcd60e51b815260040180806020018281038252602b8152602001806144e2602b913960400191505060405180910390fd5b6000831180156132205750600082115b61325b5760405162461bcd60e51b81526004018080602001828103825260288152602001806143b66028913960400191505060405180910390fd5b6000613269856103e56141c5565b9050600061327782856141c5565b905060006132918361328b886103e86141c5565b90614228565b905080828161329c57fe5b04979650505050505050565b6060600282511015613301576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561331957600080fd5b50604051908082528060200260200182016040528015613343578160200160208202803683370190505b509050828160008151811061335457fe5b60200260200101818152505060005b60018351038110156133ec576000806133a68786858151811061338257fe5b602002602001015187866001018151811061339957fe5b6020026020010151614277565b915091506133c88484815181106133b957fe5b602002602001015183836131d0565b8484600101815181106133d757fe5b60209081029190910101525050600101613363565b509392505050565b60008060006134038585613e56565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527fe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135395780518252601f19909201916020918201910161351a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461359b576040519150601f19603f3d011682016040523d82523d6000602084013e6135a0565b606091505b50915091508180156135ce5750805115806135ce57508080602001905160208110156135cb57600080fd5b50515b6136095760405162461bcd60e51b81526004018080602001828103825260248152602001806144be6024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138485760008084838151811061362f57fe5b602002602001015185846001018151811061364657fe5b602002602001015191509150600061365e8383613e56565b509050600087856001018151811061367257fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146136a0578260006136a4565b6000835b91509150600060028a510388106136bb57886136fc565b6136fc7f0000000000000000000000000000000000000000000000000000000000000000878c8b600201815181106136ef57fe5b60200260200101516133f4565b90506137297f000000000000000000000000000000000000000000000000000000000000000088886133f4565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613766576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156137ce5781810151838201526020016137b6565b50505050905090810190601f1680156137fb5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561381d57600080fd5b505af1158015613831573d6000803e3d6000fd5b505060019099019850613614975050505050505050565b50505050565b60606002825110156138a7576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff811180156138bf57600080fd5b506040519080825280602002602001820160405280156138e9578160200160208202803683370190505b50905082816001835103815181106138fd57fe5b60209081029190910101528151600019015b80156133ec5760008061393f8786600186038151811061392b57fe5b602002602001015187868151811061339957fe5b9150915061396184848151811061395257fe5b60200260200101518383613cd8565b84600185038151811061397057fe5b602090810291909101015250506000190161390f565b60005b60018351038110156131cb576000808483815181106139a457fe5b60200260200101518584600101815181106139bb57fe5b60200260200101519150915060006139d38383613e56565b5090506000613a037f000000000000000000000000000000000000000000000000000000000000000085856133f4565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613a4457600080fd5b505afa158015613a58573d6000803e3d6000fd5b505050506040513d6060811015613a6e57600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613aa4578284613aa7565b83835b91509150613afc828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561180c57600080fd5b9550613b098683836131d0565b945050505050600080856001600160a01b0316886001600160a01b031614613b3357826000613b37565b6000835b91509150600060028c51038a10613b4e578a613b82565b613b827f0000000000000000000000000000000000000000000000000000000000000000898e8d600201815181106136ef57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c0c578181015183820152602001613bf4565b50505050905090810190601f168015613c395780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613c5b57600080fd5b505af1158015613c6f573d6000803e3d6000fd5b50506001909b019a506139899950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d185760405162461bcd60e51b815260040180806020018281038252602c81526020018061433f602c913960400191505060405180910390fd5b600083118015613d285750600082115b613d635760405162461bcd60e51b81526004018080602001828103825260288152602001806143b66028913960400191505060405180910390fd5b6000613d7b6103e8613d7586886141c5565b906141c5565b90506000613d8f6103e5613d758689613c88565b9050613da66001828481613d9f57fe5b0490614228565b9695505050505050565b6000808411613df05760405162461bcd60e51b81526004018080602001828103825260258152602001806143de6025913960400191505060405180910390fd5b600083118015613e005750600082115b613e3b5760405162461bcd60e51b81526004018080602001828103825260288152602001806143b66028913960400191505060405180910390fd5b82613e4685846141c5565b81613e4d57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613eaa5760405162461bcd60e51b815260040180806020018281038252602581526020018061436b6025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613eca578284613ecd565b83835b90925090506001600160a01b038216613f2d576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b60008060006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e6a439058a8a6040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b158015613fc057600080fd5b505afa158015613fd4573d6000803e3d6000fd5b505050506040513d6020811015613fea57600080fd5b50516001600160a01b031614156140a8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c9c6539689896040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050602060405180830381600087803b15801561407b57600080fd5b505af115801561408f573d6000803e3d6000fd5b505050506040513d60208110156140a557600080fd5b50505b6000806140d67f00000000000000000000000000000000000000000000000000000000000000008b8b614277565b915091508160001480156140e8575080155b156140f8578793508692506141b8565b6000614105898484613db0565b9050878111614158578581101561414d5760405162461bcd60e51b81526004018080602001828103825260268152602001806143906026913960400191505060405180910390fd5b8894509250826141b6565b6000614165898486613db0565b90508981111561417157fe5b878110156141b05760405162461bcd60e51b815260040180806020018281038252602681526020018061444a6026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806141e0575050808202828282816141dd57fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006142868585613e56565b5090506000806142978888886133f4565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156142cf57600080fd5b505afa1580156142e3573d6000803e3d6000fd5b505050506040513d60608110156142f957600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b038781169084161461432c57808261432f565b81815b9099909850965050505050505056fe556e697377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056324c6962726172793a204944454e544943414c5f414444524553534553556e69737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e54556e697377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459556e697377617056324c6962726172793a20494e53554646494349454e545f414d4f554e54556e69737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54556e69737761705632526f757465723a20494e56414c49445f50415448000000556e69737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544556e69737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544556e697377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54556e69737761705632526f757465723a20455850495245440000000000000000a26469706673582212201046181566cf8a35bd60f7e94b82dcde5a31b9e46aa697f15b739ad658b7871164736f6c634300060c0033000000000000000000000000c35dadb65012ec5796536bd9864ed8773abc74c4000000000000000000000000f50225a84382c74cbdea10b0c176f71fc3de0c4d

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

000000000000000000000000c35dadb65012ec5796536bd9864ed8773abc74c4000000000000000000000000f50225a84382c74cbdea10b0c176f71fc3de0c4d

-----Decoded View---------------
Arg [0] : _factory (address): 0xc35dadb65012ec5796536bd9864ed8773abc74c4
Arg [1] : _WETH (address): 0xf50225a84382c74cbdea10b0c176f71fc3de0c4d

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000c35dadb65012ec5796536bd9864ed8773abc74c4
Arg [1] : 000000000000000000000000f50225a84382c74cbdea10b0c176f71fc3de0c4d


Deployed ByteCode Sourcemap

16551:18605:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17040:10;-1:-1:-1;;;;;17054:4:0;17040:18;;17033:26;;;;16551:18605;;;;;21190:673;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21190:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;34100:262;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34100:262:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;28366:850;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28366:850:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28366:850:0;;;;;;;;;;;;-1:-1:-1;28366:850:0;-1:-1:-1;;;;;;28366:850:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34900:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34900:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34900:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34900:253:0;;-1:-1:-1;34900:253:0;;-1:-1:-1;;;;;34900:253:0:i;21869:677::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21869:677:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25583:628::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25583:628:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25583:628:0;;;;;;;;;;;;-1:-1:-1;25583:628:0;-1:-1:-1;;;;;;25583:628:0;;;;;;;;:::i;27532:828::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27532:828:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27532:828:0;;;;;;;;;;;;-1:-1:-1;27532:828:0;-1:-1:-1;;;;;;27532:828:0;;;;;;;;:::i;24013:718::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24013:718:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31406:728::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31406:728:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31406:728:0;;;;;;;;;;;;-1:-1:-1;31406:728:0;-1:-1:-1;;;;;;31406:728:0;;;;;;;;:::i;33010:850::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;33010:850:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;33010:850:0;;;;;;;;;;;;-1:-1:-1;33010:850:0;-1:-1:-1;;;;;;33010:850:0;;;;;;;;:::i;26829:697::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26829:697:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26829:697:0;;;;;;;;;;;;-1:-1:-1;26829:697:0;-1:-1:-1;;;;;;26829:697:0;;;;;;;;:::i;34370:261::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34370:261:0;;;;;;;;;;;;:::i;26217:606::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26217:606:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26217:606:0;;;;;;;;;;;;-1:-1:-1;26217:606:0;-1:-1:-1;;;;;;26217:606:0;;;;;;;;:::i;16694:38::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;16694:38:0;;;;;;;;;;;;;;33904:188;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33904:188:0;;;;;;;;;;;;:::i;23300:707::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23300:707:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32140:864::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32140:864:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32140:864:0;;;;;;;;;;;;-1:-1:-1;32140:864:0;-1:-1:-1;;;;;;32140:864:0;;;;;;;;:::i;20319:865::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20319:865:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16646:41::-;;;;;;;;;;;;;:::i;34639:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34639:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34639:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34639:253:0;;-1:-1:-1;34639:253:0;;-1:-1:-1;;;;;34639:253:0:i;22552:669::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22552:669:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18558:738::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18558:738:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;19302:974;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19302:974:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29222:810::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29222:810:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29222:810:0;;;;;;;;;;;;-1:-1:-1;29222:810:0;-1:-1:-1;;;;;;29222:810:0;;;;;;;;:::i;21190:673::-;21427:16;21445:14;21408:8;16803:15;16791:8;:27;;16783:64;;;;;-1:-1:-1;;;16783:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16783:64:0;;;;;;;;;;;;;;;21499:196:::1;21529:5;21549:4;21568:9;21592:14;21621:12;21656:4;21676:8;21499:15;:196::i;:::-;21472:223:::0;;-1:-1:-1;21472:223:0;-1:-1:-1;21706:51:0::1;21734:5:::0;21741:2;21472:223;21706:27:::1;:51::i;:::-;21774:4;-1:-1:-1::0;;;;;21768:20:0::1;;21789:9;21768:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21810:45;21841:2;21845:9;21810:30;:45::i;:::-;21190:673:::0;;;;;;;;;;:::o;34100:262::-;34253:14;34292:62;34322:8;34332:9;34343:10;34292:29;:62::i;:::-;34285:69;34100:262;-1:-1:-1;;;;34100:262:0:o;28366:850::-;28580:21;28552:8;16803:15;16791:8;:27;;16783:64;;;;;-1:-1:-1;;;16783:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16783:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28652:4:0::1;28627:29;:4:::0;;-1:-1:-1;;28632:15:0;;28627:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28627:21:0::1;-1:-1:-1::0;;;;;28627:29:0::1;;28619:71;;;::::0;;-1:-1:-1;;;28619:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28619:71:0;;;;;;;;;;;;;::::1;;28711:55;28742:7;28751:8;28761:4;;28711:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;28711:30:0::1;::::0;-1:-1:-1;;;28711:55:0:i:1;:::-;28701:65;;28816:12;28785:7;28810:1;28793:7;:14;:18;28785:27;;;;;;;;;;;;;;:43;;28777:99;;;;-1:-1:-1::0;;;28777:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28887:141;28933:4;;28938:1;28933:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28933:7:0::1;28942:10;28954:51;28979:7;28988:4;;28993:1;28988:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28988:7:0::1;28997:4;;29002:1;28997:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28997:7:0::1;28954:24;:51::i;:::-;29007:7;29015:1;29007:10;;;;;;;;;;;;;;28887:31;:141::i;:::-;29039:35;29045:7;29054:4;;29039:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29068:4:0::1;::::0;-1:-1:-1;29039:5:0::1;::::0;-1:-1:-1;;29039:35:0:i:1;:::-;29091:4;-1:-1:-1::0;;;;;29085:20:0::1;;29106:7;29131:1;29114:7;:14;:18;29106:27;;;;;;;;;;;;;;29085:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29145:63;29176:2;29180:7;29205:1;29188:7;:14;:18;29180:27;;;;;;;;;;;;;;29145:30;:63::i;:::-;28366:850:::0;;;;;;;;;:::o;34900:253::-;35044:21;35090:55;35120:7;35129:9;35140:4;35090:29;:55::i;:::-;35083:62;;34900:253;;;;;:::o;21869:677::-;22175:12;22189;22214;22229:49;22254:7;22263:6;22271;22229:24;:49::i;:::-;22214:64;;22289:10;22302;:33;;22326:9;22302:33;;;-1:-1:-1;;22302:33:0;22346:80;;;-1:-1:-1;;;22346:80:0;;22374:10;22346:80;;;;22394:4;22346:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22289:46;;-1:-1:-1;;;;;;22346:27:0;;;;;:80;;;;;-1:-1:-1;;22346:80:0;;;;;;;;-1:-1:-1;22346:27:0;:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22458;22474:6;22482;22490:9;22501:10;22513;22525:2;22529:8;22458:15;:80::i;:::-;22437:101;;;;;;;;21869:677;;;;;;;;;;;;;;;;:::o;25583:628::-;25807:21;25788:8;16803:15;16791:8;:27;;16783:64;;;;;-1:-1:-1;;;16783:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16783:64:0;;;;;;;;;;;;;;;25851:55:::1;25882:7;25891:8;25901:4;;25851:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;25851:30:0::1;::::0;-1:-1:-1;;;25851:55:0:i:1;:::-;25841:65;;25956:12;25925:7;25950:1;25933:7;:14;:18;25925:27;;;;;;;;;;;;;;:43;;25917:99;;;;-1:-1:-1::0;;;25917:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26027:141;26073:4;;26078:1;26073:7;;;;;;26027:141;26179:24;26185:7;26194:4;;26179:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;26200:2:0;;-1:-1:-1;26179:5:0::1;::::0;-1:-1:-1;;26179:24:0:i:1;27532:828::-:0;27746:21;27718:8;16803:15;16791:8;:27;;16783:64;;;;;-1:-1:-1;;;16783:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16783:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27818:4:0::1;27793:29;:4:::0;;-1:-1:-1;;27798:15:0;;27793:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27793:21:0::1;-1:-1:-1::0;;;;;27793:29:0::1;;27785:71;;;::::0;;-1:-1:-1;;;27785:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27785:71:0;;;;;;;;;;;;;::::1;;27877:55;27907:7;27916:9;27927:4;;27877:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27877:29:0::1;::::0;-1:-1:-1;;;27877:55:0:i:1;:::-;27867:65;;27965:11;27951:7;27959:1;27951:10;;;;;;;;;;;;;;:25;;27943:77;;;;-1:-1:-1::0;;;27943:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24013:718:::0;24331:14;24358:12;24373:46;24398:7;24407:5;24414:4;24373:24;:46::i;:::-;24358:61;;24430:10;24443;:33;;24467:9;24443:33;;;-1:-1:-1;;24443:33:0;24487:80;;;-1:-1:-1;;;24487:80:0;;24515:10;24487:80;;;;24535:4;24487:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24430:46;;-1:-1:-1;;;;;;24487:27:0;;;;;:80;;;;;-1:-1:-1;;24487:80:0;;;;;;;;-1:-1:-1;24487:27:0;:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24590:133;24652:5;24659:9;24670:14;24686:12;24700:2;24704:8;24590:47;:133::i;:::-;24578:145;24013:718;-1:-1:-1;;;;;;;;;;;;;24013:718:0:o;31406:728::-;31640:8;16803:15;16791:8;:27;;16783:64;;;;;-1:-1:-1;;;16783:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16783:64:0;;;;;;;;;;;;;;;31661:139:::1;31707:4;;31712:1;31707:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31707:7:0::1;31716:10;31728:51;31753:7;31762:4;;31767:1;31762:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31762:7:0::1;31771:4;;31776:1;31771:7;;;;;;31728:51;31781:8;31661:31;:139::i;:::-;31811:18;31846:4:::0;;-1:-1:-1;;31851:15:0;;31846:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31846:21:0::1;-1:-1:-1::0;;;;;31832:46:0::1;;31879:2;31832:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;31832:50:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31832:50:0;31893:44:::1;::::0;;31832:50:::1;31893:44:::0;;::::1;::::0;;;;;;;;;;;31832:50;;-1:-1:-1;31893:44:0::1;::::0;;;31928:4;;;;;;31893:44;::::1;::::0;31928:4;;31893:44;31928:4;31893:44;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;31934:2:0;;-1:-1:-1;31893:34:0::1;::::0;-1:-1:-1;;31893:44:0:i:1;:::-;32043:12:::0;31970:69:::1;32025:13:::0;31984:4;;-1:-1:-1;;31989:15:0;;31984:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31984:21:0::1;-1:-1:-1::0;;;;;31970:46:0::1;;32017:2;31970:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;31970:50:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31970:50:0;;:54:::1;:69::i;:::-;:85;;31948:178;;;;-1:-1:-1::0;;;31948:178:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16858:1;31406:728:::0;;;;;;;:::o;33010:850::-;33277:8;16803:15;16791:8;:27;;16783:64;;;;;-1:-1:-1;;;16783:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16783:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33336:4:0::1;33311:29;:4:::0;;-1:-1:-1;;33316:15:0;;33311:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33311:21:0::1;-1:-1:-1::0;;;;;33311:29:0::1;;33303:71;;;::::0;;-1:-1:-1;;;33303:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33303:71:0;;;;;;;;;;;;;::::1;;33385:139;33431:4;;33436:1;33431:7;;;;;;33385:139;33535:55;33570:4;;33535:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;33584:4:0::1;::::0;-1:-1:-1;33535:34:0::1;::::0;-1:-1:-1;;33535:55:0:i:1;:::-;33601:14;33632:4;-1:-1:-1::0;;;;;33618:29:0::1;;33656:4;33618:44;;;;;;;;;;;;;-1:-1:-1::0;;;;;33618:44:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;33618:44:0;;-1:-1:-1;33681:25:0;;::::1;;33673:81;;;;-1:-1:-1::0;;;33673:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33771:4;-1:-1:-1::0;;;;;33765:20:0::1;;33786:9;33765:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33807:45;33838:2;33842:9;33807:30;:45::i;26829:697::-:0;27045:21;27017:8;16803:15;16791:8;:27;;16783:64;;;;;-1:-1:-1;;;16783:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16783:64:0;;;;;;;;;;;;;;;27103:4:::1;-1:-1:-1::0;;;;;27092:15:0::1;:4;;27097:1;27092:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27092:7:0::1;-1:-1:-1::0;;;;;27092:15:0::1;;27084:57;;;::::0;;-1:-1:-1;;;27084:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27084:57:0;;;;;;;;;;;;;::::1;;27162:56;27193:7;27202:9;27213:4;;27162:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27162:30:0::1;::::0;-1:-1:-1;;;27162:56:0:i:1;:::-;27152:66;;27268:12;27237:7;27262:1;27245:7;:14;:18;27237:27;;;;;;;;;;;;;;:43;;27229:99;;;;-1:-1:-1::0;;;27229:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27345:4;-1:-1:-1::0;;;;;27339:19:0::1;;27366:7;27374:1;27366:10;;;;;;;;;;;;;;27339:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;27403:4;-1:-1:-1::0;;;;;27397:20:0::1;;27418:51;27443:7;27452:4;;27457:1;27452:7;;;;;;27418:51;27471:7;27479:1;27471:10;;;;;;;;;;;;;;27397:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;27397:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;27397:85:0;27390:93:::1;;;;27494:24;27500:7;27509:4;;27494:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27515:2:0;;-1:-1:-1;27494:5:0::1;::::0;-1:-1:-1;;27494:24:0:i:1;:::-;26829:697:::0;;;;;;;;:::o;34370:261::-;34523:13;34561:62;34590:9;34601;34612:10;34561:28;:62::i;26217:606::-;26441:21;26422:8;16803:15;16791:8;:27;;16783:64;;;;;-1:-1:-1;;;16783:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16783:64:0;;;;;;;;;;;;;;;26485:55:::1;26515:7;26524:9;26535:4;;26485:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;26485:29:0::1;::::0;-1:-1:-1;;;26485:55:0:i:1;:::-;26475:65;;26573:11;26559:7;26567:1;26559:10;;;;;;;;;;;;;;:25;;26551:77;;;;-1:-1:-1::0;;;26551:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16694:38:::0;;;:::o;33904:188::-;34001:12;34033:51;34056:7;34065:8;34075;34033:22;:51::i;23300:707::-;23566:14;23547:8;16803:15;16791:8;:27;;16783:64;;;;;-1:-1:-1;;;16783:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16783:64:0;;;;;;;;;;;;;;;23609:196:::1;23639:5;23659:4;23678:9;23702:14;23731:12;23766:4;23786:8;23609:15;:196::i;:::-;23593:212;;;;;;23816:85;23844:5;23851:2;23869:5;-1:-1:-1::0;;;;;23855:30:0::1;;23894:4;23855:45;;;;;;;;;;;;;-1:-1:-1::0;;;;;23855:45:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;23855:45:0;23816:27:::1;:85::i;:::-;23918:4;-1:-1:-1::0;;;;;23912:20:0::1;;23933:9;23912:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23954:45;23985:2;23989:9;23954:30;:45::i;32140:864::-:0;32400:8;16803:15;16791:8;:27;;16783:64;;;;;-1:-1:-1;;;16783:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16783:64:0;;;;;;;;;;;;;;;32445:4:::1;-1:-1:-1::0;;;;;32434:15:0::1;:4;;32439:1;32434:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32434:7:0::1;-1:-1:-1::0;;;;;32434:15:0::1;;32426:57;;;::::0;;-1:-1:-1;;;32426:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32426:57:0;;;;;;;;;;;;;::::1;;32494:13;32510:9;32494:25;;32536:4;-1:-1:-1::0;;;;;32530:19:0::1;;32557:8;32530:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;32592:4;-1:-1:-1::0;;;;;32586:20:0::1;;32607:51;32632:7;32641:4;;32646:1;32641:7;;;;;;32607:51;32660:8;32586:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;32586:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32586:83:0;32579:91:::1;;;;32681:18;32716:4:::0;;-1:-1:-1;;32721:15:0;;32716:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32716:21:0::1;-1:-1:-1::0;;;;;32702:46:0::1;;32749:2;32702:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;32702:50:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32702:50:0;32763:44:::1;::::0;;32702:50:::1;32763:44:::0;;::::1;::::0;;;;;;;;;;;32702:50;;-1:-1:-1;32763:44:0::1;::::0;;;32798:4;;;;;;32763:44;::::1;::::0;32798:4;;32763:44;32798:4;32763:44;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;32804:2:0;;-1:-1:-1;32763:34:0::1;::::0;-1:-1:-1;;32763:44:0:i:1;:::-;32913:12:::0;32840:69:::1;32895:13:::0;32854:4;;-1:-1:-1;;32859:15:0;;32854:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32854:21:0::1;-1:-1:-1::0;;;;;32840:46:0::1;;32887:2;32840:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;32840:50:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;20319:865:::0;20573:12;20587;20554:8;16803:15;16791:8;:27;;16783:64;;;;;-1:-1:-1;;;16783:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16783:64:0;;;;;;;;;;;;;;;20612:12:::1;20627:49;20652:7;20661:6;20669;20627:24;:49::i;:::-;20687:62;::::0;;-1:-1:-1;;;20687:62:0;;20721:10:::1;20687:62;::::0;::::1;::::0;-1:-1:-1;;;;;20687:33:0;::::1;:62:::0;;;;;;;;;;;;;;20612:64;;-1:-1:-1;20687:33:0;;::::1;::::0;:62;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20687:33:0;:62;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;20817:29:0::1;::::0;;-1:-1:-1;;;20817:29:0;;-1:-1:-1;;;;;20817:29:0;;::::1;;::::0;::::1;::::0;;;20787:12:::1;::::0;;;20817:25;;::::1;::::0;::::1;::::0;:29;;;;;;;;;;;20787:12;20817:25;:29;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;20817:29:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20817:29:0;-1:-1:-1;20858:14:0::1;20877:43;20905:6:::0;20913;20877:27:::1;:43::i;:::-;20857:63;;;20962:6;-1:-1:-1::0;;;;;20952:16:0::1;:6;-1:-1:-1::0;;;;;20952:16:0::1;;:58;;20993:7;21002;20952:58;;;20972:7;20981;20952:58;20931:79:::0;;-1:-1:-1;20931:79:0;-1:-1:-1;21029:21:0;;::::1;;21021:72;;;;-1:-1:-1::0;;;21021:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21123:10;21112:7;:21;;21104:72;;;;-1:-1:-1::0;;;21104:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16858:1;;;;20319:865:::0;;;;;;;;;;;:::o;16646:41::-;;;:::o;34639:253::-;34783:21;34829:55;34860:7;34869:8;34879:4;34829:30;:55::i;22552:669::-;22841:16;22859:14;22886:12;22901:46;22926:7;22935:5;22942:4;22901:24;:46::i;:::-;22886:61;;22958:10;22971;:33;;22995:9;22971:33;;;-1:-1:-1;;22971:33:0;23015:80;;;-1:-1:-1;;;23015:80:0;;23043:10;23015:80;;;;23063:4;23015:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22958:46;;-1:-1:-1;;;;;;23015:27:0;;;;;:80;;;;;-1:-1:-1;;23015:80:0;;;;;;;;-1:-1:-1;23015:27:0;:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23133;23152:5;23159:9;23170:14;23186:12;23200:2;23204:8;23133:18;:80::i;:::-;23106:107;;;;-1:-1:-1;22552:669:0;-1:-1:-1;;;;;;;;;;;;;22552:669:0:o;18558:738::-;18846:12;18860;18874:14;18827:8;16803:15;16791:8;:27;;16783:64;;;;;-1:-1:-1;;;16783:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16783:64:0;;;;;;;;;;;;;;;18922:85:::1;18936:6;18944;18952:14;18968;18984:10;18996;18922:13;:85::i;:::-;18901:106:::0;;-1:-1:-1;18901:106:0;-1:-1:-1;19018:12:0::1;19033:49;19058:7;19067:6:::0;19075;19033:24:::1;:49::i;:::-;19018:64;;19093:66;19125:6;19133:10;19145:4;19151:7;19093:31;:66::i;:::-;19170;19202:6;19210:10;19222:4;19228:7;19170:31;:66::i;:::-;19274:4;-1:-1:-1::0;;;;;19259:25:0::1;;19285:2;19259:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;19259:29:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19259:29:0;18558:738;;;;-1:-1:-1;19259:29:0;;-1:-1:-1;18558:738:0;;-1:-1:-1;;;;;;;;;18558:738:0:o;19302:974::-;19555:16;19573:14;19589;19536:8;16803:15;16791:8;:27;;16783:64;;;;;-1:-1:-1;;;16783:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16783:64:0;;;;;;;;;;;;;;;19643:176:::1;19671:5;19691:4;19710:18;19743:9;19767:14;19796:12;19643:13;:176::i;:::-;19616:203:::0;;-1:-1:-1;19616:203:0;-1:-1:-1;19830:12:0::1;19845:46;19870:7;19879:5:::0;19886:4:::1;19845:24;:46::i;:::-;19830:61;;19902:69;19934:5;19941:10;19953:4;19959:11;19902:31;:69::i;:::-;19988:4;-1:-1:-1::0;;;;;19982:19:0::1;;20009:9;19982:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;20045:4;-1:-1:-1::0;;;;;20039:20:0::1;;20060:4;20066:9;20039:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;20039:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;20039:37:0;20032:45:::1;;;;20115:4;-1:-1:-1::0;;;;;20100:25:0::1;;20126:2;20100:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;20100:29:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;20100:29:0;;-1:-1:-1;20180:9:0::1;:21:::0;-1:-1:-1;20176:92:0::1;;;20203:65;20234:10;20258:9;20246;:21;20203:30;:65::i;:::-;16858:1;19302:974:::0;;;;;;;;;;;:::o;29222:810::-;29435:21;29407:8;16803:15;16791:8;:27;;16783:64;;;;;-1:-1:-1;;;16783:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16783:64:0;;;;;;;;;;;;;;;29493:4:::1;-1:-1:-1::0;;;;;29482:15:0::1;:4;;29487:1;29482:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29482:7:0::1;-1:-1:-1::0;;;;;29482:15:0::1;;29474:57;;;::::0;;-1:-1:-1;;;29474:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;29474:57:0;;;;;;;;;;;;;::::1;;29552:55;29582:7;29591:9;29602:4;;29552:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29552:29:0::1;::::0;-1:-1:-1;;;29552:55:0:i:1;:::-;29542:65;;29640:9;29626:7;29634:1;29626:10;;;;;;;;;;;;;;:23;;29618:75;;;;-1:-1:-1::0;;;29618:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29710:4;-1:-1:-1::0;;;;;29704:19:0::1;;29731:7;29739:1;29731:10;;;;;;;;;;;;;;29704:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;29768:4;-1:-1:-1::0;;;;;29762:20:0::1;;29783:51;29808:7;29817:4;;29822:1;29817:7;;;;;;29783:51;29836:7;29844:1;29836:10;;;;;;;;;;;;;;29762:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;29762:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;29762:85:0;29755:93:::1;;;;29859:24;29865:7;29874:4;;29859:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29880:2:0;;-1:-1:-1;29859:5:0::1;::::0;-1:-1:-1;;29859:24:0:i:1;:::-;29946:7;29954:1;29946:10;;;;;;;;;;;;;;29934:9;:22;29930:94;;;29958:66;29989:10;30013:7;30021:1;30013:10;;;;;;;;;;;;;;30001:9;:22;29958:30;:66::i;8414:361::-:0;8609:45;;;-1:-1:-1;;;;;8609:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8609:45:0;-1:-1:-1;;;8609:45:0;;;8598:57;;;;8563:12;;8577:17;;8598:10;;;;8609:45;8598:57;;;8609:45;8598:57;;8609:45;8598:57;;;;;;;;;;-1:-1:-1;;8598:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8562:93;;;;8674:7;:57;;;;-1:-1:-1;8686:11:0;;:16;;:44;;;8717:4;8706:24;;;;;;;;;;;;;;;-1:-1:-1;8706:24:0;8686:44;8666:101;;;;;-1:-1:-1;;;8666:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8414:361;;;;;:::o;9193:195::-;9301:12;;;9263;9301;;;;;;;;;-1:-1:-1;;;;;9280:7:0;;;9294:5;;9280:34;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9280:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9262:52;;;9333:7;9325:55;;;;-1:-1:-1;;;9325:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9193:195;;;:::o;5446:517::-;5539:14;5585:1;5574:8;:12;5566:68;;;;-1:-1:-1;;;5566:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5665:1;5653:9;:13;:31;;;;;5683:1;5670:10;:14;5653:31;5645:84;;;;-1:-1:-1;;;5645:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5740:20;5763:17;:8;5776:3;5763:12;:17::i;:::-;5740:40;-1:-1:-1;5791:14:0;5808:31;5740:40;5828:10;5808:19;:31::i;:::-;5791:48;-1:-1:-1;5850:16:0;5869:40;5893:15;5869:19;:9;5883:4;5869:13;:19::i;:::-;:23;;:40::i;:::-;5850:59;;5944:11;5932:9;:23;;;;;;;5446:517;-1:-1:-1;;;;;;;5446:517:0:o;6638:511::-;6739:21;6796:1;6781:4;:11;:16;;6773:59;;;;;-1:-1:-1;;;6773:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;6864:4;:11;6853:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6853:23:0;;6843:33;;6900:8;6887:7;6895:1;6887:10;;;;;;;;;;;;;:21;;;;;6924:6;6919:223;6950:1;6936:4;:11;:15;6932:1;:19;6919:223;;;6974:14;6990:15;7009:42;7021:7;7030:4;7035:1;7030:7;;;;;;;;;;;;;;7039:4;7044:1;7048;7044:5;7039:11;;;;;;;;;;;;;;7009;:42::i;:::-;6973:78;;;;7083:47;7096:7;7104:1;7096:10;;;;;;;;;;;;;;7108:9;7119:10;7083:12;:47::i;:::-;7066:7;7074:1;7078;7074:5;7066:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;6953:3:0;;6919:223;;;;6638:511;;;;;:::o;3963:478::-;4052:12;4078:14;4094;4112:26;4123:6;4131;4112:10;:26::i;:::-;4276:32;;;-1:-1:-1;;4276:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4266:43;;;;;;-1:-1:-1;;;;;;4179:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4169:262;;;;;;;;;3963:478;-1:-1:-1;;;;;3963:478:0:o;8783:402::-;9008:51;;;-1:-1:-1;;;;;9008:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9008:51:0;-1:-1:-1;;;9008:51:0;;;8997:63;;;;8962:12;;8976:17;;8997:10;;;;9008:51;8997:63;;;9008:51;8997:63;;9008:51;8997:63;;;;;;;;;;-1:-1:-1;;8997:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8961:99;;;;9079:7;:57;;;;-1:-1:-1;9091:11:0;;:16;;:44;;;9122:4;9111:24;;;;;;;;;;;;;;;-1:-1:-1;9111:24:0;9091:44;9071:106;;;;-1:-1:-1;;;9071:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8783:402;;;;;;:::o;24842:735::-;24949:6;24944:626;24975:1;24961:4;:11;:15;24957:1;:19;24944:626;;;24999:13;25014:14;25033:4;25038:1;25033:7;;;;;;;;;;;;;;25042:4;25047:1;25051;25047:5;25042:11;;;;;;;;;;;;;;24998:56;;;;25070:14;25089:42;25117:5;25124:6;25089:27;:42::i;:::-;25069:62;;;25146:14;25163:7;25171:1;25175;25171:5;25163:14;;;;;;;;;;;;;;25146:31;;25193:15;25210;25238:6;-1:-1:-1;;;;;25229:15:0;:5;-1:-1:-1;;;;;25229:15:0;;:61;;25271:9;25287:1;25229:61;;;25253:1;25257:9;25229:61;25192:98;;;;25305:10;25336:1;25322:4;:11;:15;25318:1;:19;:82;;25397:3;25318:82;;;25340:54;25365:7;25374:6;25382:4;25387:1;25391;25387:5;25382:11;;;;;;;;;;;;;;25340:24;:54::i;:::-;25305:95;;25430:48;25455:7;25464:5;25471:6;25430:24;:48::i;:::-;-1:-1:-1;;;;;25415:69:0;;25503:10;25515;25527:2;25541:1;25531:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25531:12:0;;25415:143;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25415:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24978:3:0;;;;;-1:-1:-1;24944:626:0;;-1:-1:-1;;;;;;;;24944:626:0;;;24842:735;;;:::o;7230:532::-;7331:21;7388:1;7373:4;:11;:16;;7365:59;;;;;-1:-1:-1;;;7365:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7456:4;:11;7445:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7445:23:0;;7435:33;;7509:9;7479:7;7504:1;7487:7;:14;:18;7479:27;;;;;;;;;;;;;;;;;:39;7543:11;;-1:-1:-1;;7543:15:0;7529:226;7560:5;;7529:226;;7588:14;7604:15;7623:42;7635:7;7644:4;7653:1;7649;:5;7644:11;;;;;;;;;;;;;;7657:4;7662:1;7657:7;;;;;;;7623:42;7587:78;;;;7697:46;7709:7;7717:1;7709:10;;;;;;;;;;;;;;7721:9;7732:10;7697:11;:46::i;:::-;7680:7;7692:1;7688;:5;7680:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;7567:3:0;7529:226;;30179:1221;30292:6;30287:1106;30318:1;30304:4;:11;:15;30300:1;:19;30287:1106;;;30342:13;30357:14;30376:4;30381:1;30376:7;;;;;;;;;;;;;;30385:4;30390:1;30394;30390:5;30385:11;;;;;;;;;;;;;;30341:56;;;;30413:14;30432:42;30460:5;30467:6;30432:27;:42::i;:::-;30412:62;;;30489:19;30526:48;30551:7;30560:5;30567:6;30526:24;:48::i;:::-;30489:86;;30590:16;30621:17;30709:13;30724;30742:4;-1:-1:-1;;;;;30742:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30742:18:0;;;;;;;-1:-1:-1;;;;;30708:52:0;;;;-1:-1:-1;30708:52:0;;-1:-1:-1;30776:17:0;;-1:-1:-1;;;;;30817:15:0;;;;;;;:61;;30859:8;30869;30817:61;;;30836:8;30846;30817:61;30775:103;;;;30907:63;30957:12;30921:5;-1:-1:-1;;;;;30907:30:0;;30946:4;30907:45;;;;;;;;;;;;;-1:-1:-1;;;;;30907:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;:63;30893:77;;31000:71;31030:11;31043:12;31057:13;31000:29;:71::i;:::-;30985:86;;30287:1106;;;;31102:15;31119;31147:6;-1:-1:-1;;;;;31138:15:0;:5;-1:-1:-1;;;;;31138:15:0;;:67;;31183:12;31202:1;31138:67;;;31162:1;31166:12;31138:67;31101:104;;;;31220:10;31251:1;31237:4;:11;:15;31233:1;:19;:82;;31312:3;31233:82;;;31255:54;31280:7;31289:6;31297:4;31302:1;31306;31302:5;31297:11;;;;;;;31255:54;31368:12;;;31378:1;31368:12;;;;;;;;;;-1:-1:-1;;;31330:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;31330:51:0;;;;;;;;;;;;;;;;;;;;;;31220:95;;-1:-1:-1;31330:9:0;;;;;;31340:10;;31352;;31220:95;;31368:12;;31330:51;;;;;;;;31368:12;;31330:51;;;;31368:12;;31330:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30321:3:0;;;;;-1:-1:-1;30287:1106:0;;-1:-1:-1;;;;;;;;;;30287:1106:0;2969:129;3053:5;;;3048:16;;;;3040:50;;;;;-1:-1:-1;;;3040:50:0;;;;;;;;;;;;-1:-1:-1;;;3040:50:0;;;;;;;;;;;;;;6084:472;6177:13;6223:1;6211:9;:13;6203:70;;;;-1:-1:-1;;;6203:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6304:1;6292:9;:13;:31;;;;;6322:1;6309:10;:14;6292:31;6284:84;;;;-1:-1:-1;;;6284:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6379:14;6396:34;6425:4;6396:24;:9;6410;6396:13;:24::i;:::-;:28;;:34::i;:::-;6379:51;-1:-1:-1;6441:16:0;6460:34;6490:3;6460:25;:10;6475:9;6460:14;:25::i;:34::-;6441:53;;6516:32;6546:1;6529:11;6517:9;:23;;;;;;;6516:29;:32::i;:::-;6505:43;6084:472;-1:-1:-1;;;;;;6084:472:0:o;5003:321::-;5085:12;5128:1;5118:7;:11;5110:61;;;;-1:-1:-1;;;5110:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5201:1;5190:8;:12;:28;;;;;5217:1;5206:8;:12;5190:28;5182:81;;;;-1:-1:-1;;;5182:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5308:8;5284:21;:7;5296:8;5284:11;:21::i;:::-;:32;;;;;;;5003:321;-1:-1:-1;;;;5003:321:0:o;3522:349::-;3597:14;3613;3658:6;-1:-1:-1;;;;;3648:16:0;:6;-1:-1:-1;;;;;3648:16:0;;;3640:66;;;;-1:-1:-1;;;3640:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3745:6;-1:-1:-1;;;;;3736:15:0;:6;-1:-1:-1;;;;;3736:15:0;;:53;;3774:6;3782;3736:53;;;3755:6;3763;3736:53;3717:72;;-1:-1:-1;3717:72:0;-1:-1:-1;;;;;;3808:20:0;;3800:63;;;;;-1:-1:-1;;;3800:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3522:349;;;;;:::o;17162:1390::-;17380:12;17394;17537:1;-1:-1:-1;;;;;17475:64:0;17493:7;-1:-1:-1;;;;;17475:34:0;;17510:6;17518;17475:50;;;;;;;;;;;;;-1:-1:-1;;;;;17475:50:0;;;;;;-1:-1:-1;;;;;17475:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17475:50:0;-1:-1:-1;;;;;17475:64:0;;17471:150;;;17574:7;-1:-1:-1;;;;;17556:37:0;;17594:6;17602;17556:53;;;;;;;;;;;;;-1:-1:-1;;;;;17556:53:0;;;;;;-1:-1:-1;;;;;17556:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17471:150:0;17632:13;17647;17664:53;17693:7;17702:6;17710;17664:28;:53::i;:::-;17631:86;;;;17732:8;17744:1;17732:13;:30;;;;-1:-1:-1;17749:13:0;;17732:30;17728:817;;;17801:14;;-1:-1:-1;17817:14:0;;-1:-1:-1;17728:817:0;;;17865:19;17887:58;17910:14;17926:8;17936;17887:22;:58::i;:::-;17865:80;;17982:14;17964;:32;17960:574;;18043:10;18025:14;:28;;18017:79;;;;-1:-1:-1;;;18017:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18137:14;;-1:-1:-1;18153:14:0;-1:-1:-1;18153:14:0;17960:574;;;18209:19;18231:58;18254:14;18270:8;18280;18231:22;:58::i;:::-;18209:80;;18333:14;18315;:32;;18308:40;;;;18393:10;18375:14;:28;;18367:79;;;;-1:-1:-1;;;18367:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18487:14;-1:-1:-1;18503:14:0;;-1:-1:-1;17960:574:0;17728:817;;17162:1390;;;;;;;;;;;:::o;3106:142::-;3158:6;3185;;;:30;;-1:-1:-1;;3200:5:0;;;3214:1;3209;3200:5;3209:1;3195:15;;;;;:20;3185:30;3177:63;;;;;-1:-1:-1;;;3177:63:0;;;;;;;;;;;;-1:-1:-1;;;3177:63:0;;;;;;;;;;;;;;2833:128;2917:5;;;2912:16;;;;2904:49;;;;;-1:-1:-1;;;2904:49:0;;;;;;;;;;;;-1:-1:-1;;;2904:49:0;;;;;;;;;;;;;;4499:391;4592:13;4607;4634:14;4653:26;4664:6;4672;4653:10;:26::i;:::-;4633:46;;;4691:13;4706;4739:32;4747:7;4756:6;4764;4739:7;:32::i;:::-;-1:-1:-1;;;;;4724:60:0;;:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4724:62:0;;;;;;;-1:-1:-1;;;;;4690:96:0;;;;-1:-1:-1;4690:96:0;;-1:-1:-1;;;;;;4820:16:0;;;;;;;:62;;4863:8;4873;4820:62;;;4840:8;4850;4820:62;4797:85;;;;-1:-1:-1;4499:391:0;-1:-1:-1;;;;;;;4499:391:0:o

Swarm Source

ipfs://1046181566cf8a35bd60f7e94b82dcde5a31b9e46aa697f15b739ad658b78711
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.