Contract 0x1b02da8cb0d097eb8d57a175b88c7d8b47997506 23

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xcd669e00eae4034edc2605853e621dce7fa28bb121e84d7c6a34cf2f81e4bbc0Swap Exact Token...552575552023-02-07 11:34:413 mins ago0x23abcb82f468e3422a7212d4ad47cc2dd39162a3 IN  SushiSwap: V2 Router0 FTM0.009988575862
0x7e65ba3f959bb7b53178e10e098163114f160312dc45bf61e61a619268d5c22bSwap Exact Token...552565992023-02-07 11:18:1120 mins ago0xe59150cc54b28d55b9b1df175a3bdff10a29d1ba IN  SushiSwap: V2 Router0 FTM0.005205299511
0x5f52ec93ca22982bedf33fbb3dc20e623bfe0cefb4e80b47d06fdd3e5ff69617Swap Exact Token...552563562023-02-07 11:14:1424 mins ago0x23abcb82f468e3422a7212d4ad47cc2dd39162a3 IN  SushiSwap: V2 Router0 FTM0.004592919841
0xe55a67feaf6c5c482e473c1306fa1e42966a177d32b3b17a48bc71317603f34bSwap Exact Token...552560172023-02-07 11:08:4629 mins ago0x9e35977c8966a528e95e5c430318b0709b8e4cba IN  SushiSwap: V2 Router0 FTM0.033901968032
0xee9955984379a32b219a061fa9c37cd98fe53ccf9afe02287cd315918641e99fSwap Exact Token...552558532023-02-07 11:06:0332 mins ago0x7003ce269f8fe382ac028f50eed4508d06f54b88 IN  SushiSwap: V2 Router0 FTM0.007592430041
0x31fc32e8ad3dbba3c7791f5d7fd34e32cedd0daac25a62a7d3fc08abc19e3c58Swap Exact Token...552555192023-02-07 11:00:1638 mins ago0x693fb96fdda3c382fde7f43a622209c3dd028b98 IN  SushiSwap: V2 Router0 FTM0.004657504439
0xadb28e93ac699599fa441b15ec25a34430eabe8c06cd7baa6264c0d90c71fa90Swap Exact Token...552555182023-02-07 11:00:1538 mins ago0x7003ce269f8fe382ac028f50eed4508d06f54b88 IN  SushiSwap: V2 Router0 FTM0.006892433002
0x23a0de6f0865b5d3a33529b6b18c83f399f1f9020750a8c7a3a23142eeeedfafSwap Exact Token...552554222023-02-07 10:58:2840 mins ago0x7003ce269f8fe382ac028f50eed4508d06f54b88 IN  SushiSwap: V2 Router0 FTM0.00595590332
0x7970b0880d2c336135aa6f65e4ec329ffa6206828e7968d3e483e617292f301dSwap Exact ETH F...552552622023-02-07 10:55:3742 mins ago0xd55ca7970533b1bc89d9a87f063a5cc0e41a2c8f IN  SushiSwap: V2 Router95 FTM0.005156390744
0x0d9509716ec1a8ad876ca08cdeaf472d7c6ac3b9ab6806ef59493677fd4cfc03Swap Exact Token...552547682023-02-07 10:46:2752 mins ago0x23abcb82f468e3422a7212d4ad47cc2dd39162a3 IN  SushiSwap: V2 Router0 FTM0.010987400154
0xe96eedc6482f2fe836b8385cb651d559ca958c111c0c8fbb18bbdb897467c809Swap Exact Token...552546652023-02-07 10:44:4653 mins ago0x9e35977c8966a528e95e5c430318b0709b8e4cba IN  SushiSwap: V2 Router0 FTM0.018879383468
0x826a516975cfaa646e0ccf809ac31c4b888f071e1ebc1ec6047e31dd2cccf612Remove Liquidity...552536512023-02-07 10:26:411 hr 11 mins ago0xef6357d514da8ba7ecacb62fdaec9df088b65479 IN  SushiSwap: V2 Router0 FTM0.008413816022
0xc94e8c84644052551c46bd98ad8a367d01cf207b6b980dc1d61a73e128b62014Swap Exact Token...552535502023-02-07 10:24:371 hr 13 mins ago0x7003ce269f8fe382ac028f50eed4508d06f54b88 IN  SushiSwap: V2 Router0 FTM0.005463717687
0xb94a644ea1d0f85e660aee6e1527b02f6f1fa65e0865451ffcdac9e6ba606261Swap Exact Token...552535282023-02-07 10:24:161 hr 14 mins ago0x9e35977c8966a528e95e5c430318b0709b8e4cba IN  SushiSwap: V2 Router0 FTM0.033932437062
0xbf751177839ac2c69615e95b4b6c73bd4503d5a305f760eb8bb71de8fb86ab4cSwap Exact Token...552535202023-02-07 10:23:571 hr 14 mins ago0x693fb96fdda3c382fde7f43a622209c3dd028b98 IN  SushiSwap: V2 Router0 FTM0.004369409052
0xee503f1c8fe01d79a92497cb911b6bce25378c78d1cb27d0bf1e427605868602Swap Exact Token...552535202023-02-07 10:23:571 hr 14 mins ago0x23abcb82f468e3422a7212d4ad47cc2dd39162a3 IN  SushiSwap: V2 Router0 FTM0.004369409052
0x67e425d616f1a6342589372412aea6e012ae28b4f17a29ac68ea474a330accfdSwap Exact Token...552534532023-02-07 10:22:351 hr 15 mins ago0x601c79fbe8a8d5d40c8453d9d8ff3ecf9ae3a53a IN  SushiSwap: V2 Router0 FTM0.00523161
0x4cdb158ae2ee9e9507b28539014b42d02345c7915c0c54fde160a8d4a9c3b727Swap Exact ETH F...552533812023-02-07 10:21:221 hr 17 mins ago0x21c434b20fbfe83eaf8c70e4f77323e42320e281 IN  SushiSwap: V2 Router0.2 FTM0.005673675787
0xe3bcfe963a8cd7daa9559966b1c6a2cbdb528ecd5c65ce1dc2770980d24144e9Swap Exact Token...552532212023-02-07 10:18:311 hr 20 mins ago0x7003ce269f8fe382ac028f50eed4508d06f54b88 IN  SushiSwap: V2 Router0 FTM0.002382336869
0x046ee0e5400004c546dd92a4ac7fc43681318d9dd8b1af7b60a1488a7bd57d90Swap Exact Token...552532212023-02-07 10:18:311 hr 20 mins ago0x23abcb82f468e3422a7212d4ad47cc2dd39162a3 IN  SushiSwap: V2 Router0 FTM0.004331521581
0x10bb62e1199198fba0cad7d5fee59bed4f19cffb2ca12ea5d6f69b6c085688b1Swap Exact Token...552531722023-02-07 10:17:101 hr 21 mins ago0x601c79fbe8a8d5d40c8453d9d8ff3ecf9ae3a53a IN  SushiSwap: V2 Router0 FTM0.00523161
0xc240c3db296da2ec6154f2bb721f4260e52279b8f5d5b53bc234beef75d689d3Swap Exact Token...552531702023-02-07 10:17:081 hr 21 mins ago0x9e35977c8966a528e95e5c430318b0709b8e4cba IN  SushiSwap: V2 Router0 FTM0.033901955336
0x133d80cce666c9e49c2ba03ce2f2b5793ffd17ed05f5e2068e4fc4512792a452Swap Exact Token...552523222023-02-07 9:55:241 hr 43 mins ago0x9e35977c8966a528e95e5c430318b0709b8e4cba IN  SushiSwap: V2 Router0 FTM0.033932429818
0xa49706e66db0a1f58f493f22f71da9fb956ef3542b1865c64ae717c0b516f31fSwap Exact Token...552523092023-02-07 9:55:051 hr 43 mins ago0x601c79fbe8a8d5d40c8453d9d8ff3ecf9ae3a53a IN  SushiSwap: V2 Router0 FTM0.005231115
0x3fce8eb525ca7db9e19f5bfae339f0a0dbd960db9b0fcddfa8dbae0c21d4c1cfSwap Exact Token...552523062023-02-07 9:55:021 hr 43 mins ago0x7003ce269f8fe382ac028f50eed4508d06f54b88 IN  SushiSwap: V2 Router0 FTM0.016618442755
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x7970b0880d2c336135aa6f65e4ec329ffa6206828e7968d3e483e617292f301d552552622023-02-07 10:55:3742 mins ago SushiSwap: V2 Router Fantom Finance: Wrapped Fantom Token95 FTM
0x826a516975cfaa646e0ccf809ac31c4b888f071e1ebc1ec6047e31dd2cccf612552536512023-02-07 10:26:411 hr 11 mins ago SushiSwap: V2 Router0xef6357d514da8ba7ecacb62fdaec9df088b6547915.969348984539786434 FTM
0x826a516975cfaa646e0ccf809ac31c4b888f071e1ebc1ec6047e31dd2cccf612552536512023-02-07 10:26:411 hr 11 mins ago Fantom Finance: Wrapped Fantom Token SushiSwap: V2 Router15.969348984539786434 FTM
0x4cdb158ae2ee9e9507b28539014b42d02345c7915c0c54fde160a8d4a9c3b727552533812023-02-07 10:21:221 hr 17 mins ago SushiSwap: V2 Router Fantom Finance: Wrapped Fantom Token0.2 FTM
0x1520fda44551202c59ed6c725cf74fc18f9fce47573195c9f8c5c7fd70d7ff0c552502982023-02-07 9:05:292 hrs 33 mins ago SushiSwap: V2 Router Fantom Finance: Wrapped Fantom Token1.6 FTM
0xc7f699eb50d02c74f064a088b6e237e3f28714bca0bd3772a6124a3505795827552474962023-02-07 8:00:043 hrs 38 mins ago SushiSwap: V2 Router Fantom Finance: Wrapped Fantom Token0.005 FTM
0x189d93da0f72ac48d32c797d4ca9ba3578667b85b57b22b8d22a1383fb16c794552466512023-02-07 7:37:064 hrs 1 min ago SushiSwap: V2 Router Fantom Finance: Wrapped Fantom Token930 FTM
0xd62d24d2a9713056aa70616ac89b98a0e4f3bce9073da8b593014637cf9cadf2552428532023-02-07 5:55:055 hrs 43 mins ago SushiSwap: V2 Router0x9f2ac020fbf39f83b5e887aded0a1207bb836d9d0.019228860886619338 FTM
0xd62d24d2a9713056aa70616ac89b98a0e4f3bce9073da8b593014637cf9cadf2552428532023-02-07 5:55:055 hrs 43 mins ago Fantom Finance: Wrapped Fantom Token SushiSwap: V2 Router0.019228860886619338 FTM
0xbc2140b569236c2d34c0f78050da4ceee3a018b1bf57990564e67a3d02c0b247552400992023-02-07 4:23:087 hrs 15 mins ago SushiSwap: V2 Router0x9f2ac020fbf39f83b5e887aded0a1207bb836d9d0.01986357221208345 FTM
0xbc2140b569236c2d34c0f78050da4ceee3a018b1bf57990564e67a3d02c0b247552400992023-02-07 4:23:087 hrs 15 mins ago Fantom Finance: Wrapped Fantom Token SushiSwap: V2 Router0.01986357221208345 FTM
0x16771fa831bf048c52160e00dfcb17b684b81fffde4bd18c568da0b91e5b8473552396742023-02-07 4:11:297 hrs 27 mins ago SushiSwap: V2 Router0xdcbea49587252b704b903e7295983e2ceb53af3d665.520699289438304305 FTM
0x16771fa831bf048c52160e00dfcb17b684b81fffde4bd18c568da0b91e5b8473552396742023-02-07 4:11:297 hrs 27 mins ago Fantom Finance: Wrapped Fantom Token SushiSwap: V2 Router665.520699289438304305 FTM
0xe5d990d4c0a6a549151a653988b99f55f9c01690728e6e16b0097a30c04163b6552382342023-02-07 3:28:428 hrs 9 mins ago SushiSwap: V2 Router Fantom Finance: Wrapped Fantom Token1 FTM
0x089d583acbb3c31b3478bf5c4f7f63ed1f5993ff2a583ae0d08ff88a6cb81251552341632023-02-07 1:47:379 hrs 50 mins ago SushiSwap: V2 Router0x9f2ac020fbf39f83b5e887aded0a1207bb836d9d0.020530253786999932 FTM
0x089d583acbb3c31b3478bf5c4f7f63ed1f5993ff2a583ae0d08ff88a6cb81251552341632023-02-07 1:47:379 hrs 50 mins ago Fantom Finance: Wrapped Fantom Token SushiSwap: V2 Router0.020530253786999932 FTM
0xffd18e2c8cc7953a3886fefd997ecf226a831af999da2abf1ccf7b1a96b198d9552339572023-02-07 1:43:569 hrs 54 mins ago SushiSwap: V2 Router0x9f2ac020fbf39f83b5e887aded0a1207bb836d9d0.021231089971831365 FTM
0xffd18e2c8cc7953a3886fefd997ecf226a831af999da2abf1ccf7b1a96b198d9552339572023-02-07 1:43:569 hrs 54 mins ago Fantom Finance: Wrapped Fantom Token SushiSwap: V2 Router0.021231089971831365 FTM
0xf743d20836564b446de8fadcaca455b82c027dcf601b18bc7957c9810fbc39c6552336522023-02-07 1:37:2310 hrs 1 min ago SushiSwap: V2 Router0x9f2ac020fbf39f83b5e887aded0a1207bb836d9d0.016405015065637023 FTM
0xf743d20836564b446de8fadcaca455b82c027dcf601b18bc7957c9810fbc39c6552336522023-02-07 1:37:2310 hrs 1 min ago Fantom Finance: Wrapped Fantom Token SushiSwap: V2 Router0.016405015065637023 FTM
0x15ed76c39939b69b28800ae71b8d6b1280f0dbf85f568ecac216bc67f67f09b3552333652023-02-07 1:29:3110 hrs 9 mins ago SushiSwap: V2 Router0x9f2ac020fbf39f83b5e887aded0a1207bb836d9d0.06053004656278918 FTM
0x15ed76c39939b69b28800ae71b8d6b1280f0dbf85f568ecac216bc67f67f09b3552333652023-02-07 1:29:3110 hrs 9 mins ago Fantom Finance: Wrapped Fantom Token SushiSwap: V2 Router0.06053004656278918 FTM
0xc563b23cea59384f7dae1b333cd65ddb33e7eb77623a8ad46e051f56f599e3d3552329702023-02-07 1:22:2410 hrs 16 mins ago SushiSwap: V2 Router0xe2bef3308eb4f6c6bd6d03b8dbe7cda3083714471,008.487758695581220781 FTM
0xc563b23cea59384f7dae1b333cd65ddb33e7eb77623a8ad46e051f56f599e3d3552329702023-02-07 1:22:2410 hrs 16 mins ago Fantom Finance: Wrapped Fantom Token SushiSwap: V2 Router1,008.487758695581220781 FTM
0xf19617a799df368161208f16609be5400dc1349cc76352f6dee4ddef2e23f5f9552328112023-02-07 1:19:4110 hrs 18 mins ago SushiSwap: V2 Router0xe2bef3308eb4f6c6bd6d03b8dbe7cda3083714470.30505352828897645 FTM
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
UniswapV2Router02

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at FtmScan.com on 2021-02-26
*/

