Contract 0x62de7269D2C99802B732858F9ba6E95CFF2c85E4 1

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x171eff60ac81ef02c92af1a986dc35d73f52759622be715dbfd1b7d980340f0eSwap Exact Token...154444762022-05-22 13:52:3121 hrs 30 mins ago0x3b091b5c87e30abe7f029b4963ac314d0fce5a7b IN  0x62de7269d2c99802b732858f9ba6e95cff2c85e40 HT0.0004001445 2.25
0x6ed18ed871726b4317b5adff99024310b52ad4061aa3778cbe90031fb92c6106Swap Exact Token...154198172022-05-21 17:19:341 day 18 hrs ago0x5a74a042f1f266b448208b0d8476c4a4f851609f IN  0x62de7269d2c99802b732858f9ba6e95cff2c85e40 HT0.000517512.5
0x46bdc014a2e8ef9a675f19a4b5f9f2431afa0ab1bc54944974e0826f0832fe66Swap Exact Token...154198112022-05-21 17:19:161 day 18 hrs ago0x5a74a042f1f266b448208b0d8476c4a4f851609f IN  0x62de7269d2c99802b732858f9ba6e95cff2c85e40 HT0.00066594252.5
0x1f59b633053fd4798adbac765f7a67f0deefd67c550a7cf250ff68ea2f53b5ebSwap Exact Token...153455542022-05-19 3:26:214 days 7 hrs ago0xe77be198a9a77b3f679bb9098c886fef1a5174f9 IN  0x62de7269d2c99802b732858f9ba6e95cff2c85e40 HT0.000517482.5
0x1b0431dc2f3fb9de3d51d74d0d85318b1a2d4fb0cdcdadb9fee05e8360bc1938Swap Exact Token...153455072022-05-19 3:24:004 days 7 hrs ago0xda4163e287361292ce0ef9da819c06e95e7ae12d IN  0x62de7269d2c99802b732858f9ba6e95cff2c85e40 HT0.0010530852.5
0x75d34b7848ec59410fd4901c3f3b0b3d4c816c5c05b4cc7e4d038dd722b286f1Remove Liquidity...153069412022-05-17 19:15:425 days 16 hrs ago0x7bc6a4030dc8052e7b14d288baf7a72d993a7d0a IN  0x62de7269d2c99802b732858f9ba6e95cff2c85e40 HT0.00048674925 2.25
0xcc34c6c051c65d8f980a36609126431900acd2a7eb7a88907d90aad59462ad83Remove Liquidity...152186512022-05-14 17:41:118 days 17 hrs ago0xe0e475b2e3ddbdaa85534679e64ce9cddc18a31c IN  0x62de7269d2c99802b732858f9ba6e95cff2c85e40 HT0.000364941 2.25
0x599618eb7e15deb8ac5b7b870be3c9bf6291573b536b002b3dc74ecdba27b20bSwap Exact ETH F...152061622022-05-14 7:16:449 days 4 hrs ago0xbc74da5a258a3aaba1c75c68efb08c9f37537be8 IN  0x62de7269d2c99802b732858f9ba6e95cff2c85e40.007 HT0.00053938125 2.25
0x8e82fa2a42d3125adec809a9554c9cd5aa2332b83df61de7d5c6b99c140c4413Remove Liquidity...152040232022-05-14 5:29:479 days 5 hrs ago0x0125c6547153b9168376520e882226c40fc70113 IN  0x62de7269d2c99802b732858f9ba6e95cff2c85e40 HT0.00107229252.5
0xb3005b5824e7d46a570a20939c78c079e01e1405fef8b392f3d8448c75e7e9ecSwap Exact Token...151910452022-05-13 18:40:539 days 16 hrs ago0x491faebfff9242cbc2e3b96b1f3183a1a97e5c3e IN  0x62de7269d2c99802b732858f9ba6e95cff2c85e40 HT0.00025754625 2.25
0x18c17913f5277aa2644f587654530919025a4c822895edfb1f73a2d795980baeAdd Liquidity151570302022-05-12 14:20:0510 days 21 hrs ago0xb851aa3dd77326ebaa0457b1818d35fae8efa742 IN  0x62de7269d2c99802b732858f9ba6e95cff2c85e40 HT0.00037330652.25
0xe9a4893bbc1acef5a8de514031566c16bb7ee03c0ba048ee6044788bf427245fRemove Liquidity...151570182022-05-12 14:19:2910 days 21 hrs ago0xb851aa3dd77326ebaa0457b1818d35fae8efa742 IN  0x62de7269d2c99802b732858f9ba6e95cff2c85e40 HT0.0004396652.5
0x75ec48a2f0055c6dce33347ca555c9f7e1b72f2a0bbbb6c0eea2d2d06361f176Add Liquidity151569632022-05-12 14:16:4410 days 21 hrs ago0xb851aa3dd77326ebaa0457b1818d35fae8efa742 IN  0x62de7269d2c99802b732858f9ba6e95cff2c85e40 HT0.00039207252.5
0x48f325e03177356a7413ba9da45cfaba901dd47dc6e4e9a49c12b3c0fe37556fSwap Exact ETH F...151569522022-05-12 14:16:1110 days 21 hrs ago0xb851aa3dd77326ebaa0457b1818d35fae8efa742 IN  0x62de7269d2c99802b732858f9ba6e95cff2c85e40.009 HT0.0002574852.5
0x4522d4e5d62f89f3c76257feff7f1ad0a41badb0d23207e5b09f4289d3e4a07bSwap Exact ETH F...151569212022-05-12 14:14:3810 days 21 hrs ago0xb851aa3dd77326ebaa0457b1818d35fae8efa742 IN  0x62de7269d2c99802b732858f9ba6e95cff2c85e40.016058587866649 HT0.00030013752.5
0xd153ec260a25a3d842975ea632560c2a15f8c8828b3e5610ac881f61448771c8Swap Exact Token...151377212022-05-11 22:14:3611 days 13 hrs ago0x80c6e17022a42f0d03a63e3facadb32585e2915e IN  0x62de7269d2c99802b732858f9ba6e95cff2c85e40 HT0.00025774875 2.25
0x044ad7bb3bcf46bd61a2aed19449202ec486402c7e510e10a31f6c986b3c0ff3Remove Liquidity...151376952022-05-11 22:13:1811 days 13 hrs ago0x80c6e17022a42f0d03a63e3facadb32585e2915e IN  0x62de7269d2c99802b732858f9ba6e95cff2c85e40 HT0.00048677175 2.25
0x5e82371cb89d3aedf73cfc4fb8ae263221044e5dfb780fea7b150bcf888ad3e5Remove Liquidity...150528222022-05-08 23:29:3114 days 11 hrs ago0xfa2cded72ceecdc729daba76904bf1cf0aec9e8e IN  0x62de7269d2c99802b732858f9ba6e95cff2c85e40 HT0.00058404782.7
0xc1b0361a52f8ea72f6011d7933fff26e2a75f53114857bf8c1fc14c2150b4401Swap Exact Token...150101082022-05-07 11:53:4815 days 23 hrs ago0xf4104f091df074a9c8feaf39cbb6556228693fd9 IN  0x62de7269d2c99802b732858f9ba6e95cff2c85e40 HT0.000465759 2.25
0xeeed5abfdaefa857df7ddbdcf47bacc5d7e8e0de03fa0fea17d02bd9faab3137Swap Exact Token...150100692022-05-07 11:51:5115 days 23 hrs ago0xf4104f091df074a9c8feaf39cbb6556228693fd9 IN  0x62de7269d2c99802b732858f9ba6e95cff2c85e40 HT0.00059934825 2.25
0x8996e605801c940c491b9628d95e5510c2dfeb6910115adef34c9da5aeb008cdSwap Exact ETH F...149790772022-05-06 10:02:0617 days 1 hr ago0xbc74da5a258a3aaba1c75c68efb08c9f37537be8 IN  0x62de7269d2c99802b732858f9ba6e95cff2c85e40.008 HT0.00053938125 2.25
0x40d901930dd5fbb526f271b2c458c0e14e35e429ad5a537721d69bed109d09c7Swap Exact Token...149581402022-05-05 16:35:1017 days 18 hrs ago0x890a0047f8d573347872cb6c019f86552f2367d6 IN  0x62de7269d2c99802b732858f9ba6e95cff2c85e40 HT0.000268413752.25
0xe410f2bde23847468ba2a8b70ab14ab76822598d137ab5313ed65f685b223dcfRemove Liquidity...149448122022-05-05 5:28:4618 days 5 hrs ago0x8e327f6fb46b682e5298cdd32fa538c5ddf1b037 IN  0x62de7269d2c99802b732858f9ba6e95cff2c85e40 HT0.0004557152.5
0xdb36465d86fa8b3f633685ebda442585aaf0eac16f2d7c6e37f8f34a0c019adeSwap Exact Token...149172532022-05-04 6:30:4919 days 4 hrs ago0xe58605d53cb28d65dca0482005667bcf8d6f368b IN  0x62de7269d2c99802b732858f9ba6e95cff2c85e40 HT0.000462366 2.25
0xb8a864df53e5bab208c04d02b743b0747fced784dfdc61547677eb4dd2a01dbfSwap ETH For Exa...148903122022-05-03 8:03:4420 days 3 hrs ago0x291df7363782dd3ed75f2aea25e3ae9b777766bf IN  0x62de7269d2c99802b732858f9ba6e95cff2c85e41.605325227034009 HT0.000275882.5
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x171eff60ac81ef02c92af1a986dc35d73f52759622be715dbfd1b7d980340f0e154444762022-05-22 13:52:3121 hrs 30 mins ago 0x62de7269d2c99802b732858f9ba6e95cff2c85e40x3b091b5c87e30abe7f029b4963ac314d0fce5a7b0.002061315593001844 HT
0x171eff60ac81ef02c92af1a986dc35d73f52759622be715dbfd1b7d980340f0e154444762022-05-22 13:52:3121 hrs 30 mins ago 0x105e11915b80dd8aa59ac3d58f10303c75606d46 0x62de7269d2c99802b732858f9ba6e95cff2c85e40.002061315593001844 HT
0x6ed18ed871726b4317b5adff99024310b52ad4061aa3778cbe90031fb92c6106154198172022-05-21 17:19:341 day 18 hrs ago 0x62de7269d2c99802b732858f9ba6e95cff2c85e40x5a74a042f1f266b448208b0d8476c4a4f851609f0.251989104434171141 HT
0x6ed18ed871726b4317b5adff99024310b52ad4061aa3778cbe90031fb92c6106154198172022-05-21 17:19:341 day 18 hrs ago 0x105e11915b80dd8aa59ac3d58f10303c75606d46 0x62de7269d2c99802b732858f9ba6e95cff2c85e40.251989104434171141 HT
0x46bdc014a2e8ef9a675f19a4b5f9f2431afa0ab1bc54944974e0826f0832fe66154198112022-05-21 17:19:161 day 18 hrs ago 0x62de7269d2c99802b732858f9ba6e95cff2c85e40x5a74a042f1f266b448208b0d8476c4a4f851609f0.433698178862058965 HT
0x46bdc014a2e8ef9a675f19a4b5f9f2431afa0ab1bc54944974e0826f0832fe66154198112022-05-21 17:19:161 day 18 hrs ago 0x105e11915b80dd8aa59ac3d58f10303c75606d46 0x62de7269d2c99802b732858f9ba6e95cff2c85e40.433698178862058965 HT
0x1f59b633053fd4798adbac765f7a67f0deefd67c550a7cf250ff68ea2f53b5eb153455542022-05-19 3:26:214 days 7 hrs ago 0x62de7269d2c99802b732858f9ba6e95cff2c85e40xe77be198a9a77b3f679bb9098c886fef1a5174f90.029949406519443369 HT
0x1f59b633053fd4798adbac765f7a67f0deefd67c550a7cf250ff68ea2f53b5eb153455542022-05-19 3:26:214 days 7 hrs ago 0x105e11915b80dd8aa59ac3d58f10303c75606d46 0x62de7269d2c99802b732858f9ba6e95cff2c85e40.029949406519443369 HT
0x1b0431dc2f3fb9de3d51d74d0d85318b1a2d4fb0cdcdadb9fee05e8360bc1938153455072022-05-19 3:24:004 days 7 hrs ago 0x62de7269d2c99802b732858f9ba6e95cff2c85e40xda4163e287361292ce0ef9da819c06e95e7ae12d0.209097398928786967 HT
0x1b0431dc2f3fb9de3d51d74d0d85318b1a2d4fb0cdcdadb9fee05e8360bc1938153455072022-05-19 3:24:004 days 7 hrs ago 0x105e11915b80dd8aa59ac3d58f10303c75606d46 0x62de7269d2c99802b732858f9ba6e95cff2c85e40.209097398928786967 HT
0x1b0431dc2f3fb9de3d51d74d0d85318b1a2d4fb0cdcdadb9fee05e8360bc1938153455072022-05-19 3:24:004 days 7 hrs ago 0x62de7269d2c99802b732858f9ba6e95cff2c85e4 0x105e11915b80dd8aa59ac3d58f10303c75606d460.009475956433209003 HT
0x1b0431dc2f3fb9de3d51d74d0d85318b1a2d4fb0cdcdadb9fee05e8360bc1938153455072022-05-19 3:24:004 days 7 hrs ago Give: GIVE Token 0x62de7269d2c99802b732858f9ba6e95cff2c85e40.009475956433209003 HT
0x1b0431dc2f3fb9de3d51d74d0d85318b1a2d4fb0cdcdadb9fee05e8360bc1938153455072022-05-19 3:24:004 days 7 hrs ago 0x62de7269d2c99802b732858f9ba6e95cff2c85e4 Give: GIVE Token0.028427869299627009 HT
0x1b0431dc2f3fb9de3d51d74d0d85318b1a2d4fb0cdcdadb9fee05e8360bc1938153455072022-05-19 3:24:004 days 7 hrs ago 0x105e11915b80dd8aa59ac3d58f10303c75606d46 0x62de7269d2c99802b732858f9ba6e95cff2c85e40.028427869299627009 HT
0x17b35c1f83b2854c33b0dc9a1ccb3c1c9fb1a4448562227d74934874297078af153420932022-05-19 0:33:184 days 10 hrs ago 0x62de7269d2c99802b732858f9ba6e95cff2c85e4 0x105e11915b80dd8aa59ac3d58f10303c75606d460.026134050052950652 HT
0x17b35c1f83b2854c33b0dc9a1ccb3c1c9fb1a4448562227d74934874297078af153420932022-05-19 0:33:184 days 10 hrs ago MoonShip: MSP Token 0x62de7269d2c99802b732858f9ba6e95cff2c85e40.026134050052950652 HT
0x17b35c1f83b2854c33b0dc9a1ccb3c1c9fb1a4448562227d74934874297078af153420932022-05-19 0:33:184 days 10 hrs ago 0x62de7269d2c99802b732858f9ba6e95cff2c85e4 MoonShip: MSP Token0.078402150158851958 HT
0x17b35c1f83b2854c33b0dc9a1ccb3c1c9fb1a4448562227d74934874297078af153420932022-05-19 0:33:184 days 10 hrs ago 0x105e11915b80dd8aa59ac3d58f10303c75606d46 0x62de7269d2c99802b732858f9ba6e95cff2c85e40.078402150158851958 HT
0x75d34b7848ec59410fd4901c3f3b0b3d4c816c5c05b4cc7e4d038dd722b286f1153069412022-05-17 19:15:425 days 16 hrs ago 0x62de7269d2c99802b732858f9ba6e95cff2c85e40x7bc6a4030dc8052e7b14d288baf7a72d993a7d0a1.012163870769324926 HT
0x75d34b7848ec59410fd4901c3f3b0b3d4c816c5c05b4cc7e4d038dd722b286f1153069412022-05-17 19:15:425 days 16 hrs ago 0x105e11915b80dd8aa59ac3d58f10303c75606d46 0x62de7269d2c99802b732858f9ba6e95cff2c85e41.012163870769324926 HT
0x599618eb7e15deb8ac5b7b870be3c9bf6291573b536b002b3dc74ecdba27b20b152061622022-05-14 7:16:449 days 4 hrs ago 0x62de7269d2c99802b732858f9ba6e95cff2c85e4 0x105e11915b80dd8aa59ac3d58f10303c75606d460.007 HT
0x8e82fa2a42d3125adec809a9554c9cd5aa2332b83df61de7d5c6b99c140c4413152040232022-05-14 5:29:479 days 5 hrs ago 0x62de7269d2c99802b732858f9ba6e95cff2c85e40x0125c6547153b9168376520e882226c40fc701130.002643185842027974 HT
0x8e82fa2a42d3125adec809a9554c9cd5aa2332b83df61de7d5c6b99c140c4413152040232022-05-14 5:29:479 days 5 hrs ago 0x105e11915b80dd8aa59ac3d58f10303c75606d46 0x62de7269d2c99802b732858f9ba6e95cff2c85e40.002643185842027974 HT
0xb3005b5824e7d46a570a20939c78c079e01e1405fef8b392f3d8448c75e7e9ec151910452022-05-13 18:40:539 days 16 hrs ago 0x62de7269d2c99802b732858f9ba6e95cff2c85e40x491faebfff9242cbc2e3b96b1f3183a1a97e5c3e0.03164651282460905 HT
0xb3005b5824e7d46a570a20939c78c079e01e1405fef8b392f3d8448c75e7e9ec151910452022-05-13 18:40:539 days 16 hrs ago 0x105e11915b80dd8aa59ac3d58f10303c75606d46 0x62de7269d2c99802b732858f9ba6e95cff2c85e40.03164651282460905 HT
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
UniswapV2Router02

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv2 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at hecoinfo.com on 2021-04-25
*/

