Contract 0x1eedff2a89e58c5fc4650c2de45dda0964c3d343

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x13c6a4961dd0764a8aed35fa312233c02f8506c8d160ef3d3f8fc3d177b3e321Add Liquidity242989282022-01-29 9:35:081 hr 48 mins ago0x697819d4a56d4b531bfeba56b2ff8ecee4c5759c IN  0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430 MATIC0.007736700031 2.328005433
0x43f14315fce1e1898a3d48c99768ef66e45e59616228486d7305894d783df9bcAdd Liquidity242988122022-01-29 9:27:521 hr 55 mins ago0xd4a94f83d6c47f9d7f104fa65be3ba5c05eeb296 IN  0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430 MATIC0.097559085205 32.009999841
0x57a3c588936e2a82cd387039125fc2859979dbf3e983439687e3e9b90302cd97Add Liquidity242987622022-01-29 9:26:121 hr 57 mins ago0xd4a94f83d6c47f9d7f104fa65be3ba5c05eeb296 IN  0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430 MATIC0.093632769629 30.069997347
0x42ec2d4782a610e62514ae9ab02ab1616a2661e9ea624d454ec9cf01ce2793daAdd Liquidity242987502022-01-29 9:25:441 hr 57 mins ago0xd4a94f83d6c47f9d7f104fa65be3ba5c05eeb296 IN  0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430 MATIC0.007693977101 2.425000812
0x751a62c7117320943ae09943d75da46b52f7affbf3b18be8796f8fd86d8d1dacAdd Liquidity242986852022-01-29 9:23:302 hrs ago0xd4a94f83d6c47f9d7f104fa65be3ba5c05eeb296 IN  0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430 MATIC0.094222163307 30.083330159
0x2a4008eda41be393eae36556c5e177b456e460d5886a9d7fb90fea7a9485d0beAdd Liquidity242986322022-01-29 9:21:442 hrs 1 min ago0xd4a94f83d6c47f9d7f104fa65be3ba5c05eeb296 IN  0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430 MATIC0.094766385016 30.236883774
0x4789cb9a1182eb669d92147a867d9ac7f846e3134badb1a37b98c57a8a518d40Add Liquidity242985452022-01-29 9:18:422 hrs 4 mins ago0x6c1739456c14f0c1935a68d4acb94eb07ce18b0b IN  0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430 MATIC0.065853416415 29.100000007
0xa6108f47dabfe7992c18a54a537b9607d3ab7e8f4ff87ad3e649c5ae920fb267Add Liquidity242984922022-01-29 9:16:522 hrs 6 mins ago0x6c1739456c14f0c1935a68d4acb94eb07ce18b0b IN  0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430 MATIC0.07047126441 31.172044486
0x79eb14746bc6249c1fa3c6f5735e5fb5c55296863b496f343e38ed48fbf84ab8Add Liquidity242983942022-01-29 9:13:322 hrs 10 mins ago0x6c1739456c14f0c1935a68d4acb94eb07ce18b0b IN  0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430 MATIC0.007561308063 2.305203054
0x8195af21874ba395f07b209e2bc54dc74ab8c0d5bd90ca3f42652b7f03ff2b99Add Liquidity242982422022-01-29 9:08:202 hrs 15 mins ago0x6c1739456c14f0c1935a68d4acb94eb07ce18b0b IN  0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430 MATIC0.10235961472 31.04
0x1be278c03f54ae65f5158e4ab94f2e77ce88e0bcd6de7cc4c568aa292479bdc5Add Liquidity242981082022-01-29 9:03:402 hrs 20 mins ago0x2c23f360a93b9b29bc0869422219d4a3c29fccb1 IN  0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430 MATIC0.071315820824 31.520150001
0x1d9a9cf1d048e440f6335444765d42530066b86aae62a106ff402b0c3033ac3eAdd Liquidity242976902022-01-29 8:49:202 hrs 34 mins ago0xeb5663f9dab0548eba712e33f850358d3cfbf6da IN  0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430 MATIC0.004467638704 1.979566766
0x6198d9808ae4a048ec92abbfb1d9736f5120e20398d2cd4b62159ba6dc21e859Add Liquidity ET...242976502022-01-29 8:47:042 hrs 36 mins ago0xeb5663f9dab0548eba712e33f850358d3cfbf6da IN  0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430.0291054 MATIC0.004941448578 2.213232405
0x9a0c510180bd4bd7804ab61290cbfde5a35871bee0a137f7aca08761b5590793Swap Exact Token...242976012022-01-29 8:42:102 hrs 41 mins ago0x8f72f61839182eef7c250c760bc557dcf24a5568 IN  0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430 MATIC0.016978840231 32.010000002
0xf19acc4fd15fd0754daecbc6c337aedac81451123242c02687f0572a77326f27Add Liquidity ET...242975532022-01-29 8:40:222 hrs 43 mins ago0x8f72f61839182eef7c250c760bc557dcf24a5568 IN  0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430.029651 MATIC0.076099637985 33.950000016
0x4a92351471cc7634f1bf204c1189439ff59766d7d284d55e447df1b594972dfdAdd Liquidity ET...242973892022-01-29 8:34:422 hrs 48 mins ago0x8f72f61839182eef7c250c760bc557dcf24a5568 IN  0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430.0635709 MATIC0.067284165468 30.1088
0x719f2e0c3f2bc89a38243328c985fe36bd6292c61d1225b12afd65c6cb819d8eAdd Liquidity ET...242970882022-01-29 8:24:242 hrs 59 mins ago0x8f72f61839182eef7c250c760bc557dcf24a5568 IN  0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430.1 MATIC0.0834594208 31.04
0x62d9c0db43bd5ca2f1b5e04bc75f0755236d004dd96a4c048aecfd1923a93849Add Liquidity242962302022-01-29 7:48:283 hrs 35 mins agoTetcoin: Deployer IN  0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430 MATIC0.070016980303 31.049699979
0xab67691c81848c5487b98b6be65c74e676fc8a801a86895833e1bb8ccdd2da69Add Liquidity242957872022-01-29 7:31:543 hrs 51 mins ago0x6bf272d1b244869bd977944eb838e5cdbd1263d2 IN  0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430 MATIC0.075082547758 32.283821297
0x20a5c887e41822687830cd75f17d10ecccfac720f93029721aea11134ba219e3Swap Exact ETH F...242950232022-01-29 7:01:384 hrs 22 mins ago0x6c1739456c14f0c1935a68d4acb94eb07ce18b0b IN  0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430.1 MATIC0.001084522847 2.352309417
0x77319edb751ad0cceb1a7dc7f849d233d2aa2e3a24c5d5abcf1d56723bba66ddAdd Liquidity ET...242918382022-01-29 5:00:226 hrs 23 mins ago0x8f72f61839182eef7c250c760bc557dcf24a5568 IN  0x1eedff2a89e58c5fc4650c2de45dda0964c3d3431 MATIC0.001465908109 2.738019218
0xc909628771e13bb3dda0a3424cb369a50c9fea5e54e2f9b8cc9b960af60306f3Swap Exact ETH F...242914982022-01-29 4:46:366 hrs 37 mins ago0x2c23f360a93b9b29bc0869422219d4a3c29fccb1 IN  0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430.1 MATIC0.0107684841 32.010000001
0x86914345d61e276f4c2524baa70a9d38520e540d8555b5293dde495fc2911aefSwap ETH For Exa...242630032022-01-28 11:09:151 day 14 mins ago0x6c1739456c14f0c1935a68d4acb94eb07ce18b0b IN  0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430.303241539114488 MATIC0.000928210275 29.167906076
0x1855ad3aeb4551d46ba9416ce8593cdc6bffc2bb07423c1497a21eb1f909e28fSwap ETH For Exa...242629942022-01-28 11:08:571 day 14 mins ago0x8acd6755c2da71d778c3b6793f6ad6fafe29a244 IN  0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430.303241539114488 MATIC0.016793926849 29.681999398
0x4d6b08accc709b5edf6adbfc84986feee7ef959aff9fd344136e6e91d99ab8d2Swap ETH For Exa...242622372022-01-28 10:40:441 day 42 mins ago0x115efedb74314083bee38494e7e9e6c498328823 IN  0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430.272873341411604 MATIC0.000939343376 29.506624042
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x43f14315fce1e1898a3d48c99768ef66e45e59616228486d7305894d783df9bc242988122022-01-29 9:27:521 hr 55 mins ago 0x1eedff2a89e58c5fc4650c2de45dda0964c3d343 0xe8e96dc55573f308074569521e37f3bd532d2e9d0.000164807805345203 MATIC
0x43f14315fce1e1898a3d48c99768ef66e45e59616228486d7305894d783df9bc242988122022-01-29 9:27:521 hr 55 mins ago Polygon: WMATIC Token 0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430.000164807805345203 MATIC
0x43f14315fce1e1898a3d48c99768ef66e45e59616228486d7305894d783df9bc242988122022-01-29 9:27:521 hr 55 mins ago 0x1eedff2a89e58c5fc4650c2de45dda0964c3d343 Polygon: WMATIC Token0.000030889565548616 MATIC
0x43f14315fce1e1898a3d48c99768ef66e45e59616228486d7305894d783df9bc242988122022-01-29 9:27:521 hr 55 mins ago 0xe8e96dc55573f308074569521e37f3bd532d2e9d 0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430.000030889565548616 MATIC
0x43f14315fce1e1898a3d48c99768ef66e45e59616228486d7305894d783df9bc242988122022-01-29 9:27:521 hr 55 mins ago 0x1eedff2a89e58c5fc4650c2de45dda0964c3d343 0xe8e96dc55573f308074569521e37f3bd532d2e9d0.000030889565548616 MATIC
0x43f14315fce1e1898a3d48c99768ef66e45e59616228486d7305894d783df9bc242988122022-01-29 9:27:521 hr 55 mins ago Polygon: WMATIC Token 0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430.000030889565548616 MATIC
0x43f14315fce1e1898a3d48c99768ef66e45e59616228486d7305894d783df9bc242988122022-01-29 9:27:521 hr 55 mins ago 0x1eedff2a89e58c5fc4650c2de45dda0964c3d343 0xe8e96dc55573f308074569521e37f3bd532d2e9d0.000061784175011819 MATIC
0x43f14315fce1e1898a3d48c99768ef66e45e59616228486d7305894d783df9bc242988122022-01-29 9:27:521 hr 55 mins ago Polygon: WMATIC Token 0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430.000061784175011819 MATIC
0x57a3c588936e2a82cd387039125fc2859979dbf3e983439687e3e9b90302cd97242987622022-01-29 9:26:121 hr 57 mins ago 0x1eedff2a89e58c5fc4650c2de45dda0964c3d343 0xe8e96dc55573f308074569521e37f3bd532d2e9d0.000164882561076345 MATIC
0x57a3c588936e2a82cd387039125fc2859979dbf3e983439687e3e9b90302cd97242987622022-01-29 9:26:121 hr 57 mins ago Polygon: WMATIC Token 0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430.000164882561076345 MATIC
0x57a3c588936e2a82cd387039125fc2859979dbf3e983439687e3e9b90302cd97242987622022-01-29 9:26:121 hr 57 mins ago 0x1eedff2a89e58c5fc4650c2de45dda0964c3d343 Polygon: WMATIC Token0.000030903578244153 MATIC
0x57a3c588936e2a82cd387039125fc2859979dbf3e983439687e3e9b90302cd97242987622022-01-29 9:26:121 hr 57 mins ago 0xe8e96dc55573f308074569521e37f3bd532d2e9d 0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430.000030903578244153 MATIC
0x57a3c588936e2a82cd387039125fc2859979dbf3e983439687e3e9b90302cd97242987622022-01-29 9:26:121 hr 57 mins ago 0x1eedff2a89e58c5fc4650c2de45dda0964c3d343 0xe8e96dc55573f308074569521e37f3bd532d2e9d0.000030903578244153 MATIC
0x57a3c588936e2a82cd387039125fc2859979dbf3e983439687e3e9b90302cd97242987622022-01-29 9:26:121 hr 57 mins ago Polygon: WMATIC Token 0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430.000030903578244153 MATIC
0x57a3c588936e2a82cd387039125fc2859979dbf3e983439687e3e9b90302cd97242987622022-01-29 9:26:121 hr 57 mins ago 0x1eedff2a89e58c5fc4650c2de45dda0964c3d343 0xe8e96dc55573f308074569521e37f3bd532d2e9d0.000061812203974375 MATIC
0x57a3c588936e2a82cd387039125fc2859979dbf3e983439687e3e9b90302cd97242987622022-01-29 9:26:121 hr 57 mins ago Polygon: WMATIC Token 0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430.000061812203974375 MATIC
0x42ec2d4782a610e62514ae9ab02ab1616a2661e9ea624d454ec9cf01ce2793da242987502022-01-29 9:25:441 hr 57 mins ago 0x1eedff2a89e58c5fc4650c2de45dda0964c3d343 0xe8e96dc55573f308074569521e37f3bd532d2e9d0.00016495736974021 MATIC
0x42ec2d4782a610e62514ae9ab02ab1616a2661e9ea624d454ec9cf01ce2793da242987502022-01-29 9:25:441 hr 57 mins ago Polygon: WMATIC Token 0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430.00016495736974021 MATIC
0x42ec2d4782a610e62514ae9ab02ab1616a2661e9ea624d454ec9cf01ce2793da242987502022-01-29 9:25:441 hr 57 mins ago 0x1eedff2a89e58c5fc4650c2de45dda0964c3d343 Polygon: WMATIC Token0.000030917600862727 MATIC
0x42ec2d4782a610e62514ae9ab02ab1616a2661e9ea624d454ec9cf01ce2793da242987502022-01-29 9:25:441 hr 57 mins ago 0xe8e96dc55573f308074569521e37f3bd532d2e9d 0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430.000030917600862727 MATIC
0x42ec2d4782a610e62514ae9ab02ab1616a2661e9ea624d454ec9cf01ce2793da242987502022-01-29 9:25:441 hr 57 mins ago 0x1eedff2a89e58c5fc4650c2de45dda0964c3d343 0xe8e96dc55573f308074569521e37f3bd532d2e9d0.000030917600862727 MATIC
0x42ec2d4782a610e62514ae9ab02ab1616a2661e9ea624d454ec9cf01ce2793da242987502022-01-29 9:25:441 hr 57 mins ago Polygon: WMATIC Token 0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430.000030917600862727 MATIC
0x42ec2d4782a610e62514ae9ab02ab1616a2661e9ea624d454ec9cf01ce2793da242987502022-01-29 9:25:441 hr 57 mins ago 0x1eedff2a89e58c5fc4650c2de45dda0964c3d343 0xe8e96dc55573f308074569521e37f3bd532d2e9d0.000061840252786442 MATIC
0x42ec2d4782a610e62514ae9ab02ab1616a2661e9ea624d454ec9cf01ce2793da242987502022-01-29 9:25:441 hr 57 mins ago Polygon: WMATIC Token 0x1eedff2a89e58c5fc4650c2de45dda0964c3d3430.000061840252786442 MATIC
0x751a62c7117320943ae09943d75da46b52f7affbf3b18be8796f8fd86d8d1dac242986852022-01-29 9:23:302 hrs ago 0x1eedff2a89e58c5fc4650c2de45dda0964c3d343 0xe8e96dc55573f308074569521e37f3bd532d2e9d0.000165032231387758 MATIC
[ 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 GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2021-12-08
*/

/**
 *Submitted for verification at polygonscan.com on 2021-05-18
*/

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol

pragma solidity >=0.5.0;

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

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

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

// File: @uniswap/lib/contracts/libraries/TransferHelper.sol

pragma solidity >=0.6.0;

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

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

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

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

// File: contracts/interfaces/IUniswapV2Router01.sol

pragma solidity >=0.6.2;

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

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

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

// File: contracts/interfaces/IUniswapV2Router02.sol

pragma solidity >=0.6.2;


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

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

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol

pragma solidity >=0.5.0;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

// File: contracts/libraries/SafeMath.sol

pragma solidity =0.6.6;

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

// File: contracts/libraries/UniswapV2Library.sol

pragma solidity >=0.5.0;



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'a45b6881271b3d945937baee765df5f40c309498fbe1fa5ec32505dce8ae790d' // init code hash
            ))));
    }

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

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

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

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

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

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

// File: contracts/interfaces/IERC20.sol

pragma solidity >=0.5.0;

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

// File: contracts/interfaces/IWETH.sol

pragma solidity >=0.5.0;

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

// File: contracts/UniswapV2Router02.sol

pragma solidity =0.6.6;








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

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

60c060405234801561001057600080fd5b5060405162004768380380620047688339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6145e3620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118eb52806119e55280611a9b5280611b695280611caf5280611d375280611f7c5280611ff752806120a652806121725280612207528061227b528061277952806129ec5280612a425280612a765280612aea5280612c8a5280612dcd5280612e55525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611bfc5280611d695280611ecc52806122ad528061250652806126fe5280612727528061275752806128c45280612a205280612d1d5280612e87528061372e52806137715280613a545280613bd3528061400352806140b1528061413152506145e36000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124b8565b348015610a1c57600080fd5b5061088a6126fc565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612720945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561274d565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612861565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561299d565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c42565b6000808242811015610cde576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124b8565b9093509150610d1d898685612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da5858361312e565b50965096945050505050565b6000610dbe848484613226565b949350505050565b60608142811015610e0c576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b815260206004820152601d60248201526000805160206144ab833981519152604482015290519081900360640190fd5b610efd7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b815260040180806020018281038252602b815260200180614514602b913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b0316613462565b85600081518110610fe657fe5b6020026020010151613522565b6110328287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061367f915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b602002602001015161312e565b509695505050505050565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846138c5565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f613462565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124b8565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b6112c77f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b815260040180806020018281038252602b815260200180614514602b913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e88287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b606081428110156113b4576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b815260206004820152601d60248201526000805160206144ab833981519152604482015290519081900360640190fd5b6114a57f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b81526004018080602001828103825260278152602001806144846027913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a613522565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a49290918991899182918501908490808284376000920191909152508892506139fd915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613d0816565b10156118935760405162461bcd60e51b815260040180806020018281038252602b815260200180614514602b913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b815260206004820152601d60248201526000805160206144ab833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c28585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506139fd915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b815260040180806020018281038252602b815260200180614514602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b50505050611893848261312e565b60608142811015611b67576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b815260206004820152601d60248201526000805160206144ab833981519152604482015290519081900360640190fd5b611c557f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b815260040180806020018281038252602b815260200180614514602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d957f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b5095945050505050565b6000610dbe848484613d58565b60608142811015611ec7576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b611f257f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b81526004018080602001828103825260278152602001806144846027913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613e48565b60008142811015611ff1576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b612020887f000000000000000000000000000000000000000000000000000000000000000089898930896124b8565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e8848361312e565b8042811015612170576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b815260206004820152601d60248201526000805160206144ab833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122d97f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a9182918501908490808284376000920191909152508992506139fd915050565b87611856828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b60008082428110156124ff576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b600061252c7f00000000000000000000000000000000000000000000000000000000000000008c8c613462565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561258757600080fd5b505af115801561259b573d6000803e3d6000fd5b505050506040513d60208110156125b157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b505050506040513d604081101561262857600080fd5b508051602090910151909250905060006126428e8e613ef4565b509050806001600160a01b03168e6001600160a01b031614612665578183612668565b82825b90975095508a8710156126ac5760405162461bcd60e51b81526004018080602001828103825260268152602001806144cb6026913960400191505060405180910390fd5b898610156126eb5760405162461bcd60e51b81526004018080602001828103825260268152602001806144116026913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f00000000000000000000000000000000000000000000000000000000000000008484613316565b600080600061279d7f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613462565b90506000876127ac578c6127b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561282657600080fd5b505af115801561283a573d6000803e3d6000fd5b5050505061284c8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128aa576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b6128b88c8c8c8c8c8c613fd2565b909450925060006128ea7f00000000000000000000000000000000000000000000000000000000000000008e8e613462565b90506128f88d338388613522565b6129048c338387613522565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561295c57600080fd5b505af1158015612970573d6000803e3d6000fd5b505050506040513d602081101561298657600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129e6576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b612a148a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613fd2565b90945092506000612a667f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050612a748b338388613522565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612acf57600080fd5b505af1158015612ae3573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b6857600080fd5b505af1158015612b7c573d6000803e3d6000fd5b505050506040513d6020811015612b9257600080fd5b5051612b9a57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b505050506040513d6020811015612c1c57600080fd5b5051925034841015612c3457612c343385340361312e565b505096509650969350505050565b60608142811015612c88576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612cbf57fe5b905060200201356001600160a01b03166001600160a01b031614612d18576040805162461bcd60e51b815260206004820152601d60248201526000805160206144ab833981519152604482015290519081900360640190fd5b612d767f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91503482600081518110612d8657fe5b60200260200101511115612dcb5760405162461bcd60e51b81526004018080602001828103825260278152602001806144846027913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e0757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e3a57600080fd5b505af1158015612e4e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612eb37f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612ec057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b505050506040513d6020811015612f4157600080fd5b5051612f4957fe5b612f888287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b81600081518110612f9557fe5b6020026020010151341115611e6a57611e6a3383600081518110612fb557fe5b6020026020010151340361312e565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130415780518252601f199092019160209182019101613022565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130a3576040519150601f19603f3d011682016040523d82523d6000602084013e6130a8565b606091505b50915091508180156130d65750805115806130d657508080602001905160208110156130d357600080fd5b50515b613127576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061317a5780518252601f19909201916020918201910161315b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131dc576040519150601f19603f3d011682016040523d82523d6000602084013e6131e1565b606091505b50509050806132215760405162461bcd60e51b81526004018080602001828103825260238152602001806144f16023913960400191505060405180910390fd5b505050565b60008084116132665760405162461bcd60e51b815260040180806020018281038252602b815260200180614563602b913960400191505060405180910390fd5b6000831180156132765750600082115b6132b15760405162461bcd60e51b81526004018080602001828103825260288152602001806144376028913960400191505060405180910390fd5b60006132c5856103e563ffffffff61424616565b905060006132d9828563ffffffff61424616565b905060006132ff836132f3886103e863ffffffff61424616565b9063ffffffff6142a916565b905080828161330a57fe5b04979650505050505050565b606060028251101561336f576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561338757600080fd5b506040519080825280602002602001820160405280156133b1578160200160208202803683370190505b50905082816000815181106133c257fe5b60200260200101818152505060005b600183510381101561345a57600080613414878685815181106133f057fe5b602002602001015187866001018151811061340757fe5b60200260200101516142f8565b9150915061343684848151811061342757fe5b60200260200101518383613226565b84846001018151811061344557fe5b602090810291909101015250506001016133d1565b509392505050565b60008060006134718585613ef4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527fa45b6881271b3d945937baee765df5f40c309498fbe1fa5ec32505dce8ae790d609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135a75780518252601f199092019160209182019101613588565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613609576040519150601f19603f3d011682016040523d82523d6000602084013e61360e565b606091505b509150915081801561363c57508051158061363c575080806020019051602081101561363957600080fd5b50515b6136775760405162461bcd60e51b815260040180806020018281038252602481526020018061453f6024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138bf5760008084838151811061369d57fe5b60200260200101518584600101815181106136b457fe5b60200260200101519150915060006136cc8383613ef4565b50905060008785600101815181106136e057fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461370e57826000613712565b6000835b91509150600060028a51038810613729578861376a565b61376a7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061375d57fe5b6020026020010151613462565b90506137977f00000000000000000000000000000000000000000000000000000000000000008888613462565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137d4576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561384557818101518382015260200161382d565b50505050905090810190601f1680156138725780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561389457600080fd5b505af11580156138a8573d6000803e3d6000fd5b505060019099019850613682975050505050505050565b50505050565b606060028251101561391e576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561393657600080fd5b50604051908082528060200260200182016040528015613960578160200160208202803683370190505b509050828160018351038151811061397457fe5b60209081029190910101528151600019015b801561345a576000806139b6878660018603815181106139a257fe5b602002602001015187868151811061340757fe5b915091506139d88484815181106139c957fe5b60200260200101518383613d58565b8460018503815181106139e757fe5b6020908102919091010152505060001901613986565b60005b600183510381101561322157600080848381518110613a1b57fe5b6020026020010151858460010181518110613a3257fe5b6020026020010151915091506000613a4a8383613ef4565b5090506000613a7a7f00000000000000000000000000000000000000000000000000000000000000008585613462565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613abb57600080fd5b505afa158015613acf573d6000803e3d6000fd5b505050506040513d6060811015613ae557600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613b1b578284613b1e565b83835b91509150613b7c828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613b89868383613226565b945050505050600080856001600160a01b0316886001600160a01b031614613bb357826000613bb7565b6000835b91509150600060028c51038a10613bce578a613c02565b613c027f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061375d57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c8c578181015183820152602001613c74565b50505050905090810190601f168015613cb95780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613cdb57600080fd5b505af1158015613cef573d6000803e3d6000fd5b50506001909b019a50613a009950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d985760405162461bcd60e51b815260040180806020018281038252602c8152602001806143c0602c913960400191505060405180910390fd5b600083118015613da85750600082115b613de35760405162461bcd60e51b81526004018080602001828103825260288152602001806144376028913960400191505060405180910390fd5b6000613e076103e8613dfb868863ffffffff61424616565b9063ffffffff61424616565b90506000613e216103e5613dfb868963ffffffff613d0816565b9050613e3e6001828481613e3157fe5b049063ffffffff6142a916565b9695505050505050565b6000808411613e885760405162461bcd60e51b815260040180806020018281038252602581526020018061445f6025913960400191505060405180910390fd5b600083118015613e985750600082115b613ed35760405162461bcd60e51b81526004018080602001828103825260288152602001806144376028913960400191505060405180910390fd5b82613ee4858463ffffffff61424616565b81613eeb57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f485760405162461bcd60e51b81526004018080602001828103825260258152602001806143ec6025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613f68578284613f6b565b83835b90925090506001600160a01b038216613fcb576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561404c57600080fd5b505afa158015614060573d6000803e3d6000fd5b505050506040513d602081101561407657600080fd5b50516001600160a01b0316141561412957604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156140fc57600080fd5b505af1158015614110573d6000803e3d6000fd5b505050506040513d602081101561412657600080fd5b50505b6000806141577f00000000000000000000000000000000000000000000000000000000000000008b8b6142f8565b91509150816000148015614169575080155b1561417957879350869250614239565b6000614186898484613e48565b90508781116141d957858110156141ce5760405162461bcd60e51b81526004018080602001828103825260268152602001806144116026913960400191505060405180910390fd5b889450925082614237565b60006141e6898486613e48565b9050898111156141f257fe5b878110156142315760405162461bcd60e51b81526004018080602001828103825260268152602001806144cb6026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806142615750508082028282828161425e57fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006143078585613ef4565b509050600080614318888888613462565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561435057600080fd5b505afa158015614364573d6000803e3d6000fd5b505050506040513d606081101561437a57600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143ad5780826143b0565b81815b9099909850965050505050505056fe556e697377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056324c6962726172793a204944454e544943414c5f414444524553534553556e69737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e54556e697377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459556e697377617056324c6962726172793a20494e53554646494349454e545f414d4f554e54556e69737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54556e69737761705632526f757465723a20494e56414c49445f50415448000000556e69737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544556e69737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544556e697377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54556e69737761705632526f757465723a20455850495245440000000000000000a26469706673582212203165b45bf4b08d8b85d66283af78aefce10380fbf46b016ea2b3c6bda0074dc564736f6c634300060600330000000000000000000000000f10f5a1006f50edecd086ccd5704ade25709ab20000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270

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

0000000000000000000000000f10f5a1006f50edecd086ccd5704ade25709ab20000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270

-----Decoded View---------------
Arg [0] : _factory (address): 0x0f10f5a1006f50edecd086ccd5704ade25709ab2
Arg [1] : _WETH (address): 0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000f10f5a1006f50edecd086ccd5704ade25709ab2
Arg [1] : 0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270


Deployed ByteCode Sourcemap

16327:18549:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16809:10;-1:-1:-1;;;;;16823:4:0;16809:18;;16802:26;;;;16327:18549;;12:1:-1;9;2:12;20959:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20959:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20959:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33820:262;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33820:262:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33820:262:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;28128:850;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28128:850:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28128:850:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28128:850:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28128: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;28128:850:0;;-1:-1:-1;28128:850:0;-1:-1:-1;;;;;;28128: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;28128:850:0;;;;;;;;;;;;;;;;;34620:253;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34620:253:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34620:253:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34620:253:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34620: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;34620:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34620:253:0;;-1:-1:-1;34620:253:0;;-1:-1:-1;;;;;34620:253:0:i;21638:677::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21638:677:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21638:677:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25345:628::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25345:628:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25345:628:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25345:628:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25345: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;25345:628:0;;-1:-1:-1;25345:628:0;-1:-1:-1;;;;;;25345:628:0;;;;;;;;:::i;27294:828::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27294:828:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27294:828:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27294:828:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27294: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;27294:828:0;;-1:-1:-1;27294:828:0;-1:-1:-1;;;;;;27294:828:0;;;;;;;;:::i;23775:718::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23775:718:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23775:718:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31161:714::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31161:714:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31161:714:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31161:714:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31161: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;31161:714:0;;-1:-1:-1;31161:714:0;-1:-1:-1;;;;;;31161:714:0;;;;;;;;:::i;32737:843::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32737:843:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32737:843:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;32737:843:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32737: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;32737:843:0;;-1:-1:-1;32737:843:0;-1:-1:-1;;;;;;32737:843:0;;;;;;;;:::i;26591:697::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26591:697:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26591:697:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26591: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;26591:697:0;;-1:-1:-1;26591:697:0;-1:-1:-1;;;;;;26591:697:0;;;;;;;;:::i;34090:261::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34090:261:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34090:261:0;;;;;;;;;;;;:::i;25979:606::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25979:606:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25979:606:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25979:606:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25979: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;25979:606:0;;-1:-1:-1;25979:606:0;-1:-1:-1;;;;;;25979:606:0;;;;;;;;:::i;16463:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16463:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;16463:38:0;;;;;;;;;;;;;;33624:188;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33624:188:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33624:188:0;;;;;;;;;;;;:::i;23069:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23069:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23069:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31881:850::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31881:850:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31881:850:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31881: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;31881:850:0;;-1:-1:-1;31881:850:0;-1:-1:-1;;;;;;31881:850:0;;;;;;;;:::i;20088:865::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20088:865:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20088:865:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16415:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16415:41:0;;;:::i;34359:253::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34359:253:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34359:253:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34359:253:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34359: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;34359:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34359:253:0;;-1:-1:-1;34359:253:0;;-1:-1:-1;;;;;34359:253:0:i;22321:669::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22321:669:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22321:669:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18327:738::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18327:738:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18327:738:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;19071:974;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19071:974:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28984:810::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28984:810:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28984:810:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28984: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;28984:810:0;;-1:-1:-1;28984:810:0;-1:-1:-1;;;;;;28984:810:0;;;;;;;;:::i;20959:673::-;21196:16;21214:14;21177:8;16572:15;16560:8;:27;;16552:64;;;;;-1:-1:-1;;;16552:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16552:64:0;;;;;;;;;;;;;;;21268:196:::1;21298:5;21318:4;21337:9;21361:14;21390:12;21425:4;21445:8;21268:15;:196::i;:::-;21241:223:::0;;-1:-1:-1;21241:223:0;-1:-1:-1;21475:51:0::1;21503:5:::0;21510:2;21241:223;21475:27:::1;:51::i;:::-;21543:4;-1:-1:-1::0;;;;;21537:20:0::1;;21558:9;21537:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21537:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21537:31:0;;;;21579:45;21610:2;21614:9;21579:30;:45::i;:::-;20959:673:::0;;;;;;;;;;:::o;33820:262::-;33973:14;34012:62;34042:8;34052:9;34063:10;34012:29;:62::i;:::-;34005:69;33820:262;-1:-1:-1;;;;33820:262:0:o;28128:850::-;28342:21;28314:8;16572:15;16560:8;:27;;16552:64;;;;;-1:-1:-1;;;16552:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16552:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28414:4:0::1;28389:29;:4:::0;;-1:-1:-1;;28394:15:0;;28389:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28389:21:0::1;-1:-1:-1::0;;;;;28389:29:0::1;;28381:71;;;::::0;;-1:-1:-1;;;28381:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28381:71:0;;;;;;;;;;;;;::::1;;28473:55;28504:7;28513:8;28523:4;;28473:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28473:30:0::1;::::0;-1:-1:-1;;;28473:55:0:i:1;:::-;28463:65;;28578:12;28547:7;28572:1;28555:7;:14;:18;28547:27;;;;;;;;;;;;;;:43;;28539:99;;;;-1:-1:-1::0;;;28539:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28649:141;28695:4;;28700:1;28695:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28695:7:0::1;28704:10;28716:51;28741:7;28750:4;;28755:1;28750:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28750:7:0::1;28759:4;;28764:1;28759:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28759:7:0::1;28716:24;:51::i;:::-;28769:7;28777:1;28769:10;;;;;;;;;;;;;;28649:31;:141::i;:::-;28801:35;28807:7;28816:4;;28801:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28830:4:0::1;::::0;-1:-1:-1;28801:5:0::1;::::0;-1:-1:-1;;28801:35:0:i:1;:::-;28853:4;-1:-1:-1::0;;;;;28847:20:0::1;;28868:7;28893:1;28876:7;:14;:18;28868:27;;;;;;;;;;;;;;28847:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28847:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28847:49:0;;;;28907:63;28938:2;28942:7;28967:1;28950:7;:14;:18;28942:27;;;;;;;;;;;;;;28907:30;:63::i;:::-;28128:850:::0;;;;;;;;;:::o;34620:253::-;34764:21;34810:55;34840:7;34849:9;34860:4;34810:29;:55::i;:::-;34803:62;;34620:253;;;;;:::o;21638:677::-;21944:12;21958;21983;21998:49;22023:7;22032:6;22040;21998:24;:49::i;:::-;21983:64;;22058:10;22071;:33;;22095:9;22071:33;;;-1:-1:-1;;22071:33:0;22115:80;;;-1:-1:-1;;;22115:80:0;;22143:10;22115:80;;;;22163:4;22115:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22058:46;;-1:-1:-1;;;;;;22115:27:0;;;;;:80;;;;;-1:-1:-1;;22115:80:0;;;;;;;;-1:-1:-1;22115:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;22115:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22115:80:0;;;;22227;22243:6;22251;22259:9;22270:10;22282;22294:2;22298:8;22227:15;:80::i;:::-;22206:101;;;;;;;;21638:677;;;;;;;;;;;;;;;;:::o;25345:628::-;25569:21;25550:8;16572:15;16560:8;:27;;16552:64;;;;;-1:-1:-1;;;16552:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16552:64:0;;;;;;;;;;;;;;;25613:55:::1;25644:7;25653:8;25663:4;;25613:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25613:30:0::1;::::0;-1:-1:-1;;;25613:55:0:i:1;:::-;25603:65;;25718:12;25687:7;25712:1;25695:7;:14;:18;25687:27;;;;;;;;;;;;;;:43;;25679:99;;;;-1:-1:-1::0;;;25679:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25789:141;25835:4;;25840:1;25835:7;;;;;;25789:141;25941:24;25947:7;25956:4;;25941:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25962:2:0;;-1:-1:-1;25941:5:0::1;::::0;-1:-1:-1;;25941:24:0:i:1;27294:828::-:0;27508:21;27480:8;16572:15;16560:8;:27;;16552:64;;;;;-1:-1:-1;;;16552:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16552:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27580:4:0::1;27555:29;:4:::0;;-1:-1:-1;;27560:15:0;;27555:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27555:21:0::1;-1:-1:-1::0;;;;;27555:29:0::1;;27547:71;;;::::0;;-1:-1:-1;;;27547:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27547:71:0;;;;;;;;;;;;;::::1;;27639:55;27669:7;27678:9;27689:4;;27639:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27639:29:0::1;::::0;-1:-1:-1;;;27639:55:0:i:1;:::-;27629:65;;27727:11;27713:7;27721:1;27713:10;;;;;;;;;;;;;;:25;;27705:77;;;;-1:-1:-1::0;;;27705:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23775:718:::0;24093:14;24120:12;24135:46;24160:7;24169:5;24176:4;24135:24;:46::i;:::-;24120:61;;24192:10;24205;:33;;24229:9;24205:33;;;-1:-1:-1;;24205:33:0;24249:80;;;-1:-1:-1;;;24249:80:0;;24277:10;24249:80;;;;24297:4;24249:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24192:46;;-1:-1:-1;;;;;;24249:27:0;;;;;:80;;;;;-1:-1:-1;;24249:80:0;;;;;;;;-1:-1:-1;24249:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;24249:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24249:80:0;;;;24352:133;24414:5;24421:9;24432:14;24448:12;24462:2;24466:8;24352:47;:133::i;:::-;24340:145;23775:718;-1:-1:-1;;;;;;;;;;;;;23775:718:0:o;31161:714::-;31395:8;16572:15;16560:8;:27;;16552:64;;;;;-1:-1:-1;;;16552:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16552:64:0;;;;;;;;;;;;;;;31416:139:::1;31462:4;;31467:1;31462:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31462:7:0::1;31471:10;31483:51;31508:7;31517:4;;31522:1;31517:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31517:7:0::1;31526:4;;31531:1;31526:7;;;;;;31483:51;31536:8;31416:31;:139::i;:::-;31566:18;31594:4:::0;;-1:-1:-1;;31599:15:0;;31594:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31594:21:0::1;-1:-1:-1::0;;;;;31587:39:0::1;;31627:2;31587:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31587:43:0::1;-1:-1:-1::0;;;;;31587:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31587:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31587:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31587:43:0;31641:44:::1;::::0;;31587:43:::1;31641:44:::0;;::::1;::::0;;;;;;;;;;;31587:43;;-1:-1:-1;31641:44:0::1;::::0;;;31676:4;;;;;;31641:44;::::1;::::0;31676:4;;31641:44;31676:4;31641:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31682:2:0;;-1:-1:-1;31641:34:0::1;::::0;-1:-1:-1;;31641:44:0:i:1;:::-;31784:12:::0;31718:62:::1;31766:13:::0;31725:4;;-1:-1:-1;;31730:15:0;;31725:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31725:21:0::1;-1:-1:-1::0;;;;;31718:39:0::1;;31758:2;31718:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31718:43:0::1;-1:-1:-1::0;;;;;31718:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31718:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31718:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31718:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;31696:171;;;;-1:-1:-1::0;;;31696:171:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16627:1;31161:714:::0;;;;;;;:::o;32737:843::-;33004:8;16572:15;16560:8;:27;;16552:64;;;;;-1:-1:-1;;;16552:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16552:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33063:4:0::1;33038:29;:4:::0;;-1:-1:-1;;33043:15:0;;33038:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33038:21:0::1;-1:-1:-1::0;;;;;33038:29:0::1;;33030:71;;;::::0;;-1:-1:-1;;;33030:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33030:71:0;;;;;;;;;;;;;::::1;;33112:139;33158:4;;33163:1;33158:7;;;;;;33112:139;33262:55;33297:4;;33262:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33311:4:0::1;::::0;-1:-1:-1;33262:34:0::1;::::0;-1:-1:-1;;33262:55:0:i:1;:::-;33345:37;::::0;;-1:-1:-1;;;33345:37:0;;33376:4:::1;33345:37;::::0;::::1;::::0;;;33328:14:::1;::::0;-1:-1:-1;;;;;33352:4:0::1;33345:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;33345:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33345:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33345:37:0;;-1:-1:-1;33401:25:0;;::::1;;33393:81;;;;-1:-1:-1::0;;;33393:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33491:4;-1:-1:-1::0;;;;;33485:20:0::1;;33506:9;33485:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33485:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33485:31:0;;;;33527:45;33558:2;33562:9;33527:30;:45::i;26591:697::-:0;26807:21;26779:8;16572:15;16560:8;:27;;16552:64;;;;;-1:-1:-1;;;16552:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16552:64:0;;;;;;;;;;;;;;;26865:4:::1;-1:-1:-1::0;;;;;26854:15:0::1;:4;;26859:1;26854:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26854:7:0::1;-1:-1:-1::0;;;;;26854:15:0::1;;26846:57;;;::::0;;-1:-1:-1;;;26846:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26846:57:0;;;;;;;;;;;;;::::1;;26924:56;26955:7;26964:9;26975:4;;26924:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26924:30:0::1;::::0;-1:-1:-1;;;26924:56:0:i:1;:::-;26914:66;;27030:12;26999:7;27024:1;27007:7;:14;:18;26999:27;;;;;;;;;;;;;;:43;;26991:99;;;;-1:-1:-1::0;;;26991:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27107:4;-1:-1:-1::0;;;;;27101:19:0::1;;27128:7;27136:1;27128:10;;;;;;;;;;;;;;27101:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27101:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27101:40:0;;;;;27165:4;-1:-1:-1::0;;;;;27159:20:0::1;;27180:51;27205:7;27214:4;;27219:1;27214:7;;;;;;27180:51;27233:7;27241:1;27233:10;;;;;;;;;;;;;;27159:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;27159:85:0::1;-1:-1:-1::0;;;;;27159:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27159:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27159:85:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27159:85:0;27152:93:::1;;;;27256:24;27262:7;27271:4;;27256:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27277:2:0;;-1:-1:-1;27256:5:0::1;::::0;-1:-1:-1;;27256:24:0:i:1;:::-;26591:697:::0;;;;;;;;:::o;34090:261::-;34243:13;34281:62;34310:9;34321;34332:10;34281:28;:62::i;25979:606::-;26203:21;26184:8;16572:15;16560:8;:27;;16552:64;;;;;-1:-1:-1;;;16552:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16552:64:0;;;;;;;;;;;;;;;26247:55:::1;26277:7;26286:9;26297:4;;26247:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26247:29:0::1;::::0;-1:-1:-1;;;26247:55:0:i:1;:::-;26237:65;;26335:11;26321:7;26329:1;26321:10;;;;;;;;;;;;;;:25;;26313:77;;;;-1:-1:-1::0;;;26313:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16463:38:::0;;;:::o;33624:188::-;33721:12;33753:51;33776:7;33785:8;33795;33753:22;:51::i;23069:700::-;23335:14;23316:8;16572:15;16560:8;:27;;16552:64;;;;;-1:-1:-1;;;16552:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16552:64:0;;;;;;;;;;;;;;;23378:196:::1;23408:5;23428:4;23447:9;23471:14;23500:12;23535:4;23555:8;23378:15;:196::i;:::-;23624:38;::::0;;-1:-1:-1;;;23624:38:0;;23656:4:::1;23624:38;::::0;::::1;::::0;;;23362:212;;-1:-1:-1;23585:78:0::1;::::0;-1:-1:-1;23613:5:0;;23620:2;;-1:-1:-1;;;;;23624: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;23624:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23624:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23624:38:0;23585:27:::1;:78::i;:::-;23680:4;-1:-1:-1::0;;;;;23674:20:0::1;;23695:9;23674:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23674:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23674:31:0;;;;23716:45;23747:2;23751:9;23716:30;:45::i;31881:850::-:0;32141:8;16572:15;16560:8;:27;;16552:64;;;;;-1:-1:-1;;;16552:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16552:64:0;;;;;;;;;;;;;;;32186:4:::1;-1:-1:-1::0;;;;;32175:15:0::1;:4;;32180:1;32175:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32175:7:0::1;-1:-1:-1::0;;;;;32175:15:0::1;;32167:57;;;::::0;;-1:-1:-1;;;32167:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32167:57:0;;;;;;;;;;;;;::::1;;32235:13;32251:9;32235:25;;32277:4;-1:-1:-1::0;;;;;32271:19:0::1;;32298:8;32271:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32271:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32271:38:0;;;;;32333:4;-1:-1:-1::0;;;;;32327:20:0::1;;32348:51;32373:7;32382:4;;32387:1;32382:7;;;;;;32348:51;32401:8;32327:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;32327:83:0::1;-1:-1:-1::0;;;;;32327:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32327:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32327:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32327:83:0;32320:91:::1;;;;32422:18;32450:4:::0;;-1:-1:-1;;32455:15:0;;32450:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32450:21:0::1;-1:-1:-1::0;;;;;32443:39:0::1;;32483:2;32443:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32443:43:0::1;-1:-1:-1::0;;;;;32443:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32443:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32443:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32443:43:0;32497:44:::1;::::0;;32443:43:::1;32497:44:::0;;::::1;::::0;;;;;;;;;;;32443:43;;-1:-1:-1;32497:44:0::1;::::0;;;32532:4;;;;;;32497:44;::::1;::::0;32532:4;;32497:44;32532:4;32497:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32538:2:0;;-1:-1:-1;32497:34:0::1;::::0;-1:-1:-1;;32497:44:0:i:1;:::-;32640:12:::0;32574:62:::1;32622:13:::0;32581:4;;-1:-1:-1;;32586:15:0;;32581:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32581:21:0::1;-1:-1:-1::0;;;;;32574:39:0::1;;32614:2;32574:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32574:43:0::1;-1:-1:-1::0;;;;;32574:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;20088:865:0::0;20342:12;20356;20323:8;16572:15;16560:8;:27;;16552:64;;;;;-1:-1:-1;;;16552:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16552:64:0;;;;;;;;;;;;;;;20381:12:::1;20396:49;20421:7;20430:6;20438;20396:24;:49::i;:::-;20456:62;::::0;;-1:-1:-1;;;20456:62:0;;20490:10:::1;20456:62;::::0;::::1;::::0;-1:-1:-1;;;;;20456:33:0;::::1;:62:::0;;;;;;;;;;;;;;20381:64;;-1:-1:-1;20456:33:0;;::::1;::::0;:62;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20456:33:0;:62;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20456:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20456:62:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;20586:29:0::1;::::0;;-1:-1:-1;;;20586:29:0;;-1:-1:-1;;;;;20586:29:0;;::::1;;::::0;::::1;::::0;;;20556:12:::1;::::0;;;20586:25;;::::1;::::0;::::1;::::0;:29;;;;;;;;;;;20556:12;20586:25;:29;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20586:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20586:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20586:29:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20586:29:0;-1:-1:-1;20627:14:0::1;20646:43;20674:6:::0;20682;20646:27:::1;:43::i;:::-;20626:63;;;20731:6;-1:-1:-1::0;;;;;20721:16:0::1;:6;-1:-1:-1::0;;;;;20721:16:0::1;;:58;;20762:7;20771;20721:58;;;20741:7;20750;20721:58;20700:79:::0;;-1:-1:-1;20700:79:0;-1:-1:-1;20798:21:0;;::::1;;20790:72;;;;-1:-1:-1::0;;;20790:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20892:10;20881:7;:21;;20873:72;;;;-1:-1:-1::0;;;20873:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16627:1;;;;20088:865:::0;;;;;;;;;;;:::o;16415:41::-;;;:::o;34359:253::-;34503:21;34549:55;34580:7;34589:8;34599:4;34549:30;:55::i;22321:669::-;22610:16;22628:14;22655:12;22670:46;22695:7;22704:5;22711:4;22670:24;:46::i;:::-;22655:61;;22727:10;22740;:33;;22764:9;22740:33;;;-1:-1:-1;;22740:33:0;22784:80;;;-1:-1:-1;;;22784:80:0;;22812:10;22784:80;;;;22832:4;22784:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22727:46;;-1:-1:-1;;;;;;22784:27:0;;;;;:80;;;;;-1:-1:-1;;22784:80:0;;;;;;;;-1:-1:-1;22784:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;22784:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22784:80:0;;;;22902;22921:5;22928:9;22939:14;22955:12;22969:2;22973:8;22902:18;:80::i;:::-;22875:107;;;;-1:-1:-1;22321:669:0;-1:-1:-1;;;;;;;;;;;;;22321:669:0:o;18327:738::-;18615:12;18629;18643:14;18596:8;16572:15;16560:8;:27;;16552:64;;;;;-1:-1:-1;;;16552:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16552:64:0;;;;;;;;;;;;;;;18691:85:::1;18705:6;18713;18721:14;18737;18753:10;18765;18691:13;:85::i;:::-;18670:106:::0;;-1:-1:-1;18670:106:0;-1:-1:-1;18787:12:0::1;18802:49;18827:7;18836:6:::0;18844;18802:24:::1;:49::i;:::-;18787:64;;18862:66;18894:6;18902:10;18914:4;18920:7;18862:31;:66::i;:::-;18939;18971:6;18979:10;18991:4;18997:7;18939:31;:66::i;:::-;19043:4;-1:-1:-1::0;;;;;19028:25:0::1;;19054:2;19028:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;19028:29:0::1;-1:-1:-1::0;;;;;19028:29:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19028:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19028:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19028:29:0;18327:738;;;;-1:-1:-1;19028:29:0;;-1:-1:-1;18327:738:0;;-1:-1:-1;;;;;;;;;18327:738:0:o;19071:974::-;19324:16;19342:14;19358;19305:8;16572:15;16560:8;:27;;16552:64;;;;;-1:-1:-1;;;16552:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16552:64:0;;;;;;;;;;;;;;;19412:176:::1;19440:5;19460:4;19479:18;19512:9;19536:14;19565:12;19412:13;:176::i;:::-;19385:203:::0;;-1:-1:-1;19385:203:0;-1:-1:-1;19599:12:0::1;19614:46;19639:7;19648:5:::0;19655:4:::1;19614:24;:46::i;:::-;19599:61;;19671:69;19703:5;19710:10;19722:4;19728:11;19671:31;:69::i;:::-;19757:4;-1:-1:-1::0;;;;;19751:19:0::1;;19778:9;19751:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19751:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19751:39:0;;;;;19814:4;-1:-1:-1::0;;;;;19808:20:0::1;;19829:4;19835:9;19808:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;19808:37:0::1;-1:-1:-1::0;;;;;19808:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19808:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19808:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19808:37:0;19801:45:::1;;;;19884:4;-1:-1:-1::0;;;;;19869:25:0::1;;19895:2;19869:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;19869:29:0::1;-1:-1:-1::0;;;;;19869:29:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19869:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19869:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19869:29:0;;-1:-1:-1;19949:9:0::1;:21:::0;-1:-1:-1;19945:92:0::1;;;19972:65;20003:10;20027:9;20015;:21;19972:30;:65::i;:::-;16627:1;19071:974:::0;;;;;;;;;;;:::o;28984:810::-;29197:21;29169:8;16572:15;16560:8;:27;;16552:64;;;;;-1:-1:-1;;;16552:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16552:64:0;;;;;;;;;;;;;;;29255:4:::1;-1:-1:-1::0;;;;;29244:15:0::1;:4;;29249:1;29244:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29244:7:0::1;-1:-1:-1::0;;;;;29244:15:0::1;;29236:57;;;::::0;;-1:-1:-1;;;29236:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;29236:57:0;;;;;;;;;;;;;::::1;;29314:55;29344:7;29353:9;29364:4;;29314:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29314:29:0::1;::::0;-1:-1:-1;;;29314:55:0:i:1;:::-;29304:65;;29402:9;29388:7;29396:1;29388:10;;;;;;;;;;;;;;:23;;29380:75;;;;-1:-1:-1::0;;;29380:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29472:4;-1:-1:-1::0;;;;;29466:19:0::1;;29493:7;29501:1;29493:10;;;;;;;;;;;;;;29466:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29466:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29466:40:0;;;;;29530:4;-1:-1:-1::0;;;;;29524:20:0::1;;29545:51;29570:7;29579:4;;29584:1;29579:7;;;;;;29545:51;29598:7;29606:1;29598:10;;;;;;;;;;;;;;29524:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;29524:85:0::1;-1:-1:-1::0;;;;;29524:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29524:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29524:85:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29524:85:0;29517:93:::1;;;;29621:24;29627:7;29636:4;;29621:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29642:2:0;;-1:-1:-1;29621:5:0::1;::::0;-1:-1:-1;;29621:24:0:i:1;:::-;29708:7;29716:1;29708:10;;;;;;;;;;;;;;29696:9;:22;29692:94;;;29720:66;29751:10;29775:7;29783:1;29775:10;;;;;;;;;;;;;;29763:9;:22;29720:30;:66::i;1426:361::-:0;1621:45;;;-1:-1:-1;;;;;1621:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1621:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1610:57:0;;;;1575:12;;1589:17;;1610:10;;;;1621:45;1610:57;;;25:18:-1;1610: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;;;1610: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;;1574:93:0;;;;1686:7;:57;;;;-1:-1:-1;1698:11:0;;:16;;:44;;;1729:4;1718:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1718:24:0;1698:44;1678:101;;;;;-1:-1:-1;;;1678:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1426:361;;;;;:::o;2205:195::-;2313:12;;;2275;2313;;;;;;;;;-1:-1:-1;;;;;2292:7:0;;;2306:5;;2292: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;;;2292: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;;2274:52:0;;;2345:7;2337:55;;;;-1:-1:-1;;;2337:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2205:195;;;:::o;12785:517::-;12878:14;12924:1;12913:8;:12;12905:68;;;;-1:-1:-1;;;12905:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13004:1;12992:9;:13;:31;;;;;13022:1;13009:10;:14;12992:31;12984:84;;;;-1:-1:-1;;;12984:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13079:20;13102:17;:8;13115:3;13102:17;:12;:17;:::i;:::-;13079:40;-1:-1:-1;13130:14:0;13147:31;13079:40;13167:10;13147:31;:19;:31;:::i;:::-;13130:48;-1:-1:-1;13189:16:0;13208:40;13232:15;13208:19;:9;13222:4;13208:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;13189:59;;13283:11;13271:9;:23;;;;;;;12785:517;-1:-1:-1;;;;;;;12785:517:0:o;13977:511::-;14078:21;14135:1;14120:4;:11;:16;;14112:59;;;;;-1:-1:-1;;;14112:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14203:4;:11;14192:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14192:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14192:23:0;;14182:33;;14239:8;14226:7;14234:1;14226:10;;;;;;;;;;;;;:21;;;;;14263:6;14258:223;14289:1;14275:4;:11;:15;14271:1;:19;14258:223;;;14313:14;14329:15;14348:42;14360:7;14369:4;14374:1;14369:7;;;;;;;;;;;;;;14378:4;14383:1;14387;14383:5;14378:11;;;;;;;;;;;;;;14348;:42::i;:::-;14312:78;;;;14422:47;14435:7;14443:1;14435:10;;;;;;;;;;;;;;14447:9;14458:10;14422:12;:47::i;:::-;14405:7;14413:1;14417;14413:5;14405:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;14292:3:0;;14258:223;;;;13977:511;;;;;:::o;11302:478::-;11391:12;11417:14;11433;11451:26;11462:6;11470;11451:10;:26::i;:::-;11615:32;;;-1:-1:-1;;11615:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;11615:32:0;;;;;11605:43;;;;;;-1:-1:-1;;;;;;11518:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11518:251:0;;;;;;;11508:262;;;;;;;;;11302:478;-1:-1:-1;;;;;11302:478:0:o;1795:402::-;2020:51;;;-1:-1:-1;;;;;2020:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2020:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;2009:63:0;;;;1974:12;;1988:17;;2009:10;;;;2020:51;2009:63;;;25:18:-1;2009: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;;;2009: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;;1973:99:0;;;;2091:7;:57;;;;-1:-1:-1;2103:11:0;;:16;;:44;;;2134:4;2123:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2123:24:0;2103:44;2083:106;;;;-1:-1:-1;;;2083:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1795:402;;;;;;:::o;24604:735::-;24711:6;24706:626;24737:1;24723:4;:11;:15;24719:1;:19;24706:626;;;24761:13;24776:14;24795:4;24800:1;24795:7;;;;;;;;;;;;;;24804:4;24809:1;24813;24809:5;24804:11;;;;;;;;;;;;;;24760:56;;;;24832:14;24851:42;24879:5;24886:6;24851:27;:42::i;:::-;24831:62;;;24908:14;24925:7;24933:1;24937;24933:5;24925:14;;;;;;;;;;;;;;24908:31;;24955:15;24972;25000:6;-1:-1:-1;;;;;24991:15:0;:5;-1:-1:-1;;;;;24991:15:0;;:61;;25033:9;25049:1;24991:61;;;25015:1;25019:9;24991:61;24954:98;;;;25067:10;25098:1;25084:4;:11;:15;25080:1;:19;:82;;25159:3;25080:82;;;25102:54;25127:7;25136:6;25144:4;25149:1;25153;25149:5;25144:11;;;;;;;;;;;;;;25102:24;:54::i;:::-;25067:95;;25192:48;25217:7;25226:5;25233:6;25192:24;:48::i;:::-;-1:-1:-1;;;;;25177:69:0;;25265:10;25277;25289:2;25303:1;25293:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;25293:12:0;87:42:-1;143:17;;-1:-1;25293:12:0;;25177:143;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25177:143:0;-1:-1:-1;;;;;25177: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;25177:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25177:143:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24740:3:0;;;;;-1:-1:-1;24706:626:0;;-1:-1:-1;;;;;;;;24706:626:0;;;24604:735;;;:::o;14569:532::-;14670:21;14727:1;14712:4;:11;:16;;14704:59;;;;;-1:-1:-1;;;14704:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14795:4;:11;14784:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14784:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14784:23:0;;14774:33;;14848:9;14818:7;14843:1;14826:7;:14;:18;14818:27;;;;;;;;;;;;;;;;;:39;14882:11;;-1:-1:-1;;14882:15:0;14868:226;14899:5;;14868:226;;14927:14;14943:15;14962:42;14974:7;14983:4;14992:1;14988;:5;14983:11;;;;;;;;;;;;;;14996:4;15001:1;14996:7;;;;;;;14962:42;14926:78;;;;15036:46;15048:7;15056:1;15048:10;;;;;;;;;;;;;;15060:9;15071:10;15036:11;:46::i;:::-;15019:7;15031:1;15027;:5;15019:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;14906:3:0;14868:226;;29941:1214;30054:6;30049:1099;30080:1;30066:4;:11;:15;30062:1;:19;30049:1099;;;30104:13;30119:14;30138:4;30143:1;30138:7;;;;;;;;;;;;;;30147:4;30152:1;30156;30152:5;30147:11;;;;;;;;;;;;;;30103:56;;;;30175:14;30194:42;30222:5;30229:6;30194:27;:42::i;:::-;30174:62;;;30251:19;30288:48;30313:7;30322:5;30329:6;30288:24;:48::i;:::-;30251:86;;30352:16;30383:17;30471:13;30486;30504:4;-1:-1:-1;;;;;30504:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30504:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30504:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30504:18:0;;;;;;;-1:-1:-1;;;;;30470:52:0;;;;-1:-1:-1;30470:52:0;;-1:-1:-1;30538:17:0;;-1:-1:-1;;;;;30579:15:0;;;;;;;:61;;30621:8;30631;30579:61;;;30598:8;30608;30579:61;30537:103;;;;30669:56;30712:12;30676:5;-1:-1:-1;;;;;30669:23:0;;30701:4;30669:38;;;;;;;;;;;;;-1:-1:-1;;;;;30669:38:0;-1:-1:-1;;;;;30669:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;30669:56:0;30655:70;;30755:71;30785:11;30798:12;30812:13;30755:29;:71::i;:::-;30740:86;;30049:1099;;;;30857:15;30874;30902:6;-1:-1:-1;;;;;30893:15:0;:5;-1:-1:-1;;;;;30893:15:0;;:67;;30938:12;30957:1;30893:67;;;30917:1;30921:12;30893:67;30856:104;;;;30975:10;31006:1;30992:4;:11;:15;30988:1;:19;:82;;31067:3;30988:82;;;31010:54;31035:7;31044:6;31052:4;31057:1;31061;31057:5;31052:11;;;;;;;31010:54;31123:12;;;31133:1;31123:12;;;;;;;;;;-1:-1:-1;;;31085:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;31085:51:0;;;;;;;;;;;;;;;;;;;;;;30975:95;;-1:-1:-1;31085:9:0;;;;;;31095:10;;31107;;30975:95;;31123:12;;31085:51;;;;;;;;31123:12;;31085:51;;;;31123: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;31085:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31085:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;30083:3:0;;;;;-1:-1:-1;30049:1099:0;;-1:-1:-1;;;;;;;;;;30049:1099:0;10325:129;10409:5;;;10404:16;;;;10396:50;;;;;-1:-1:-1;;;10396:50:0;;;;;;;;;;;;-1:-1:-1;;;10396:50:0;;;;;;;;;;;;;;13423:472;13516:13;13562:1;13550:9;:13;13542:70;;;;-1:-1:-1;;;13542:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13643:1;13631:9;:13;:31;;;;;13661:1;13648:10;:14;13631:31;13623:84;;;;-1:-1:-1;;;13623:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13718:14;13735:34;13764:4;13735:24;:9;13749;13735:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;13718:51;-1:-1:-1;13780:16:0;13799:34;13829:3;13799:25;:10;13814:9;13799:25;:14;:25;:::i;:34::-;13780:53;;13855:32;13885:1;13868:11;13856:9;:23;;;;;;;13855:32;:29;:32;:::i;:::-;13844:43;13423:472;-1:-1:-1;;;;;;13423:472:0:o;12342:321::-;12424:12;12467:1;12457:7;:11;12449:61;;;;-1:-1:-1;;;12449:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12540:1;12529:8;:12;:28;;;;;12556:1;12545:8;:12;12529:28;12521:81;;;;-1:-1:-1;;;12521:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12647:8;12623:21;:7;12635:8;12623:21;:11;:21;:::i;:::-;:32;;;;;;;12342:321;-1:-1:-1;;;;12342:321:0:o;10861:349::-;10936:14;10952;10997:6;-1:-1:-1;;;;;10987:16:0;:6;-1:-1:-1;;;;;10987:16:0;;;10979:66;;;;-1:-1:-1;;;10979:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11084:6;-1:-1:-1;;;;;11075:15:0;:6;-1:-1:-1;;;;;11075:15:0;;:53;;11113:6;11121;11075:53;;;11094:6;11102;11075:53;11056:72;;-1:-1:-1;11056:72:0;-1:-1:-1;;;;;;11147:20:0;;11139:63;;;;;-1:-1:-1;;;11139:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10861:349;;;;;:::o;16931:1390::-;17244:50;;;-1:-1:-1;;;17244:50:0;;-1:-1:-1;;;;;17244:50:0;;;;;;;;;;;;;;;;17149:12;;;;;;17262:7;17244:34;;;;;;:50;;;;;;;;;;;;;;;:34;:50;;;2:2:-1;;;;27:1;24;17:12;2:2;17244:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17244:50:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17244:50:0;-1:-1:-1;;;;;17244:64:0;;17240:150;;;17325:53;;;-1:-1:-1;;;17325:53:0;;-1:-1:-1;;;;;17325:53:0;;;;;;;;;;;;;;;;17343:7;17325:37;;;;;;:53;;;;;;;;;;;;;;;-1:-1:-1;17325:37:0;:53;;;2:2:-1;;;;27:1;24;17:12;2:2;17325:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17325:53:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;17240:150:0;17401:13;17416;17433:53;17462:7;17471:6;17479;17433:28;:53::i;:::-;17400:86;;;;17501:8;17513:1;17501:13;:30;;;;-1:-1:-1;17518:13:0;;17501:30;17497:817;;;17570:14;;-1:-1:-1;17586:14:0;;-1:-1:-1;17497:817:0;;;17634:19;17656:58;17679:14;17695:8;17705;17656:22;:58::i;:::-;17634:80;;17751:14;17733;:32;17729:574;;17812:10;17794:14;:28;;17786:79;;;;-1:-1:-1;;;17786:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17906:14;;-1:-1:-1;17922:14:0;-1:-1:-1;17922:14:0;17729:574;;;17978:19;18000:58;18023:14;18039:8;18049;18000:22;:58::i;:::-;17978:80;;18102:14;18084;:32;;18077:40;;;;18162:10;18144:14;:28;;18136:79;;;;-1:-1:-1;;;18136:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18256:14;-1:-1:-1;18272:14:0;;-1:-1:-1;17729:574:0;17497:817;;16931:1390;;;;;;;;;;;:::o;10462:142::-;10514:6;10541;;;:30;;-1:-1:-1;;10556:5:0;;;10570:1;10565;10556:5;10565:1;10551:15;;;;;:20;10541:30;10533:63;;;;;-1:-1:-1;;;10533:63:0;;;;;;;;;;;;-1:-1:-1;;;10533:63:0;;;;;;;;;;;;;;10189:128;10273:5;;;10268:16;;;;10260:49;;;;;-1:-1:-1;;;10260:49:0;;;;;;;;;;;;-1:-1:-1;;;10260:49:0;;;;;;;;;;;;;;11838:391;11931:13;11946;11973:14;11992:26;12003:6;12011;11992:10;:26::i;:::-;11972:46;;;12030:13;12045;12078:32;12086:7;12095:6;12103;12078:7;:32::i;:::-;-1:-1:-1;;;;;12063:60:0;;:62;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12063:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12063:62:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12063:62:0;;;;;;;-1:-1:-1;;;;;12029:96:0;;;;-1:-1:-1;12029:96:0;;-1:-1:-1;;;;;;12159:16:0;;;;;;;:62;;12202:8;12212;12159:62;;;12179:8;12189;12159:62;12136:85;;;;-1:-1:-1;11838:391:0;-1:-1:-1;;;;;;;11838:391:0:o

Swarm Source

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