Contract 0x6ac823102cb347e1f5925c634b80a98a3aee7e03

 
 
Txn Hash
Method
Block
From
To
Value [Txn Fee]
0x1c3afd6447f41b5c428c455a3d25e4d43e92c2e9be4ddfe3e4116334bb6ad3e0Swap Exact Token...411480282023-04-04 21:31:5654 days 13 hrs ago0x872af3cb1dad88907f2944f166a98a9d4a86dd93 IN  0x6ac823102cb347e1f5925c634b80a98a3aee7e030 MATIC0.00384582 30
0xc67aa3f19e734f244e5fa7d2af828f770d8792d8a1a21dbc763c9a43ff02720bSwap Exact Token...403200522023-03-14 2:25:3276 days 8 hrs ago0x2da51acafb029c73f501b9243d01900d50a3a5cb IN  0x6ac823102cb347e1f5925c634b80a98a3aee7e030 MATIC0.037808268096145.289008471
0x8f379564ed8e2ce27e58175c67c428b343c10545fc7a4bd682b9276cba2cbe11Swap Tokens For ...402650042023-03-12 15:45:5277 days 19 hrs ago0xad936892190a78a2d814725db14fa5b32f6b8498 IN  0x6ac823102cb347e1f5925c634b80a98a3aee7e030 MATIC0.030046046156 123.47656372
0x09f530bfd7f301b79da22321bf0a60d213df97bed19b3193c6d05be3769c17c5Swap Tokens For ...402649032023-03-12 15:42:1877 days 19 hrs ago0xad936892190a78a2d814725db14fa5b32f6b8498 IN  0x6ac823102cb347e1f5925c634b80a98a3aee7e030 MATIC0.040299919191 165.623820251
0xd43a0d3b4c8c5823084830d3ac063347704306f721928048e30a97cf3897fd8aSwap Tokens For ...402648882023-03-12 15:41:3277 days 19 hrs ago0xad936892190a78a2d814725db14fa5b32f6b8498 IN  0x6ac823102cb347e1f5925c634b80a98a3aee7e030 MATIC0.03808051754 156.494848812
0x5b01ee6e68945c6af01a20c2917aa854478ec0e8238620b50d006b5c3e42c3c7Swap Tokens For ...402648802023-03-12 15:41:0077 days 19 hrs ago0xad936892190a78a2d814725db14fa5b32f6b8498 IN  0x6ac823102cb347e1f5925c634b80a98a3aee7e030 MATIC0.030035547981 123.433420655
0x0f8230875c97165b60f2be8e31c30bfae1002ad01e24284d3008768c7b426b25Swap Tokens For ...402648642023-03-12 15:40:2477 days 19 hrs ago0xad936892190a78a2d814725db14fa5b32f6b8498 IN  0x6ac823102cb347e1f5925c634b80a98a3aee7e030 MATIC0.034298694044 140.953150996
0x55f238317080b01cf9f3b437def50599a625f9b2bb6335dd9d4f50d5154c33daSwap Tokens For ...402648162023-03-12 15:38:4277 days 19 hrs ago0xad936892190a78a2d814725db14fa5b32f6b8498 IN  0x6ac823102cb347e1f5925c634b80a98a3aee7e030 MATIC0.03617733269 148.673562637
0x3902ad7d1f336e2d5959b2c1f7313535ec868b3f836ba321f8a4458992a3eb38Swap Tokens For ...402648012023-03-12 15:38:1077 days 19 hrs ago0xad936892190a78a2d814725db14fa5b32f6b8498 IN  0x6ac823102cb347e1f5925c634b80a98a3aee7e030 MATIC0.034272664439 140.846180309
0x8c698238eed866eb2665e4bf40c37754598edb62c775b98405b46f1d5e2f0d5fSwap Tokens For ...402647862023-03-12 15:37:3877 days 19 hrs ago0xad936892190a78a2d814725db14fa5b32f6b8498 IN  0x6ac823102cb347e1f5925c634b80a98a3aee7e030 MATIC0.031728675848 130.391461317
0x54a5b1f4f04995448e44bf63391338727929aa5575df47902a6da98ab4dc1e7cSwap Tokens For ...402647692023-03-12 15:37:0277 days 19 hrs ago0xad936892190a78a2d814725db14fa5b32f6b8498 IN  0x6ac823102cb347e1f5925c634b80a98a3aee7e030 MATIC0.031751836229 130.486640705
0x316c9fe1730b00e1fb9cdf11f54de993dbeeb41d1b0fc89c0163e8a1588eab75Swap Exact Token...402647512023-03-12 15:36:2277 days 19 hrs ago0xad936892190a78a2d814725db14fa5b32f6b8498 IN  0x6ac823102cb347e1f5925c634b80a98a3aee7e030 MATIC0.021819267758 130.662122037
0xb3a721c6d8ee8513c1918765adee59f6904ee158e7589e196762c8fe7aaf0431Swap Exact Token...402469082023-03-12 4:32:3378 days 6 hrs ago0x404ae49af913c9ba142b3d03749e11348c6681c1 IN  0x6ac823102cb347e1f5925c634b80a98a3aee7e030 MATIC0.017194432514 147.67662531
0x1f4bebdbeb6e981a28ade0cfc81b0e9d651d699d48dadb7818224d79dccd543bSwap Exact Token...402468802023-03-12 4:31:0978 days 6 hrs ago0x404ae49af913c9ba142b3d03749e11348c6681c1 IN  0x6ac823102cb347e1f5925c634b80a98a3aee7e030 MATIC0.014835368272 122.39493992
0xb82fa95fc196a3ab84ce8eef23fe781c50463ee879aa96c21a1a71defb6a6f0eSwap Exact Token...402468312023-03-12 4:29:2378 days 6 hrs ago0x404ae49af913c9ba142b3d03749e11348c6681c1 IN  0x6ac823102cb347e1f5925c634b80a98a3aee7e030 MATIC0.015279596439 126.05991667
0xec30299c7651080e8a2f3ed37e4496a5cef9f06a508306670371dee8eb2b90a1Swap Exact Token...402468152023-03-12 4:28:4978 days 6 hrs ago0x404ae49af913c9ba142b3d03749e11348c6681c1 IN  0x6ac823102cb347e1f5925c634b80a98a3aee7e030 MATIC0.017104348518 141.114508973
0x24de5ce4249385c17a245c86055dadb1c22abaaffda95be42caa221fca63b1a5Swap Exact Token...402303672023-03-11 18:09:0678 days 16 hrs ago0x22bd5229cef0ae94a5a65ed996c7edca6b82855e IN  0x6ac823102cb347e1f5925c634b80a98a3aee7e030 MATIC0.026699728186 137.310377
0xee82b2e40daf7d383d6fc716d2cceedca761fe030c6890b8dd00c57c4f5835a8Swap Exact Token...402187122023-03-11 11:13:3178 days 23 hrs ago0xe6f98a98db26d5b4e4b7eced30a712f7eb4e56a7 IN  0x6ac823102cb347e1f5925c634b80a98a3aee7e030 MATIC0.034008764942 245.813323569
0x233dad76d6d17edcd66555bd29f76325905d1c8f6fb8aef30d92be563642dba6Swap Exact ETH F...401976692023-03-10 21:42:4179 days 13 hrs ago0x1e63c654cb9c8da19cd73861eeace520780657b3 IN  0x6ac823102cb347e1f5925c634b80a98a3aee7e0310.981118277751217 MATIC0.017568566878 87.891614237
0x6a0b9a2a54afb0bbfa647958b22c9fa20e818e496a67a80069ea00477f6ad149Swap Exact ETH F...401936252023-03-10 19:06:3879 days 15 hrs ago lalmiah786.wallet  IN  0x6ac823102cb347e1f5925c634b80a98a3aee7e038 MATIC0.022423721483112.180867799
0xc3f3883d5ba5093a7c9a1bf03f3c7ad1f3a97cc10e01619c479b6b0e21997bc3Swap Exact Token...401930702023-03-10 18:45:1879 days 16 hrs ago lalmiah786.wallet  IN  0x6ac823102cb347e1f5925c634b80a98a3aee7e030 MATIC0.01889802811197.182084294
0xf74efa6bc6381139d3a7a163f25c47b0d9173979f2ce70bd922e1df3637d2ab1Swap Tokens For ...401925462023-03-10 18:25:1679 days 16 hrs ago0xad936892190a78a2d814725db14fa5b32f6b8498 IN  0x6ac823102cb347e1f5925c634b80a98a3aee7e030 MATIC0.025674122146 105.509801945
0x8f60d5c35a49b16048aaff7af8333fe496c3ae80435a64078f70e3a0c78a8067Swap Exact Token...401778802023-03-10 9:07:5180 days 1 hr ago0x82b2b56be274f642c1b537f8cde5f99db385e03d IN  0x6ac823102cb347e1f5925c634b80a98a3aee7e030 MATIC0.019208158461 138.823382251
0xbfb31b37d89c0bf262a10511b4ac99aa9abcea0c98ba54b614e9a6d7913ac26aRemove Liquidity...401778572023-03-10 9:07:0380 days 1 hr ago0x82b2b56be274f642c1b537f8cde5f99db385e03d IN  0x6ac823102cb347e1f5925c634b80a98a3aee7e030 MATIC0.029514827648 155.66563811
0xff08176ca65d1f202069baa0d88b88d5e1af4322feb32a7b64483d258b8f90d7Swap Exact Token...401740972023-03-10 6:40:2980 days 4 hrs ago0x404ae49af913c9ba142b3d03749e11348c6681c1 IN  0x6ac823102cb347e1f5925c634b80a98a3aee7e030 MATIC0.02638388731 217.672675387
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xb3a721c6d8ee8513c1918765adee59f6904ee158e7589e196762c8fe7aaf0431402469082023-03-12 4:32:3378 days 6 hrs ago 0x6ac823102cb347e1f5925c634b80a98a3aee7e030x404ae49af913c9ba142b3d03749e11348c6681c11.008470627738732413 MATIC
0xb3a721c6d8ee8513c1918765adee59f6904ee158e7589e196762c8fe7aaf0431402469082023-03-12 4:32:3378 days 6 hrs ago Polygon: WMATIC Token 0x6ac823102cb347e1f5925c634b80a98a3aee7e031.008470627738732413 MATIC
0x1f4bebdbeb6e981a28ade0cfc81b0e9d651d699d48dadb7818224d79dccd543b402468802023-03-12 4:31:0978 days 6 hrs ago 0x6ac823102cb347e1f5925c634b80a98a3aee7e030x404ae49af913c9ba142b3d03749e11348c6681c10.733667232325777864 MATIC
0x1f4bebdbeb6e981a28ade0cfc81b0e9d651d699d48dadb7818224d79dccd543b402468802023-03-12 4:31:0978 days 6 hrs ago Polygon: WMATIC Token 0x6ac823102cb347e1f5925c634b80a98a3aee7e030.733667232325777864 MATIC
0xb82fa95fc196a3ab84ce8eef23fe781c50463ee879aa96c21a1a71defb6a6f0e402468312023-03-12 4:29:2378 days 6 hrs ago 0x6ac823102cb347e1f5925c634b80a98a3aee7e030x404ae49af913c9ba142b3d03749e11348c6681c10.902626216475994568 MATIC
0xb82fa95fc196a3ab84ce8eef23fe781c50463ee879aa96c21a1a71defb6a6f0e402468312023-03-12 4:29:2378 days 6 hrs ago Polygon: WMATIC Token 0x6ac823102cb347e1f5925c634b80a98a3aee7e030.902626216475994568 MATIC
0xec30299c7651080e8a2f3ed37e4496a5cef9f06a508306670371dee8eb2b90a1402468152023-03-12 4:28:4978 days 6 hrs ago 0x6ac823102cb347e1f5925c634b80a98a3aee7e030x404ae49af913c9ba142b3d03749e11348c6681c10.957249198668123737 MATIC
0xec30299c7651080e8a2f3ed37e4496a5cef9f06a508306670371dee8eb2b90a1402468152023-03-12 4:28:4978 days 6 hrs ago Polygon: WMATIC Token 0x6ac823102cb347e1f5925c634b80a98a3aee7e030.957249198668123737 MATIC
0x24de5ce4249385c17a245c86055dadb1c22abaaffda95be42caa221fca63b1a5402303672023-03-11 18:09:0678 days 16 hrs ago 0x6ac823102cb347e1f5925c634b80a98a3aee7e030x22bd5229cef0ae94a5a65ed996c7edca6b82855e3.344018623907147362 MATIC
0x24de5ce4249385c17a245c86055dadb1c22abaaffda95be42caa221fca63b1a5402303672023-03-11 18:09:0678 days 16 hrs ago Polygon: WMATIC Token 0x6ac823102cb347e1f5925c634b80a98a3aee7e033.344018623907147362 MATIC
0x233dad76d6d17edcd66555bd29f76325905d1c8f6fb8aef30d92be563642dba6401976692023-03-10 21:42:4179 days 13 hrs ago 0x6ac823102cb347e1f5925c634b80a98a3aee7e03 Polygon: WMATIC Token10.981118277751217882 MATIC
0x6a0b9a2a54afb0bbfa647958b22c9fa20e818e496a67a80069ea00477f6ad149401936252023-03-10 19:06:3879 days 15 hrs ago 0x6ac823102cb347e1f5925c634b80a98a3aee7e03 Polygon: WMATIC Token8 MATIC
0xc3f3883d5ba5093a7c9a1bf03f3c7ad1f3a97cc10e01619c479b6b0e21997bc3401930702023-03-10 18:45:1879 days 16 hrs ago 0x6ac823102cb347e1f5925c634b80a98a3aee7e03 lalmiah786.wallet 13.025230353218174489 MATIC
0xc3f3883d5ba5093a7c9a1bf03f3c7ad1f3a97cc10e01619c479b6b0e21997bc3401930702023-03-10 18:45:1879 days 16 hrs ago Polygon: WMATIC Token 0x6ac823102cb347e1f5925c634b80a98a3aee7e0313.025230353218174489 MATIC
0xff08176ca65d1f202069baa0d88b88d5e1af4322feb32a7b64483d258b8f90d7401740972023-03-10 6:40:2980 days 4 hrs ago 0x6ac823102cb347e1f5925c634b80a98a3aee7e030x404ae49af913c9ba142b3d03749e11348c6681c11.290903845999503492 MATIC
0xff08176ca65d1f202069baa0d88b88d5e1af4322feb32a7b64483d258b8f90d7401740972023-03-10 6:40:2980 days 4 hrs ago Polygon: WMATIC Token 0x6ac823102cb347e1f5925c634b80a98a3aee7e031.290903845999503492 MATIC
0xde5087f6d08b72acf1758aaa6ba4fd973c527c4c2424c7b4f7af68e7089f9753401740752023-03-10 6:39:4180 days 4 hrs ago 0x6ac823102cb347e1f5925c634b80a98a3aee7e030x404ae49af913c9ba142b3d03749e11348c6681c11.431338066037787576 MATIC
0xde5087f6d08b72acf1758aaa6ba4fd973c527c4c2424c7b4f7af68e7089f9753401740752023-03-10 6:39:4180 days 4 hrs ago Polygon: WMATIC Token 0x6ac823102cb347e1f5925c634b80a98a3aee7e031.431338066037787576 MATIC
0x940d83c61cd8c9dbac7cc9eb02d5498383ec83f07e705ccd212180e7c064084d401598302023-03-09 21:37:3780 days 13 hrs ago 0x6ac823102cb347e1f5925c634b80a98a3aee7e03 Polygon: WMATIC Token0.5 MATIC
0x53a4c76a91292484cadc8ac6d8c3acfd3ff24bc3ca2835e47b93112216d902f1401571822023-03-09 19:56:1580 days 15 hrs ago 0x6ac823102cb347e1f5925c634b80a98a3aee7e030x363dea8f004552cea3f2da0a5162637bac2d4e9112.942190933479057423 MATIC
0x53a4c76a91292484cadc8ac6d8c3acfd3ff24bc3ca2835e47b93112216d902f1401571822023-03-09 19:56:1580 days 15 hrs ago Polygon: WMATIC Token 0x6ac823102cb347e1f5925c634b80a98a3aee7e0312.942190933479057423 MATIC
0x96c34aadf24d48bcda2658473e5fe2908d6416e96ee3bc2c3b097ae98cac30bd401514712023-03-09 16:20:3780 days 18 hrs ago 0x6ac823102cb347e1f5925c634b80a98a3aee7e03 Polygon: WMATIC Token8 MATIC
0xf397833946557ee92749bc976d316d39e26806b26a7d67e8af5f02c70ac2498e401480322023-03-09 14:11:4680 days 20 hrs ago 0x6ac823102cb347e1f5925c634b80a98a3aee7e030x2da51acafb029c73f501b9243d01900d50a3a5cb0.016200249997571135 MATIC
0xf397833946557ee92749bc976d316d39e26806b26a7d67e8af5f02c70ac2498e401480322023-03-09 14:11:4680 days 20 hrs ago 0x6ac823102cb347e1f5925c634b80a98a3aee7e03 Polygon: WMATIC Token1.758366274122367836 MATIC
0xaa8c5d20cccb53e84be2f58dd95f4d6d695e925f30a5a4b861e6009c12f35c74401479842023-03-09 14:10:0480 days 20 hrs ago 0x6ac823102cb347e1f5925c634b80a98a3aee7e03 Polygon: WMATIC Token114.7 MATIC
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DinoswapV2Router

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 polygonscan.com on 2021-12-17
*/

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

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