// File: contracts/uniswapv2/interfaces/IUniswapV2Pair.sol

pragma solidity >=0.5.0;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

// File: contracts/uniswapv2/libraries/SafeMath.sol

pragma solidity =0.6.12;

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

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

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

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

// File: contracts/uniswapv2/libraries/UniswapV2Library.sol

pragma solidity >=0.5.0;



library UniswapV2Library {
    using SafeMathUniswap for uint;

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

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

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

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

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

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

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

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

// File: contracts/uniswapv2/libraries/TransferHelper.sol

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

pragma solidity >=0.6.0;

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

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

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

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

// File: contracts/uniswapv2/interfaces/IUniswapV2Router01.sol

pragma solidity >=0.6.2;

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

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

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

// File: contracts/uniswapv2/interfaces/IUniswapV2Router02.sol

pragma solidity >=0.6.2;


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

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

// File: contracts/uniswapv2/interfaces/IUniswapV2Factory.sol

pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function migrator() 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;
    function setMigrator(address) external;
}

// File: contracts/uniswapv2/interfaces/IERC20.sol

pragma solidity >=0.5.0;

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

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

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

// File: contracts/uniswapv2/interfaces/IWETH.sol

pragma solidity >=0.5.0;

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

// File: contracts/uniswapv2/UniswapV2Router02.sol

pragma solidity =0.6.12;








