Contract 0xeB1c0EfE6655E019E2c6AB01e0Bd0c97f4899A4e

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xf175fff656b166ff51cc521b4c4624660bff46ad6c7c6bf04163c0c302f96eefSwap Exact Token...132517362021-12-06 19:27:3353 mins ago0x413cbbd67436796ad1ae8d6c72c7b9b8d45a3a03 IN  0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0 BNB0.001007
0x0def2da30da7cdd1a3466c491585ab94d195ebbc8639f0ad2b2faee0237f0320Swap ETH For Exa...132443362021-12-06 12:56:017 hrs 25 mins ago0x4f2d381273caf8774c52f3c0fbd47d63f2af8926 IN  0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0.029118523520007 BNB0.000588825
0x040c2b16db6ddbc8c6369d679191374241cfe2bf64a2892c8805e25de4667dd8Swap Exact Token...132249022021-12-05 20:23:4623 hrs 57 mins ago0x413cbbd67436796ad1ae8d6c72c7b9b8d45a3a03 IN  0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0 BNB0.000576405
0xafa8cdc5d81d6bb605576ee1fe051296ec09d1a3f1654a3f53c3fb37c78da64bSwap Exact Token...132244472021-12-05 20:01:001 day 20 mins ago0x164a1ed219261248b29c3bd8ee4c78bc156cab4b IN  0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0 BNB0.00052914
0x642a11eea2ba05dba140349e3e8554f4342b71de8573e4c9d9cafadf6ad50fc6Swap Exact Token...132186772021-12-05 14:57:461 day 5 hrs ago0x1c4f08dc64ae77bd4ac0642f735259f3d461dee0 IN  0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0 BNB0.00052902
0x13da0a64a2558f23392018e1c52807445785b4b724965fbfe05ea7779458c48aRemove Liquidity...132119652021-12-05 9:08:551 day 11 hrs ago0xfc3714de36dd61318ea693024de1fa836b565598 IN  0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0 BNB0.00114758
0xec9e97dd01e37f6adf845d5900c695650ee91871a0b204644a874ce0a79c951bAdd Liquidity ET...132098332021-12-05 7:21:251 day 12 hrs ago0x69cb3709a75d39389be967710ca354e40cd5de84 IN  0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0.013306294152946 BNB0.00090732
0x2b7ddf9c82c84fa1112512b1de9b061ecf3f6c9155cfe9e7d916bd2e10bad1a0Swap Exact Token...131887162021-12-04 13:40:432 days 6 hrs ago0x5d2f3e699622b3bef98f69e1e8a7bc629bbc4028 IN  0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0 BNB0.00060402
0x558f37442d62c41dacb64023580579e54431214923d3181f0d90b9769f1b56e8Swap Exact Token...131854672021-12-04 10:52:132 days 9 hrs ago0x1c4f08dc64ae77bd4ac0642f735259f3d461dee0 IN  0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0 BNB0.00052908
0x8f7a302a038369421c628fecd8e37cf1ddfbbe08a4ff6ca5b39fca7b11ecd3f2Swap Exact Token...131854182021-12-04 10:49:462 days 9 hrs ago0x1c4f08dc64ae77bd4ac0642f735259f3d461dee0 IN  0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0 BNB0.00060408
0xe48846d07a5d01c50e568732dd1d5e136dfb9d8cee20278de1b027fc8a566748Swap Exact Token...131827522021-12-04 8:34:522 days 11 hrs ago0x1725c561562899df4271d08a8f2c0c04881d9d1a IN  0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0 BNB0.00060408
0x9f23978e640ca61ac8ea06f9087ffcef4b75b64df9694e1beee16c23a6e35101Swap Exact Token...131821102021-12-04 8:02:452 days 12 hrs ago0x9295d080c14660ad927b80d908c56382cc506ec0 IN  0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0 BNB0.00093194
0xe9a68eaac08d2076710e833c45b94d57a36d583b12ced713f9cdc2e328a6168bAdd Liquidity ET...131818842021-12-04 7:51:272 days 12 hrs ago0x9295d080c14660ad927b80d908c56382cc506ec0 IN  0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0 BNB0.000762215
0x2f340b8d1e259247178ef80eff68da8127a971e8c28403847eb5fff5d6db250aRemove Liquidity131818642021-12-04 7:50:272 days 12 hrs ago0x9295d080c14660ad927b80d908c56382cc506ec0 IN  0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0 BNB0.001005805
0xa57691f0d2378288877b6b5b3126dea4473faeb68ca4fe02abd8300289c41c66Add Liquidity Fl...131628142021-12-03 15:46:373 days 4 hrs ago0x1402066a3392ff3ea724ae6ee64194c5d93090df IN  0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0 BNB0.00093531
0x6cf54ae865cddac800a06b4e521939ba0b391a08c94c0ac2d60c21ecf23fe953Swap Exact Token...131601952021-12-03 13:33:073 days 6 hrs ago0xe2ce1c0df2dcbb9e93e9c5f4ca497c08a7775604 IN  0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0 BNB0.00071939
0x30f27cc9ef7fc5615c901644ce5fc14670a8db1855a3c1b882e1d7ddd6fa2ebfAdd Liquidity Fl...131409112021-12-02 21:14:323 days 23 hrs ago0x1d197fd4e7975efd21add0ce3128c488bbd70b83 IN  0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0 BNB0.000751985
0x1b0cdda1a7d8c740f759aeaaf475467394f3e4503bfb8725b58800a19917eafbSwap Exact Token...131362262021-12-02 17:19:554 days 3 hrs ago0x96a2d776e193140862592d05588c479dda5f97f2 IN  0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0 BNB0.001253075
0xaa3a15f9a05b923cf70824ecdfe38cb61cad695203b2fd03b85f8575478b197aSwap Exact Token...131355122021-12-02 16:44:114 days 3 hrs ago0xe2ce1c0df2dcbb9e93e9c5f4ca497c08a7775604 IN  0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0 BNB0.00047493
0x9e8711928aaa530519c9be633086a564afd10dcadee8e917ef61fe3ca39f57feSwap Exact Token...131339972021-12-02 15:26:384 days 4 hrs ago0x9be1df9464694cd640266f648f27d6f46facfacd IN  0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0 BNB0.00060408
0x61500bcb7dfa2ae5ea8198db9dd0350ee8d1469c70dfa14ae9660886fe3ca2ecSwap Exact Token...131302782021-12-02 12:16:134 days 8 hrs ago0x4f2d381273caf8774c52f3c0fbd47d63f2af8926 IN  0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0 BNB0.000640925
0x85a62cd714ce9fe2b360d8ade52b4dc6db5873fafbe27fe8a239ca1c4e191934Swap Exact Token...131270002021-12-02 9:25:254 days 10 hrs ago0x601a849c70a9325f2aee8d66fdce58ac371845c4 IN  0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0 BNB0.0005292
0x286e43135dab2032e3ad697844d38ad1f775cef8aa321ffe7373b722feedf804Swap Exact Token...131269902021-12-02 9:24:554 days 10 hrs ago0x601a849c70a9325f2aee8d66fdce58ac371845c4 IN  0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0 BNB0.000146845
0xd0cc0588157ad228ba34b7b87fc5ae41fabbfcd3d9e2dc5cb4411cd06081b4ebAdd Liquidity Fl...131256582021-12-02 8:17:484 days 12 hrs ago0xabdfde4f2303e7d1f7a40f9f4d11cfa7820434ac IN  0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0 BNB0.00079987
0xd7e898d4b6d4b6a6160772d7d937ed8d139d68dbd4f0978feeb1cc6677c83c87Swap Exact Token...131256392021-12-02 8:16:514 days 12 hrs ago0xabdfde4f2303e7d1f7a40f9f4d11cfa7820434ac IN  0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0 BNB0.00058867
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xf175fff656b166ff51cc521b4c4624660bff46ad6c7c6bf04163c0c302f96eef132517362021-12-06 19:27:3353 mins ago 0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0x413cbbd67436796ad1ae8d6c72c7b9b8d45a3a032.451033278270769853 BNB
0xf175fff656b166ff51cc521b4c4624660bff46ad6c7c6bf04163c0c302f96eef132517362021-12-06 19:27:3353 mins ago Binance: WBNB Token 0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e2.451033278270769853 BNB
0x0def2da30da7cdd1a3466c491585ab94d195ebbc8639f0ad2b2faee0237f0320132443362021-12-06 12:56:017 hrs 25 mins ago 0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0x4f2d381273caf8774c52f3c0fbd47d63f2af89260.000231099393015933 BNB
0x0def2da30da7cdd1a3466c491585ab94d195ebbc8639f0ad2b2faee0237f0320132443362021-12-06 12:56:017 hrs 25 mins ago 0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e Binance: WBNB Token0.028887424126991747 BNB
0xafa8cdc5d81d6bb605576ee1fe051296ec09d1a3f1654a3f53c3fb37c78da64b132244472021-12-05 20:01:001 day 20 mins ago 0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0x164a1ed219261248b29c3bd8ee4c78bc156cab4b0.47930220017640951 BNB
0xafa8cdc5d81d6bb605576ee1fe051296ec09d1a3f1654a3f53c3fb37c78da64b132244472021-12-05 20:01:001 day 20 mins ago Binance: WBNB Token 0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0.47930220017640951 BNB
0x642a11eea2ba05dba140349e3e8554f4342b71de8573e4c9d9cafadf6ad50fc6132186772021-12-05 14:57:461 day 5 hrs ago 0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0x1c4f08dc64ae77bd4ac0642f735259f3d461dee00.049483916950110461 BNB
0x642a11eea2ba05dba140349e3e8554f4342b71de8573e4c9d9cafadf6ad50fc6132186772021-12-05 14:57:461 day 5 hrs ago Binance: WBNB Token 0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0.049483916950110461 BNB
0x13da0a64a2558f23392018e1c52807445785b4b724965fbfe05ea7779458c48a132119652021-12-05 9:08:551 day 11 hrs ago 0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0xfc3714de36dd61318ea693024de1fa836b5655980.049649066130136977 BNB
0x13da0a64a2558f23392018e1c52807445785b4b724965fbfe05ea7779458c48a132119652021-12-05 9:08:551 day 11 hrs ago Binance: WBNB Token 0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0.049649066130136977 BNB
0xec9e97dd01e37f6adf845d5900c695650ee91871a0b204644a874ce0a79c951b132098332021-12-05 7:21:251 day 12 hrs ago 0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e Binance: WBNB Token0.013306294152946777 BNB
0x2b7ddf9c82c84fa1112512b1de9b061ecf3f6c9155cfe9e7d916bd2e10bad1a0131887162021-12-04 13:40:432 days 6 hrs ago 0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0x5d2f3e699622b3bef98f69e1e8a7bc629bbc40280.090792476015809284 BNB
0x2b7ddf9c82c84fa1112512b1de9b061ecf3f6c9155cfe9e7d916bd2e10bad1a0131887162021-12-04 13:40:432 days 6 hrs ago Binance: WBNB Token 0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0.090792476015809284 BNB
0x558f37442d62c41dacb64023580579e54431214923d3181f0d90b9769f1b56e8131854672021-12-04 10:52:132 days 9 hrs ago 0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0x1c4f08dc64ae77bd4ac0642f735259f3d461dee00.770856667605447244 BNB
0x558f37442d62c41dacb64023580579e54431214923d3181f0d90b9769f1b56e8131854672021-12-04 10:52:132 days 9 hrs ago Binance: WBNB Token 0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0.770856667605447244 BNB
0x8f7a302a038369421c628fecd8e37cf1ddfbbe08a4ff6ca5b39fca7b11ecd3f2131854182021-12-04 10:49:462 days 9 hrs ago 0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0x1c4f08dc64ae77bd4ac0642f735259f3d461dee00.784103598900469963 BNB
0x8f7a302a038369421c628fecd8e37cf1ddfbbe08a4ff6ca5b39fca7b11ecd3f2131854182021-12-04 10:49:462 days 9 hrs ago Binance: WBNB Token 0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0.784103598900469963 BNB
0xe48846d07a5d01c50e568732dd1d5e136dfb9d8cee20278de1b027fc8a566748131827522021-12-04 8:34:522 days 11 hrs ago 0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0x1725c561562899df4271d08a8f2c0c04881d9d1a3.385748570551242349 BNB
0xe48846d07a5d01c50e568732dd1d5e136dfb9d8cee20278de1b027fc8a566748131827522021-12-04 8:34:522 days 11 hrs ago Binance: WBNB Token 0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e3.385748570551242349 BNB
0x9f23978e640ca61ac8ea06f9087ffcef4b75b64df9694e1beee16c23a6e35101131821102021-12-04 8:02:452 days 12 hrs ago 0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0x9295d080c14660ad927b80d908c56382cc506ec00.184953152205513907 BNB
0x9f23978e640ca61ac8ea06f9087ffcef4b75b64df9694e1beee16c23a6e35101131821102021-12-04 8:02:452 days 12 hrs ago Binance: WBNB Token 0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0.184953152205513907 BNB
0x9e8711928aaa530519c9be633086a564afd10dcadee8e917ef61fe3ca39f57fe131339972021-12-02 15:26:384 days 4 hrs ago 0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0x9be1df9464694cd640266f648f27d6f46facfacd2.948103962613147257 BNB
0x9e8711928aaa530519c9be633086a564afd10dcadee8e917ef61fe3ca39f57fe131339972021-12-02 15:26:384 days 4 hrs ago Binance: WBNB Token 0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e2.948103962613147257 BNB
0x61500bcb7dfa2ae5ea8198db9dd0350ee8d1469c70dfa14ae9660886fe3ca2ec131302782021-12-02 12:16:134 days 8 hrs ago 0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0x4f2d381273caf8774c52f3c0fbd47d63f2af89260.080275409966571847 BNB
0x61500bcb7dfa2ae5ea8198db9dd0350ee8d1469c70dfa14ae9660886fe3ca2ec131302782021-12-02 12:16:134 days 8 hrs ago Binance: WBNB Token 0xeb1c0efe6655e019e2c6ab01e0bd0c97f4899a4e0.080275409966571847 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
InfinityRouter01

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 9999 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-05-14
*/

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

