Contract 0x3047799262d8d2ef41ed2a222205968bc9b0d895

 
Txn Hash
Block
From
To
Value [Txn Fee]
0xb5c57cbd1d348a261e7fd34514e0c38a6ee9f595574cee7992374c4aea3bbb9b82966402021-06-14 18:11:223 mins ago0x92063f5b21d10368bade1b8ee78f77bbb0006a1a IN  CheeseSwap: Router0 BNB0.00079426
0x17f1dd488aed5cfd8019522f4a3fd640288b391ee96eb7c3c7047b189099399a82966232021-06-14 18:10:314 mins ago0x733c968c8da47be255f6f82623ec98d45fd82716 IN  CheeseSwap: Router0 BNB0.00048191
0x8ce5d1e659fa6912a44aefda8d3f42a14e7d423ff4cae4ca1155c57ea3dba4e582966142021-06-14 18:10:045 mins ago0x92063f5b21d10368bade1b8ee78f77bbb0006a1a IN  CheeseSwap: Router0 BNB0.000674135
0x363e0c117bab1e5c35973e9cde3c58806f88e48644237ba859c8cc00080ed22382966082021-06-14 18:09:465 mins ago0x733c968c8da47be255f6f82623ec98d45fd82716 IN  CheeseSwap: Router0 BNB0.000871785
0xfebb7296bf3a3421dd709d6485f453703642d6a57b6a06f87c0e18aa22fd67fb82965982021-06-14 18:09:165 mins ago0x7cae6b645f23a70b564088782c4ad01539c4fbbc IN  CheeseSwap: Router0 BNB0.00055697
0xd935a5ec775ad8a04b0e5159f9a97ce0d56c19e6926af58b200af787a28c198e82965772021-06-14 18:08:136 mins ago0x733c968c8da47be255f6f82623ec98d45fd82716 IN  CheeseSwap: Router0 BNB0.00055691
0xb2ba70951f8047ed51c6d9dcd4aca2fb16d7af3981efc125d6c0fd2ab6d75bd682965662021-06-14 18:07:407 mins ago0x6ecf3ae143ddbef453fa40bb832e57c59f42f647 IN  CheeseSwap: Router0.0003645 BNB0.00063022
0x4d231506d0734669bc32bf1b772cbc7b16da3073c90337d6da4bda7f1ff167a982964992021-06-14 18:04:1910 mins ago0xe5d441bec920d653153487252e35742c3d9ca804 IN  CheeseSwap: Router0.056320808928666 BNB0.00067108
0xaa0c84f2638856593a97ae64553c6114fac98ec6172592238869e5858b79442a82964902021-06-14 18:03:5211 mins ago0x93eb08e9c0645e67483d3070be971c9289ad916f IN  CheeseSwap: Router0.00003 BNB0.00063016
0x019c7542de6f206eb7e08f851984bd6c5247186ee38aedc33cf1b130cad403d982964532021-06-14 18:02:0113 mins ago0x92063f5b21d10368bade1b8ee78f77bbb0006a1a IN  CheeseSwap: Router0 BNB0.000923745
0x5d884be5e65f4ca9664a0f4531136c40b2e425eee28229b4f44de2f9bf72b74482964002021-06-14 17:59:2215 mins ago0x92063f5b21d10368bade1b8ee78f77bbb0006a1a IN  CheeseSwap: Router0 BNB0.000557025
0xa0cb4dde76b769f5e2e4b70323388a70e1d29a3e9bc0f2648247bbb46557e29882963852021-06-14 17:58:3716 mins ago0x92063f5b21d10368bade1b8ee78f77bbb0006a1a IN  CheeseSwap: Router0 BNB0.000557025
0xb77122aca272b97164edbfcb8fd43dad55ef7e8d40e988cef505b898462f251e82963722021-06-14 17:57:5817 mins ago0x92063f5b21d10368bade1b8ee78f77bbb0006a1a IN  CheeseSwap: Router0 BNB0.000557025
0xe13920b1b4914eac0d37fe5f8adcf197673ebf8647fabc42e23e7352f37714e082963562021-06-14 17:57:1017 mins ago0x92063f5b21d10368bade1b8ee78f77bbb0006a1a IN  CheeseSwap: Router0 BNB0.000557025
0x2c9d479e6f1453fe55ffb6e35427922c48b94b5946c7cf15116c9d0f697fdcbe82963412021-06-14 17:56:2518 mins ago0x92063f5b21d10368bade1b8ee78f77bbb0006a1a IN  CheeseSwap: Router0 BNB0.000557025
0x0945a69f65112ad9a025627a0b63cab64bfd425e34a83ac32659a7e99060376482963262021-06-14 17:55:4019 mins ago0x92063f5b21d10368bade1b8ee78f77bbb0006a1a IN  CheeseSwap: Router0 BNB0.000557025
0x3dd52bf4a9cd3953b7069ffb1862350da0ec411a21a31cd2ebfb76934b71f52582963112021-06-14 17:54:5520 mins ago0x92063f5b21d10368bade1b8ee78f77bbb0006a1a IN  CheeseSwap: Router0 BNB0.000557025
0xa1241255ef77a82c1fb5fb87ca4f6ceb426938219d923635619198098080ffc082962982021-06-14 17:54:1620 mins ago0x92063f5b21d10368bade1b8ee78f77bbb0006a1a IN  CheeseSwap: Router0 BNB0.000557025
0xfaf1d1d4eed9c57b8a42519118bb7689ae42df869352abb61125c3399ece951782961102021-06-14 17:44:5230 mins ago0x0fb2467e58f9863a5bbb901deae5623f1d4bd326 IN  CheeseSwap: Router0 BNB0.00057242
0x6a6c799e96691fa7a4da30878c663831473706123b65ab1ba5c904a4513928f282960762021-06-14 17:43:1031 mins ago0xae02869b84b9cf951109529ebcd61ad58b10be79 IN  CheeseSwap: Router0.012901865288353 BNB0.000670265
0xe597025961f8e3fa6617587905070c995efdd3b181eaec52196d62e3e4b9e72b82958782021-06-14 17:33:1541 mins ago0x062e3fbad68fba917b2cf0a1e9c9ae25f1d3d351 IN  CheeseSwap: Router0 BNB0.000557935
0x0728dbf2fdcc85bb05aa79a47aec6ca885df8d813a3942becfc31fb57b5e8e2e82957102021-06-14 17:24:5150 mins ago0x82ea3a21114b1ea14aa1decd640f865774248e64 IN  CheeseSwap: Router0 BNB0.00055703
0x5bdd3a927b530d86d75ff9f7a3fb60fbca3413a8260167a25a0ba4d5de2f17e782956852021-06-14 17:23:3651 mins ago0x8ae8342eac2f1a38b31db220ac13660f68ec6c41 IN  CheeseSwap: Router2.062505541052693 BNB0.000756852
0x7976e40f489d528c58ac0a63fc72fcd1328a0a421610e91a55648d9870139f9982956292021-06-14 17:20:4854 mins ago0xd016222e247e1ff8b9c8632abbd6c0bbf2f21cec IN  CheeseSwap: Router0 BNB0.00087301
0x53e07c480273a519e20406593a2957f7c55e5c7f71e0cb9e253aeb05f7062b7d82956262021-06-14 17:20:3954 mins ago0x72747c5f385bda058731a0f7ace85823f070bbce IN  CheeseSwap: Router0 BNB0.000947065
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xb2ba70951f8047ed51c6d9dcd4aca2fb16d7af3981efc125d6c0fd2ab6d75bd682965662021-06-14 18:07:407 mins ago CheeseSwap: Router Binance: WBNB Token0.0003645 BNB
0x4d231506d0734669bc32bf1b772cbc7b16da3073c90337d6da4bda7f1ff167a982964992021-06-14 18:04:1910 mins ago CheeseSwap: Router0xe5d441bec920d653153487252e35742c3d9ca8040.000336355941218469 BNB
0x4d231506d0734669bc32bf1b772cbc7b16da3073c90337d6da4bda7f1ff167a982964992021-06-14 18:04:1910 mins ago CheeseSwap: Router Binance: WBNB Token0.055984452987448147 BNB
0xaa0c84f2638856593a97ae64553c6114fac98ec6172592238869e5858b79442a82964902021-06-14 18:03:5211 mins ago CheeseSwap: Router Binance: WBNB Token0.00003 BNB
0xfaf1d1d4eed9c57b8a42519118bb7689ae42df869352abb61125c3399ece951782961102021-06-14 17:44:5230 mins ago CheeseSwap: Router0x0fb2467e58f9863a5bbb901deae5623f1d4bd3260.087672972064277791 BNB
0xfaf1d1d4eed9c57b8a42519118bb7689ae42df869352abb61125c3399ece951782961102021-06-14 17:44:5230 mins ago Binance: WBNB Token CheeseSwap: Router0.087672972064277791 BNB
0x6a6c799e96691fa7a4da30878c663831473706123b65ab1ba5c904a4513928f282960762021-06-14 17:43:1031 mins ago CheeseSwap: Router0xae02869b84b9cf951109529ebcd61ad58b10be790.00007705178823043 BNB
0x6a6c799e96691fa7a4da30878c663831473706123b65ab1ba5c904a4513928f282960762021-06-14 17:43:1031 mins ago CheeseSwap: Router Binance: WBNB Token0.012824813500123409 BNB
0x5bdd3a927b530d86d75ff9f7a3fb60fbca3413a8260167a25a0ba4d5de2f17e782956852021-06-14 17:23:3651 mins ago CheeseSwap: Router Binance: WBNB Token2.06250554105269371 BNB
0xde01080b6e940ea229401bd5eb150935136d1b138a0923134c8daa3bcc4bee9582956122021-06-14 17:19:5755 mins ago CheeseSwap: Router0x63cefe8175ab832deb7d8a13ccdfc2d922104b000.042966161349352877 BNB
0xde01080b6e940ea229401bd5eb150935136d1b138a0923134c8daa3bcc4bee9582956122021-06-14 17:19:5755 mins ago Binance: WBNB Token CheeseSwap: Router0.042966161349352877 BNB
0x5eb67d746ab5a89bce552519a44a73fc9e1664cc55fc2768b76d2d705885853282955582021-06-14 17:17:1557 mins ago CheeseSwap: Router0xf0a735e67c0b9bc597e7fab4b6475cc77587b6f80.011925907718935352 BNB
0x5eb67d746ab5a89bce552519a44a73fc9e1664cc55fc2768b76d2d705885853282955582021-06-14 17:17:1557 mins ago Binance: WBNB Token CheeseSwap: Router0.011925907718935352 BNB
0x9d8dc26d853d0d7b4273e17664da85645506242c4ce5933e6cabe0130a5223cb82952392021-06-14 17:01:051 hr 14 mins ago CheeseSwap: Router Binance: WBNB Token0.23546416470018011 BNB
0xb5c6458709d6b0b3b8b9ac352f20e9efde4f7ccd57ceaf6355c33003cbb2397e82950602021-06-14 16:52:041 hr 23 mins ago CheeseSwap: Router Binance: WBNB Token0.05956 BNB
0x3377ef836724963db46f6f44dfc0f7c161f92a66cafca5283ce2652f18cbf31682950532021-06-14 16:51:431 hr 23 mins ago CheeseSwap: Router Binance: WBNB Token0.05 BNB
0x6dd39cdd26cbbaf1f84f8b6f6ed1e8f6ee53d86bcf343c359488e2577886013782949292021-06-14 16:45:311 hr 29 mins ago CheeseSwap: Router0xf0a735e67c0b9bc597e7fab4b6475cc77587b6f80.000026817075464156 BNB
0x6dd39cdd26cbbaf1f84f8b6f6ed1e8f6ee53d86bcf343c359488e2577886013782949292021-06-14 16:45:311 hr 29 mins ago CheeseSwap: Router Binance: WBNB Token0.002976026740623794 BNB
0xe713a2539ad35fc9c866fc406b2e1c102cacdf08ab5ed6c18ba02407d9f711e482947592021-06-14 16:37:011 hr 38 mins ago CheeseSwap: Router Binance: WBNB Token0.02 BNB
0x00141fe12b259419457a36cade668d9438586b9c6228855a788d6cbf3b49a0e182946462021-06-14 16:31:221 hr 43 mins ago CheeseSwap: Router0x76c1295c1bbc03308a3767370295539a4a32ca230.014494117721013178 BNB
0x00141fe12b259419457a36cade668d9438586b9c6228855a788d6cbf3b49a0e182946462021-06-14 16:31:221 hr 43 mins ago Binance: WBNB Token CheeseSwap: Router0.014494117721013178 BNB
0xc689c7685d77d634f3a1554122be81043ca609da1aa7cb93e9ec16a1f3a2b7fb82946122021-06-14 16:29:401 hr 45 mins ago CheeseSwap: Router Binance: WBNB Token0.03 BNB
0x9b2828154a75598c3adc05fa855e75d2e566edb6840c0cfb6cd7e05c9f7c090d82944592021-06-14 16:21:591 hr 53 mins ago CheeseSwap: Router0x07e27eee406ccc00adaf5f38adf62f07b22389b80.275338860034991304 BNB
0x9b2828154a75598c3adc05fa855e75d2e566edb6840c0cfb6cd7e05c9f7c090d82944592021-06-14 16:21:591 hr 53 mins ago Binance: WBNB Token CheeseSwap: Router0.275338860034991304 BNB
0xf68f371e04b8415cad74b90a2a52d8de2d58cd0f43a4056475dc3b5fb813d4df82943412021-06-14 16:16:051 hr 59 mins ago CheeseSwap: Router Binance: WBNB Token0.036658693844059602 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CheeseSwapRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license, Audited

