Contract 0x8420672ee90f43c46a13715f714c919d04296f07 11

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x546c2fbab59044d04288d8f60bf287c556ae7e8ec4619cf25fa96c00c9312356Swap Exact Token...1698790802024-01-13 0:42:0676 days 12 hrs ago0xa509a323095e8c43d7990ae275a81bad3d266c51 IN  0x8420672ee90f43c46a13715f714c919d04296f070 ETH0.000070610.1
0x2b33014b1758ee8ea5a2a0d71302cd0c360695f32a1d922983a1e6b3976ba034Swap Exact Token...1698789472024-01-13 0:41:3376 days 12 hrs ago0xa509a323095e8c43d7990ae275a81bad3d266c51 IN  0x8420672ee90f43c46a13715f714c919d04296f070 ETH0.000071090.1
0x78b8d21bcf615dc4f7aef1ad163e18274bcbaa55fb5fc538086e0dd8f393f31cSwap Exact Token...1698788072024-01-13 0:40:5876 days 12 hrs ago0xa509a323095e8c43d7990ae275a81bad3d266c51 IN  0x8420672ee90f43c46a13715f714c919d04296f070 ETH0.000071090.1
0xbc157649b69bd9913ff8f58c2036e295482a3db83189c6c16ef4bb5cc033a7adRemove Liquidity1698775612024-01-13 0:35:4876 days 12 hrs ago0xa509a323095e8c43d7990ae275a81bad3d266c51 IN  0x8420672ee90f43c46a13715f714c919d04296f070 ETH0.00006987 0.1
0x5d4307c17ac5479b9931abf7266c0b2a2aac2bff08d1cbe66819cb3870f701daAdd Liquidity1698724492024-01-13 0:14:3076 days 12 hrs ago0xa509a323095e8c43d7990ae275a81bad3d266c51 IN  0x8420672ee90f43c46a13715f714c919d04296f070 ETH0.000084360.1
0xc8e2fc058b4e2defb253bac82de6dfca20bb9a0b98bbf093f4facb9f7438a26dSwap ETH For Exa...1698722532024-01-13 0:13:4376 days 12 hrs ago0xa509a323095e8c43d7990ae275a81bad3d266c51 IN  0x8420672ee90f43c46a13715f714c919d04296f070.003 ETH0.000072450.1
0x1f5aa996f10df9b2fa647517b24e228147940c7bf643db37265519f59b6c9324Add Liquidity1698719042024-01-13 0:12:1576 days 12 hrs ago0xa509a323095e8c43d7990ae275a81bad3d266c51 IN  0x8420672ee90f43c46a13715f714c919d04296f070 ETH0.0000810.1
0x153ddd0356c494f7f8098c2ab0120a800b20f5ee6fa423d48c1290879d9f8e3aSwap ETH For Exa...1698718832024-01-13 0:12:1076 days 12 hrs ago0xa509a323095e8c43d7990ae275a81bad3d266c51 IN  0x8420672ee90f43c46a13715f714c919d04296f070.006 ETH0.000072450.1
0xce821d8bcdeecfebf49065717175cafc271305a9abca4787320b7cae504109f9Add Liquidity1698716962024-01-13 0:11:2376 days 12 hrs ago0xa509a323095e8c43d7990ae275a81bad3d266c51 IN  0x8420672ee90f43c46a13715f714c919d04296f070 ETH0.000081810.1
0x7d4641f373c67780f69d172b8a3854d07fc4ea6560459ae728b36b328268d6dcSwap ETH For Exa...1698716712024-01-13 0:11:1776 days 12 hrs ago0xa509a323095e8c43d7990ae275a81bad3d266c51 IN  0x8420672ee90f43c46a13715f714c919d04296f070.006 ETH0.000072450.1
0xdb8d2a7b451aae38b5a743620d17561f251a6705b0b7f9070e5479ff46cb8197Add Liquidity1698714572024-01-13 0:10:2376 days 12 hrs ago0xa509a323095e8c43d7990ae275a81bad3d266c51 IN  0x8420672ee90f43c46a13715f714c919d04296f070 ETH0.0000810.1
0x5e97954481e4571823c38e50f11527bf9f50069584d182d4f867ebd9366581f8Swap ETH For Exa...1698713002024-01-13 0:09:4476 days 12 hrs ago0xa509a323095e8c43d7990ae275a81bad3d266c51 IN  0x8420672ee90f43c46a13715f714c919d04296f070.006 ETH0.000072450.1
0x4556a1ea1afd7331ad42b81dd1371ddcfd28bd0400539ab7375dd7e94d763b37Add Liquidity1698710522024-01-13 0:08:4176 days 12 hrs ago0xa509a323095e8c43d7990ae275a81bad3d266c51 IN  0x8420672ee90f43c46a13715f714c919d04296f070 ETH0.000083520.1
0x34a65e7d97eb66db7266a4d1c95fd9e8dc2a7b888853fc2c56e1fbf4a4505ac1Swap ETH For Exa...1698684952024-01-12 23:57:4776 days 12 hrs ago0xa509a323095e8c43d7990ae275a81bad3d266c51 IN  0x8420672ee90f43c46a13715f714c919d04296f070.004 ETH0.000080210.1
0x19338e9708004aff0b3b9da1d75c5834027b8b1a72a5657721f3241bb2b6434bSwap ETH For Exa...1698681762024-01-12 23:56:2176 days 12 hrs ago0xa509a323095e8c43d7990ae275a81bad3d266c51 IN  0x8420672ee90f43c46a13715f714c919d04296f070.001 ETH0.00008020.1
0x400ae341e75f29eab9d65c86792ceeb186d6a40d68fe7f024793711c18a2c08aSwap ETH For Exa...1698677922024-01-12 23:54:4476 days 12 hrs ago0xa509a323095e8c43d7990ae275a81bad3d266c51 IN  0x8420672ee90f43c46a13715f714c919d04296f070.0000001 ETH0.000096710.1
0x522d812eab4d307f0edbab9be096fbe967d15aa2c90c8d496e2e9f98befb0428Add Liquidity ET...1656917052023-12-31 16:52:2188 days 19 hrs ago0x0e80e91f6fbdfcb7ee5fc4e0afe39a68306adc94 IN  0x8420672ee90f43c46a13715f714c919d04296f070.000042881647629 ETH0.00007636 0.1
0x13cc3f44b3877b47774b83c87c592e5cfb8c2f1b3153fa604f03ce83452d74a7Swap Exact Token...1656914492023-12-31 16:51:1788 days 19 hrs ago0x0e80e91f6fbdfcb7ee5fc4e0afe39a68306adc94 IN  0x8420672ee90f43c46a13715f714c919d04296f070 ETH0.00007937 0.1
0x43fd67ff1fcb1889f02d4de035c4693768150376aaac466f86143a1824287a1bSwap Exact Token...1407667402023-10-15 9:14:49166 days 3 hrs ago0xfa1f780a446e9cdb4c51b031686bcf8b02f8ed7c IN  0x8420672ee90f43c46a13715f714c919d04296f070 ETH0.00005122 0.1
0xc5e84b16b8787c602330ccdd1901fa08d4c26ebfb4c4d46d522776487429a0bcRemove Liquidity...1407666052023-10-15 9:14:14166 days 3 hrs ago0xfa1f780a446e9cdb4c51b031686bcf8b02f8ed7c IN  0x8420672ee90f43c46a13715f714c919d04296f070 ETH0.00005707 0.1
0xde5884b9b02388d3b3d1a27961a64ea5a9f03b2dbd36d2485f382ede81b5e537Swap Exact Token...1407649592023-10-15 9:06:30166 days 3 hrs ago0xfa1f780a446e9cdb4c51b031686bcf8b02f8ed7c IN  0x8420672ee90f43c46a13715f714c919d04296f070 ETH0.0000431 0.1
0x894cdfe04ac7b50493e6514434307b0d32c1100ff3b6ce3bbed8898836387338Swap Exact Token...1392050112023-10-10 2:10:28171 days 10 hrs ago0xfa1f780a446e9cdb4c51b031686bcf8b02f8ed7c IN  0x8420672ee90f43c46a13715f714c919d04296f070 ETH0.00004222 0.1
0x9e1fc3035a9dc69d7d32e8b52af882d5797d207ca07fad0495c20168ae7b04f2Remove Liquidity...1392046132023-10-10 2:08:44171 days 10 hrs ago0xfa1f780a446e9cdb4c51b031686bcf8b02f8ed7c IN  0x8420672ee90f43c46a13715f714c919d04296f070 ETH0.00005561 0.1
0xe1bb515a37095d46c28565d8f9f2950ac26580ab10751cda293c16d8d9561425Swap Exact Token...1392035322023-10-10 2:03:56171 days 10 hrs ago0xfa1f780a446e9cdb4c51b031686bcf8b02f8ed7c IN  0x8420672ee90f43c46a13715f714c919d04296f070 ETH0.0000405 0.1
0x21dfd8437efb3c0866953d6175bd4653f77a8ee989a73ff4ef664a61276c8d36Swap Exact Token...1340190632023-09-24 3:28:09187 days 9 hrs ago0xfa1f780a446e9cdb4c51b031686bcf8b02f8ed7c IN  0x8420672ee90f43c46a13715f714c919d04296f070 ETH0.00004986 0.1
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x546c2fbab59044d04288d8f60bf287c556ae7e8ec4619cf25fa96c00c93123561698790802024-01-13 0:42:0676 days 12 hrs ago 0x8420672ee90f43c46a13715f714c919d04296f070xa509a323095e8c43d7990ae275a81bad3d266c510.008235665221939791 ETH
0x546c2fbab59044d04288d8f60bf287c556ae7e8ec4619cf25fa96c00c93123561698790802024-01-13 0:42:0676 days 12 hrs ago Wrapped Ether 0x8420672ee90f43c46a13715f714c919d04296f070.008235665221939791 ETH
0x2b33014b1758ee8ea5a2a0d71302cd0c360695f32a1d922983a1e6b3976ba0341698789472024-01-13 0:41:3376 days 12 hrs ago 0x8420672ee90f43c46a13715f714c919d04296f070xa509a323095e8c43d7990ae275a81bad3d266c510.00730085485705106 ETH
0x2b33014b1758ee8ea5a2a0d71302cd0c360695f32a1d922983a1e6b3976ba0341698789472024-01-13 0:41:3376 days 12 hrs ago Wrapped Ether 0x8420672ee90f43c46a13715f714c919d04296f070.00730085485705106 ETH
0x78b8d21bcf615dc4f7aef1ad163e18274bcbaa55fb5fc538086e0dd8f393f31c1698788072024-01-13 0:40:5876 days 12 hrs ago 0x8420672ee90f43c46a13715f714c919d04296f070xa509a323095e8c43d7990ae275a81bad3d266c510.007653352806529487 ETH
0x78b8d21bcf615dc4f7aef1ad163e18274bcbaa55fb5fc538086e0dd8f393f31c1698788072024-01-13 0:40:5876 days 12 hrs ago Wrapped Ether 0x8420672ee90f43c46a13715f714c919d04296f070.007653352806529487 ETH
0xc8e2fc058b4e2defb253bac82de6dfca20bb9a0b98bbf093f4facb9f7438a26d1698722532024-01-13 0:13:4376 days 12 hrs ago 0x8420672ee90f43c46a13715f714c919d04296f070xa509a323095e8c43d7990ae275a81bad3d266c510.000058102183823597 ETH
0xc8e2fc058b4e2defb253bac82de6dfca20bb9a0b98bbf093f4facb9f7438a26d1698722532024-01-13 0:13:4376 days 12 hrs ago 0x8420672ee90f43c46a13715f714c919d04296f07 Wrapped Ether0.002941897816176403 ETH
0x153ddd0356c494f7f8098c2ab0120a800b20f5ee6fa423d48c1290879d9f8e3a1698718832024-01-13 0:12:1076 days 12 hrs ago 0x8420672ee90f43c46a13715f714c919d04296f070xa509a323095e8c43d7990ae275a81bad3d266c510.000272662369626012 ETH
0x153ddd0356c494f7f8098c2ab0120a800b20f5ee6fa423d48c1290879d9f8e3a1698718832024-01-13 0:12:1076 days 12 hrs ago 0x8420672ee90f43c46a13715f714c919d04296f07 Wrapped Ether0.005727337630373988 ETH
0x7d4641f373c67780f69d172b8a3854d07fc4ea6560459ae728b36b328268d6dc1698716712024-01-13 0:11:1776 days 12 hrs ago 0x8420672ee90f43c46a13715f714c919d04296f070xa509a323095e8c43d7990ae275a81bad3d266c510.000273403963157912 ETH
0x7d4641f373c67780f69d172b8a3854d07fc4ea6560459ae728b36b328268d6dc1698716712024-01-13 0:11:1776 days 12 hrs ago 0x8420672ee90f43c46a13715f714c919d04296f07 Wrapped Ether0.005726596036842088 ETH
0x5e97954481e4571823c38e50f11527bf9f50069584d182d4f867ebd9366581f81698713002024-01-13 0:09:4476 days 12 hrs ago 0x8420672ee90f43c46a13715f714c919d04296f070xa509a323095e8c43d7990ae275a81bad3d266c510.000472754148389963 ETH
0x5e97954481e4571823c38e50f11527bf9f50069584d182d4f867ebd9366581f81698713002024-01-13 0:09:4476 days 12 hrs ago 0x8420672ee90f43c46a13715f714c919d04296f07 Wrapped Ether0.005527245851610037 ETH
0x34a65e7d97eb66db7266a4d1c95fd9e8dc2a7b888853fc2c56e1fbf4a4505ac11698684952024-01-12 23:57:4776 days 12 hrs ago 0x8420672ee90f43c46a13715f714c919d04296f070xa509a323095e8c43d7990ae275a81bad3d266c510.000420791134317703 ETH
0x34a65e7d97eb66db7266a4d1c95fd9e8dc2a7b888853fc2c56e1fbf4a4505ac11698684952024-01-12 23:57:4776 days 12 hrs ago 0x8420672ee90f43c46a13715f714c919d04296f07 Wrapped Ether0.003579208865682297 ETH
0x19338e9708004aff0b3b9da1d75c5834027b8b1a72a5657721f3241bb2b6434b1698681762024-01-12 23:56:2176 days 12 hrs ago 0x8420672ee90f43c46a13715f714c919d04296f070xa509a323095e8c43d7990ae275a81bad3d266c510.00029397373062743 ETH
0x19338e9708004aff0b3b9da1d75c5834027b8b1a72a5657721f3241bb2b6434b1698681762024-01-12 23:56:2176 days 12 hrs ago 0x8420672ee90f43c46a13715f714c919d04296f07 Wrapped Ether0.00070602626937257 ETH
0x400ae341e75f29eab9d65c86792ceeb186d6a40d68fe7f024793711c18a2c08a1698677922024-01-12 23:54:4476 days 12 hrs ago 0x8420672ee90f43c46a13715f714c919d04296f070xa509a323095e8c43d7990ae275a81bad3d266c510.000000029558604645 ETH
0x400ae341e75f29eab9d65c86792ceeb186d6a40d68fe7f024793711c18a2c08a1698677922024-01-12 23:54:4476 days 12 hrs ago 0x8420672ee90f43c46a13715f714c919d04296f07 Wrapped Ether0.000000070441395355 ETH
0x522d812eab4d307f0edbab9be096fbe967d15aa2c90c8d496e2e9f98befb04281656917052023-12-31 16:52:2188 days 19 hrs ago 0x8420672ee90f43c46a13715f714c919d04296f07 Wrapped Ether0.000042881647629115 ETH
0x9e1fc3035a9dc69d7d32e8b52af882d5797d207ca07fad0495c20168ae7b04f21392046132023-10-10 2:08:44171 days 10 hrs ago 0x8420672ee90f43c46a13715f714c919d04296f070xfa1f780a446e9cdb4c51b031686bcf8b02f8ed7c0.000605198082430593 ETH
0x9e1fc3035a9dc69d7d32e8b52af882d5797d207ca07fad0495c20168ae7b04f21392046132023-10-10 2:08:44171 days 10 hrs ago Wrapped Ether 0x8420672ee90f43c46a13715f714c919d04296f070.000605198082430593 ETH
0xa137c23bd8d6c8b3e72e32e7304a4510d418c3fe1f54a52e276e759e68a602311321800722023-09-18 9:53:51193 days 2 hrs ago 0x8420672ee90f43c46a13715f714c919d04296f070xd25f3ff4d63179800dce837dc5412dac1ba6133f0.000192785284924739 ETH
0xa137c23bd8d6c8b3e72e32e7304a4510d418c3fe1f54a52e276e759e68a602311321800722023-09-18 9:53:51193 days 2 hrs ago Wrapped Ether 0x8420672ee90f43c46a13715f714c919d04296f070.000192785284924739 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
WaterfallRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan.io on 2023-01-05
*/