pragma solidity >=0.5.0;

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

pragma solidity >=0.5.0;

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

pragma solidity >=0.6.2;

interface IInfinityRouter01 {
    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 addLiquidityFlexible(
        address tokenA,
        address tokenB,
        uint amountA,
        uint amountB,
        uint liquidityMin,
        address to,
        uint deadline
    ) external returns (uint liquidity);
    function addLiquidityETHFlexible(
        address token,
        uint amountToken,
        uint liquidityMin,
        address to,
        uint deadline
    ) external payable returns (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 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 removeLiquiditySingle( // SupportingFeeOnTransferTokens
        address tokenA,
        address tokenOut,
        uint liquidity,
        uint amountOutMin,
        address to,
        uint deadline
    ) external returns (uint amountOut);
    function removeLiquidityETHSingle( // SupportingFeeOnTransferTokens
        address token,
        uint liquidity,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquiditySingleWithPermit( // SupportingFeeOnTransferTokens
        address tokenA,
        address tokenOut,
        uint liquidity,
        uint amountOutMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountOut);
    function removeLiquidityETHSingleWithPermit( // SupportingFeeOnTransferTokens
        address token,
        uint liquidity,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (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 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;

    function distributeRewards(
        address tokenA,
        address tokenB,
        uint amountA,
        uint amountB,
        uint deadline
    ) external;
    function distributeRewardsETH(
        address token,
        uint amountToken,
        uint deadline
    ) external payable;
    
    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);
}

pragma solidity >=0.5.0;

library InfinityLibrary {
    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, 'InfinityLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'InfinityLibrary: 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'e1abf0101f3e1c81c47056520722910d4e628bc13e1fb9b3f7cc3b877b34b959' // 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,) = IInfinityPair(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, 'InfinityLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'InfinityLibrary: 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, 'InfinityLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'InfinityLibrary: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(996);
        uint numerator = amountInWithFee.mul(reserveOut);
        uint denominator = reserveIn.mul(1000).add(amountInWithFee);
        amountOut = numerator / denominator;
    }

    // given an output amount of an asset and pair reserves, returns a required input amount of the other asset
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) {
        require(amountOut > 0, 'InfinityLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'InfinityLibrary: INSUFFICIENT_LIQUIDITY');
        uint numerator = reserveIn.mul(amountOut).mul(1000);
        uint denominator = reserveOut.sub(amountOut).mul(996);
        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, 'InfinityLibrary: 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, 'InfinityLibrary: 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);
        }
    }
}

pragma solidity >=0.5.0;

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

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

// SPDX-License-Identifier: GPL-3.0-or-later

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,
        uint256 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,
        uint256 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,
        uint256 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, uint256 value) internal {
        (bool success, ) = to.call{value: value}(new bytes(0));
        require(success, 'TransferHelper: ETH_TRANSFER_FAILED');
    }
}

pragma solidity =0.6.6;