Contract Source Code (Solidity)Audit Report

/**
 *Submitted for verification at BscScan.com on 2020-10-22
*/

// SPDX-License-Identifier: MIT

pragma solidity =0.6.6;


interface ICheeseSwapFactory {
    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 ICheeseSwapRouter01 {
    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 ICheeseSwapRouter02 is ICheeseSwapRouter01 {
    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 ICheeseSwapPair {
    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 CheeseSwapLibrary {
    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, 'CheeseSwapLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'CheeseSwapLibrary: 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'f52c5189a89e7ca2ef4f19f2798e3900fba7a316de7cef6c5a9446621ba86286' // 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,) = ICheeseSwapPair(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, 'CheeseSwapLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'CheeseSwapLibrary: 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, 'CheeseSwapLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'CheeseSwapLibrary: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(998);
        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, 'CheeseSwapLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'CheeseSwapLibrary: INSUFFICIENT_LIQUIDITY');
        uint numerator = reserveIn.mul(amountOut).mul(1000);
        uint denominator = reserveOut.sub(amountOut).mul(998);
        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, 'CheeseSwapLibrary: 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, 'CheeseSwapLibrary: 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 CheeseSwapRouter is ICheeseSwapRouter02 {
    using SafeMath for uint;

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

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

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

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

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

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

Contract Security Audit

Contract ABI

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

60c060405234801561001057600080fd5b506040516200477d3803806200477d8339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6145f8620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118eb52806119e55280611a9b5280611b695280611caf5280611d375280611f7c5280611ff752806120a652806121725280612207528061227b528061277952806129ec5280612a425280612a765280612aea5280612c8a5280612dcd5280612e55525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611bfc5280611d695280611ecc52806122ad528061250652806126fe5280612727528061275752806128c45280612a205280612d1d5280612e87528061372e52806137715280613a545280613bd3528061400352806140b1528061413152506145f86000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124b8565b348015610a1c57600080fd5b5061088a6126fc565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612720945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561274d565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612861565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561299d565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c42565b6000808242811015610cde576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124b8565b9093509150610d1d898685612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da5858361312e565b50965096945050505050565b6000610dbe848484613226565b949350505050565b60608142811015610e0c576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b815260206004820152601e6024820152600080516020614535833981519152604482015290519081900360640190fd5b610efd7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b815260040180806020018281038252602c815260200180614448602c913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b0316613462565b85600081518110610fe657fe5b6020026020010151613522565b6110328287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061367f915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b602002602001015161312e565b509695505050505050565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846138c5565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f613462565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124b8565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b6112c77f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b815260040180806020018281038252602c815260200180614448602c913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e88287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b606081428110156113b4576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b815260206004820152601e6024820152600080516020614535833981519152604482015290519081900360640190fd5b6114a57f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b81526004018080602001828103825260288152602001806144746028913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a613522565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a49290918991899182918501908490808284376000920191909152508892506139fd915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613d0816565b10156118935760405162461bcd60e51b815260040180806020018281038252602c815260200180614448602c913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b815260206004820152601e6024820152600080516020614535833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c28585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506139fd915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b815260040180806020018281038252602c815260200180614448602c913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b50505050611893848261312e565b60608142811015611b67576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b815260206004820152601e6024820152600080516020614535833981519152604482015290519081900360640190fd5b611c557f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b815260040180806020018281038252602c815260200180614448602c913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d957f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b5095945050505050565b6000610dbe848484613d58565b60608142811015611ec7576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b611f257f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b81526004018080602001828103825260288152602001806144746028913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613e48565b60008142811015611ff1576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b612020887f000000000000000000000000000000000000000000000000000000000000000089898930896124b8565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e8848361312e565b8042811015612170576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b815260206004820152601e6024820152600080516020614535833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122d97f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a9182918501908490808284376000920191909152508992506139fd915050565b87611856828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b60008082428110156124ff576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b600061252c7f00000000000000000000000000000000000000000000000000000000000000008c8c613462565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561258757600080fd5b505af115801561259b573d6000803e3d6000fd5b505050506040513d60208110156125b157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b505050506040513d604081101561262857600080fd5b508051602090910151909250905060006126428e8e613ef4565b509050806001600160a01b03168e6001600160a01b031614612665578183612668565b82825b90975095508a8710156126ac5760405162461bcd60e51b81526004018080602001828103825260278152602001806144c26027913960400191505060405180910390fd5b898610156126eb5760405162461bcd60e51b81526004018080602001828103825260278152602001806145556027913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f00000000000000000000000000000000000000000000000000000000000000008484613316565b600080600061279d7f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613462565b90506000876127ac578c6127b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561282657600080fd5b505af115801561283a573d6000803e3d6000fd5b5050505061284c8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128aa576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b6128b88c8c8c8c8c8c613fd2565b909450925060006128ea7f00000000000000000000000000000000000000000000000000000000000000008e8e613462565b90506128f88d338388613522565b6129048c338387613522565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561295c57600080fd5b505af1158015612970573d6000803e3d6000fd5b505050506040513d602081101561298657600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129e6576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b612a148a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613fd2565b90945092506000612a667f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050612a748b338388613522565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612acf57600080fd5b505af1158015612ae3573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b6857600080fd5b505af1158015612b7c573d6000803e3d6000fd5b505050506040513d6020811015612b9257600080fd5b5051612b9a57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b505050506040513d6020811015612c1c57600080fd5b5051925034841015612c3457612c343385340361312e565b505096509650969350505050565b60608142811015612c88576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612cbf57fe5b905060200201356001600160a01b03166001600160a01b031614612d18576040805162461bcd60e51b815260206004820152601e6024820152600080516020614535833981519152604482015290519081900360640190fd5b612d767f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91503482600081518110612d8657fe5b60200260200101511115612dcb5760405162461bcd60e51b81526004018080602001828103825260288152602001806144746028913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e0757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e3a57600080fd5b505af1158015612e4e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612eb37f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612ec057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b505050506040513d6020811015612f4157600080fd5b5051612f4957fe5b612f888287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b81600081518110612f9557fe5b6020026020010151341115611e6a57611e6a3383600081518110612fb557fe5b6020026020010151340361312e565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130415780518252601f199092019160209182019101613022565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130a3576040519150601f19603f3d011682016040523d82523d6000602084013e6130a8565b606091505b50915091508180156130d65750805115806130d657508080602001905160208110156130d357600080fd5b50515b613127576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061317a5780518252601f19909201916020918201910161315b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131dc576040519150601f19603f3d011682016040523d82523d6000602084013e6131e1565b606091505b50509050806132215760405162461bcd60e51b815260040180806020018281038252602381526020018061457c6023913960400191505060405180910390fd5b505050565b60008084116132665760405162461bcd60e51b815260040180806020018281038252602c8152602001806144e9602c913960400191505060405180910390fd5b6000831180156132765750600082115b6132b15760405162461bcd60e51b81526004018080602001828103825260298152602001806143f96029913960400191505060405180910390fd5b60006132c5856103e663ffffffff61424616565b905060006132d9828563ffffffff61424616565b905060006132ff836132f3886103e863ffffffff61424616565b9063ffffffff6142a916565b905080828161330a57fe5b04979650505050505050565b606060028251101561336f576040805162461bcd60e51b815260206004820152601f60248201527f436865657365537761704c6962726172793a20494e56414c49445f5041544800604482015290519081900360640190fd5b815167ffffffffffffffff8111801561338757600080fd5b506040519080825280602002602001820160405280156133b1578160200160208202803683370190505b50905082816000815181106133c257fe5b60200260200101818152505060005b600183510381101561345a57600080613414878685815181106133f057fe5b602002602001015187866001018151811061340757fe5b60200260200101516142f8565b9150915061343684848151811061342757fe5b60200260200101518383613226565b84846001018151811061344557fe5b602090810291909101015250506001016133d1565b509392505050565b60008060006134718585613ef4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527ff52c5189a89e7ca2ef4f19f2798e3900fba7a316de7cef6c5a9446621ba86286609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135a75780518252601f199092019160209182019101613588565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613609576040519150601f19603f3d011682016040523d82523d6000602084013e61360e565b606091505b509150915081801561363c57508051158061363c575080806020019051602081101561363957600080fd5b50515b6136775760405162461bcd60e51b815260040180806020018281038252602481526020018061459f6024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138bf5760008084838151811061369d57fe5b60200260200101518584600101815181106136b457fe5b60200260200101519150915060006136cc8383613ef4565b50905060008785600101815181106136e057fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461370e57826000613712565b6000835b91509150600060028a51038810613729578861376a565b61376a7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061375d57fe5b6020026020010151613462565b90506137977f00000000000000000000000000000000000000000000000000000000000000008888613462565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137d4576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561384557818101518382015260200161382d565b50505050905090810190601f1680156138725780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561389457600080fd5b505af11580156138a8573d6000803e3d6000fd5b505060019099019850613682975050505050505050565b50505050565b606060028251101561391e576040805162461bcd60e51b815260206004820152601f60248201527f436865657365537761704c6962726172793a20494e56414c49445f5041544800604482015290519081900360640190fd5b815167ffffffffffffffff8111801561393657600080fd5b50604051908082528060200260200182016040528015613960578160200160208202803683370190505b509050828160018351038151811061397457fe5b60209081029190910101528151600019015b801561345a576000806139b6878660018603815181106139a257fe5b602002602001015187868151811061340757fe5b915091506139d88484815181106139c957fe5b60200260200101518383613d58565b8460018503815181106139e757fe5b6020908102919091010152505060001901613986565b60005b600183510381101561322157600080848381518110613a1b57fe5b6020026020010151858460010181518110613a3257fe5b6020026020010151915091506000613a4a8383613ef4565b5090506000613a7a7f00000000000000000000000000000000000000000000000000000000000000008585613462565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613abb57600080fd5b505afa158015613acf573d6000803e3d6000fd5b505050506040513d6060811015613ae557600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613b1b578284613b1e565b83835b91509150613b7c828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613b89868383613226565b945050505050600080856001600160a01b0316886001600160a01b031614613bb357826000613bb7565b6000835b91509150600060028c51038a10613bce578a613c02565b613c027f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061375d57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c8c578181015183820152602001613c74565b50505050905090810190601f168015613cb95780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613cdb57600080fd5b505af1158015613cef573d6000803e3d6000fd5b50506001909b019a50613a009950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d985760405162461bcd60e51b815260040180806020018281038252602d8152602001806143cc602d913960400191505060405180910390fd5b600083118015613da85750600082115b613de35760405162461bcd60e51b81526004018080602001828103825260298152602001806143f96029913960400191505060405180910390fd5b6000613e076103e8613dfb868863ffffffff61424616565b9063ffffffff61424616565b90506000613e216103e6613dfb868963ffffffff613d0816565b9050613e3e6001828481613e3157fe5b049063ffffffff6142a916565b9695505050505050565b6000808411613e885760405162461bcd60e51b81526004018080602001828103825260268152602001806144226026913960400191505060405180910390fd5b600083118015613e985750600082115b613ed35760405162461bcd60e51b81526004018080602001828103825260298152602001806143f96029913960400191505060405180910390fd5b82613ee4858463ffffffff61424616565b81613eeb57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f485760405162461bcd60e51b815260040180806020018281038252602681526020018061449c6026913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613f68578284613f6b565b83835b90925090506001600160a01b038216613fcb576040805162461bcd60e51b815260206004820152601f60248201527f436865657365537761704c6962726172793a205a45524f5f4144445245535300604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561404c57600080fd5b505afa158015614060573d6000803e3d6000fd5b505050506040513d602081101561407657600080fd5b50516001600160a01b0316141561412957604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156140fc57600080fd5b505af1158015614110573d6000803e3d6000fd5b505050506040513d602081101561412657600080fd5b50505b6000806141577f00000000000000000000000000000000000000000000000000000000000000008b8b6142f8565b91509150816000148015614169575080155b1561417957879350869250614239565b6000614186898484613e48565b90508781116141d957858110156141ce5760405162461bcd60e51b81526004018080602001828103825260278152602001806145556027913960400191505060405180910390fd5b889450925082614237565b60006141e6898486613e48565b9050898111156141f257fe5b878110156142315760405162461bcd60e51b81526004018080602001828103825260278152602001806144c26027913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806142615750508082028282828161425e57fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006143078585613ef4565b509050614315868686613462565b50600080614324888888613462565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561435c57600080fd5b505afa158015614370573d6000803e3d6000fd5b505050506040513d606081101561438657600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143b95780826143bc565b81815b9099909850965050505050505056fe436865657365537761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54436865657365537761704c6962726172793a20494e53554646494349454e545f4c4951554944495459436865657365537761704c6962726172793a20494e53554646494349454e545f414d4f554e5443686565736553776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5443686565736553776170526f757465723a204558434553534956455f494e5055545f414d4f554e54436865657365537761704c6962726172793a204944454e544943414c5f41444452455353455343686565736553776170526f757465723a20494e53554646494349454e545f415f414d4f554e54436865657365537761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5443686565736553776170526f757465723a20455850495245440000000000000043686565736553776170526f757465723a20494e56414c49445f50415448000043686565736553776170526f757465723a20494e53554646494349454e545f425f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45445472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a26469706673582212207e51ec9d55025e45c838e2a5d3e29a71fb45ff3239f75d85e27bda48a9da4f4464736f6c63430006060033000000000000000000000000dd538e4fd1b69b7863e1f741213276a6cf1efb3b000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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

000000000000000000000000dd538e4fd1b69b7863e1f741213276a6cf1efb3b000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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


Deployed ByteCode Sourcemap

15531:18618:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16014:10;-1:-1:-1;;;;;16028:4:0;16014:18;;16007:26;;;;15531:18618;;12:1:-1;9;2:12;20181:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20181:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20181:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33089:263;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33089:263:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33089:263:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27374:854;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27374:854:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27374:854:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27374:854:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27374:854: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;27374:854:0;;-1:-1:-1;27374:854:0;-1:-1:-1;;;;;;27374:854: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;27374:854:0;;;;;;;;;;;;;;;;;33892:254;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33892:254:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33892:254:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33892:254:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33892:254: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;33892:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33892:254:0;;-1:-1:-1;33892:254:0;;-1:-1:-1;;;;;33892:254:0:i;20860:679::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20860:679:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20860:679:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24577:631::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24577:631:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24577:631:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24577:631:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24577:631: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;24577:631:0;;-1:-1:-1;24577:631:0;-1:-1:-1;;;;;;24577:631:0;;;;;;;;:::i;26536:832::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26536:832:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26536:832:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26536:832:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26536:832: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;26536:832:0;;-1:-1:-1;26536:832:0;-1:-1:-1;;;;;;26536:832:0;;;;;;;;:::i;23001:720::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23001:720:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23001:720:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30421:716::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30421:716:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30421:716:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30421:716:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30421:716: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;30421:716:0;;-1:-1:-1;30421:716:0;-1:-1:-1;;;;;;30421:716:0;;;;;;;;:::i;32002:846::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32002:846:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32002:846:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;32002:846:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32002:846: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;32002:846:0;;-1:-1:-1;32002:846:0;-1:-1:-1;;;;;;32002:846:0;;;;;;;;:::i;25829:701::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25829:701:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25829:701:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25829:701: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;25829:701:0;;-1:-1:-1;25829:701:0;-1:-1:-1;;;;;;25829:701:0;;;;;;;;:::i;33360:262::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33360:262:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33360:262:0;;;;;;;;;;;;:::i;25214:609::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25214:609:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25214:609:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25214:609:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25214:609: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;25214:609:0;;-1:-1:-1;25214:609:0;-1:-1:-1;;;;;;25214:609:0;;;;;;;;:::i;15667:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15667:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;15667:38:0;;;;;;;;;;;;;;32892:189;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32892:189:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32892:189:0;;;;;;;;;;;;:::i;22295:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22295:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22295:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31143:853::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31143:853:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31143:853:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31143:853: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;31143:853:0;;-1:-1:-1;31143:853:0;-1:-1:-1;;;;;;31143:853:0;;;;;;;;:::i;19304:871::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19304:871:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19304:871:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15619:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15619:41:0;;;:::i;33630:254::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33630:254:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33630:254:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33630:254:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33630:254: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;33630:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33630:254:0;;-1:-1:-1;33630:254:0;;-1:-1:-1;;;;;33630:254:0:i;21545:671::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21545:671:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21545:671:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17539:740::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17539:740:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17539:740:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18285:976;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18285:976:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28234:814::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28234:814:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28234:814:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28234:814: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;28234:814:0;;-1:-1:-1;28234:814:0;-1:-1:-1;;;;;;28234:814:0;;;;;;;;:::i;20181:673::-;20418:16;20436:14;20399:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;20490:196:::1;20520:5;20540:4;20559:9;20583:14;20612:12;20647:4;20667:8;20490:15;:196::i;:::-;20463:223:::0;;-1:-1:-1;20463:223:0;-1:-1:-1;20697:51:0::1;20725:5:::0;20732:2;20463:223;20697:27:::1;:51::i;:::-;20765:4;-1:-1:-1::0;;;;;20759:20:0::1;;20780:9;20759:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20759:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20759:31:0;;;;20801:45;20832:2;20836:9;20801:30;:45::i;:::-;20181:673:::0;;;;;;;;;;:::o;33089:263::-;33242:14;33281:63;33312:8;33322:9;33333:10;33281:30;:63::i;:::-;33274:70;33089:263;-1:-1:-1;;;;33089:263:0:o;27374:854::-;27588:21;27560:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27660:4:0::1;27635:29;:4:::0;;-1:-1:-1;;27640:15:0;;27635:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27635:21:0::1;-1:-1:-1::0;;;;;27635:29:0::1;;27627:72;;;::::0;;-1:-1:-1;;;27627:72:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27627:72:0;;;;;;;;;;;;;::::1;;27720:56;27752:7;27761:8;27771:4;;27720:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27720:31:0::1;::::0;-1:-1:-1;;;27720:56:0:i:1;:::-;27710:66;;27826:12;27795:7;27820:1;27803:7;:14;:18;27795:27;;;;;;;;;;;;;;:43;;27787:100;;;;-1:-1:-1::0;;;27787:100:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27898:142;27944:4;;27949:1;27944:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27944:7:0::1;27953:10;27965:52;27991:7;28000:4;;28005:1;28000:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28000:7:0::1;28009:4;;28014:1;28009:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28009:7:0::1;27965:25;:52::i;:::-;28019:7;28027:1;28019:10;;;;;;;;;;;;;;27898:31;:142::i;:::-;28051:35;28057:7;28066:4;;28051:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28080:4:0::1;::::0;-1:-1:-1;28051:5:0::1;::::0;-1:-1:-1;;28051:35:0:i:1;:::-;28103:4;-1:-1:-1::0;;;;;28097:20:0::1;;28118:7;28143:1;28126:7;:14;:18;28118:27;;;;;;;;;;;;;;28097:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28097:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28097:49:0;;;;28157:63;28188:2;28192:7;28217:1;28200:7;:14;:18;28192:27;;;;;;;;;;;;;;28157:30;:63::i;:::-;27374:854:::0;;;;;;;;;:::o;33892:254::-;34036:21;34082:56;34113:7;34122:9;34133:4;34082:30;:56::i;:::-;34075:63;;33892:254;;;;;:::o;20860:679::-;21166:12;21180;21205;21220:50;21246:7;21255:6;21263;21220:25;:50::i;:::-;21205:65;;21281:10;21294;:33;;21318:9;21294:33;;;-1:-1:-1;;21294:33:0;21338:81;;;-1:-1:-1;;;21338:81:0;;21367:10;21338:81;;;;21387:4;21338:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21281:46;;-1:-1:-1;;;;;;21338:28:0;;;;;:81;;;;;-1:-1:-1;;21338:81:0;;;;;;;;-1:-1:-1;21338:28:0;:81;;;2:2:-1;;;;27:1;24;17:12;2:2;21338:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21338:81:0;;;;21451:80;21467:6;21475;21483:9;21494:10;21506;21518:2;21522:8;21451:15;:80::i;:::-;21430:101;;;;;;;;20860:679;;;;;;;;;;;;;;;;:::o;24577:631::-;24801:21;24782:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;24845:56:::1;24877:7;24886:8;24896:4;;24845:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24845:31:0::1;::::0;-1:-1:-1;;;24845:56:0:i:1;:::-;24835:66;;24951:12;24920:7;24945:1;24928:7;:14;:18;24920:27;;;;;;;;;;;;;;:43;;24912:100;;;;-1:-1:-1::0;;;24912:100:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25023:142;25069:4;;25074:1;25069:7;;;;;;25023:142;25176:24;25182:7;25191:4;;25176:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25197:2:0;;-1:-1:-1;25176:5:0::1;::::0;-1:-1:-1;;25176:24:0:i:1;26536:832::-:0;26750:21;26722:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;26822:4:0::1;26797:29;:4:::0;;-1:-1:-1;;26802:15:0;;26797:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;26797:21:0::1;-1:-1:-1::0;;;;;26797:29:0::1;;26789:72;;;::::0;;-1:-1:-1;;;26789:72:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26789:72:0;;;;;;;;;;;;;::::1;;26882:56;26913:7;26922:9;26933:4;;26882:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26882:30:0::1;::::0;-1:-1:-1;;;26882:56:0:i:1;:::-;26872:66;;26971:11;26957:7;26965:1;26957:10;;;;;;;;;;;;;;:25;;26949:78;;;;-1:-1:-1::0;;;26949:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23001:720:::0;23319:14;23346:12;23361:47;23387:7;23396:5;23403:4;23361:25;:47::i;:::-;23346:62;;23419:10;23432;:33;;23456:9;23432:33;;;-1:-1:-1;;23432:33:0;23476:81;;;-1:-1:-1;;;23476:81:0;;23505:10;23476:81;;;;23525:4;23476:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23419:46;;-1:-1:-1;;;;;;23476:28:0;;;;;:81;;;;;-1:-1:-1;;23476:81:0;;;;;;;;-1:-1:-1;23476:28:0;:81;;;2:2:-1;;;;27:1;24;17:12;2:2;23476:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23476:81:0;;;;23580:133;23642:5;23649:9;23660:14;23676:12;23690:2;23694:8;23580:47;:133::i;:::-;23568:145;23001:720;-1:-1:-1;;;;;;;;;;;;;23001:720:0:o;30421:716::-;30655:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;30676:140:::1;30722:4;;30727:1;30722:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30722:7:0::1;30731:10;30743:52;30769:7;30778:4;;30783:1;30778:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30778:7:0::1;30787:4;;30792:1;30787:7;;;;;;30743:52;30797:8;30676:31;:140::i;:::-;30827:18;30855:4:::0;;-1:-1:-1;;30860:15:0;;30855:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30855:21:0::1;-1:-1:-1::0;;;;;30848:39:0::1;;30888:2;30848:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;30848:43:0::1;-1:-1:-1::0;;;;;30848:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30848:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30848:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30848:43:0;30902:44:::1;::::0;;30848:43:::1;30902:44:::0;;::::1;::::0;;;;;;;;;;;30848:43;;-1:-1:-1;30902:44:0::1;::::0;;;30937:4;;;;;;30902:44;::::1;::::0;30937:4;;30902:44;30937:4;30902:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30943:2:0;;-1:-1:-1;30902:34:0::1;::::0;-1:-1:-1;;30902:44:0:i:1;:::-;31045:12:::0;30979:62:::1;31027:13:::0;30986:4;;-1:-1:-1;;30991:15:0;;30986:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30986:21:0::1;-1:-1:-1::0;;;;;30979:39:0::1;;31019:2;30979:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;30979:43:0::1;-1:-1:-1::0;;;;;30979:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30979:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30979:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30979:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;30957:172;;;;-1:-1:-1::0;;;30957:172:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15832:1;30421:716:::0;;;;;;;:::o;32002:846::-;32269:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32328:4:0::1;32303:29;:4:::0;;-1:-1:-1;;32308:15:0;;32303:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32303:21:0::1;-1:-1:-1::0;;;;;32303:29:0::1;;32295:72;;;::::0;;-1:-1:-1;;;32295:72:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32295:72:0;;;;;;;;;;;;;::::1;;32378:140;32424:4;;32429:1;32424:7;;;;;;32378:140;32529:55;32564:4;;32529:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32578:4:0::1;::::0;-1:-1:-1;32529:34:0::1;::::0;-1:-1:-1;;32529:55:0:i:1;:::-;32612:37;::::0;;-1:-1:-1;;;32612:37:0;;32643:4:::1;32612:37;::::0;::::1;::::0;;;32595:14:::1;::::0;-1:-1:-1;;;;;32619:4:0::1;32612:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;32612:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32612:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32612:37:0;;-1:-1:-1;32668:25:0;;::::1;;32660:82;;;;-1:-1:-1::0;;;32660:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32759:4;-1:-1:-1::0;;;;;32753:20:0::1;;32774:9;32753:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32753:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32753:31:0;;;;32795:45;32826:2;32830:9;32795:30;:45::i;25829:701::-:0;26045:21;26017:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;26103:4:::1;-1:-1:-1::0;;;;;26092:15:0::1;:4;;26097:1;26092:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26092:7:0::1;-1:-1:-1::0;;;;;26092:15:0::1;;26084:58;;;::::0;;-1:-1:-1;;;26084:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26084:58:0;;;;;;;;;;;;;::::1;;26163:57;26195:7;26204:9;26215:4;;26163:57;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26163:31:0::1;::::0;-1:-1:-1;;;26163:57:0:i:1;:::-;26153:67;;26270:12;26239:7;26264:1;26247:7;:14;:18;26239:27;;;;;;;;;;;;;;:43;;26231:100;;;;-1:-1:-1::0;;;26231:100:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26348:4;-1:-1:-1::0;;;;;26342:19:0::1;;26369:7;26377:1;26369:10;;;;;;;;;;;;;;26342:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26342:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26342:40:0;;;;;26406:4;-1:-1:-1::0;;;;;26400:20:0::1;;26421:52;26447:7;26456:4;;26461:1;26456:7;;;;;;26421:52;26475:7;26483:1;26475:10;;;;;;;;;;;;;;26400:86;;;;;;;;;;;;;-1:-1:-1::0;;;;;26400:86:0::1;-1:-1:-1::0;;;;;26400:86:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26400:86:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26400:86:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26400:86:0;26393:94:::1;;;;26498:24;26504:7;26513:4;;26498:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26519:2:0;;-1:-1:-1;26498:5:0::1;::::0;-1:-1:-1;;26498:24:0:i:1;:::-;25829:701:::0;;;;;;;;:::o;33360:262::-;33513:13;33551:63;33581:9;33592;33603:10;33551:29;:63::i;25214:609::-;25438:21;25419:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;25482:56:::1;25513:7;25522:9;25533:4;;25482:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25482:30:0::1;::::0;-1:-1:-1;;;25482:56:0:i:1;:::-;25472:66;;25571:11;25557:7;25565:1;25557:10;;;;;;;;;;;;;;:25;;25549:78;;;;-1:-1:-1::0;;;25549:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15667:38:::0;;;:::o;32892:189::-;32989:12;33021:52;33045:7;33054:8;33064;33021:23;:52::i;22295:700::-;22561:14;22542:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;22604:196:::1;22634:5;22654:4;22673:9;22697:14;22726:12;22761:4;22781:8;22604:15;:196::i;:::-;22850:38;::::0;;-1:-1:-1;;;22850:38:0;;22882:4:::1;22850:38;::::0;::::1;::::0;;;22588:212;;-1:-1:-1;22811:78:0::1;::::0;-1:-1:-1;22839:5:0;;22846:2;;-1:-1:-1;;;;;22850: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;22850:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22850:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22850:38:0;22811:27:::1;:78::i;:::-;22906:4;-1:-1:-1::0;;;;;22900:20:0::1;;22921:9;22900:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22900:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22900:31:0;;;;22942:45;22973:2;22977:9;22942:30;:45::i;31143:853::-:0;31403:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;31448:4:::1;-1:-1:-1::0;;;;;31437:15:0::1;:4;;31442:1;31437:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31437:7:0::1;-1:-1:-1::0;;;;;31437:15:0::1;;31429:58;;;::::0;;-1:-1:-1;;;31429:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31429:58:0;;;;;;;;;;;;;::::1;;31498:13;31514:9;31498:25;;31540:4;-1:-1:-1::0;;;;;31534:19:0::1;;31561:8;31534:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31534:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31534:38:0;;;;;31596:4;-1:-1:-1::0;;;;;31590:20:0::1;;31611:52;31637:7;31646:4;;31651:1;31646:7;;;;;;31611:52;31665:8;31590:84;;;;;;;;;;;;;-1:-1:-1::0;;;;;31590:84:0::1;-1:-1:-1::0;;;;;31590:84:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31590:84:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31590:84:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31590:84:0;31583:92:::1;;;;31686:18;31714:4:::0;;-1:-1:-1;;31719:15:0;;31714:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31714:21:0::1;-1:-1:-1::0;;;;;31707:39:0::1;;31747:2;31707:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31707:43:0::1;-1:-1:-1::0;;;;;31707:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31707:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31707:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31707:43:0;31761:44:::1;::::0;;31707:43:::1;31761:44:::0;;::::1;::::0;;;;;;;;;;;31707:43;;-1:-1:-1;31761:44:0::1;::::0;;;31796:4;;;;;;31761:44;::::1;::::0;31796:4;;31761:44;31796:4;31761:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31802:2:0;;-1:-1:-1;31761:34:0::1;::::0;-1:-1:-1;;31761:44:0:i:1;:::-;31904:12:::0;31838:62:::1;31886:13:::0;31845:4;;-1:-1:-1;;31850:15:0;;31845:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31845:21:0::1;-1:-1:-1::0;;;;;31838:39:0::1;;31878:2;31838:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31838:43:0::1;-1:-1:-1::0;;;;;31838:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;19304:871:0::0;19558:12;19572;19539:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;19597:12:::1;19612:50;19638:7;19647:6;19655;19612:25;:50::i;:::-;19673:63;::::0;;-1:-1:-1;;;19673:63:0;;19708:10:::1;19673:63;::::0;::::1;::::0;-1:-1:-1;;;;;19673:34:0;::::1;:63:::0;;;;;;;;;;;;;;19597:65;;-1:-1:-1;19673:34:0;;::::1;::::0;:63;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;19673:34:0;:63;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19673:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19673:63:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;19804:30:0::1;::::0;;-1:-1:-1;;;19804:30:0;;-1:-1:-1;;;;;19804:30:0;;::::1;;::::0;::::1;::::0;;;19774:12:::1;::::0;;;19804:26;;::::1;::::0;::::1;::::0;:30;;;;;;;;;;;19774:12;19804:26;:30;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19804:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19804:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19804:30:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;19804:30:0;-1:-1:-1;19846:14:0::1;19865:44;19894:6:::0;19902;19865:28:::1;:44::i;:::-;19845:64;;;19951:6;-1:-1:-1::0;;;;;19941:16:0::1;:6;-1:-1:-1::0;;;;;19941:16:0::1;;:58;;19982:7;19991;19941:58;;;19961:7;19970;19941:58;19920:79:::0;;-1:-1:-1;19920:79:0;-1:-1:-1;20018:21:0;;::::1;;20010:73;;;;-1:-1:-1::0;;;20010:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20113:10;20102:7;:21;;20094:73;;;;-1:-1:-1::0;;;20094:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15832:1;;;;19304:871:::0;;;;;;;;;;;:::o;15619:41::-;;;:::o;33630:254::-;33774:21;33820:56;33852:7;33861:8;33871:4;33820:31;:56::i;21545:671::-;21834:16;21852:14;21879:12;21894:47;21920:7;21929:5;21936:4;21894:25;:47::i;:::-;21879:62;;21952:10;21965;:33;;21989:9;21965:33;;;-1:-1:-1;;21965:33:0;22009:81;;;-1:-1:-1;;;22009:81:0;;22038:10;22009:81;;;;22058:4;22009:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21952:46;;-1:-1:-1;;;;;;22009:28:0;;;;;:81;;;;;-1:-1:-1;;22009:81:0;;;;;;;;-1:-1:-1;22009:28:0;:81;;;2:2:-1;;;;27:1;24;17:12;2:2;22009:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22009:81:0;;;;22128:80;22147:5;22154:9;22165:14;22181:12;22195:2;22199:8;22128:18;:80::i;:::-;22101:107;;;;-1:-1:-1;21545:671:0;-1:-1:-1;;;;;;;;;;;;;21545:671:0:o;17539:740::-;17827:12;17841;17855:14;17808:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;17903:85:::1;17917:6;17925;17933:14;17949;17965:10;17977;17903:13;:85::i;:::-;17882:106:::0;;-1:-1:-1;17882:106:0;-1:-1:-1;17999:12:0::1;18014:50;18040:7;18049:6:::0;18057;18014:25:::1;:50::i;:::-;17999:65;;18075:66;18107:6;18115:10;18127:4;18133:7;18075:31;:66::i;:::-;18152;18184:6;18192:10;18204:4;18210:7;18152:31;:66::i;:::-;18257:4;-1:-1:-1::0;;;;;18241:26:0::1;;18268:2;18241:30;;;;;;;;;;;;;-1:-1:-1::0;;;;;18241:30:0::1;-1:-1:-1::0;;;;;18241:30:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18241:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18241:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18241:30:0;17539:740;;;;-1:-1:-1;18241:30:0;;-1:-1:-1;17539:740:0;;-1:-1:-1;;;;;;;;;17539:740:0:o;18285:976::-;18538:16;18556:14;18572;18519:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;18626:176:::1;18654:5;18674:4;18693:18;18726:9;18750:14;18779:12;18626:13;:176::i;:::-;18599:203:::0;;-1:-1:-1;18599:203:0;-1:-1:-1;18813:12:0::1;18828:47;18854:7;18863:5:::0;18870:4:::1;18828:25;:47::i;:::-;18813:62;;18886:69;18918:5;18925:10;18937:4;18943:11;18886:31;:69::i;:::-;18972:4;-1:-1:-1::0;;;;;18966:19:0::1;;18993:9;18966:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18966:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18966:39:0;;;;;19029:4;-1:-1:-1::0;;;;;19023:20:0::1;;19044:4;19050:9;19023:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;19023:37:0::1;-1:-1:-1::0;;;;;19023:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19023:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19023:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19023:37:0;19016:45:::1;;;;19100:4;-1:-1:-1::0;;;;;19084:26:0::1;;19111:2;19084:30;;;;;;;;;;;;;-1:-1:-1::0;;;;;19084:30:0::1;-1:-1:-1::0;;;;;19084:30:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19084:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19084:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19084:30:0;;-1:-1:-1;19165:9:0::1;:21:::0;-1:-1:-1;19161:92:0::1;;;19188:65;19219:10;19243:9;19231;:21;19188:30;:65::i;:::-;15832:1;18285:976:::0;;;;;;;;;;;:::o;28234:814::-;28447:21;28419:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;28505:4:::1;-1:-1:-1::0;;;;;28494:15:0::1;:4;;28499:1;28494:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28494:7:0::1;-1:-1:-1::0;;;;;28494:15:0::1;;28486:58;;;::::0;;-1:-1:-1;;;28486:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28486:58:0;;;;;;;;;;;;;::::1;;28565:56;28596:7;28605:9;28616:4;;28565:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28565:30:0::1;::::0;-1:-1:-1;;;28565:56:0:i:1;:::-;28555:66;;28654:9;28640:7;28648:1;28640:10;;;;;;;;;;;;;;:23;;28632:76;;;;-1:-1:-1::0;;;28632:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28725:4;-1:-1:-1::0;;;;;28719:19:0::1;;28746:7;28754:1;28746:10;;;;;;;;;;;;;;28719:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28719:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28719:40:0;;;;;28783:4;-1:-1:-1::0;;;;;28777:20:0::1;;28798:52;28824:7;28833:4;;28838:1;28833:7;;;;;;28798:52;28852:7;28860:1;28852:10;;;;;;;;;;;;;;28777:86;;;;;;;;;;;;;-1:-1:-1::0;;;;;28777:86:0::1;-1:-1:-1::0;;;;;28777:86:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28777:86:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28777:86:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28777:86:0;28770:94:::1;;;;28875:24;28881:7;28890:4;;28875:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28896:2:0;;-1:-1:-1;28875:5:0::1;::::0;-1:-1:-1;;28875:24:0:i:1;:::-;28962:7;28970:1;28962:10;;;;;;;;;;;;;;28950:9;:22;28946:94;;;28974:66;29005:10;29029:7;29037:1;29029:10;;;;;;;;;;;;;;29017:9;:22;28974:30;:66::i;1225:361::-:0;1420:45;;;-1:-1:-1;;;;;1420:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1420:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1409:57:0;;;;1374:12;;1388:17;;1409:10;;;;1420:45;1409:57;;;25:18:-1;1409: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;;;1409: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;;1373:93:0;;;;1485:7;:57;;;;-1:-1:-1;1497:11:0;;:16;;:44;;;1528:4;1517:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1517:24:0;1497:44;1477:101;;;;;-1:-1:-1;;;1477:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1225:361;;;;;:::o;2004:195::-;2112:12;;;2074;2112;;;;;;;;;-1:-1:-1;;;;;2091:7:0;;;2105:5;;2091: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;;;2091: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;;2073:52:0;;;2144:7;2136:55;;;;-1:-1:-1;;;2136:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2004:195;;;:::o;12211:519::-;12304:14;12350:1;12339:8;:12;12331:69;;;;-1:-1:-1;;;12331:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12431:1;12419:9;:13;:31;;;;;12449:1;12436:10;:14;12419:31;12411:85;;;;-1:-1:-1;;;12411:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12507:20;12530:17;:8;12543:3;12530:17;:12;:17;:::i;:::-;12507:40;-1:-1:-1;12558:14:0;12575:31;12507:40;12595:10;12575:31;:19;:31;:::i;:::-;12558:48;-1:-1:-1;12617:16:0;12636:40;12660:15;12636:19;:9;12650:4;12636:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;12617:59;;12711:11;12699:9;:23;;;;;;;12211:519;-1:-1:-1;;;;;;;12211:519:0:o;13407:512::-;13508:21;13565:1;13550:4;:11;:16;;13542:60;;;;;-1:-1:-1;;;13542:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13634:4;:11;13623:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13623:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;13623:23:0;;13613:33;;13670:8;13657:7;13665:1;13657:10;;;;;;;;;;;;;:21;;;;;13694:6;13689:223;13720:1;13706:4;:11;:15;13702:1;:19;13689:223;;;13744:14;13760:15;13779:42;13791:7;13800:4;13805:1;13800:7;;;;;;;;;;;;;;13809:4;13814:1;13818;13814:5;13809:11;;;;;;;;;;;;;;13779;:42::i;:::-;13743:78;;;;13853:47;13866:7;13874:1;13866:10;;;;;;;;;;;;;;13878:9;13889:10;13853:12;:47::i;:::-;13836:7;13844:1;13848;13844:5;13836:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;13723:3:0;;13689:223;;;;13407:512;;;;;:::o;10682:478::-;10771:12;10797:14;10813;10831:26;10842:6;10850;10831:10;:26::i;:::-;10995:32;;;-1:-1:-1;;10995:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;10995:32:0;;;;;10985:43;;;;;;-1:-1:-1;;;;;;10898:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10898:251:0;;;;;;;10888:262;;;;;;;;;10682:478;-1:-1:-1;;;;;10682:478:0:o;1594:402::-;1819:51;;;-1:-1:-1;;;;;1819:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1819:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1808:63:0;;;;1773:12;;1787:17;;1808:10;;;;1819:51;1808:63;;;25:18:-1;1808: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;;;1808: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;;1772:99:0;;;;1890:7;:57;;;;-1:-1:-1;1902:11:0;;:16;;:44;;;1933:4;1922:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1922:24:0;1902:44;1882:106;;;;-1:-1:-1;;;1882:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1594:402;;;;;;:::o;23832:739::-;23939:6;23934:630;23965:1;23951:4;:11;:15;23947:1;:19;23934:630;;;23989:13;24004:14;24023:4;24028:1;24023:7;;;;;;;;;;;;;;24032:4;24037:1;24041;24037:5;24032:11;;;;;;;;;;;;;;23988:56;;;;24060:14;24079:43;24108:5;24115:6;24079:28;:43::i;:::-;24059:63;;;24137:14;24154:7;24162:1;24166;24162:5;24154:14;;;;;;;;;;;;;;24137:31;;24184:15;24201;24229:6;-1:-1:-1;;;;;24220:15:0;:5;-1:-1:-1;;;;;24220:15:0;;:61;;24262:9;24278:1;24220:61;;;24244:1;24248:9;24220:61;24183:98;;;;24296:10;24327:1;24313:4;:11;:15;24309:1;:19;:83;;24389:3;24309:83;;;24331:55;24357:7;24366:6;24374:4;24379:1;24383;24379:5;24374:11;;;;;;;;;;;;;;24331:25;:55::i;:::-;24296:96;;24423:49;24449:7;24458:5;24465:6;24423:25;:49::i;:::-;-1:-1:-1;;;;;24407:71:0;;24497:10;24509;24521:2;24535:1;24525:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;24525:12:0;87:42:-1;143:17;;-1:-1;24525:12:0;;24407:145;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24407:145:0;-1:-1:-1;;;;;24407:145: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;24407:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24407:145:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;23968:3:0;;;;;-1:-1:-1;23934:630:0;;-1:-1:-1;;;;;;;;23934:630:0;;;23832:739;;;:::o;14000:533::-;14101:21;14158:1;14143:4;:11;:16;;14135:60;;;;;-1:-1:-1;;;14135:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14227:4;:11;14216:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14216:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14216:23:0;;14206:33;;14280:9;14250:7;14275:1;14258:7;:14;:18;14250:27;;;;;;;;;;;;;;;;;:39;14314:11;;-1:-1:-1;;14314:15:0;14300:226;14331:5;;14300:226;;14359:14;14375:15;14394:42;14406:7;14415:4;14424:1;14420;:5;14415:11;;;;;;;;;;;;;;14428:4;14433:1;14428:7;;;;;;;14394:42;14358:78;;;;14468:46;14480:7;14488:1;14480:10;;;;;;;;;;;;;;14492:9;14503:10;14468:11;:46::i;:::-;14451:7;14463:1;14459;:5;14451:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;14338:3:0;14300:226;;29195:1220;29308:6;29303:1105;29334:1;29320:4;:11;:15;29316:1;:19;29303:1105;;;29358:13;29373:14;29392:4;29397:1;29392:7;;;;;;;;;;;;;;29401:4;29406:1;29410;29406:5;29401:11;;;;;;;;;;;;;;29357:56;;;;29429:14;29448:43;29477:5;29484:6;29448:28;:43::i;:::-;29428:63;;;29506:20;29545:49;29571:7;29580:5;29587:6;29545:25;:49::i;:::-;29506:89;;29610:16;29641:17;29729:13;29744;29762:4;-1:-1:-1;;;;;29762:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29762:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29762:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29762:18:0;;;;;;;-1:-1:-1;;;;;29728:52:0;;;;-1:-1:-1;29728:52:0;;-1:-1:-1;29796:17:0;;-1:-1:-1;;;;;29837:15:0;;;;;;;:61;;29879:8;29889;29837:61;;;29856:8;29866;29837:61;29795:103;;;;29927:56;29970:12;29934:5;-1:-1:-1;;;;;29927:23:0;;29959:4;29927:38;;;;;;;;;;;;;-1:-1:-1;;;;;29927:38:0;-1:-1:-1;;;;;29927:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;29927:56:0;29913:70;;30013:72;30044:11;30057:12;30071:13;30013:30;:72::i;:::-;29998:87;;29303:1105;;;;30116:15;30133;30161:6;-1:-1:-1;;;;;30152:15:0;:5;-1:-1:-1;;;;;30152:15:0;;:67;;30197:12;30216:1;30152:67;;;30176:1;30180:12;30152:67;30115:104;;;;30234:10;30265:1;30251:4;:11;:15;30247:1;:19;:83;;30327:3;30247:83;;;30269:55;30295:7;30304:6;30312:4;30317:1;30321;30317:5;30312:11;;;;;;;30269:55;30383:12;;;30393:1;30383:12;;;;;;;;;;-1:-1:-1;;;30345:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30345:51:0;;;;;;;;;;;;;;;;;;;;;;30234:96;;-1:-1:-1;30345:9:0;;;;;;30355:10;;30367;;30234:96;;30383:12;;30345:51;;;;;;;;30383:12;;30345:51;;;;30383: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;30345:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30345:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29337:3:0;;;;;-1:-1:-1;29303:1105:0;;-1:-1:-1;;;;;;;;;;29303:1105:0;9787:129;9871:5;;;9866:16;;;;9858:50;;;;;-1:-1:-1;;;9858:50:0;;;;;;;;;;;;-1:-1:-1;;;9858:50:0;;;;;;;;;;;;;;12851:474;12944:13;12990:1;12978:9;:13;12970:71;;;;-1:-1:-1;;;12970:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13072:1;13060:9;:13;:31;;;;;13090:1;13077:10;:14;13060:31;13052:85;;;;-1:-1:-1;;;13052:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13148:14;13165:34;13194:4;13165:24;:9;13179;13165:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;13148:51;-1:-1:-1;13210:16:0;13229:34;13259:3;13229:25;:10;13244:9;13229:25;:14;:25;:::i;:34::-;13210:53;;13285:32;13315:1;13298:11;13286:9;:23;;;;;;;13285:32;:29;:32;:::i;:::-;13274:43;12851:474;-1:-1:-1;;;;;;12851:474:0:o;11766:323::-;11848:12;11891:1;11881:7;:11;11873:62;;;;-1:-1:-1;;;11873:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11965:1;11954:8;:12;:28;;;;;11981:1;11970:8;:12;11954:28;11946:82;;;;-1:-1:-1;;;11946:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12073:8;12049:21;:7;12061:8;12049:21;:11;:21;:::i;:::-;:32;;;;;;;11766:323;-1:-1:-1;;;;11766:323:0:o;10239:351::-;10314:14;10330;10375:6;-1:-1:-1;;;;;10365:16:0;:6;-1:-1:-1;;;;;10365:16:0;;;10357:67;;;;-1:-1:-1;;;10357:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10463:6;-1:-1:-1;;;;;10454:15:0;:6;-1:-1:-1;;;;;10454:15:0;;:53;;10492:6;10500;10454:53;;;10473:6;10481;10454:53;10435:72;;-1:-1:-1;10435:72:0;-1:-1:-1;;;;;;10526:20:0;;10518:64;;;;;-1:-1:-1;;;10518:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10239:351;;;;;:::o;16136:1397::-;16449:51;;;-1:-1:-1;;;16449:51:0;;-1:-1:-1;;;;;16449:51:0;;;;;;;;;;;;;;;;16354:12;;;;;;16468:7;16449:35;;;;;;:51;;;;;;;;;;;;;;;:35;:51;;;2:2:-1;;;;27:1;24;17:12;2:2;16449:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16449:51:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16449:51:0;-1:-1:-1;;;;;16449:65:0;;16445:152;;;16531:54;;;-1:-1:-1;;;16531:54:0;;-1:-1:-1;;;;;16531:54:0;;;;;;;;;;;;;;;;16550:7;16531:38;;;;;;:54;;;;;;;;;;;;;;;-1:-1:-1;16531:38:0;:54;;;2:2:-1;;;;27:1;24;17:12;2:2;16531:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16531:54:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;16445:152:0;16608:13;16623;16640:54;16670:7;16679:6;16687;16640:29;:54::i;:::-;16607:87;;;;16709:8;16721:1;16709:13;:30;;;;-1:-1:-1;16726:13:0;;16709:30;16705:821;;;16778:14;;-1:-1:-1;16794:14:0;;-1:-1:-1;16705:821:0;;;16842:19;16864:59;16888:14;16904:8;16914;16864:23;:59::i;:::-;16842:81;;16960:14;16942;:32;16938:577;;17021:10;17003:14;:28;;16995:80;;;;-1:-1:-1;;;16995:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17116:14;;-1:-1:-1;17132:14:0;-1:-1:-1;17132:14:0;16938:577;;;17188:19;17210:59;17234:14;17250:8;17260;17210:23;:59::i;:::-;17188:81;;17313:14;17295;:32;;17288:40;;;;17373:10;17355:14;:28;;17347:80;;;;-1:-1:-1;;;17347:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17468:14;-1:-1:-1;17484:14:0;;-1:-1:-1;16938:577:0;16705:821;;16136:1397;;;;;;;;;;;:::o;9924:142::-;9976:6;10003;;;:30;;-1:-1:-1;;10018:5:0;;;10032:1;10027;10018:5;10027:1;10013:15;;;;;:20;10003:30;9995:63;;;;;-1:-1:-1;;;9995:63:0;;;;;;;;;;;;-1:-1:-1;;;9995:63:0;;;;;;;;;;;;;;9651:128;9735:5;;;9730:16;;;;9722:49;;;;;-1:-1:-1;;;9722:49:0;;;;;;;;;;;;-1:-1:-1;;;9722:49:0;;;;;;;;;;;;;;11218:435;11311:13;11326;11353:14;11372:26;11383:6;11391;11372:10;:26::i;:::-;11352:46;;;11409:32;11417:7;11426:6;11434;11409:7;:32::i;:::-;;11453:13;11468;11502:32;11510:7;11519:6;11527;11502:7;:32::i;:::-;-1:-1:-1;;;;;11486:61:0;;:63;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11486:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11486:63:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11486:63:0;;;;;;;-1:-1:-1;;;;;11452:97:0;;;;-1:-1:-1;11452:97:0;;-1:-1:-1;;;;;;11583:16:0;;;;;;;:62;;11626:8;11636;11583:62;;;11603:8;11613;11583:62;11560:85;;;;-1:-1:-1;11218:435:0;-1:-1:-1;;;;;;;11218:435:0:o

Swarm Source

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