pragma solidity >=0.5.0;

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

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

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

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

pragma solidity >=0.6.0;

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

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

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

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

// File: contracts/interfaces/IUniswapV2Router01.sol

pragma solidity >=0.6.2;

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

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

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

// File: contracts/interfaces/IUniswapV2Router02.sol

pragma solidity >=0.6.2;


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

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

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

pragma solidity >=0.5.0;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

// File: contracts/libraries/SafeMath.sol

pragma solidity =0.6.6;

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

library SafeMath {
    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x, 'ds-math-add-overflow');
    }

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

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

// File: contracts/libraries/UniswapV2Library.sol

pragma solidity >=0.5.0;



library UniswapV2Library {
    using SafeMath for uint;

    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
        require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'UniswapV2Library: ZERO_ADDRESS');
    }

    // calculates the CREATE2 address for a pair without making any external calls
    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {
        (address token0, address token1) = sortTokens(tokenA, tokenB);
        pair = address(uint(keccak256(abi.encodePacked(
                hex'ff',
                factory,
                keccak256(abi.encodePacked(token0, token1)),
                hex'6a733b8ac43b9d683a3035801788767d1b63c7998154ab1d6379b011dc98a9b8' // init code hash
            ))));
    }

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

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

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

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

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

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

// File: contracts/interfaces/IERC20.sol