contract InfinityRouter01 is IInfinityRouter01 {
    using SafeMath for uint;

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

    modifier ensure(uint deadline) {
        require(deadline >= block.timestamp, 'InfinityRouter: 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 (IInfinityFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            IInfinityFactory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = InfinityLibrary.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = InfinityLibrary.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'InfinityRouter: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = InfinityLibrary.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'InfinityRouter: 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 = InfinityLibrary.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IInfinityPair(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 = InfinityLibrary.pairFor(factory, token, WETH);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWETH(WETH).deposit{value: amountETH}();
        assert(IWETH(WETH).transfer(pair, amountETH));
        liquidity = IInfinityPair(pair).mint(to);
        // refund dust eth, if any
        if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH);
    }
    
    function _addLiquidityFlexible(
        address tokenA,
        address tokenB,
        uint amountA,
        uint amountB
    ) internal virtual {
        // create the pair if it doesn't exist yet
        if (IInfinityFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            require(amountA > 0 && amountB > 0, 'InfinityswapRouter: NEW_POOL_REQUIRES_BOTH_TOKENS');
            IInfinityFactory(factory).createPair(tokenA, tokenB);
        }
    }
    function addLiquidityFlexible(
        address tokenA,
        address tokenB,
        uint amountA,
        uint amountB,
        uint liquidityMin,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint liquidity) {
        _addLiquidityFlexible(tokenA, tokenB, amountA, amountB);
        address pair = InfinityLibrary.pairFor(factory, tokenA, tokenB);
        if (amountA > 0) TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        if (amountB > 0) TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IInfinityPair(pair).mint(to);
        require(liquidity >= liquidityMin, "InfinityswapRouter: INSUFFICIENT_LIQUIDITY_AMOUNT");
    }
    function addLiquidityETHFlexible(
        address token,
        uint amountToken,
        uint liquidityMin,
        address to,
        uint deadline
    ) external virtual override payable ensure(deadline) returns (uint liquidity) {
        _addLiquidityFlexible(token, WETH, amountToken, msg.value);
        address pair = InfinityLibrary.pairFor(factory, token, WETH);
        if (amountToken > 0) TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        if (msg.value > 0) {
            IWETH(WETH).deposit{value: msg.value}();
            assert(IWETH(WETH).transfer(pair, msg.value));
        }
        liquidity = IInfinityPair(pair).mint(to);
        require(liquidity >= liquidityMin, "InfinityswapRouter: INSUFFICIENT_LIQUIDITY_AMOUNT");
    }

    // **** 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 = InfinityLibrary.pairFor(factory, tokenA, tokenB);
        IInfinityPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = IInfinityPair(pair).burn(to);
        (address token0,) = InfinityLibrary.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'InfinityRouter: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'InfinityRouter: 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 = InfinityLibrary.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        IInfinityPair(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 = InfinityLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IInfinityPair(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 = InfinityLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IInfinityPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        amountETH = removeLiquidityETHSupportingFeeOnTransferTokens(
            token, liquidity, amountTokenMin, amountETHMin, to, deadline
        );
    }

    function removeLiquiditySingle(
        address tokenA,
        address tokenOut,
        uint liquidity,
        uint amountOutMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountOut) {
        uint balanceBefore = IERC20(tokenOut).balanceOf(to);
        { // scope of pair
        address pair = InfinityLibrary.pairFor(factory, tokenA, tokenOut);
        IInfinityPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        IInfinityPair(pair).burn(address(this));
        TransferHelper.safeTransfer(tokenA, pair, IERC20(tokenA).balanceOf(address(this))); // amount to swap
        TransferHelper.safeTransfer(tokenOut, to, IERC20(tokenOut).balanceOf(address(this))); // amount out
        }
        { // scope of path
        address[] memory path = new address[](2);
        (path[0], path[1]) = (tokenA, tokenOut);
        _swapSupportingFeeOnTransferTokens(path, to);
        }
        amountOut = IERC20(tokenOut).balanceOf(to).sub(balanceBefore);
        require(amountOut >= amountOutMin, 'InfinityRouter: INSUFFICIENT_OUTPUT_AMOUNT');
    }
    function removeLiquidityETHSingle(
        address token,
        uint liquidity,
        uint amountETHMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountETH) {
        amountETH = removeLiquiditySingle(
            token,
            WETH,
            liquidity,
            amountETHMin,
            address(this),
            deadline
        );
        IWETH(WETH).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }
    function removeLiquiditySingleWithPermit(
        address tokenA,
        address tokenOut,
        uint liquidity,
        uint amountOutMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountOut) {
        address pair = InfinityLibrary.pairFor(factory, tokenA, tokenOut);
        uint value = approveMax ? uint(-1) : liquidity;
        IInfinityPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        amountOut = removeLiquiditySingle(tokenA, tokenOut, liquidity, amountOutMin, to, deadline);
    }
    function removeLiquidityETHSingleWithPermit(
        address token,
        uint liquidity,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountETH) {
        address pair = InfinityLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IInfinityPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        amountETH = removeLiquidityETHSingle(token, liquidity, 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,) = InfinityLibrary.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 ? InfinityLibrary.pairFor(factory, output, path[i + 2]) : _to;
            IInfinityPair(InfinityLibrary.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 = InfinityLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'InfinityRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, InfinityLibrary.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 = InfinityLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'InfinityRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, InfinityLibrary.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, 'InfinityRouter: INVALID_PATH');
        amounts = InfinityLibrary.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'InfinityRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(InfinityLibrary.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, 'InfinityRouter: INVALID_PATH');
        amounts = InfinityLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'InfinityRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, InfinityLibrary.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, 'InfinityRouter: INVALID_PATH');
        amounts = InfinityLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'InfinityRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, InfinityLibrary.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, 'InfinityRouter: INVALID_PATH');
        amounts = InfinityLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'InfinityRouter: EXCESSIVE_INPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(InfinityLibrary.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,) = InfinityLibrary.sortTokens(input, output);
            IInfinityPair pair = IInfinityPair(InfinityLibrary.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 = InfinityLibrary.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? InfinityLibrary.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, InfinityLibrary.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,
            'InfinityRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WETH, 'InfinityRouter: INVALID_PATH');
        uint amountIn = msg.value;
        IWETH(WETH).deposit{value: amountIn}();
        assert(IWETH(WETH).transfer(InfinityLibrary.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,
            'InfinityRouter: 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, 'InfinityRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, InfinityLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'InfinityRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).withdraw(amountOut);
        TransferHelper.safeTransferETH(to, amountOut);
    }

    // **** REWARD DISTRIBUTION ****
    // donate an amount of one or both tokens to the pool containing the tokens
    function distributeRewards(
        address tokenA,
        address tokenB,
        uint amountA,
        uint amountB,
        uint deadline
    ) external virtual override ensure(deadline) {
        address pair = InfinityLibrary.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        IInfinityPair(pair).sync();
    }
    function distributeRewardsETH(
        address token,
        uint amountToken,
        uint deadline
    ) external virtual override payable ensure(deadline) {
        address pair = InfinityLibrary.pairFor(factory, token, WETH);
        uint amountETH = msg.value;
        IWETH(WETH).deposit{value: amountETH}();
        assert(IWETH(WETH).transfer(pair, amountETH));
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IInfinityPair(pair).sync();
    }

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

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

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

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

    function getAmountsIn(uint amountOut, address[] memory path)
        public
        view
        virtual
        override
        returns (uint[] memory amounts)
    {
        return InfinityLibrary.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":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"liquidityMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETHFlexible","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidityMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityFlexible","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"distributeRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"distributeRewardsETH","outputs":[],"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":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSingle","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":"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":"removeLiquidityETHSingleWithPermit","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"}],"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":"tokenOut","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquiditySingle","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","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":"removeLiquiditySingleWithPermit","outputs":[{"internalType":"uint256","name":"amountOut","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"}]

60c06040523480156200001157600080fd5b5060405162005f4238038062005f42833981810160405260408110156200003757600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c615d5c620001e6600039806101f7528061104b5280611086528061118f52806113bf528061171e528061176d52806117ad528061185d5280611b665280611b925280611c84528061226c5280612638528061275d528061281352806128f35280612a4b5280612ad35280612c305280612daa5280612dd75280612e4b528061307c528061310952806131a0528061327e528061332552806133995280613b5a5280613e0a5280613e605280613e945280613f0852806140ba528061420f528061429752508061122f528061130652806114db528061157e52806115b7528061174b5280611a085280611d245280611eb7528061224a52806123e552806129985280612b055280612c0e5280612d885280612fcc52806133cb52806136365280613860528061388a528061397f5280613a105280613b385280613cd05280613e3e528061415f52806142c95280614c515280614c945280614f665280615075528061514152806152c7528061573152806157f852806158785250615d5c6000f3fe6080604052600436106101e75760003560e01c806384bc84fc11610102578063c45a015511610095578063ded9382a11610064578063ded9382a14610e2d578063e8e3370014610ea0578063f305d71914610f20578063fb3bdb4114610f6657610220565b8063c45a015514610c8f578063cd80a68714610ca4578063d06ca61f14610d19578063d0cd04f314610dd057610220565b8063ad615dec116100d1578063ad615dec14610b23578063af2979eb14610b59578063b6f9de9514610bac578063baa2abde14610c3257610220565b806384bc84fc146109f257806385f8c25914610a245780638803dbee14610a5a578063ad5c464814610af257610220565b80633ad95d581161017a5780635c11d795116101495780635c11d795146107ce578063791ac947146108665780637ff36ab5146108fe578063836c128d1461098457610220565b80633ad95d581461061f5780634a25d94a1461066e5780634ab31dff146107065780635b0d59841461075b57610220565b80631f00ca74116101b65780631f00ca74146104105780632195995c146104c757806333920a531461054557806338ed17391461058757610220565b806302751cec14610225578063054d50d41461029157806318cbafe5146102d95780631b94fc74146103c157610220565b3661022057336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461021e57fe5b005b600080fd5b34801561023157600080fd5b50610278600480360360c081101561024857600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610fec565b6040805192835260208301919091528051918290030190f35b34801561029d57600080fd5b506102c7600480360360608110156102b457600080fd5b5080359060208101359060400135611118565b60408051918252519081900360200190f35b3480156102e557600080fd5b50610371600480360360a08110156102fc57600080fd5b81359160208101359181019060608101604082013564010000000081111561032357600080fd5b82018360208201111561033557600080fd5b8035906020019184602083028401116401000000008311171561035757600080fd5b91935091506001600160a01b03813516906020013561112d565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103ad578181015183820152602001610395565b505050509050019250505060405180910390f35b3480156103cd57600080fd5b5061021e600480360360a08110156103e457600080fd5b506001600160a01b0381358116916020810135909116906040810135906060810135906080013561147e565b34801561041c57600080fd5b506103716004803603604081101561043357600080fd5b8135919081019060408101602082013564010000000081111561045557600080fd5b82018360208201111561046757600080fd5b8035906020019184602083028401116401000000008311171561048957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611577945050505050565b3480156104d357600080fd5b5061027860048036036101608110156104eb57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff61010082013516906101208101359061014001356115ad565b6102c7600480360360a081101561055b57600080fd5b506001600160a01b038135811691602081013591604082013591606081013590911690608001356116c0565b34801561059357600080fd5b50610371600480360360a08110156105aa57600080fd5b8135916020810135918101906060810160408201356401000000008111156105d157600080fd5b8201836020820111156105e357600080fd5b8035906020019184602083028401116401000000008311171561060557600080fd5b91935091506001600160a01b0381351690602001356119ab565b34801561062b57600080fd5b506102c7600480360360a081101561064257600080fd5b506001600160a01b03813581169160208101359160408201359160608101359091169060800135611b08565b34801561067a57600080fd5b50610371600480360360a081101561069157600080fd5b8135916020810135918101906060810160408201356401000000008111156106b857600080fd5b8201836020820111156106ca57600080fd5b803590602001918460208302840111640100000000831117156106ec57600080fd5b91935091506001600160a01b038135169060200135611c22565b34801561071257600080fd5b506102c7600480360360c081101561072957600080fd5b506001600160a01b03813581169160208101358216916040820135916060810135916080820135169060a00135611dd2565b34801561076757600080fd5b506102c7600480360361014081101561077f57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612242565b3480156107da57600080fd5b5061021e600480360360a08110156107f157600080fd5b81359160208101359181019060608101604082013564010000000081111561081857600080fd5b82018360208201111561082a57600080fd5b8035906020019184602083028401116401000000008311171561084c57600080fd5b91935091506001600160a01b038135169060200135612369565b34801561087257600080fd5b5061021e600480360360a081101561088957600080fd5b8135916020810135918101906060810160408201356401000000008111156108b057600080fd5b8201836020820111156108c257600080fd5b803590602001918460208302840111640100000000831117156108e457600080fd5b91935091506001600160a01b0381351690602001356125d8565b6103716004803603608081101561091457600080fd5b8135919081019060408101602082013564010000000081111561093657600080fd5b82018360208201111561094857600080fd5b8035906020019184602083028401116401000000008311171561096a57600080fd5b91935091506001600160a01b038135169060200135612899565b34801561099057600080fd5b506102c760048036036101208110156109a857600080fd5b506001600160a01b03813581169160208101359160408201359160608101359091169060808101359060a081013515159060ff60c0820135169060e0810135906101000135612c06565b61021e60048036036060811015610a0857600080fd5b506001600160a01b038135169060208101359060400135612d2b565b348015610a3057600080fd5b506102c760048036036060811015610a4757600080fd5b5080359060208101359060400135612f62565b348015610a6657600080fd5b50610371600480360360a0811015610a7d57600080fd5b813591602081013591810190606081016040820135640100000000811115610aa457600080fd5b820183602082011115610ab657600080fd5b80359060200191846020830284011164010000000083111715610ad857600080fd5b91935091506001600160a01b038135169060200135612f6f565b348015610afe57600080fd5b50610b0761307a565b604080516001600160a01b039092168252519081900360200190f35b348015610b2f57600080fd5b506102c760048036036060811015610b4657600080fd5b508035906020810135906040013561309e565b348015610b6557600080fd5b506102c7600480360360c0811015610b7c57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356130ab565b61021e60048036036080811015610bc257600080fd5b81359190810190604081016020820135640100000000811115610be457600080fd5b820183602082011115610bf657600080fd5b80359060200191846020830284011164010000000083111715610c1857600080fd5b91935091506001600160a01b038135169060200135613226565b348015610c3e57600080fd5b50610278600480360360e0811015610c5557600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356135d6565b348015610c9b57600080fd5b50610b0761385e565b348015610cb057600080fd5b506102c76004803603610140811015610cc857600080fd5b506001600160a01b03813581169160208101358216916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135613882565b348015610d2557600080fd5b5061037160048036036040811015610d3c57600080fd5b81359190810190604081016020820135640100000000811115610d5e57600080fd5b820183602082011115610d7057600080fd5b80359060200191846020830284011164010000000083111715610d9257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613978945050505050565b348015610ddc57600080fd5b506102c7600480360360e0811015610df357600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356139a5565b348015610e3957600080fd5b506102786004803603610140811015610e5157600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135613b2e565b348015610eac57600080fd5b50610f026004803603610100811015610ec457600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613c5b565b60408051938452602084019290925282820152519081900360600190f35b610f02600480360360c0811015610f3657600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135613da9565b61037160048036036080811015610f7c57600080fd5b81359190810190604081016020820135640100000000811115610f9e57600080fd5b820183602082011115610fb057600080fd5b80359060200191846020830284011164010000000083111715610fd257600080fd5b91935091506001600160a01b038135169060200135614060565b6000808242811015611045576040805162461bcd60e51b815260206004820152601760248201527f496e66696e697479526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b611074897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6135d6565b9093509150611084898685614406565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110ea57600080fd5b505af11580156110fe573d6000803e3d6000fd5b5050505061110c85836145bc565b50965096945050505050565b60006111258484846146d2565b949350505050565b60608142811015611185576040805162461bcd60e51b815260206004820152601760248201527f496e66696e697479526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106111bf57fe5b905060200201356001600160a01b03166001600160a01b03161461122a576040805162461bcd60e51b815260206004820152601c60248201527f496e66696e697479526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b6112887f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506147c292505050565b9150868260018451038151811061129b57fe5b602002602001015110156112e05760405162461bcd60e51b815260040180806020018281038252602a815260200180615cd9602a913960400191505060405180910390fd5b61137e868660008181106112f057fe5b905060200201356001600160a01b0316336113647f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061133257fe5b905060200201356001600160a01b03168b8b600181811061134f57fe5b905060200201356001600160a01b031661490e565b8560008151811061137157fe5b60200260200101516149f9565b6113bd82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614ba2915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836001855103815181106113fc57fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561143a57600080fd5b505af115801561144e573d6000803e3d6000fd5b50505050611473848360018551038151811061146657fe5b60200260200101516145bc565b509695505050505050565b80428110156114d4576040805162461bcd60e51b815260206004820152601760248201527f496e66696e697479526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b60006115017f0000000000000000000000000000000000000000000000000000000000000000888861490e565b905061150f873383886149f9565b61151b863383876149f9565b806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561155657600080fd5b505af115801561156a573d6000803e3d6000fd5b5050505050505050505050565b60606115a47f00000000000000000000000000000000000000000000000000000000000000008484614de8565b90505b92915050565b60008060006115dd7f00000000000000000000000000000000000000000000000000000000000000008f8f61490e565b90506000876115ec578c6115f0565b6000195b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561167f57600080fd5b505af1158015611693573d6000803e3d6000fd5b505050506116a68f8f8f8f8f8f8f6135d6565b809450819550505050509b509b9950505050505050505050565b60008142811015611718576040805162461bcd60e51b815260206004820152601760248201527f496e66696e697479526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b611744877f00000000000000000000000000000000000000000000000000000000000000008834614f20565b60006117917f0000000000000000000000000000000000000000000000000000000000000000897f000000000000000000000000000000000000000000000000000000000000000061490e565b905086156117a5576117a58833838a6149f9565b34156118db577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561180657600080fd5b505af115801561181a573d6000803e3d6000fd5b5050604080517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03868116600483015234602483015291517f0000000000000000000000000000000000000000000000000000000000000000909216945063a9059cbb935060448082019350602092918290030181600087803b1580156118a957600080fd5b505af11580156118bd573d6000803e3d6000fd5b505050506040513d60208110156118d357600080fd5b50516118db57fe5b806001600160a01b0316636a627842866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561193357600080fd5b505af1158015611947573d6000803e3d6000fd5b505050506040513d602081101561195d57600080fd5b50519250858310156119a05760405162461bcd60e51b8152600401808060200182810382526031815260200180615b206031913960400191505060405180910390fd5b505095945050505050565b60608142811015611a03576040805162461bcd60e51b815260206004820152601760248201527f496e66696e697479526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b611a617f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506147c292505050565b91508682600184510381518110611a7457fe5b60200260200101511015611ab95760405162461bcd60e51b815260040180806020018281038252602a815260200180615cd9602a913960400191505060405180910390fd5b611ac9868660008181106112f057fe5b61147382878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614ba2915050565b60008142811015611b60576040805162461bcd60e51b815260206004820152601760248201527f496e66696e697479526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b611b8e877f000000000000000000000000000000000000000000000000000000000000000088883088611dd2565b91507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611bf657600080fd5b505af1158015611c0a573d6000803e3d6000fd5b50505050611c1884836145bc565b5095945050505050565b60608142811015611c7a576040805162461bcd60e51b815260206004820152601760248201527f496e66696e697479526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110611cb457fe5b905060200201356001600160a01b03166001600160a01b031614611d1f576040805162461bcd60e51b815260206004820152601c60248201527f496e66696e697479526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b611d7d7f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250614de892505050565b91508682600081518110611d8d57fe5b602002602001015111156112e05760405162461bcd60e51b8152600401808060200182810382526026815260200180615bac6026913960400191505060405180910390fd5b60008142811015611e2a576040805162461bcd60e51b815260206004820152601760248201527f496e66696e697479526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b6000876001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e8257600080fd5b505afa158015611e96573d6000803e3d6000fd5b505050506040513d6020811015611eac57600080fd5b505190506000611edd7f00000000000000000000000000000000000000000000000000000000000000008b8b61490e565b604080517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03831660248201819052604482018c9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015611f5157600080fd5b505af1158015611f65573d6000803e3d6000fd5b505050506040513d6020811015611f7b57600080fd5b5050604080517f89afcb4400000000000000000000000000000000000000000000000000000000815230600482015281516001600160a01b038416926389afcb4492602480820193918290030181600087803b158015611fda57600080fd5b505af1158015611fee573d6000803e3d6000fd5b505050506040513d604081101561200457600080fd5b5050604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905161209f918c9184916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561206e57600080fd5b505afa158015612082573d6000803e3d6000fd5b505050506040513d602081101561209857600080fd5b5051614406565b6120fa89878b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561206e57600080fd5b50604080516002808252606080830184529260208301908036833701905050905089898260008151811061212a57fe5b602002602001018360018151811061213e57fe5b6001600160a01b0393841660209182029290920101529116905261216281876150ea565b506121f581896001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156121bd57600080fd5b505afa1580156121d1573d6000803e3d6000fd5b505050506040513d60208110156121e757600080fd5b50519063ffffffff61541516565b9250858310156122365760405162461bcd60e51b815260040180806020018281038252602a815260200180615cd9602a913960400191505060405180910390fd5b50509695505050505050565b6000806122907f00000000000000000000000000000000000000000000000000000000000000008d7f000000000000000000000000000000000000000000000000000000000000000061490e565b905060008661229f578b6122a3565b6000195b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561233257600080fd5b505af1158015612346573d6000803e3d6000fd5b505050506123588d8d8d8d8d8d6130ab565b9d9c50505050505050505050505050565b80428110156123bf576040805162461bcd60e51b815260206004820152601760248201527f496e66696e697479526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b612434858560008181106123cf57fe5b905060200201356001600160a01b03163361242e7f00000000000000000000000000000000000000000000000000000000000000008989600081811061241157fe5b905060200201356001600160a01b03168a8a600181811061134f57fe5b8a6149f9565b60008585600019810181811061244657fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156124ab57600080fd5b505afa1580156124bf573d6000803e3d6000fd5b505050506040513d60208110156124d557600080fd5b505160408051602088810282810182019093528882529293506125179290918991899182918501908490808284376000920191909152508892506150ea915050565b86612591828888600019810181811061252c57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156121bd57600080fd5b10156125ce5760405162461bcd60e51b815260040180806020018281038252602a815260200180615cd9602a913960400191505060405180910390fd5b5050505050505050565b804281101561262e576040805162461bcd60e51b815260206004820152601760248201527f496e66696e697479526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061266857fe5b905060200201356001600160a01b03166001600160a01b0316146126d3576040805162461bcd60e51b815260206004820152601c60248201527f496e66696e697479526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b6126e3858560008181106123cf57fe5b6127218585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506150ea915050565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b1580156127a457600080fd5b505afa1580156127b8573d6000803e3d6000fd5b505050506040513d60208110156127ce57600080fd5b50519050868110156128115760405162461bcd60e51b815260040180806020018281038252602a815260200180615cd9602a913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561287757600080fd5b505af115801561288b573d6000803e3d6000fd5b505050506125ce84826145bc565b606081428110156128f1576040805162461bcd60e51b815260206004820152601760248201527f496e66696e697479526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168686600081811061292857fe5b905060200201356001600160a01b03166001600160a01b031614612993576040805162461bcd60e51b815260206004820152601c60248201527f496e66696e697479526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b6129f17f0000000000000000000000000000000000000000000000000000000000000000348888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506147c292505050565b91508682600184510381518110612a0457fe5b60200260200101511015612a495760405162461bcd60e51b815260040180806020018281038252602a815260200180615cd9602a913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612a8557fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612ab857600080fd5b505af1158015612acc573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612b317f00000000000000000000000000000000000000000000000000000000000000008989600081811061241157fe5b84600081518110612b3e57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b9557600080fd5b505af1158015612ba9573d6000803e3d6000fd5b505050506040513d6020811015612bbf57600080fd5b5051612bc757fe5b611c1882878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614ba2915050565b600080612c547f00000000000000000000000000000000000000000000000000000000000000008c7f000000000000000000000000000000000000000000000000000000000000000061490e565b9050600086612c63578a612c67565b6000195b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015612cf657600080fd5b505af1158015612d0a573d6000803e3d6000fd5b50505050612d1b8c8c8c8c8c611b08565b9c9b505050505050505050505050565b8042811015612d81576040805162461bcd60e51b815260206004820152601760248201527f496e66696e697479526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b6000612dce7f0000000000000000000000000000000000000000000000000000000000000000867f000000000000000000000000000000000000000000000000000000000000000061490e565b905060003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e3057600080fd5b505af1158015612e44573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612ec957600080fd5b505af1158015612edd573d6000803e3d6000fd5b505050506040513d6020811015612ef357600080fd5b5051612efb57fe5b612f07863384886149f9565b816001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612f4257600080fd5b505af1158015612f56573d6000803e3d6000fd5b50505050505050505050565b600061112584848461546d565b60608142811015612fc7576040805162461bcd60e51b815260206004820152601760248201527f496e66696e697479526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b6130257f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250614de892505050565b9150868260008151811061303557fe5b60200260200101511115611ab95760405162461bcd60e51b8152600401808060200182810382526026815260200180615bac6026913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b600061112584848461555d565b60008142811015613103576040805162461bcd60e51b815260206004820152601760248201527f496e66696e697479526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b613132887f000000000000000000000000000000000000000000000000000000000000000089898930896135d6565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191945061319e92508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561206e57600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561320457600080fd5b505af1158015613218573d6000803e3d6000fd5b5050505061147384836145bc565b804281101561327c576040805162461bcd60e51b815260206004820152601760248201527f496e66696e697479526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106132b357fe5b905060200201356001600160a01b03166001600160a01b03161461331e576040805162461bcd60e51b815260206004820152601c60248201527f496e66696e697479526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561337e57600080fd5b505af1158015613392573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6133f77f00000000000000000000000000000000000000000000000000000000000000008989600081811061241157fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561344757600080fd5b505af115801561345b573d6000803e3d6000fd5b505050506040513d602081101561347157600080fd5b505161347957fe5b60008686600019810181811061348b57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156134f057600080fd5b505afa158015613504573d6000803e3d6000fd5b505050506040513d602081101561351a57600080fd5b5051604080516020898102828101820190935289825292935061355c9290918a918a9182918501908490808284376000920191909152508992506150ea915050565b87612591828989600019810181811061357157fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156121bd57600080fd5b600080824281101561362f576040805162461bcd60e51b815260206004820152601760248201527f496e66696e697479526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b600061365c7f00000000000000000000000000000000000000000000000000000000000000008c8c61490e565b604080517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b1580156136d057600080fd5b505af11580156136e4573d6000803e3d6000fd5b505050506040513d60208110156136fa57600080fd5b5050604080517f89afcb440000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561376057600080fd5b505af1158015613774573d6000803e3d6000fd5b505050506040513d604081101561378a57600080fd5b508051602090910151909250905060006137a48e8e615609565b509050806001600160a01b03168e6001600160a01b0316146137c75781836137ca565b82825b90975095508a87101561380e5760405162461bcd60e51b8152600401808060200182810382526025815260200180615cb46025913960400191505060405180910390fd5b8986101561384d5760405162461bcd60e51b8152600401808060200182810382526025815260200180615c686025913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806138b07f00000000000000000000000000000000000000000000000000000000000000008d8d61490e565b90506000866138bf578a6138c3565b6000195b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561395257600080fd5b505af1158015613966573d6000803e3d6000fd5b505050506123588d8d8d8d8d8d611dd2565b60606115a47f000000000000000000000000000000000000000000000000000000000000000084846147c2565b600081428110156139fd576040805162461bcd60e51b815260206004820152601760248201527f496e66696e697479526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b613a0989898989614f20565b6000613a367f00000000000000000000000000000000000000000000000000000000000000008b8b61490e565b90508715613a4a57613a4a8a33838b6149f9565b8615613a5c57613a5c8933838a6149f9565b806001600160a01b0316636a627842866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015613ab457600080fd5b505af1158015613ac8573d6000803e3d6000fd5b505050506040513d6020811015613ade57600080fd5b5051925085831015613b215760405162461bcd60e51b8152600401808060200182810382526031815260200180615b206031913960400191505060405180910390fd5b5050979650505050505050565b6000806000613b7e7f00000000000000000000000000000000000000000000000000000000000000008e7f000000000000000000000000000000000000000000000000000000000000000061490e565b9050600087613b8d578c613b91565b6000195b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015613c2057600080fd5b505af1158015613c34573d6000803e3d6000fd5b50505050613c468e8e8e8e8e8e610fec565b909f909e509c50505050505050505050505050565b60008060008342811015613cb6576040805162461bcd60e51b815260206004820152601760248201527f496e66696e697479526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b613cc48c8c8c8c8c8c6156e7565b90945092506000613cf67f00000000000000000000000000000000000000000000000000000000000000008e8e61490e565b9050613d048d3383886149f9565b613d108c3383876149f9565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015613d6857600080fd5b505af1158015613d7c573d6000803e3d6000fd5b505050506040513d6020811015613d9257600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015613e04576040805162461bcd60e51b815260206004820152601760248201527f496e66696e697479526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b613e328a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c6156e7565b90945092506000613e847f00000000000000000000000000000000000000000000000000000000000000008c7f000000000000000000000000000000000000000000000000000000000000000061490e565b9050613e928b3383886149f9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015613eed57600080fd5b505af1158015613f01573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613f8657600080fd5b505af1158015613f9a573d6000803e3d6000fd5b505050506040513d6020811015613fb057600080fd5b5051613fb857fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561401057600080fd5b505af1158015614024573d6000803e3d6000fd5b505050506040513d602081101561403a57600080fd5b505192503484101561405257614052338534036145bc565b505096509650969350505050565b606081428110156140b8576040805162461bcd60e51b815260206004820152601760248201527f496e66696e697479526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316868660008181106140ef57fe5b905060200201356001600160a01b03166001600160a01b03161461415a576040805162461bcd60e51b815260206004820152601c60248201527f496e66696e697479526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b6141b87f000000000000000000000000000000000000000000000000000000000000000088888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250614de892505050565b915034826000815181106141c857fe5b6020026020010151111561420d5760405162461bcd60e51b8152600401808060200182810382526026815260200180615bac6026913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db08360008151811061424957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561427c57600080fd5b505af1158015614290573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6142f57f00000000000000000000000000000000000000000000000000000000000000008989600081811061241157fe5b8460008151811061430257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561435957600080fd5b505af115801561436d573d6000803e3d6000fd5b505050506040513d602081101561438357600080fd5b505161438b57fe5b6143ca82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614ba2915050565b816000815181106143d757fe5b6020026020010151341115611c1857611c1833836000815181106143f757fe5b602002602001015134036145bc565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b602083106144cf57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614492565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614531576040519150601f19603f3d011682016040523d82523d6000602084013e614536565b606091505b5091509150818015614564575080511580614564575080806020019051602081101561456157600080fd5b50515b6145b5576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061462657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016145e9565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614688576040519150601f19603f3d011682016040523d82523d6000602084013e61468d565b606091505b50509050806146cd5760405162461bcd60e51b8152600401808060200182810382526023815260200180615c456023913960400191505060405180910390fd5b505050565b60008084116147125760405162461bcd60e51b815260040180806020018281038252602a815260200180615b51602a913960400191505060405180910390fd5b6000831180156147225750600082115b61475d5760405162461bcd60e51b8152600401808060200182810382526027815260200180615c8d6027913960400191505060405180910390fd5b6000614771856103e463ffffffff61598d16565b90506000614785828563ffffffff61598d16565b905060006147ab8361479f886103e863ffffffff61598d16565b9063ffffffff6159f916565b90508082816147b657fe5b04979650505050505050565b606060028251101561481b576040805162461bcd60e51b815260206004820152601d60248201527f496e66696e6974794c6962726172793a20494e56414c49445f50415448000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561483357600080fd5b5060405190808252806020026020018201604052801561485d578160200160208202803683370190505b509050828160008151811061486e57fe5b60200260200101818152505060005b6001835103811015614906576000806148c08786858151811061489c57fe5b60200260200101518786600101815181106148b357fe5b6020026020010151615a51565b915091506148e28484815181106148d357fe5b602002602001015183836146d2565b8484600101815181106148f157fe5b6020908102919091010152505060010161487d565b509392505050565b600080600061491d8585615609565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527fe1abf0101f3e1c81c47056520722910d4e628bc13e1fb9b3f7cc3b877b34b959609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b60208310614aca57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614a8d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614b2c576040519150601f19603f3d011682016040523d82523d6000602084013e614b31565b606091505b5091509150818015614b5f575080511580614b5f5750808060200190516020811015614b5c57600080fd5b50515b614b9a5760405162461bcd60e51b8152600401808060200182810382526024815260200180615d036024913960400191505060405180910390fd5b505050505050565b60005b6001835103811015614de257600080848381518110614bc057fe5b6020026020010151858460010181518110614bd757fe5b6020026020010151915091506000614bef8383615609565b5090506000878560010181518110614c0357fe5b60200260200101519050600080836001600160a01b0316866001600160a01b031614614c3157826000614c35565b6000835b91509150600060028a51038810614c4c5788614c8d565b614c8d7f0000000000000000000000000000000000000000000000000000000000000000878c8b60020181518110614c8057fe5b602002602001015161490e565b9050614cba7f0000000000000000000000000000000000000000000000000000000000000000888861490e565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015614cf7576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614d68578181015183820152602001614d50565b50505050905090810190601f168015614d955780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614db757600080fd5b505af1158015614dcb573d6000803e3d6000fd5b505060019099019850614ba5975050505050505050565b50505050565b6060600282511015614e41576040805162461bcd60e51b815260206004820152601d60248201527f496e66696e6974794c6962726172793a20494e56414c49445f50415448000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015614e5957600080fd5b50604051908082528060200260200182016040528015614e83578160200160208202803683370190505b5090508281600183510381518110614e9757fe5b60209081029190910101528151600019015b801561490657600080614ed987866001860381518110614ec557fe5b60200260200101518786815181106148b357fe5b91509150614efb848481518110614eec57fe5b6020026020010151838361546d565b846001850381518110614f0a57fe5b6020908102919091010152505060001901614ea9565b604080517fe6a439050000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152858116602483015291516000927f0000000000000000000000000000000000000000000000000000000000000000169163e6a43905916044808301926020929190829003018186803b158015614fac57600080fd5b505afa158015614fc0573d6000803e3d6000fd5b505050506040513d6020811015614fd657600080fd5b50516001600160a01b03161415614de257600082118015614ff75750600081115b6150325760405162461bcd60e51b8152600401808060200182810382526031815260200180615b7b6031913960400191505060405180910390fd5b604080517fc9c653960000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152858116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156150c057600080fd5b505af11580156150d4573d6000803e3d6000fd5b505050506040513d6020811015614b9a57600080fd5b60005b60018351038110156146cd5760008084838151811061510857fe5b602002602001015185846001018151811061511f57fe5b60200260200101519150915060006151378383615609565b50905060006151677f0000000000000000000000000000000000000000000000000000000000000000858561490e565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156151a857600080fd5b505afa1580156151bc573d6000803e3d6000fd5b505050506040513d60608110156151d257600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a81169089161461520f578284615212565b83835b91509150615270828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156121bd57600080fd5b955061527d8683836146d2565b945050505050600080856001600160a01b0316886001600160a01b0316146152a7578260006152ab565b6000835b91509150600060028c51038a106152c2578a6152f6565b6152f67f0000000000000000000000000000000000000000000000000000000000000000898e8d60020181518110614c8057fe5b60408051600080825260208201928390527f022c0d9f00000000000000000000000000000000000000000000000000000000835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015615399578181015183820152602001615381565b50505050905090810190601f1680156153c65780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156153e857600080fd5b505af11580156153fc573d6000803e3d6000fd5b50506001909b019a506150ed9950505050505050505050565b808203828111156115a7576040805162461bcd60e51b815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b60008084116154ad5760405162461bcd60e51b815260040180806020018281038252602b815260200180615bf6602b913960400191505060405180910390fd5b6000831180156154bd5750600082115b6154f85760405162461bcd60e51b8152600401808060200182810382526027815260200180615c8d6027913960400191505060405180910390fd5b600061551c6103e8615510868863ffffffff61598d16565b9063ffffffff61598d16565b905060006155366103e4615510868963ffffffff61541516565b9050615553600182848161554657fe5b049063ffffffff6159f916565b9695505050505050565b600080841161559d5760405162461bcd60e51b8152600401808060200182810382526024815260200180615c216024913960400191505060405180910390fd5b6000831180156155ad5750600082115b6155e85760405162461bcd60e51b8152600401808060200182810382526027815260200180615c8d6027913960400191505060405180910390fd5b826155f9858463ffffffff61598d16565b8161560057fe5b04949350505050565b600080826001600160a01b0316846001600160a01b0316141561565d5760405162461bcd60e51b8152600401808060200182810382526024815260200180615bd26024913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b03161061567d578284615680565b83835b90925090506001600160a01b0382166156e0576040805162461bcd60e51b815260206004820152601d60248201527f496e66696e6974794c6962726172793a205a45524f5f41444452455353000000604482015290519081900360640190fd5b9250929050565b604080517fe6a439050000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561577a57600080fd5b505afa15801561578e573d6000803e3d6000fd5b505050506040513d60208110156157a457600080fd5b50516001600160a01b0316141561587057604080517fc9c653960000000000000000000000000000000000000000000000000000000081526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561584357600080fd5b505af1158015615857573d6000803e3d6000fd5b505050506040513d602081101561586d57600080fd5b50505b60008061589e7f00000000000000000000000000000000000000000000000000000000000000008b8b615a51565b915091508160001480156158b0575080155b156158c057879350869250615980565b60006158cd89848461555d565b905087811161592057858110156159155760405162461bcd60e51b8152600401808060200182810382526025815260200180615c686025913960400191505060405180910390fd5b88945092508261597e565b600061592d89848661555d565b90508981111561593957fe5b878110156159785760405162461bcd60e51b8152600401808060200182810382526025815260200180615cb46025913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806159a8575050808202828282816159a557fe5b04145b6115a7576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b808201828110156115a7576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b6000806000615a608585615609565b509050600080615a7188888861490e565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015615aa957600080fd5b505afa158015615abd573d6000803e3d6000fd5b505050506040513d6060811015615ad357600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b0387811690841614615b0d578082615b10565b81815b9099909850965050505050505056fe496e66696e69747973776170526f757465723a20494e53554646494349454e545f4c49515549444954595f414d4f554e54496e66696e6974794c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54496e66696e69747973776170526f757465723a204e45575f504f4f4c5f52455155495245535f424f54485f544f4b454e53496e66696e697479526f757465723a204558434553534956455f494e5055545f414d4f554e54496e66696e6974794c6962726172793a204944454e544943414c5f414444524553534553496e66696e6974794c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54496e66696e6974794c6962726172793a20494e53554646494349454e545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544496e66696e697479526f757465723a20494e53554646494349454e545f425f414d4f554e54496e66696e6974794c6962726172793a20494e53554646494349454e545f4c4951554944495459496e66696e697479526f757465723a20494e53554646494349454e545f415f414d4f554e54496e66696e697479526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a2646970667358221220b2041ef632f2bd6de9adc7db23f1907e91acdf9314641886a2462ae848b4f80164736f6c634300060600330000000000000000000000006cc587515137ee5b89ebd0b25cc5fc2b93015357000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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

0000000000000000000000006cc587515137ee5b89ebd0b25cc5fc2b93015357000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000006cc587515137ee5b89ebd0b25cc5fc2b93015357
Arg [1] : 000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c


Deployed ByteCode Sourcemap

17674:24591:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18153:10;-1:-1:-1;;;;;18167:4:0;18153:18;;18146:26;;;;17674:24591;;12:1:-1;9;2:12;24334:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24334:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;24334:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;41213:261;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41213:261:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;41213:261:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;34439:846;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34439:846:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;34439:846:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;34439:846:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34439:846:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34439:846:0;;-1:-1:-1;34439:846:0;-1:-1:-1;;;;;;34439:846: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;34439:846:0;;;;;;;;;;;;;;;;;39996:470;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39996:470:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;39996:470:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;42010:252::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42010:252:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;42010:252:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;42010:252:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;42010:252:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;42010:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;42010:252:0;;-1:-1:-1;42010:252:0;;-1:-1:-1;;;;;42010:252:0:i;25013:675::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25013:675:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;25013:675:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22633:793::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22633:793:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31670:625::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31670:625:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31670:625:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;31670:625:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31670:625:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31670:625:0;;-1:-1:-1;31670:625:0;-1:-1:-1;;;;;;31670:625:0;;;;;;;;:::i;29041:531::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29041:531:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;29041:531:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33609:824::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33609:824:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;33609:824:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;33609:824:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33609:824:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33609:824:0;;-1:-1:-1;33609:824:0;-1:-1:-1;;;;;;33609:824:0;;;;;;;;:::i;27870:1165::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27870:1165:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;27870:1165:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;27146:716::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27146:716:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;27146:716:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;37458:712::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37458:712:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;37458:712:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;37458:712:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;37458:712:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;37458:712:0;;-1:-1:-1;37458:712:0;-1:-1:-1;;;;;;37458:712:0;;;;;;;;:::i;39029:840::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39029:840:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;39029:840:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;39029:840:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;39029:840:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;39029:840:0;;-1:-1:-1;39029:840:0;-1:-1:-1;;;;;;39029:840:0;;;;;;;;:::i;32910:693::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32910:693:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;32910:693:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32910:693:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32910:693:0;;-1:-1:-1;32910:693:0;-1:-1:-1;;;;;;32910:693:0;;;;;;;;:::i;30222:600::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30222:600:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;30222:600:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;40472:502::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;40472:502:0;;;;;;;;;;;;;:::i;41482:260::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41482:260:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;41482:260:0;;;;;;;;;;;;:::i;32301:603::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32301:603:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32301:603:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;32301:603:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32301:603:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32301:603:0;;-1:-1:-1;32301:603:0;-1:-1:-1;;;;;;32301:603:0;;;;;;;;:::i;17808:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17808:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;17808:38:0;;;;;;;;;;;;;;41018:187;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41018:187:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;41018:187:0;;;;;;;;;;;;:::i;26440:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26440:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;26440:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;38176:847::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;38176:847:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;38176:847:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;38176:847:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;38176:847:0;;-1:-1:-1;38176:847:0;-1:-1:-1;;;;;;38176:847:0;;;;;;;;:::i;23469:859::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23469:859:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23469:859:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17760:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17760:41:0;;;:::i;29578:638::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29578:638:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;29578:638:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;41750:252::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41750:252:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;41750:252:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;41750:252:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;41750:252:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;41750:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;41750:252:0;;-1:-1:-1;41750:252:0;;-1:-1:-1;;;;;41750:252:0:i;21868:759::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21868:759:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21868:759:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25694:667::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25694:667:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;25694:667:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19664:736::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19664:736:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19664:736:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;20406:972;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20406:972:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;35291:806::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;35291:806:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;35291:806:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;35291:806:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;35291:806:0;;-1:-1:-1;35291:806:0;-1:-1:-1;;;;;;35291:806:0;;;;;;;;:::i;24334:673::-;24571:16;24589:14;24552:8;17917:15;17905:8;:27;;17897:63;;;;;-1:-1:-1;;;17897:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24643:196:::1;24673:5;24693:4;24712:9;24736:14;24765:12;24800:4;24820:8;24643:15;:196::i;:::-;24616:223:::0;;-1:-1:-1;24616:223:0;-1:-1:-1;24850:51:0::1;24878:5:::0;24885:2;24616:223;24850:27:::1;:51::i;:::-;24918:4;-1:-1:-1::0;;;;;24912:20:0::1;;24933:9;24912:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24912:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24912:31:0;;;;24954:45;24985:2;24989:9;24954:30;:45::i;:::-;24334:673:::0;;;;;;;;;;:::o;41213:261::-;41366:14;41405:61;41434:8;41444:9;41455:10;41405:28;:61::i;:::-;41398:68;41213:261;-1:-1:-1;;;;41213:261:0:o;34439:846::-;34653:21;34625:8;17917:15;17905:8;:27;;17897:63;;;;;-1:-1:-1;;;17897:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34725:4:0::1;34700:29;:4:::0;;-1:-1:-1;;34705:15:0;;34700:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;34700:21:0::1;-1:-1:-1::0;;;;;34700:29:0::1;;34692:70;;;::::0;;-1:-1:-1;;;34692:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;34783:54;34813:7;34822:8;34832:4;;34783:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;34783:29:0::1;::::0;-1:-1:-1;;;34783:54:0:i:1;:::-;34773:64;;34887:12;34856:7;34881:1;34864:7;:14;:18;34856:27;;;;;;;;;;;;;;:43;;34848:98;;;;-1:-1:-1::0;;;34848:98:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34957:140;35003:4;;35008:1;35003:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;35003:7:0::1;35012:10;35024:50;35048:7;35057:4;;35062:1;35057:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;35057:7:0::1;35066:4;;35071:1;35066:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;35066:7:0::1;35024:23;:50::i;:::-;35076:7;35084:1;35076:10;;;;;;;;;;;;;;34957:31;:140::i;:::-;35108:35;35114:7;35123:4;;35108:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;35137:4:0::1;::::0;-1:-1:-1;35108:5:0::1;::::0;-1:-1:-1;;35108:35:0:i:1;:::-;35160:4;-1:-1:-1::0;;;;;35154:20:0::1;;35175:7;35200:1;35183:7;:14;:18;35175:27;;;;;;;;;;;;;;35154:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;35154:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35154:49:0;;;;35214:63;35245:2;35249:7;35274:1;35257:7;:14;:18;35249:27;;;;;;;;;;;;;;35214:30;:63::i;:::-;34439:846:::0;;;;;;;;;:::o;39996:470::-;40183:8;17917:15;17905:8;:27;;17897:63;;;;;-1:-1:-1;;;17897:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;40204:12:::1;40219:48;40243:7;40252:6;40260;40219:23;:48::i;:::-;40204:63;;40278:66;40310:6;40318:10;40330:4;40336:7;40278:31;:66::i;:::-;40355;40387:6;40395:10;40407:4;40413:7;40355:31;:66::i;:::-;40446:4;-1:-1:-1::0;;;;;40432:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;40432:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;40432:26:0;;;;17971:1;39996:470:::0;;;;;;:::o;42010:252::-;42154:21;42200:54;42229:7;42238:9;42249:4;42200:28;:54::i;:::-;42193:61;;42010:252;;;;;:::o;25013:675::-;25319:12;25333;25358;25373:48;25397:7;25406:6;25414;25373:23;:48::i;:::-;25358:63;;25432:10;25445;:33;;25469:9;25445:33;;;-1:-1:-1;;25445:33:0;25489:79;;;;;;25516:10;25489:79;;;;25536:4;25489:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25432:46;;-1:-1:-1;;;;;;25489:26:0;;;;;:79;;;;;-1:-1:-1;;25489:79:0;;;;;;;;-1:-1:-1;25489:26:0;:79;;;2:2:-1;;;;27:1;24;17:12;2:2;25489:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25489:79:0;;;;25600:80;25616:6;25624;25632:9;25643:10;25655;25667:2;25671:8;25600:15;:80::i;:::-;25579:101;;;;;;;;25013:675;;;;;;;;;;;;;;;;:::o;22633:793::-;22857:14;22838:8;17917:15;17905:8;:27;;17897:63;;;;;-1:-1:-1;;;17897:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;22884:58:::1;22906:5;22913:4;22919:11;22932:9;22884:21;:58::i;:::-;22953:12;22968:45;22992:7;23001:5;23008:4;22968:23;:45::i;:::-;22953:60:::0;-1:-1:-1;23028:15:0;;23024:90:::1;;23045:69;23077:5;23084:10;23096:4;23102:11;23045:31;:69::i;:::-;23129:9;:13:::0;23125:145:::1;;23165:4;-1:-1:-1::0;;;;;23159:19:0::1;;23186:9;23159:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23159:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;23220:37:0::1;::::0;;;;;-1:-1:-1;;;;;23220:37:0;;::::1;;::::0;::::1;::::0;23247:9:::1;23220:37:::0;;;;;;23226:4:::1;23220:20:::0;;::::1;::::0;-1:-1:-1;23220:20:0::1;::::0;-1:-1:-1;23220:37:0;;;;;-1:-1:-1;23220:37:0::1;::::0;;;;;;;-1:-1:-1;23220:20:0;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;23220:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23220:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23220:37:0;23213:45:::1;;;;23306:4;-1:-1:-1::0;;;;;23292:24:0::1;;23317:2;23292:28;;;;;;;;;;;;;-1:-1:-1::0;;;;;23292:28:0::1;-1:-1:-1::0;;;;;23292:28:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23292:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23292:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23292:28:0;;-1:-1:-1;23339:25:0;;::::1;;23331:87;;;;-1:-1:-1::0;;;23331:87:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17971:1;22633:793:::0;;;;;;;;:::o;31670:625::-;31894:21;31875:8;17917:15;17905:8;:27;;17897:63;;;;;-1:-1:-1;;;17897:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;31938:54:::1;31968:7;31977:8;31987:4;;31938:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31938:29:0::1;::::0;-1:-1:-1;;;31938:54:0:i:1;:::-;31928:64;;32042:12;32011:7;32036:1;32019:7;:14;:18;32011:27;;;;;;;;;;;;;;:43;;32003:98;;;;-1:-1:-1::0;;;32003:98:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32112:140;32158:4;;32163:1;32158:7;;;;;;32112:140;32263:24;32269:7;32278:4;;32263:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32284:2:0;;-1:-1:-1;32263:5:0::1;::::0;-1:-1:-1;;32263:24:0:i:1;29041:531::-:0;29254:14;29235:8;17917:15;17905:8;:27;;17897:63;;;;;-1:-1:-1;;;17897:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29293:173:::1;29329:5;29349:4;29368:9;29392:12;29427:4;29447:8;29293:21;:173::i;:::-;29281:185;;29483:4;-1:-1:-1::0;;;;;29477:20:0::1;;29498:9;29477:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29477:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29477:31:0;;;;29519:45;29550:2;29554:9;29519:30;:45::i;:::-;29041:531:::0;;;;;;;;:::o;33609:824::-;33823:21;33795:8;17917:15;17905:8;:27;;17897:63;;;;;-1:-1:-1;;;17897:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33895:4:0::1;33870:29;:4:::0;;-1:-1:-1;;33875:15:0;;33870:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33870:21:0::1;-1:-1:-1::0;;;;;33870:29:0::1;;33862:70;;;::::0;;-1:-1:-1;;;33862:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;33953:54;33982:7;33991:9;34002:4;;33953:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33953:28:0::1;::::0;-1:-1:-1;;;33953:54:0:i:1;:::-;33943:64;;34040:11;34026:7;34034:1;34026:10;;;;;;;;;;;;;;:25;;34018:76;;;;-1:-1:-1::0;;;34018:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27870:1165:::0;28108:14;28089:8;17917:15;17905:8;:27;;17897:63;;;;;-1:-1:-1;;;17897:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;28135:18:::1;28163:8;-1:-1:-1::0;;;;;28156:26:0::1;;28183:2;28156:30;;;;;;;;;;;;;-1:-1:-1::0;;;;;28156:30:0::1;-1:-1:-1::0;;;;;28156:30:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28156:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28156:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28156:30:0;;-1:-1:-1;28225:12:0::1;28240:50;28264:7;28273:6:::0;28281:8;28240:23:::1;:50::i;:::-;28301:61;::::0;;;;;28334:10:::1;28301:61;::::0;::::1;::::0;-1:-1:-1;;;;;28301:32:0;::::1;:61:::0;;;;;;;;;;;;;;28225:65;;-1:-1:-1;28301:32:0;;::::1;::::0;:61;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;28301:32:0;:61;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;28301:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28301:61:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;28399:39:0::1;::::0;;;;;28432:4:::1;28399:39;::::0;::::1;::::0;;;-1:-1:-1;;;;;28399:24:0;::::1;::::0;::::1;::::0;:39;;;;;;;;;;;-1:-1:-1;28399:24:0;:39;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;28399:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28399:39:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;28399:39:0;28491;;;;;28524:4:::1;28491:39;::::0;::::1;::::0;;;28449:82:::1;::::0;28477:6;;28485:4;;-1:-1:-1;;;;;28491:24:0;::::1;::::0;::::1;::::0;:39;;;;;28399::::1;::::0;28491;;;;;;;;:24;:39;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;28491:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28491:39:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28491:39:0;28449:27:::1;:82::i;:::-;28560:84;28588:8;28598:2;28609:8;-1:-1:-1::0;;;;;28602:26:0::1;;28637:4;28602:41;;;;;;;;;;;;;-1:-1:-1::0;;;;;28602:41:0::1;-1:-1:-1::0;;;;;28602:41:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;28560:84:0;-1:-1:-1::0;28732:16:0::1;::::0;;28746:1:::1;28732:16:::0;;;28708:21:::1;28732:16:::0;;::::1;::::0;;28708:21;28732:16:::1;::::0;::::1;::::0;;109:14:-1::1;28732:16:0::0;88:42:-1::1;144:17;::::0;-1:-1;28732:16:0::1;28708:40;;28781:6;28789:8;28760:4;28765:1;28760:7;;;;;;;;;;;;;28769:4;28774:1;28769:7;;;;;;;;-1:-1:-1::0;;;;;28759:39:0;;::::1;28769:7;::::0;;::::1;::::0;;;;;28759:39;;::::1;::::0;;28809:44:::1;28844:4:::0;28850:2;28809:34:::1;:44::i;:::-;17971:1;28887:49;28922:13;28894:8;-1:-1:-1::0;;;;;28887:26:0::1;;28914:2;28887:30;;;;;;;;;;;;;-1:-1:-1::0;;;;;28887:30:0::1;-1:-1:-1::0;;;;;28887:30:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28887:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28887:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28887:30:0;;:49:::1;:34;:49;:::i;:::-;28875:61;;28968:12;28955:9;:25;;28947:80;;;;-1:-1:-1::0;;;28947:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17971:1;27870:1165:::0;;;;;;;;;:::o;27146:716::-;27464:14;27491:12;27506:45;27530:7;27539:5;27546:4;27506:23;:45::i;:::-;27491:60;;27562:10;27575;:33;;27599:9;27575:33;;;-1:-1:-1;;27575:33:0;27619:79;;;;;;27646:10;27619:79;;;;27666:4;27619:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27562:46;;-1:-1:-1;;;;;;27619:26:0;;;;;:79;;;;;-1:-1:-1;;27619:79:0;;;;;;;;-1:-1:-1;27619:26:0;:79;;;2:2:-1;;;;27:1;24;17:12;2:2;27619:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27619:79:0;;;;27721:133;27783:5;27790:9;27801:14;27817:12;27831:2;27835:8;27721:47;:133::i;:::-;27709:145;27146:716;-1:-1:-1;;;;;;;;;;;;;27146:716:0:o;37458:712::-;37692:8;17917:15;17905:8;:27;;17897:63;;;;;-1:-1:-1;;;17897:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37713:138:::1;37759:4;;37764:1;37759:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;37759:7:0::1;37768:10;37780:50;37804:7;37813:4;;37818:1;37813:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;37813:7:0::1;37822:4;;37827:1;37822:7;;;;;;37780:50;37832:8;37713:31;:138::i;:::-;37862:18;37890:4:::0;;-1:-1:-1;;37895:15:0;;37890:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;37890:21:0::1;-1:-1:-1::0;;;;;37883:39:0::1;;37923:2;37883:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;37883:43:0::1;-1:-1:-1::0;;;;;37883:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;37883:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;37883:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;37883:43:0;37937:44:::1;::::0;;37883:43:::1;37937:44:::0;;::::1;::::0;;;;;;;;;;;37883:43;;-1:-1:-1;37937:44:0::1;::::0;;;37972:4;;;;;;37937:44;::::1;::::0;37972:4;;37937:44;37972:4;37937:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;37978:2:0;;-1:-1:-1;37937:34:0::1;::::0;-1:-1:-1;;37937:44:0:i:1;:::-;38080:12:::0;38014:62:::1;38062:13:::0;38021:4;;-1:-1:-1;;38026:15:0;;38021:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;38021:21:0::1;-1:-1:-1::0;;;;;38014:39:0::1;;38054:2;38014:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;38014:43:0::1;-1:-1:-1::0;;;;;38014:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;38014:62:0;:78;;37992:170;;;;-1:-1:-1::0;;;37992:170:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17971:1;37458:712:::0;;;;;;;:::o;39029:840::-;39296:8;17917:15;17905:8;:27;;17897:63;;;;;-1:-1:-1;;;17897:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39355:4:0::1;39330:29;:4:::0;;-1:-1:-1;;39335:15:0;;39330:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;39330:21:0::1;-1:-1:-1::0;;;;;39330:29:0::1;;39322:70;;;::::0;;-1:-1:-1;;;39322:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;39403:138;39449:4;;39454:1;39449:7;;;;;;39403:138;39552:55;39587:4;;39552:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;39601:4:0::1;::::0;-1:-1:-1;39552:34:0::1;::::0;-1:-1:-1;;39552:55:0:i:1;:::-;39635:37;::::0;;;;;39666:4:::1;39635:37;::::0;::::1;::::0;;;39618:14:::1;::::0;-1:-1:-1;;;;;39642:4:0::1;39635:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;39635:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;39635:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;39635:37:0;;-1:-1:-1;39691:25:0;;::::1;;39683:80;;;;-1:-1:-1::0;;;39683:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39780:4;-1:-1:-1::0;;;;;39774:20:0::1;;39795:9;39774:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;39774:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;39774:31:0;;;;39816:45;39847:2;39851:9;39816:30;:45::i;32910:693::-:0;33126:21;33098:8;17917:15;17905:8;:27;;17897:63;;;;;-1:-1:-1;;;17897:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33184:4:::1;-1:-1:-1::0;;;;;33173:15:0::1;:4;;33178:1;33173:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;33173:7:0::1;-1:-1:-1::0;;;;;33173:15:0::1;;33165:56;;;::::0;;-1:-1:-1;;;33165:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;33242:55;33272:7;33281:9;33292:4;;33242:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33242:29:0::1;::::0;-1:-1:-1;;;33242:55:0:i:1;:::-;33232:65;;33347:12;33316:7;33341:1;33324:7;:14;:18;33316:27;;;;;;;;;;;;;;:43;;33308:98;;;;-1:-1:-1::0;;;33308:98:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33423:4;-1:-1:-1::0;;;;;33417:19:0::1;;33444:7;33452:1;33444:10;;;;;;;;;;;;;;33417:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33417:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33417:40:0;;;;;33481:4;-1:-1:-1::0;;;;;33475:20:0::1;;33496:50;33520:7;33529:4;;33534:1;33529:7;;;;;;33496:50;33548:7;33556:1;33548:10;;;;;;;;;;;;;;33475:84;;;;;;;;;;;;;-1:-1:-1::0;;;;;33475:84:0::1;-1:-1:-1::0;;;;;33475:84:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33475:84:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33475:84:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33475:84:0;33468:92:::1;;;;33571:24;33577:7;33586:4;;33571:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33592:2:0;;-1:-1:-1;33571:5:0::1;::::0;-1:-1:-1;;33571:24:0:i:1;30222:600::-:0;30487:14;30514:12;30529:45;30553:7;30562:5;30569:4;30529:23;:45::i;:::-;30514:60;;30585:10;30598;:33;;30622:9;30598:33;;;-1:-1:-1;;30598:33:0;30642:79;;;;;;30669:10;30642:79;;;;30689:4;30642:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30585:46;;-1:-1:-1;;;;;;30642:26:0;;;;;:79;;;;;-1:-1:-1;;30642:79:0;;;;;;;;-1:-1:-1;30642:26:0;:79;;;2:2:-1;;;;27:1;24;17:12;2:2;30642:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30642:79:0;;;;30744:70;30769:5;30776:9;30787:12;30801:2;30805:8;30744:24;:70::i;:::-;30732:82;30222:600;-1:-1:-1;;;;;;;;;;;;30222:600:0:o;40472:502::-;40625:8;17917:15;17905:8;:27;;17897:63;;;;;-1:-1:-1;;;17897:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;40646:12:::1;40661:45;40685:7;40694:5;40701:4;40661:23;:45::i;:::-;40646:60;;40717:14;40734:9;40717:26;;40760:4;-1:-1:-1::0;;;;;40754:19:0::1;;40781:9;40754:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;40754:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;40754:39:0;;;;;40817:4;-1:-1:-1::0;;;;;40811:20:0::1;;40832:4;40838:9;40811:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;40811:37:0::1;-1:-1:-1::0;;;;;40811:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;40811:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;40811:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;40811:37:0;40804:45:::1;;;;40860:69;40892:5;40899:10;40911:4;40917:11;40860:31;:69::i;:::-;40954:4;-1:-1:-1::0;;;;;40940:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;40940:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;40940:26:0;;;;17971:1;;40472:502:::0;;;;:::o;41482:260::-;41635:13;41673:61;41701:9;41712;41723:10;41673:27;:61::i;32301:603::-;32525:21;32506:8;17917:15;17905:8;:27;;17897:63;;;;;-1:-1:-1;;;17897:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;32569:54:::1;32598:7;32607:9;32618:4;;32569:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32569:28:0::1;::::0;-1:-1:-1;;;32569:54:0:i:1;:::-;32559:64;;32656:11;32642:7;32650:1;32642:10;;;;;;;;;;;;;;:25;;32634:76;;;;-1:-1:-1::0;;;32634:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17808:38:::0;;;:::o;41018:187::-;41115:12;41147:50;41169:7;41178:8;41188;41147:21;:50::i;26440:700::-;26706:14;26687:8;17917:15;17905:8;:27;;17897:63;;;;;-1:-1:-1;;;17897:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26749:196:::1;26779:5;26799:4;26818:9;26842:14;26871:12;26906:4;26926:8;26749:15;:196::i;:::-;26995:38;::::0;;;;;27027:4:::1;26995:38;::::0;::::1;::::0;;;26733:212;;-1:-1:-1;26956:78:0::1;::::0;-1:-1:-1;26984:5:0;;26991:2;;-1:-1:-1;;;;;26995:23:0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;26956:78:0;27051:4;-1:-1:-1::0;;;;;27045:20:0::1;;27066:9;27045:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27045:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27045:31:0;;;;27087:45;27118:2;27122:9;27087:30;:45::i;38176:847::-:0;38436:8;17917:15;17905:8;:27;;17897:63;;;;;-1:-1:-1;;;17897:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;38481:4:::1;-1:-1:-1::0;;;;;38470:15:0::1;:4;;38475:1;38470:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;38470:7:0::1;-1:-1:-1::0;;;;;38470:15:0::1;;38462:56;;;::::0;;-1:-1:-1;;;38462:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;38529:13;38545:9;38529:25;;38571:4;-1:-1:-1::0;;;;;38565:19:0::1;;38592:8;38565:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;38565:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38565:38:0;;;;;38627:4;-1:-1:-1::0;;;;;38621:20:0::1;;38642:50;38666:7;38675:4;;38680:1;38675:7;;;;;;38642:50;38694:8;38621:82;;;;;;;;;;;;;-1:-1:-1::0;;;;;38621:82:0::1;-1:-1:-1::0;;;;;38621:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;38621:82:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38621:82:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;38621:82:0;38614:90:::1;;;;38715:18;38743:4:::0;;-1:-1:-1;;38748:15:0;;38743:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;38743:21:0::1;-1:-1:-1::0;;;;;38736:39:0::1;;38776:2;38736:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;38736:43:0::1;-1:-1:-1::0;;;;;38736:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;38736:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38736:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;38736:43:0;38790:44:::1;::::0;;38736:43:::1;38790:44:::0;;::::1;::::0;;;;;;;;;;;38736:43;;-1:-1:-1;38790:44:0::1;::::0;;;38825:4;;;;;;38790:44;::::1;::::0;38825:4;;38790:44;38825:4;38790:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;38831:2:0;;-1:-1:-1;38790:34:0::1;::::0;-1:-1:-1;;38790:44:0:i:1;:::-;38933:12:::0;38867:62:::1;38915:13:::0;38874:4;;-1:-1:-1;;38879:15:0;;38874:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;38874:21:0::1;-1:-1:-1::0;;;;;38867:39:0::1;;38907:2;38867:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;38867:43:0::1;-1:-1:-1::0;;;;;38867:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;23469:859:0::0;23723:12;23737;23704:8;17917:15;17905:8;:27;;17897:63;;;;;-1:-1:-1;;;17897:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23762:12:::1;23777:48;23801:7;23810:6;23818;23777:23;:48::i;:::-;23836:61;::::0;;;;;23869:10:::1;23836:61;::::0;::::1;::::0;-1:-1:-1;;;;;23836:32:0;::::1;:61:::0;;;;;;;;;;;;;;23762:63;;-1:-1:-1;23836:32:0;;::::1;::::0;:61;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;23836:32:0;:61;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;23836:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23836:61:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;23965:28:0::1;::::0;;;;;-1:-1:-1;;;;;23965:28:0;;::::1;;::::0;::::1;::::0;;;23935:12:::1;::::0;;;23965:24;;::::1;::::0;::::1;::::0;:28;;;;;;;;;;;23935:12;23965:24;:28;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;23965:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23965:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23965:28:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;23965:28:0;-1:-1:-1;24005:14:0::1;24024:42;24051:6:::0;24059;24024:26:::1;:42::i;:::-;24004:62;;;24108:6;-1:-1:-1::0;;;;;24098:16:0::1;:6;-1:-1:-1::0;;;;;24098:16:0::1;;:58;;24139:7;24148;24098:58;;;24118:7;24127;24098:58;24077:79:::0;;-1:-1:-1;24077:79:0;-1:-1:-1;24175:21:0;;::::1;;24167:71;;;;-1:-1:-1::0;;;24167:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24268:10;24257:7;:21;;24249:71;;;;-1:-1:-1::0;;;24249:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17971:1;;;;23469:859:::0;;;;;;;;;;;:::o;17760:41::-;;;:::o;29578:638::-;29868:14;29895:12;29910:50;29934:7;29943:6;29951:8;29910:23;:50::i;:::-;29895:65;;29971:10;29984;:33;;30008:9;29984:33;;;-1:-1:-1;;29984:33:0;30028:79;;;;;;30055:10;30028:79;;;;30075:4;30028:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29971:46;;-1:-1:-1;;;;;;30028:26:0;;;;;:79;;;;;-1:-1:-1;;30028:79:0;;;;;;;;-1:-1:-1;30028:26:0;:79;;;2:2:-1;;;;27:1;24;17:12;2:2;30028:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30028:79:0;;;;30130:78;30152:6;30160:8;30170:9;30181:12;30195:2;30199:8;30130:21;:78::i;41750:252::-;41894:21;41940:54;41970:7;41979:8;41989:4;41940:29;:54::i;21868:759::-;22126:14;22107:8;17917:15;17905:8;:27;;17897:63;;;;;-1:-1:-1;;;17897:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;22153:55:::1;22175:6;22183;22191:7;22200;22153:21;:55::i;:::-;22219:12;22234:48;22258:7;22267:6;22275;22234:23;:48::i;:::-;22219:63:::0;-1:-1:-1;22297:11:0;;22293:83:::1;;22310:66;22342:6;22350:10;22362:4;22368:7;22310:31;:66::i;:::-;22391:11:::0;;22387:83:::1;;22404:66;22436:6;22444:10;22456:4;22462:7;22404:31;:66::i;:::-;22507:4;-1:-1:-1::0;;;;;22493:24:0::1;;22518:2;22493:28;;;;;;;;;;;;;-1:-1:-1::0;;;;;22493:28:0::1;-1:-1:-1::0;;;;;22493:28:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22493:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22493:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22493:28:0;;-1:-1:-1;22540:25:0;;::::1;;22532:87;;;;-1:-1:-1::0;;;22532:87:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17971:1;21868:759:::0;;;;;;;;;;:::o;25694:667::-;25983:16;26001:14;26028:12;26043:45;26067:7;26076:5;26083:4;26043:23;:45::i;:::-;26028:60;;26099:10;26112;:33;;26136:9;26112:33;;;-1:-1:-1;;26112:33:0;26156:79;;;;;;26183:10;26156:79;;;;26203:4;26156:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26099:46;;-1:-1:-1;;;;;;26156:26:0;;;;;:79;;;;;-1:-1:-1;;26156:79:0;;;;;;;;-1:-1:-1;26156:26:0;:79;;;2:2:-1;;;;27:1;24;17:12;2:2;26156:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26156:79:0;;;;26273:80;26292:5;26299:9;26310:14;26326:12;26340:2;26344:8;26273:18;:80::i;:::-;26246:107;;;;-1:-1:-1;25694:667:0;-1:-1:-1;;;;;;;;;;;;;25694:667:0:o;19664:736::-;19952:12;19966;19980:14;19933:8;17917:15;17905:8;:27;;17897:63;;;;;-1:-1:-1;;;17897:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20028:85:::1;20042:6;20050;20058:14;20074;20090:10;20102;20028:13;:85::i;:::-;20007:106:::0;;-1:-1:-1;20007:106:0;-1:-1:-1;20124:12:0::1;20139:48;20163:7;20172:6:::0;20180;20139:23:::1;:48::i;:::-;20124:63;;20198:66;20230:6;20238:10;20250:4;20256:7;20198:31;:66::i;:::-;20275;20307:6;20315:10;20327:4;20333:7;20275:31;:66::i;:::-;20378:4;-1:-1:-1::0;;;;;20364:24:0::1;;20389:2;20364:28;;;;;;;;;;;;;-1:-1:-1::0;;;;;20364:28:0::1;-1:-1:-1::0;;;;;20364:28:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20364:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20364:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20364:28:0;19664:736;;;;-1:-1:-1;20364:28:0;;-1:-1:-1;19664:736:0;;-1:-1:-1;;;;;;;;;19664:736:0:o;20406:972::-;20659:16;20677:14;20693;20640:8;17917:15;17905:8;:27;;17897:63;;;;;-1:-1:-1;;;17897:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20747:176:::1;20775:5;20795:4;20814:18;20847:9;20871:14;20900:12;20747:13;:176::i;:::-;20720:203:::0;;-1:-1:-1;20720:203:0;-1:-1:-1;20934:12:0::1;20949:45;20973:7;20982:5:::0;20989:4:::1;20949:23;:45::i;:::-;20934:60;;21005:69;21037:5;21044:10;21056:4;21062:11;21005:31;:69::i;:::-;21091:4;-1:-1:-1::0;;;;;21085:19:0::1;;21112:9;21085:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21085:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21085:39:0;;;;;21148:4;-1:-1:-1::0;;;;;21142:20:0::1;;21163:4;21169:9;21142:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;21142:37:0::1;-1:-1:-1::0;;;;;21142:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21142:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21142:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;21142:37:0;21135:45:::1;;;;21217:4;-1:-1:-1::0;;;;;21203:24:0::1;;21228:2;21203:28;;;;;;;;;;;;;-1:-1:-1::0;;;;;21203:28:0::1;-1:-1:-1::0;;;;;21203:28:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21203:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21203:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;21203:28:0;;-1:-1:-1;21282:9:0::1;:21:::0;-1:-1:-1;21278:92:0::1;;;21305:65;21336:10;21360:9;21348;:21;21305:30;:65::i;:::-;17971:1;20406:972:::0;;;;;;;;;;;:::o;35291:806::-;35504:21;35476:8;17917:15;17905:8;:27;;17897:63;;;;;-1:-1:-1;;;17897:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35562:4:::1;-1:-1:-1::0;;;;;35551:15:0::1;:4;;35556:1;35551:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;35551:7:0::1;-1:-1:-1::0;;;;;35551:15:0::1;;35543:56;;;::::0;;-1:-1:-1;;;35543:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;35620:54;35649:7;35658:9;35669:4;;35620:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;35620:28:0::1;::::0;-1:-1:-1;;;35620:54:0:i:1;:::-;35610:64;;35707:9;35693:7;35701:1;35693:10;;;;;;;;;;;;;;:23;;35685:74;;;;-1:-1:-1::0;;;35685:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35776:4;-1:-1:-1::0;;;;;35770:19:0::1;;35797:7;35805:1;35797:10;;;;;;;;;;;;;;35770:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;35770:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35770:40:0;;;;;35834:4;-1:-1:-1::0;;;;;35828:20:0::1;;35849:50;35873:7;35882:4;;35887:1;35882:7;;;;;;35849:50;35901:7;35909:1;35901:10;;;;;;;;;;;;;;35828:84;;;;;;;;;;;;;-1:-1:-1::0;;;;;35828:84:0::1;-1:-1:-1::0;;;;;35828:84:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;35828:84:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35828:84:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;35828:84:0;35821:92:::1;;;;35924:24;35930:7;35939:4;;35924:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;35945:2:0;;-1:-1:-1;35924:5:0::1;::::0;-1:-1:-1;;35924:24:0:i:1;:::-;36011:7;36019:1;36011:10;;;;;;;;;;;;;;35999:9;:22;35995:94;;;36023:66;36054:10;36078:7;36086:1;36078:10;;;;;;;;;;;;;;36066:9;:22;36023:30;:66::i;16578:398::-:0;16810:45;;;-1:-1:-1;;;;;16810:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;16810:45:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;16810:45:0;179:29:-1;160:49;;16799:57:0;;;;16764:12;;16778:17;;16799:10;;;;16810:45;16799:57;;;25:18:-1;16799:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;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;;;16799: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;;16763:93:0;;;;16875:7;:57;;;;-1:-1:-1;16887:11:0;;:16;;:44;;;16918:4;16907:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16907:24:0;16887:44;16867:101;;;;;-1:-1:-1;;;16867:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16578:398;;;;;:::o;17440:200::-;17553:12;;;17513;17553;;;;;;;;;-1:-1:-1;;;;;17531:7:0;;;17546:5;;17531:35;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;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;;;17531:35: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;;17512:54:0;;;17585:7;17577:55;;;;-1:-1:-1;;;17577:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17440:200;;;:::o;12854:515::-;12947:14;12993:1;12982:8;:12;12974:67;;;;-1:-1:-1;;;12974:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13072:1;13060:9;:13;:31;;;;;13090:1;13077:10;:14;13060:31;13052:83;;;;-1:-1:-1;;;13052:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13146:20;13169:17;:8;13182:3;13169:17;:12;:17;:::i;:::-;13146:40;-1:-1:-1;13197:14:0;13214:31;13146:40;13234:10;13214:31;:19;:31;:::i;:::-;13197:48;-1:-1:-1;13256:16:0;13275:40;13299:15;13275:19;:9;13289:4;13275:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;13256:59;;13350:11;13338:9;:23;;;;;;;12854:515;-1:-1:-1;;;;;;;12854:515:0:o;14042:510::-;14143:21;14200:1;14185:4;:11;:16;;14177:58;;;;;-1:-1:-1;;;14177:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14267:4;:11;14256:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14256:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14256:23:0;;14246:33;;14303:8;14290:7;14298:1;14290:10;;;;;;;;;;;;;:21;;;;;14327:6;14322:223;14353:1;14339:4;:11;:15;14335:1;:19;14322:223;;;14377:14;14393:15;14412:42;14424:7;14433:4;14438:1;14433:7;;;;;;;;;;;;;;14442:4;14447:1;14451;14447:5;14442:11;;;;;;;;;;;;;;14412;:42::i;:::-;14376:78;;;;14486:47;14499:7;14507:1;14499:10;;;;;;;;;;;;;;14511:9;14522:10;14486:12;:47::i;:::-;14469:7;14477:1;14481;14477:5;14469:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;14356:3:0;;14322:223;;;;14042:510;;;;;:::o;11374:478::-;11463:12;11489:14;11505;11523:26;11534:6;11542;11523:10;:26::i;:::-;11687:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;11687:32:0;;;;;11677:43;;;;;;11590:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11590:251:0;;;;;;;11580:262;;;;;;;;;11374:478;-1:-1:-1;;;;;11374:478:0:o;16984:448::-;17255:51;;;-1:-1:-1;;;;;17255:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;17255:51:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;17255:51:0;179:29:-1;160:49;;17244:63:0;;;;17209:12;;17223:17;;17244:10;;;;17255:51;17244:63;;;25:18:-1;17244:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;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;;;17244: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;;17208:99:0;;;;17326:7;:57;;;;-1:-1:-1;17338:11:0;;:16;;:44;;;17369:4;17358:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17358:24:0;17338:44;17318:106;;;;-1:-1:-1;;;17318:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16984:448;;;;;;:::o;30933:731::-;31040:6;31035:622;31066:1;31052:4;:11;:15;31048:1;:19;31035:622;;;31090:13;31105:14;31124:4;31129:1;31124:7;;;;;;;;;;;;;;31133:4;31138:1;31142;31138:5;31133:11;;;;;;;;;;;;;;31089:56;;;;31161:14;31180:41;31207:5;31214:6;31180:26;:41::i;:::-;31160:61;;;31236:14;31253:7;31261:1;31265;31261:5;31253:14;;;;;;;;;;;;;;31236:31;;31283:15;31300;31328:6;-1:-1:-1;;;;;31319:15:0;:5;-1:-1:-1;;;;;31319:15:0;;:61;;31361:9;31377:1;31319:61;;;31343:1;31347:9;31319:61;31282:98;;;;31395:10;31426:1;31412:4;:11;:15;31408:1;:19;:81;;31486:3;31408:81;;;31430:53;31454:7;31463:6;31471:4;31476:1;31480;31476:5;31471:11;;;;;;;;;;;;;;31430:23;:53::i;:::-;31395:94;;31518:47;31542:7;31551:5;31558:6;31518:23;:47::i;:::-;-1:-1:-1;;;;;31504:67:0;;31590:10;31602;31614:2;31628:1;31618:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;31618:12:0;87:42:-1;143:17;;-1:-1;31618:12:0;;31504:141;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31504:141:0;-1:-1:-1;;;;;31504:141: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;31504:141:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31504:141:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;31069:3:0;;;;;-1:-1:-1;31035:622:0;;-1:-1:-1;;;;;;;;31035:622:0;;;30933:731;;;:::o;14633:531::-;14734:21;14791:1;14776:4;:11;:16;;14768:58;;;;;-1:-1:-1;;;14768:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14858:4;:11;14847:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14847:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14847:23:0;;14837:33;;14911:9;14881:7;14906:1;14889:7;:14;:18;14881:27;;;;;;;;;;;;;;;;;:39;14945:11;;-1:-1:-1;;14945:15:0;14931:226;14962:5;;14931:226;;14990:14;15006:15;15025:42;15037:7;15046:4;15055:1;15051;:5;15046:11;;;;;;;;;;;;;;15059:4;15064:1;15059:7;;;;;;;15025:42;14989:78;;;;15099:46;15111:7;15119:1;15111:10;;;;;;;;;;;;;;15123:9;15134:10;15099:11;:46::i;:::-;15082:7;15094:1;15090;:5;15082:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;14969:3:0;14931:226;;21390:472;21608:49;;;;;;-1:-1:-1;;;;;21608:49:0;;;;;;;;;;;;;;;;21669:1;;21625:7;21608:33;;;;:49;;;;;;;;;;;;;;:33;:49;;;2:2:-1;;;;27:1;24;17:12;2:2;21608:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21608:49:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21608:49:0;-1:-1:-1;;;;;21608:63:0;;21604:251;;;21706:1;21696:7;:11;:26;;;;;21721:1;21711:7;:11;21696:26;21688:88;;;;-1:-1:-1;;;21688:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21791:52;;;;;;-1:-1:-1;;;;;21791:52:0;;;;;;;;;;;;;;;;21808:7;21791:36;;;;;;:52;;;;;;;;;;;;;;;-1:-1:-1;21791:36:0;:52;;;2:2:-1;;;;27:1;24;17:12;2:2;21791:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21791:52:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;36244:1208:0;36357:6;36352:1093;36383:1;36369:4;:11;:15;36365:1;:19;36352:1093;;;36407:13;36422:14;36441:4;36446:1;36441:7;;;;;;;;;;;;;;36450:4;36455:1;36459;36455:5;36450:11;;;;;;;;;;;;;;36406:56;;;;36478:14;36497:41;36524:5;36531:6;36497:26;:41::i;:::-;36477:61;;;36553:18;36588:47;36612:7;36621:5;36628:6;36588:23;:47::i;:::-;36553:83;;36651:16;36682:17;36770:13;36785;36803:4;-1:-1:-1;;;;;36803:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36803:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36803:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;36803:18:0;;;;;;;36769:52;;;;;-1:-1:-1;36769:52:0;;-1:-1:-1;36837:17:0;;-1:-1:-1;;;;;36878:15:0;;;;;;;:61;;36920:8;36930;36878:61;;;36897:8;36907;36878:61;36836:103;;;;36968:56;37011:12;36975:5;-1:-1:-1;;;;;36968:23:0;;37000:4;36968:38;;;;;;;;;;;;;-1:-1:-1;;;;;36968:38:0;-1:-1:-1;;;;;36968:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;36968:56:0;36954:70;;37054;37083:11;37096:12;37110:13;37054:28;:70::i;:::-;37039:85;;36352:1093;;;;37155:15;37172;37200:6;-1:-1:-1;;;;;37191:15:0;:5;-1:-1:-1;;;;;37191:15:0;;:67;;37236:12;37255:1;37191:67;;;37215:1;37219:12;37191:67;37154:104;;;;37273:10;37304:1;37290:4;:11;:15;37286:1;:19;:81;;37364:3;37286:81;;;37308:53;37332:7;37341:6;37349:4;37354:1;37358;37354:5;37349:11;;;;;;;37308:53;37420:12;;;37430:1;37420:12;;;;;;;;;;37382:51;;;;;;;;;;;;;;;-1:-1:-1;;;;;37382:51:0;;;;;;;;;;;;;;;;;;;;;;37273:94;;-1:-1:-1;37382:9:0;;;;;;37392:10;;37404;;37273:94;;37420:12;;37382:51;;;;;;;;37420:12;;37382:51;;;;37420: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;37382:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37382:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;36386:3:0;;;;;-1:-1:-1;36352:1093:0;;-1:-1:-1;;;;;;;;;;36352:1093:0;15671:129;15755:5;;;15750:16;;;;15742:50;;;;;-1:-1:-1;;;15742:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;13490:470;13583:13;13629:1;13617:9;:13;13609:69;;;;-1:-1:-1;;;13609:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13709:1;13697:9;:13;:31;;;;;13727:1;13714:10;:14;13697:31;13689:83;;;;-1:-1:-1;;;13689:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13783:14;13800:34;13829:4;13800:24;:9;13814;13800:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;13783:51;-1:-1:-1;13845:16:0;13864:34;13894:3;13864:25;:10;13879:9;13864:25;:14;:25;:::i;:34::-;13845:53;;13920:32;13950:1;13933:11;13921:9;:23;;;;;;;13920:32;:29;:32;:::i;:::-;13909:43;13490:470;-1:-1:-1;;;;;;13490:470:0:o;12413:319::-;12495:12;12538:1;12528:7;:11;12520:60;;;;-1:-1:-1;;;12520:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12610:1;12599:8;:12;:28;;;;;12626:1;12615:8;:12;12599:28;12591:80;;;;-1:-1:-1;;;12591:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12716:8;12692:21;:7;12704:8;12692:21;:11;:21;:::i;:::-;:32;;;;;;;12413:319;-1:-1:-1;;;;12413:319:0:o;10935:347::-;11010:14;11026;11071:6;-1:-1:-1;;;;;11061:16:0;:6;-1:-1:-1;;;;;11061:16:0;;;11053:65;;;;-1:-1:-1;;;11053:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11157:6;-1:-1:-1;;;;;11148:15:0;:6;-1:-1:-1;;;;;11148:15:0;;:53;;11186:6;11194;11148:53;;;11167:6;11175;11148:53;11129:72;;-1:-1:-1;11129:72:0;-1:-1:-1;;;;;;11220:20:0;;11212:62;;;;;-1:-1:-1;;;11212:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10935:347;;;;;:::o;18275:1383::-;18588:49;;;;;;-1:-1:-1;;;;;18588:49:0;;;;;;;;;;;;;;;;18493:12;;;;;;18605:7;18588:33;;;;;;:49;;;;;;;;;;;;;;;:33;:49;;;2:2:-1;;;;27:1;24;17:12;2:2;18588:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18588:49:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18588:49:0;-1:-1:-1;;;;;18588:63:0;;18584:148;;;18668:52;;;;;;-1:-1:-1;;;;;18668:52:0;;;;;;;;;;;;;;;;18685:7;18668:36;;;;;;:52;;;;;;;;;;;;;;;-1:-1:-1;18668:36:0;:52;;;2:2:-1;;;;27:1;24;17:12;2:2;18668:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18668:52:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;18584:148:0;18743:13;18758;18775:52;18803:7;18812:6;18820;18775:27;:52::i;:::-;18742:85;;;;18842:8;18854:1;18842:13;:30;;;;-1:-1:-1;18859:13:0;;18842:30;18838:813;;;18911:14;;-1:-1:-1;18927:14:0;;-1:-1:-1;18838:813:0;;;18975:19;18997:57;19019:14;19035:8;19045;18997:21;:57::i;:::-;18975:79;;19091:14;19073;:32;19069:571;;19152:10;19134:14;:28;;19126:78;;;;-1:-1:-1;;;19126:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19245:14;;-1:-1:-1;19261:14:0;-1:-1:-1;19261:14:0;19069:571;;;19317:19;19339:57;19361:14;19377:8;19387;19339:21;:57::i;:::-;19317:79;;19440:14;19422;:32;;19415:40;;;;19500:10;19482:14;:28;;19474:78;;;;-1:-1:-1;;;19474:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19593:14;-1:-1:-1;19609:14:0;;-1:-1:-1;19069:571:0;18838:813;;18275:1383;;;;;;;;;;;:::o;15808:142::-;15860:6;15887;;;:30;;-1:-1:-1;;15902:5:0;;;15916:1;15911;15902:5;15911:1;15897:15;;;;;:20;15887:30;15879:63;;;;;-1:-1:-1;;;15879:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;15535:128;15619:5;;;15614:16;;;;15606:49;;;;;-1:-1:-1;;;15606:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;11910:390;12003:13;12018;12045:14;12064:26;12075:6;12083;12064:10;:26::i;:::-;12044:46;;;12102:13;12117;12149:32;12157:7;12166:6;12174;12149:7;:32::i;:::-;-1:-1:-1;;;;;12135:59:0;;:61;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12135:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12135:61:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12135:61:0;;;;;;;12101:95;;;;;-1:-1:-1;12101:95:0;;-1:-1:-1;;;;;;12230:16:0;;;;;;;:62;;12273:8;12283;12230:62;;;12250:8;12260;12230:62;12207:85;;;;-1:-1:-1;11910:390:0;-1:-1:-1;;;;;;;11910:390:0:o

Swarm Source

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