Contract 0xbe65b8f75b9f20f4c522e0067a3887fada714800 1

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x0f8ffac3a0093a1e28f8ef1ae05ad393ea4c0ed56d80eef736b45d1650249c88Add Liquidity ET...119304732021-10-20 7:30:4427 mins ago0xe926f18f513e40bde56620f940a01b22823c73d0 IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000.035068459011711 BNB0.0009052
0xad6261d8f506c9b53dc61a49a80d102757a31bfba53b284f8d9d5b2bb2c838dfSwap Exact Token...119304402021-10-20 7:29:0529 mins ago0xe926f18f513e40bde56620f940a01b22823c73d0 IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000 BNB0.000692945
0x7eb6e79a30af3483e131da35c35bec184ef268c426ef93afc5c8995941f13a7bSwap Exact Token...119300092021-10-20 7:06:5151 mins ago0xa5a2ac400d949c6b786677e98b5e26a3e5de3b86 IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000 BNB0.00095101
0x63af9f2a6132f9f60e1deb7dfd428964534e8fd1fc2dfb99dde051073e130f1bSwap Exact Token...119295762021-10-20 6:44:141 hr 14 mins ago0xcad7b1b7dd026053d6b66dfb598144c5c9b6e9da IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000 BNB0.00049386
0xb618ddf4223dd49d1201c44e9d8591f9aab12e8a72e4b86567b818b7894bdb14Swap Exact Token...119295412021-10-20 6:42:291 hr 16 mins ago0xd312f49418941317c340317661ef1e39a1070fdf IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000 BNB0.001035855
0xdbb11ffd16d08e806305e2e6ae0c5119e8ad209c56673bff35de2252f714a657Add Liquidity119295312021-10-20 6:41:591 hr 16 mins ago0xcad7b1b7dd026053d6b66dfb598144c5c9b6e9da IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000 BNB0.000950325
0xc2f347e831730b6498ab42082b0052107cba599924cb2b49d575f23f4f6bdc75Swap Exact ETH F...119294772021-10-20 6:39:171 hr 19 mins ago0xcad7b1b7dd026053d6b66dfb598144c5c9b6e9da IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000.05 BNB0.00067643
0xb2c54082c182733a80ac13d0b0c713e3e48ad25ebbb7c64ce721a9dcb0b79adaSwap Exact Token...119294582021-10-20 6:38:201 hr 20 mins ago0x692eeaf03a1814a72ff653809c892e75d4cc1461 IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000 BNB0.00092589
0x96778eca2f05437d9d331a09257e7166d5544b575fbd3c66e8876ea21b971844Swap Exact Token...119292222021-10-20 6:26:321 hr 32 mins ago0x0222ba0731fa7f3c3652180a6fecef7075b632ad IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000 BNB0.00058145
0xe779917f9e8f10057e3b511e6583aa413680ad28e03379664719e7244998409eSwap Exact Token...119286992021-10-20 6:00:231 hr 58 mins ago0x67f66369fd91cfcc547ff11045edcc8be080266d IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000 BNB0.000618065
0x16409b2ba406e2402cdd58099e933f4a31d0299fd7921f6b722a1daec22c3cd4Add Liquidity ET...119284962021-10-20 5:50:142 hrs 8 mins ago0x6488b1a657282646f2037b90756ae4211ba96d7e IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148003.202785770599184 BNB0.00088943
0x92c3f675274835008f0a280a0275fed44871e8aef00e24427c1713be5597afbcSwap Exact ETH F...119284512021-10-20 5:47:592 hrs 10 mins ago0x6488b1a657282646f2037b90756ae4211ba96d7e IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148003.3 BNB0.00061474
0xf66ef7e00dbdad30a50f20659d0f72bfabf6e69d45745ac89aa83c5bc5e41bc6Swap Exact Token...119281592021-10-20 5:33:232 hrs 25 mins ago0x4a1e7f0738aa3e3ea2604df1499cc087c432df65 IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000 BNB0.000888155
0x52774411c2dcca874f447d6571b11789d5bfe8d55dcf00ff6a122efbbf032f81Swap ETH For Exa...119280132021-10-20 5:26:052 hrs 32 mins ago0xd914036f7d96cf147d0d26411039b4e92e95cf4f IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000.039202455289723 BNB0.000641415
0xaad93c6d6d39866674ea123b9f22bef07efbed6e3a7a35928d8eb8ab39108971Swap Exact ETH F...119273992021-10-20 4:55:233 hrs 3 mins ago0x5db690a90e78435d688d6da02cff508674b3e9a2 IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000.1 BNB0.000600305
0x1dfa9d8e652aacba152d91367148a9b4cd089083eba5ab48d75916e327162106Add Liquidity ET...119273472021-10-20 4:52:473 hrs 5 mins ago0x6d224536355809bc2b7d3080169f4b351d6a69ed IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000.298435152351168 BNB0.000865415
0x520fb6988b6dc43821b873055dc397de32bc52b26e6aea8d6936cd532b28f219Swap Exact Token...119272072021-10-20 4:45:473 hrs 12 mins ago0x1bcc3204865146efed1e92c5276137dd1f53e9cf IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000 BNB0.000618125
0x4cf8e141982271cef7f02d36a9763e0b559927f868760bdda68149bc7a143ddaRemove Liquidity...119271912021-10-20 4:44:593 hrs 13 mins ago0x1bcc3204865146efed1e92c5276137dd1f53e9cf IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000 BNB0.001159065
0x838dc3b012663117f4c3627d582d765b1bfdacd71a2634f3c3f4aeaa479a0544Swap Exact Token...119270822021-10-20 4:39:323 hrs 19 mins ago0xbc86b49a140dece9ae4c0ec119ee3b203fc5af26 IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000 BNB0.00060611
0xf20610e32730bab8e154910e3614345cd4534cc74aba61052edb2e942927720dSwap Exact Token...119267392021-10-20 4:22:233 hrs 36 mins ago0x72aa98b3a949f6b2762bbde200bf678d7aa3e595 IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000 BNB0.00092762
0x04ce8a59ef9c76475752bab1db3defca8dbc9fc43b7535e308591331d57dd8bbAdd Liquidity119263482021-10-20 4:02:503 hrs 55 mins ago0xce2ca124406f2401b71c9424a2b57a735cb10fab IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000 BNB0.00099632
0x71ce277322d006afa9630e8f0b5021ad097c65673a06400473e39db0142531bdSwap Exact Token...119261332021-10-20 3:52:054 hrs 6 mins ago0x18c2ccd3e937bb5b1560a6f70de9bdb1340d849d IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000 BNB0.000779466415
0x340fb7ceaa5851af17715878248ed19b714030e1f0dd1212f290186bfed4b03cSwap Exact ETH F...119261312021-10-20 3:51:594 hrs 6 mins ago0xa9ff08af55b24bb5d064d776a078e8a292b8dfe2 IN  0xbe65b8f75b9f20f4c522e0067a3887fada71480010 BNB0.000640545
0xe4107ae158d9ae752c349c64ad03b210d86d478f9d2b9d7a26a5948075c22c7dSwap Exact ETH F...119261212021-10-20 3:51:294 hrs 7 mins ago0xa9ff08af55b24bb5d064d776a078e8a292b8dfe2 IN  0xbe65b8f75b9f20f4c522e0067a3887fada71480010 BNB0.001585795
0x892fd51fd655b2d40a6b41e1787362d118b6f7e8d8b25a1b039b9f545fdb1d34Swap Exact Token...119260212021-10-20 3:46:294 hrs 12 mins ago0x27195c6a51f7306411d21b01b21d96cafa975195 IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000 BNB0.000962325
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x0f8ffac3a0093a1e28f8ef1ae05ad393ea4c0ed56d80eef736b45d1650249c88119304732021-10-20 7:30:4427 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada714800 Binance: WBNB Token0.035068459011711433 BNB
0xad6261d8f506c9b53dc61a49a80d102757a31bfba53b284f8d9d5b2bb2c838df119304402021-10-20 7:29:0529 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada7148000xe926f18f513e40bde56620f940a01b22823c73d00.038683496791383583 BNB
0xad6261d8f506c9b53dc61a49a80d102757a31bfba53b284f8d9d5b2bb2c838df119304402021-10-20 7:29:0529 mins ago Binance: WBNB Token 0xbe65b8f75b9f20f4c522e0067a3887fada7148000.038683496791383583 BNB
0x38a4dae3010ca51254b2f96a067878b34944269b5d2966cd2269e28770d7567f119304002021-10-20 7:27:0531 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada714800 0xee6db2cc1ed15424a00e62ccdfe23397b54aab890.024326947490159574 BNB
0x38a4dae3010ca51254b2f96a067878b34944269b5d2966cd2269e28770d7567f119304002021-10-20 7:27:0531 mins ago Binance: WBNB Token 0xbe65b8f75b9f20f4c522e0067a3887fada7148000.024326947490159574 BNB
0xbaaa9291ee4c7bafccc73e63323e2237bb98cebe01fad27938791019bb346a10119299782021-10-20 7:04:5353 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada714800 0xbd6ed39bedf95517c45ddb3a35b647a462eed55d0.192584042166920906 BNB
0xbaaa9291ee4c7bafccc73e63323e2237bb98cebe01fad27938791019bb346a10119299782021-10-20 7:04:5353 mins ago Binance: WBNB Token 0xbe65b8f75b9f20f4c522e0067a3887fada7148000.192584042166920906 BNB
0xc2f347e831730b6498ab42082b0052107cba599924cb2b49d575f23f4f6bdc75119294772021-10-20 6:39:171 hr 19 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada714800 Binance: WBNB Token0.05 BNB
0xd9f6e3e1248d6b24e057d660adf30c03fa9815997fa583cd12bc3421d7f95139119293942021-10-20 6:35:081 hr 23 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada714800 0xee6db2cc1ed15424a00e62ccdfe23397b54aab890.033741760392602007 BNB
0xd9f6e3e1248d6b24e057d660adf30c03fa9815997fa583cd12bc3421d7f95139119293942021-10-20 6:35:081 hr 23 mins ago Binance: WBNB Token 0xbe65b8f75b9f20f4c522e0067a3887fada7148000.033741760392602007 BNB
0x96778eca2f05437d9d331a09257e7166d5544b575fbd3c66e8876ea21b971844119292222021-10-20 6:26:321 hr 32 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada7148000x0222ba0731fa7f3c3652180a6fecef7075b632ad0.046423015224807348 BNB
0x96778eca2f05437d9d331a09257e7166d5544b575fbd3c66e8876ea21b971844119292222021-10-20 6:26:321 hr 32 mins ago Binance: WBNB Token 0xbe65b8f75b9f20f4c522e0067a3887fada7148000.046423015224807348 BNB
0xdf0ba8c9c58b1469d66b6938efc46993c30509b29c1720cfb818c36424e89000119292162021-10-20 6:26:141 hr 32 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada714800 0xbd6ed39bedf95517c45ddb3a35b647a462eed55d0.177651088592194976 BNB
0xdf0ba8c9c58b1469d66b6938efc46993c30509b29c1720cfb818c36424e89000119292162021-10-20 6:26:141 hr 32 mins ago Binance: WBNB Token 0xbe65b8f75b9f20f4c522e0067a3887fada7148000.177651088592194976 BNB
0xe57fa8532d9692581259bff4e3ed61d55cf1d44726b8ac6dfea884b225dd7d38119289912021-10-20 6:14:591 hr 43 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada714800 0xbd6ed39bedf95517c45ddb3a35b647a462eed55d0.003603632269724234 BNB
0xe57fa8532d9692581259bff4e3ed61d55cf1d44726b8ac6dfea884b225dd7d38119289912021-10-20 6:14:591 hr 43 mins ago Binance: WBNB Token 0xbe65b8f75b9f20f4c522e0067a3887fada7148000.003603632269724234 BNB
0xe779917f9e8f10057e3b511e6583aa413680ad28e03379664719e7244998409e119286992021-10-20 6:00:231 hr 58 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada7148000x67f66369fd91cfcc547ff11045edcc8be080266d0.064570965995402231 BNB
0xe779917f9e8f10057e3b511e6583aa413680ad28e03379664719e7244998409e119286992021-10-20 6:00:231 hr 58 mins ago Binance: WBNB Token 0xbe65b8f75b9f20f4c522e0067a3887fada7148000.064570965995402231 BNB
0x16409b2ba406e2402cdd58099e933f4a31d0299fd7921f6b722a1daec22c3cd4119284962021-10-20 5:50:142 hrs 8 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada714800 Binance: WBNB Token3.202785770599184609 BNB
0x92c3f675274835008f0a280a0275fed44871e8aef00e24427c1713be5597afbc119284512021-10-20 5:47:592 hrs 10 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada714800 Binance: WBNB Token3.3 BNB
0x52774411c2dcca874f447d6571b11789d5bfe8d55dcf00ff6a122efbbf032f81119280132021-10-20 5:26:052 hrs 32 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada7148000xd914036f7d96cf147d0d26411039b4e92e95cf4f0.000272122247796077 BNB
0x52774411c2dcca874f447d6571b11789d5bfe8d55dcf00ff6a122efbbf032f81119280132021-10-20 5:26:052 hrs 32 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada714800 Binance: WBNB Token0.03893033304192744 BNB
0xaad93c6d6d39866674ea123b9f22bef07efbed6e3a7a35928d8eb8ab39108971119273992021-10-20 4:55:233 hrs 3 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada714800 Binance: WBNB Token0.1 BNB
0x1dfa9d8e652aacba152d91367148a9b4cd089083eba5ab48d75916e327162106119273472021-10-20 4:52:473 hrs 5 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada714800 Binance: WBNB Token0.298435152351168767 BNB
0x4878366f7b10b7c5696df90b940e415b06835762e8270bb54af032e3ff41449b119272732021-10-20 4:49:053 hrs 9 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada714800 0xee6db2cc1ed15424a00e62ccdfe23397b54aab890.082550506561175205 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
JetswapRouter

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 BscScan.com on 2021-05-03
*/