/**
 *Submitted for verification at Etherscan.io on 2020-06-05
*/

pragma solidity =0.6.6;

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 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;
}

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;
}

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);
}

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;
}

interface IERC20 {
    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);
}

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

contract UniswapV2Router02 is IUniswapV2Router02 {
    using SafeMath 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, IERC20(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 = IERC20(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 = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(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 = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(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 = IERC20(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);
    }
}

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

library SafeMath {
    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');
    }
}

library UniswapV2Library {
    using SafeMath 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'6ff9ca796b6efc2cb2b2331911be936da83385b7965306e1c6fcd23067906d28' // 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);
        }
    }
}

// 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');
    }
}

Contract Security Audit

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"}]

60c060405234801561001057600080fd5b5060405162004768380380620047688339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6145e3620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118eb52806119e55280611a9b5280611b695280611caf5280611d375280611f7c5280611ff752806120a652806121725280612207528061227b528061277952806129ec5280612a425280612a765280612aea5280612c8a5280612dcd5280612e55525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611bfc5280611d695280611ecc52806122ad528061250652806126fe5280612727528061275752806128c45280612a205280612d1d5280612e87528061372e52806137715280613a545280613bd3528061400352806140b1528061413152506145e36000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124b8565b348015610a1c57600080fd5b5061088a6126fc565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612720945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561274d565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612861565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561299d565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c42565b6000808242811015610cde576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124b8565b9093509150610d1d898685612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da5858361312e565b50965096945050505050565b6000610dbe848484613226565b949350505050565b60608142811015610e0c576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b815260206004820152601d60248201526000805160206144ab833981519152604482015290519081900360640190fd5b610efd7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b815260040180806020018281038252602b815260200180614514602b913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b0316613462565b85600081518110610fe657fe5b6020026020010151613522565b6110328287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061367f915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b602002602001015161312e565b509695505050505050565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846138c5565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f613462565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124b8565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b6112c77f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b815260040180806020018281038252602b815260200180614514602b913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e88287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b606081428110156113b4576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b815260206004820152601d60248201526000805160206144ab833981519152604482015290519081900360640190fd5b6114a57f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b81526004018080602001828103825260278152602001806144846027913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a613522565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a49290918991899182918501908490808284376000920191909152508892506139fd915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613d0816565b10156118935760405162461bcd60e51b815260040180806020018281038252602b815260200180614514602b913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b815260206004820152601d60248201526000805160206144ab833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c28585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506139fd915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b815260040180806020018281038252602b815260200180614514602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b50505050611893848261312e565b60608142811015611b67576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b815260206004820152601d60248201526000805160206144ab833981519152604482015290519081900360640190fd5b611c557f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b815260040180806020018281038252602b815260200180614514602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d957f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b5095945050505050565b6000610dbe848484613d58565b60608142811015611ec7576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b611f257f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b81526004018080602001828103825260278152602001806144846027913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613e48565b60008142811015611ff1576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b612020887f000000000000000000000000000000000000000000000000000000000000000089898930896124b8565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e8848361312e565b8042811015612170576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b815260206004820152601d60248201526000805160206144ab833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122d97f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a9182918501908490808284376000920191909152508992506139fd915050565b87611856828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b60008082428110156124ff576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b600061252c7f00000000000000000000000000000000000000000000000000000000000000008c8c613462565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561258757600080fd5b505af115801561259b573d6000803e3d6000fd5b505050506040513d60208110156125b157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b505050506040513d604081101561262857600080fd5b508051602090910151909250905060006126428e8e613ef4565b509050806001600160a01b03168e6001600160a01b031614612665578183612668565b82825b90975095508a8710156126ac5760405162461bcd60e51b81526004018080602001828103825260268152602001806144cb6026913960400191505060405180910390fd5b898610156126eb5760405162461bcd60e51b81526004018080602001828103825260268152602001806144116026913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f00000000000000000000000000000000000000000000000000000000000000008484613316565b600080600061279d7f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613462565b90506000876127ac578c6127b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561282657600080fd5b505af115801561283a573d6000803e3d6000fd5b5050505061284c8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128aa576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b6128b88c8c8c8c8c8c613fd2565b909450925060006128ea7f00000000000000000000000000000000000000000000000000000000000000008e8e613462565b90506128f88d338388613522565b6129048c338387613522565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561295c57600080fd5b505af1158015612970573d6000803e3d6000fd5b505050506040513d602081101561298657600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129e6576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b612a148a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613fd2565b90945092506000612a667f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050612a748b338388613522565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612acf57600080fd5b505af1158015612ae3573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b6857600080fd5b505af1158015612b7c573d6000803e3d6000fd5b505050506040513d6020811015612b9257600080fd5b5051612b9a57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b505050506040513d6020811015612c1c57600080fd5b5051925034841015612c3457612c343385340361312e565b505096509650969350505050565b60608142811015612c88576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612cbf57fe5b905060200201356001600160a01b03166001600160a01b031614612d18576040805162461bcd60e51b815260206004820152601d60248201526000805160206144ab833981519152604482015290519081900360640190fd5b612d767f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91503482600081518110612d8657fe5b60200260200101511115612dcb5760405162461bcd60e51b81526004018080602001828103825260278152602001806144846027913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e0757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e3a57600080fd5b505af1158015612e4e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612eb37f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612ec057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b505050506040513d6020811015612f4157600080fd5b5051612f4957fe5b612f888287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b81600081518110612f9557fe5b6020026020010151341115611e6a57611e6a3383600081518110612fb557fe5b6020026020010151340361312e565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130415780518252601f199092019160209182019101613022565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130a3576040519150601f19603f3d011682016040523d82523d6000602084013e6130a8565b606091505b50915091508180156130d65750805115806130d657508080602001905160208110156130d357600080fd5b50515b613127576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061317a5780518252601f19909201916020918201910161315b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131dc576040519150601f19603f3d011682016040523d82523d6000602084013e6131e1565b606091505b50509050806132215760405162461bcd60e51b81526004018080602001828103825260238152602001806144f16023913960400191505060405180910390fd5b505050565b60008084116132665760405162461bcd60e51b815260040180806020018281038252602b815260200180614563602b913960400191505060405180910390fd5b6000831180156132765750600082115b6132b15760405162461bcd60e51b81526004018080602001828103825260288152602001806144376028913960400191505060405180910390fd5b60006132c5856103e563ffffffff61424616565b905060006132d9828563ffffffff61424616565b905060006132ff836132f3886103e863ffffffff61424616565b9063ffffffff6142a916565b905080828161330a57fe5b04979650505050505050565b606060028251101561336f576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561338757600080fd5b506040519080825280602002602001820160405280156133b1578160200160208202803683370190505b50905082816000815181106133c257fe5b60200260200101818152505060005b600183510381101561345a57600080613414878685815181106133f057fe5b602002602001015187866001018151811061340757fe5b60200260200101516142f8565b9150915061343684848151811061342757fe5b60200260200101518383613226565b84846001018151811061344557fe5b602090810291909101015250506001016133d1565b509392505050565b60008060006134718585613ef4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f6ff9ca796b6efc2cb2b2331911be936da83385b7965306e1c6fcd23067906d28609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135a75780518252601f199092019160209182019101613588565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613609576040519150601f19603f3d011682016040523d82523d6000602084013e61360e565b606091505b509150915081801561363c57508051158061363c575080806020019051602081101561363957600080fd5b50515b6136775760405162461bcd60e51b815260040180806020018281038252602481526020018061453f6024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138bf5760008084838151811061369d57fe5b60200260200101518584600101815181106136b457fe5b60200260200101519150915060006136cc8383613ef4565b50905060008785600101815181106136e057fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461370e57826000613712565b6000835b91509150600060028a51038810613729578861376a565b61376a7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061375d57fe5b6020026020010151613462565b90506137977f00000000000000000000000000000000000000000000000000000000000000008888613462565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137d4576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561384557818101518382015260200161382d565b50505050905090810190601f1680156138725780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561389457600080fd5b505af11580156138a8573d6000803e3d6000fd5b505060019099019850613682975050505050505050565b50505050565b606060028251101561391e576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561393657600080fd5b50604051908082528060200260200182016040528015613960578160200160208202803683370190505b509050828160018351038151811061397457fe5b60209081029190910101528151600019015b801561345a576000806139b6878660018603815181106139a257fe5b602002602001015187868151811061340757fe5b915091506139d88484815181106139c957fe5b60200260200101518383613d58565b8460018503815181106139e757fe5b6020908102919091010152505060001901613986565b60005b600183510381101561322157600080848381518110613a1b57fe5b6020026020010151858460010181518110613a3257fe5b6020026020010151915091506000613a4a8383613ef4565b5090506000613a7a7f00000000000000000000000000000000000000000000000000000000000000008585613462565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613abb57600080fd5b505afa158015613acf573d6000803e3d6000fd5b505050506040513d6060811015613ae557600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613b1b578284613b1e565b83835b91509150613b7c828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613b89868383613226565b945050505050600080856001600160a01b0316886001600160a01b031614613bb357826000613bb7565b6000835b91509150600060028c51038a10613bce578a613c02565b613c027f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061375d57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c8c578181015183820152602001613c74565b50505050905090810190601f168015613cb95780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613cdb57600080fd5b505af1158015613cef573d6000803e3d6000fd5b50506001909b019a50613a009950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d985760405162461bcd60e51b815260040180806020018281038252602c8152602001806143c0602c913960400191505060405180910390fd5b600083118015613da85750600082115b613de35760405162461bcd60e51b81526004018080602001828103825260288152602001806144376028913960400191505060405180910390fd5b6000613e076103e8613dfb868863ffffffff61424616565b9063ffffffff61424616565b90506000613e216103e5613dfb868963ffffffff613d0816565b9050613e3e6001828481613e3157fe5b049063ffffffff6142a916565b9695505050505050565b6000808411613e885760405162461bcd60e51b815260040180806020018281038252602581526020018061445f6025913960400191505060405180910390fd5b600083118015613e985750600082115b613ed35760405162461bcd60e51b81526004018080602001828103825260288152602001806144376028913960400191505060405180910390fd5b82613ee4858463ffffffff61424616565b81613eeb57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f485760405162461bcd60e51b81526004018080602001828103825260258152602001806143ec6025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613f68578284613f6b565b83835b90925090506001600160a01b038216613fcb576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561404c57600080fd5b505afa158015614060573d6000803e3d6000fd5b505050506040513d602081101561407657600080fd5b50516001600160a01b0316141561412957604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156140fc57600080fd5b505af1158015614110573d6000803e3d6000fd5b505050506040513d602081101561412657600080fd5b50505b6000806141577f00000000000000000000000000000000000000000000000000000000000000008b8b6142f8565b91509150816000148015614169575080155b1561417957879350869250614239565b6000614186898484613e48565b90508781116141d957858110156141ce5760405162461bcd60e51b81526004018080602001828103825260268152602001806144116026913960400191505060405180910390fd5b889450925082614237565b60006141e6898486613e48565b9050898111156141f257fe5b878110156142315760405162461bcd60e51b81526004018080602001828103825260268152602001806144cb6026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806142615750508082028282828161425e57fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006143078585613ef4565b509050600080614318888888613462565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561435057600080fd5b505afa158015614364573d6000803e3d6000fd5b505050506040513d606081101561437a57600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143ad5780826143b0565b81815b9099909850965050505050505056fe556e697377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056324c6962726172793a204944454e544943414c5f414444524553534553556e69737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e54556e697377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459556e697377617056324c6962726172793a20494e53554646494349454e545f414d4f554e54556e69737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54556e69737761705632526f757465723a20494e56414c49445f50415448000000556e69737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544556e69737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544556e697377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54556e69737761705632526f757465723a20455850495245440000000000000000a2646970667358221220422c67d853e0f5b6268cad9d053db249c29440e0eeb51eb3b5d8dc5bb581265864736f6c6343000606003300000000000000000000000022a51e1ecb0a50ee159193b7450f36d3b148ebb4000000000000000000000000105e11915b80dd8aa59ac3d58f10303c75606d46

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