pragma solidity =0.6.6;


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

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

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

library WaterfallLibrary {
    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, 'WaterfallLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'WaterfallLibrary: 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'4b126df5a91fc8cfb7660552eda35d39699c3986df7ad19a5e628d0be89035f1' // init code hash
            ))));
    }

    // fetches and sorts the reserves for a pair
    function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) {
        (address token0,) = sortTokens(tokenA, tokenB);
        pairFor(factory, tokenA, tokenB);
        (uint reserve0, uint reserve1,) = IWaterfallPair(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, 'WaterfallLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'WaterfallLibrary: 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, 'WaterfallLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'WaterfallLibrary: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(995);
        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, 'WaterfallLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'WaterfallLibrary: INSUFFICIENT_LIQUIDITY');
        uint numerator = reserveIn.mul(amountOut).mul(1000);
        uint denominator = reserveOut.sub(amountOut).mul(995);
        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, 'WaterfallLibrary: 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, 'WaterfallLibrary: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[amounts.length - 1] = amountOut;
        for (uint i = path.length - 1; i > 0; i--) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i]);
            amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut);
        }
    }
}

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

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

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

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

contract WaterfallRouter is IWaterfallRouter02 {
    using SafeMath for uint;

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

    modifier ensure(uint deadline) {
        require(deadline >= block.timestamp, 'WaterfallRouter: 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 (IWaterfallFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            IWaterfallFactory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = WaterfallLibrary.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = WaterfallLibrary.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'WaterfallRouter: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = WaterfallLibrary.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'WaterfallRouter: 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 = WaterfallLibrary.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IWaterfallPair(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 = WaterfallLibrary.pairFor(factory, token, WETH);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWETH(WETH).deposit{value: amountETH}();
        assert(IWETH(WETH).transfer(pair, amountETH));
        liquidity = IWaterfallPair(pair).mint(to);
        // refund dust eth, if any
        if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH);
    }

    // **** REMOVE LIQUIDITY ****
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountA, uint amountB) {
        address pair = WaterfallLibrary.pairFor(factory, tokenA, tokenB);
        IWaterfallPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = IWaterfallPair(pair).burn(to);
        (address token0,) = WaterfallLibrary.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'WaterfallRouter: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'WaterfallRouter: 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 = WaterfallLibrary.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        IWaterfallPair(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 = WaterfallLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IWaterfallPair(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 = WaterfallLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IWaterfallPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        amountETH = removeLiquidityETHSupportingFeeOnTransferTokens(
            token, liquidity, amountTokenMin, amountETHMin, to, deadline
        );
    }

    // **** SWAP ****
    // requires the initial amount to have already been sent to the first pair
    function _swap(uint[] memory amounts, address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = WaterfallLibrary.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 ? WaterfallLibrary.pairFor(factory, output, path[i + 2]) : _to;
            IWaterfallPair(WaterfallLibrary.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 = WaterfallLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'WaterfallRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, WaterfallLibrary.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 = WaterfallLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'WaterfallRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, WaterfallLibrary.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, 'WaterfallRouter: INVALID_PATH');
        amounts = WaterfallLibrary.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'WaterfallRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(WaterfallLibrary.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, 'WaterfallRouter: INVALID_PATH');
        amounts = WaterfallLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'WaterfallRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, WaterfallLibrary.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, 'WaterfallRouter: INVALID_PATH');
        amounts = WaterfallLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'WaterfallRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, WaterfallLibrary.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, 'WaterfallRouter: INVALID_PATH');
        amounts = WaterfallLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'WaterfallRouter: EXCESSIVE_INPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(WaterfallLibrary.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,) = WaterfallLibrary.sortTokens(input, output);
            IWaterfallPair pair = IWaterfallPair(WaterfallLibrary.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 = WaterfallLibrary.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? WaterfallLibrary.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, WaterfallLibrary.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,
            'WaterfallRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WETH, 'WaterfallRouter: INVALID_PATH');
        uint amountIn = msg.value;
        IWETH(WETH).deposit{value: amountIn}();
        assert(IWETH(WETH).transfer(WaterfallLibrary.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,
            'WaterfallRouter: 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, 'WaterfallRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, WaterfallLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'WaterfallRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).withdraw(amountOut);
        TransferHelper.safeTransferETH(to, amountOut);
    }

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

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

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

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

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

Contract ABI

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

60c060405234801561001057600080fd5b5060405162004774380380620047748339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6145ef620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118eb52806119e55280611a9b5280611b695280611caf5280611d375280611f7c5280611ff752806120a652806121725280612207528061227b528061277952806129ec5280612a425280612a765280612aea5280612c8a5280612dcd5280612e55525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611bfc5280611d695280611ecc52806122ad528061250652806126fe5280612727528061275752806128c45280612a205280612d1d5280612e87528061372e52806137715280613a545280613bd3528061400352806140b1528061413152506145ef6000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124b8565b348015610a1c57600080fd5b5061088a6126fc565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612720945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561274d565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612861565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561299d565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c42565b6000808242811015610cde576040805162461bcd60e51b81526020600482015260186024820152600080516020614553833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124b8565b9093509150610d1d898685612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da5858361312e565b50965096945050505050565b6000610dbe848484613226565b949350505050565b60608142811015610e0c576040805162461bcd60e51b81526020600482015260186024820152600080516020614553833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b815260206004820152601d6024820152600080516020614443833981519152604482015290519081900360640190fd5b610efd7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b815260040180806020018281038252602b815260200180614418602b913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b0316613462565b85600081518110610fe657fe5b6020026020010151613522565b6110328287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061367f915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b602002602001015161312e565b509695505050505050565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846138c5565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f613462565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124b8565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b81526020600482015260186024820152600080516020614553833981519152604482015290519081900360640190fd5b6112c77f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b815260040180806020018281038252602b815260200180614418602b913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e88287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b606081428110156113b4576040805162461bcd60e51b81526020600482015260186024820152600080516020614553833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b815260206004820152601d6024820152600080516020614443833981519152604482015290519081900360640190fd5b6114a57f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b81526004018080602001828103825260278152602001806144636027913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b81526020600482015260186024820152600080516020614553833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a613522565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a49290918991899182918501908490808284376000920191909152508892506139fd915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613d0816565b10156118935760405162461bcd60e51b815260040180806020018281038252602b815260200180614418602b913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b81526020600482015260186024820152600080516020614553833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b815260206004820152601d6024820152600080516020614443833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c28585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506139fd915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b815260040180806020018281038252602b815260200180614418602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b50505050611893848261312e565b60608142811015611b67576040805162461bcd60e51b81526020600482015260186024820152600080516020614553833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b815260206004820152601d6024820152600080516020614443833981519152604482015290519081900360640190fd5b611c557f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b815260040180806020018281038252602b815260200180614418602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d957f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b5095945050505050565b6000610dbe848484613d58565b60608142811015611ec7576040805162461bcd60e51b81526020600482015260186024820152600080516020614553833981519152604482015290519081900360640190fd5b611f257f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b81526004018080602001828103825260278152602001806144636027913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613e48565b60008142811015611ff1576040805162461bcd60e51b81526020600482015260186024820152600080516020614553833981519152604482015290519081900360640190fd5b612020887f000000000000000000000000000000000000000000000000000000000000000089898930896124b8565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e8848361312e565b8042811015612170576040805162461bcd60e51b81526020600482015260186024820152600080516020614553833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b815260206004820152601d6024820152600080516020614443833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122d97f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a9182918501908490808284376000920191909152508992506139fd915050565b87611856828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b60008082428110156124ff576040805162461bcd60e51b81526020600482015260186024820152600080516020614553833981519152604482015290519081900360640190fd5b600061252c7f00000000000000000000000000000000000000000000000000000000000000008c8c613462565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561258757600080fd5b505af115801561259b573d6000803e3d6000fd5b505050506040513d60208110156125b157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b505050506040513d604081101561262857600080fd5b508051602090910151909250905060006126428e8e613ef4565b509050806001600160a01b03168e6001600160a01b031614612665578183612668565b82825b90975095508a8710156126ac5760405162461bcd60e51b81526004018080602001828103825260268152602001806143f26026913960400191505060405180910390fd5b898610156126eb5760405162461bcd60e51b81526004018080602001828103825260268152602001806143cc6026913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f00000000000000000000000000000000000000000000000000000000000000008484613316565b600080600061279d7f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613462565b90506000876127ac578c6127b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561282657600080fd5b505af115801561283a573d6000803e3d6000fd5b5050505061284c8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128aa576040805162461bcd60e51b81526020600482015260186024820152600080516020614553833981519152604482015290519081900360640190fd5b6128b88c8c8c8c8c8c613fd2565b909450925060006128ea7f00000000000000000000000000000000000000000000000000000000000000008e8e613462565b90506128f88d338388613522565b6129048c338387613522565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561295c57600080fd5b505af1158015612970573d6000803e3d6000fd5b505050506040513d602081101561298657600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129e6576040805162461bcd60e51b81526020600482015260186024820152600080516020614553833981519152604482015290519081900360640190fd5b612a148a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613fd2565b90945092506000612a667f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050612a748b338388613522565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612acf57600080fd5b505af1158015612ae3573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b6857600080fd5b505af1158015612b7c573d6000803e3d6000fd5b505050506040513d6020811015612b9257600080fd5b5051612b9a57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b505050506040513d6020811015612c1c57600080fd5b5051925034841015612c3457612c343385340361312e565b505096509650969350505050565b60608142811015612c88576040805162461bcd60e51b81526020600482015260186024820152600080516020614553833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612cbf57fe5b905060200201356001600160a01b03166001600160a01b031614612d18576040805162461bcd60e51b815260206004820152601d6024820152600080516020614443833981519152604482015290519081900360640190fd5b612d767f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91503482600081518110612d8657fe5b60200260200101511115612dcb5760405162461bcd60e51b81526004018080602001828103825260278152602001806144636027913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e0757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e3a57600080fd5b505af1158015612e4e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612eb37f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612ec057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b505050506040513d6020811015612f4157600080fd5b5051612f4957fe5b612f888287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b81600081518110612f9557fe5b6020026020010151341115611e6a57611e6a3383600081518110612fb557fe5b6020026020010151340361312e565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130415780518252601f199092019160209182019101613022565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130a3576040519150601f19603f3d011682016040523d82523d6000602084013e6130a8565b606091505b50915091508180156130d65750805115806130d657508080602001905160208110156130d357600080fd5b50515b613127576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061317a5780518252601f19909201916020918201910161315b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131dc576040519150601f19603f3d011682016040523d82523d6000602084013e6131e1565b606091505b50509050806132215760405162461bcd60e51b81526004018080602001828103825260238152602001806145736023913960400191505060405180910390fd5b505050565b60008084116132665760405162461bcd60e51b815260040180806020018281038252602b8152602001806144b6602b913960400191505060405180910390fd5b6000831180156132765750600082115b6132b15760405162461bcd60e51b815260040180806020018281038252602881526020018061452b6028913960400191505060405180910390fd5b60006132c5856103e363ffffffff61424616565b905060006132d9828563ffffffff61424616565b905060006132ff836132f3886103e863ffffffff61424616565b9063ffffffff6142a916565b905080828161330a57fe5b04979650505050505050565b606060028251101561336f576040805162461bcd60e51b815260206004820152601e60248201527f576174657266616c6c4c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561338757600080fd5b506040519080825280602002602001820160405280156133b1578160200160208202803683370190505b50905082816000815181106133c257fe5b60200260200101818152505060005b600183510381101561345a57600080613414878685815181106133f057fe5b602002602001015187866001018151811061340757fe5b60200260200101516142f8565b9150915061343684848151811061342757fe5b60200260200101518383613226565b84846001018151811061344557fe5b602090810291909101015250506001016133d1565b509392505050565b60008060006134718585613ef4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f4b126df5a91fc8cfb7660552eda35d39699c3986df7ad19a5e628d0be89035f1609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135a75780518252601f199092019160209182019101613588565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613609576040519150601f19603f3d011682016040523d82523d6000602084013e61360e565b606091505b509150915081801561363c57508051158061363c575080806020019051602081101561363957600080fd5b50515b6136775760405162461bcd60e51b81526004018080602001828103825260248152602001806145966024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138bf5760008084838151811061369d57fe5b60200260200101518584600101815181106136b457fe5b60200260200101519150915060006136cc8383613ef4565b50905060008785600101815181106136e057fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461370e57826000613712565b6000835b91509150600060028a51038810613729578861376a565b61376a7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061375d57fe5b6020026020010151613462565b90506137977f00000000000000000000000000000000000000000000000000000000000000008888613462565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137d4576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561384557818101518382015260200161382d565b50505050905090810190601f1680156138725780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561389457600080fd5b505af11580156138a8573d6000803e3d6000fd5b505060019099019850613682975050505050505050565b50505050565b606060028251101561391e576040805162461bcd60e51b815260206004820152601e60248201527f576174657266616c6c4c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561393657600080fd5b50604051908082528060200260200182016040528015613960578160200160208202803683370190505b509050828160018351038151811061397457fe5b60209081029190910101528151600019015b801561345a576000806139b6878660018603815181106139a257fe5b602002602001015187868151811061340757fe5b915091506139d88484815181106139c957fe5b60200260200101518383613d58565b8460018503815181106139e757fe5b6020908102919091010152505060001901613986565b60005b600183510381101561322157600080848381518110613a1b57fe5b6020026020010151858460010181518110613a3257fe5b6020026020010151915091506000613a4a8383613ef4565b5090506000613a7a7f00000000000000000000000000000000000000000000000000000000000000008585613462565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613abb57600080fd5b505afa158015613acf573d6000803e3d6000fd5b505050506040513d6060811015613ae557600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613b1b578284613b1e565b83835b91509150613b7c828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613b89868383613226565b945050505050600080856001600160a01b0316886001600160a01b031614613bb357826000613bb7565b6000835b91509150600060028c51038a10613bce578a613c02565b613c027f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061375d57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c8c578181015183820152602001613c74565b50505050905090810190601f168015613cb95780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613cdb57600080fd5b505af1158015613cef573d6000803e3d6000fd5b50506001909b019a50613a009950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d985760405162461bcd60e51b815260040180806020018281038252602c81526020018061448a602c913960400191505060405180910390fd5b600083118015613da85750600082115b613de35760405162461bcd60e51b815260040180806020018281038252602881526020018061452b6028913960400191505060405180910390fd5b6000613e076103e8613dfb868863ffffffff61424616565b9063ffffffff61424616565b90506000613e216103e3613dfb868963ffffffff613d0816565b9050613e3e6001828481613e3157fe5b049063ffffffff6142a916565b9695505050505050565b6000808411613e885760405162461bcd60e51b81526004018080602001828103825260258152602001806145066025913960400191505060405180910390fd5b600083118015613e985750600082115b613ed35760405162461bcd60e51b815260040180806020018281038252602881526020018061452b6028913960400191505060405180910390fd5b82613ee4858463ffffffff61424616565b81613eeb57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f485760405162461bcd60e51b81526004018080602001828103825260258152602001806144e16025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613f68578284613f6b565b83835b90925090506001600160a01b038216613fcb576040805162461bcd60e51b815260206004820152601e60248201527f576174657266616c6c4c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561404c57600080fd5b505afa158015614060573d6000803e3d6000fd5b505050506040513d602081101561407657600080fd5b50516001600160a01b0316141561412957604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156140fc57600080fd5b505af1158015614110573d6000803e3d6000fd5b505050506040513d602081101561412657600080fd5b50505b6000806141577f00000000000000000000000000000000000000000000000000000000000000008b8b6142f8565b91509150816000148015614169575080155b1561417957879350869250614239565b6000614186898484613e48565b90508781116141d957858110156141ce5760405162461bcd60e51b81526004018080602001828103825260268152602001806143cc6026913960400191505060405180910390fd5b889450925082614237565b60006141e6898486613e48565b9050898111156141f257fe5b878110156142315760405162461bcd60e51b81526004018080602001828103825260268152602001806143f26026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806142615750508082028282828161425e57fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006143078585613ef4565b509050614315868686613462565b50600080614324888888613462565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561435c57600080fd5b505afa158015614370573d6000803e3d6000fd5b505050506040513d606081101561438657600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143b95780826143bc565b81815b9099909850965050505050505056fe576174657266616c6c526f757465723a20494e53554646494349454e545f425f414d4f554e54576174657266616c6c526f757465723a20494e53554646494349454e545f415f414d4f554e54576174657266616c6c526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54576174657266616c6c526f757465723a20494e56414c49445f50415448000000576174657266616c6c526f757465723a204558434553534956455f494e5055545f414d4f554e54576174657266616c6c4c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54576174657266616c6c4c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54576174657266616c6c4c6962726172793a204944454e544943414c5f414444524553534553576174657266616c6c4c6962726172793a20494e53554646494349454e545f414d4f554e54576174657266616c6c4c6962726172793a20494e53554646494349454e545f4c4951554944495459576174657266616c6c526f757465723a204558504952454400000000000000005472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45445472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a26469706673582212204300e9795b0e6562f608a07dd7fe742924f97608fb91c6627a777998ef71891b64736f6c6343000606003300000000000000000000000063fd0a6acbffb128e7bc7753bfa3b8639a233d5000000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1

Deployed Bytecode

0x60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124b8565b348015610a1c57600080fd5b5061088a6126fc565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612720945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561274d565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612861565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561299d565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c42565b6000808242811015610cde576040805162461bcd60e51b81526020600482015260186024820152600080516020614553833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab18a8a8a308a6124b8565b9093509150610d1d898685612fc4565b7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da5858361312e565b50965096945050505050565b6000610dbe848484613226565b949350505050565b60608142811015610e0c576040805162461bcd60e51b81526020600482015260186024820152600080516020614553833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab11686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b815260206004820152601d6024820152600080516020614443833981519152604482015290519081900360640190fd5b610efd7f00000000000000000000000063fd0a6acbffb128e7bc7753bfa3b8639a233d508988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b815260040180806020018281038252602b815260200180614418602b913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000063fd0a6acbffb128e7bc7753bfa3b8639a233d508a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b0316613462565b85600081518110610fe657fe5b6020026020010151613522565b6110328287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061367f915050565b7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b602002602001015161312e565b509695505050505050565b60606111207f00000000000000000000000063fd0a6acbffb128e7bc7753bfa3b8639a233d5084846138c5565b90505b92915050565b60008060006111597f00000000000000000000000063fd0a6acbffb128e7bc7753bfa3b8639a233d508f8f613462565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124b8565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b81526020600482015260186024820152600080516020614553833981519152604482015290519081900360640190fd5b6112c77f00000000000000000000000063fd0a6acbffb128e7bc7753bfa3b8639a233d508988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b815260040180806020018281038252602b815260200180614418602b913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e88287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b606081428110156113b4576040805162461bcd60e51b81526020600482015260186024820152600080516020614553833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab116868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b815260206004820152601d6024820152600080516020614443833981519152604482015290519081900360640190fd5b6114a57f00000000000000000000000063fd0a6acbffb128e7bc7753bfa3b8639a233d50898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b81526004018080602001828103825260278152602001806144636027913960400191505060405180910390fd5b6000806115487f00000000000000000000000063fd0a6acbffb128e7bc7753bfa3b8639a233d508d7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1613462565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b81526020600482015260186024820152600080516020614553833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000063fd0a6acbffb128e7bc7753bfa3b8639a233d508989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a613522565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a49290918991899182918501908490808284376000920191909152508892506139fd915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613d0816565b10156118935760405162461bcd60e51b815260040180806020018281038252602b815260200180614418602b913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b81526020600482015260186024820152600080516020614553833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b815260206004820152601d6024820152600080516020614443833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c28585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506139fd915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab116916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b815260040180806020018281038252602b815260200180614418602b913960400191505060405180910390fd5b7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b50505050611893848261312e565b60608142811015611b67576040805162461bcd60e51b81526020600482015260186024820152600080516020614553833981519152604482015290519081900360640190fd5b7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b815260206004820152601d6024820152600080516020614443833981519152604482015290519081900360640190fd5b611c557f00000000000000000000000063fd0a6acbffb128e7bc7753bfa3b8639a233d503488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b815260040180806020018281038252602b815260200180614418602b913960400191505060405180910390fd5b7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b031663a9059cbb611d957f00000000000000000000000063fd0a6acbffb128e7bc7753bfa3b8639a233d508989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b5095945050505050565b6000610dbe848484613d58565b60608142811015611ec7576040805162461bcd60e51b81526020600482015260186024820152600080516020614553833981519152604482015290519081900360640190fd5b611f257f00000000000000000000000063fd0a6acbffb128e7bc7753bfa3b8639a233d50898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b81526004018080602001828103825260278152602001806144636027913960400191505060405180910390fd5b7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab181565b6000610dbe848484613e48565b60008142811015611ff1576040805162461bcd60e51b81526020600482015260186024820152600080516020614553833981519152604482015290519081900360640190fd5b612020887f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab189898930896124b8565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051612fc4565b7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e8848361312e565b8042811015612170576040805162461bcd60e51b81526020600482015260186024820152600080516020614553833981519152604482015290519081900360640190fd5b7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b815260206004820152601d6024820152600080516020614443833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b031663a9059cbb6122d97f00000000000000000000000063fd0a6acbffb128e7bc7753bfa3b8639a233d508989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a9182918501908490808284376000920191909152508992506139fd915050565b87611856828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b60008082428110156124ff576040805162461bcd60e51b81526020600482015260186024820152600080516020614553833981519152604482015290519081900360640190fd5b600061252c7f00000000000000000000000063fd0a6acbffb128e7bc7753bfa3b8639a233d508c8c613462565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561258757600080fd5b505af115801561259b573d6000803e3d6000fd5b505050506040513d60208110156125b157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b505050506040513d604081101561262857600080fd5b508051602090910151909250905060006126428e8e613ef4565b509050806001600160a01b03168e6001600160a01b031614612665578183612668565b82825b90975095508a8710156126ac5760405162461bcd60e51b81526004018080602001828103825260268152602001806143f26026913960400191505060405180910390fd5b898610156126eb5760405162461bcd60e51b81526004018080602001828103825260268152602001806143cc6026913960400191505060405180910390fd5b505050505097509795505050505050565b7f00000000000000000000000063fd0a6acbffb128e7bc7753bfa3b8639a233d5081565b60606111207f00000000000000000000000063fd0a6acbffb128e7bc7753bfa3b8639a233d508484613316565b600080600061279d7f00000000000000000000000063fd0a6acbffb128e7bc7753bfa3b8639a233d508e7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1613462565b90506000876127ac578c6127b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561282657600080fd5b505af115801561283a573d6000803e3d6000fd5b5050505061284c8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128aa576040805162461bcd60e51b81526020600482015260186024820152600080516020614553833981519152604482015290519081900360640190fd5b6128b88c8c8c8c8c8c613fd2565b909450925060006128ea7f00000000000000000000000063fd0a6acbffb128e7bc7753bfa3b8639a233d508e8e613462565b90506128f88d338388613522565b6129048c338387613522565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561295c57600080fd5b505af1158015612970573d6000803e3d6000fd5b505050506040513d602081101561298657600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129e6576040805162461bcd60e51b81526020600482015260186024820152600080516020614553833981519152604482015290519081900360640190fd5b612a148a7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab18b348c8c613fd2565b90945092506000612a667f00000000000000000000000063fd0a6acbffb128e7bc7753bfa3b8639a233d508c7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1613462565b9050612a748b338388613522565b7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612acf57600080fd5b505af1158015612ae3573d6000803e3d6000fd5b50505050507f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b6857600080fd5b505af1158015612b7c573d6000803e3d6000fd5b505050506040513d6020811015612b9257600080fd5b5051612b9a57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b505050506040513d6020811015612c1c57600080fd5b5051925034841015612c3457612c343385340361312e565b505096509650969350505050565b60608142811015612c88576040805162461bcd60e51b81526020600482015260186024820152600080516020614553833981519152604482015290519081900360640190fd5b7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b031686866000818110612cbf57fe5b905060200201356001600160a01b03166001600160a01b031614612d18576040805162461bcd60e51b815260206004820152601d6024820152600080516020614443833981519152604482015290519081900360640190fd5b612d767f00000000000000000000000063fd0a6acbffb128e7bc7753bfa3b8639a233d50888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91503482600081518110612d8657fe5b60200260200101511115612dcb5760405162461bcd60e51b81526004018080602001828103825260278152602001806144636027913960400191505060405180910390fd5b7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b031663d0e30db083600081518110612e0757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e3a57600080fd5b505af1158015612e4e573d6000803e3d6000fd5b50505050507f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b031663a9059cbb612eb37f00000000000000000000000063fd0a6acbffb128e7bc7753bfa3b8639a233d508989600081811061169e57fe5b84600081518110612ec057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b505050506040513d6020811015612f4157600080fd5b5051612f4957fe5b612f888287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b81600081518110612f9557fe5b6020026020010151341115611e6a57611e6a3383600081518110612fb557fe5b6020026020010151340361312e565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130415780518252601f199092019160209182019101613022565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130a3576040519150601f19603f3d011682016040523d82523d6000602084013e6130a8565b606091505b50915091508180156130d65750805115806130d657508080602001905160208110156130d357600080fd5b50515b613127576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061317a5780518252601f19909201916020918201910161315b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131dc576040519150601f19603f3d011682016040523d82523d6000602084013e6131e1565b606091505b50509050806132215760405162461bcd60e51b81526004018080602001828103825260238152602001806145736023913960400191505060405180910390fd5b505050565b60008084116132665760405162461bcd60e51b815260040180806020018281038252602b8152602001806144b6602b913960400191505060405180910390fd5b6000831180156132765750600082115b6132b15760405162461bcd60e51b815260040180806020018281038252602881526020018061452b6028913960400191505060405180910390fd5b60006132c5856103e363ffffffff61424616565b905060006132d9828563ffffffff61424616565b905060006132ff836132f3886103e863ffffffff61424616565b9063ffffffff6142a916565b905080828161330a57fe5b04979650505050505050565b606060028251101561336f576040805162461bcd60e51b815260206004820152601e60248201527f576174657266616c6c4c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561338757600080fd5b506040519080825280602002602001820160405280156133b1578160200160208202803683370190505b50905082816000815181106133c257fe5b60200260200101818152505060005b600183510381101561345a57600080613414878685815181106133f057fe5b602002602001015187866001018151811061340757fe5b60200260200101516142f8565b9150915061343684848151811061342757fe5b60200260200101518383613226565b84846001018151811061344557fe5b602090810291909101015250506001016133d1565b509392505050565b60008060006134718585613ef4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f4b126df5a91fc8cfb7660552eda35d39699c3986df7ad19a5e628d0be89035f1609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135a75780518252601f199092019160209182019101613588565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613609576040519150601f19603f3d011682016040523d82523d6000602084013e61360e565b606091505b509150915081801561363c57508051158061363c575080806020019051602081101561363957600080fd5b50515b6136775760405162461bcd60e51b81526004018080602001828103825260248152602001806145966024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138bf5760008084838151811061369d57fe5b60200260200101518584600101815181106136b457fe5b60200260200101519150915060006136cc8383613ef4565b50905060008785600101815181106136e057fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461370e57826000613712565b6000835b91509150600060028a51038810613729578861376a565b61376a7f00000000000000000000000063fd0a6acbffb128e7bc7753bfa3b8639a233d50878c8b6002018151811061375d57fe5b6020026020010151613462565b90506137977f00000000000000000000000063fd0a6acbffb128e7bc7753bfa3b8639a233d508888613462565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137d4576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561384557818101518382015260200161382d565b50505050905090810190601f1680156138725780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561389457600080fd5b505af11580156138a8573d6000803e3d6000fd5b505060019099019850613682975050505050505050565b50505050565b606060028251101561391e576040805162461bcd60e51b815260206004820152601e60248201527f576174657266616c6c4c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561393657600080fd5b50604051908082528060200260200182016040528015613960578160200160208202803683370190505b509050828160018351038151811061397457fe5b60209081029190910101528151600019015b801561345a576000806139b6878660018603815181106139a257fe5b602002602001015187868151811061340757fe5b915091506139d88484815181106139c957fe5b60200260200101518383613d58565b8460018503815181106139e757fe5b6020908102919091010152505060001901613986565b60005b600183510381101561322157600080848381518110613a1b57fe5b6020026020010151858460010181518110613a3257fe5b6020026020010151915091506000613a4a8383613ef4565b5090506000613a7a7f00000000000000000000000063fd0a6acbffb128e7bc7753bfa3b8639a233d508585613462565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613abb57600080fd5b505afa158015613acf573d6000803e3d6000fd5b505050506040513d6060811015613ae557600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613b1b578284613b1e565b83835b91509150613b7c828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613b89868383613226565b945050505050600080856001600160a01b0316886001600160a01b031614613bb357826000613bb7565b6000835b91509150600060028c51038a10613bce578a613c02565b613c027f00000000000000000000000063fd0a6acbffb128e7bc7753bfa3b8639a233d50898e8d6002018151811061375d57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c8c578181015183820152602001613c74565b50505050905090810190601f168015613cb95780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613cdb57600080fd5b505af1158015613cef573d6000803e3d6000fd5b50506001909b019a50613a009950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d985760405162461bcd60e51b815260040180806020018281038252602c81526020018061448a602c913960400191505060405180910390fd5b600083118015613da85750600082115b613de35760405162461bcd60e51b815260040180806020018281038252602881526020018061452b6028913960400191505060405180910390fd5b6000613e076103e8613dfb868863ffffffff61424616565b9063ffffffff61424616565b90506000613e216103e3613dfb868963ffffffff613d0816565b9050613e3e6001828481613e3157fe5b049063ffffffff6142a916565b9695505050505050565b6000808411613e885760405162461bcd60e51b81526004018080602001828103825260258152602001806145066025913960400191505060405180910390fd5b600083118015613e985750600082115b613ed35760405162461bcd60e51b815260040180806020018281038252602881526020018061452b6028913960400191505060405180910390fd5b82613ee4858463ffffffff61424616565b81613eeb57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f485760405162461bcd60e51b81526004018080602001828103825260258152602001806144e16025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613f68578284613f6b565b83835b90925090506001600160a01b038216613fcb576040805162461bcd60e51b815260206004820152601e60248201527f576174657266616c6c4c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000063fd0a6acbffb128e7bc7753bfa3b8639a233d509092169163e6a4390591604480820192602092909190829003018186803b15801561404c57600080fd5b505afa158015614060573d6000803e3d6000fd5b505050506040513d602081101561407657600080fd5b50516001600160a01b0316141561412957604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000063fd0a6acbffb128e7bc7753bfa3b8639a233d509092169163c9c65396916044808201926020929091908290030181600087803b1580156140fc57600080fd5b505af1158015614110573d6000803e3d6000fd5b505050506040513d602081101561412657600080fd5b50505b6000806141577f00000000000000000000000063fd0a6acbffb128e7bc7753bfa3b8639a233d508b8b6142f8565b91509150816000148015614169575080155b1561417957879350869250614239565b6000614186898484613e48565b90508781116141d957858110156141ce5760405162461bcd60e51b81526004018080602001828103825260268152602001806143cc6026913960400191505060405180910390fd5b889450925082614237565b60006141e6898486613e48565b9050898111156141f257fe5b878110156142315760405162461bcd60e51b81526004018080602001828103825260268152602001806143f26026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806142615750508082028282828161425e57fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006143078585613ef4565b509050614315868686613462565b50600080614324888888613462565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561435c57600080fd5b505afa158015614370573d6000803e3d6000fd5b505050506040513d606081101561438657600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143b95780826143bc565b81815b9099909850965050505050505056fe576174657266616c6c526f757465723a20494e53554646494349454e545f425f414d4f554e54576174657266616c6c526f757465723a20494e53554646494349454e545f415f414d4f554e54576174657266616c6c526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54576174657266616c6c526f757465723a20494e56414c49445f50415448000000576174657266616c6c526f757465723a204558434553534956455f494e5055545f414d4f554e54576174657266616c6c4c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54576174657266616c6c4c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54576174657266616c6c4c6962726172793a204944454e544943414c5f414444524553534553576174657266616c6c4c6962726172793a20494e53554646494349454e545f414d4f554e54576174657266616c6c4c6962726172793a20494e53554646494349454e545f4c4951554944495459576174657266616c6c526f757465723a204558504952454400000000000000005472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45445472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a26469706673582212204300e9795b0e6562f608a07dd7fe742924f97608fb91c6627a777998ef71891b64736f6c63430006060033

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

00000000000000000000000063fd0a6acbffb128e7bc7753bfa3b8639a233d5000000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1

-----Decoded View---------------
Arg [0] : _factory (address): 0x63FD0a6acBfFB128E7BC7753BFA3B8639A233d50
Arg [1] : _WETH (address): 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000063fd0a6acbffb128e7bc7753bfa3b8639a233d50
Arg [1] : 00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1


Deployed ByteCode Sourcemap

15479:18547:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15959:10;-1:-1:-1;;;;;15973:4:0;15959:18;;15952:26;;;;15479:18547;;12:1:-1;9;2:12;20109:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20109:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20109:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32970:262;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32970:262:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32970:262:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27278:850;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27278:850:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27278:850:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27278:850:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27278:850:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27278:850:0;;-1:-1:-1;27278:850:0;-1:-1:-1;;;;;;27278:850:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;27278:850:0;;;;;;;;;;;;;;;;;33770:253;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33770:253:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33770:253:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33770:253:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33770:253:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33770:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33770:253:0;;-1:-1:-1;33770:253:0;;-1:-1:-1;;;;;33770:253:0:i;20788:677::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20788:677:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20788:677:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24495:628::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24495:628:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24495:628:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24495:628:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24495:628:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;24495:628:0;;-1:-1:-1;24495:628:0;-1:-1:-1;;;;;;24495:628:0;;;;;;;;:::i;26444:828::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26444:828:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26444:828:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26444:828:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26444:828:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26444:828:0;;-1:-1:-1;26444:828:0;-1:-1:-1;;;;;;26444:828:0;;;;;;;;:::i;22925:718::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22925:718:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22925:718:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30311:714::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30311:714:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30311:714:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30311:714:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30311:714:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30311:714:0;;-1:-1:-1;30311:714:0;-1:-1:-1;;;;;;30311:714:0;;;;;;;;:::i;31887:843::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31887:843:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31887:843:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31887:843:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31887:843:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31887:843:0;;-1:-1:-1;31887:843:0;-1:-1:-1;;;;;;31887:843:0;;;;;;;;:::i;25741:697::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25741:697:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25741:697:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25741:697:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25741:697:0;;-1:-1:-1;25741:697:0;-1:-1:-1;;;;;;25741:697:0;;;;;;;;:::i;33240:261::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33240:261:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33240:261:0;;;;;;;;;;;;:::i;25129:606::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25129:606:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25129:606:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25129:606:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25129:606:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25129:606:0;;-1:-1:-1;25129:606:0;-1:-1:-1;;;;;;25129:606:0;;;;;;;;:::i;15613:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15613:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;15613:38:0;;;;;;;;;;;;;;32774:188;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32774:188:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32774:188:0;;;;;;;;;;;;:::i;22219:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22219:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22219:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31031:850::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31031:850:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31031:850:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31031:850:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31031:850:0;;-1:-1:-1;31031:850:0;-1:-1:-1;;;;;;31031:850:0;;;;;;;;:::i;19238:865::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19238:865:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19238:865:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15565:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15565:41:0;;;:::i;33509:253::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33509:253:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33509:253:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33509:253:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33509:253:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33509:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33509:253:0;;-1:-1:-1;33509:253:0;;-1:-1:-1;;;;;33509:253:0:i;21471:669::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21471:669:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21471:669:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17477:738::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17477:738:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17477:738:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18221:974;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18221:974:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28134:810::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28134:810:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28134:810:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28134:810:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28134:810:0;;-1:-1:-1;28134:810:0;-1:-1:-1;;;;;;28134:810:0;;;;;;;;:::i;20109:673::-;20346:16;20364:14;20327:8;15722:15;15710:8;:27;;15702:64;;;;;-1:-1:-1;;;15702:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15702:64:0;;;;;;;;;;;;;;;20418:196:::1;20448:5;20468:4;20487:9;20511:14;20540:12;20575:4;20595:8;20418:15;:196::i;:::-;20391:223:::0;;-1:-1:-1;20391:223:0;-1:-1:-1;20625:51:0::1;20653:5:::0;20660:2;20391:223;20625:27:::1;:51::i;:::-;20693:4;-1:-1:-1::0;;;;;20687:20:0::1;;20708:9;20687:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20687:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20687:31:0;;;;20729:45;20760:2;20764:9;20729:30;:45::i;:::-;20109:673:::0;;;;;;;;;;:::o;32970:262::-;33123:14;33162:62;33192:8;33202:9;33213:10;33162:29;:62::i;:::-;33155:69;32970:262;-1:-1:-1;;;;32970:262:0:o;27278:850::-;27492:21;27464:8;15722:15;15710:8;:27;;15702:64;;;;;-1:-1:-1;;;15702:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15702:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27564:4:0::1;27539:29;:4:::0;;-1:-1:-1;;27544:15:0;;27539:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27539:21:0::1;-1:-1:-1::0;;;;;27539:29:0::1;;27531:71;;;::::0;;-1:-1:-1;;;27531:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27531:71:0;;;;;;;;;;;;;::::1;;27623:55;27654:7;27663:8;27673:4;;27623:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27623:30:0::1;::::0;-1:-1:-1;;;27623:55:0:i:1;:::-;27613:65;;27728:12;27697:7;27722:1;27705:7;:14;:18;27697:27;;;;;;;;;;;;;;:43;;27689:99;;;;-1:-1:-1::0;;;27689:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27799:141;27845:4;;27850:1;27845:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27845:7:0::1;27854:10;27866:51;27891:7;27900:4;;27905:1;27900:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27900:7:0::1;27909:4;;27914:1;27909:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27909:7:0::1;27866:24;:51::i;:::-;27919:7;27927:1;27919:10;;;;;;;;;;;;;;27799:31;:141::i;:::-;27951:35;27957:7;27966:4;;27951:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27980:4:0::1;::::0;-1:-1:-1;27951:5:0::1;::::0;-1:-1:-1;;27951:35:0:i:1;:::-;28003:4;-1:-1:-1::0;;;;;27997:20:0::1;;28018:7;28043:1;28026:7;:14;:18;28018:27;;;;;;;;;;;;;;27997:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27997:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27997:49:0;;;;28057:63;28088:2;28092:7;28117:1;28100:7;:14;:18;28092:27;;;;;;;;;;;;;;28057:30;:63::i;:::-;27278:850:::0;;;;;;;;;:::o;33770:253::-;33914:21;33960:55;33990:7;33999:9;34010:4;33960:29;:55::i;:::-;33953:62;;33770:253;;;;;:::o;20788:677::-;21094:12;21108;21133;21148:49;21173:7;21182:6;21190;21148:24;:49::i;:::-;21133:64;;21208:10;21221;:33;;21245:9;21221:33;;;-1:-1:-1;;21221:33:0;21265:80;;;-1:-1:-1;;;21265:80:0;;21293:10;21265:80;;;;21313:4;21265:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21208:46;;-1:-1:-1;;;;;;21265:27:0;;;;;:80;;;;;-1:-1:-1;;21265:80:0;;;;;;;;-1:-1:-1;21265:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;21265:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21265:80:0;;;;21377;21393:6;21401;21409:9;21420:10;21432;21444:2;21448:8;21377:15;:80::i;:::-;21356:101;;;;;;;;20788:677;;;;;;;;;;;;;;;;:::o;24495:628::-;24719:21;24700:8;15722:15;15710:8;:27;;15702:64;;;;;-1:-1:-1;;;15702:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15702:64:0;;;;;;;;;;;;;;;24763:55:::1;24794:7;24803:8;24813:4;;24763:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24763:30:0::1;::::0;-1:-1:-1;;;24763:55:0:i:1;:::-;24753:65;;24868:12;24837:7;24862:1;24845:7;:14;:18;24837:27;;;;;;;;;;;;;;:43;;24829:99;;;;-1:-1:-1::0;;;24829:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24939:141;24985:4;;24990:1;24985:7;;;;;;24939:141;25091:24;25097:7;25106:4;;25091:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25112:2:0;;-1:-1:-1;25091:5:0::1;::::0;-1:-1:-1;;25091:24:0:i:1;26444:828::-:0;26658:21;26630:8;15722:15;15710:8;:27;;15702:64;;;;;-1:-1:-1;;;15702:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15702:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;26730:4:0::1;26705:29;:4:::0;;-1:-1:-1;;26710:15:0;;26705:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;26705:21:0::1;-1:-1:-1::0;;;;;26705:29:0::1;;26697:71;;;::::0;;-1:-1:-1;;;26697:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26697:71:0;;;;;;;;;;;;;::::1;;26789:55;26819:7;26828:9;26839:4;;26789:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26789:29:0::1;::::0;-1:-1:-1;;;26789:55:0:i:1;:::-;26779:65;;26877:11;26863:7;26871:1;26863:10;;;;;;;;;;;;;;:25;;26855:77;;;;-1:-1:-1::0;;;26855:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22925:718:::0;23243:14;23270:12;23285:46;23310:7;23319:5;23326:4;23285:24;:46::i;:::-;23270:61;;23342:10;23355;:33;;23379:9;23355:33;;;-1:-1:-1;;23355:33:0;23399:80;;;-1:-1:-1;;;23399:80:0;;23427:10;23399:80;;;;23447:4;23399:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23342:46;;-1:-1:-1;;;;;;23399:27:0;;;;;:80;;;;;-1:-1:-1;;23399:80:0;;;;;;;;-1:-1:-1;23399:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;23399:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23399:80:0;;;;23502:133;23564:5;23571:9;23582:14;23598:12;23612:2;23616:8;23502:47;:133::i;:::-;23490:145;22925:718;-1:-1:-1;;;;;;;;;;;;;22925:718:0:o;30311:714::-;30545:8;15722:15;15710:8;:27;;15702:64;;;;;-1:-1:-1;;;15702:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15702:64:0;;;;;;;;;;;;;;;30566:139:::1;30612:4;;30617:1;30612:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30612:7:0::1;30621:10;30633:51;30658:7;30667:4;;30672:1;30667:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30667:7:0::1;30676:4;;30681:1;30676:7;;;;;;30633:51;30686:8;30566:31;:139::i;:::-;30716:18;30744:4:::0;;-1:-1:-1;;30749:15:0;;30744:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30744:21:0::1;-1:-1:-1::0;;;;;30737:39:0::1;;30777:2;30737:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;30737:43:0::1;-1:-1:-1::0;;;;;30737:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30737:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30737:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30737:43:0;30791:44:::1;::::0;;30737:43:::1;30791:44:::0;;::::1;::::0;;;;;;;;;;;30737:43;;-1:-1:-1;30791:44:0::1;::::0;;;30826:4;;;;;;30791:44;::::1;::::0;30826:4;;30791:44;30826:4;30791:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30832:2:0;;-1:-1:-1;30791:34:0::1;::::0;-1:-1:-1;;30791:44:0:i:1;:::-;30934:12:::0;30868:62:::1;30916:13:::0;30875:4;;-1:-1:-1;;30880:15:0;;30875:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30875:21:0::1;-1:-1:-1::0;;;;;30868:39:0::1;;30908:2;30868:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;30868:43:0::1;-1:-1:-1::0;;;;;30868:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30868:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30868:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30868:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;30846:171;;;;-1:-1:-1::0;;;30846:171:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15777:1;30311:714:::0;;;;;;;:::o;31887:843::-;32154:8;15722:15;15710:8;:27;;15702:64;;;;;-1:-1:-1;;;15702:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15702:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32213:4:0::1;32188:29;:4:::0;;-1:-1:-1;;32193:15:0;;32188:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32188:21:0::1;-1:-1:-1::0;;;;;32188:29:0::1;;32180:71;;;::::0;;-1:-1:-1;;;32180:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32180:71:0;;;;;;;;;;;;;::::1;;32262:139;32308:4;;32313:1;32308:7;;;;;;32262:139;32412:55;32447:4;;32412:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32461:4:0::1;::::0;-1:-1:-1;32412:34:0::1;::::0;-1:-1:-1;;32412:55:0:i:1;:::-;32495:37;::::0;;-1:-1:-1;;;32495:37:0;;32526:4:::1;32495:37;::::0;::::1;::::0;;;32478:14:::1;::::0;-1:-1:-1;;;;;32502:4:0::1;32495:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;32495:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32495:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32495:37:0;;-1:-1:-1;32551:25:0;;::::1;;32543:81;;;;-1:-1:-1::0;;;32543:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32641:4;-1:-1:-1::0;;;;;32635:20:0::1;;32656:9;32635:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32635:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32635:31:0;;;;32677:45;32708:2;32712:9;32677:30;:45::i;25741:697::-:0;25957:21;25929:8;15722:15;15710:8;:27;;15702:64;;;;;-1:-1:-1;;;15702:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15702:64:0;;;;;;;;;;;;;;;26015:4:::1;-1:-1:-1::0;;;;;26004:15:0::1;:4;;26009:1;26004:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26004:7:0::1;-1:-1:-1::0;;;;;26004:15:0::1;;25996:57;;;::::0;;-1:-1:-1;;;25996:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;25996:57:0;;;;;;;;;;;;;::::1;;26074:56;26105:7;26114:9;26125:4;;26074:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26074:30:0::1;::::0;-1:-1:-1;;;26074:56:0:i:1;:::-;26064:66;;26180:12;26149:7;26174:1;26157:7;:14;:18;26149:27;;;;;;;;;;;;;;:43;;26141:99;;;;-1:-1:-1::0;;;26141:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26257:4;-1:-1:-1::0;;;;;26251:19:0::1;;26278:7;26286:1;26278:10;;;;;;;;;;;;;;26251:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26251:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26251:40:0;;;;;26315:4;-1:-1:-1::0;;;;;26309:20:0::1;;26330:51;26355:7;26364:4;;26369:1;26364:7;;;;;;26330:51;26383:7;26391:1;26383:10;;;;;;;;;;;;;;26309:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;26309:85:0::1;-1:-1:-1::0;;;;;26309:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26309:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26309:85:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26309:85:0;26302:93:::1;;;;26406:24;26412:7;26421:4;;26406:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26427:2:0;;-1:-1:-1;26406:5:0::1;::::0;-1:-1:-1;;26406:24:0:i:1;:::-;25741:697:::0;;;;;;;;:::o;33240:261::-;33393:13;33431:62;33460:9;33471;33482:10;33431:28;:62::i;25129:606::-;25353:21;25334:8;15722:15;15710:8;:27;;15702:64;;;;;-1:-1:-1;;;15702:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15702:64:0;;;;;;;;;;;;;;;25397:55:::1;25427:7;25436:9;25447:4;;25397:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25397:29:0::1;::::0;-1:-1:-1;;;25397:55:0:i:1;:::-;25387:65;;25485:11;25471:7;25479:1;25471:10;;;;;;;;;;;;;;:25;;25463:77;;;;-1:-1:-1::0;;;25463:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15613:38:::0;;;:::o;32774:188::-;32871:12;32903:51;32926:7;32935:8;32945;32903:22;:51::i;22219:700::-;22485:14;22466:8;15722:15;15710:8;:27;;15702:64;;;;;-1:-1:-1;;;15702:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15702:64:0;;;;;;;;;;;;;;;22528:196:::1;22558:5;22578:4;22597:9;22621:14;22650:12;22685:4;22705:8;22528:15;:196::i;:::-;22774:38;::::0;;-1:-1:-1;;;22774:38:0;;22806:4:::1;22774:38;::::0;::::1;::::0;;;22512:212;;-1:-1:-1;22735:78:0::1;::::0;-1:-1:-1;22763:5:0;;22770:2;;-1:-1:-1;;;;;22774:23:0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;22774:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22774:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22774:38:0;22735:27:::1;:78::i;:::-;22830:4;-1:-1:-1::0;;;;;22824:20:0::1;;22845:9;22824:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22824:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22824:31:0;;;;22866:45;22897:2;22901:9;22866:30;:45::i;31031:850::-:0;31291:8;15722:15;15710:8;:27;;15702:64;;;;;-1:-1:-1;;;15702:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15702:64:0;;;;;;;;;;;;;;;31336:4:::1;-1:-1:-1::0;;;;;31325:15:0::1;:4;;31330:1;31325:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31325:7:0::1;-1:-1:-1::0;;;;;31325:15:0::1;;31317:57;;;::::0;;-1:-1:-1;;;31317:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31317:57:0;;;;;;;;;;;;;::::1;;31385:13;31401:9;31385:25;;31427:4;-1:-1:-1::0;;;;;31421:19:0::1;;31448:8;31421:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31421:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31421:38:0;;;;;31483:4;-1:-1:-1::0;;;;;31477:20:0::1;;31498:51;31523:7;31532:4;;31537:1;31532:7;;;;;;31498:51;31551:8;31477:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;31477:83:0::1;-1:-1:-1::0;;;;;31477:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31477:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31477:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31477:83:0;31470:91:::1;;;;31572:18;31600:4:::0;;-1:-1:-1;;31605:15:0;;31600:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31600:21:0::1;-1:-1:-1::0;;;;;31593:39:0::1;;31633:2;31593:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31593:43:0::1;-1:-1:-1::0;;;;;31593:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31593:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31593:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31593:43:0;31647:44:::1;::::0;;31593:43:::1;31647:44:::0;;::::1;::::0;;;;;;;;;;;31593:43;;-1:-1:-1;31647:44:0::1;::::0;;;31682:4;;;;;;31647:44;::::1;::::0;31682:4;;31647:44;31682:4;31647:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31688:2:0;;-1:-1:-1;31647:34:0::1;::::0;-1:-1:-1;;31647:44:0:i:1;:::-;31790:12:::0;31724:62:::1;31772:13:::0;31731:4;;-1:-1:-1;;31736:15:0;;31731:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31731:21:0::1;-1:-1:-1::0;;;;;31724:39:0::1;;31764:2;31724:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31724:43:0::1;-1:-1:-1::0;;;;;31724:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;19238:865:0::0;19492:12;19506;19473:8;15722:15;15710:8;:27;;15702:64;;;;;-1:-1:-1;;;15702:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15702:64:0;;;;;;;;;;;;;;;19531:12:::1;19546:49;19571:7;19580:6;19588;19546:24;:49::i;:::-;19606:62;::::0;;-1:-1:-1;;;19606:62:0;;19640:10:::1;19606:62;::::0;::::1;::::0;-1:-1:-1;;;;;19606:33:0;::::1;:62:::0;;;;;;;;;;;;;;19531:64;;-1:-1:-1;19606:33:0;;::::1;::::0;:62;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;19606:33:0;:62;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19606:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19606:62:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;19736:29:0::1;::::0;;-1:-1:-1;;;19736:29:0;;-1:-1:-1;;;;;19736:29:0;;::::1;;::::0;::::1;::::0;;;19706:12:::1;::::0;;;19736:25;;::::1;::::0;::::1;::::0;:29;;;;;;;;;;;19706:12;19736:25;:29;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19736:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19736:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19736:29:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;19736:29:0;-1:-1:-1;19777:14:0::1;19796:43;19824:6:::0;19832;19796:27:::1;:43::i;:::-;19776:63;;;19881:6;-1:-1:-1::0;;;;;19871:16:0::1;:6;-1:-1:-1::0;;;;;19871:16:0::1;;:58;;19912:7;19921;19871:58;;;19891:7;19900;19871:58;19850:79:::0;;-1:-1:-1;19850:79:0;-1:-1:-1;19948:21:0;;::::1;;19940:72;;;;-1:-1:-1::0;;;19940:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20042:10;20031:7;:21;;20023:72;;;;-1:-1:-1::0;;;20023:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15777:1;;;;19238:865:::0;;;;;;;;;;;:::o;15565:41::-;;;:::o;33509:253::-;33653:21;33699:55;33730:7;33739:8;33749:4;33699:30;:55::i;21471:669::-;21760:16;21778:14;21805:12;21820:46;21845:7;21854:5;21861:4;21820:24;:46::i;:::-;21805:61;;21877:10;21890;:33;;21914:9;21890:33;;;-1:-1:-1;;21890:33:0;21934:80;;;-1:-1:-1;;;21934:80:0;;21962:10;21934:80;;;;21982:4;21934:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21877:46;;-1:-1:-1;;;;;;21934:27:0;;;;;:80;;;;;-1:-1:-1;;21934:80:0;;;;;;;;-1:-1:-1;21934:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;21934:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21934:80:0;;;;22052;22071:5;22078:9;22089:14;22105:12;22119:2;22123:8;22052:18;:80::i;:::-;22025:107;;;;-1:-1:-1;21471:669:0;-1:-1:-1;;;;;;;;;;;;;21471:669:0:o;17477:738::-;17765:12;17779;17793:14;17746:8;15722:15;15710:8;:27;;15702:64;;;;;-1:-1:-1;;;15702:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15702:64:0;;;;;;;;;;;;;;;17841:85:::1;17855:6;17863;17871:14;17887;17903:10;17915;17841:13;:85::i;:::-;17820:106:::0;;-1:-1:-1;17820:106:0;-1:-1:-1;17937:12:0::1;17952:49;17977:7;17986:6:::0;17994;17952:24:::1;:49::i;:::-;17937:64;;18012:66;18044:6;18052:10;18064:4;18070:7;18012:31;:66::i;:::-;18089;18121:6;18129:10;18141:4;18147:7;18089:31;:66::i;:::-;18193:4;-1:-1:-1::0;;;;;18178:25:0::1;;18204:2;18178:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;18178:29:0::1;-1:-1:-1::0;;;;;18178:29:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18178:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18178:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18178:29:0;17477:738;;;;-1:-1:-1;18178:29:0;;-1:-1:-1;17477:738:0;;-1:-1:-1;;;;;;;;;17477:738:0:o;18221:974::-;18474:16;18492:14;18508;18455:8;15722:15;15710:8;:27;;15702:64;;;;;-1:-1:-1;;;15702:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15702:64:0;;;;;;;;;;;;;;;18562:176:::1;18590:5;18610:4;18629:18;18662:9;18686:14;18715:12;18562:13;:176::i;:::-;18535:203:::0;;-1:-1:-1;18535:203:0;-1:-1:-1;18749:12:0::1;18764:46;18789:7;18798:5:::0;18805:4:::1;18764:24;:46::i;:::-;18749:61;;18821:69;18853:5;18860:10;18872:4;18878:11;18821:31;:69::i;:::-;18907:4;-1:-1:-1::0;;;;;18901:19:0::1;;18928:9;18901:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18901:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18901:39:0;;;;;18964:4;-1:-1:-1::0;;;;;18958:20:0::1;;18979:4;18985:9;18958:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;18958:37:0::1;-1:-1:-1::0;;;;;18958:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18958:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18958:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18958:37:0;18951:45:::1;;;;19034:4;-1:-1:-1::0;;;;;19019:25:0::1;;19045:2;19019:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;19019:29:0::1;-1:-1:-1::0;;;;;19019:29:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19019:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19019:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19019:29:0;;-1:-1:-1;19099:9:0::1;:21:::0;-1:-1:-1;19095:92:0::1;;;19122:65;19153:10;19177:9;19165;:21;19122:30;:65::i;:::-;15777:1;18221:974:::0;;;;;;;;;;;:::o;28134:810::-;28347:21;28319:8;15722:15;15710:8;:27;;15702:64;;;;;-1:-1:-1;;;15702:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15702:64:0;;;;;;;;;;;;;;;28405:4:::1;-1:-1:-1::0;;;;;28394:15:0::1;:4;;28399:1;28394:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28394:7:0::1;-1:-1:-1::0;;;;;28394:15:0::1;;28386:57;;;::::0;;-1:-1:-1;;;28386:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28386:57:0;;;;;;;;;;;;;::::1;;28464:55;28494:7;28503:9;28514:4;;28464:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28464:29:0::1;::::0;-1:-1:-1;;;28464:55:0:i:1;:::-;28454:65;;28552:9;28538:7;28546:1;28538:10;;;;;;;;;;;;;;:23;;28530:75;;;;-1:-1:-1::0;;;28530:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28622:4;-1:-1:-1::0;;;;;28616:19:0::1;;28643:7;28651:1;28643:10;;;;;;;;;;;;;;28616:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28616:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28616:40:0;;;;;28680:4;-1:-1:-1::0;;;;;28674:20:0::1;;28695:51;28720:7;28729:4;;28734:1;28729:7;;;;;;28695:51;28748:7;28756:1;28748:10;;;;;;;;;;;;;;28674:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;28674:85:0::1;-1:-1:-1::0;;;;;28674:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28674:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28674:85:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28674:85:0;28667:93:::1;;;;28771:24;28777:7;28786:4;;28771:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28792:2:0;;-1:-1:-1;28771:5:0::1;::::0;-1:-1:-1;;28771:24:0:i:1;:::-;28858:7;28866:1;28858:10;;;;;;;;;;;;;;28846:9;:22;28842:94;;;28870:66;28901:10;28925:7;28933:1;28925:10;;;;;;;;;;;;;;28913:9;:22;28870:30;:66::i;1189:361::-:0;1384:45;;;-1:-1:-1;;;;;1384:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1384:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1373:57:0;;;;1338:12;;1352:17;;1373:10;;;;1384:45;1373:57;;;25:18:-1;1373:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1373: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;;1337:93:0;;;;1449:7;:57;;;;-1:-1:-1;1461:11:0;;:16;;:44;;;1492:4;1481:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1481:24:0;1461:44;1441:101;;;;;-1:-1:-1;;;1441:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1189:361;;;;;:::o;1968:195::-;2076:12;;;2038;2076;;;;;;;;;-1:-1:-1;;;;;2055:7:0;;;2069:5;;2055:34;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2055:34:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;2037:52:0;;;2108:7;2100:55;;;;-1:-1:-1;;;2100:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1968:195;;;:::o;12165:517::-;12258:14;12304:1;12293:8;:12;12285:68;;;;-1:-1:-1;;;12285:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12384:1;12372:9;:13;:31;;;;;12402:1;12389:10;:14;12372:31;12364:84;;;;-1:-1:-1;;;12364:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12459:20;12482:17;:8;12495:3;12482:17;:12;:17;:::i;:::-;12459:40;-1:-1:-1;12510:14:0;12527:31;12459:40;12547:10;12527:31;:19;:31;:::i;:::-;12510:48;-1:-1:-1;12569:16:0;12588:40;12612:15;12588:19;:9;12602:4;12588:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;12569:59;;12663:11;12651:9;:23;;;;;;;12165:517;-1:-1:-1;;;;;;;12165:517:0:o;13357:511::-;13458:21;13515:1;13500:4;:11;:16;;13492:59;;;;;-1:-1:-1;;;13492:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13583:4;:11;13572:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13572:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;13572:23:0;;13562:33;;13619:8;13606:7;13614:1;13606:10;;;;;;;;;;;;;:21;;;;;13643:6;13638:223;13669:1;13655:4;:11;:15;13651:1;:19;13638:223;;;13693:14;13709:15;13728:42;13740:7;13749:4;13754:1;13749:7;;;;;;;;;;;;;;13758:4;13763:1;13767;13763:5;13758:11;;;;;;;;;;;;;;13728;:42::i;:::-;13692:78;;;;13802:47;13815:7;13823:1;13815:10;;;;;;;;;;;;;;13827:9;13838:10;13802:12;:47::i;:::-;13785:7;13793:1;13797;13793:5;13785:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;13672:3:0;;13638:223;;;;13357:511;;;;;:::o;10639:478::-;10728:12;10754:14;10770;10788:26;10799:6;10807;10788:10;:26::i;:::-;10952:32;;;-1:-1:-1;;10952:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;10952:32:0;;;;;10942:43;;;;;;-1:-1:-1;;;;;;10855:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10855:251:0;;;;;;;10845:262;;;;;;;;;10639:478;-1:-1:-1;;;;;10639:478:0:o;1558:402::-;1783:51;;;-1:-1:-1;;;;;1783:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1783:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1772:63:0;;;;1737:12;;1751:17;;1772:10;;;;1783:51;1772:63;;;25:18:-1;1772:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1772: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;;1736:99:0;;;;1854:7;:57;;;;-1:-1:-1;1866:11:0;;:16;;:44;;;1897:4;1886:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1886:24:0;1866:44;1846:106;;;;-1:-1:-1;;;1846:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1558:402;;;;;;:::o;23754:735::-;23861:6;23856:626;23887:1;23873:4;:11;:15;23869:1;:19;23856:626;;;23911:13;23926:14;23945:4;23950:1;23945:7;;;;;;;;;;;;;;23954:4;23959:1;23963;23959:5;23954:11;;;;;;;;;;;;;;23910:56;;;;23982:14;24001:42;24029:5;24036:6;24001:27;:42::i;:::-;23981:62;;;24058:14;24075:7;24083:1;24087;24083:5;24075:14;;;;;;;;;;;;;;24058:31;;24105:15;24122;24150:6;-1:-1:-1;;;;;24141:15:0;:5;-1:-1:-1;;;;;24141:15:0;;:61;;24183:9;24199:1;24141:61;;;24165:1;24169:9;24141:61;24104:98;;;;24217:10;24248:1;24234:4;:11;:15;24230:1;:19;:82;;24309:3;24230:82;;;24252:54;24277:7;24286:6;24294:4;24299:1;24303;24299:5;24294:11;;;;;;;;;;;;;;24252:24;:54::i;:::-;24217:95;;24342:48;24367:7;24376:5;24383:6;24342:24;:48::i;:::-;-1:-1:-1;;;;;24327:69:0;;24415:10;24427;24439:2;24453:1;24443:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;24443:12:0;87:42:-1;143:17;;-1:-1;24443:12:0;;24327:143;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24327:143:0;-1:-1:-1;;;;;24327:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;24327:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24327:143:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;23890:3:0;;;;;-1:-1:-1;23856:626:0;;-1:-1:-1;;;;;;;;23856:626:0;;;23754:735;;;:::o;13949:532::-;14050:21;14107:1;14092:4;:11;:16;;14084:59;;;;;-1:-1:-1;;;14084:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14175:4;:11;14164:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14164:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14164:23:0;;14154:33;;14228:9;14198:7;14223:1;14206:7;:14;:18;14198:27;;;;;;;;;;;;;;;;;:39;14262:11;;-1:-1:-1;;14262:15:0;14248:226;14279:5;;14248:226;;14307:14;14323:15;14342:42;14354:7;14363:4;14372:1;14368;:5;14363:11;;;;;;;;;;;;;;14376:4;14381:1;14376:7;;;;;;;14342:42;14306:78;;;;14416:46;14428:7;14436:1;14428:10;;;;;;;;;;;;;;14440:9;14451:10;14416:11;:46::i;:::-;14399:7;14411:1;14407;:5;14399:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;14286:3:0;14248:226;;29091:1214;29204:6;29199:1099;29230:1;29216:4;:11;:15;29212:1;:19;29199:1099;;;29254:13;29269:14;29288:4;29293:1;29288:7;;;;;;;;;;;;;;29297:4;29302:1;29306;29302:5;29297:11;;;;;;;;;;;;;;29253:56;;;;29325:14;29344:42;29372:5;29379:6;29344:27;:42::i;:::-;29324:62;;;29401:19;29438:48;29463:7;29472:5;29479:6;29438:24;:48::i;:::-;29401:86;;29502:16;29533:17;29621:13;29636;29654:4;-1:-1:-1;;;;;29654:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29654:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29654:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29654:18:0;;;;;;;-1:-1:-1;;;;;29620:52:0;;;;-1:-1:-1;29620:52:0;;-1:-1:-1;29688:17:0;;-1:-1:-1;;;;;29729:15:0;;;;;;;:61;;29771:8;29781;29729:61;;;29748:8;29758;29729:61;29687:103;;;;29819:56;29862:12;29826:5;-1:-1:-1;;;;;29819:23:0;;29851:4;29819:38;;;;;;;;;;;;;-1:-1:-1;;;;;29819:38:0;-1:-1:-1;;;;;29819:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;29819:56:0;29805:70;;29905:71;29935:11;29948:12;29962:13;29905:29;:71::i;:::-;29890:86;;29199:1099;;;;30007:15;30024;30052:6;-1:-1:-1;;;;;30043:15:0;:5;-1:-1:-1;;;;;30043:15:0;;:67;;30088:12;30107:1;30043:67;;;30067:1;30071:12;30043:67;30006:104;;;;30125:10;30156:1;30142:4;:11;:15;30138:1;:19;:82;;30217:3;30138:82;;;30160:54;30185:7;30194:6;30202:4;30207:1;30211;30207:5;30202:11;;;;;;;30160:54;30273:12;;;30283:1;30273:12;;;;;;;;;;-1:-1:-1;;;30235:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30235:51:0;;;;;;;;;;;;;;;;;;;;;;30125:95;;-1:-1:-1;30235:9:0;;;;;;30245:10;;30257;;30125:95;;30273:12;;30235:51;;;;;;;;30273:12;;30235:51;;;;30273: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;30235:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30235:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29233:3:0;;;;;-1:-1:-1;29199:1099:0;;-1:-1:-1;;;;;;;;;;29199:1099:0;9747:129;9831:5;;;9826:16;;;;9818:50;;;;;-1:-1:-1;;;9818:50:0;;;;;;;;;;;;-1:-1:-1;;;9818:50:0;;;;;;;;;;;;;;12803:472;12896:13;12942:1;12930:9;:13;12922:70;;;;-1:-1:-1;;;12922:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13023:1;13011:9;:13;:31;;;;;13041:1;13028:10;:14;13011:31;13003:84;;;;-1:-1:-1;;;13003:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13098:14;13115:34;13144:4;13115:24;:9;13129;13115:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;13098:51;-1:-1:-1;13160:16:0;13179:34;13209:3;13179:25;:10;13194:9;13179:25;:14;:25;:::i;:34::-;13160:53;;13235:32;13265:1;13248:11;13236:9;:23;;;;;;;13235:32;:29;:32;:::i;:::-;13224:43;12803:472;-1:-1:-1;;;;;;12803:472:0:o;11722:321::-;11804:12;11847:1;11837:7;:11;11829:61;;;;-1:-1:-1;;;11829:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11920:1;11909:8;:12;:28;;;;;11936:1;11925:8;:12;11909:28;11901:81;;;;-1:-1:-1;;;11901:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12027:8;12003:21;:7;12015:8;12003:21;:11;:21;:::i;:::-;:32;;;;;;;11722:321;-1:-1:-1;;;;11722:321:0:o;10198:349::-;10273:14;10289;10334:6;-1:-1:-1;;;;;10324:16:0;:6;-1:-1:-1;;;;;10324:16:0;;;10316:66;;;;-1:-1:-1;;;10316:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10421:6;-1:-1:-1;;;;;10412:15:0;:6;-1:-1:-1;;;;;10412:15:0;;:53;;10450:6;10458;10412:53;;;10431:6;10439;10412:53;10393:72;;-1:-1:-1;10393:72:0;-1:-1:-1;;;;;;10484:20:0;;10476:63;;;;;-1:-1:-1;;;10476:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10198:349;;;;;:::o;16081:1390::-;16394:50;;;-1:-1:-1;;;16394:50:0;;-1:-1:-1;;;;;16394:50:0;;;;;;;;;;;;;;;;16299:12;;;;;;16412:7;16394:34;;;;;;:50;;;;;;;;;;;;;;;:34;:50;;;2:2:-1;;;;27:1;24;17:12;2:2;16394:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16394:50:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16394:50:0;-1:-1:-1;;;;;16394:64:0;;16390:150;;;16475:53;;;-1:-1:-1;;;16475:53:0;;-1:-1:-1;;;;;16475:53:0;;;;;;;;;;;;;;;;16493:7;16475:37;;;;;;:53;;;;;;;;;;;;;;;-1:-1:-1;16475:37:0;:53;;;2:2:-1;;;;27:1;24;17:12;2:2;16475:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16475:53:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;16390:150:0;16551:13;16566;16583:53;16612:7;16621:6;16629;16583:28;:53::i;:::-;16550:86;;;;16651:8;16663:1;16651:13;:30;;;;-1:-1:-1;16668:13:0;;16651:30;16647:817;;;16720:14;;-1:-1:-1;16736:14:0;;-1:-1:-1;16647:817:0;;;16784:19;16806:58;16829:14;16845:8;16855;16806:22;:58::i;:::-;16784:80;;16901:14;16883;:32;16879:574;;16962:10;16944:14;:28;;16936:79;;;;-1:-1:-1;;;16936:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17056:14;;-1:-1:-1;17072:14:0;-1:-1:-1;17072:14:0;16879:574;;;17128:19;17150:58;17173:14;17189:8;17199;17150:22;:58::i;:::-;17128:80;;17252:14;17234;:32;;17227:40;;;;17312:10;17294:14;:28;;17286:79;;;;-1:-1:-1;;;17286:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17406:14;-1:-1:-1;17422:14:0;;-1:-1:-1;16879:574:0;16647:817;;16081:1390;;;;;;;;;;;:::o;9884:142::-;9936:6;9963;;;:30;;-1:-1:-1;;9978:5:0;;;9992:1;9987;9978:5;9987:1;9973:15;;;;;:20;9963:30;9955:63;;;;;-1:-1:-1;;;9955:63:0;;;;;;;;;;;;-1:-1:-1;;;9955:63:0;;;;;;;;;;;;;;9611:128;9695:5;;;9690:16;;;;9682:49;;;;;-1:-1:-1;;;9682:49:0;;;;;;;;;;;;-1:-1:-1;;;9682:49:0;;;;;;;;;;;;;;11175:434;11268:13;11283;11310:14;11329:26;11340:6;11348;11329:10;:26::i;:::-;11309:46;;;11366:32;11374:7;11383:6;11391;11366:7;:32::i;:::-;;11410:13;11425;11458:32;11466:7;11475:6;11483;11458:7;:32::i;:::-;-1:-1:-1;;;;;11443:60:0;;:62;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11443:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11443:62:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11443:62:0;;;;;;;-1:-1:-1;;;;;11409:96:0;;;;-1:-1:-1;11409:96:0;;-1:-1:-1;;;;;;11539:16:0;;;;;;;:62;;11582:8;11592;11539:62;;;11559:8;11569;11539:62;11516:85;;;;-1:-1:-1;11175:434:0;-1:-1:-1;;;;;;;11175:434:0:o

Metadata Hash

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