pragma solidity =0.6.6;

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

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

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

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

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

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

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

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

// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)
library SafeMath {
    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x, 'ds-math-add-overflow');
    }

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

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

library JetswapLibrary {
    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, 'JetswapLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'JetswapLibrary: 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'3125d0a15fa7af49ce234ba1cf5f931bad0504242e0e1ee9fcd7d1d7aa88c651' // 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,) = IJetswapPair(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, 'JetswapLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'JetswapLibrary: 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, 'JetswapLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'JetswapLibrary: 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, 'JetswapLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'JetswapLibrary: 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, 'JetswapLibrary: 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, 'JetswapLibrary: 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);
        }
    }
}

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

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

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

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

contract JetswapRouter is IJetswapRouter02 {
    using SafeMath for uint;

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

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

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

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

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

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

Contract Security Audit

Contract ABI

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

60c060405234801561001057600080fd5b5060405162004762380380620047628339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6145dd620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118eb52806119e55280611a9b5280611b695280611caf5280611d375280611f7c5280611ff752806120a652806121725280612207528061227b528061277952806129ec5280612a425280612a765280612aea5280612c8a5280612dcd5280612e55525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611bfc5280611d695280611ecc52806122ad528061250652806126fe5280612727528061275752806128c45280612a205280612d1d5280612e87528061372e52806137715280613a545280613bd3528061400352806140b1528061413152506145dd6000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124b8565b348015610a1c57600080fd5b5061088a6126fc565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612720945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561274d565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612861565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561299d565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c42565b6000808242811015610cde576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124b8565b9093509150610d1d898685612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da5858361312e565b50965096945050505050565b6000610dbe848484613226565b949350505050565b60608142811015610e0c576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b815260206004820152601b6024820152600080516020614483833981519152604482015290519081900360640190fd5b610efd7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b81526004018080602001828103825260298152602001806145136029913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b0316613462565b85600081518110610fe657fe5b6020026020010151613522565b6110328287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061367f915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b602002602001015161312e565b509695505050505050565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846138c5565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f613462565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124b8565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b6112c77f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b81526004018080602001828103825260298152602001806145136029913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e88287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b606081428110156113b4576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b815260206004820152601b6024820152600080516020614483833981519152604482015290519081900360640190fd5b6114a57f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b815260040180806020018281038252602581526020018061455f6025913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a613522565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a49290918991899182918501908490808284376000920191909152508892506139fd915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613d0816565b10156118935760405162461bcd60e51b81526004018080602001828103825260298152602001806145136029913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b815260206004820152601b6024820152600080516020614483833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c28585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506139fd915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b81526004018080602001828103825260298152602001806145136029913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b50505050611893848261312e565b60608142811015611b67576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b815260206004820152601b6024820152600080516020614483833981519152604482015290519081900360640190fd5b611c557f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b81526004018080602001828103825260298152602001806145136029913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d957f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b5095945050505050565b6000610dbe848484613d58565b60608142811015611ec7576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b611f257f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b815260040180806020018281038252602581526020018061455f6025913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613e48565b60008142811015611ff1576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b612020887f000000000000000000000000000000000000000000000000000000000000000089898930896124b8565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e8848361312e565b8042811015612170576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b815260206004820152601b6024820152600080516020614483833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122d97f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a9182918501908490808284376000920191909152508992506139fd915050565b87611856828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b60008082428110156124ff576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b600061252c7f00000000000000000000000000000000000000000000000000000000000000008c8c613462565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561258757600080fd5b505af115801561259b573d6000803e3d6000fd5b505050506040513d60208110156125b157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b505050506040513d604081101561262857600080fd5b508051602090910151909250905060006126428e8e613ef4565b509050806001600160a01b03168e6001600160a01b031614612665578183612668565b82825b90975095508a8710156126ac5760405162461bcd60e51b81526004018080602001828103825260248152602001806143f06024913960400191505060405180910390fd5b898610156126eb5760405162461bcd60e51b81526004018080602001828103825260248152602001806143cc6024913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f00000000000000000000000000000000000000000000000000000000000000008484613316565b600080600061279d7f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613462565b90506000876127ac578c6127b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561282657600080fd5b505af115801561283a573d6000803e3d6000fd5b5050505061284c8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128aa576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b6128b88c8c8c8c8c8c613fd2565b909450925060006128ea7f00000000000000000000000000000000000000000000000000000000000000008e8e613462565b90506128f88d338388613522565b6129048c338387613522565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561295c57600080fd5b505af1158015612970573d6000803e3d6000fd5b505050506040513d602081101561298657600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129e6576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b612a148a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613fd2565b90945092506000612a667f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050612a748b338388613522565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612acf57600080fd5b505af1158015612ae3573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b6857600080fd5b505af1158015612b7c573d6000803e3d6000fd5b505050506040513d6020811015612b9257600080fd5b5051612b9a57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b505050506040513d6020811015612c1c57600080fd5b5051925034841015612c3457612c343385340361312e565b505096509650969350505050565b60608142811015612c88576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612cbf57fe5b905060200201356001600160a01b03166001600160a01b031614612d18576040805162461bcd60e51b815260206004820152601b6024820152600080516020614483833981519152604482015290519081900360640190fd5b612d767f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91503482600081518110612d8657fe5b60200260200101511115612dcb5760405162461bcd60e51b815260040180806020018281038252602581526020018061455f6025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e0757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e3a57600080fd5b505af1158015612e4e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612eb37f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612ec057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b505050506040513d6020811015612f4157600080fd5b5051612f4957fe5b612f888287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b81600081518110612f9557fe5b6020026020010151341115611e6a57611e6a3383600081518110612fb557fe5b6020026020010151340361312e565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130415780518252601f199092019160209182019101613022565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130a3576040519150601f19603f3d011682016040523d82523d6000602084013e6130a8565b606091505b50915091508180156130d65750805115806130d657508080602001905160208110156130d357600080fd5b50515b613127576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061317a5780518252601f19909201916020918201910161315b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131dc576040519150601f19603f3d011682016040523d82523d6000602084013e6131e1565b606091505b50509050806132215760405162461bcd60e51b815260040180806020018281038252602381526020018061453c6023913960400191505060405180910390fd5b505050565b60008084116132665760405162461bcd60e51b81526004018080602001828103825260298152602001806144376029913960400191505060405180910390fd5b6000831180156132765750600082115b6132b15760405162461bcd60e51b81526004018080602001828103825260268152602001806144cd6026913960400191505060405180910390fd5b60006132c5856103e563ffffffff61424616565b905060006132d9828563ffffffff61424616565b905060006132ff836132f3886103e863ffffffff61424616565b9063ffffffff6142a916565b905080828161330a57fe5b04979650505050505050565b606060028251101561336f576040805162461bcd60e51b815260206004820152601c60248201527f4a6574737761704c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561338757600080fd5b506040519080825280602002602001820160405280156133b1578160200160208202803683370190505b50905082816000815181106133c257fe5b60200260200101818152505060005b600183510381101561345a57600080613414878685815181106133f057fe5b602002602001015187866001018151811061340757fe5b60200260200101516142f8565b9150915061343684848151811061342757fe5b60200260200101518383613226565b84846001018151811061344557fe5b602090810291909101015250506001016133d1565b509392505050565b60008060006134718585613ef4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f3125d0a15fa7af49ce234ba1cf5f931bad0504242e0e1ee9fcd7d1d7aa88c651609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135a75780518252601f199092019160209182019101613588565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613609576040519150601f19603f3d011682016040523d82523d6000602084013e61360e565b606091505b509150915081801561363c57508051158061363c575080806020019051602081101561363957600080fd5b50515b6136775760405162461bcd60e51b81526004018080602001828103825260248152602001806145846024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138bf5760008084838151811061369d57fe5b60200260200101518584600101815181106136b457fe5b60200260200101519150915060006136cc8383613ef4565b50905060008785600101815181106136e057fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461370e57826000613712565b6000835b91509150600060028a51038810613729578861376a565b61376a7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061375d57fe5b6020026020010151613462565b90506137977f00000000000000000000000000000000000000000000000000000000000000008888613462565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137d4576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561384557818101518382015260200161382d565b50505050905090810190601f1680156138725780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561389457600080fd5b505af11580156138a8573d6000803e3d6000fd5b505060019099019850613682975050505050505050565b50505050565b606060028251101561391e576040805162461bcd60e51b815260206004820152601c60248201527f4a6574737761704c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561393657600080fd5b50604051908082528060200260200182016040528015613960578160200160208202803683370190505b509050828160018351038151811061397457fe5b60209081029190910101528151600019015b801561345a576000806139b6878660018603815181106139a257fe5b602002602001015187868151811061340757fe5b915091506139d88484815181106139c957fe5b60200260200101518383613d58565b8460018503815181106139e757fe5b6020908102919091010152505060001901613986565b60005b600183510381101561322157600080848381518110613a1b57fe5b6020026020010151858460010181518110613a3257fe5b6020026020010151915091506000613a4a8383613ef4565b5090506000613a7a7f00000000000000000000000000000000000000000000000000000000000000008585613462565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613abb57600080fd5b505afa158015613acf573d6000803e3d6000fd5b505050506040513d6060811015613ae557600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613b1b578284613b1e565b83835b91509150613b7c828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613b89868383613226565b945050505050600080856001600160a01b0316886001600160a01b031614613bb357826000613bb7565b6000835b91509150600060028c51038a10613bce578a613c02565b613c027f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061375d57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c8c578181015183820152602001613c74565b50505050905090810190601f168015613cb95780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613cdb57600080fd5b505af1158015613cef573d6000803e3d6000fd5b50506001909b019a50613a009950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d985760405162461bcd60e51b815260040180806020018281038252602a8152602001806144a3602a913960400191505060405180910390fd5b600083118015613da85750600082115b613de35760405162461bcd60e51b81526004018080602001828103825260268152602001806144cd6026913960400191505060405180910390fd5b6000613e076103e8613dfb868863ffffffff61424616565b9063ffffffff61424616565b90506000613e216103e5613dfb868963ffffffff613d0816565b9050613e3e6001828481613e3157fe5b049063ffffffff6142a916565b9695505050505050565b6000808411613e885760405162461bcd60e51b81526004018080602001828103825260238152602001806144146023913960400191505060405180910390fd5b600083118015613e985750600082115b613ed35760405162461bcd60e51b81526004018080602001828103825260268152602001806144cd6026913960400191505060405180910390fd5b82613ee4858463ffffffff61424616565b81613eeb57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f485760405162461bcd60e51b81526004018080602001828103825260238152602001806144606023913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613f68578284613f6b565b83835b90925090506001600160a01b038216613fcb576040805162461bcd60e51b815260206004820152601c60248201527f4a6574737761704c6962726172793a205a45524f5f4144445245535300000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561404c57600080fd5b505afa158015614060573d6000803e3d6000fd5b505050506040513d602081101561407657600080fd5b50516001600160a01b0316141561412957604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156140fc57600080fd5b505af1158015614110573d6000803e3d6000fd5b505050506040513d602081101561412657600080fd5b50505b6000806141577f00000000000000000000000000000000000000000000000000000000000000008b8b6142f8565b91509150816000148015614169575080155b1561417957879350869250614239565b6000614186898484613e48565b90508781116141d957858110156141ce5760405162461bcd60e51b81526004018080602001828103825260248152602001806143cc6024913960400191505060405180910390fd5b889450925082614237565b60006141e6898486613e48565b9050898111156141f257fe5b878110156142315760405162461bcd60e51b81526004018080602001828103825260248152602001806143f06024913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806142615750508082028282828161425e57fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006143078585613ef4565b509050614315868686613462565b50600080614324888888613462565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561435c57600080fd5b505afa158015614370573d6000803e3d6000fd5b505050506040513d606081101561438657600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143b95780826143bc565b81815b9099909850965050505050505056fe4a657473776170526f757465723a20494e53554646494349454e545f425f414d4f554e544a657473776170526f757465723a20494e53554646494349454e545f415f414d4f554e544a6574737761704c6962726172793a20494e53554646494349454e545f414d4f554e544a6574737761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e544a6574737761704c6962726172793a204944454e544943414c5f4144445245535345534a657473776170526f757465723a20494e56414c49445f5041544800000000004a6574737761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e544a6574737761704c6962726172793a20494e53554646494349454e545f4c49515549444954594a657473776170526f757465723a2045585049524544000000000000000000004a657473776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45444a657473776170526f757465723a204558434553534956455f494e5055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a2646970667358221220a115c14004b33c4ade36cd53616d0872caf6311a58151a56d9f6b3bf204a5be764736f6c634300060600330000000000000000000000000eb58e5c8aa63314ff5547289185cc4583dfcbd5000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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

0000000000000000000000000eb58e5c8aa63314ff5547289185cc4583dfcbd5000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

-----Decoded View---------------
Arg [0] : _factory (address): 0x0eb58e5c8aa63314ff5547289185cc4583dfcbd5
Arg [1] : _WETH (address): 0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000eb58e5c8aa63314ff5547289185cc4583dfcbd5
Arg [1] : 000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c


Deployed ByteCode Sourcemap

15443:18405:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15917:10;-1:-1:-1;;;;;15931:4:0;15917:18;;15910:26;;;;15443:18405;;12:1:-1;9;2:12;20033:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20033:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20033:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32800:260;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32800:260:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32800:260:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27154:842;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27154:842:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27154:842:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27154:842:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27154:842: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;27154:842:0;;-1:-1:-1;27154:842:0;-1:-1:-1;;;;;;27154:842: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;27154:842:0;;;;;;;;;;;;;;;;;33594:251;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33594:251:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33594:251:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33594:251:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33594:251: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;33594:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33594:251:0;;-1:-1:-1;33594:251:0;;-1:-1:-1;;;;;33594:251:0:i;20712:673::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20712:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20712:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24399:622::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24399:622:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24399:622:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24399:622:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24399:622: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;24399:622:0;;-1:-1:-1;24399:622:0;-1:-1:-1;;;;;;24399:622:0;;;;;;;;:::i;26328:820::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26328:820:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26328:820:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26328:820:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26328:820: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;26328:820:0;;-1:-1:-1;26328:820:0;-1:-1:-1;;;;;;26328:820:0;;;;;;;;:::i;22841:714::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22841:714:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22841:714:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30159:710::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30159:710:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30159:710:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30159:710:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30159:710: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;30159:710:0;;-1:-1:-1;30159:710:0;-1:-1:-1;;;;;;30159:710:0;;;;;;;;:::i;31725:837::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31725:837:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31725:837:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31725:837:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31725:837: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;31725:837:0;;-1:-1:-1;31725:837:0;-1:-1:-1;;;;;;31725:837:0;;;;;;;;:::i;25633:689::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25633:689:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25633:689:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25633:689: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;25633:689:0;;-1:-1:-1;25633:689:0;-1:-1:-1;;;;;;25633:689:0;;;;;;;;:::i;33068:259::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33068:259:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33068:259:0;;;;;;;;;;;;:::i;25027:600::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25027:600:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25027:600:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25027:600:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25027:600: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;25027:600:0;;-1:-1:-1;25027:600:0;-1:-1:-1;;;;;;25027:600:0;;;;;;;;:::i;15573:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15573:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;15573:38:0;;;;;;;;;;;;;;32606:186;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32606:186:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32606:186:0;;;;;;;;;;;;:::i;22135:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22135:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22135:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30875:844::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30875:844:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30875:844:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30875:844: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;30875:844:0;;-1:-1:-1;30875:844:0;-1:-1:-1;;;;;;30875:844:0;;;;;;;;:::i;19174:853::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19174:853:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19174:853:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15525:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15525:41:0;;;:::i;33335:251::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33335:251:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33335:251:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33335:251:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33335:251: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;33335:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33335:251:0;;-1:-1:-1;33335:251:0;;-1:-1:-1;;;;;33335:251:0:i;21391:665::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21391:665:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21391:665:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17421:734::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17421:734:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17421:734:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18161:970;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18161:970:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28002:802::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28002:802:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28002:802:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28002:802: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;28002:802:0;;-1:-1:-1;28002:802:0;-1:-1:-1;;;;;;28002:802:0;;;;;;;;:::i;20033:673::-;20270:16;20288:14;20251:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;20342:196:::1;20372:5;20392:4;20411:9;20435:14;20464:12;20499:4;20519:8;20342:15;:196::i;:::-;20315:223:::0;;-1:-1:-1;20315:223:0;-1:-1:-1;20549:51:0::1;20577:5:::0;20584:2;20315:223;20549:27:::1;:51::i;:::-;20617:4;-1:-1:-1::0;;;;;20611:20:0::1;;20632:9;20611:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20611:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20611:31:0;;;;20653:45;20684:2;20688:9;20653:30;:45::i;:::-;20033:673:::0;;;;;;;;;;:::o;32800:260::-;32953:14;32992:60;33020:8;33030:9;33041:10;32992:27;:60::i;:::-;32985:67;32800:260;-1:-1:-1;;;;32800:260:0:o;27154:842::-;27368:21;27340:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27440:4:0::1;27415:29;:4:::0;;-1:-1:-1;;27420:15:0;;27415:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27415:21:0::1;-1:-1:-1::0;;;;;27415:29:0::1;;27407:69;;;::::0;;-1:-1:-1;;;27407:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27407:69:0;;;;;;;;;;;;;::::1;;27497:53;27526:7;27535:8;27545:4;;27497:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27497:28:0::1;::::0;-1:-1:-1;;;27497:53:0:i:1;:::-;27487:63;;27600:12;27569:7;27594:1;27577:7;:14;:18;27569:27;;;;;;;;;;;;;;:43;;27561:97;;;;-1:-1:-1::0;;;27561:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27669:139;27715:4;;27720:1;27715:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27715:7:0::1;27724:10;27736:49;27759:7;27768:4;;27773:1;27768:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27768:7:0::1;27777:4;;27782:1;27777:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27777:7:0::1;27736:22;:49::i;:::-;27787:7;27795:1;27787:10;;;;;;;;;;;;;;27669:31;:139::i;:::-;27819:35;27825:7;27834:4;;27819:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27848:4:0::1;::::0;-1:-1:-1;27819:5:0::1;::::0;-1:-1:-1;;27819:35:0:i:1;:::-;27871:4;-1:-1:-1::0;;;;;27865:20:0::1;;27886:7;27911:1;27894:7;:14;:18;27886:27;;;;;;;;;;;;;;27865:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27865:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27865:49:0;;;;27925:63;27956:2;27960:7;27985:1;27968:7;:14;:18;27960:27;;;;;;;;;;;;;;27925:30;:63::i;:::-;27154:842:::0;;;;;;;;;:::o;33594:251::-;33738:21;33784:53;33812:7;33821:9;33832:4;33784:27;:53::i;:::-;33777:60;;33594:251;;;;;:::o;20712:673::-;21018:12;21032;21057;21072:47;21095:7;21104:6;21112;21072:22;:47::i;:::-;21057:62;;21130:10;21143;:33;;21167:9;21143:33;;;-1:-1:-1;;21143:33:0;21187:78;;;-1:-1:-1;;;21187:78:0;;21213:10;21187:78;;;;21233:4;21187:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21130:46;;-1:-1:-1;;;;;;21187:25:0;;;;;:78;;;;;-1:-1:-1;;21187:78:0;;;;;;;;-1:-1:-1;21187:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;21187:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21187:78:0;;;;21297:80;21313:6;21321;21329:9;21340:10;21352;21364:2;21368:8;21297:15;:80::i;:::-;21276:101;;;;;;;;20712:673;;;;;;;;;;;;;;;;:::o;24399:622::-;24623:21;24604:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;24667:53:::1;24696:7;24705:8;24715:4;;24667:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24667:28:0::1;::::0;-1:-1:-1;;;24667:53:0:i:1;:::-;24657:63;;24770:12;24739:7;24764:1;24747:7;:14;:18;24739:27;;;;;;;;;;;;;;:43;;24731:97;;;;-1:-1:-1::0;;;24731:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24839:139;24885:4;;24890:1;24885:7;;;;;;24839:139;24989:24;24995:7;25004:4;;24989:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25010:2:0;;-1:-1:-1;24989:5:0::1;::::0;-1:-1:-1;;24989:24:0:i:1;26328:820::-:0;26542:21;26514:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;26614:4:0::1;26589:29;:4:::0;;-1:-1:-1;;26594:15:0;;26589:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;26589:21:0::1;-1:-1:-1::0;;;;;26589:29:0::1;;26581:69;;;::::0;;-1:-1:-1;;;26581:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26581:69:0;;;;;;;;;;;;;::::1;;26671:53;26699:7;26708:9;26719:4;;26671:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26671:27:0::1;::::0;-1:-1:-1;;;26671:53:0:i:1;:::-;26661:63;;26757:11;26743:7;26751:1;26743:10;;;;;;;;;;;;;;:25;;26735:75;;;;-1:-1:-1::0;;;26735:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22841:714:::0;23159:14;23186:12;23201:44;23224:7;23233:5;23240:4;23201:22;:44::i;:::-;23186:59;;23256:10;23269;:33;;23293:9;23269:33;;;-1:-1:-1;;23269:33:0;23313:78;;;-1:-1:-1;;;23313:78:0;;23339:10;23313:78;;;;23359:4;23313:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23256:46;;-1:-1:-1;;;;;;23313:25:0;;;;;:78;;;;;-1:-1:-1;;23313:78:0;;;;;;;;-1:-1:-1;23313:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;23313:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23313:78:0;;;;23414:133;23476:5;23483:9;23494:14;23510:12;23524:2;23528:8;23414:47;:133::i;:::-;23402:145;22841:714;-1:-1:-1;;;;;;;;;;;;;22841:714:0:o;30159:710::-;30393:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;30414:137:::1;30460:4;;30465:1;30460:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30460:7:0::1;30469:10;30481:49;30504:7;30513:4;;30518:1;30513:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30513:7:0::1;30522:4;;30527:1;30522:7;;;;;;30481:49;30532:8;30414:31;:137::i;:::-;30562:18;30590:4:::0;;-1:-1:-1;;30595:15:0;;30590:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30590:21:0::1;-1:-1:-1::0;;;;;30583:39:0::1;;30623:2;30583:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;30583:43:0::1;-1:-1:-1::0;;;;;30583:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30583:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30583:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30583:43:0;30637:44:::1;::::0;;30583:43:::1;30637:44:::0;;::::1;::::0;;;;;;;;;;;30583:43;;-1:-1:-1;30637:44:0::1;::::0;;;30672:4;;;;;;30637:44;::::1;::::0;30672:4;;30637:44;30672:4;30637:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30678:2:0;;-1:-1:-1;30637:34:0::1;::::0;-1:-1:-1;;30637:44:0:i:1;:::-;30780:12:::0;30714:62:::1;30762:13:::0;30721:4;;-1:-1:-1;;30726:15:0;;30721:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30721:21:0::1;-1:-1:-1::0;;;;;30714:39:0::1;;30754:2;30714:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;30714:43:0::1;-1:-1:-1::0;;;;;30714:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30714:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30714:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30714:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;30692:169;;;;-1:-1:-1::0;;;30692:169:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15735:1;30159:710:::0;;;;;;;:::o;31725:837::-;31992:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32051:4:0::1;32026:29;:4:::0;;-1:-1:-1;;32031:15:0;;32026:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32026:21:0::1;-1:-1:-1::0;;;;;32026:29:0::1;;32018:69;;;::::0;;-1:-1:-1;;;32018:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32018:69:0;;;;;;;;;;;;;::::1;;32098:137;32144:4;;32149:1;32144:7;;;;;;32098:137;32246:55;32281:4;;32246:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32295:4:0::1;::::0;-1:-1:-1;32246:34:0::1;::::0;-1:-1:-1;;32246:55:0:i:1;:::-;32329:37;::::0;;-1:-1:-1;;;32329:37:0;;32360:4:::1;32329:37;::::0;::::1;::::0;;;32312:14:::1;::::0;-1:-1:-1;;;;;32336:4:0::1;32329:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;32329:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32329:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32329:37:0;;-1:-1:-1;32385:25:0;;::::1;;32377:79;;;;-1:-1:-1::0;;;32377:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32473:4;-1:-1:-1::0;;;;;32467:20:0::1;;32488:9;32467:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32467:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32467:31:0;;;;32509:45;32540:2;32544:9;32509:30;:45::i;25633:689::-:0;25849:21;25821:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;25907:4:::1;-1:-1:-1::0;;;;;25896:15:0::1;:4;;25901:1;25896:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25896:7:0::1;-1:-1:-1::0;;;;;25896:15:0::1;;25888:55;;;::::0;;-1:-1:-1;;;25888:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;25888:55:0;;;;;;;;;;;;;::::1;;25964:54;25993:7;26002:9;26013:4;;25964:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25964:28:0::1;::::0;-1:-1:-1;;;25964:54:0:i:1;:::-;25954:64;;26068:12;26037:7;26062:1;26045:7;:14;:18;26037:27;;;;;;;;;;;;;;:43;;26029:97;;;;-1:-1:-1::0;;;26029:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26143:4;-1:-1:-1::0;;;;;26137:19:0::1;;26164:7;26172:1;26164:10;;;;;;;;;;;;;;26137:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26137:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26137:40:0;;;;;26201:4;-1:-1:-1::0;;;;;26195:20:0::1;;26216:49;26239:7;26248:4;;26253:1;26248:7;;;;;;26216:49;26267:7;26275:1;26267:10;;;;;;;;;;;;;;26195:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;26195:83:0::1;-1:-1:-1::0;;;;;26195:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26195:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26195:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26195:83:0;26188:91:::1;;;;26290:24;26296:7;26305:4;;26290:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26311:2:0;;-1:-1:-1;26290:5:0::1;::::0;-1:-1:-1;;26290:24:0:i:1;:::-;25633:689:::0;;;;;;;;:::o;33068:259::-;33221:13;33259:60;33286:9;33297;33308:10;33259:26;:60::i;25027:600::-;25251:21;25232:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;25295:53:::1;25323:7;25332:9;25343:4;;25295:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25295:27:0::1;::::0;-1:-1:-1;;;25295:53:0:i:1;:::-;25285:63;;25381:11;25367:7;25375:1;25367:10;;;;;;;;;;;;;;:25;;25359:75;;;;-1:-1:-1::0;;;25359:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15573:38:::0;;;:::o;32606:186::-;32703:12;32735:49;32756:7;32765:8;32775;32735:20;:49::i;22135:700::-;22401:14;22382:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;22444:196:::1;22474:5;22494:4;22513:9;22537:14;22566:12;22601:4;22621:8;22444:15;:196::i;:::-;22690:38;::::0;;-1:-1:-1;;;22690:38:0;;22722:4:::1;22690:38;::::0;::::1;::::0;;;22428:212;;-1:-1:-1;22651:78:0::1;::::0;-1:-1:-1;22679:5:0;;22686:2;;-1:-1:-1;;;;;22690: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;22690:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22690:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22690:38:0;22651:27:::1;:78::i;:::-;22746:4;-1:-1:-1::0;;;;;22740:20:0::1;;22761:9;22740:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22740:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22740:31:0;;;;22782:45;22813:2;22817:9;22782:30;:45::i;30875:844::-:0;31135:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;31180:4:::1;-1:-1:-1::0;;;;;31169:15:0::1;:4;;31174:1;31169:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31169:7:0::1;-1:-1:-1::0;;;;;31169:15:0::1;;31161:55;;;::::0;;-1:-1:-1;;;31161:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31161:55:0;;;;;;;;;;;;;::::1;;31227:13;31243:9;31227:25;;31269:4;-1:-1:-1::0;;;;;31263:19:0::1;;31290:8;31263:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31263:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31263:38:0;;;;;31325:4;-1:-1:-1::0;;;;;31319:20:0::1;;31340:49;31363:7;31372:4;;31377:1;31372:7;;;;;;31340:49;31391:8;31319:81;;;;;;;;;;;;;-1:-1:-1::0;;;;;31319:81:0::1;-1:-1:-1::0;;;;;31319:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31319:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31319:81:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31319:81:0;31312:89:::1;;;;31412:18;31440:4:::0;;-1:-1:-1;;31445:15:0;;31440:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31440:21:0::1;-1:-1:-1::0;;;;;31433:39:0::1;;31473:2;31433:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31433:43:0::1;-1:-1:-1::0;;;;;31433:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31433:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31433:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31433:43:0;31487:44:::1;::::0;;31433:43:::1;31487:44:::0;;::::1;::::0;;;;;;;;;;;31433:43;;-1:-1:-1;31487:44:0::1;::::0;;;31522:4;;;;;;31487:44;::::1;::::0;31522:4;;31487:44;31522:4;31487:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31528:2:0;;-1:-1:-1;31487:34:0::1;::::0;-1:-1:-1;;31487:44:0:i:1;:::-;31630:12:::0;31564:62:::1;31612:13:::0;31571:4;;-1:-1:-1;;31576:15:0;;31571:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31571:21:0::1;-1:-1:-1::0;;;;;31564:39:0::1;;31604:2;31564:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31564:43:0::1;-1:-1:-1::0;;;;;31564:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;19174:853:0::0;19428:12;19442;19409:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;19467:12:::1;19482:47;19505:7;19514:6;19522;19482:22;:47::i;:::-;19540:60;::::0;;-1:-1:-1;;;19540:60:0;;19572:10:::1;19540:60;::::0;::::1;::::0;-1:-1:-1;;;;;19540:31:0;::::1;:60:::0;;;;;;;;;;;;;;19467:62;;-1:-1:-1;19540:31:0;;::::1;::::0;:60;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;19540:31:0;:60;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19540:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19540:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;19668:27:0::1;::::0;;-1:-1:-1;;;19668:27:0;;-1:-1:-1;;;;;19668:27:0;;::::1;;::::0;::::1;::::0;;;19638:12:::1;::::0;;;19668:23;;::::1;::::0;::::1;::::0;:27;;;;;;;;;;;19638:12;19668:23;:27;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19668:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19668:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19668:27:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;19668:27:0;-1:-1:-1;19707:14:0::1;19726:41;19752:6:::0;19760;19726:25:::1;:41::i;:::-;19706:61;;;19809:6;-1:-1:-1::0;;;;;19799:16:0::1;:6;-1:-1:-1::0;;;;;19799:16:0::1;;:58;;19840:7;19849;19799:58;;;19819:7;19828;19799:58;19778:79:::0;;-1:-1:-1;19778:79:0;-1:-1:-1;19876:21:0;;::::1;;19868:70;;;;-1:-1:-1::0;;;19868:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19968:10;19957:7;:21;;19949:70;;;;-1:-1:-1::0;;;19949:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15735:1;;;;19174:853:::0;;;;;;;;;;;:::o;15525:41::-;;;:::o;33335:251::-;33479:21;33525:53;33554:7;33563:8;33573:4;33525:28;:53::i;21391:665::-;21680:16;21698:14;21725:12;21740:44;21763:7;21772:5;21779:4;21740:22;:44::i;:::-;21725:59;;21795:10;21808;:33;;21832:9;21808:33;;;-1:-1:-1;;21808:33:0;21852:78;;;-1:-1:-1;;;21852:78:0;;21878:10;21852:78;;;;21898:4;21852:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21795:46;;-1:-1:-1;;;;;;21852:25:0;;;;;:78;;;;;-1:-1:-1;;21852:78:0;;;;;;;;-1:-1:-1;21852:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;21852:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21852:78:0;;;;21968:80;21987:5;21994:9;22005:14;22021:12;22035:2;22039:8;21968:18;:80::i;:::-;21941:107;;;;-1:-1:-1;21391:665:0;-1:-1:-1;;;;;;;;;;;;;21391:665:0:o;17421:734::-;17709:12;17723;17737:14;17690:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;17785:85:::1;17799:6;17807;17815:14;17831;17847:10;17859;17785:13;:85::i;:::-;17764:106:::0;;-1:-1:-1;17764:106:0;-1:-1:-1;17881:12:0::1;17896:47;17919:7;17928:6:::0;17936;17896:22:::1;:47::i;:::-;17881:62;;17954:66;17986:6;17994:10;18006:4;18012:7;17954:31;:66::i;:::-;18031;18063:6;18071:10;18083:4;18089:7;18031:31;:66::i;:::-;18133:4;-1:-1:-1::0;;;;;18120:23:0::1;;18144:2;18120:27;;;;;;;;;;;;;-1:-1:-1::0;;;;;18120:27:0::1;-1:-1:-1::0;;;;;18120:27:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18120:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18120:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18120:27:0;17421:734;;;;-1:-1:-1;18120:27:0;;-1:-1:-1;17421:734:0;;-1:-1:-1;;;;;;;;;17421:734:0:o;18161:970::-;18414:16;18432:14;18448;18395:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;18502:176:::1;18530:5;18550:4;18569:18;18602:9;18626:14;18655:12;18502:13;:176::i;:::-;18475:203:::0;;-1:-1:-1;18475:203:0;-1:-1:-1;18689:12:0::1;18704:44;18727:7;18736:5:::0;18743:4:::1;18704:22;:44::i;:::-;18689:59;;18759:69;18791:5;18798:10;18810:4;18816:11;18759:31;:69::i;:::-;18845:4;-1:-1:-1::0;;;;;18839:19:0::1;;18866:9;18839:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18839:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18839:39:0;;;;;18902:4;-1:-1:-1::0;;;;;18896:20:0::1;;18917:4;18923:9;18896:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;18896:37:0::1;-1:-1:-1::0;;;;;18896:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18896:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18896:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18896:37:0;18889:45:::1;;;;18970:4;-1:-1:-1::0;;;;;18957:23:0::1;;18981:2;18957:27;;;;;;;;;;;;;-1:-1:-1::0;;;;;18957:27:0::1;-1:-1:-1::0;;;;;18957:27:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18957:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18957:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18957:27:0;;-1:-1:-1;19035:9:0::1;:21:::0;-1:-1:-1;19031:92:0::1;;;19058:65;19089:10;19113:9;19101;:21;19058:30;:65::i;:::-;15735:1;18161:970:::0;;;;;;;;;;;:::o;28002:802::-;28215:21;28187:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;28273:4:::1;-1:-1:-1::0;;;;;28262:15:0::1;:4;;28267:1;28262:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28262:7:0::1;-1:-1:-1::0;;;;;28262:15:0::1;;28254:55;;;::::0;;-1:-1:-1;;;28254:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28254:55:0;;;;;;;;;;;;;::::1;;28330:53;28358:7;28367:9;28378:4;;28330:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28330:27:0::1;::::0;-1:-1:-1;;;28330:53:0:i:1;:::-;28320:63;;28416:9;28402:7;28410:1;28402:10;;;;;;;;;;;;;;:23;;28394:73;;;;-1:-1:-1::0;;;28394:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28484:4;-1:-1:-1::0;;;;;28478:19:0::1;;28505:7;28513:1;28505:10;;;;;;;;;;;;;;28478:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28478:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28478:40:0;;;;;28542:4;-1:-1:-1::0;;;;;28536:20:0::1;;28557:49;28580:7;28589:4;;28594:1;28589:7;;;;;;28557:49;28608:7;28616:1;28608:10;;;;;;;;;;;;;;28536:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;28536:83:0::1;-1:-1:-1::0;;;;;28536:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28536:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28536:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28536:83:0;28529:91:::1;;;;28631:24;28637:7;28646:4;;28631:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28652:2:0;;-1:-1:-1;28631:5:0::1;::::0;-1:-1:-1;;28631:24:0:i:1;:::-;28718:7;28726:1;28718:10;;;;;;;;;;;;;;28706:9;:22;28702:94;;;28730:66;28761:10;28785:7;28793:1;28785:10;;;;;;;;;;;;;;28773:9;:22;28730:30;:66::i;1185:361::-:0;1380:45;;;-1:-1:-1;;;;;1380:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1380:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1369:57:0;;;;1334:12;;1348:17;;1369:10;;;;1380:45;1369:57;;;25:18:-1;1369: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;;;1369: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;;1333:93:0;;;;1445:7;:57;;;;-1:-1:-1;1457:11:0;;:16;;:44;;;1488:4;1477:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1477:24:0;1457:44;1437:101;;;;;-1:-1:-1;;;1437:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1185:361;;;;;:::o;1964:195::-;2072:12;;;2034;2072;;;;;;;;;-1:-1:-1;;;;;2051:7:0;;;2065:5;;2051: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;;;2051: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;;2033:52:0;;;2104:7;2096:55;;;;-1:-1:-1;;;2096:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1964:195;;;:::o;12141:513::-;12234:14;12280:1;12269:8;:12;12261:66;;;;-1:-1:-1;;;12261:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12358:1;12346:9;:13;:31;;;;;12376:1;12363:10;:14;12346:31;12338:82;;;;-1:-1:-1;;;12338:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12431:20;12454:17;:8;12467:3;12454:17;:12;:17;:::i;:::-;12431:40;-1:-1:-1;12482:14:0;12499:31;12431:40;12519:10;12499:31;:19;:31;:::i;:::-;12482:48;-1:-1:-1;12541:16:0;12560:40;12584:15;12560:19;:9;12574:4;12560:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;12541:59;;12635:11;12623:9;:23;;;;;;;12141:513;-1:-1:-1;;;;;;;12141:513:0:o;13325:509::-;13426:21;13483:1;13468:4;:11;:16;;13460:57;;;;;-1:-1:-1;;;13460:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13549:4;:11;13538:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13538:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;13538:23:0;;13528:33;;13585:8;13572:7;13580:1;13572:10;;;;;;;;;;;;;:21;;;;;13609:6;13604:223;13635:1;13621:4;:11;:15;13617:1;:19;13604:223;;;13659:14;13675:15;13694:42;13706:7;13715:4;13720:1;13715:7;;;;;;;;;;;;;;13724:4;13729:1;13733;13729:5;13724:11;;;;;;;;;;;;;;13694;:42::i;:::-;13658:78;;;;13768:47;13781:7;13789:1;13781:10;;;;;;;;;;;;;;13793:9;13804:10;13768:12;:47::i;:::-;13751:7;13759:1;13763;13759:5;13751:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;13638:3:0;;13604:223;;;;13325:509;;;;;:::o;10621:478::-;10710:12;10736:14;10752;10770:26;10781:6;10789;10770:10;:26::i;:::-;10934:32;;;-1:-1:-1;;10934:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;10934:32:0;;;;;10924:43;;;;;;-1:-1:-1;;;;;;10837:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10837:251:0;;;;;;;10827:262;;;;;;;;;10621:478;-1:-1:-1;;;;;10621:478:0:o;1554:402::-;1779:51;;;-1:-1:-1;;;;;1779:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1779:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1768:63:0;;;;1733:12;;1747:17;;1768:10;;;;1779:51;1768:63;;;25:18:-1;1768: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;;;1768: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;;1732:99:0;;;;1850:7;:57;;;;-1:-1:-1;1862:11:0;;:16;;:44;;;1893:4;1882:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1882:24:0;1862:44;1842:106;;;;-1:-1:-1;;;1842:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1554:402;;;;;;:::o;23666:727::-;23773:6;23768:618;23799:1;23785:4;:11;:15;23781:1;:19;23768:618;;;23823:13;23838:14;23857:4;23862:1;23857:7;;;;;;;;;;;;;;23866:4;23871:1;23875;23871:5;23866:11;;;;;;;;;;;;;;23822:56;;;;23894:14;23913:40;23939:5;23946:6;23913:25;:40::i;:::-;23893:60;;;23968:14;23985:7;23993:1;23997;23993:5;23985:14;;;;;;;;;;;;;;23968:31;;24015:15;24032;24060:6;-1:-1:-1;;;;;24051:15:0;:5;-1:-1:-1;;;;;24051:15:0;;:61;;24093:9;24109:1;24051:61;;;24075:1;24079:9;24051:61;24014:98;;;;24127:10;24158:1;24144:4;:11;:15;24140:1;:19;:80;;24217:3;24140:80;;;24162:52;24185:7;24194:6;24202:4;24207:1;24211;24207:5;24202:11;;;;;;;;;;;;;;24162:22;:52::i;:::-;24127:93;;24248:46;24271:7;24280:5;24287:6;24248:22;:46::i;:::-;-1:-1:-1;;;;;24235:65:0;;24319:10;24331;24343:2;24357:1;24347:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;24347:12:0;87:42:-1;143:17;;-1:-1;24347:12:0;;24235:139;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24235:139:0;-1:-1:-1;;;;;24235:139: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;24235:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24235:139:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;23802:3:0;;;;;-1:-1:-1;23768:618:0;;-1:-1:-1;;;;;;;;23768:618:0;;;23666:727;;;:::o;13915:530::-;14016:21;14073:1;14058:4;:11;:16;;14050:57;;;;;-1:-1:-1;;;14050:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14139:4;:11;14128:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14128:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14128:23:0;;14118:33;;14192:9;14162:7;14187:1;14170:7;:14;:18;14162:27;;;;;;;;;;;;;;;;;:39;14226:11;;-1:-1:-1;;14226:15:0;14212:226;14243:5;;14212:226;;14271:14;14287:15;14306:42;14318:7;14327:4;14336:1;14332;:5;14327:11;;;;;;;;;;;;;;14340:4;14345:1;14340:7;;;;;;;14306:42;14270:78;;;;14380:46;14392:7;14400:1;14392:10;;;;;;;;;;;;;;14404:9;14415:10;14380:11;:46::i;:::-;14363:7;14375:1;14371;:5;14363:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;14250:3:0;14212:226;;28951:1202;29064:6;29059:1087;29090:1;29076:4;:11;:15;29072:1;:19;29059:1087;;;29114:13;29129:14;29148:4;29153:1;29148:7;;;;;;;;;;;;;;29157:4;29162:1;29166;29162:5;29157:11;;;;;;;;;;;;;;29113:56;;;;29185:14;29204:40;29230:5;29237:6;29204:25;:40::i;:::-;29184:60;;;29259:17;29292:46;29315:7;29324:5;29331:6;29292:22;:46::i;:::-;29259:80;;29354:16;29385:17;29473:13;29488;29506:4;-1:-1:-1;;;;;29506:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29506:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29506:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29506:18:0;;;;;;;-1:-1:-1;;;;;29472:52:0;;;;-1:-1:-1;29472:52:0;;-1:-1:-1;29540:17:0;;-1:-1:-1;;;;;29581:15:0;;;;;;;:61;;29623:8;29633;29581:61;;;29600:8;29610;29581:61;29539:103;;;;29671:56;29714:12;29678:5;-1:-1:-1;;;;;29671:23:0;;29703:4;29671:38;;;;;;;;;;;;;-1:-1:-1;;;;;29671:38:0;-1:-1:-1;;;;;29671:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;29671:56:0;29657:70;;29757:69;29785:11;29798:12;29812:13;29757:27;:69::i;:::-;29742:84;;29059:1087;;;;29857:15;29874;29902:6;-1:-1:-1;;;;;29893:15:0;:5;-1:-1:-1;;;;;29893:15:0;;:67;;29938:12;29957:1;29893:67;;;29917:1;29921:12;29893:67;29856:104;;;;29975:10;30006:1;29992:4;:11;:15;29988:1;:19;:80;;30065:3;29988:80;;;30010:52;30033:7;30042:6;30050:4;30055:1;30059;30055:5;30050:11;;;;;;;30010:52;30121:12;;;30131:1;30121:12;;;;;;;;;;-1:-1:-1;;;30083:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30083:51:0;;;;;;;;;;;;;;;;;;;;;;29975:93;;-1:-1:-1;30083:9:0;;;;;;30093:10;;30105;;29975:93;;30121:12;;30083:51;;;;;;;;30121:12;;30083:51;;;;30121: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;30083:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30083:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29093:3:0;;;;;-1:-1:-1;29059:1087:0;;-1:-1:-1;;;;;;;;;;29059:1087:0;9735:129;9819:5;;;9814:16;;;;9806:50;;;;;-1:-1:-1;;;9806:50:0;;;;;;;;;;;;-1:-1:-1;;;9806:50:0;;;;;;;;;;;;;;12775:468;12868:13;12914:1;12902:9;:13;12894:68;;;;-1:-1:-1;;;12894:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12993:1;12981:9;:13;:31;;;;;13011:1;12998:10;:14;12981:31;12973:82;;;;-1:-1:-1;;;12973:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13066:14;13083:34;13112:4;13083:24;:9;13097;13083:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;13066:51;-1:-1:-1;13128:16:0;13147:34;13177:3;13147:25;:10;13162:9;13147:25;:14;:25;:::i;:34::-;13128:53;;13203:32;13233:1;13216:11;13204:9;:23;;;;;;;13203:32;:29;:32;:::i;:::-;13192:43;12775:468;-1:-1:-1;;;;;;12775:468:0:o;11702:317::-;11784:12;11827:1;11817:7;:11;11809:59;;;;-1:-1:-1;;;11809:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11898:1;11887:8;:12;:28;;;;;11914:1;11903:8;:12;11887:28;11879:79;;;;-1:-1:-1;;;11879:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12003:8;11979:21;:7;11991:8;11979:21;:11;:21;:::i;:::-;:32;;;;;;;11702:317;-1:-1:-1;;;;11702:317:0:o;10184:345::-;10259:14;10275;10320:6;-1:-1:-1;;;;;10310:16:0;:6;-1:-1:-1;;;;;10310:16:0;;;10302:64;;;;-1:-1:-1;;;10302:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10405:6;-1:-1:-1;;;;;10396:15:0;:6;-1:-1:-1;;;;;10396:15:0;;:53;;10434:6;10442;10396:53;;;10415:6;10423;10396:53;10377:72;;-1:-1:-1;10377:72:0;-1:-1:-1;;;;;;10468:20:0;;10460:61;;;;;-1:-1:-1;;;10460:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10184:345;;;;;:::o;16039:1376::-;16352:48;;;-1:-1:-1;;;16352:48:0;;-1:-1:-1;;;;;16352:48:0;;;;;;;;;;;;;;;;16257:12;;;;;;16368:7;16352:32;;;;;;:48;;;;;;;;;;;;;;;:32;:48;;;2:2:-1;;;;27:1;24;17:12;2:2;16352:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16352:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16352:48:0;-1:-1:-1;;;;;16352:62:0;;16348:146;;;16431:51;;;-1:-1:-1;;;16431:51:0;;-1:-1:-1;;;;;16431:51:0;;;;;;;;;;;;;;;;16447:7;16431:35;;;;;;:51;;;;;;;;;;;;;;;-1:-1:-1;16431:35:0;:51;;;2:2:-1;;;;27:1;24;17:12;2:2;16431:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16431:51:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;16348:146:0;16505:13;16520;16537:51;16564:7;16573:6;16581;16537:26;:51::i;:::-;16504:84;;;;16603:8;16615:1;16603:13;:30;;;;-1:-1:-1;16620:13:0;;16603:30;16599:809;;;16672:14;;-1:-1:-1;16688:14:0;;-1:-1:-1;16599:809:0;;;16736:19;16758:56;16779:14;16795:8;16805;16758:20;:56::i;:::-;16736:78;;16851:14;16833;:32;16829:568;;16912:10;16894:14;:28;;16886:77;;;;-1:-1:-1;;;16886:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17004:14;;-1:-1:-1;17020:14:0;-1:-1:-1;17020:14:0;16829:568;;;17076:19;17098:56;17119:14;17135:8;17145;17098:20;:56::i;:::-;17076:78;;17198:14;17180;:32;;17173:40;;;;17258:10;17240:14;:28;;17232:77;;;;-1:-1:-1;;;17232:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17350:14;-1:-1:-1;17366:14:0;;-1:-1:-1;16829:568:0;16599:809;;16039:1376;;;;;;;;;;;:::o;9872:142::-;9924:6;9951;;;:30;;-1:-1:-1;;9966:5:0;;;9980:1;9975;9966:5;9975:1;9961:15;;;;;:20;9951:30;9943:63;;;;;-1:-1:-1;;;9943:63:0;;;;;;;;;;;;-1:-1:-1;;;9943:63:0;;;;;;;;;;;;;;9599:128;9683:5;;;9678:16;;;;9670:49;;;;;-1:-1:-1;;;9670:49:0;;;;;;;;;;;;-1:-1:-1;;;9670:49:0;;;;;;;;;;;;;;11157:432;11250:13;11265;11292:14;11311:26;11322:6;11330;11311:10;:26::i;:::-;11291:46;;;11348:32;11356:7;11365:6;11373;11348:7;:32::i;:::-;;11392:13;11407;11438:32;11446:7;11455:6;11463;11438:7;:32::i;:::-;-1:-1:-1;;;;;11425:58:0;;:60;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11425:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11425:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11425:60:0;;;;;;;-1:-1:-1;;;;;11391:94:0;;;;-1:-1:-1;11391:94:0;;-1:-1:-1;;;;;;11519:16:0;;;;;;;:62;;11562:8;11572;11519:62;;;11539:8;11549;11519:62;11496:85;;;;-1:-1:-1;11157:432:0;-1:-1:-1;;;;;;;11157:432:0:o

Swarm Source

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