contract UniswapV2Router02 is IUniswapV2Router02 {
    using SafeMathUniswap for uint;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Contract Security Audit

Contract ABI

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

60c060405234801561001057600080fd5b50604051620046e7380380620046e78339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c614562620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118d352806119ae5280611a885280611b565280611c9c5280611d245280611f605280611fdb528061208f528061215b52806121f05280612264528061274752806129b15280612a075280612a3b5280612aaf5280612c3d5280612d805280612e08525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611be95280611d565280611eb0528061229652806124d452806126cc52806126f55280612725528061289252806129e55280612cd05280612e3a52806136c0528061370352806139dd5280613b535280613f445280613ffd52806140b052506145626000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b038135169060200135611885565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b0e565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e58565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e65565b34801561088157600080fd5b5061088a611f5e565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f82565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611f8f565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b038135169060200135612115565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612486565b348015610a1c57600080fd5b5061088a6126ca565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506126ee945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561271b565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e0013561282f565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612962565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612bf5565b6000808242811015610cde576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612486565b9093509150610d1d898685612f6e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da585836130d8565b50965096945050505050565b6000610dbe8484846131d0565b949350505050565b60608142811015610e0c576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b815260206004820152601d602482015260008051602061442a833981519152604482015290519081900360640190fd5b610efd7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506132a892505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b815260040180806020018281038252602b815260200180614493602b913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b03166133f4565b85600081518110610fe657fe5b60200260200101516134b4565b61103282878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613611915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b60200260200101516130d8565b509695505050505050565b60606111207f0000000000000000000000000000000000000000000000000000000000000000848461384e565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f6133f4565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f612486565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6112c77f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506132a892505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b815260040180806020018281038252602b815260200180614493602b913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e882878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613611915050565b606081428110156113b4576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b815260206004820152601d602482015260008051602061442a833981519152604482015290519081900360640190fd5b6114a57f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061384e92505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b81526004018080602001828103825260278152602001806144036027913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006133f4565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611f8f565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a6134b4565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561172f57600080fd5b505afa158015611743573d6000803e3d6000fd5b505050506040513d602081101561175957600080fd5b5051604080516020888102828101820190935288825292935061179b929091899189918291850190849080828437600092019190915250889250613986915050565b8661183e82888860001981018181106117b057fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561180c57600080fd5b505afa158015611820573d6000803e3d6000fd5b505050506040513d602081101561183657600080fd5b505190613c88565b101561187b5760405162461bcd60e51b815260040180806020018281038252602b815260200180614493602b913960400191505060405180910390fd5b5050505050505050565b80428110156118c9576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061190357fe5b905060200201356001600160a01b03166001600160a01b03161461195c576040805162461bcd60e51b815260206004820152601d602482015260008051602061442a833981519152604482015290519081900360640190fd5b61196c8585600081811061165c57fe5b6119aa858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613986915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611a1957600080fd5b505afa158015611a2d573d6000803e3d6000fd5b505050506040513d6020811015611a4357600080fd5b5051905086811015611a865760405162461bcd60e51b815260040180806020018281038252602b815260200180614493602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aec57600080fd5b505af1158015611b00573d6000803e3d6000fd5b5050505061187b84826130d8565b60608142811015611b54576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b8b57fe5b905060200201356001600160a01b03166001600160a01b031614611be4576040805162461bcd60e51b815260206004820152601d602482015260008051602061442a833981519152604482015290519081900360640190fd5b611c427f0000000000000000000000000000000000000000000000000000000000000000348888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506132a892505050565b91508682600184510381518110611c5557fe5b60200260200101511015611c9a5760405162461bcd60e51b815260040180806020018281038252602b815260200180614493602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611cd657fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d0957600080fd5b505af1158015611d1d573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d827f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611d8f57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611ddd57600080fd5b505af1158015611df1573d6000803e3d6000fd5b505050506040513d6020811015611e0757600080fd5b5051611e0f57fe5b611e4e82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613611915050565b5095945050505050565b6000610dbe848484613cd8565b60608142811015611eab576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b611f097f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061384e92505050565b91508682600081518110611f1957fe5b6020026020010151111561131f5760405162461bcd60e51b81526004018080602001828103825260278152602001806144036027913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613db0565b60008142811015611fd5576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b612004887f00000000000000000000000000000000000000000000000000000000000000008989893089612486565b90508092505061208d88858a6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561205c57600080fd5b505afa158015612070573d6000803e3d6000fd5b505050506040513d602081101561208657600080fd5b5051612f6e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156120f357600080fd5b505af1158015612107573d6000803e3d6000fd5b505050506110e884836130d8565b8042811015612159576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168585600081811061219057fe5b905060200201356001600160a01b03166001600160a01b0316146121e9576040805162461bcd60e51b815260206004820152601d602482015260008051602061442a833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561224957600080fd5b505af115801561225d573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122c27f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561230957600080fd5b505af115801561231d573d6000803e3d6000fd5b505050506040513d602081101561233357600080fd5b505161233b57fe5b60008686600019810181811061234d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156123a957600080fd5b505afa1580156123bd573d6000803e3d6000fd5b505050506040513d60208110156123d357600080fd5b505160408051602089810282810182019093528982529293506124159290918a918a918291850190849080828437600092019190915250899250613986915050565b8761183e828989600019810181811061242a57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561180c57600080fd5b60008082428110156124cd576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b60006124fa7f00000000000000000000000000000000000000000000000000000000000000008c8c6133f4565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561255557600080fd5b505af1158015612569573d6000803e3d6000fd5b505050506040513d602081101561257f57600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125cc57600080fd5b505af11580156125e0573d6000803e3d6000fd5b505050506040513d60408110156125f657600080fd5b508051602090910151909250905060006126108e8e613e56565b509050806001600160a01b03168e6001600160a01b031614612633578183612636565b82825b90975095508a87101561267a5760405162461bcd60e51b815260040180806020018281038252602681526020018061444a6026913960400191505060405180910390fd5b898610156126b95760405162461bcd60e51b81526004018080602001828103825260268152602001806143906026913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846132a8565b600080600061276b7f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006133f4565b905060008761277a578c61277e565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156127f457600080fd5b505af1158015612808573d6000803e3d6000fd5b5050505061281a8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b60008060008342811015612878576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6128868c8c8c8c8c8c613f34565b909450925060006128b87f00000000000000000000000000000000000000000000000000000000000000008e8e6133f4565b90506128c68d3383886134b4565b6128d28c3383876134b4565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b15801561292157600080fd5b505af1158015612935573d6000803e3d6000fd5b505050506040513d602081101561294b57600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129ab576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6129d98a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613f34565b90945092506000612a2b7f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006133f4565b9050612a398b3383886134b4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a9457600080fd5b505af1158015612aa8573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b2457600080fd5b505af1158015612b38573d6000803e3d6000fd5b505050506040513d6020811015612b4e57600080fd5b5051612b5657fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b158015612ba557600080fd5b505af1158015612bb9573d6000803e3d6000fd5b505050506040513d6020811015612bcf57600080fd5b5051925034841015612be757612be7338534036130d8565b505096509650969350505050565b60608142811015612c3b576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612c7257fe5b905060200201356001600160a01b03166001600160a01b031614612ccb576040805162461bcd60e51b815260206004820152601d602482015260008051602061442a833981519152604482015290519081900360640190fd5b612d297f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061384e92505050565b91503482600081518110612d3957fe5b60200260200101511115612d7e5760405162461bcd60e51b81526004018080602001828103825260278152602001806144036027913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612dba57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612ded57600080fd5b505af1158015612e01573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612e667f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612e7357fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612ec157600080fd5b505af1158015612ed5573d6000803e3d6000fd5b505050506040513d6020811015612eeb57600080fd5b5051612ef357fe5b612f3282878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613611915050565b81600081518110612f3f57fe5b6020026020010151341115611e4e57611e4e3383600081518110612f5f57fe5b602002602001015134036130d8565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310612feb5780518252601f199092019160209182019101612fcc565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461304d576040519150601f19603f3d011682016040523d82523d6000602084013e613052565b606091505b5091509150818015613080575080511580613080575080806020019051602081101561307d57600080fd5b50515b6130d1576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106131245780518252601f199092019160209182019101613105565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613186576040519150601f19603f3d011682016040523d82523d6000602084013e61318b565b606091505b50509050806131cb5760405162461bcd60e51b81526004018080602001828103825260238152602001806144706023913960400191505060405180910390fd5b505050565b60008084116132105760405162461bcd60e51b815260040180806020018281038252602b8152602001806144e2602b913960400191505060405180910390fd5b6000831180156132205750600082115b61325b5760405162461bcd60e51b81526004018080602001828103825260288152602001806143b66028913960400191505060405180910390fd5b6000613269856103e56141c5565b9050600061327782856141c5565b905060006132918361328b886103e86141c5565b90614228565b905080828161329c57fe5b04979650505050505050565b6060600282511015613301576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561331957600080fd5b50604051908082528060200260200182016040528015613343578160200160208202803683370190505b509050828160008151811061335457fe5b60200260200101818152505060005b60018351038110156133ec576000806133a68786858151811061338257fe5b602002602001015187866001018151811061339957fe5b6020026020010151614277565b915091506133c88484815181106133b957fe5b602002602001015183836131d0565b8484600101815181106133d757fe5b60209081029190910101525050600101613363565b509392505050565b60008060006134038585613e56565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527fe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135395780518252601f19909201916020918201910161351a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461359b576040519150601f19603f3d011682016040523d82523d6000602084013e6135a0565b606091505b50915091508180156135ce5750805115806135ce57508080602001905160208110156135cb57600080fd5b50515b6136095760405162461bcd60e51b81526004018080602001828103825260248152602001806144be6024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138485760008084838151811061362f57fe5b602002602001015185846001018151811061364657fe5b602002602001015191509150600061365e8383613e56565b509050600087856001018151811061367257fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146136a0578260006136a4565b6000835b91509150600060028a510388106136bb57886136fc565b6136fc7f0000000000000000000000000000000000000000000000000000000000000000878c8b600201815181106136ef57fe5b60200260200101516133f4565b90506137297f000000000000000000000000000000000000000000000000000000000000000088886133f4565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613766576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156137ce5781810151838201526020016137b6565b50505050905090810190601f1680156137fb5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561381d57600080fd5b505af1158015613831573d6000803e3d6000fd5b505060019099019850613614975050505050505050565b50505050565b60606002825110156138a7576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff811180156138bf57600080fd5b506040519080825280602002602001820160405280156138e9578160200160208202803683370190505b50905082816001835103815181106138fd57fe5b60209081029190910101528151600019015b80156133ec5760008061393f8786600186038151811061392b57fe5b602002602001015187868151811061339957fe5b9150915061396184848151811061395257fe5b60200260200101518383613cd8565b84600185038151811061397057fe5b602090810291909101015250506000190161390f565b60005b60018351038110156131cb576000808483815181106139a457fe5b60200260200101518584600101815181106139bb57fe5b60200260200101519150915060006139d38383613e56565b5090506000613a037f000000000000000000000000000000000000000000000000000000000000000085856133f4565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613a4457600080fd5b505afa158015613a58573d6000803e3d6000fd5b505050506040513d6060811015613a6e57600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613aa4578284613aa7565b83835b91509150613afc828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561180c57600080fd5b9550613b098683836131d0565b945050505050600080856001600160a01b0316886001600160a01b031614613b3357826000613b37565b6000835b91509150600060028c51038a10613b4e578a613b82565b613b827f0000000000000000000000000000000000000000000000000000000000000000898e8d600201815181106136ef57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c0c578181015183820152602001613bf4565b50505050905090810190601f168015613c395780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613c5b57600080fd5b505af1158015613c6f573d6000803e3d6000fd5b50506001909b019a506139899950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d185760405162461bcd60e51b815260040180806020018281038252602c81526020018061433f602c913960400191505060405180910390fd5b600083118015613d285750600082115b613d635760405162461bcd60e51b81526004018080602001828103825260288152602001806143b66028913960400191505060405180910390fd5b6000613d7b6103e8613d7586886141c5565b906141c5565b90506000613d8f6103e5613d758689613c88565b9050613da66001828481613d9f57fe5b0490614228565b9695505050505050565b6000808411613df05760405162461bcd60e51b81526004018080602001828103825260258152602001806143de6025913960400191505060405180910390fd5b600083118015613e005750600082115b613e3b5760405162461bcd60e51b81526004018080602001828103825260288152602001806143b66028913960400191505060405180910390fd5b82613e4685846141c5565b81613e4d57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613eaa5760405162461bcd60e51b815260040180806020018281038252602581526020018061436b6025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613eca578284613ecd565b83835b90925090506001600160a01b038216613f2d576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b60008060006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e6a439058a8a6040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b158015613fc057600080fd5b505afa158015613fd4573d6000803e3d6000fd5b505050506040513d6020811015613fea57600080fd5b50516001600160a01b031614156140a8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c9c6539689896040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050602060405180830381600087803b15801561407b57600080fd5b505af115801561408f573d6000803e3d6000fd5b505050506040513d60208110156140a557600080fd5b50505b6000806140d67f00000000000000000000000000000000000000000000000000000000000000008b8b614277565b915091508160001480156140e8575080155b156140f8578793508692506141b8565b6000614105898484613db0565b9050878111614158578581101561414d5760405162461bcd60e51b81526004018080602001828103825260268152602001806143906026913960400191505060405180910390fd5b8894509250826141b6565b6000614165898486613db0565b90508981111561417157fe5b878110156141b05760405162461bcd60e51b815260040180806020018281038252602681526020018061444a6026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806141e0575050808202828282816141dd57fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006142868585613e56565b5090506000806142978888886133f4565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156142cf57600080fd5b505afa1580156142e3573d6000803e3d6000fd5b505050506040513d60608110156142f957600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b038781169084161461432c57808261432f565b81815b9099909850965050505050505056fe556e697377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056324c6962726172793a204944454e544943414c5f414444524553534553556e69737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e54556e697377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459556e697377617056324c6962726172793a20494e53554646494349454e545f414d4f554e54556e69737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54556e69737761705632526f757465723a20494e56414c49445f50415448000000556e69737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544556e69737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544556e697377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54556e69737761705632526f757465723a20455850495245440000000000000000a26469706673582212201046181566cf8a35bd60f7e94b82dcde5a31b9e46aa697f15b739ad658b7871164736f6c634300060c0033000000000000000000000000c35dadb65012ec5796536bd9864ed8773abc74c400000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83

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

000000000000000000000000c35dadb65012ec5796536bd9864ed8773abc74c400000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83

-----Decoded View---------------
Arg [0] : _factory (address): 0xc35dadb65012ec5796536bd9864ed8773abc74c4
Arg [1] : _WETH (address): 0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000c35dadb65012ec5796536bd9864ed8773abc74c4
Arg [1] : 00000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83


Deployed ByteCode Sourcemap

16480:18605:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16969:10;-1:-1:-1;;;;;16983:4:0;16969:18;;16962:26;;;;16480:18605;;;;;21119:673;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21119:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;34029:262;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34029:262:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;28295:850;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28295:850:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28295:850:0;;;;;;;;;;;;-1:-1:-1;28295:850:0;-1:-1:-1;;;;;;28295:850:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34829:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34829:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34829:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34829:253:0;;-1:-1:-1;34829:253:0;;-1:-1:-1;;;;;34829:253:0:i;21798:677::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21798:677:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25512:628::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25512:628:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25512:628:0;;;;;;;;;;;;-1:-1:-1;25512:628:0;-1:-1:-1;;;;;;25512:628:0;;;;;;;;:::i;27461:828::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27461:828:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27461:828:0;;;;;;;;;;;;-1:-1:-1;27461:828:0;-1:-1:-1;;;;;;27461:828:0;;;;;;;;:::i;23942:718::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23942:718:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31335:728::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31335:728:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31335:728:0;;;;;;;;;;;;-1:-1:-1;31335:728:0;-1:-1:-1;;;;;;31335:728:0;;;;;;;;:::i;32939:850::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32939:850:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32939:850:0;;;;;;;;;;;;-1:-1:-1;32939:850:0;-1:-1:-1;;;;;;32939:850:0;;;;;;;;:::i;26758:697::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26758:697:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26758:697:0;;;;;;;;;;;;-1:-1:-1;26758:697:0;-1:-1:-1;;;;;;26758:697:0;;;;;;;;:::i;34299:261::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34299:261:0;;;;;;;;;;;;:::i;26146:606::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26146:606:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26146:606:0;;;;;;;;;;;;-1:-1:-1;26146:606:0;-1:-1:-1;;;;;;26146:606:0;;;;;;;;:::i;16623:38::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;16623:38:0;;;;;;;;;;;;;;33833:188;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33833:188:0;;;;;;;;;;;;:::i;23229:707::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23229:707:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32069:864::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32069:864:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32069:864:0;;;;;;;;;;;;-1:-1:-1;32069:864:0;-1:-1:-1;;;;;;32069:864:0;;;;;;;;:::i;20248:865::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20248:865:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16575:41::-;;;;;;;;;;;;;:::i;34568:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34568:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34568:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34568:253:0;;-1:-1:-1;34568:253:0;;-1:-1:-1;;;;;34568:253:0:i;22481:669::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22481:669:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18487:738::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18487:738:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;19231:974;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19231:974:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29151:810::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29151:810:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29151:810:0;;;;;;;;;;;;-1:-1:-1;29151:810:0;-1:-1:-1;;;;;;29151:810:0;;;;;;;;:::i;21119:673::-;21356:16;21374:14;21337:8;16732:15;16720:8;:27;;16712:64;;;;;-1:-1:-1;;;16712:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:64:0;;;;;;;;;;;;;;;21428:196:::1;21458:5;21478:4;21497:9;21521:14;21550:12;21585:4;21605:8;21428:15;:196::i;:::-;21401:223:::0;;-1:-1:-1;21401:223:0;-1:-1:-1;21635:51:0::1;21663:5:::0;21670:2;21401:223;21635:27:::1;:51::i;:::-;21703:4;-1:-1:-1::0;;;;;21697:20:0::1;;21718:9;21697:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21739:45;21770:2;21774:9;21739:30;:45::i;:::-;21119:673:::0;;;;;;;;;;:::o;34029:262::-;34182:14;34221:62;34251:8;34261:9;34272:10;34221:29;:62::i;:::-;34214:69;34029:262;-1:-1:-1;;;;34029:262:0:o;28295:850::-;28509:21;28481:8;16732:15;16720:8;:27;;16712:64;;;;;-1:-1:-1;;;16712:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28581:4:0::1;28556:29;:4:::0;;-1:-1:-1;;28561:15:0;;28556:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28556:21:0::1;-1:-1:-1::0;;;;;28556:29:0::1;;28548:71;;;::::0;;-1:-1:-1;;;28548:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28548:71:0;;;;;;;;;;;;;::::1;;28640:55;28671:7;28680:8;28690:4;;28640:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;28640:30:0::1;::::0;-1:-1:-1;;;28640:55:0:i:1;:::-;28630:65;;28745:12;28714:7;28739:1;28722:7;:14;:18;28714:27;;;;;;;;;;;;;;:43;;28706:99;;;;-1:-1:-1::0;;;28706:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28816:141;28862:4;;28867:1;28862:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28862:7:0::1;28871:10;28883:51;28908:7;28917:4;;28922:1;28917:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28917:7:0::1;28926:4;;28931:1;28926:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28926:7:0::1;28883:24;:51::i;:::-;28936:7;28944:1;28936:10;;;;;;;;;;;;;;28816:31;:141::i;:::-;28968:35;28974:7;28983:4;;28968:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;28997:4:0::1;::::0;-1:-1:-1;28968:5:0::1;::::0;-1:-1:-1;;28968:35:0:i:1;:::-;29020:4;-1:-1:-1::0;;;;;29014:20:0::1;;29035:7;29060:1;29043:7;:14;:18;29035:27;;;;;;;;;;;;;;29014:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29074:63;29105:2;29109:7;29134:1;29117:7;:14;:18;29109:27;;;;;;;;;;;;;;29074:30;:63::i;:::-;28295:850:::0;;;;;;;;;:::o;34829:253::-;34973:21;35019:55;35049:7;35058:9;35069:4;35019:29;:55::i;:::-;35012:62;;34829:253;;;;;:::o;21798:677::-;22104:12;22118;22143;22158:49;22183:7;22192:6;22200;22158:24;:49::i;:::-;22143:64;;22218:10;22231;:33;;22255:9;22231:33;;;-1:-1:-1;;22231:33:0;22275:80;;;-1:-1:-1;;;22275:80:0;;22303:10;22275:80;;;;22323:4;22275:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22218:46;;-1:-1:-1;;;;;;22275:27:0;;;;;:80;;;;;-1:-1:-1;;22275:80:0;;;;;;;;-1:-1:-1;22275:27:0;:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22387;22403:6;22411;22419:9;22430:10;22442;22454:2;22458:8;22387:15;:80::i;:::-;22366:101;;;;;;;;21798:677;;;;;;;;;;;;;;;;:::o;25512:628::-;25736:21;25717:8;16732:15;16720:8;:27;;16712:64;;;;;-1:-1:-1;;;16712:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:64:0;;;;;;;;;;;;;;;25780:55:::1;25811:7;25820:8;25830:4;;25780:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;25780:30:0::1;::::0;-1:-1:-1;;;25780:55:0:i:1;:::-;25770:65;;25885:12;25854:7;25879:1;25862:7;:14;:18;25854:27;;;;;;;;;;;;;;:43;;25846:99;;;;-1:-1:-1::0;;;25846:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25956:141;26002:4;;26007:1;26002:7;;;;;;25956:141;26108:24;26114:7;26123:4;;26108:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;26129:2:0;;-1:-1:-1;26108:5:0::1;::::0;-1:-1:-1;;26108:24:0:i:1;27461:828::-:0;27675:21;27647:8;16732:15;16720:8;:27;;16712:64;;;;;-1:-1:-1;;;16712:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27747:4:0::1;27722:29;:4:::0;;-1:-1:-1;;27727:15:0;;27722:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27722:21:0::1;-1:-1:-1::0;;;;;27722:29:0::1;;27714:71;;;::::0;;-1:-1:-1;;;27714:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27714:71:0;;;;;;;;;;;;;::::1;;27806:55;27836:7;27845:9;27856:4;;27806:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27806:29:0::1;::::0;-1:-1:-1;;;27806:55:0:i:1;:::-;27796:65;;27894:11;27880:7;27888:1;27880:10;;;;;;;;;;;;;;:25;;27872:77;;;;-1:-1:-1::0;;;27872:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23942:718:::0;24260:14;24287:12;24302:46;24327:7;24336:5;24343:4;24302:24;:46::i;:::-;24287:61;;24359:10;24372;:33;;24396:9;24372:33;;;-1:-1:-1;;24372:33:0;24416:80;;;-1:-1:-1;;;24416:80:0;;24444:10;24416:80;;;;24464:4;24416:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24359:46;;-1:-1:-1;;;;;;24416:27:0;;;;;:80;;;;;-1:-1:-1;;24416:80:0;;;;;;;;-1:-1:-1;24416:27:0;:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24519:133;24581:5;24588:9;24599:14;24615:12;24629:2;24633:8;24519:47;:133::i;:::-;24507:145;23942:718;-1:-1:-1;;;;;;;;;;;;;23942:718:0:o;31335:728::-;31569:8;16732:15;16720:8;:27;;16712:64;;;;;-1:-1:-1;;;16712:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:64:0;;;;;;;;;;;;;;;31590:139:::1;31636:4;;31641:1;31636:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31636:7:0::1;31645:10;31657:51;31682:7;31691:4;;31696:1;31691:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31691:7:0::1;31700:4;;31705:1;31700:7;;;;;;31657:51;31710:8;31590:31;:139::i;:::-;31740:18;31775:4:::0;;-1:-1:-1;;31780:15:0;;31775:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31775:21:0::1;-1:-1:-1::0;;;;;31761:46:0::1;;31808:2;31761:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;31761:50:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31761:50:0;31822:44:::1;::::0;;31761:50:::1;31822:44:::0;;::::1;::::0;;;;;;;;;;;31761:50;;-1:-1:-1;31822:44:0::1;::::0;;;31857:4;;;;;;31822:44;::::1;::::0;31857:4;;31822:44;31857:4;31822:44;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;31863:2:0;;-1:-1:-1;31822:34:0::1;::::0;-1:-1:-1;;31822:44:0:i:1;:::-;31972:12:::0;31899:69:::1;31954:13:::0;31913:4;;-1:-1:-1;;31918:15:0;;31913:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31913:21:0::1;-1:-1:-1::0;;;;;31899:46:0::1;;31946:2;31899:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;31899:50:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31899:50:0;;:54:::1;:69::i;:::-;:85;;31877:178;;;;-1:-1:-1::0;;;31877:178:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16787:1;31335:728:::0;;;;;;;:::o;32939:850::-;33206:8;16732:15;16720:8;:27;;16712:64;;;;;-1:-1:-1;;;16712:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33265:4:0::1;33240:29;:4:::0;;-1:-1:-1;;33245:15:0;;33240:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33240:21:0::1;-1:-1:-1::0;;;;;33240:29:0::1;;33232:71;;;::::0;;-1:-1:-1;;;33232:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33232:71:0;;;;;;;;;;;;;::::1;;33314:139;33360:4;;33365:1;33360:7;;;;;;33314:139;33464:55;33499:4;;33464:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;33513:4:0::1;::::0;-1:-1:-1;33464:34:0::1;::::0;-1:-1:-1;;33464:55:0:i:1;:::-;33530:14;33561:4;-1:-1:-1::0;;;;;33547:29:0::1;;33585:4;33547:44;;;;;;;;;;;;;-1:-1:-1::0;;;;;33547:44:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;33547:44:0;;-1:-1:-1;33610:25:0;;::::1;;33602:81;;;;-1:-1:-1::0;;;33602:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33700:4;-1:-1:-1::0;;;;;33694:20:0::1;;33715:9;33694:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33736:45;33767:2;33771:9;33736:30;:45::i;26758:697::-:0;26974:21;26946:8;16732:15;16720:8;:27;;16712:64;;;;;-1:-1:-1;;;16712:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:64:0;;;;;;;;;;;;;;;27032:4:::1;-1:-1:-1::0;;;;;27021:15:0::1;:4;;27026:1;27021:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27021:7:0::1;-1:-1:-1::0;;;;;27021:15:0::1;;27013:57;;;::::0;;-1:-1:-1;;;27013:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27013:57:0;;;;;;;;;;;;;::::1;;27091:56;27122:7;27131:9;27142:4;;27091:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27091:30:0::1;::::0;-1:-1:-1;;;27091:56:0:i:1;:::-;27081:66;;27197:12;27166:7;27191:1;27174:7;:14;:18;27166:27;;;;;;;;;;;;;;:43;;27158:99;;;;-1:-1:-1::0;;;27158:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27274:4;-1:-1:-1::0;;;;;27268:19:0::1;;27295:7;27303:1;27295:10;;;;;;;;;;;;;;27268:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;27332:4;-1:-1:-1::0;;;;;27326:20:0::1;;27347:51;27372:7;27381:4;;27386:1;27381:7;;;;;;27347:51;27400:7;27408:1;27400:10;;;;;;;;;;;;;;27326:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;27326:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;27326:85:0;27319:93:::1;;;;27423:24;27429:7;27438:4;;27423:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27444:2:0;;-1:-1:-1;27423:5:0::1;::::0;-1:-1:-1;;27423:24:0:i:1;:::-;26758:697:::0;;;;;;;;:::o;34299:261::-;34452:13;34490:62;34519:9;34530;34541:10;34490:28;:62::i;26146:606::-;26370:21;26351:8;16732:15;16720:8;:27;;16712:64;;;;;-1:-1:-1;;;16712:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:64:0;;;;;;;;;;;;;;;26414:55:::1;26444:7;26453:9;26464:4;;26414:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;26414:29:0::1;::::0;-1:-1:-1;;;26414:55:0:i:1;:::-;26404:65;;26502:11;26488:7;26496:1;26488:10;;;;;;;;;;;;;;:25;;26480:77;;;;-1:-1:-1::0;;;26480:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16623:38:::0;;;:::o;33833:188::-;33930:12;33962:51;33985:7;33994:8;34004;33962:22;:51::i;23229:707::-;23495:14;23476:8;16732:15;16720:8;:27;;16712:64;;;;;-1:-1:-1;;;16712:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:64:0;;;;;;;;;;;;;;;23538:196:::1;23568:5;23588:4;23607:9;23631:14;23660:12;23695:4;23715:8;23538:15;:196::i;:::-;23522:212;;;;;;23745:85;23773:5;23780:2;23798:5;-1:-1:-1::0;;;;;23784:30:0::1;;23823:4;23784:45;;;;;;;;;;;;;-1:-1:-1::0;;;;;23784:45:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;23784:45:0;23745:27:::1;:85::i;:::-;23847:4;-1:-1:-1::0;;;;;23841:20:0::1;;23862:9;23841:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23883:45;23914:2;23918:9;23883:30;:45::i;32069:864::-:0;32329:8;16732:15;16720:8;:27;;16712:64;;;;;-1:-1:-1;;;16712:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:64:0;;;;;;;;;;;;;;;32374:4:::1;-1:-1:-1::0;;;;;32363:15:0::1;:4;;32368:1;32363:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32363:7:0::1;-1:-1:-1::0;;;;;32363:15:0::1;;32355:57;;;::::0;;-1:-1:-1;;;32355:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32355:57:0;;;;;;;;;;;;;::::1;;32423:13;32439:9;32423:25;;32465:4;-1:-1:-1::0;;;;;32459:19:0::1;;32486:8;32459:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;32521:4;-1:-1:-1::0;;;;;32515:20:0::1;;32536:51;32561:7;32570:4;;32575:1;32570:7;;;;;;32536:51;32589:8;32515:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;32515:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32515:83:0;32508:91:::1;;;;32610:18;32645:4:::0;;-1:-1:-1;;32650:15:0;;32645:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32645:21:0::1;-1:-1:-1::0;;;;;32631:46:0::1;;32678:2;32631:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;32631:50:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32631:50:0;32692:44:::1;::::0;;32631:50:::1;32692:44:::0;;::::1;::::0;;;;;;;;;;;32631:50;;-1:-1:-1;32692:44:0::1;::::0;;;32727:4;;;;;;32692:44;::::1;::::0;32727:4;;32692:44;32727:4;32692:44;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;32733:2:0;;-1:-1:-1;32692:34:0::1;::::0;-1:-1:-1;;32692:44:0:i:1;:::-;32842:12:::0;32769:69:::1;32824:13:::0;32783:4;;-1:-1:-1;;32788:15:0;;32783:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32783:21:0::1;-1:-1:-1::0;;;;;32769:46:0::1;;32816:2;32769:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;32769:50:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;20248:865:::0;20502:12;20516;20483:8;16732:15;16720:8;:27;;16712:64;;;;;-1:-1:-1;;;16712:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:64:0;;;;;;;;;;;;;;;20541:12:::1;20556:49;20581:7;20590:6;20598;20556:24;:49::i;:::-;20616:62;::::0;;-1:-1:-1;;;20616:62:0;;20650:10:::1;20616:62;::::0;::::1;::::0;-1:-1:-1;;;;;20616:33:0;::::1;:62:::0;;;;;;;;;;;;;;20541:64;;-1:-1:-1;20616:33:0;;::::1;::::0;:62;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20616:33:0;:62;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;20746:29:0::1;::::0;;-1:-1:-1;;;20746:29:0;;-1:-1:-1;;;;;20746:29:0;;::::1;;::::0;::::1;::::0;;;20716:12:::1;::::0;;;20746:25;;::::1;::::0;::::1;::::0;:29;;;;;;;;;;;20716:12;20746:25;:29;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;20746:29:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20746:29:0;-1:-1:-1;20787:14:0::1;20806:43;20834:6:::0;20842;20806:27:::1;:43::i;:::-;20786:63;;;20891:6;-1:-1:-1::0;;;;;20881:16:0::1;:6;-1:-1:-1::0;;;;;20881:16:0::1;;:58;;20922:7;20931;20881:58;;;20901:7;20910;20881:58;20860:79:::0;;-1:-1:-1;20860:79:0;-1:-1:-1;20958:21:0;;::::1;;20950:72;;;;-1:-1:-1::0;;;20950:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21052:10;21041:7;:21;;21033:72;;;;-1:-1:-1::0;;;21033:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16787:1;;;;20248:865:::0;;;;;;;;;;;:::o;16575:41::-;;;:::o;34568:253::-;34712:21;34758:55;34789:7;34798:8;34808:4;34758:30;:55::i;22481:669::-;22770:16;22788:14;22815:12;22830:46;22855:7;22864:5;22871:4;22830:24;:46::i;:::-;22815:61;;22887:10;22900;:33;;22924:9;22900:33;;;-1:-1:-1;;22900:33:0;22944:80;;;-1:-1:-1;;;22944:80:0;;22972:10;22944:80;;;;22992:4;22944:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22887:46;;-1:-1:-1;;;;;;22944:27:0;;;;;:80;;;;;-1:-1:-1;;22944:80:0;;;;;;;;-1:-1:-1;22944:27:0;:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23062;23081:5;23088:9;23099:14;23115:12;23129:2;23133:8;23062:18;:80::i;:::-;23035:107;;;;-1:-1:-1;22481:669:0;-1:-1:-1;;;;;;;;;;;;;22481:669:0:o;18487:738::-;18775:12;18789;18803:14;18756:8;16732:15;16720:8;:27;;16712:64;;;;;-1:-1:-1;;;16712:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:64:0;;;;;;;;;;;;;;;18851:85:::1;18865:6;18873;18881:14;18897;18913:10;18925;18851:13;:85::i;:::-;18830:106:::0;;-1:-1:-1;18830:106:0;-1:-1:-1;18947:12:0::1;18962:49;18987:7;18996:6:::0;19004;18962:24:::1;:49::i;:::-;18947:64;;19022:66;19054:6;19062:10;19074:4;19080:7;19022:31;:66::i;:::-;19099;19131:6;19139:10;19151:4;19157:7;19099:31;:66::i;:::-;19203:4;-1:-1:-1::0;;;;;19188:25:0::1;;19214:2;19188:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;19188:29:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19188:29:0;18487:738;;;;-1:-1:-1;19188:29:0;;-1:-1:-1;18487:738:0;;-1:-1:-1;;;;;;;;;18487:738:0:o;19231:974::-;19484:16;19502:14;19518;19465:8;16732:15;16720:8;:27;;16712:64;;;;;-1:-1:-1;;;16712:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:64:0;;;;;;;;;;;;;;;19572:176:::1;19600:5;19620:4;19639:18;19672:9;19696:14;19725:12;19572:13;:176::i;:::-;19545:203:::0;;-1:-1:-1;19545:203:0;-1:-1:-1;19759:12:0::1;19774:46;19799:7;19808:5:::0;19815:4:::1;19774:24;:46::i;:::-;19759:61;;19831:69;19863:5;19870:10;19882:4;19888:11;19831:31;:69::i;:::-;19917:4;-1:-1:-1::0;;;;;19911:19:0::1;;19938:9;19911:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;19974:4;-1:-1:-1::0;;;;;19968:20:0::1;;19989:4;19995:9;19968:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;19968:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19968:37:0;19961:45:::1;;;;20044:4;-1:-1:-1::0;;;;;20029:25:0::1;;20055:2;20029:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;20029:29:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;20029:29:0;;-1:-1:-1;20109:9:0::1;:21:::0;-1:-1:-1;20105:92:0::1;;;20132:65;20163:10;20187:9;20175;:21;20132:30;:65::i;:::-;16787:1;19231:974:::0;;;;;;;;;;;:::o;29151:810::-;29364:21;29336:8;16732:15;16720:8;:27;;16712:64;;;;;-1:-1:-1;;;16712:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:64:0;;;;;;;;;;;;;;;29422:4:::1;-1:-1:-1::0;;;;;29411:15:0::1;:4;;29416:1;29411:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29411:7:0::1;-1:-1:-1::0;;;;;29411:15:0::1;;29403:57;;;::::0;;-1:-1:-1;;;29403:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;29403:57:0;;;;;;;;;;;;;::::1;;29481:55;29511:7;29520:9;29531:4;;29481:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29481:29:0::1;::::0;-1:-1:-1;;;29481:55:0:i:1;:::-;29471:65;;29569:9;29555:7;29563:1;29555:10;;;;;;;;;;;;;;:23;;29547:75;;;;-1:-1:-1::0;;;29547:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29639:4;-1:-1:-1::0;;;;;29633:19:0::1;;29660:7;29668:1;29660:10;;;;;;;;;;;;;;29633:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;29697:4;-1:-1:-1::0;;;;;29691:20:0::1;;29712:51;29737:7;29746:4;;29751:1;29746:7;;;;;;29712:51;29765:7;29773:1;29765:10;;;;;;;;;;;;;;29691:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;29691:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;29691:85:0;29684:93:::1;;;;29788:24;29794:7;29803:4;;29788:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29809:2:0;;-1:-1:-1;29788:5:0::1;::::0;-1:-1:-1;;29788:24:0:i:1;:::-;29875:7;29883:1;29875:10;;;;;;;;;;;;;;29863:9;:22;29859:94;;;29887:66;29918:10;29942:7;29950:1;29942:10;;;;;;;;;;;;;;29930:9;:22;29887:30;:66::i;8343:361::-:0;8538:45;;;-1:-1:-1;;;;;8538:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8538:45:0;-1:-1:-1;;;8538:45:0;;;8527:57;;;;8492:12;;8506:17;;8527:10;;;;8538:45;8527:57;;;8538:45;8527:57;;8538:45;8527:57;;;;;;;;;;-1:-1:-1;;8527:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8491:93;;;;8603:7;:57;;;;-1:-1:-1;8615:11:0;;:16;;:44;;;8646:4;8635:24;;;;;;;;;;;;;;;-1:-1:-1;8635:24:0;8615:44;8595:101;;;;;-1:-1:-1;;;8595:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8343:361;;;;;:::o;9122:195::-;9230:12;;;9192;9230;;;;;;;;;-1:-1:-1;;;;;9209:7:0;;;9223:5;;9209:34;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9209:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9191:52;;;9262:7;9254:55;;;;-1:-1:-1;;;9254:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9122:195;;;:::o;5375:517::-;5468:14;5514:1;5503:8;:12;5495:68;;;;-1:-1:-1;;;5495:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5594:1;5582:9;:13;:31;;;;;5612:1;5599:10;:14;5582:31;5574:84;;;;-1:-1:-1;;;5574:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5669:20;5692:17;:8;5705:3;5692:12;:17::i;:::-;5669:40;-1:-1:-1;5720:14:0;5737:31;5669:40;5757:10;5737:19;:31::i;:::-;5720:48;-1:-1:-1;5779:16:0;5798:40;5822:15;5798:19;:9;5812:4;5798:13;:19::i;:::-;:23;;:40::i;:::-;5779:59;;5873:11;5861:9;:23;;;;;;;5375:517;-1:-1:-1;;;;;;;5375:517:0:o;6567:511::-;6668:21;6725:1;6710:4;:11;:16;;6702:59;;;;;-1:-1:-1;;;6702:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;6793:4;:11;6782:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6782:23:0;;6772:33;;6829:8;6816:7;6824:1;6816:10;;;;;;;;;;;;;:21;;;;;6853:6;6848:223;6879:1;6865:4;:11;:15;6861:1;:19;6848:223;;;6903:14;6919:15;6938:42;6950:7;6959:4;6964:1;6959:7;;;;;;;;;;;;;;6968:4;6973:1;6977;6973:5;6968:11;;;;;;;;;;;;;;6938;:42::i;:::-;6902:78;;;;7012:47;7025:7;7033:1;7025:10;;;;;;;;;;;;;;7037:9;7048:10;7012:12;:47::i;:::-;6995:7;7003:1;7007;7003:5;6995:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;6882:3:0;;6848:223;;;;6567:511;;;;;:::o;3892:478::-;3981:12;4007:14;4023;4041:26;4052:6;4060;4041:10;:26::i;:::-;4205:32;;;-1:-1:-1;;4205:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4195:43;;;;;;-1:-1:-1;;;;;;4108:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4098:262;;;;;;;;;3892:478;-1:-1:-1;;;;;3892:478:0:o;8712:402::-;8937:51;;;-1:-1:-1;;;;;8937:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8937:51:0;-1:-1:-1;;;8937:51:0;;;8926:63;;;;8891:12;;8905:17;;8926:10;;;;8937:51;8926:63;;;8937:51;8926:63;;8937:51;8926:63;;;;;;;;;;-1:-1:-1;;8926:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8890:99;;;;9008:7;:57;;;;-1:-1:-1;9020:11:0;;:16;;:44;;;9051:4;9040:24;;;;;;;;;;;;;;;-1:-1:-1;9040:24:0;9020:44;9000:106;;;;-1:-1:-1;;;9000:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8712:402;;;;;;:::o;24771:735::-;24878:6;24873:626;24904:1;24890:4;:11;:15;24886:1;:19;24873:626;;;24928:13;24943:14;24962:4;24967:1;24962:7;;;;;;;;;;;;;;24971:4;24976:1;24980;24976:5;24971:11;;;;;;;;;;;;;;24927:56;;;;24999:14;25018:42;25046:5;25053:6;25018:27;:42::i;:::-;24998:62;;;25075:14;25092:7;25100:1;25104;25100:5;25092:14;;;;;;;;;;;;;;25075:31;;25122:15;25139;25167:6;-1:-1:-1;;;;;25158:15:0;:5;-1:-1:-1;;;;;25158:15:0;;:61;;25200:9;25216:1;25158:61;;;25182:1;25186:9;25158:61;25121:98;;;;25234:10;25265:1;25251:4;:11;:15;25247:1;:19;:82;;25326:3;25247:82;;;25269:54;25294:7;25303:6;25311:4;25316:1;25320;25316:5;25311:11;;;;;;;;;;;;;;25269:24;:54::i;:::-;25234:95;;25359:48;25384:7;25393:5;25400:6;25359:24;:48::i;:::-;-1:-1:-1;;;;;25344:69:0;;25432:10;25444;25456:2;25470:1;25460:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25460:12:0;;25344:143;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25344:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24907:3:0;;;;;-1:-1:-1;24873:626:0;;-1:-1:-1;;;;;;;;24873:626:0;;;24771:735;;;:::o;7159:532::-;7260:21;7317:1;7302:4;:11;:16;;7294:59;;;;;-1:-1:-1;;;7294:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7385:4;:11;7374:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7374:23:0;;7364:33;;7438:9;7408:7;7433:1;7416:7;:14;:18;7408:27;;;;;;;;;;;;;;;;;:39;7472:11;;-1:-1:-1;;7472:15:0;7458:226;7489:5;;7458:226;;7517:14;7533:15;7552:42;7564:7;7573:4;7582:1;7578;:5;7573:11;;;;;;;;;;;;;;7586:4;7591:1;7586:7;;;;;;;7552:42;7516:78;;;;7626:46;7638:7;7646:1;7638:10;;;;;;;;;;;;;;7650:9;7661:10;7626:11;:46::i;:::-;7609:7;7621:1;7617;:5;7609:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;7496:3:0;7458:226;;30108:1221;30221:6;30216:1106;30247:1;30233:4;:11;:15;30229:1;:19;30216:1106;;;30271:13;30286:14;30305:4;30310:1;30305:7;;;;;;;;;;;;;;30314:4;30319:1;30323;30319:5;30314:11;;;;;;;;;;;;;;30270:56;;;;30342:14;30361:42;30389:5;30396:6;30361:27;:42::i;:::-;30341:62;;;30418:19;30455:48;30480:7;30489:5;30496:6;30455:24;:48::i;:::-;30418:86;;30519:16;30550:17;30638:13;30653;30671:4;-1:-1:-1;;;;;30671:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30671:18:0;;;;;;;-1:-1:-1;;;;;30637:52:0;;;;-1:-1:-1;30637:52:0;;-1:-1:-1;30705:17:0;;-1:-1:-1;;;;;30746:15:0;;;;;;;:61;;30788:8;30798;30746:61;;;30765:8;30775;30746:61;30704:103;;;;30836:63;30886:12;30850:5;-1:-1:-1;;;;;30836:30:0;;30875:4;30836:45;;;;;;;;;;;;;-1:-1:-1;;;;;30836:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;:63;30822:77;;30929:71;30959:11;30972:12;30986:13;30929:29;:71::i;:::-;30914:86;;30216:1106;;;;31031:15;31048;31076:6;-1:-1:-1;;;;;31067:15:0;:5;-1:-1:-1;;;;;31067:15:0;;:67;;31112:12;31131:1;31067:67;;;31091:1;31095:12;31067:67;31030:104;;;;31149:10;31180:1;31166:4;:11;:15;31162:1;:19;:82;;31241:3;31162:82;;;31184:54;31209:7;31218:6;31226:4;31231:1;31235;31231:5;31226:11;;;;;;;31184:54;31297:12;;;31307:1;31297:12;;;;;;;;;;-1:-1:-1;;;31259:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;31259:51:0;;;;;;;;;;;;;;;;;;;;;;31149:95;;-1:-1:-1;31259:9:0;;;;;;31269:10;;31281;;31149:95;;31297:12;;31259:51;;;;;;;;31297:12;;31259:51;;;;31297:12;;31259:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30250:3:0;;;;;-1:-1:-1;30216:1106:0;;-1:-1:-1;;;;;;;;;;30216:1106:0;2898:129;2982:5;;;2977:16;;;;2969:50;;;;;-1:-1:-1;;;2969:50:0;;;;;;;;;;;;-1:-1:-1;;;2969:50:0;;;;;;;;;;;;;;6013:472;6106:13;6152:1;6140:9;:13;6132:70;;;;-1:-1:-1;;;6132:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6233:1;6221:9;:13;:31;;;;;6251:1;6238:10;:14;6221:31;6213:84;;;;-1:-1:-1;;;6213:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6308:14;6325:34;6354:4;6325:24;:9;6339;6325:13;:24::i;:::-;:28;;:34::i;:::-;6308:51;-1:-1:-1;6370:16:0;6389:34;6419:3;6389:25;:10;6404:9;6389:14;:25::i;:34::-;6370:53;;6445:32;6475:1;6458:11;6446:9;:23;;;;;;;6445:29;:32::i;:::-;6434:43;6013:472;-1:-1:-1;;;;;;6013:472:0:o;4932:321::-;5014:12;5057:1;5047:7;:11;5039:61;;;;-1:-1:-1;;;5039:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5130:1;5119:8;:12;:28;;;;;5146:1;5135:8;:12;5119:28;5111:81;;;;-1:-1:-1;;;5111:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5237:8;5213:21;:7;5225:8;5213:11;:21::i;:::-;:32;;;;;;;4932:321;-1:-1:-1;;;;4932:321:0:o;3451:349::-;3526:14;3542;3587:6;-1:-1:-1;;;;;3577:16:0;:6;-1:-1:-1;;;;;3577:16:0;;;3569:66;;;;-1:-1:-1;;;3569:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3674:6;-1:-1:-1;;;;;3665:15:0;:6;-1:-1:-1;;;;;3665:15:0;;:53;;3703:6;3711;3665:53;;;3684:6;3692;3665:53;3646:72;;-1:-1:-1;3646:72:0;-1:-1:-1;;;;;;3737:20:0;;3729:63;;;;;-1:-1:-1;;;3729:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3451:349;;;;;:::o;17091:1390::-;17309:12;17323;17466:1;-1:-1:-1;;;;;17404:64:0;17422:7;-1:-1:-1;;;;;17404:34:0;;17439:6;17447;17404:50;;;;;;;;;;;;;-1:-1:-1;;;;;17404:50:0;;;;;;-1:-1:-1;;;;;17404:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17404:50:0;-1:-1:-1;;;;;17404:64:0;;17400:150;;;17503:7;-1:-1:-1;;;;;17485:37:0;;17523:6;17531;17485:53;;;;;;;;;;;;;-1:-1:-1;;;;;17485:53:0;;;;;;-1:-1:-1;;;;;17485:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17400:150:0;17561:13;17576;17593:53;17622:7;17631:6;17639;17593:28;:53::i;:::-;17560:86;;;;17661:8;17673:1;17661:13;:30;;;;-1:-1:-1;17678:13:0;;17661:30;17657:817;;;17730:14;;-1:-1:-1;17746:14:0;;-1:-1:-1;17657:817:0;;;17794:19;17816:58;17839:14;17855:8;17865;17816:22;:58::i;:::-;17794:80;;17911:14;17893;:32;17889:574;;17972:10;17954:14;:28;;17946:79;;;;-1:-1:-1;;;17946:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18066:14;;-1:-1:-1;18082:14:0;-1:-1:-1;18082:14:0;17889:574;;;18138:19;18160:58;18183:14;18199:8;18209;18160:22;:58::i;:::-;18138:80;;18262:14;18244;:32;;18237:40;;;;18322:10;18304:14;:28;;18296:79;;;;-1:-1:-1;;;18296:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18416:14;-1:-1:-1;18432:14:0;;-1:-1:-1;17889:574:0;17657:817;;17091:1390;;;;;;;;;;;:::o;3035:142::-;3087:6;3114;;;:30;;-1:-1:-1;;3129:5:0;;;3143:1;3138;3129:5;3138:1;3124:15;;;;;:20;3114:30;3106:63;;;;;-1:-1:-1;;;3106:63:0;;;;;;;;;;;;-1:-1:-1;;;3106:63:0;;;;;;;;;;;;;;2762:128;2846:5;;;2841:16;;;;2833:49;;;;;-1:-1:-1;;;2833:49:0;;;;;;;;;;;;-1:-1:-1;;;2833:49:0;;;;;;;;;;;;;;4428:391;4521:13;4536;4563:14;4582:26;4593:6;4601;4582:10;:26::i;:::-;4562:46;;;4620:13;4635;4668:32;4676:7;4685:6;4693;4668:7;:32::i;:::-;-1:-1:-1;;;;;4653:60:0;;:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4653:62:0;;;;;;;-1:-1:-1;;;;;4619:96:0;;;;-1:-1:-1;4619:96:0;;-1:-1:-1;;;;;;4749:16:0;;;;;;;:62;;4792:8;4802;4749:62;;;4769:8;4779;4749:62;4726:85;;;;-1:-1:-1;4428:391:0;-1:-1:-1;;;;;;;4428:391:0:o

Swarm Source

ipfs://1046181566cf8a35bd60f7e94b82dcde5a31b9e46aa697f15b739ad658b78711
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Validator ID :
0 FTM

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

Downtime
0 s
Address Amount claimed Rewards Created On Epoch Created On
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.