00000000000000000000000022a51e1ecb0a50ee159193b7450f36d3b148ebb4000000000000000000000000105e11915b80dd8aa59ac3d58f10303c75606d46

-----Decoded View---------------
Arg [0] : _factory (address): 0x22a51e1ecb0a50ee159193b7450f36d3b148ebb4
Arg [1] : _WETH (address): 0x105e11915b80dd8aa59ac3d58f10303c75606d46

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000022a51e1ecb0a50ee159193b7450f36d3b148ebb4
Arg [1] : 000000000000000000000000105e11915b80dd8aa59ac3d58f10303c75606d46


Deployed ByteCode Sourcemap

9052:18549:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9534:10;-1:-1:-1;;;;;9548:4:0;9534:18;;9527:26;;;;9052:18549;;12:1:-1;9;2:12;13684:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13684:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;13684:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;26545:262;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26545:262:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26545:262:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;20853:850;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20853:850:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;20853:850:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;20853:850:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;20853:850:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;20853:850:0;;-1:-1:-1;20853:850:0;-1:-1:-1;;;;;;20853:850:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;20853:850:0;;;;;;;;;;;;;;;;;27345:253;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27345:253:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;27345:253:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27345:253:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27345:253:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27345:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;27345:253:0;;-1:-1:-1;27345:253:0;;-1:-1:-1;;;;;27345:253:0:i;14363:677::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14363:677:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;14363:677:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18070:628::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18070:628:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;18070:628:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;18070:628:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;18070:628:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;18070:628:0;;-1:-1:-1;18070:628:0;-1:-1:-1;;;;;;18070:628:0;;;;;;;;:::i;20019:828::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20019:828:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;20019:828:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;20019:828:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;20019:828:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;20019:828:0;;-1:-1:-1;20019:828:0;-1:-1:-1;;;;;;20019:828:0;;;;;;;;:::i;16500:718::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16500:718:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;16500:718:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23886:714::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23886:714:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;23886:714:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;23886:714:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;23886:714:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;23886:714:0;;-1:-1:-1;23886:714:0;-1:-1:-1;;;;;;23886:714:0;;;;;;;;:::i;25462:843::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25462:843:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25462:843:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25462:843:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25462:843:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25462:843:0;;-1:-1:-1;25462:843:0;-1:-1:-1;;;;;;25462:843:0;;;;;;;;:::i;19316:697::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;19316:697:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;19316:697:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;19316:697:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;19316:697:0;;-1:-1:-1;19316:697:0;-1:-1:-1;;;;;;19316:697:0;;;;;;;;:::i;26815:261::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26815:261:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26815:261:0;;;;;;;;;;;;:::i;18704:606::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18704:606:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;18704:606:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;18704:606:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;18704:606:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;18704:606:0;;-1:-1:-1;18704:606:0;-1:-1:-1;;;;;;18704:606:0;;;;;;;;:::i;9188:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9188:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;9188:38:0;;;;;;;;;;;;;;26349:188;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26349:188:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26349:188:0;;;;;;;;;;;;:::i;15794:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15794:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;15794:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24606:850::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24606:850:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24606:850:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24606:850:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;24606:850:0;;-1:-1:-1;24606:850:0;-1:-1:-1;;;;;;24606:850:0;;;;;;;;:::i;12813:865::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12813:865:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;12813:865:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;9140:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9140:41:0;;;:::i;27084:253::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27084:253:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;27084:253:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27084:253:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27084:253:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27084:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;27084:253:0;;-1:-1:-1;27084:253:0;;-1:-1:-1;;;;;27084:253:0:i;15046:669::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15046:669:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;15046:669:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;11052:738::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11052:738:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;11052:738:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;11796:974;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;11796:974:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21709:810::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;21709:810:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;21709:810:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;21709:810:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;21709:810:0;;-1:-1:-1;21709:810:0;-1:-1:-1;;;;;;21709:810:0;;;;;;;;:::i;13684:673::-;13921:16;13939:14;13902:8;9297:15;9285:8;:27;;9277:64;;;;;-1:-1:-1;;;9277:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9277:64:0;;;;;;;;;;;;;;;13993:196:::1;14023:5;14043:4;14062:9;14086:14;14115:12;14150:4;14170:8;13993:15;:196::i;:::-;13966:223:::0;;-1:-1:-1;13966:223:0;-1:-1:-1;14200:51:0::1;14228:5:::0;14235:2;13966:223;14200:27:::1;:51::i;:::-;14268:4;-1:-1:-1::0;;;;;14262:20:0::1;;14283:9;14262:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;14262:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;14262:31:0;;;;14304:45;14335:2;14339:9;14304:30;:45::i;:::-;13684:673:::0;;;;;;;;;;:::o;26545:262::-;26698:14;26737:62;26767:8;26777:9;26788:10;26737:29;:62::i;:::-;26730:69;26545:262;-1:-1:-1;;;;26545:262:0:o;20853:850::-;21067:21;21039:8;9297:15;9285:8;:27;;9277:64;;;;;-1:-1:-1;;;9277:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9277:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;21139:4:0::1;21114:29;:4:::0;;-1:-1:-1;;21119:15:0;;21114:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;21114:21:0::1;-1:-1:-1::0;;;;;21114:29:0::1;;21106:71;;;::::0;;-1:-1:-1;;;21106:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;21106:71:0;;;;;;;;;;;;;::::1;;21198:55;21229:7;21238:8;21248:4;;21198:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;21198:30:0::1;::::0;-1:-1:-1;;;21198:55:0:i:1;:::-;21188:65;;21303:12;21272:7;21297:1;21280:7;:14;:18;21272:27;;;;;;;;;;;;;;:43;;21264:99;;;;-1:-1:-1::0;;;21264:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21374:141;21420:4;;21425:1;21420:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;21420:7:0::1;21429:10;21441:51;21466:7;21475:4;;21480:1;21475:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;21475:7:0::1;21484:4;;21489:1;21484:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;21484:7:0::1;21441:24;:51::i;:::-;21494:7;21502:1;21494:10;;;;;;;;;;;;;;21374:31;:141::i;:::-;21526:35;21532:7;21541:4;;21526:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;21555:4:0::1;::::0;-1:-1:-1;21526:5:0::1;::::0;-1:-1:-1;;21526:35:0:i:1;:::-;21578:4;-1:-1:-1::0;;;;;21572:20:0::1;;21593:7;21618:1;21601:7;:14;:18;21593:27;;;;;;;;;;;;;;21572:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21572:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21572:49:0;;;;21632:63;21663:2;21667:7;21692:1;21675:7;:14;:18;21667:27;;;;;;;;;;;;;;21632:30;:63::i;:::-;20853:850:::0;;;;;;;;;:::o;27345:253::-;27489:21;27535:55;27565:7;27574:9;27585:4;27535:29;:55::i;:::-;27528:62;;27345:253;;;;;:::o;14363:677::-;14669:12;14683;14708;14723:49;14748:7;14757:6;14765;14723:24;:49::i;:::-;14708:64;;14783:10;14796;:33;;14820:9;14796:33;;;-1:-1:-1;;14796:33:0;14840:80;;;-1:-1:-1;;;14840:80:0;;14868:10;14840:80;;;;14888:4;14840:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14783:46;;-1:-1:-1;;;;;;14840:27:0;;;;;:80;;;;;-1:-1:-1;;14840:80:0;;;;;;;;-1:-1:-1;14840:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;14840:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14840:80:0;;;;14952;14968:6;14976;14984:9;14995:10;15007;15019:2;15023:8;14952:15;:80::i;:::-;14931:101;;;;;;;;14363:677;;;;;;;;;;;;;;;;:::o;18070:628::-;18294:21;18275:8;9297:15;9285:8;:27;;9277:64;;;;;-1:-1:-1;;;9277:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9277:64:0;;;;;;;;;;;;;;;18338:55:::1;18369:7;18378:8;18388:4;;18338:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;18338:30:0::1;::::0;-1:-1:-1;;;18338:55:0:i:1;:::-;18328:65;;18443:12;18412:7;18437:1;18420:7;:14;:18;18412:27;;;;;;;;;;;;;;:43;;18404:99;;;;-1:-1:-1::0;;;18404:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18514:141;18560:4;;18565:1;18560:7;;;;;;18514:141;18666:24;18672:7;18681:4;;18666:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;18687:2:0;;-1:-1:-1;18666:5:0::1;::::0;-1:-1:-1;;18666:24:0:i:1;20019:828::-:0;20233:21;20205:8;9297:15;9285:8;:27;;9277:64;;;;;-1:-1:-1;;;9277:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9277:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;20305:4:0::1;20280:29;:4:::0;;-1:-1:-1;;20285:15:0;;20280:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;20280:21:0::1;-1:-1:-1::0;;;;;20280:29:0::1;;20272:71;;;::::0;;-1:-1:-1;;;20272:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;20272:71:0;;;;;;;;;;;;;::::1;;20364:55;20394:7;20403:9;20414:4;;20364:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;20364:29:0::1;::::0;-1:-1:-1;;;20364:55:0:i:1;:::-;20354:65;;20452:11;20438:7;20446:1;20438:10;;;;;;;;;;;;;;:25;;20430:77;;;;-1:-1:-1::0;;;20430:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16500:718:::0;16818:14;16845:12;16860:46;16885:7;16894:5;16901:4;16860:24;:46::i;:::-;16845:61;;16917:10;16930;:33;;16954:9;16930:33;;;-1:-1:-1;;16930:33:0;16974:80;;;-1:-1:-1;;;16974:80:0;;17002:10;16974:80;;;;17022:4;16974:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16917:46;;-1:-1:-1;;;;;;16974:27:0;;;;;:80;;;;;-1:-1:-1;;16974:80:0;;;;;;;;-1:-1:-1;16974:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;16974:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16974:80:0;;;;17077:133;17139:5;17146:9;17157:14;17173:12;17187:2;17191:8;17077:47;:133::i;:::-;17065:145;16500:718;-1:-1:-1;;;;;;;;;;;;;16500:718:0:o;23886:714::-;24120:8;9297:15;9285:8;:27;;9277:64;;;;;-1:-1:-1;;;9277:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9277:64:0;;;;;;;;;;;;;;;24141:139:::1;24187:4;;24192:1;24187:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;24187:7:0::1;24196:10;24208:51;24233:7;24242:4;;24247:1;24242:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;24242:7:0::1;24251:4;;24256:1;24251:7;;;;;;24208:51;24261:8;24141:31;:139::i;:::-;24291:18;24319:4:::0;;-1:-1:-1;;24324:15:0;;24319:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;24319:21:0::1;-1:-1:-1::0;;;;;24312:39:0::1;;24352:2;24312:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;24312:43:0::1;-1:-1:-1::0;;;;;24312:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24312:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24312:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;24312:43:0;24366:44:::1;::::0;;24312:43:::1;24366:44:::0;;::::1;::::0;;;;;;;;;;;24312:43;;-1:-1:-1;24366:44:0::1;::::0;;;24401:4;;;;;;24366:44;::::1;::::0;24401:4;;24366:44;24401:4;24366:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24407:2:0;;-1:-1:-1;24366:34:0::1;::::0;-1:-1:-1;;24366:44:0:i:1;:::-;24509:12:::0;24443:62:::1;24491:13:::0;24450:4;;-1:-1:-1;;24455:15:0;;24450:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;24450:21:0::1;-1:-1:-1::0;;;;;24443:39:0::1;;24483:2;24443:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;24443:43:0::1;-1:-1:-1::0;;;;;24443:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24443:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24443:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;24443:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;24421:171;;;;-1:-1:-1::0;;;24421:171:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9352:1;23886:714:::0;;;;;;;:::o;25462:843::-;25729:8;9297:15;9285:8;:27;;9277:64;;;;;-1:-1:-1;;;9277:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9277:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25788:4:0::1;25763:29;:4:::0;;-1:-1:-1;;25768:15:0;;25763:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;25763:21:0::1;-1:-1:-1::0;;;;;25763:29:0::1;;25755:71;;;::::0;;-1:-1:-1;;;25755:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;25755:71:0;;;;;;;;;;;;;::::1;;25837:139;25883:4;;25888:1;25883:7;;;;;;25837:139;25987:55;26022:4;;25987:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26036:4:0::1;::::0;-1:-1:-1;25987:34:0::1;::::0;-1:-1:-1;;25987:55:0:i:1;:::-;26070:37;::::0;;-1:-1:-1;;;26070:37:0;;26101:4:::1;26070:37;::::0;::::1;::::0;;;26053:14:::1;::::0;-1:-1:-1;;;;;26077:4:0::1;26070:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;26070:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26070:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26070:37:0;;-1:-1:-1;26126:25:0;;::::1;;26118:81;;;;-1:-1:-1::0;;;26118:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26216:4;-1:-1:-1::0;;;;;26210:20:0::1;;26231:9;26210:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26210:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26210:31:0;;;;26252:45;26283:2;26287:9;26252:30;:45::i;19316:697::-:0;19532:21;19504:8;9297:15;9285:8;:27;;9277:64;;;;;-1:-1:-1;;;9277:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9277:64:0;;;;;;;;;;;;;;;19590:4:::1;-1:-1:-1::0;;;;;19579:15:0::1;:4;;19584:1;19579:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;19579:7:0::1;-1:-1:-1::0;;;;;19579:15:0::1;;19571:57;;;::::0;;-1:-1:-1;;;19571:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;19571:57:0;;;;;;;;;;;;;::::1;;19649:56;19680:7;19689:9;19700:4;;19649:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;19649:30:0::1;::::0;-1:-1:-1;;;19649:56:0:i:1;:::-;19639:66;;19755:12;19724:7;19749:1;19732:7;:14;:18;19724:27;;;;;;;;;;;;;;:43;;19716:99;;;;-1:-1:-1::0;;;19716:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19832:4;-1:-1:-1::0;;;;;19826:19:0::1;;19853:7;19861:1;19853:10;;;;;;;;;;;;;;19826:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19826:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19826:40:0;;;;;19890:4;-1:-1:-1::0;;;;;19884:20:0::1;;19905:51;19930:7;19939:4;;19944:1;19939:7;;;;;;19905:51;19958:7;19966:1;19958:10;;;;;;;;;;;;;;19884:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;19884:85:0::1;-1:-1:-1::0;;;;;19884:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19884:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19884:85:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19884:85:0;19877:93:::1;;;;19981:24;19987:7;19996:4;;19981:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;20002:2:0;;-1:-1:-1;19981:5:0::1;::::0;-1:-1:-1;;19981:24:0:i:1;:::-;19316:697:::0;;;;;;;;:::o;26815:261::-;26968:13;27006:62;27035:9;27046;27057:10;27006:28;:62::i;18704:606::-;18928:21;18909:8;9297:15;9285:8;:27;;9277:64;;;;;-1:-1:-1;;;9277:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9277:64:0;;;;;;;;;;;;;;;18972:55:::1;19002:7;19011:9;19022:4;;18972:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;18972:29:0::1;::::0;-1:-1:-1;;;18972:55:0:i:1;:::-;18962:65;;19060:11;19046:7;19054:1;19046:10;;;;;;;;;;;;;;:25;;19038:77;;;;-1:-1:-1::0;;;19038:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9188:38:::0;;;:::o;26349:188::-;26446:12;26478:51;26501:7;26510:8;26520;26478:22;:51::i;15794:700::-;16060:14;16041:8;9297:15;9285:8;:27;;9277:64;;;;;-1:-1:-1;;;9277:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9277:64:0;;;;;;;;;;;;;;;16103:196:::1;16133:5;16153:4;16172:9;16196:14;16225:12;16260:4;16280:8;16103:15;:196::i;:::-;16349:38;::::0;;-1:-1:-1;;;16349:38:0;;16381:4:::1;16349:38;::::0;::::1;::::0;;;16087:212;;-1:-1:-1;16310:78:0::1;::::0;-1:-1:-1;16338:5:0;;16345:2;;-1:-1:-1;;;;;16349:23:0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;16349:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;16349:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;16349:38:0;16310:27:::1;:78::i;:::-;16405:4;-1:-1:-1::0;;;;;16399:20:0::1;;16420:9;16399:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;16399:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;16399:31:0;;;;16441:45;16472:2;16476:9;16441:30;:45::i;24606:850::-:0;24866:8;9297:15;9285:8;:27;;9277:64;;;;;-1:-1:-1;;;9277:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9277:64:0;;;;;;;;;;;;;;;24911:4:::1;-1:-1:-1::0;;;;;24900:15:0::1;:4;;24905:1;24900:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;24900:7:0::1;-1:-1:-1::0;;;;;24900:15:0::1;;24892:57;;;::::0;;-1:-1:-1;;;24892:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;24892:57:0;;;;;;;;;;;;;::::1;;24960:13;24976:9;24960:25;;25002:4;-1:-1:-1::0;;;;;24996:19:0::1;;25023:8;24996:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24996:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24996:38:0;;;;;25058:4;-1:-1:-1::0;;;;;25052:20:0::1;;25073:51;25098:7;25107:4;;25112:1;25107:7;;;;;;25073:51;25126:8;25052:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;25052:83:0::1;-1:-1:-1::0;;;;;25052:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;25052:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25052:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;25052:83:0;25045:91:::1;;;;25147:18;25175:4:::0;;-1:-1:-1;;25180:15:0;;25175:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;25175:21:0::1;-1:-1:-1::0;;;;;25168:39:0::1;;25208:2;25168:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;25168:43:0::1;-1:-1:-1::0;;;;;25168:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;25168:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25168:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;25168:43:0;25222:44:::1;::::0;;25168:43:::1;25222:44:::0;;::::1;::::0;;;;;;;;;;;25168:43;;-1:-1:-1;25222:44:0::1;::::0;;;25257:4;;;;;;25222:44;::::1;::::0;25257:4;;25222:44;25257:4;25222:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25263:2:0;;-1:-1:-1;25222:34:0::1;::::0;-1:-1:-1;;25222:44:0:i:1;:::-;25365:12:::0;25299:62:::1;25347:13:::0;25306:4;;-1:-1:-1;;25311:15:0;;25306:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;25306:21:0::1;-1:-1:-1::0;;;;;25299:39:0::1;;25339:2;25299:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;25299:43:0::1;-1:-1:-1::0;;;;;25299:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;12813:865:0::0;13067:12;13081;13048:8;9297:15;9285:8;:27;;9277:64;;;;;-1:-1:-1;;;9277:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9277:64:0;;;;;;;;;;;;;;;13106:12:::1;13121:49;13146:7;13155:6;13163;13121:24;:49::i;:::-;13181:62;::::0;;-1:-1:-1;;;13181:62:0;;13215:10:::1;13181:62;::::0;::::1;::::0;-1:-1:-1;;;;;13181:33:0;::::1;:62:::0;;;;;;;;;;;;;;13106:64;;-1:-1:-1;13181:33:0;;::::1;::::0;:62;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;13181:33:0;:62;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;13181:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;13181:62:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;13311:29:0::1;::::0;;-1:-1:-1;;;13311:29:0;;-1:-1:-1;;;;;13311:29:0;;::::1;;::::0;::::1;::::0;;;13281:12:::1;::::0;;;13311:25;;::::1;::::0;::::1;::::0;:29;;;;;;;;;;;13281:12;13311:25;:29;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;13311:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;13311:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;13311:29:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;13311:29:0;-1:-1:-1;13352:14:0::1;13371:43;13399:6:::0;13407;13371:27:::1;:43::i;:::-;13351:63;;;13456:6;-1:-1:-1::0;;;;;13446:16:0::1;:6;-1:-1:-1::0;;;;;13446:16:0::1;;:58;;13487:7;13496;13446:58;;;13466:7;13475;13446:58;13425:79:::0;;-1:-1:-1;13425:79:0;-1:-1:-1;13523:21:0;;::::1;;13515:72;;;;-1:-1:-1::0;;;13515:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13617:10;13606:7;:21;;13598:72;;;;-1:-1:-1::0;;;13598:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9352:1;;;;12813:865:::0;;;;;;;;;;;:::o;9140:41::-;;;:::o;27084:253::-;27228:21;27274:55;27305:7;27314:8;27324:4;27274:30;:55::i;15046:669::-;15335:16;15353:14;15380:12;15395:46;15420:7;15429:5;15436:4;15395:24;:46::i;:::-;15380:61;;15452:10;15465;:33;;15489:9;15465:33;;;-1:-1:-1;;15465:33:0;15509:80;;;-1:-1:-1;;;15509:80:0;;15537:10;15509:80;;;;15557:4;15509:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15452:46;;-1:-1:-1;;;;;;15509:27:0;;;;;:80;;;;;-1:-1:-1;;15509:80:0;;;;;;;;-1:-1:-1;15509:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;15509:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15509:80:0;;;;15627;15646:5;15653:9;15664:14;15680:12;15694:2;15698:8;15627:18;:80::i;:::-;15600:107;;;;-1:-1:-1;15046:669:0;-1:-1:-1;;;;;;;;;;;;;15046:669:0:o;11052:738::-;11340:12;11354;11368:14;11321:8;9297:15;9285:8;:27;;9277:64;;;;;-1:-1:-1;;;9277:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9277:64:0;;;;;;;;;;;;;;;11416:85:::1;11430:6;11438;11446:14;11462;11478:10;11490;11416:13;:85::i;:::-;11395:106:::0;;-1:-1:-1;11395:106:0;-1:-1:-1;11512:12:0::1;11527:49;11552:7;11561:6:::0;11569;11527:24:::1;:49::i;:::-;11512:64;;11587:66;11619:6;11627:10;11639:4;11645:7;11587:31;:66::i;:::-;11664;11696:6;11704:10;11716:4;11722:7;11664:31;:66::i;:::-;11768:4;-1:-1:-1::0;;;;;11753:25:0::1;;11779:2;11753:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;11753:29:0::1;-1:-1:-1::0;;;;;11753:29:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;11753:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;11753:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;11753:29:0;11052:738;;;;-1:-1:-1;11753:29:0;;-1:-1:-1;11052:738:0;;-1:-1:-1;;;;;;;;;11052:738:0:o;11796:974::-;12049:16;12067:14;12083;12030:8;9297:15;9285:8;:27;;9277:64;;;;;-1:-1:-1;;;9277:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9277:64:0;;;;;;;;;;;;;;;12137:176:::1;12165:5;12185:4;12204:18;12237:9;12261:14;12290:12;12137:13;:176::i;:::-;12110:203:::0;;-1:-1:-1;12110:203:0;-1:-1:-1;12324:12:0::1;12339:46;12364:7;12373:5:::0;12380:4:::1;12339:24;:46::i;:::-;12324:61;;12396:69;12428:5;12435:10;12447:4;12453:11;12396:31;:69::i;:::-;12482:4;-1:-1:-1::0;;;;;12476:19:0::1;;12503:9;12476:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;12476:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;12476:39:0;;;;;12539:4;-1:-1:-1::0;;;;;12533:20:0::1;;12554:4;12560:9;12533:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;12533:37:0::1;-1:-1:-1::0;;;;;12533:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;12533:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;12533:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;12533:37:0;12526:45:::1;;;;12609:4;-1:-1:-1::0;;;;;12594:25:0::1;;12620:2;12594:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;12594:29:0::1;-1:-1:-1::0;;;;;12594:29:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;12594:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;12594:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;12594:29:0;;-1:-1:-1;12674:9:0::1;:21:::0;-1:-1:-1;12670:92:0::1;;;12697:65;12728:10;12752:9;12740;:21;12697:30;:65::i;:::-;9352:1;11796:974:::0;;;;;;;;;;;:::o;21709:810::-;21922:21;21894:8;9297:15;9285:8;:27;;9277:64;;;;;-1:-1:-1;;;9277:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9277:64:0;;;;;;;;;;;;;;;21980:4:::1;-1:-1:-1::0;;;;;21969:15:0::1;:4;;21974:1;21969:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;21969:7:0::1;-1:-1:-1::0;;;;;21969:15:0::1;;21961:57;;;::::0;;-1:-1:-1;;;21961:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;21961:57:0;;;;;;;;;;;;;::::1;;22039:55;22069:7;22078:9;22089:4;;22039:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;22039:29:0::1;::::0;-1:-1:-1;;;22039:55:0:i:1;:::-;22029:65;;22127:9;22113:7;22121:1;22113:10;;;;;;;;;;;;;;:23;;22105:75;;;;-1:-1:-1::0;;;22105:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22197:4;-1:-1:-1::0;;;;;22191:19:0::1;;22218:7;22226:1;22218:10;;;;;;;;;;;;;;22191:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22191:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22191:40:0;;;;;22255:4;-1:-1:-1::0;;;;;22249:20:0::1;;22270:51;22295:7;22304:4;;22309:1;22304:7;;;;;;22270:51;22323:7;22331:1;22323:10;;;;;;;;;;;;;;22249:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;22249:85:0::1;-1:-1:-1::0;;;;;22249:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22249:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22249:85:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22249:85:0;22242:93:::1;;;;22346:24;22352:7;22361:4;;22346:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;22367:2:0;;-1:-1:-1;22346:5:0::1;::::0;-1:-1:-1;;22346:24:0:i:1;:::-;22433:7;22441:1;22433:10;;;;;;;;;;;;;;22421:9;:22;22417:94;;;22445:66;22476:10;22500:7;22508:1;22500:10;;;;;;;;;;;;;;22488:9;:22;22445:30;:66::i;33079:361::-:0;33274:45;;;-1:-1:-1;;;;;33274:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;33274:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;33263:57:0;;;;33228:12;;33242:17;;33263:10;;;;33274:45;33263:57;;;25:18:-1;33263:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;33263:57:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;33227:93:0;;;;33339:7;:57;;;;-1:-1:-1;33351:11:0;;:16;;:44;;;33382:4;33371:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33371:24:0;33351:44;33331:101;;;;;-1:-1:-1;;;33331:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33079:361;;;;;:::o;33858:195::-;33966:12;;;33928;33966;;;;;;;;;-1:-1:-1;;;;;33945:7:0;;;33959:5;;33945:34;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;33945:34:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;33927:52:0;;;33998:7;33990:55;;;;-1:-1:-1;;;33990:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33858:195;;;:::o;30248:517::-;30341:14;30387:1;30376:8;:12;30368:68;;;;-1:-1:-1;;;30368:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30467:1;30455:9;:13;:31;;;;;30485:1;30472:10;:14;30455:31;30447:84;;;;-1:-1:-1;;;30447:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30542:20;30565:17;:8;30578:3;30565:17;:12;:17;:::i;:::-;30542:40;-1:-1:-1;30593:14:0;30610:31;30542:40;30630:10;30610:31;:19;:31;:::i;:::-;30593:48;-1:-1:-1;30652:16:0;30671:40;30695:15;30671:19;:9;30685:4;30671:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;30652:59;;30746:11;30734:9;:23;;;;;;;30248:517;-1:-1:-1;;;;;;;30248:517:0:o;31440:511::-;31541:21;31598:1;31583:4;:11;:16;;31575:59;;;;;-1:-1:-1;;;31575:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;31666:4;:11;31655:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31655:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;31655:23:0;;31645:33;;31702:8;31689:7;31697:1;31689:10;;;;;;;;;;;;;:21;;;;;31726:6;31721:223;31752:1;31738:4;:11;:15;31734:1;:19;31721:223;;;31776:14;31792:15;31811:42;31823:7;31832:4;31837:1;31832:7;;;;;;;;;;;;;;31841:4;31846:1;31850;31846:5;31841:11;;;;;;;;;;;;;;31811;:42::i;:::-;31775:78;;;;31885:47;31898:7;31906:1;31898:10;;;;;;;;;;;;;;31910:9;31921:10;31885:12;:47::i;:::-;31868:7;31876:1;31880;31876:5;31868:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;31755:3:0;;31721:223;;;;31440:511;;;;;:::o;28765:478::-;28854:12;28880:14;28896;28914:26;28925:6;28933;28914:10;:26::i;:::-;29078:32;;;-1:-1:-1;;29078:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;29078:32:0;;;;;29068:43;;;;;;-1:-1:-1;;;;;;28981:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;28981:251:0;;;;;;;28971:262;;;;;;;;;28765:478;-1:-1:-1;;;;;28765:478:0:o;33448:402::-;33673:51;;;-1:-1:-1;;;;;33673:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;33673:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;33662:63:0;;;;33627:12;;33641:17;;33662:10;;;;33673:51;33662:63;;;25:18:-1;33662:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;33662:63:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;33626:99:0;;;;33744:7;:57;;;;-1:-1:-1;33756:11:0;;:16;;:44;;;33787:4;33776:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33776:24:0;33756:44;33736:106;;;;-1:-1:-1;;;33736:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33448:402;;;;;;:::o;17329:735::-;17436:6;17431:626;17462:1;17448:4;:11;:15;17444:1;:19;17431:626;;;17486:13;17501:14;17520:4;17525:1;17520:7;;;;;;;;;;;;;;17529:4;17534:1;17538;17534:5;17529:11;;;;;;;;;;;;;;17485:56;;;;17557:14;17576:42;17604:5;17611:6;17576:27;:42::i;:::-;17556:62;;;17633:14;17650:7;17658:1;17662;17658:5;17650:14;;;;;;;;;;;;;;17633:31;;17680:15;17697;17725:6;-1:-1:-1;;;;;17716:15:0;:5;-1:-1:-1;;;;;17716:15:0;;:61;;17758:9;17774:1;17716:61;;;17740:1;17744:9;17716:61;17679:98;;;;17792:10;17823:1;17809:4;:11;:15;17805:1;:19;:82;;17884:3;17805:82;;;17827:54;17852:7;17861:6;17869:4;17874:1;17878;17874:5;17869:11;;;;;;;;;;;;;;17827:24;:54::i;:::-;17792:95;;17917:48;17942:7;17951:5;17958:6;17917:24;:48::i;:::-;-1:-1:-1;;;;;17902:69:0;;17990:10;18002;18014:2;18028:1;18018:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;18018:12:0;87:42:-1;143:17;;-1:-1;18018:12:0;;17902:143;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17902:143:0;-1:-1:-1;;;;;17902:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;17902:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17902:143:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;17465:3:0;;;;;-1:-1:-1;17431:626:0;;-1:-1:-1;;;;;;;;17431:626:0;;;17329:735;;;:::o;32032:532::-;32133:21;32190:1;32175:4;:11;:16;;32167:59;;;;;-1:-1:-1;;;32167:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;32258:4;:11;32247:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32247:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;32247:23:0;;32237:33;;32311:9;32281:7;32306:1;32289:7;:14;:18;32281:27;;;;;;;;;;;;;;;;;:39;32345:11;;-1:-1:-1;;32345:15:0;32331:226;32362:5;;32331:226;;32390:14;32406:15;32425:42;32437:7;32446:4;32455:1;32451;:5;32446:11;;;;;;;;;;;;;;32459:4;32464:1;32459:7;;;;;;;32425:42;32389:78;;;;32499:46;32511:7;32519:1;32511:10;;;;;;;;;;;;;;32523:9;32534:10;32499:11;:46::i;:::-;32482:7;32494:1;32490;:5;32482:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;32369:3:0;32331:226;;22666:1214;22779:6;22774:1099;22805:1;22791:4;:11;:15;22787:1;:19;22774:1099;;;22829:13;22844:14;22863:4;22868:1;22863:7;;;;;;;;;;;;;;22872:4;22877:1;22881;22877:5;22872:11;;;;;;;;;;;;;;22828:56;;;;22900:14;22919:42;22947:5;22954:6;22919:27;:42::i;:::-;22899:62;;;22976:19;23013:48;23038:7;23047:5;23054:6;23013:24;:48::i;:::-;22976:86;;23077:16;23108:17;23196:13;23211;23229:4;-1:-1:-1;;;;;23229:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23229:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23229:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;23229:18:0;;;;;;;-1:-1:-1;;;;;23195:52:0;;;;-1:-1:-1;23195:52:0;;-1:-1:-1;23263:17:0;;-1:-1:-1;;;;;23304:15:0;;;;;;;:61;;23346:8;23356;23304:61;;;23323:8;23333;23304:61;23262:103;;;;23394:56;23437:12;23401:5;-1:-1:-1;;;;;23394:23:0;;23426:4;23394:38;;;;;;;;;;;;;-1:-1:-1;;;;;23394:38:0;-1:-1:-1;;;;;23394:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;23394:56:0;23380:70;;23480:71;23510:11;23523:12;23537:13;23480:29;:71::i;:::-;23465:86;;22774:1099;;;;23582:15;23599;23627:6;-1:-1:-1;;;;;23618:15:0;:5;-1:-1:-1;;;;;23618:15:0;;:67;;23663:12;23682:1;23618:67;;;23642:1;23646:12;23618:67;23581:104;;;;23700:10;23731:1;23717:4;:11;:15;23713:1;:19;:82;;23792:3;23713:82;;;23735:54;23760:7;23769:6;23777:4;23782:1;23786;23782:5;23777:11;;;;;;;23735:54;23848:12;;;23858:1;23848:12;;;;;;;;;;-1:-1:-1;;;23810:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;23810:51:0;;;;;;;;;;;;;;;;;;;;;;23700:95;;-1:-1:-1;23810:9:0;;;;;;23820:10;;23832;;23700:95;;23848:12;;23810:51;;;;;;;;23848:12;;23810:51;;;;23848:12;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;23810:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23810:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;22808:3:0;;;;;-1:-1:-1;22774:1099:0;;-1:-1:-1;;;;;;;;;;22774:1099:0;27873:129;27957:5;;;27952:16;;;;27944:50;;;;;-1:-1:-1;;;27944:50:0;;;;;;;;;;;;-1:-1:-1;;;27944:50:0;;;;;;;;;;;;;;30886:472;30979:13;31025:1;31013:9;:13;31005:70;;;;-1:-1:-1;;;31005:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31106:1;31094:9;:13;:31;;;;;31124:1;31111:10;:14;31094:31;31086:84;;;;-1:-1:-1;;;31086:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31181:14;31198:34;31227:4;31198:24;:9;31212;31198:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;31181:51;-1:-1:-1;31243:16:0;31262:34;31292:3;31262:25;:10;31277:9;31262:25;:14;:25;:::i;:34::-;31243:53;;31318:32;31348:1;31331:11;31319:9;:23;;;;;;;31318:32;:29;:32;:::i;:::-;31307:43;30886:472;-1:-1:-1;;;;;;30886:472:0:o;29805:321::-;29887:12;29930:1;29920:7;:11;29912:61;;;;-1:-1:-1;;;29912:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30003:1;29992:8;:12;:28;;;;;30019:1;30008:8;:12;29992:28;29984:81;;;;-1:-1:-1;;;29984:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30110:8;30086:21;:7;30098:8;30086:21;:11;:21;:::i;:::-;:32;;;;;;;29805:321;-1:-1:-1;;;;29805:321:0:o;28324:349::-;28399:14;28415;28460:6;-1:-1:-1;;;;;28450:16:0;:6;-1:-1:-1;;;;;28450:16:0;;;28442:66;;;;-1:-1:-1;;;28442:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28547:6;-1:-1:-1;;;;;28538:15:0;:6;-1:-1:-1;;;;;28538:15:0;;:53;;28576:6;28584;28538:53;;;28557:6;28565;28538:53;28519:72;;-1:-1:-1;28519:72:0;-1:-1:-1;;;;;;28610:20:0;;28602:63;;;;;-1:-1:-1;;;28602:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;28324:349;;;;;:::o;9656:1390::-;9969:50;;;-1:-1:-1;;;9969:50:0;;-1:-1:-1;;;;;9969:50:0;;;;;;;;;;;;;;;;9874:12;;;;;;9987:7;9969:34;;;;;;:50;;;;;;;;;;;;;;;:34;:50;;;2:2:-1;;;;27:1;24;17:12;2:2;9969:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9969:50:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;9969:50:0;-1:-1:-1;;;;;9969:64:0;;9965:150;;;10050:53;;;-1:-1:-1;;;10050:53:0;;-1:-1:-1;;;;;10050:53:0;;;;;;;;;;;;;;;;10068:7;10050:37;;;;;;:53;;;;;;;;;;;;;;;-1:-1:-1;10050:37:0;:53;;;2:2:-1;;;;27:1;24;17:12;2:2;10050:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10050:53:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;9965:150:0;10126:13;10141;10158:53;10187:7;10196:6;10204;10158:28;:53::i;:::-;10125:86;;;;10226:8;10238:1;10226:13;:30;;;;-1:-1:-1;10243:13:0;;10226:30;10222:817;;;10295:14;;-1:-1:-1;10311:14:0;;-1:-1:-1;10222:817:0;;;10359:19;10381:58;10404:14;10420:8;10430;10381:22;:58::i;:::-;10359:80;;10476:14;10458;:32;10454:574;;10537:10;10519:14;:28;;10511:79;;;;-1:-1:-1;;;10511:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10631:14;;-1:-1:-1;10647:14:0;-1:-1:-1;10647:14:0;10454:574;;;10703:19;10725:58;10748:14;10764:8;10774;10725:22;:58::i;:::-;10703:80;;10827:14;10809;:32;;10802:40;;;;10887:10;10869:14;:28;;10861:79;;;;-1:-1:-1;;;10861:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10981:14;-1:-1:-1;10997:14:0;;-1:-1:-1;10454:574:0;10222:817;;9656:1390;;;;;;;;;;;:::o;28010:142::-;28062:6;28089;;;:30;;-1:-1:-1;;28104:5:0;;;28118:1;28113;28104:5;28113:1;28099:15;;;;;:20;28089:30;28081:63;;;;;-1:-1:-1;;;28081:63:0;;;;;;;;;;;;-1:-1:-1;;;28081:63:0;;;;;;;;;;;;;;27737:128;27821:5;;;27816:16;;;;27808:49;;;;;-1:-1:-1;;;27808:49:0;;;;;;;;;;;;-1:-1:-1;;;27808:49:0;;;;;;;;;;;;;;29301:391;29394:13;29409;29436:14;29455:26;29466:6;29474;29455:10;:26::i;:::-;29435:46;;;29493:13;29508;29541:32;29549:7;29558:6;29566;29541:7;:32::i;:::-;-1:-1:-1;;;;;29526:60:0;;:62;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29526:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29526:62:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29526:62:0;;;;;;;-1:-1:-1;;;;;29492:96:0;;;;-1:-1:-1;29492:96:0;;-1:-1:-1;;;;;;29622:16:0;;;;;;;:62;;29665:8;29675;29622:62;;;29642:8;29652;29622:62;29599:85;;;;-1:-1:-1;29301:391:0;-1:-1:-1;;;;;;;29301:391:0:o

Swarm Source

ipfs://422c67d853e0f5b6268cad9d053db249c29440e0eeb51eb3b5d8dc5bb5812658
Block Transaction Gas Used Reward
Age Block Fee Address Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading