Contract 0x3c1997d8738dcab7ed099105fcd61a9fe5f351dd

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xfa384c7c73470cd2ba754623d5805b3f82bc5d40e43278ea57af4c90efcb9a6fSwap Exact Token...58964232022-12-06 20:06:177 hrs 24 mins ago0xde30142eb15185def8f9acf4b273b9b842e83a5f IN  Cougar Exchange: Router0 CRO0.8023864868790
0x0b3f5c68558a998957d07ecc047f9713b3354a1f213f5c6617859a1060c17a65Swap Exact ETH F...58953842022-12-06 18:28:019 hrs 2 mins ago0xe7132c5b537c7b046ba70f03152f7a01cae01bf9 IN  Cougar Exchange: Router180 CRO1.218420
0x5527330e9022661b4d5ed63f159769dd38fe249f1f3cc6b71c63bb055a76cbfbAdd Liquidity58946362022-12-06 17:17:1410 hrs 13 mins ago0x68beb52568f73bad1198764c6facc6283fd75308 IN  Cougar Exchange: Router0 CRO1.038740
0x71aba17bd94190d17d228e8fbb65d71cdfcdc648d2bfd753cd964dfd66633efaRemove Liquidity...58942542022-12-06 16:41:0410 hrs 49 mins ago0x68beb52568f73bad1198764c6facc6283fd75308 IN  Cougar Exchange: Router0 CRO1.1957550
0xd8109701067c4b231a395e47282c270d50ccd262b8fc6a7eabada1dc08afb1e8Swap Exact Token...58907912022-12-06 11:14:3316 hrs 16 mins ago0xe2f1c473ee4f9f86d8775f063edef493fdc92d3c IN  Cougar Exchange: Router0 CRO0.667210
0x3c29af9f8c309d7abd6f17f6d7da312b784d1ed448eedf52f09d95425a3a46beSwap Exact Token...58890842022-12-06 8:33:5518 hrs 56 mins ago0x56434c8028ec349f0f89ba437762cda853af3ad5 IN  Cougar Exchange: Router0 CRO1.28740
0x49876a78d52a5f68422ff82d2406a1f95a47b834d99650287d05b13116178ec1Remove Liquidity...58890792022-12-06 8:33:2718 hrs 57 mins ago0x56434c8028ec349f0f89ba437762cda853af3ad5 IN  Cougar Exchange: Router0 CRO1.3917750
0x2f1ad9070c44a8947ca126cdf582f50686d5e27b60dcb7e32c295cb01999b07bSwap Exact Token...58890642022-12-06 8:32:0118 hrs 58 mins ago0x56434c8028ec349f0f89ba437762cda853af3ad5 IN  Cougar Exchange: Router0 CRO0.702790
0xf3c6bc2524443283c4c489c41b3a69ff3453c3b4a1deef84fcc56239bdd1dae5Remove Liquidity...58885232022-12-06 7:41:0919 hrs 49 mins ago0x46dfb82d47d2761d4f67fc12b4d5ae6d3ab0d0c7 IN  Cougar Exchange: Router0 CRO1.5887540689690
0x4579b46cbdc90e68b4d0688bbdfa7a18be8d407a238fa4c2889335a06d2c7bd7Swap Exact Token...58873182022-12-06 5:47:5421 hrs 42 mins ago0x8a7a5e28bfefa665e1d2e9b50dc90b6e096c9e80 IN  Cougar Exchange: Router0 CRO1.617240
0xd082a1612471935c3ba5981b3aab7487b4e850aaf4a23b905650fd9b3d76fcabSwap Exact Token...58835592022-12-05 23:54:151 day 3 hrs ago0x636f1fa87e01e080e3043da11aaa7c889a8bb004 IN  Cougar Exchange: Router0 CRO0.781780
0x11ee899c94a7cd84a66fe1f2b01ce4c8ae4ed5157650d37cb7321fa6b721a17dRemove Liquidity...58835032022-12-05 23:49:001 day 3 hrs ago0x636f1fa87e01e080e3043da11aaa7c889a8bb004 IN  Cougar Exchange: Router0 CRO1.566580
0x53092c087acec4b5c37f0185c00cc5d10cfadd8d516fbc27af549aea9680d483Remove Liquidity...58834882022-12-05 23:47:361 day 3 hrs ago0x636f1fa87e01e080e3043da11aaa7c889a8bb004 IN  Cougar Exchange: Router0 CRO1.262870
0x071a4467aa25312b3704f15970ea97e98f2496e8fe84cdc0803614d96dd4cd18Swap Exact ETH F...58834742022-12-05 23:46:161 day 3 hrs ago0x1fcb080e18f1905fd724158f77007745df5ddde0 IN  Cougar Exchange: Router20 CRO1.383180
0xcffd87a81cf80836a5d2d25d1f1126334611a225f887aea27923e0f72ba4227aSwap Exact ETH F...58818622022-12-05 21:14:261 day 6 hrs ago0x8f8dc70b1733f8293542f0c816f5a0ff46e54393 IN  Cougar Exchange: Router15 CRO1.184847989905 4,862.470821044
0x88ac0b396a6deee2d528de6f82174ef712fa145d3d7c33b4608032143ba546edSwap Exact Token...58816192022-12-05 20:51:361 day 6 hrs ago0xef22e13df1b1d0786cfb703f883bacbf5387b586 IN  Cougar Exchange: Router0 CRO1.1410750
0x205346b3ca73284f7d5704adc9d891e9188aca4e31a1c9c9c25a255d4ab61f68Add Liquidity ET...58781862022-12-05 15:27:571 day 12 hrs ago0x07c5959d4408a37e71ee56589b77499daa54f182 IN  Cougar Exchange: Router759.94840235293534 CRO1.0194956346130
0x0e7db1a7f972f3fbb174feac00e753856e8386eebc83a4139499d8fc118f016eSwap Exact ETH F...58781632022-12-05 15:25:481 day 12 hrs ago0x07c5959d4408a37e71ee56589b77499daa54f182 IN  Cougar Exchange: Router362 CRO0.6426603349860
0x3eabcb33f071f31aaeed78740dd554a167b2f31ca60d8f739d7e6fb0181246ccRemove Liquidity...58768022022-12-05 13:17:251 day 14 hrs ago0xdf42607196b9c870e72c85a9477f623824d7cd55 IN  Cougar Exchange: Router0 CRO1.581638687640
0xc4e57743458d72253779278120d15a27480c5ab904c0294187566b7598cac37fSwap Exact Token...58767532022-12-05 13:12:471 day 14 hrs ago0xdf42607196b9c870e72c85a9477f623824d7cd55 IN  Cougar Exchange: Router0 CRO0.557336275450
0x32cdb72297ebd3e19fe18573dde15f72e8049cac9f938142f32922953b1fd629Swap Exact Token...58767432022-12-05 13:11:511 day 14 hrs ago0xdf42607196b9c870e72c85a9477f623824d7cd55 IN  Cougar Exchange: Router0 CRO1.1591572738420
0x0038405fc42302515bf4a09038a3b5f3554c8899e48fc762d74e579088aa6a28Add Liquidity58753112022-12-05 10:56:541 day 16 hrs ago0xa64f5d8d42823a39f2e7532749e152d43879825f IN  Cougar Exchange: Router0 CRO1.05339710
0x81ddb5b77e79c19d425f3a83b4db62c8d1b519e2cda9cc6bfea087a73b0f5b19Swap Exact Token...58715362022-12-05 5:00:091 day 22 hrs ago0xdfd4a7ac8236deae66bb14575a058319f1d7de23 IN  Cougar Exchange: Router0 CRO1.2216350
0x26fcfc20188220a7441598e14a24c9fb1595fca1dbae272c78e2f07a347a202fAdd Liquidity58710522022-12-05 4:14:191 day 23 hrs ago0xee07d2f96be056bbb822ad1e0564717755d7adc6 IN  Cougar Exchange: Router0 CRO1.4017055240610
0x40bbe3710762a4b5d58692d628a399ad6f9e8c6064273682146d9f1e6595dde5Swap Exact Token...58698622022-12-05 2:21:312 days 1 hr ago0xe8395605f832f8fe0d0ae1217c508abb1c4f6f0b IN  Cougar Exchange: Router0 CRO1.02715 5,000
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x0b3f5c68558a998957d07ecc047f9713b3354a1f213f5c6617859a1060c17a6558953842022-12-06 18:28:019 hrs 2 mins ago Cougar Exchange: Router Cronos: WCRO Token180 CRO
0x3c29af9f8c309d7abd6f17f6d7da312b784d1ed448eedf52f09d95425a3a46be58890842022-12-06 8:33:5518 hrs 56 mins ago Cougar Exchange: Router0x56434c8028ec349f0f89ba437762cda853af3ad587.107109858623075661 CRO
0x3c29af9f8c309d7abd6f17f6d7da312b784d1ed448eedf52f09d95425a3a46be58890842022-12-06 8:33:5518 hrs 56 mins ago Cronos: WCRO Token Cougar Exchange: Router87.107109858623075661 CRO
0x2f1ad9070c44a8947ca126cdf582f50686d5e27b60dcb7e32c295cb01999b07b58890642022-12-06 8:32:0118 hrs 58 mins ago Cougar Exchange: Router0x56434c8028ec349f0f89ba437762cda853af3ad59.842627589609018884 CRO
0x2f1ad9070c44a8947ca126cdf582f50686d5e27b60dcb7e32c295cb01999b07b58890642022-12-06 8:32:0118 hrs 58 mins ago Cronos: WCRO Token Cougar Exchange: Router9.842627589609018884 CRO
0xf3c6bc2524443283c4c489c41b3a69ff3453c3b4a1deef84fcc56239bdd1dae558885232022-12-06 7:41:0919 hrs 49 mins ago Cougar Exchange: Router0x46dfb82d47d2761d4f67fc12b4d5ae6d3ab0d0c79.478473073759883037 CRO
0xf3c6bc2524443283c4c489c41b3a69ff3453c3b4a1deef84fcc56239bdd1dae558885232022-12-06 7:41:0919 hrs 49 mins ago Cronos: WCRO Token Cougar Exchange: Router9.478473073759883037 CRO
0xd082a1612471935c3ba5981b3aab7487b4e850aaf4a23b905650fd9b3d76fcab58835592022-12-05 23:54:151 day 3 hrs ago Cougar Exchange: Router0x636f1fa87e01e080e3043da11aaa7c889a8bb0041,458.280545969011310395 CRO
0xd082a1612471935c3ba5981b3aab7487b4e850aaf4a23b905650fd9b3d76fcab58835592022-12-05 23:54:151 day 3 hrs ago Cronos: WCRO Token Cougar Exchange: Router1,458.280545969011310395 CRO
0x11ee899c94a7cd84a66fe1f2b01ce4c8ae4ed5157650d37cb7321fa6b721a17d58835032022-12-05 23:49:001 day 3 hrs ago Cougar Exchange: Router0x636f1fa87e01e080e3043da11aaa7c889a8bb004366.475919146221402972 CRO
0x11ee899c94a7cd84a66fe1f2b01ce4c8ae4ed5157650d37cb7321fa6b721a17d58835032022-12-05 23:49:001 day 3 hrs ago Cronos: WCRO Token Cougar Exchange: Router366.475919146221402972 CRO
0x071a4467aa25312b3704f15970ea97e98f2496e8fe84cdc0803614d96dd4cd1858834742022-12-05 23:46:161 day 3 hrs ago Cougar Exchange: Router Cronos: WCRO Token20 CRO
0xcffd87a81cf80836a5d2d25d1f1126334611a225f887aea27923e0f72ba4227a58818622022-12-05 21:14:261 day 6 hrs ago Cougar Exchange: Router Cronos: WCRO Token15 CRO
0x205346b3ca73284f7d5704adc9d891e9188aca4e31a1c9c9c25a255d4ab61f6858781862022-12-05 15:27:571 day 12 hrs ago Cougar Exchange: Router Cronos: WCRO Token759.948402352935340177 CRO
0x0e7db1a7f972f3fbb174feac00e753856e8386eebc83a4139499d8fc118f016e58781632022-12-05 15:25:481 day 12 hrs ago Cougar Exchange: Router Cronos: WCRO Token362 CRO
0x3eabcb33f071f31aaeed78740dd554a167b2f31ca60d8f739d7e6fb0181246cc58768022022-12-05 13:17:251 day 14 hrs ago Cougar Exchange: Router0xdf42607196b9c870e72c85a9477f623824d7cd55268.819497105834187565 CRO
0x3eabcb33f071f31aaeed78740dd554a167b2f31ca60d8f739d7e6fb0181246cc58768022022-12-05 13:17:251 day 14 hrs ago Cronos: WCRO Token Cougar Exchange: Router268.819497105834187565 CRO
0x81725c852dd9788eef666d51a86711516a281cc31da76dd00d10da20df3fe74b58697122022-12-05 2:07:152 days 1 hr ago Cougar Exchange: Router0x6c4d0c69e10df3c31b3680d46aa56a9ad79bce26616.47097768077843466 CRO
0x81725c852dd9788eef666d51a86711516a281cc31da76dd00d10da20df3fe74b58697122022-12-05 2:07:152 days 1 hr ago Cronos: WCRO Token Cougar Exchange: Router616.47097768077843466 CRO
0x9302b199b39a6f025c6f0a23870819e10fe9e4c7bc7a493118fe66c86ece285258695672022-12-05 1:53:312 days 1 hr ago Cougar Exchange: Router Cronos: WCRO Token40 CRO
0x17ce120a7409b249a16a302bae4ec479c76b06a5f6c8b86e9f9a8fb7cc474ed558694582022-12-05 1:43:102 days 1 hr ago Cougar Exchange: Router Cronos: WCRO Token50 CRO
0x43c8dff4b5874bd33358fc450842bf8d2ab862848e0b25c3c885f1952be9a92b58663742022-12-04 20:51:392 days 6 hrs ago Cougar Exchange: Router0x55693b755862ec1e1547a64abc4e07ba418de07356.575429262968690505 CRO
0x43c8dff4b5874bd33358fc450842bf8d2ab862848e0b25c3c885f1952be9a92b58663742022-12-04 20:51:392 days 6 hrs ago Cronos: WCRO Token Cougar Exchange: Router56.575429262968690505 CRO
0xafdd86d65b7a407772f26e72a469052aeda62f5081ef6796924bd5785c43f41058660092022-12-04 20:17:122 days 7 hrs ago Cougar Exchange: Router Cronos: WCRO Token551.610050526536073481 CRO
0xd3879d7132a09359466d2f0c5ab5390d900a91718a19b69d4c39b1896bcf3ef658658612022-12-04 20:03:122 days 7 hrs ago Cougar Exchange: Router0x56aa4fb42f77faa81b5ca0d2b3cab33f8089964824.043248102438138618 CRO
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CougarRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-03-28
*/

// File: contracts\interfaces\ICougarFactory.sol

pragma solidity >=0.5.0;

interface ICougarFactory {
    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\ICougarRouter01.sol

pragma solidity >=0.6.2;

interface ICougarRouter01 {
    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\ICougarRouter02.sol

pragma solidity >=0.6.2;


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

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

// File: contracts\interfaces\ICougarPair.sol

pragma solidity >=0.5.0;

interface ICougarPair {
    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\CougarLibrary.sol

pragma solidity >=0.5.0;



library CougarLibrary {
    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, 'CougarLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'CougarLibrary: 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'a0072f11044898d215406abd7cdd5e38203792c5ac44e1aede7fb0fcb67e3626' // 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);
        pairFor(factory, tokenA, tokenB);
        (uint reserve0, uint reserve1,) = ICougarPair(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, 'CougarLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'CougarLibrary: 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, 'CougarLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'CougarLibrary: 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, 'CougarLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'CougarLibrary: 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, 'CougarLibrary: 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, 'CougarLibrary: 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\CougarRouter.sol

pragma solidity =0.6.6;








contract CougarRouter is ICougarRouter02 {
    using SafeMath for uint;

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

    modifier ensure(uint deadline) {
        require(deadline >= block.timestamp, 'CougarRouter: 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 (ICougarFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            ICougarFactory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = CougarLibrary.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = CougarLibrary.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'CougarRouter: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = CougarLibrary.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'CougarRouter: 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 = CougarLibrary.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = ICougarPair(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 = CougarLibrary.pairFor(factory, token, WETH);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWETH(WETH).deposit{value: amountETH}();
        assert(IWETH(WETH).transfer(pair, amountETH));
        liquidity = ICougarPair(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 = CougarLibrary.pairFor(factory, tokenA, tokenB);
        ICougarPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = ICougarPair(pair).burn(to);
        (address token0,) = CougarLibrary.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'CougarRouter: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'CougarRouter: 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 = CougarLibrary.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        ICougarPair(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 = CougarLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        ICougarPair(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 = CougarLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        ICougarPair(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,) = CougarLibrary.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 ? CougarLibrary.pairFor(factory, output, path[i + 2]) : _to;
            ICougarPair(CougarLibrary.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 = CougarLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'CougarRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, CougarLibrary.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 = CougarLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'CougarRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, CougarLibrary.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, 'CougarRouter: INVALID_PATH');
        amounts = CougarLibrary.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'CougarRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(CougarLibrary.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, 'CougarRouter: INVALID_PATH');
        amounts = CougarLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'CougarRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, CougarLibrary.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, 'CougarRouter: INVALID_PATH');
        amounts = CougarLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'CougarRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, CougarLibrary.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, 'CougarRouter: INVALID_PATH');
        amounts = CougarLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'CougarRouter: EXCESSIVE_INPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(CougarLibrary.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,) = CougarLibrary.sortTokens(input, output);
            ICougarPair pair = ICougarPair(CougarLibrary.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 = CougarLibrary.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? CougarLibrary.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, CougarLibrary.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,
            'CougarRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WETH, 'CougarRouter: INVALID_PATH');
        uint amountIn = msg.value;
        IWETH(WETH).deposit{value: amountIn}();
        assert(IWETH(WETH).transfer(CougarLibrary.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,
            'CougarRouter: 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, 'CougarRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, CougarLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'CougarRouter: 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 CougarLibrary.quote(amountA, reserveA, reserveB);
    }

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

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

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

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

Contract ABI

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

60c060405234801561001057600080fd5b5060405162004759380380620047598339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6145d4620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118eb52806119e55280611a9b5280611b695280611caf5280611d375280611f7c5280611ff752806120a652806121725280612207528061227b528061277952806129ec5280612a425280612a765280612aea5280612c8a5280612dcd5280612e55525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611bfc5280611d695280611ecc52806122ad528061250652806126fe5280612727528061275752806128c45280612a205280612d1d5280612e87528061372e52806137715280613a545280613bd3528061400352806140b1528061413152506145d46000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124b8565b348015610a1c57600080fd5b5061088a6126fc565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612720945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561274d565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612861565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561299d565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c42565b6000808242811015610cde576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124b8565b9093509150610d1d898685612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da5858361312e565b50965096945050505050565b6000610dbe848484613226565b949350505050565b60608142811015610e0c576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b815260206004820152601a602482015260008051602061445f833981519152604482015290519081900360640190fd5b610efd7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b81526004018080602001828103825260288152602001806144376028913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b0316613462565b85600081518110610fe657fe5b6020026020010151613522565b6110328287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061367f915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b602002602001015161312e565b509695505050505050565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846138c5565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f613462565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124b8565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b6112c77f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b81526004018080602001828103825260288152602001806144376028913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e88287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b606081428110156113b4576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b815260206004820152601a602482015260008051602061445f833981519152604482015290519081900360640190fd5b6114a57f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b81526004018080602001828103825260248152602001806144a16024913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a613522565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a49290918991899182918501908490808284376000920191909152508892506139fd915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613d0816565b10156118935760405162461bcd60e51b81526004018080602001828103825260288152602001806144376028913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b815260206004820152601a602482015260008051602061445f833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c28585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506139fd915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b81526004018080602001828103825260288152602001806144376028913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b50505050611893848261312e565b60608142811015611b67576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b815260206004820152601a602482015260008051602061445f833981519152604482015290519081900360640190fd5b611c557f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b81526004018080602001828103825260288152602001806144376028913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d957f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b5095945050505050565b6000610dbe848484613d58565b60608142811015611ec7576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b611f257f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b81526004018080602001828103825260248152602001806144a16024913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613e48565b60008142811015611ff1576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b612020887f000000000000000000000000000000000000000000000000000000000000000089898930896124b8565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e8848361312e565b8042811015612170576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b815260206004820152601a602482015260008051602061445f833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122d97f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a9182918501908490808284376000920191909152508992506139fd915050565b87611856828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b60008082428110156124ff576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b600061252c7f00000000000000000000000000000000000000000000000000000000000000008c8c613462565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561258757600080fd5b505af115801561259b573d6000803e3d6000fd5b505050506040513d60208110156125b157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b505050506040513d604081101561262857600080fd5b508051602090910151909250905060006126428e8e613ef4565b509050806001600160a01b03168e6001600160a01b031614612665578183612668565b82825b90975095508a8710156126ac5760405162461bcd60e51b815260040180806020018281038252602381526020018061452f6023913960400191505060405180910390fd5b898610156126eb5760405162461bcd60e51b81526004018080602001828103825260238152602001806144146023913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f00000000000000000000000000000000000000000000000000000000000000008484613316565b600080600061279d7f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613462565b90506000876127ac578c6127b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561282657600080fd5b505af115801561283a573d6000803e3d6000fd5b5050505061284c8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128aa576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b6128b88c8c8c8c8c8c613fd2565b909450925060006128ea7f00000000000000000000000000000000000000000000000000000000000000008e8e613462565b90506128f88d338388613522565b6129048c338387613522565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561295c57600080fd5b505af1158015612970573d6000803e3d6000fd5b505050506040513d602081101561298657600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129e6576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b612a148a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613fd2565b90945092506000612a667f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050612a748b338388613522565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612acf57600080fd5b505af1158015612ae3573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b6857600080fd5b505af1158015612b7c573d6000803e3d6000fd5b505050506040513d6020811015612b9257600080fd5b5051612b9a57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b505050506040513d6020811015612c1c57600080fd5b5051925034841015612c3457612c343385340361312e565b505096509650969350505050565b60608142811015612c88576040805162461bcd60e51b815260206004820152601560248201526000805160206143cc833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612cbf57fe5b905060200201356001600160a01b03166001600160a01b031614612d18576040805162461bcd60e51b815260206004820152601a602482015260008051602061445f833981519152604482015290519081900360640190fd5b612d767f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91503482600081518110612d8657fe5b60200260200101511115612dcb5760405162461bcd60e51b81526004018080602001828103825260248152602001806144a16024913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e0757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e3a57600080fd5b505af1158015612e4e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612eb37f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612ec057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b505050506040513d6020811015612f4157600080fd5b5051612f4957fe5b612f888287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b81600081518110612f9557fe5b6020026020010151341115611e6a57611e6a3383600081518110612fb557fe5b6020026020010151340361312e565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130415780518252601f199092019160209182019101613022565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130a3576040519150601f19603f3d011682016040523d82523d6000602084013e6130a8565b606091505b50915091508180156130d65750805115806130d657508080602001905160208110156130d357600080fd5b50515b613127576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061317a5780518252601f19909201916020918201910161315b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131dc576040519150601f19603f3d011682016040523d82523d6000602084013e6131e1565b606091505b50509050806132215760405162461bcd60e51b81526004018080602001828103825260238152602001806144ea6023913960400191505060405180910390fd5b505050565b60008084116132665760405162461bcd60e51b81526004018080602001828103825260288152602001806143ec6028913960400191505060405180910390fd5b6000831180156132765750600082115b6132b15760405162461bcd60e51b81526004018080602001828103825260258152602001806144c56025913960400191505060405180910390fd5b60006132c5856103e563ffffffff61424616565b905060006132d9828563ffffffff61424616565b905060006132ff836132f3886103e863ffffffff61424616565b9063ffffffff6142a916565b905080828161330a57fe5b04979650505050505050565b606060028251101561336f576040805162461bcd60e51b815260206004820152601b60248201527f436f756761724c6962726172793a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561338757600080fd5b506040519080825280602002602001820160405280156133b1578160200160208202803683370190505b50905082816000815181106133c257fe5b60200260200101818152505060005b600183510381101561345a57600080613414878685815181106133f057fe5b602002602001015187866001018151811061340757fe5b60200260200101516142f8565b9150915061343684848151811061342757fe5b60200260200101518383613226565b84846001018151811061344557fe5b602090810291909101015250506001016133d1565b509392505050565b60008060006134718585613ef4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527fa0072f11044898d215406abd7cdd5e38203792c5ac44e1aede7fb0fcb67e3626609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135a75780518252601f199092019160209182019101613588565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613609576040519150601f19603f3d011682016040523d82523d6000602084013e61360e565b606091505b509150915081801561363c57508051158061363c575080806020019051602081101561363957600080fd5b50515b6136775760405162461bcd60e51b81526004018080602001828103825260248152602001806145526024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138bf5760008084838151811061369d57fe5b60200260200101518584600101815181106136b457fe5b60200260200101519150915060006136cc8383613ef4565b50905060008785600101815181106136e057fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461370e57826000613712565b6000835b91509150600060028a51038810613729578861376a565b61376a7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061375d57fe5b6020026020010151613462565b90506137977f00000000000000000000000000000000000000000000000000000000000000008888613462565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137d4576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561384557818101518382015260200161382d565b50505050905090810190601f1680156138725780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561389457600080fd5b505af11580156138a8573d6000803e3d6000fd5b505060019099019850613682975050505050505050565b50505050565b606060028251101561391e576040805162461bcd60e51b815260206004820152601b60248201527f436f756761724c6962726172793a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561393657600080fd5b50604051908082528060200260200182016040528015613960578160200160208202803683370190505b509050828160018351038151811061397457fe5b60209081029190910101528151600019015b801561345a576000806139b6878660018603815181106139a257fe5b602002602001015187868151811061340757fe5b915091506139d88484815181106139c957fe5b60200260200101518383613d58565b8460018503815181106139e757fe5b6020908102919091010152505060001901613986565b60005b600183510381101561322157600080848381518110613a1b57fe5b6020026020010151858460010181518110613a3257fe5b6020026020010151915091506000613a4a8383613ef4565b5090506000613a7a7f00000000000000000000000000000000000000000000000000000000000000008585613462565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613abb57600080fd5b505afa158015613acf573d6000803e3d6000fd5b505050506040513d6060811015613ae557600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613b1b578284613b1e565b83835b91509150613b7c828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613b89868383613226565b945050505050600080856001600160a01b0316886001600160a01b031614613bb357826000613bb7565b6000835b91509150600060028c51038a10613bce578a613c02565b613c027f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061375d57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c8c578181015183820152602001613c74565b50505050905090810190601f168015613cb95780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613cdb57600080fd5b505af1158015613cef573d6000803e3d6000fd5b50506001909b019a50613a009950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d985760405162461bcd60e51b81526004018080602001828103825260298152602001806145766029913960400191505060405180910390fd5b600083118015613da85750600082115b613de35760405162461bcd60e51b81526004018080602001828103825260258152602001806144c56025913960400191505060405180910390fd5b6000613e076103e8613dfb868863ffffffff61424616565b9063ffffffff61424616565b90506000613e216103e5613dfb868963ffffffff613d0816565b9050613e3e6001828481613e3157fe5b049063ffffffff6142a916565b9695505050505050565b6000808411613e885760405162461bcd60e51b815260040180806020018281038252602281526020018061450d6022913960400191505060405180910390fd5b600083118015613e985750600082115b613ed35760405162461bcd60e51b81526004018080602001828103825260258152602001806144c56025913960400191505060405180910390fd5b82613ee4858463ffffffff61424616565b81613eeb57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f485760405162461bcd60e51b815260040180806020018281038252602281526020018061447f6022913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613f68578284613f6b565b83835b90925090506001600160a01b038216613fcb576040805162461bcd60e51b815260206004820152601b60248201527f436f756761724c6962726172793a205a45524f5f414444524553530000000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561404c57600080fd5b505afa158015614060573d6000803e3d6000fd5b505050506040513d602081101561407657600080fd5b50516001600160a01b0316141561412957604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156140fc57600080fd5b505af1158015614110573d6000803e3d6000fd5b505050506040513d602081101561412657600080fd5b50505b6000806141577f00000000000000000000000000000000000000000000000000000000000000008b8b6142f8565b91509150816000148015614169575080155b1561417957879350869250614239565b6000614186898484613e48565b90508781116141d957858110156141ce5760405162461bcd60e51b81526004018080602001828103825260238152602001806144146023913960400191505060405180910390fd5b889450925082614237565b60006141e6898486613e48565b9050898111156141f257fe5b878110156142315760405162461bcd60e51b815260040180806020018281038252602381526020018061452f6023913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806142615750508082028282828161425e57fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006143078585613ef4565b509050614315868686613462565b50600080614324888888613462565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561435c57600080fd5b505afa158015614370573d6000803e3d6000fd5b505050506040513d606081101561438657600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143b95780826143bc565b81815b9099909850965050505050505056fe436f75676172526f757465723a20455850495245440000000000000000000000436f756761724c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54436f75676172526f757465723a20494e53554646494349454e545f425f414d4f554e54436f75676172526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54436f75676172526f757465723a20494e56414c49445f50415448000000000000436f756761724c6962726172793a204944454e544943414c5f414444524553534553436f75676172526f757465723a204558434553534956455f494e5055545f414d4f554e54436f756761724c6962726172793a20494e53554646494349454e545f4c49515549444954595472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544436f756761724c6962726172793a20494e53554646494349454e545f414d4f554e54436f75676172526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544436f756761724c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54a2646970667358221220798437bbe11c7ab75c3546fde26a5eae2ca90e5ab74dd29496419f87f2e14f7564736f6c634300060600330000000000000000000000001ce8f3c99835ea3aaa888df682d33f7e6ea0b3f40000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23

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

0000000000000000000000001ce8f3c99835ea3aaa888df682d33f7e6ea0b3f40000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23

-----Decoded View---------------
Arg [0] : _factory (address): 0x1ce8f3c99835ea3aaa888df682d33f7e6ea0b3f4
Arg [1] : _WETH (address): 0x5c7f8a570d578ed84e63fdfa7b1ee72deae1ae23

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000001ce8f3c99835ea3aaa888df682d33f7e6ea0b3f4
Arg [1] : 0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23


Deployed ByteCode Sourcemap

16191:18334:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16662:10;-1:-1:-1;;;;;16676:4:0;16662:18;;16655:26;;;;16191:18334;;12:1:-1;9;2:12;20761:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20761:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20761:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33481:259;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33481:259:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33481:259:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27858:838;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27858:838:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27858:838:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27858:838:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27858:838: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;27858:838:0;;-1:-1:-1;27858:838:0;-1:-1:-1;;;;;;27858:838: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;27858:838:0;;;;;;;;;;;;;;;;;34272:250;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34272:250:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34272:250:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34272:250:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34272:250: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;34272:250:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34272:250:0;;-1:-1:-1;34272:250:0;;-1:-1:-1;;;;;34272:250:0:i;21440:671::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21440:671:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21440:671:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25117:619::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25117:619:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25117:619:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25117:619:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25117:619: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;25117:619:0;;-1:-1:-1;25117:619:0;-1:-1:-1;;;;;;25117:619:0;;;;;;;;:::i;27036:816::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27036:816:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27036:816:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27036:816:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27036:816: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;27036:816:0;;-1:-1:-1;27036:816:0;-1:-1:-1;;;;;;27036:816:0;;;;;;;;:::i;23565:712::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23565:712:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23565:712:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30849:708::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30849:708:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30849:708:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30849:708:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30849:708: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;30849:708:0;;-1:-1:-1;30849:708:0;-1:-1:-1;;;;;;30849:708:0;;;;;;;;:::i;32410:834::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32410:834:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32410:834:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;32410:834:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32410:834: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;32410:834:0;;-1:-1:-1;32410:834:0;-1:-1:-1;;;;;;32410:834:0;;;;;;;;:::i;26345:685::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26345:685:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26345:685:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26345:685: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;26345:685:0;;-1:-1:-1;26345:685:0;-1:-1:-1;;;;;;26345:685:0;;;;;;;;:::i;33748:258::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33748:258:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33748:258:0;;;;;;;;;;;;:::i;25742:597::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25742:597:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25742:597:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25742:597:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25742:597: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;25742:597:0;;-1:-1:-1;25742:597:0;-1:-1:-1;;;;;;25742:597:0;;;;;;;;:::i;16319:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16319:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;16319:38:0;;;;;;;;;;;;;;33288:185;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33288:185:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33288:185:0;;;;;;;;;;;;:::i;22859:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22859:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22859:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31563:841::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31563:841:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31563:841:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31563:841: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;31563:841:0;;-1:-1:-1;31563:841:0;-1:-1:-1;;;;;;31563:841:0;;;;;;;;:::i;19908:847::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19908:847:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19908:847:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16271:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16271:41:0;;;:::i;34014:250::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34014:250:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34014:250:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34014:250:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34014:250: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;34014:250:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34014:250:0;;-1:-1:-1;34014:250:0;;-1:-1:-1;;;;;34014:250:0:i;22117:663::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22117:663:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22117:663:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18159:732::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18159:732:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18159:732:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18897:968;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18897:968:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28702:798::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28702:798:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28702:798:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28702:798: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;28702:798:0;;-1:-1:-1;28702:798:0;-1:-1:-1;;;;;;28702:798:0;;;;;;;;:::i;20761:673::-;20998:16;21016:14;20979:8;16428:15;16416:8;:27;;16408:61;;;;;-1:-1:-1;;;16408:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16408:61:0;;;;;;;;;;;;;;;21070:196:::1;21100:5;21120:4;21139:9;21163:14;21192:12;21227:4;21247:8;21070:15;:196::i;:::-;21043:223:::0;;-1:-1:-1;21043:223:0;-1:-1:-1;21277:51:0::1;21305:5:::0;21312:2;21043:223;21277:27:::1;:51::i;:::-;21345:4;-1:-1:-1::0;;;;;21339:20:0::1;;21360:9;21339:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21339:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21339:31:0;;;;21381:45;21412:2;21416:9;21381:30;:45::i;:::-;20761:673:::0;;;;;;;;;;:::o;33481:259::-;33634:14;33673:59;33700:8;33710:9;33721:10;33673:26;:59::i;:::-;33666:66;33481:259;-1:-1:-1;;;;33481:259:0:o;27858:838::-;28072:21;28044:8;16428:15;16416:8;:27;;16408:61;;;;;-1:-1:-1;;;16408:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16408:61:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28144:4:0::1;28119:29;:4:::0;;-1:-1:-1;;28124:15:0;;28119:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28119:21:0::1;-1:-1:-1::0;;;;;28119:29:0::1;;28111:68;;;::::0;;-1:-1:-1;;;28111:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28111:68:0;;;;;;;;;;;;;::::1;;28200:52;28228:7;28237:8;28247:4;;28200:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28200:27:0::1;::::0;-1:-1:-1;;;28200:52:0:i:1;:::-;28190:62;;28302:12;28271:7;28296:1;28279:7;:14;:18;28271:27;;;;;;;;;;;;;;:43;;28263:96;;;;-1:-1:-1::0;;;28263:96:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28370:138;28416:4;;28421:1;28416:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28416:7:0::1;28425:10;28437:48;28459:7;28468:4;;28473:1;28468:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28468:7:0::1;28477:4;;28482:1;28477:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28477:7:0::1;28437:21;:48::i;:::-;28487:7;28495:1;28487:10;;;;;;;;;;;;;;28370:31;:138::i;:::-;28519:35;28525:7;28534:4;;28519:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28548:4:0::1;::::0;-1:-1:-1;28519:5:0::1;::::0;-1:-1:-1;;28519:35:0:i:1;:::-;28571:4;-1:-1:-1::0;;;;;28565:20:0::1;;28586:7;28611:1;28594:7;:14;:18;28586:27;;;;;;;;;;;;;;28565:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28565:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28565:49:0;;;;28625:63;28656:2;28660:7;28685:1;28668:7;:14;:18;28660:27;;;;;;;;;;;;;;28625:30;:63::i;:::-;27858:838:::0;;;;;;;;;:::o;34272:250::-;34416:21;34462:52;34489:7;34498:9;34509:4;34462:26;:52::i;:::-;34455:59;;34272:250;;;;;:::o;21440:671::-;21746:12;21760;21785;21800:46;21822:7;21831:6;21839;21800:21;:46::i;:::-;21785:61;;21857:10;21870;:33;;21894:9;21870:33;;;-1:-1:-1;;21870:33:0;21914:77;;;-1:-1:-1;;;21914:77:0;;21939:10;21914:77;;;;21959:4;21914:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21857:46;;-1:-1:-1;;;;;;21914:24:0;;;;;:77;;;;;-1:-1:-1;;21914:77:0;;;;;;;;-1:-1:-1;21914:24:0;:77;;;2:2:-1;;;;27:1;24;17:12;2:2;21914:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21914:77:0;;;;22023:80;22039:6;22047;22055:9;22066:10;22078;22090:2;22094:8;22023:15;:80::i;:::-;22002:101;;;;;;;;21440:671;;;;;;;;;;;;;;;;:::o;25117:619::-;25341:21;25322:8;16428:15;16416:8;:27;;16408:61;;;;;-1:-1:-1;;;16408:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16408:61:0;;;;;;;;;;;;;;;25385:52:::1;25413:7;25422:8;25432:4;;25385:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25385:27:0::1;::::0;-1:-1:-1;;;25385:52:0:i:1;:::-;25375:62;;25487:12;25456:7;25481:1;25464:7;:14;:18;25456:27;;;;;;;;;;;;;;:43;;25448:96;;;;-1:-1:-1::0;;;25448:96:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25555:138;25601:4;;25606:1;25601:7;;;;;;25555:138;25704:24;25710:7;25719:4;;25704:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25725:2:0;;-1:-1:-1;25704:5:0::1;::::0;-1:-1:-1;;25704:24:0:i:1;27036:816::-:0;27250:21;27222:8;16428:15;16416:8;:27;;16408:61;;;;;-1:-1:-1;;;16408:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16408:61:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27322:4:0::1;27297:29;:4:::0;;-1:-1:-1;;27302:15:0;;27297:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27297:21:0::1;-1:-1:-1::0;;;;;27297:29:0::1;;27289:68;;;::::0;;-1:-1:-1;;;27289:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27289:68:0;;;;;;;;;;;;;::::1;;27378:52;27405:7;27414:9;27425:4;;27378:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27378:26:0::1;::::0;-1:-1:-1;;;27378:52:0:i:1;:::-;27368:62;;27463:11;27449:7;27457:1;27449:10;;;;;;;;;;;;;;:25;;27441:74;;;;-1:-1:-1::0;;;27441:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23565:712:::0;23883:14;23910:12;23925:43;23947:7;23956:5;23963:4;23925:21;:43::i;:::-;23910:58;;23979:10;23992;:33;;24016:9;23992:33;;;-1:-1:-1;;23992:33:0;24036:77;;;-1:-1:-1;;;24036:77:0;;24061:10;24036:77;;;;24081:4;24036:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23979:46;;-1:-1:-1;;;;;;24036:24:0;;;;;:77;;;;;-1:-1:-1;;24036:77:0;;;;;;;;-1:-1:-1;24036:24:0;:77;;;2:2:-1;;;;27:1;24;17:12;2:2;24036:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24036:77:0;;;;24136:133;24198:5;24205:9;24216:14;24232:12;24246:2;24250:8;24136:47;:133::i;:::-;24124:145;23565:712;-1:-1:-1;;;;;;;;;;;;;23565:712:0:o;30849:708::-;31083:8;16428:15;16416:8;:27;;16408:61;;;;;-1:-1:-1;;;16408:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16408:61:0;;;;;;;;;;;;;;;31104:136:::1;31150:4;;31155:1;31150:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31150:7:0::1;31159:10;31171:48;31193:7;31202:4;;31207:1;31202:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31202:7:0::1;31211:4;;31216:1;31211:7;;;;;;31171:48;31221:8;31104:31;:136::i;:::-;31251:18;31279:4:::0;;-1:-1:-1;;31284:15:0;;31279:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31279:21:0::1;-1:-1:-1::0;;;;;31272:39:0::1;;31312:2;31272:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31272:43:0::1;-1:-1:-1::0;;;;;31272:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31272:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31272:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31272:43:0;31326:44:::1;::::0;;31272:43:::1;31326:44:::0;;::::1;::::0;;;;;;;;;;;31272:43;;-1:-1:-1;31326:44:0::1;::::0;;;31361:4;;;;;;31326:44;::::1;::::0;31361:4;;31326:44;31361:4;31326:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31367:2:0;;-1:-1:-1;31326:34:0::1;::::0;-1:-1:-1;;31326:44:0:i:1;:::-;31469:12:::0;31403:62:::1;31451:13:::0;31410:4;;-1:-1:-1;;31415:15:0;;31410:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31410:21:0::1;-1:-1:-1::0;;;;;31403:39:0::1;;31443:2;31403:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31403:43:0::1;-1:-1:-1::0;;;;;31403:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31403:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31403:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31403:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;31381:168;;;;-1:-1:-1::0;;;31381:168:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16480:1;30849:708:::0;;;;;;;:::o;32410:834::-;32677:8;16428:15;16416:8;:27;;16408:61;;;;;-1:-1:-1;;;16408:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16408:61:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32736:4:0::1;32711:29;:4:::0;;-1:-1:-1;;32716:15:0;;32711:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32711:21:0::1;-1:-1:-1::0;;;;;32711:29:0::1;;32703:68;;;::::0;;-1:-1:-1;;;32703:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32703:68:0;;;;;;;;;;;;;::::1;;32782:136;32828:4;;32833:1;32828:7;;;;;;32782:136;32929:55;32964:4;;32929:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32978:4:0::1;::::0;-1:-1:-1;32929:34:0::1;::::0;-1:-1:-1;;32929:55:0:i:1;:::-;33012:37;::::0;;-1:-1:-1;;;33012:37:0;;33043:4:::1;33012:37;::::0;::::1;::::0;;;32995:14:::1;::::0;-1:-1:-1;;;;;33019:4:0::1;33012:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;33012:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33012:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33012:37:0;;-1:-1:-1;33068:25:0;;::::1;;33060:78;;;;-1:-1:-1::0;;;33060:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33155:4;-1:-1:-1::0;;;;;33149:20:0::1;;33170:9;33149:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33149:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33149:31:0;;;;33191:45;33222:2;33226:9;33191:30;:45::i;26345:685::-:0;26561:21;26533:8;16428:15;16416:8;:27;;16408:61;;;;;-1:-1:-1;;;16408:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16408:61:0;;;;;;;;;;;;;;;26619:4:::1;-1:-1:-1::0;;;;;26608:15:0::1;:4;;26613:1;26608:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26608:7:0::1;-1:-1:-1::0;;;;;26608:15:0::1;;26600:54;;;::::0;;-1:-1:-1;;;26600:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26600:54:0;;;;;;;;;;;;;::::1;;26675:53;26703:7;26712:9;26723:4;;26675:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26675:27:0::1;::::0;-1:-1:-1;;;26675:53:0:i:1;:::-;26665:63;;26778:12;26747:7;26772:1;26755:7;:14;:18;26747:27;;;;;;;;;;;;;;:43;;26739:96;;;;-1:-1:-1::0;;;26739:96:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26852:4;-1:-1:-1::0;;;;;26846:19:0::1;;26873:7;26881:1;26873:10;;;;;;;;;;;;;;26846:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26846:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26846:40:0;;;;;26910:4;-1:-1:-1::0;;;;;26904:20:0::1;;26925:48;26947:7;26956:4;;26961:1;26956:7;;;;;;26925:48;26975:7;26983:1;26975:10;;;;;;;;;;;;;;26904:82;;;;;;;;;;;;;-1:-1:-1::0;;;;;26904:82:0::1;-1:-1:-1::0;;;;;26904:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26904:82:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26904:82:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26904:82:0;26897:90:::1;;;;26998:24;27004:7;27013:4;;26998:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27019:2:0;;-1:-1:-1;26998:5:0::1;::::0;-1:-1:-1;;26998:24:0:i:1;:::-;26345:685:::0;;;;;;;;:::o;33748:258::-;33901:13;33939:59;33965:9;33976;33987:10;33939:25;:59::i;25742:597::-;25966:21;25947:8;16428:15;16416:8;:27;;16408:61;;;;;-1:-1:-1;;;16408:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16408:61:0;;;;;;;;;;;;;;;26010:52:::1;26037:7;26046:9;26057:4;;26010:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26010:26:0::1;::::0;-1:-1:-1;;;26010:52:0:i:1;:::-;26000:62;;26095:11;26081:7;26089:1;26081:10;;;;;;;;;;;;;;:25;;26073:74;;;;-1:-1:-1::0;;;26073:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16319:38:::0;;;:::o;33288:185::-;33385:12;33417:48;33437:7;33446:8;33456;33417:19;:48::i;22859:700::-;23125:14;23106:8;16428:15;16416:8;:27;;16408:61;;;;;-1:-1:-1;;;16408:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16408:61:0;;;;;;;;;;;;;;;23168:196:::1;23198:5;23218:4;23237:9;23261:14;23290:12;23325:4;23345:8;23168:15;:196::i;:::-;23414:38;::::0;;-1:-1:-1;;;23414:38:0;;23446:4:::1;23414:38;::::0;::::1;::::0;;;23152:212;;-1:-1:-1;23375:78:0::1;::::0;-1:-1:-1;23403:5:0;;23410:2;;-1:-1:-1;;;;;23414: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;23414:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23414:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23414:38:0;23375:27:::1;:78::i;:::-;23470:4;-1:-1:-1::0;;;;;23464:20:0::1;;23485:9;23464:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23464:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23464:31:0;;;;23506:45;23537:2;23541:9;23506:30;:45::i;31563:841::-:0;31823:8;16428:15;16416:8;:27;;16408:61;;;;;-1:-1:-1;;;16408:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16408:61:0;;;;;;;;;;;;;;;31868:4:::1;-1:-1:-1::0;;;;;31857:15:0::1;:4;;31862:1;31857:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31857:7:0::1;-1:-1:-1::0;;;;;31857:15:0::1;;31849:54;;;::::0;;-1:-1:-1;;;31849:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31849:54:0;;;;;;;;;;;;;::::1;;31914:13;31930:9;31914:25;;31956:4;-1:-1:-1::0;;;;;31950:19:0::1;;31977:8;31950:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31950:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31950:38:0;;;;;32012:4;-1:-1:-1::0;;;;;32006:20:0::1;;32027:48;32049:7;32058:4;;32063:1;32058:7;;;;;;32027:48;32077:8;32006:80;;;;;;;;;;;;;-1:-1:-1::0;;;;;32006:80:0::1;-1:-1:-1::0;;;;;32006:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32006:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32006:80:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32006:80:0;31999:88:::1;;;;32098:18;32126:4:::0;;-1:-1:-1;;32131:15:0;;32126:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32126:21:0::1;-1:-1:-1::0;;;;;32119:39:0::1;;32159:2;32119:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32119:43:0::1;-1:-1:-1::0;;;;;32119:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32119:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32119:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32119:43:0;32173:44:::1;::::0;;32119:43:::1;32173:44:::0;;::::1;::::0;;;;;;;;;;;32119:43;;-1:-1:-1;32173:44:0::1;::::0;;;32208:4;;;;;;32173:44;::::1;::::0;32208:4;;32173:44;32208:4;32173:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32214:2:0;;-1:-1:-1;32173:34:0::1;::::0;-1:-1:-1;;32173:44:0:i:1;:::-;32316:12:::0;32250:62:::1;32298:13:::0;32257:4;;-1:-1:-1;;32262:15:0;;32257:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32257:21:0::1;-1:-1:-1::0;;;;;32250:39:0::1;;32290:2;32250:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32250:43:0::1;-1:-1:-1::0;;;;;32250:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;19908:847:0::0;20162:12;20176;20143:8;16428:15;16416:8;:27;;16408:61;;;;;-1:-1:-1;;;16408:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16408:61:0;;;;;;;;;;;;;;;20201:12:::1;20216:46;20238:7;20247:6;20255;20216:21;:46::i;:::-;20273:59;::::0;;-1:-1:-1;;;20273:59:0;;20304:10:::1;20273:59;::::0;::::1;::::0;-1:-1:-1;;;;;20273:30:0;::::1;:59:::0;;;;;;;;;;;;;;20201:61;;-1:-1:-1;20273:30:0;;::::1;::::0;:59;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20273:30:0;:59;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20273:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20273:59:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;20400:26:0::1;::::0;;-1:-1:-1;;;20400:26:0;;-1:-1:-1;;;;;20400:26:0;;::::1;;::::0;::::1;::::0;;;20370:12:::1;::::0;;;20400:22;;::::1;::::0;::::1;::::0;:26;;;;;;;;;;;20370:12;20400:22;:26;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20400:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20400:26:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20400:26:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20400:26:0;-1:-1:-1;20438:14:0::1;20457:40;20482:6:::0;20490;20457:24:::1;:40::i;:::-;20437:60;;;20539:6;-1:-1:-1::0;;;;;20529:16:0::1;:6;-1:-1:-1::0;;;;;20529:16:0::1;;:58;;20570:7;20579;20529:58;;;20549:7;20558;20529:58;20508:79:::0;;-1:-1:-1;20508:79:0;-1:-1:-1;20606:21:0;;::::1;;20598:69;;;;-1:-1:-1::0;;;20598:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20697:10;20686:7;:21;;20678:69;;;;-1:-1:-1::0;;;20678:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16480:1;;;;19908:847:::0;;;;;;;;;;;:::o;16271:41::-;;;:::o;34014:250::-;34158:21;34204:52;34232:7;34241:8;34251:4;34204:27;:52::i;22117:663::-;22406:16;22424:14;22451:12;22466:43;22488:7;22497:5;22504:4;22466:21;:43::i;:::-;22451:58;;22520:10;22533;:33;;22557:9;22533:33;;;-1:-1:-1;;22533:33:0;22577:77;;;-1:-1:-1;;;22577:77:0;;22602:10;22577:77;;;;22622:4;22577:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22520:46;;-1:-1:-1;;;;;;22577:24:0;;;;;:77;;;;;-1:-1:-1;;22577:77:0;;;;;;;;-1:-1:-1;22577:24:0;:77;;;2:2:-1;;;;27:1;24;17:12;2:2;22577:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22577:77:0;;;;22692:80;22711:5;22718:9;22729:14;22745:12;22759:2;22763:8;22692:18;:80::i;:::-;22665:107;;;;-1:-1:-1;22117:663:0;-1:-1:-1;;;;;;;;;;;;;22117:663:0:o;18159:732::-;18447:12;18461;18475:14;18428:8;16428:15;16416:8;:27;;16408:61;;;;;-1:-1:-1;;;16408:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16408:61:0;;;;;;;;;;;;;;;18523:85:::1;18537:6;18545;18553:14;18569;18585:10;18597;18523:13;:85::i;:::-;18502:106:::0;;-1:-1:-1;18502:106:0;-1:-1:-1;18619:12:0::1;18634:46;18656:7;18665:6:::0;18673;18634:21:::1;:46::i;:::-;18619:61;;18691:66;18723:6;18731:10;18743:4;18749:7;18691:31;:66::i;:::-;18768;18800:6;18808:10;18820:4;18826:7;18768:31;:66::i;:::-;18869:4;-1:-1:-1::0;;;;;18857:22:0::1;;18880:2;18857:26;;;;;;;;;;;;;-1:-1:-1::0;;;;;18857:26:0::1;-1:-1:-1::0;;;;;18857:26:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18857:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18857:26:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18857:26:0;18159:732;;;;-1:-1:-1;18857:26:0;;-1:-1:-1;18159:732:0;;-1:-1:-1;;;;;;;;;18159:732:0:o;18897:968::-;19150:16;19168:14;19184;19131:8;16428:15;16416:8;:27;;16408:61;;;;;-1:-1:-1;;;16408:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16408:61:0;;;;;;;;;;;;;;;19238:176:::1;19266:5;19286:4;19305:18;19338:9;19362:14;19391:12;19238:13;:176::i;:::-;19211:203:::0;;-1:-1:-1;19211:203:0;-1:-1:-1;19425:12:0::1;19440:43;19462:7;19471:5:::0;19478:4:::1;19440:21;:43::i;:::-;19425:58;;19494:69;19526:5;19533:10;19545:4;19551:11;19494:31;:69::i;:::-;19580:4;-1:-1:-1::0;;;;;19574:19:0::1;;19601:9;19574:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19574:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19574:39:0;;;;;19637:4;-1:-1:-1::0;;;;;19631:20:0::1;;19652:4;19658:9;19631:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;19631:37:0::1;-1:-1:-1::0;;;;;19631:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19631:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19631:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19631:37:0;19624:45:::1;;;;19704:4;-1:-1:-1::0;;;;;19692:22:0::1;;19715:2;19692:26;;;;;;;;;;;;;-1:-1:-1::0;;;;;19692:26:0::1;-1:-1:-1::0;;;;;19692:26:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19692:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19692:26:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19692:26:0;;-1:-1:-1;19769:9:0::1;:21:::0;-1:-1:-1;19765:92:0::1;;;19792:65;19823:10;19847:9;19835;:21;19792:30;:65::i;:::-;16480:1;18897:968:::0;;;;;;;;;;;:::o;28702:798::-;28915:21;28887:8;16428:15;16416:8;:27;;16408:61;;;;;-1:-1:-1;;;16408:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16408:61:0;;;;;;;;;;;;;;;28973:4:::1;-1:-1:-1::0;;;;;28962:15:0::1;:4;;28967:1;28962:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28962:7:0::1;-1:-1:-1::0;;;;;28962:15:0::1;;28954:54;;;::::0;;-1:-1:-1;;;28954:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28954:54:0;;;;;;;;;;;;;::::1;;29029:52;29056:7;29065:9;29076:4;;29029:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29029:26:0::1;::::0;-1:-1:-1;;;29029:52:0:i:1;:::-;29019:62;;29114:9;29100:7;29108:1;29100:10;;;;;;;;;;;;;;:23;;29092:72;;;;-1:-1:-1::0;;;29092:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29181:4;-1:-1:-1::0;;;;;29175:19:0::1;;29202:7;29210:1;29202:10;;;;;;;;;;;;;;29175:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29175:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29175:40:0;;;;;29239:4;-1:-1:-1::0;;;;;29233:20:0::1;;29254:48;29276:7;29285:4;;29290:1;29285:7;;;;;;29254:48;29304:7;29312:1;29304:10;;;;;;;;;;;;;;29233:82;;;;;;;;;;;;;-1:-1:-1::0;;;;;29233:82:0::1;-1:-1:-1::0;;;;;29233:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29233:82:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29233:82:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29233:82:0;29226:90:::1;;;;29327:24;29333:7;29342:4;;29327:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29348:2:0;;-1:-1:-1;29327:5:0::1;::::0;-1:-1:-1;;29327:24:0:i:1;:::-;29414:7;29422:1;29414:10;;;;;;;;;;;;;;29402:9;:22;29398:94;;;29426:66;29457:10;29481:7;29489:1;29481:10;;;;;;;;;;;;;;29469:9;:22;29426:30;:66::i;1329:361::-:0;1524:45;;;-1:-1:-1;;;;;1524:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1524:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1513:57:0;;;;1478:12;;1492:17;;1513:10;;;;1524:45;1513:57;;;25:18:-1;1513: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;;;1513: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;;1477:93:0;;;;1589:7;:57;;;;-1:-1:-1;1601:11:0;;:16;;:44;;;1632:4;1621:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1621:24:0;1601:44;1581:101;;;;;-1:-1:-1;;;1581:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1329:361;;;;;:::o;2108:195::-;2216:12;;;2178;2216;;;;;;;;;-1:-1:-1;;;;;2195:7:0;;;2209:5;;2195: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;;;2195: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;;2177:52:0;;;2248:7;2240:55;;;;-1:-1:-1;;;2240:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2108:195;;;:::o;12672:511::-;12765:14;12811:1;12800:8;:12;12792:65;;;;-1:-1:-1;;;12792:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12888:1;12876:9;:13;:31;;;;;12906:1;12893:10;:14;12876:31;12868:81;;;;-1:-1:-1;;;12868:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12960:20;12983:17;:8;12996:3;12983:17;:12;:17;:::i;:::-;12960:40;-1:-1:-1;13011:14:0;13028:31;12960:40;13048:10;13028:31;:19;:31;:::i;:::-;13011:48;-1:-1:-1;13070:16:0;13089:40;13113:15;13089:19;:9;13103:4;13089:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;13070:59;;13164:11;13152:9;:23;;;;;;;12672:511;-1:-1:-1;;;;;;;12672:511:0:o;13852:508::-;13953:21;14010:1;13995:4;:11;:16;;13987:56;;;;;-1:-1:-1;;;13987:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14075:4;:11;14064:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14064:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14064:23:0;;14054:33;;14111:8;14098:7;14106:1;14098:10;;;;;;;;;;;;;:21;;;;;14135:6;14130:223;14161:1;14147:4;:11;:15;14143:1;:19;14130:223;;;14185:14;14201:15;14220:42;14232:7;14241:4;14246:1;14241:7;;;;;;;;;;;;;;14250:4;14255:1;14259;14255:5;14250:11;;;;;;;;;;;;;;14220;:42::i;:::-;14184:78;;;;14294:47;14307:7;14315:1;14307:10;;;;;;;;;;;;;;14319:9;14330:10;14294:12;:47::i;:::-;14277:7;14285:1;14289;14285:5;14277:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;14164:3:0;;14130:223;;;;13852:508;;;;;:::o;11155:478::-;11244:12;11270:14;11286;11304:26;11315:6;11323;11304:10;:26::i;:::-;11468:32;;;-1:-1:-1;;11468:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;11468:32:0;;;;;11458:43;;;;;;-1:-1:-1;;;;;;11371:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11371:251:0;;;;;;;11361:262;;;;;;;;;11155:478;-1:-1:-1;;;;;11155:478:0:o;1698:402::-;1923:51;;;-1:-1:-1;;;;;1923:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1923:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1912:63:0;;;;1877:12;;1891:17;;1912:10;;;;1923:51;1912:63;;;25:18:-1;1912: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;;;1912: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;;1876:99:0;;;;1994:7;:57;;;;-1:-1:-1;2006:11:0;;:16;;:44;;;2037:4;2026:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2026:24:0;2006:44;1986:106;;;;-1:-1:-1;;;1986:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1698:402;;;;;;:::o;24388:723::-;24495:6;24490:614;24521:1;24507:4;:11;:15;24503:1;:19;24490:614;;;24545:13;24560:14;24579:4;24584:1;24579:7;;;;;;;;;;;;;;24588:4;24593:1;24597;24593:5;24588:11;;;;;;;;;;;;;;24544:56;;;;24616:14;24635:39;24660:5;24667:6;24635:24;:39::i;:::-;24615:59;;;24689:14;24706:7;24714:1;24718;24714:5;24706:14;;;;;;;;;;;;;;24689:31;;24736:15;24753;24781:6;-1:-1:-1;;;;;24772:15:0;:5;-1:-1:-1;;;;;24772:15:0;;:61;;24814:9;24830:1;24772:61;;;24796:1;24800:9;24772:61;24735:98;;;;24848:10;24879:1;24865:4;:11;:15;24861:1;:19;:79;;24937:3;24861:79;;;24883:51;24905:7;24914:6;24922:4;24927:1;24931;24927:5;24922:11;;;;;;;;;;;;;;24883:21;:51::i;:::-;24848:92;;24967:45;24989:7;24998:5;25005:6;24967:21;:45::i;:::-;-1:-1:-1;;;;;24955:63:0;;25037:10;25049;25061:2;25075:1;25065:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;25065:12:0;87:42:-1;143:17;;-1:-1;25065:12:0;;24955:137;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24955:137:0;-1:-1:-1;;;;;24955:137: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;24955:137:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24955:137:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24524:3:0;;;;;-1:-1:-1;24490:614:0;;-1:-1:-1;;;;;;;;24490:614:0;;;24388:723;;;:::o;14441:529::-;14542:21;14599:1;14584:4;:11;:16;;14576:56;;;;;-1:-1:-1;;;14576:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14664:4;:11;14653:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14653:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14653:23:0;;14643:33;;14717:9;14687:7;14712:1;14695:7;:14;:18;14687:27;;;;;;;;;;;;;;;;;:39;14751:11;;-1:-1:-1;;14751:15:0;14737:226;14768:5;;14737:226;;14796:14;14812:15;14831:42;14843:7;14852:4;14861:1;14857;:5;14852:11;;;;;;;;;;;;;;14865:4;14870:1;14865:7;;;;;;;14831:42;14795:78;;;;14905:46;14917:7;14925:1;14917:10;;;;;;;;;;;;;;14929:9;14940:10;14905:11;:46::i;:::-;14888:7;14900:1;14896;:5;14888:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;14775:3:0;14737:226;;29647:1196;29760:6;29755:1081;29786:1;29772:4;:11;:15;29768:1;:19;29755:1081;;;29810:13;29825:14;29844:4;29849:1;29844:7;;;;;;;;;;;;;;29853:4;29858:1;29862;29858:5;29853:11;;;;;;;;;;;;;;29809:56;;;;29881:14;29900:39;29925:5;29932:6;29900:24;:39::i;:::-;29880:59;;;29954:16;29985:45;30007:7;30016:5;30023:6;29985:21;:45::i;:::-;29954:77;;30046:16;30077:17;30165:13;30180;30198:4;-1:-1:-1;;;;;30198:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30198:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30198:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30198:18:0;;;;;;;-1:-1:-1;;;;;30164:52:0;;;;-1:-1:-1;30164:52:0;;-1:-1:-1;30232:17:0;;-1:-1:-1;;;;;30273:15:0;;;;;;;:61;;30315:8;30325;30273:61;;;30292:8;30302;30273:61;30231:103;;;;30363:56;30406:12;30370:5;-1:-1:-1;;;;;30363:23:0;;30395:4;30363:38;;;;;;;;;;;;;-1:-1:-1;;;;;30363:38:0;-1:-1:-1;;;;;30363:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;30363:56:0;30349:70;;30449:68;30476:11;30489:12;30503:13;30449:26;:68::i;:::-;30434:83;;29755:1081;;;;30548:15;30565;30593:6;-1:-1:-1;;;;;30584:15:0;:5;-1:-1:-1;;;;;30584:15:0;;:67;;30629:12;30648:1;30584:67;;;30608:1;30612:12;30584:67;30547:104;;;;30666:10;30697:1;30683:4;:11;:15;30679:1;:19;:79;;30755:3;30679:79;;;30701:51;30723:7;30732:6;30740:4;30745:1;30749;30745:5;30740:11;;;;;;;30701:51;30811:12;;;30821:1;30811:12;;;;;;;;;;-1:-1:-1;;;30773:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30773:51:0;;;;;;;;;;;;;;;;;;;;;;30666:92;;-1:-1:-1;30773:9:0;;;;;;30783:10;;30795;;30666:92;;30811:12;;30773:51;;;;;;;;30811:12;;30773:51;;;;30811: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;30773:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30773:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29789:3:0;;;;;-1:-1:-1;29755:1081:0;;-1:-1:-1;;;;;;;;;;29755:1081:0;10190:129;10274:5;;;10269:16;;;;10261:50;;;;;-1:-1:-1;;;10261:50:0;;;;;;;;;;;;-1:-1:-1;;;10261:50:0;;;;;;;;;;;;;;13304:466;13397:13;13443:1;13431:9;:13;13423:67;;;;-1:-1:-1;;;13423:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13521:1;13509:9;:13;:31;;;;;13539:1;13526:10;:14;13509:31;13501:81;;;;-1:-1:-1;;;13501:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13593:14;13610:34;13639:4;13610:24;:9;13624;13610:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;13593:51;-1:-1:-1;13655:16:0;13674:34;13704:3;13674:25;:10;13689:9;13674:25;:14;:25;:::i;:34::-;13655:53;;13730:32;13760:1;13743:11;13731:9;:23;;;;;;;13730:32;:29;:32;:::i;:::-;13719:43;13304:466;-1:-1:-1;;;;;;13304:466:0:o;12235:315::-;12317:12;12360:1;12350:7;:11;12342:58;;;;-1:-1:-1;;;12342:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12430:1;12419:8;:12;:28;;;;;12446:1;12435:8;:12;12419:28;12411:78;;;;-1:-1:-1;;;12411:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12534:8;12510:21;:7;12522:8;12510:21;:11;:21;:::i;:::-;:32;;;;;;;12235:315;-1:-1:-1;;;;12235:315:0:o;10720:343::-;10795:14;10811;10856:6;-1:-1:-1;;;;;10846:16:0;:6;-1:-1:-1;;;;;10846:16:0;;;10838:63;;;;-1:-1:-1;;;10838:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10940:6;-1:-1:-1;;;;;10931:15:0;:6;-1:-1:-1;;;;;10931:15:0;;:53;;10969:6;10977;10931:53;;;10950:6;10958;10931:53;10912:72;;-1:-1:-1;10912:72:0;-1:-1:-1;;;;;;11003:20:0;;10995:60;;;;;-1:-1:-1;;;10995:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10720:343;;;;;:::o;16784:1369::-;17097:47;;;-1:-1:-1;;;17097:47:0;;-1:-1:-1;;;;;17097:47:0;;;;;;;;;;;;;;;;17002:12;;;;;;17112:7;17097:31;;;;;;:47;;;;;;;;;;;;;;;:31;:47;;;2:2:-1;;;;27:1;24;17:12;2:2;17097:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17097:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17097:47:0;-1:-1:-1;;;;;17097:61:0;;17093:144;;;17175:50;;;-1:-1:-1;;;17175:50:0;;-1:-1:-1;;;;;17175:50:0;;;;;;;;;;;;;;;;17190:7;17175:34;;;;;;:50;;;;;;;;;;;;;;;-1:-1:-1;17175:34:0;:50;;;2:2:-1;;;;27:1;24;17:12;2:2;17175:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17175:50:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;17093:144:0;17248:13;17263;17280:50;17306:7;17315:6;17323;17280:25;:50::i;:::-;17247:83;;;;17345:8;17357:1;17345:13;:30;;;;-1:-1:-1;17362:13:0;;17345:30;17341:805;;;17414:14;;-1:-1:-1;17430:14:0;;-1:-1:-1;17341:805:0;;;17478:19;17500:55;17520:14;17536:8;17546;17500:19;:55::i;:::-;17478:77;;17592:14;17574;:32;17570:565;;17653:10;17635:14;:28;;17627:76;;;;-1:-1:-1;;;17627:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17744:14;;-1:-1:-1;17760:14:0;-1:-1:-1;17760:14:0;17570:565;;;17816:19;17838:55;17858:14;17874:8;17884;17838:19;:55::i;:::-;17816:77;;17937:14;17919;:32;;17912:40;;;;17997:10;17979:14;:28;;17971:76;;;;-1:-1:-1;;;17971:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18088:14;-1:-1:-1;18104:14:0;;-1:-1:-1;17570:565:0;17341:805;;16784:1369;;;;;;;;;;;:::o;10327:142::-;10379:6;10406;;;:30;;-1:-1:-1;;10421:5:0;;;10435:1;10430;10421:5;10430:1;10416:15;;;;;:20;10406:30;10398:63;;;;;-1:-1:-1;;;10398:63:0;;;;;;;;;;;;-1:-1:-1;;;10398:63:0;;;;;;;;;;;;;;10054:128;10138:5;;;10133:16;;;;10125:49;;;;;-1:-1:-1;;;10125:49:0;;;;;;;;;;;;-1:-1:-1;;;10125:49:0;;;;;;;;;;;;;;11691:431;11784:13;11799;11826:14;11845:26;11856:6;11864;11845:10;:26::i;:::-;11825:46;;;11882:32;11890:7;11899:6;11907;11882:7;:32::i;:::-;;11926:13;11941;11971:32;11979:7;11988:6;11996;11971:7;:32::i;:::-;-1:-1:-1;;;;;11959:57:0;;:59;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11959:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11959:59:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11959:59:0;;;;;;;-1:-1:-1;;;;;11925:93:0;;;;-1:-1:-1;11925:93:0;;-1:-1:-1;;;;;;12052:16:0;;;;;;;:62;;12095:8;12105;12052:62;;;12072:8;12082;12052:62;12029:85;;;;-1:-1:-1;11691:431:0;-1:-1:-1;;;;;;;11691:431:0:o

Swarm Source

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