pragma solidity >=0.5.0;

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

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

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

// File: contracts/interfaces/IWETH.sol

pragma solidity >=0.5.0;

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

// File: contracts/UniswapV2Router02.sol

pragma solidity =0.6.6;

contract DinoswapV2Router is IUniswapV2Router02 {
    using SafeMath for uint;

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

    modifier ensure(uint deadline) {
        require(deadline >= block.timestamp, 'UniswapV2Router: EXPIRED');
        _;
    }

    constructor(address _factory, address _WETH) public {
        factory = _factory;
        WETH = _WETH;
    }

    receive() external payable {
        assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract
    }

    // **** ADD LIQUIDITY ****
    function _addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin
    ) internal virtual returns (uint amountA, uint amountB) {
        // create the pair if it doesn't exist yet
        if (IUniswapV2Factory(factory).getPair(tokenA, tokenB) == address(0)) {
            IUniswapV2Factory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = UniswapV2Library.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = UniswapV2Library.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'UniswapV2Router: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = UniswapV2Library.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'UniswapV2Router: INSUFFICIENT_A_AMOUNT');
                (amountA, amountB) = (amountAOptimal, amountBDesired);
            }
        }
    }
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) {
        (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin);
        address pair = UniswapV2Library.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IUniswapV2Pair(pair).mint(to);
    }
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) {
        (amountToken, amountETH) = _addLiquidity(
            token,
            WETH,
            amountTokenDesired,
            msg.value,
            amountTokenMin,
            amountETHMin
        );
        address pair = UniswapV2Library.pairFor(factory, token, WETH);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWETH(WETH).deposit{value: amountETH}();
        assert(IWETH(WETH).transfer(pair, amountETH));
        liquidity = IUniswapV2Pair(pair).mint(to);
        // refund dust eth, if any
        if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH);
    }

    // **** REMOVE LIQUIDITY ****
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountA, uint amountB) {
        address pair = UniswapV2Library.pairFor(factory, tokenA, tokenB);
        IUniswapV2Pair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = IUniswapV2Pair(pair).burn(to);
        (address token0,) = UniswapV2Library.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'UniswapV2Router: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'UniswapV2Router: INSUFFICIENT_B_AMOUNT');
    }
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountToken, uint amountETH) {
        (amountToken, amountETH) = removeLiquidity(
            token,
            WETH,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, amountToken);
        IWETH(WETH).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountA, uint amountB) {
        address pair = UniswapV2Library.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        IUniswapV2Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline);
    }
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountToken, uint amountETH) {
        address pair = UniswapV2Library.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IUniswapV2Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline);
    }

    // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) ****
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountETH) {
        (, amountETH) = removeLiquidity(
            token,
            WETH,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this)));
        IWETH(WETH).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountETH) {
        address pair = UniswapV2Library.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IUniswapV2Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        amountETH = removeLiquidityETHSupportingFeeOnTransferTokens(
            token, liquidity, amountTokenMin, amountETHMin, to, deadline
        );
    }

    // **** SWAP ****
    // requires the initial amount to have already been sent to the first pair
    function _swap(uint[] memory amounts, address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = UniswapV2Library.sortTokens(input, output);
            uint amountOut = amounts[i + 1];
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0));
            address to = i < path.length - 2 ? UniswapV2Library.pairFor(factory, output, path[i + 2]) : _to;
            IUniswapV2Pair(UniswapV2Library.pairFor(factory, input, output)).swap(
                amount0Out, amount1Out, to, new bytes(0)
            );
        }
    }
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint[] memory amounts) {
        amounts = UniswapV2Library.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint[] memory amounts) {
        amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WETH, 'UniswapV2Router: INVALID_PATH');
        amounts = UniswapV2Library.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
    }
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[path.length - 1] == WETH, 'UniswapV2Router: INVALID_PATH');
        amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWETH(WETH).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[path.length - 1] == WETH, 'UniswapV2Router: INVALID_PATH');
        amounts = UniswapV2Library.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWETH(WETH).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WETH, 'UniswapV2Router: INVALID_PATH');
        amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
        // refund dust eth, if any
        if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]);
    }

    // **** SWAP (supporting fee-on-transfer tokens) ****
    // requires the initial amount to have already been sent to the first pair
    function _swapSupportingFeeOnTransferTokens(address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = UniswapV2Library.sortTokens(input, output);
            IUniswapV2Pair pair = IUniswapV2Pair(UniswapV2Library.pairFor(factory, input, output));
            uint amountInput;
            uint amountOutput;
            { // scope to avoid stack too deep errors
            (uint reserve0, uint reserve1,) = pair.getReserves();
            (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
            amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput);
            amountOutput = UniswapV2Library.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? UniswapV2Library.pairFor(factory, output, path[i + 2]) : _to;
            pair.swap(amount0Out, amount1Out, to, new bytes(0));
        }
    }
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) {
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amountIn
        );
        uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WETH, 'UniswapV2Router: INVALID_PATH');
        uint amountIn = msg.value;
        IWETH(WETH).deposit{value: amountIn}();
        assert(IWETH(WETH).transfer(UniswapV2Library.pairFor(factory, path[0], path[1]), amountIn));
        uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        ensure(deadline)
    {
        require(path[path.length - 1] == WETH, 'UniswapV2Router: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).withdraw(amountOut);
        TransferHelper.safeTransferETH(to, amountOut);
    }

    // **** LIBRARY FUNCTIONS ****
    function quote(uint amountA, uint reserveA, uint reserveB) public pure virtual override returns (uint amountB) {
        return UniswapV2Library.quote(amountA, reserveA, reserveB);
    }

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

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

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

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

Contract Security Audit

Contract ABI

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

60c060405234801561001057600080fd5b5060405162004768380380620047688339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6145e3620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118eb52806119e55280611a9b5280611b695280611caf5280611d375280611f7c5280611ff752806120a652806121725280612207528061227b528061277952806129ec5280612a425280612a765280612aea5280612c8a5280612dcd5280612e55525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611bfc5280611d695280611ecc52806122ad528061250652806126fe5280612727528061275752806128c45280612a205280612d1d5280612e87528061372e52806137715280613a545280613bd3528061400352806140b1528061413152506145e36000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124b8565b348015610a1c57600080fd5b5061088a6126fc565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612720945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561274d565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612861565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561299d565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c42565b6000808242811015610cde576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124b8565b9093509150610d1d898685612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da5858361312e565b50965096945050505050565b6000610dbe848484613226565b949350505050565b60608142811015610e0c576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b815260206004820152601d60248201526000805160206144ab833981519152604482015290519081900360640190fd5b610efd7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b815260040180806020018281038252602b815260200180614514602b913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b0316613462565b85600081518110610fe657fe5b6020026020010151613522565b6110328287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061367f915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b602002602001015161312e565b509695505050505050565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846138c5565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f613462565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124b8565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b6112c77f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b815260040180806020018281038252602b815260200180614514602b913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e88287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b606081428110156113b4576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b815260206004820152601d60248201526000805160206144ab833981519152604482015290519081900360640190fd5b6114a57f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b81526004018080602001828103825260278152602001806144846027913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a613522565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a49290918991899182918501908490808284376000920191909152508892506139fd915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613d0816565b10156118935760405162461bcd60e51b815260040180806020018281038252602b815260200180614514602b913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b815260206004820152601d60248201526000805160206144ab833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c28585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506139fd915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b815260040180806020018281038252602b815260200180614514602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b50505050611893848261312e565b60608142811015611b67576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b815260206004820152601d60248201526000805160206144ab833981519152604482015290519081900360640190fd5b611c557f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b815260040180806020018281038252602b815260200180614514602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d957f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b5095945050505050565b6000610dbe848484613d58565b60608142811015611ec7576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b611f257f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b81526004018080602001828103825260278152602001806144846027913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613e48565b60008142811015611ff1576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b612020887f000000000000000000000000000000000000000000000000000000000000000089898930896124b8565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e8848361312e565b8042811015612170576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b815260206004820152601d60248201526000805160206144ab833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122d97f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a9182918501908490808284376000920191909152508992506139fd915050565b87611856828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b60008082428110156124ff576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b600061252c7f00000000000000000000000000000000000000000000000000000000000000008c8c613462565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561258757600080fd5b505af115801561259b573d6000803e3d6000fd5b505050506040513d60208110156125b157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b505050506040513d604081101561262857600080fd5b508051602090910151909250905060006126428e8e613ef4565b509050806001600160a01b03168e6001600160a01b031614612665578183612668565b82825b90975095508a8710156126ac5760405162461bcd60e51b81526004018080602001828103825260268152602001806144cb6026913960400191505060405180910390fd5b898610156126eb5760405162461bcd60e51b81526004018080602001828103825260268152602001806144116026913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f00000000000000000000000000000000000000000000000000000000000000008484613316565b600080600061279d7f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613462565b90506000876127ac578c6127b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561282657600080fd5b505af115801561283a573d6000803e3d6000fd5b5050505061284c8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128aa576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b6128b88c8c8c8c8c8c613fd2565b909450925060006128ea7f00000000000000000000000000000000000000000000000000000000000000008e8e613462565b90506128f88d338388613522565b6129048c338387613522565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561295c57600080fd5b505af1158015612970573d6000803e3d6000fd5b505050506040513d602081101561298657600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129e6576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b612a148a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613fd2565b90945092506000612a667f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050612a748b338388613522565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612acf57600080fd5b505af1158015612ae3573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b6857600080fd5b505af1158015612b7c573d6000803e3d6000fd5b505050506040513d6020811015612b9257600080fd5b5051612b9a57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b505050506040513d6020811015612c1c57600080fd5b5051925034841015612c3457612c343385340361312e565b505096509650969350505050565b60608142811015612c88576040805162461bcd60e51b8152602060048201526018602482015260008051602061458e833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612cbf57fe5b905060200201356001600160a01b03166001600160a01b031614612d18576040805162461bcd60e51b815260206004820152601d60248201526000805160206144ab833981519152604482015290519081900360640190fd5b612d767f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91503482600081518110612d8657fe5b60200260200101511115612dcb5760405162461bcd60e51b81526004018080602001828103825260278152602001806144846027913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e0757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e3a57600080fd5b505af1158015612e4e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612eb37f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612ec057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b505050506040513d6020811015612f4157600080fd5b5051612f4957fe5b612f888287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b81600081518110612f9557fe5b6020026020010151341115611e6a57611e6a3383600081518110612fb557fe5b6020026020010151340361312e565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130415780518252601f199092019160209182019101613022565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130a3576040519150601f19603f3d011682016040523d82523d6000602084013e6130a8565b606091505b50915091508180156130d65750805115806130d657508080602001905160208110156130d357600080fd5b50515b613127576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061317a5780518252601f19909201916020918201910161315b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131dc576040519150601f19603f3d011682016040523d82523d6000602084013e6131e1565b606091505b50509050806132215760405162461bcd60e51b81526004018080602001828103825260238152602001806144f16023913960400191505060405180910390fd5b505050565b60008084116132665760405162461bcd60e51b815260040180806020018281038252602b815260200180614563602b913960400191505060405180910390fd5b6000831180156132765750600082115b6132b15760405162461bcd60e51b81526004018080602001828103825260288152602001806144376028913960400191505060405180910390fd5b60006132c5856126fe63ffffffff61424616565b905060006132d9828563ffffffff61424616565b905060006132ff836132f38861271063ffffffff61424616565b9063ffffffff6142a916565b905080828161330a57fe5b04979650505050505050565b606060028251101561336f576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561338757600080fd5b506040519080825280602002602001820160405280156133b1578160200160208202803683370190505b50905082816000815181106133c257fe5b60200260200101818152505060005b600183510381101561345a57600080613414878685815181106133f057fe5b602002602001015187866001018151811061340757fe5b60200260200101516142f8565b9150915061343684848151811061342757fe5b60200260200101518383613226565b84846001018151811061344557fe5b602090810291909101015250506001016133d1565b509392505050565b60008060006134718585613ef4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f6a733b8ac43b9d683a3035801788767d1b63c7998154ab1d6379b011dc98a9b8609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135a75780518252601f199092019160209182019101613588565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613609576040519150601f19603f3d011682016040523d82523d6000602084013e61360e565b606091505b509150915081801561363c57508051158061363c575080806020019051602081101561363957600080fd5b50515b6136775760405162461bcd60e51b815260040180806020018281038252602481526020018061453f6024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138bf5760008084838151811061369d57fe5b60200260200101518584600101815181106136b457fe5b60200260200101519150915060006136cc8383613ef4565b50905060008785600101815181106136e057fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461370e57826000613712565b6000835b91509150600060028a51038810613729578861376a565b61376a7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061375d57fe5b6020026020010151613462565b90506137977f00000000000000000000000000000000000000000000000000000000000000008888613462565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137d4576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561384557818101518382015260200161382d565b50505050905090810190601f1680156138725780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561389457600080fd5b505af11580156138a8573d6000803e3d6000fd5b505060019099019850613682975050505050505050565b50505050565b606060028251101561391e576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561393657600080fd5b50604051908082528060200260200182016040528015613960578160200160208202803683370190505b509050828160018351038151811061397457fe5b60209081029190910101528151600019015b801561345a576000806139b6878660018603815181106139a257fe5b602002602001015187868151811061340757fe5b915091506139d88484815181106139c957fe5b60200260200101518383613d58565b8460018503815181106139e757fe5b6020908102919091010152505060001901613986565b60005b600183510381101561322157600080848381518110613a1b57fe5b6020026020010151858460010181518110613a3257fe5b6020026020010151915091506000613a4a8383613ef4565b5090506000613a7a7f00000000000000000000000000000000000000000000000000000000000000008585613462565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613abb57600080fd5b505afa158015613acf573d6000803e3d6000fd5b505050506040513d6060811015613ae557600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613b1b578284613b1e565b83835b91509150613b7c828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613b89868383613226565b945050505050600080856001600160a01b0316886001600160a01b031614613bb357826000613bb7565b6000835b91509150600060028c51038a10613bce578a613c02565b613c027f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061375d57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c8c578181015183820152602001613c74565b50505050905090810190601f168015613cb95780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613cdb57600080fd5b505af1158015613cef573d6000803e3d6000fd5b50506001909b019a50613a009950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d985760405162461bcd60e51b815260040180806020018281038252602c8152602001806143c0602c913960400191505060405180910390fd5b600083118015613da85750600082115b613de35760405162461bcd60e51b81526004018080602001828103825260288152602001806144376028913960400191505060405180910390fd5b6000613e07612710613dfb868863ffffffff61424616565b9063ffffffff61424616565b90506000613e216126fe613dfb868963ffffffff613d0816565b9050613e3e6001828481613e3157fe5b049063ffffffff6142a916565b9695505050505050565b6000808411613e885760405162461bcd60e51b815260040180806020018281038252602581526020018061445f6025913960400191505060405180910390fd5b600083118015613e985750600082115b613ed35760405162461bcd60e51b81526004018080602001828103825260288152602001806144376028913960400191505060405180910390fd5b82613ee4858463ffffffff61424616565b81613eeb57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f485760405162461bcd60e51b81526004018080602001828103825260258152602001806143ec6025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613f68578284613f6b565b83835b90925090506001600160a01b038216613fcb576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561404c57600080fd5b505afa158015614060573d6000803e3d6000fd5b505050506040513d602081101561407657600080fd5b50516001600160a01b0316141561412957604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156140fc57600080fd5b505af1158015614110573d6000803e3d6000fd5b505050506040513d602081101561412657600080fd5b50505b6000806141577f00000000000000000000000000000000000000000000000000000000000000008b8b6142f8565b91509150816000148015614169575080155b1561417957879350869250614239565b6000614186898484613e48565b90508781116141d957858110156141ce5760405162461bcd60e51b81526004018080602001828103825260268152602001806144116026913960400191505060405180910390fd5b889450925082614237565b60006141e6898486613e48565b9050898111156141f257fe5b878110156142315760405162461bcd60e51b81526004018080602001828103825260268152602001806144cb6026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806142615750508082028282828161425e57fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006143078585613ef4565b509050600080614318888888613462565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561435057600080fd5b505afa158015614364573d6000803e3d6000fd5b505050506040513d606081101561437a57600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143ad5780826143b0565b81815b9099909850965050505050505056fe556e697377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056324c6962726172793a204944454e544943414c5f414444524553534553556e69737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e54556e697377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459556e697377617056324c6962726172793a20494e53554646494349454e545f414d4f554e54556e69737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54556e69737761705632526f757465723a20494e56414c49445f50415448000000556e69737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544556e69737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544556e697377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54556e69737761705632526f757465723a20455850495245440000000000000000a26469706673582212209d2ef66e25e736122c887e6e629503b5eec70ef0b6570af63e4d08f8a731ca8964736f6c63430006060033000000000000000000000000624ccf581371f8a4493e6abde46412002555a1b60000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270

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

000000000000000000000000624ccf581371f8a4493e6abde46412002555a1b60000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270

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

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


Deployed ByteCode Sourcemap

16317:18548:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16798:10;-1:-1:-1;;;;;16812:4:0;16798:18;;16791:26;;;;16317:18548;;12:1:-1;9;2:12;20948:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20948:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20948:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33809:262;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33809:262:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33809:262:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;28117:850;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28117:850:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28117:850:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28117:850:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28117:850:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28117:850:0;;-1:-1:-1;28117:850:0;-1:-1:-1;;;;;;28117:850:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;28117:850:0;;;;;;;;;;;;;;;;;34609:253;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34609:253:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34609:253:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34609:253:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34609:253:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34609:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34609:253:0;;-1:-1:-1;34609:253:0;;-1:-1:-1;;;;;34609:253:0:i;21627:677::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21627:677:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21627:677:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25334:628::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25334:628:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25334:628:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25334:628:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25334:628:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25334:628:0;;-1:-1:-1;25334:628:0;-1:-1:-1;;;;;;25334:628:0;;;;;;;;:::i;27283:828::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27283:828:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27283:828:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27283:828:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27283:828:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27283:828:0;;-1:-1:-1;27283:828:0;-1:-1:-1;;;;;;27283:828:0;;;;;;;;:::i;23764:718::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23764:718:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23764:718:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31150:714::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31150:714:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31150:714:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31150:714:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31150:714:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31150:714:0;;-1:-1:-1;31150:714:0;-1:-1:-1;;;;;;31150:714:0;;;;;;;;:::i;32726:843::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32726:843:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32726:843:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;32726:843:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32726:843:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32726:843:0;;-1:-1:-1;32726:843:0;-1:-1:-1;;;;;;32726:843:0;;;;;;;;:::i;26580:697::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26580:697:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26580:697:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26580:697:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26580:697:0;;-1:-1:-1;26580:697:0;-1:-1:-1;;;;;;26580:697:0;;;;;;;;:::i;34079:261::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34079:261:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34079:261:0;;;;;;;;;;;;:::i;25968:606::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25968:606:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25968:606:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25968:606:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25968:606:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25968:606:0;;-1:-1:-1;25968:606:0;-1:-1:-1;;;;;;25968:606:0;;;;;;;;:::i;16452:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16452:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;16452:38:0;;;;;;;;;;;;;;33613:188;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33613:188:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33613:188:0;;;;;;;;;;;;:::i;23058:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23058:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23058:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31870:850::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31870:850:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31870:850:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31870:850:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31870:850:0;;-1:-1:-1;31870:850:0;-1:-1:-1;;;;;;31870:850:0;;;;;;;;:::i;20077:865::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20077:865:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20077:865:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16404:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16404:41:0;;;:::i;34348:253::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34348:253:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34348:253:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34348:253:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34348:253:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34348:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34348:253:0;;-1:-1:-1;34348:253:0;;-1:-1:-1;;;;;34348:253:0:i;22310:669::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22310:669:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22310:669:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18316:738::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18316:738:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18316:738:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;19060:974;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19060:974:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28973:810::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28973:810:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28973:810:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28973:810:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28973:810:0;;-1:-1:-1;28973:810:0;-1:-1:-1;;;;;;28973:810:0;;;;;;;;:::i;20948:673::-;21185:16;21203:14;21166:8;16561:15;16549:8;:27;;16541:64;;;;;-1:-1:-1;;;16541:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16541:64:0;;;;;;;;;;;;;;;21257:196:::1;21287:5;21307:4;21326:9;21350:14;21379:12;21414:4;21434:8;21257:15;:196::i;:::-;21230:223:::0;;-1:-1:-1;21230:223:0;-1:-1:-1;21464:51:0::1;21492:5:::0;21499:2;21230:223;21464:27:::1;:51::i;:::-;21532:4;-1:-1:-1::0;;;;;21526:20:0::1;;21547:9;21526:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21526:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21526:31:0;;;;21568:45;21599:2;21603:9;21568:30;:45::i;:::-;20948:673:::0;;;;;;;;;;:::o;33809:262::-;33962:14;34001:62;34031:8;34041:9;34052:10;34001:29;:62::i;:::-;33994:69;33809:262;-1:-1:-1;;;;33809:262:0:o;28117:850::-;28331:21;28303:8;16561:15;16549:8;:27;;16541:64;;;;;-1:-1:-1;;;16541:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16541:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28403:4:0::1;28378:29;:4:::0;;-1:-1:-1;;28383:15:0;;28378:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28378:21:0::1;-1:-1:-1::0;;;;;28378:29:0::1;;28370:71;;;::::0;;-1:-1:-1;;;28370:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28370:71:0;;;;;;;;;;;;;::::1;;28462:55;28493:7;28502:8;28512:4;;28462:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28462:30:0::1;::::0;-1:-1:-1;;;28462:55:0:i:1;:::-;28452:65;;28567:12;28536:7;28561:1;28544:7;:14;:18;28536:27;;;;;;;;;;;;;;:43;;28528:99;;;;-1:-1:-1::0;;;28528:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28638:141;28684:4;;28689:1;28684:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28684:7:0::1;28693:10;28705:51;28730:7;28739:4;;28744:1;28739:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28739:7:0::1;28748:4;;28753:1;28748:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28748:7:0::1;28705:24;:51::i;:::-;28758:7;28766:1;28758:10;;;;;;;;;;;;;;28638:31;:141::i;:::-;28790:35;28796:7;28805:4;;28790:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28819:4:0::1;::::0;-1:-1:-1;28790:5:0::1;::::0;-1:-1:-1;;28790:35:0:i:1;:::-;28842:4;-1:-1:-1::0;;;;;28836:20:0::1;;28857:7;28882:1;28865:7;:14;:18;28857:27;;;;;;;;;;;;;;28836:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28836:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28836:49:0;;;;28896:63;28927:2;28931:7;28956:1;28939:7;:14;:18;28931:27;;;;;;;;;;;;;;28896:30;:63::i;:::-;28117:850:::0;;;;;;;;;:::o;34609:253::-;34753:21;34799:55;34829:7;34838:9;34849:4;34799:29;:55::i;:::-;34792:62;;34609:253;;;;;:::o;21627:677::-;21933:12;21947;21972;21987:49;22012:7;22021:6;22029;21987:24;:49::i;:::-;21972:64;;22047:10;22060;:33;;22084:9;22060:33;;;-1:-1:-1;;22060:33:0;22104:80;;;-1:-1:-1;;;22104:80:0;;22132:10;22104:80;;;;22152:4;22104:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22047:46;;-1:-1:-1;;;;;;22104:27:0;;;;;:80;;;;;-1:-1:-1;;22104:80:0;;;;;;;;-1:-1:-1;22104:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;22104:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22104:80:0;;;;22216;22232:6;22240;22248:9;22259:10;22271;22283:2;22287:8;22216:15;:80::i;:::-;22195:101;;;;;;;;21627:677;;;;;;;;;;;;;;;;:::o;25334:628::-;25558:21;25539:8;16561:15;16549:8;:27;;16541:64;;;;;-1:-1:-1;;;16541:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16541:64:0;;;;;;;;;;;;;;;25602:55:::1;25633:7;25642:8;25652:4;;25602:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25602:30:0::1;::::0;-1:-1:-1;;;25602:55:0:i:1;:::-;25592:65;;25707:12;25676:7;25701:1;25684:7;:14;:18;25676:27;;;;;;;;;;;;;;:43;;25668:99;;;;-1:-1:-1::0;;;25668:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25778:141;25824:4;;25829:1;25824:7;;;;;;25778:141;25930:24;25936:7;25945:4;;25930:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25951:2:0;;-1:-1:-1;25930:5:0::1;::::0;-1:-1:-1;;25930:24:0:i:1;27283:828::-:0;27497:21;27469:8;16561:15;16549:8;:27;;16541:64;;;;;-1:-1:-1;;;16541:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16541:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27569:4:0::1;27544:29;:4:::0;;-1:-1:-1;;27549:15:0;;27544:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27544:21:0::1;-1:-1:-1::0;;;;;27544:29:0::1;;27536:71;;;::::0;;-1:-1:-1;;;27536:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27536:71:0;;;;;;;;;;;;;::::1;;27628:55;27658:7;27667:9;27678:4;;27628:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27628:29:0::1;::::0;-1:-1:-1;;;27628:55:0:i:1;:::-;27618:65;;27716:11;27702:7;27710:1;27702:10;;;;;;;;;;;;;;:25;;27694:77;;;;-1:-1:-1::0;;;27694:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23764:718:::0;24082:14;24109:12;24124:46;24149:7;24158:5;24165:4;24124:24;:46::i;:::-;24109:61;;24181:10;24194;:33;;24218:9;24194:33;;;-1:-1:-1;;24194:33:0;24238:80;;;-1:-1:-1;;;24238:80:0;;24266:10;24238:80;;;;24286:4;24238:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24181:46;;-1:-1:-1;;;;;;24238:27:0;;;;;:80;;;;;-1:-1:-1;;24238:80:0;;;;;;;;-1:-1:-1;24238:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;24238:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24238:80:0;;;;24341:133;24403:5;24410:9;24421:14;24437:12;24451:2;24455:8;24341:47;:133::i;:::-;24329:145;23764:718;-1:-1:-1;;;;;;;;;;;;;23764:718:0:o;31150:714::-;31384:8;16561:15;16549:8;:27;;16541:64;;;;;-1:-1:-1;;;16541:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16541:64:0;;;;;;;;;;;;;;;31405:139:::1;31451:4;;31456:1;31451:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31451:7:0::1;31460:10;31472:51;31497:7;31506:4;;31511:1;31506:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31506:7:0::1;31515:4;;31520:1;31515:7;;;;;;31472:51;31525:8;31405:31;:139::i;:::-;31555:18;31583:4:::0;;-1:-1:-1;;31588:15:0;;31583:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31583:21:0::1;-1:-1:-1::0;;;;;31576:39:0::1;;31616:2;31576:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31576:43:0::1;-1:-1:-1::0;;;;;31576:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31576:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31576:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31576:43:0;31630:44:::1;::::0;;31576:43:::1;31630:44:::0;;::::1;::::0;;;;;;;;;;;31576:43;;-1:-1:-1;31630:44:0::1;::::0;;;31665:4;;;;;;31630:44;::::1;::::0;31665:4;;31630:44;31665:4;31630:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31671:2:0;;-1:-1:-1;31630:34:0::1;::::0;-1:-1:-1;;31630:44:0:i:1;:::-;31773:12:::0;31707:62:::1;31755:13:::0;31714:4;;-1:-1:-1;;31719:15:0;;31714:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31714:21:0::1;-1:-1:-1::0;;;;;31707:39:0::1;;31747:2;31707:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31707:43:0::1;-1:-1:-1::0;;;;;31707:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31707:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31707:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31707:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;31685:171;;;;-1:-1:-1::0;;;31685:171:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16616:1;31150:714:::0;;;;;;;:::o;32726:843::-;32993:8;16561:15;16549:8;:27;;16541:64;;;;;-1:-1:-1;;;16541:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16541:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33052:4:0::1;33027:29;:4:::0;;-1:-1:-1;;33032:15:0;;33027:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33027:21:0::1;-1:-1:-1::0;;;;;33027:29:0::1;;33019:71;;;::::0;;-1:-1:-1;;;33019:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33019:71:0;;;;;;;;;;;;;::::1;;33101:139;33147:4;;33152:1;33147:7;;;;;;33101:139;33251:55;33286:4;;33251:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33300:4:0::1;::::0;-1:-1:-1;33251:34:0::1;::::0;-1:-1:-1;;33251:55:0:i:1;:::-;33334:37;::::0;;-1:-1:-1;;;33334:37:0;;33365:4:::1;33334:37;::::0;::::1;::::0;;;33317:14:::1;::::0;-1:-1:-1;;;;;33341:4:0::1;33334:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;33334:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33334:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33334:37:0;;-1:-1:-1;33390:25:0;;::::1;;33382:81;;;;-1:-1:-1::0;;;33382:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33480:4;-1:-1:-1::0;;;;;33474:20:0::1;;33495:9;33474:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33474:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33474:31:0;;;;33516:45;33547:2;33551:9;33516:30;:45::i;26580:697::-:0;26796:21;26768:8;16561:15;16549:8;:27;;16541:64;;;;;-1:-1:-1;;;16541:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16541:64:0;;;;;;;;;;;;;;;26854:4:::1;-1:-1:-1::0;;;;;26843:15:0::1;:4;;26848:1;26843:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26843:7:0::1;-1:-1:-1::0;;;;;26843:15:0::1;;26835:57;;;::::0;;-1:-1:-1;;;26835:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26835:57:0;;;;;;;;;;;;;::::1;;26913:56;26944:7;26953:9;26964:4;;26913:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26913:30:0::1;::::0;-1:-1:-1;;;26913:56:0:i:1;:::-;26903:66;;27019:12;26988:7;27013:1;26996:7;:14;:18;26988:27;;;;;;;;;;;;;;:43;;26980:99;;;;-1:-1:-1::0;;;26980:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27096:4;-1:-1:-1::0;;;;;27090:19:0::1;;27117:7;27125:1;27117:10;;;;;;;;;;;;;;27090:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27090:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27090:40:0;;;;;27154:4;-1:-1:-1::0;;;;;27148:20:0::1;;27169:51;27194:7;27203:4;;27208:1;27203:7;;;;;;27169:51;27222:7;27230:1;27222:10;;;;;;;;;;;;;;27148:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;27148:85:0::1;-1:-1:-1::0;;;;;27148:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27148:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27148:85:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27148:85:0;27141:93:::1;;;;27245:24;27251:7;27260:4;;27245:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27266:2:0;;-1:-1:-1;27245:5:0::1;::::0;-1:-1:-1;;27245:24:0:i:1;:::-;26580:697:::0;;;;;;;;:::o;34079:261::-;34232:13;34270:62;34299:9;34310;34321:10;34270:28;:62::i;25968:606::-;26192:21;26173:8;16561:15;16549:8;:27;;16541:64;;;;;-1:-1:-1;;;16541:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16541:64:0;;;;;;;;;;;;;;;26236:55:::1;26266:7;26275:9;26286:4;;26236:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26236:29:0::1;::::0;-1:-1:-1;;;26236:55:0:i:1;:::-;26226:65;;26324:11;26310:7;26318:1;26310:10;;;;;;;;;;;;;;:25;;26302:77;;;;-1:-1:-1::0;;;26302:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16452:38:::0;;;:::o;33613:188::-;33710:12;33742:51;33765:7;33774:8;33784;33742:22;:51::i;23058:700::-;23324:14;23305:8;16561:15;16549:8;:27;;16541:64;;;;;-1:-1:-1;;;16541:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16541:64:0;;;;;;;;;;;;;;;23367:196:::1;23397:5;23417:4;23436:9;23460:14;23489:12;23524:4;23544:8;23367:15;:196::i;:::-;23613:38;::::0;;-1:-1:-1;;;23613:38:0;;23645:4:::1;23613:38;::::0;::::1;::::0;;;23351:212;;-1:-1:-1;23574:78:0::1;::::0;-1:-1:-1;23602:5:0;;23609:2;;-1:-1:-1;;;;;23613: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;23613:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23613:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23613:38:0;23574:27:::1;:78::i;:::-;23669:4;-1:-1:-1::0;;;;;23663:20:0::1;;23684:9;23663:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23663:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23663:31:0;;;;23705:45;23736:2;23740:9;23705:30;:45::i;31870:850::-:0;32130:8;16561:15;16549:8;:27;;16541:64;;;;;-1:-1:-1;;;16541:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16541:64:0;;;;;;;;;;;;;;;32175:4:::1;-1:-1:-1::0;;;;;32164:15:0::1;:4;;32169:1;32164:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32164:7:0::1;-1:-1:-1::0;;;;;32164:15:0::1;;32156:57;;;::::0;;-1:-1:-1;;;32156:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32156:57:0;;;;;;;;;;;;;::::1;;32224:13;32240:9;32224:25;;32266:4;-1:-1:-1::0;;;;;32260:19:0::1;;32287:8;32260:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32260:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32260:38:0;;;;;32322:4;-1:-1:-1::0;;;;;32316:20:0::1;;32337:51;32362:7;32371:4;;32376:1;32371:7;;;;;;32337:51;32390:8;32316:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;32316:83:0::1;-1:-1:-1::0;;;;;32316:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32316:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32316:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32316:83:0;32309:91:::1;;;;32411:18;32439:4:::0;;-1:-1:-1;;32444:15:0;;32439:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32439:21:0::1;-1:-1:-1::0;;;;;32432:39:0::1;;32472:2;32432:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32432:43:0::1;-1:-1:-1::0;;;;;32432:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32432:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32432:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32432:43:0;32486:44:::1;::::0;;32432:43:::1;32486:44:::0;;::::1;::::0;;;;;;;;;;;32432:43;;-1:-1:-1;32486:44:0::1;::::0;;;32521:4;;;;;;32486:44;::::1;::::0;32521:4;;32486:44;32521:4;32486:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32527:2:0;;-1:-1:-1;32486:34:0::1;::::0;-1:-1:-1;;32486:44:0:i:1;:::-;32629:12:::0;32563:62:::1;32611:13:::0;32570:4;;-1:-1:-1;;32575:15:0;;32570:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32570:21:0::1;-1:-1:-1::0;;;;;32563:39:0::1;;32603:2;32563:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32563:43:0::1;-1:-1:-1::0;;;;;32563:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;20077:865:0::0;20331:12;20345;20312:8;16561:15;16549:8;:27;;16541:64;;;;;-1:-1:-1;;;16541:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16541:64:0;;;;;;;;;;;;;;;20370:12:::1;20385:49;20410:7;20419:6;20427;20385:24;:49::i;:::-;20445:62;::::0;;-1:-1:-1;;;20445:62:0;;20479:10:::1;20445:62;::::0;::::1;::::0;-1:-1:-1;;;;;20445:33:0;::::1;:62:::0;;;;;;;;;;;;;;20370:64;;-1:-1:-1;20445:33:0;;::::1;::::0;:62;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20445:33:0;:62;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20445:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20445:62:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;20575:29:0::1;::::0;;-1:-1:-1;;;20575:29:0;;-1:-1:-1;;;;;20575:29:0;;::::1;;::::0;::::1;::::0;;;20545:12:::1;::::0;;;20575:25;;::::1;::::0;::::1;::::0;:29;;;;;;;;;;;20545:12;20575:25;:29;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20575:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20575:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20575:29:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20575:29:0;-1:-1:-1;20616:14:0::1;20635:43;20663:6:::0;20671;20635:27:::1;:43::i;:::-;20615:63;;;20720:6;-1:-1:-1::0;;;;;20710:16:0::1;:6;-1:-1:-1::0;;;;;20710:16:0::1;;:58;;20751:7;20760;20710:58;;;20730:7;20739;20710:58;20689:79:::0;;-1:-1:-1;20689:79:0;-1:-1:-1;20787:21:0;;::::1;;20779:72;;;;-1:-1:-1::0;;;20779:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20881:10;20870:7;:21;;20862:72;;;;-1:-1:-1::0;;;20862:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16616:1;;;;20077:865:::0;;;;;;;;;;;:::o;16404:41::-;;;:::o;34348:253::-;34492:21;34538:55;34569:7;34578:8;34588:4;34538:30;:55::i;22310:669::-;22599:16;22617:14;22644:12;22659:46;22684:7;22693:5;22700:4;22659:24;:46::i;:::-;22644:61;;22716:10;22729;:33;;22753:9;22729:33;;;-1:-1:-1;;22729:33:0;22773:80;;;-1:-1:-1;;;22773:80:0;;22801:10;22773:80;;;;22821:4;22773:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22716:46;;-1:-1:-1;;;;;;22773:27:0;;;;;:80;;;;;-1:-1:-1;;22773:80:0;;;;;;;;-1:-1:-1;22773:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;22773:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22773:80:0;;;;22891;22910:5;22917:9;22928:14;22944:12;22958:2;22962:8;22891:18;:80::i;:::-;22864:107;;;;-1:-1:-1;22310:669:0;-1:-1:-1;;;;;;;;;;;;;22310:669:0:o;18316:738::-;18604:12;18618;18632:14;18585:8;16561:15;16549:8;:27;;16541:64;;;;;-1:-1:-1;;;16541:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16541:64:0;;;;;;;;;;;;;;;18680:85:::1;18694:6;18702;18710:14;18726;18742:10;18754;18680:13;:85::i;:::-;18659:106:::0;;-1:-1:-1;18659:106:0;-1:-1:-1;18776:12:0::1;18791:49;18816:7;18825:6:::0;18833;18791:24:::1;:49::i;:::-;18776:64;;18851:66;18883:6;18891:10;18903:4;18909:7;18851:31;:66::i;:::-;18928;18960:6;18968:10;18980:4;18986:7;18928:31;:66::i;:::-;19032:4;-1:-1:-1::0;;;;;19017:25:0::1;;19043:2;19017:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;19017:29:0::1;-1:-1:-1::0;;;;;19017:29:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19017:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19017:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19017:29:0;18316:738;;;;-1:-1:-1;19017:29:0;;-1:-1:-1;18316:738:0;;-1:-1:-1;;;;;;;;;18316:738:0:o;19060:974::-;19313:16;19331:14;19347;19294:8;16561:15;16549:8;:27;;16541:64;;;;;-1:-1:-1;;;16541:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16541:64:0;;;;;;;;;;;;;;;19401:176:::1;19429:5;19449:4;19468:18;19501:9;19525:14;19554:12;19401:13;:176::i;:::-;19374:203:::0;;-1:-1:-1;19374:203:0;-1:-1:-1;19588:12:0::1;19603:46;19628:7;19637:5:::0;19644:4:::1;19603:24;:46::i;:::-;19588:61;;19660:69;19692:5;19699:10;19711:4;19717:11;19660:31;:69::i;:::-;19746:4;-1:-1:-1::0;;;;;19740:19:0::1;;19767:9;19740:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19740:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19740:39:0;;;;;19803:4;-1:-1:-1::0;;;;;19797:20:0::1;;19818:4;19824:9;19797:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;19797:37:0::1;-1:-1:-1::0;;;;;19797:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19797:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19797:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19797:37:0;19790:45:::1;;;;19873:4;-1:-1:-1::0;;;;;19858:25:0::1;;19884:2;19858:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;19858:29:0::1;-1:-1:-1::0;;;;;19858:29:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19858:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19858:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19858:29:0;;-1:-1:-1;19938:9:0::1;:21:::0;-1:-1:-1;19934:92:0::1;;;19961:65;19992:10;20016:9;20004;:21;19961:30;:65::i;:::-;16616:1;19060:974:::0;;;;;;;;;;;:::o;28973:810::-;29186:21;29158:8;16561:15;16549:8;:27;;16541:64;;;;;-1:-1:-1;;;16541:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16541:64:0;;;;;;;;;;;;;;;29244:4:::1;-1:-1:-1::0;;;;;29233:15:0::1;:4;;29238:1;29233:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29233:7:0::1;-1:-1:-1::0;;;;;29233:15:0::1;;29225:57;;;::::0;;-1:-1:-1;;;29225:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;29225:57:0;;;;;;;;;;;;;::::1;;29303:55;29333:7;29342:9;29353:4;;29303:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29303:29:0::1;::::0;-1:-1:-1;;;29303:55:0:i:1;:::-;29293:65;;29391:9;29377:7;29385:1;29377:10;;;;;;;;;;;;;;:23;;29369:75;;;;-1:-1:-1::0;;;29369:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29461:4;-1:-1:-1::0;;;;;29455:19:0::1;;29482:7;29490:1;29482:10;;;;;;;;;;;;;;29455:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29455:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29455:40:0;;;;;29519:4;-1:-1:-1::0;;;;;29513:20:0::1;;29534:51;29559:7;29568:4;;29573:1;29568:7;;;;;;29534:51;29587:7;29595:1;29587:10;;;;;;;;;;;;;;29513:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;29513:85:0::1;-1:-1:-1::0;;;;;29513:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29513:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29513:85:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29513:85:0;29506:93:::1;;;;29610:24;29616:7;29625:4;;29610:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29631:2:0;;-1:-1:-1;29610:5:0::1;::::0;-1:-1:-1;;29610:24:0:i:1;:::-;29697:7;29705:1;29697:10;;;;;;;;;;;;;;29685:9;:22;29681:94;;;29709:66;29740:10;29764:7;29772:1;29764:10;;;;;;;;;;;;;;29752:9;:22;29709:30;:66::i;1426:361::-:0;1621:45;;;-1:-1:-1;;;;;1621:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1621:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1610:57:0;;;;1575:12;;1589:17;;1610:10;;;;1621:45;1610:57;;;25:18:-1;1610:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1610:57:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1574:93:0;;;;1686:7;:57;;;;-1:-1:-1;1698:11:0;;:16;;:44;;;1729:4;1718:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1718:24:0;1698:44;1678:101;;;;;-1:-1:-1;;;1678:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1426:361;;;;;:::o;2205:195::-;2313:12;;;2275;2313;;;;;;;;;-1:-1:-1;;;;;2292:7:0;;;2306:5;;2292:34;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2292:34:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;2274:52:0;;;2345:7;2337:55;;;;-1:-1:-1;;;2337:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2205:195;;;:::o;12785:519::-;12878:14;12924:1;12913:8;:12;12905:68;;;;-1:-1:-1;;;12905:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13004:1;12992:9;:13;:31;;;;;13022:1;13009:10;:14;12992:31;12984:84;;;;-1:-1:-1;;;12984:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13079:20;13102:18;:8;13115:4;13102:18;:12;:18;:::i;:::-;13079:41;-1:-1:-1;13131:14:0;13148:31;13079:41;13168:10;13148:31;:19;:31;:::i;:::-;13131:48;-1:-1:-1;13190:16:0;13209:41;13234:15;13209:20;:9;13223:5;13209:20;:13;:20;:::i;:::-;:24;:41;:24;:41;:::i;:::-;13190:60;;13285:11;13273:9;:23;;;;;;;12785:519;-1:-1:-1;;;;;;;12785:519:0:o;13981:511::-;14082:21;14139:1;14124:4;:11;:16;;14116:59;;;;;-1:-1:-1;;;14116:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14207:4;:11;14196:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14196:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14196:23:0;;14186:33;;14243:8;14230:7;14238:1;14230:10;;;;;;;;;;;;;:21;;;;;14267:6;14262:223;14293:1;14279:4;:11;:15;14275:1;:19;14262:223;;;14317:14;14333:15;14352:42;14364:7;14373:4;14378:1;14373:7;;;;;;;;;;;;;;14382:4;14387:1;14391;14387:5;14382:11;;;;;;;;;;;;;;14352;:42::i;:::-;14316:78;;;;14426:47;14439:7;14447:1;14439:10;;;;;;;;;;;;;;14451:9;14462:10;14426:12;:47::i;:::-;14409:7;14417:1;14421;14417:5;14409:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;14296:3:0;;14262:223;;;;13981:511;;;;;:::o;11302:478::-;11391:12;11417:14;11433;11451:26;11462:6;11470;11451:10;:26::i;:::-;11615:32;;;-1:-1:-1;;11615:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;11615:32:0;;;;;11605:43;;;;;;-1:-1:-1;;;;;;11518:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11518:251:0;;;;;;;11508:262;;;;;;;;;11302:478;-1:-1:-1;;;;;11302:478:0:o;1795:402::-;2020:51;;;-1:-1:-1;;;;;2020:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2020:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;2009:63:0;;;;1974:12;;1988:17;;2009:10;;;;2020:51;2009:63;;;25:18:-1;2009:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2009:63:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1973:99:0;;;;2091:7;:57;;;;-1:-1:-1;2103:11:0;;:16;;:44;;;2134:4;2123:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2123:24:0;2103:44;2083:106;;;;-1:-1:-1;;;2083:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1795:402;;;;;;:::o;24593:735::-;24700:6;24695:626;24726:1;24712:4;:11;:15;24708:1;:19;24695:626;;;24750:13;24765:14;24784:4;24789:1;24784:7;;;;;;;;;;;;;;24793:4;24798:1;24802;24798:5;24793:11;;;;;;;;;;;;;;24749:56;;;;24821:14;24840:42;24868:5;24875:6;24840:27;:42::i;:::-;24820:62;;;24897:14;24914:7;24922:1;24926;24922:5;24914:14;;;;;;;;;;;;;;24897:31;;24944:15;24961;24989:6;-1:-1:-1;;;;;24980:15:0;:5;-1:-1:-1;;;;;24980:15:0;;:61;;25022:9;25038:1;24980:61;;;25004:1;25008:9;24980:61;24943:98;;;;25056:10;25087:1;25073:4;:11;:15;25069:1;:19;:82;;25148:3;25069:82;;;25091:54;25116:7;25125:6;25133:4;25138:1;25142;25138:5;25133:11;;;;;;;;;;;;;;25091:24;:54::i;:::-;25056:95;;25181:48;25206:7;25215:5;25222:6;25181:24;:48::i;:::-;-1:-1:-1;;;;;25166:69:0;;25254:10;25266;25278:2;25292:1;25282:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;25282:12:0;87:42:-1;143:17;;-1:-1;25282:12:0;;25166:143;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25166:143:0;-1:-1:-1;;;;;25166:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;25166:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25166:143:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24729:3:0;;;;;-1:-1:-1;24695:626:0;;-1:-1:-1;;;;;;;;24695:626:0;;;24593:735;;;:::o;14573:532::-;14674:21;14731:1;14716:4;:11;:16;;14708:59;;;;;-1:-1:-1;;;14708:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14799:4;:11;14788:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14788:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14788:23:0;;14778:33;;14852:9;14822:7;14847:1;14830:7;:14;:18;14822:27;;;;;;;;;;;;;;;;;:39;14886:11;;-1:-1:-1;;14886:15:0;14872:226;14903:5;;14872:226;;14931:14;14947:15;14966:42;14978:7;14987:4;14996:1;14992;:5;14987:11;;;;;;;;;;;;;;15000:4;15005:1;15000:7;;;;;;;14966:42;14930:78;;;;15040:46;15052:7;15060:1;15052:10;;;;;;;;;;;;;;15064:9;15075:10;15040:11;:46::i;:::-;15023:7;15035:1;15031;:5;15023:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;14910:3:0;14872:226;;29930:1214;30043:6;30038:1099;30069:1;30055:4;:11;:15;30051:1;:19;30038:1099;;;30093:13;30108:14;30127:4;30132:1;30127:7;;;;;;;;;;;;;;30136:4;30141:1;30145;30141:5;30136:11;;;;;;;;;;;;;;30092:56;;;;30164:14;30183:42;30211:5;30218:6;30183:27;:42::i;:::-;30163:62;;;30240:19;30277:48;30302:7;30311:5;30318:6;30277:24;:48::i;:::-;30240:86;;30341:16;30372:17;30460:13;30475;30493:4;-1:-1:-1;;;;;30493:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30493:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30493:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30493:18:0;;;;;;;-1:-1:-1;;;;;30459:52:0;;;;-1:-1:-1;30459:52:0;;-1:-1:-1;30527:17:0;;-1:-1:-1;;;;;30568:15:0;;;;;;;:61;;30610:8;30620;30568:61;;;30587:8;30597;30568:61;30526:103;;;;30658:56;30701:12;30665:5;-1:-1:-1;;;;;30658:23:0;;30690:4;30658:38;;;;;;;;;;;;;-1:-1:-1;;;;;30658:38:0;-1:-1:-1;;;;;30658:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;30658:56:0;30644:70;;30744:71;30774:11;30787:12;30801:13;30744:29;:71::i;:::-;30729:86;;30038:1099;;;;30846:15;30863;30891:6;-1:-1:-1;;;;;30882:15:0;:5;-1:-1:-1;;;;;30882:15:0;;:67;;30927:12;30946:1;30882:67;;;30906:1;30910:12;30882:67;30845:104;;;;30964:10;30995:1;30981:4;:11;:15;30977:1;:19;:82;;31056:3;30977:82;;;30999:54;31024:7;31033:6;31041:4;31046:1;31050;31046:5;31041:11;;;;;;;30999:54;31112:12;;;31122:1;31112:12;;;;;;;;;;-1:-1:-1;;;31074:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;31074:51:0;;;;;;;;;;;;;;;;;;;;;;30964:95;;-1:-1:-1;31074:9:0;;;;;;31084:10;;31096;;30964:95;;31112:12;;31074:51;;;;;;;;31112:12;;31074:51;;;;31112: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;31074:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31074:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;30072:3:0;;;;;-1:-1:-1;30038:1099:0;;-1:-1:-1;;;;;;;;;;30038:1099:0;10325:129;10409:5;;;10404:16;;;;10396:50;;;;;-1:-1:-1;;;10396:50:0;;;;;;;;;;;;-1:-1:-1;;;10396:50:0;;;;;;;;;;;;;;13425:474;13518:13;13564:1;13552:9;:13;13544:70;;;;-1:-1:-1;;;13544:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13645:1;13633:9;:13;:31;;;;;13663:1;13650:10;:14;13633:31;13625:84;;;;-1:-1:-1;;;13625:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13720:14;13737:35;13766:5;13737:24;:9;13751;13737:24;:13;:24;:::i;:::-;:28;:35;:28;:35;:::i;:::-;13720:52;-1:-1:-1;13783:16:0;13802:35;13832:4;13802:25;:10;13817:9;13802:25;:14;:25;:::i;:35::-;13783:54;;13859:32;13889:1;13872:11;13860:9;:23;;;;;;;13859:32;:29;:32;:::i;:::-;13848:43;13425:474;-1:-1:-1;;;;;;13425:474:0:o;12342:321::-;12424:12;12467:1;12457:7;:11;12449:61;;;;-1:-1:-1;;;12449:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12540:1;12529:8;:12;:28;;;;;12556:1;12545:8;:12;12529:28;12521:81;;;;-1:-1:-1;;;12521:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12647:8;12623:21;:7;12635:8;12623:21;:11;:21;:::i;:::-;:32;;;;;;;12342:321;-1:-1:-1;;;;12342:321:0:o;10861:349::-;10936:14;10952;10997:6;-1:-1:-1;;;;;10987:16:0;:6;-1:-1:-1;;;;;10987:16:0;;;10979:66;;;;-1:-1:-1;;;10979:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11084:6;-1:-1:-1;;;;;11075:15:0;:6;-1:-1:-1;;;;;11075:15:0;;:53;;11113:6;11121;11075:53;;;11094:6;11102;11075:53;11056:72;;-1:-1:-1;11056:72:0;-1:-1:-1;;;;;;11147:20:0;;11139:63;;;;;-1:-1:-1;;;11139:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10861:349;;;;;:::o;16920:1390::-;17233:50;;;-1:-1:-1;;;17233:50:0;;-1:-1:-1;;;;;17233:50:0;;;;;;;;;;;;;;;;17138:12;;;;;;17251:7;17233:34;;;;;;:50;;;;;;;;;;;;;;;:34;:50;;;2:2:-1;;;;27:1;24;17:12;2:2;17233:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17233:50:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17233:50:0;-1:-1:-1;;;;;17233:64:0;;17229:150;;;17314:53;;;-1:-1:-1;;;17314:53:0;;-1:-1:-1;;;;;17314:53:0;;;;;;;;;;;;;;;;17332:7;17314:37;;;;;;:53;;;;;;;;;;;;;;;-1:-1:-1;17314:37:0;:53;;;2:2:-1;;;;27:1;24;17:12;2:2;17314:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17314:53:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;17229:150:0;17390:13;17405;17422:53;17451:7;17460:6;17468;17422:28;:53::i;:::-;17389:86;;;;17490:8;17502:1;17490:13;:30;;;;-1:-1:-1;17507:13:0;;17490:30;17486:817;;;17559:14;;-1:-1:-1;17575:14:0;;-1:-1:-1;17486:817:0;;;17623:19;17645:58;17668:14;17684:8;17694;17645:22;:58::i;:::-;17623:80;;17740:14;17722;:32;17718:574;;17801:10;17783:14;:28;;17775:79;;;;-1:-1:-1;;;17775:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17895:14;;-1:-1:-1;17911:14:0;-1:-1:-1;17911:14:0;17718:574;;;17967:19;17989:58;18012:14;18028:8;18038;17989:22;:58::i;:::-;17967:80;;18091:14;18073;:32;;18066:40;;;;18151:10;18133:14;:28;;18125:79;;;;-1:-1:-1;;;18125:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18245:14;-1:-1:-1;18261:14:0;;-1:-1:-1;17718:574:0;17486:817;;16920:1390;;;;;;;;;;;:::o;10462:142::-;10514:6;10541;;;:30;;-1:-1:-1;;10556:5:0;;;10570:1;10565;10556:5;10565:1;10551:15;;;;;:20;10541:30;10533:63;;;;;-1:-1:-1;;;10533:63:0;;;;;;;;;;;;-1:-1:-1;;;10533:63:0;;;;;;;;;;;;;;10189:128;10273:5;;;10268:16;;;;10260:49;;;;;-1:-1:-1;;;10260:49:0;;;;;;;;;;;;-1:-1:-1;;;10260:49:0;;;;;;;;;;;;;;11838:391;11931:13;11946;11973:14;11992:26;12003:6;12011;11992:10;:26::i;:::-;11972:46;;;12030:13;12045;12078:32;12086:7;12095:6;12103;12078:7;:32::i;:::-;-1:-1:-1;;;;;12063:60:0;;:62;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12063:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12063:62:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12063:62:0;;;;;;;-1:-1:-1;;;;;12029:96:0;;;;-1:-1:-1;12029:96:0;;-1:-1:-1;;;;;;12159:16:0;;;;;;;:62;;12202:8;12212;12159:62;;;12179:8;12189;12159:62;12136:85;;;;-1:-1:-1;11838:391:0;-1:-1:-1;;;;;;;11838:391:0:o

Swarm Source

ipfs://9d2ef66e25e736122c887e6e629503b5eec70ef0b6570af63e4d08f8a731ca89
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.