Contract 0xee01c0cd76354c383b8c7b4e65ea88d00b06f36f 15

 

Contract Overview

Arbswap: Swap Router
Balance:
0 ETH

ETH Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x4a01e099e247ce179ba33d553381cdce066f5a987dbfca0fcdde863d962f0702Add Liquidity ET...735662792024-06-25 17:07:0545 mins ago0x67d3497fc8b9c6c3039f2058242a28270117489f IN  Arbswap: Swap Router0.00099673831117 ETH0.00000189 0.01
0xad2b060dba81522c4373b64f94c78bf911a9576f6c5579cdb4dcac35c6a1265dSwap Exact Token...735660552024-06-25 17:01:0051 mins ago0x12fb84bae502ad01eeaea43bba2398a64a3f08b1 IN  Arbswap: Swap Router0 ETH0.000001340.01
0x4e4e6f12a6a47fc1e97be842df1c2b2eeea8db432b6eb34ae165e04c0fc1e6d4Add Liquidity735659092024-06-25 16:57:5354 mins ago0x67d3497fc8b9c6c3039f2058242a28270117489f IN  Arbswap: Swap Router0 ETH0.00000189 0.01
0x784d13e38e2eeabbe633107b1bd5394cfb00779ed4a903a000d486603494b878Swap Exact Token...735657712024-06-25 16:54:1058 mins ago0x12fb84bae502ad01eeaea43bba2398a64a3f08b1 IN  Arbswap: Swap Router0 ETH0.000001340.01
0xfc25adabee168701f45c53d38572c3f31673319a0fbde82fb7f2767042a46bf5Swap Exact ETH F...735654152024-06-25 16:39:341 hr 13 mins ago0x127777062355630e1f507aed7f4dc9cb73958c33 IN  Arbswap: Swap Router0.01 ETH0.00000138 0.01
0x7e93bf8f41d83eb81725b6debea025718de67951e45645b991c2856d93864f46Swap Exact ETH F...735653102024-06-25 16:35:011 hr 17 mins ago0x127777062355630e1f507aed7f4dc9cb73958c33 IN  Arbswap: Swap Router0.01 ETH0.00000138 0.01
0x1851ca582089f298b71f93992cf79996354c105038a814f9fc1d6416ead7c331Remove Liquidity...735633552024-06-25 15:30:032 hrs 22 mins ago0x507b29f1689637d2e67d7728096c0da38758e9ec IN  Arbswap: Swap Router0 ETH0.00000266 0.01
0xdfa5cd637179e2b31cc1507e39cf97b1104f21d9a5776e7cc4a8decbfb94b975Remove Liquidity...735633372024-06-25 15:29:422 hrs 23 mins ago0xe0a175065f5194c6dbde2ef6302529f219658d63 IN  Arbswap: Swap Router0 ETH0.00000266 0.01
0x5559b1c655ca0f6bfc5121510d5eb609c6c130f26cfb6dffcbf2ce214d06690fRemove Liquidity...735632782024-06-25 15:27:282 hrs 25 mins ago0x672399c31a3d0452db276edf8cc30be873cd37b1 IN  Arbswap: Swap Router0 ETH0.00000266 0.01
0xbd8b5abcb94ffcdcc8fc6612925d22a92b77cde5049ae5377388f8acfee0c408Remove Liquidity...735632672024-06-25 15:27:092 hrs 25 mins ago0x48b935b7b81644196e15e438c2613b813ce2e3bf IN  Arbswap: Swap Router0 ETH0.00000272 0.01
0x6e5de2f76740da1b60cf310a1d4a76188648a4d88688e29a3ba89ddad5ef3f96Remove Liquidity...735631982024-06-25 15:24:412 hrs 28 mins ago0x4f838b6861a9467299f5031db559eb7387641caa IN  Arbswap: Swap Router0 ETH0.00000266 0.01
0x3c199596067cfbd07babc4ac21a985319afe403112ac46cbd93bf3030a171601Remove Liquidity...735631882024-06-25 15:24:222 hrs 28 mins ago0xc7044298c3564b9154e41c517028a1d2b774c3ed IN  Arbswap: Swap Router0 ETH0.00000266 0.01
0xb237eeb0fe235be9183fc879d1866882abcaedbe3ed16e5c85cc0d2864ba8e77Remove Liquidity...735631772024-06-25 15:24:032 hrs 28 mins ago0x6fe2fdcbd962127fe269437ebd2dd212f024aeba IN  Arbswap: Swap Router0 ETH0.00000266 0.01
0x7b4444b7c3821d44dfcbb620905790798c26fe4349f29723450b78147c631b88Remove Liquidity...735631642024-06-25 15:23:282 hrs 29 mins ago0xf50b52bec0224f1f8758ab42a921f4096bb34ca3 IN  Arbswap: Swap Router0 ETH0.00000266 0.01
0x1aaedd663f60980f333f36a1a66e039d87ccc2c8df36b79f212d0671b93925c0Remove Liquidity...735631532024-06-25 15:23:082 hrs 29 mins ago0xa42bab17d990411914ba6eecd8a37c0349ed8543 IN  Arbswap: Swap Router0 ETH0.00000266 0.01
0xe0984f2c90f62d5ec569f3f6a0766924c88da577767342fe214ed3f6751625cfRemove Liquidity...735631462024-06-25 15:22:452 hrs 30 mins ago0x40886f9708f87bb634152f80d1617ae2dd42f6df IN  Arbswap: Swap Router0 ETH0.00000266 0.01
0x4ff6fd33cab8925513c03b381c046497279b5d2daa80ae51246fc8d62d6a7175Remove Liquidity...735631372024-06-25 15:22:252 hrs 30 mins ago0xfa98704e1a7ff88c75e8062849f99663bc1d0455 IN  Arbswap: Swap Router0 ETH0.00000266 0.01
0x8b3aaefd94b3019b2f2de1746c35bb73113ce343fff64e7ad717a712a14991e5Remove Liquidity...735631312024-06-25 15:22:032 hrs 30 mins ago0x5e32602170a05faab34d75f999a5375d18b3aac9 IN  Arbswap: Swap Router0 ETH0.00000266 0.01
0x95f6592f70f29336c97871cd955fe3bcc06e622f88b3e0d881e6b1318f1e4600Remove Liquidity...735631212024-06-25 15:21:432 hrs 31 mins ago0x12d6311386b351b64aea06e2f8ae8f9b810a5bf8 IN  Arbswap: Swap Router0 ETH0.00000266 0.01
0x45b422a8ca6b768a6aefa2b5468d3877e35bc70d302d158ae23a6299a959447eRemove Liquidity...735631122024-06-25 15:21:232 hrs 31 mins ago0xc5ade0c6d9c0ed341402ab79b1586fd202c125d7 IN  Arbswap: Swap Router0 ETH0.00000272 0.01
0xc383d77cfedb023782d001d2689821981c995fb7869d7207877213db708f52fdSwap Exact Token...735631112024-06-25 15:21:182 hrs 31 mins ago0x12fb84bae502ad01eeaea43bba2398a64a3f08b1 IN  Arbswap: Swap Router0 ETH0.000001320.01
0x2d33fddb80e91132340779fedf9d6ceef734f17ff41c904cd43804b37e2ce7c1Remove Liquidity...735630322024-06-25 15:18:382 hrs 34 mins ago0xf909825b73dd223885804d79332f98a594007d87 IN  Arbswap: Swap Router0 ETH0.00000272 0.01
0x9fcd571b6f16fcaccb6f4d0248abb3d9fbd6a467c663c7fab05529aa631417a8Swap Exact Token...735630302024-06-25 15:18:352 hrs 34 mins ago0x12fb84bae502ad01eeaea43bba2398a64a3f08b1 IN  Arbswap: Swap Router0 ETH0.000001320.01
0xb85297fd539f6a8fc57cdd2828c267108793eada7d28a6a89c0e4d90e96d2e6bRemove Liquidity...735630212024-06-25 15:18:172 hrs 34 mins ago0x7f3da2e96f8ba2021937a6876765efd08bf4e18f IN  Arbswap: Swap Router0 ETH0.00000265 0.01
0x2808812460f57ebade6568af169f7343bb0befc9a738c50ad5c5bd6dcd666d2cRemove Liquidity...735630122024-06-25 15:17:572 hrs 34 mins ago0xb9ff2439708f022ef543193f44801a379e908fa4 IN  Arbswap: Swap Router0 ETH0.00000266 0.01
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x4a01e099e247ce179ba33d553381cdce066f5a987dbfca0fcdde863d962f0702735662792024-06-25 17:07:0545 mins ago Arbswap: Swap Router Wrapped Ether: WETH Token0.000996738311170983 ETH
0xfc25adabee168701f45c53d38572c3f31673319a0fbde82fb7f2767042a46bf5735654152024-06-25 16:39:341 hr 13 mins ago Arbswap: Swap Router Wrapped Ether: WETH Token0.01 ETH
0x7e93bf8f41d83eb81725b6debea025718de67951e45645b991c2856d93864f46735653102024-06-25 16:35:011 hr 17 mins ago Arbswap: Swap Router Wrapped Ether: WETH Token0.01 ETH
0x1851ca582089f298b71f93992cf79996354c105038a814f9fc1d6416ead7c331735633552024-06-25 15:30:032 hrs 22 mins ago Arbswap: Swap Router0x507b29f1689637d2e67d7728096c0da38758e9ec0.000665917374772061 ETH
0x1851ca582089f298b71f93992cf79996354c105038a814f9fc1d6416ead7c331735633552024-06-25 15:30:032 hrs 22 mins ago Wrapped Ether: WETH Token Arbswap: Swap Router0.000665917374772061 ETH
0xdfa5cd637179e2b31cc1507e39cf97b1104f21d9a5776e7cc4a8decbfb94b975735633372024-06-25 15:29:422 hrs 23 mins ago Arbswap: Swap Router0xe0a175065f5194c6dbde2ef6302529f219658d630.000676652752493082 ETH
0xdfa5cd637179e2b31cc1507e39cf97b1104f21d9a5776e7cc4a8decbfb94b975735633372024-06-25 15:29:422 hrs 23 mins ago Wrapped Ether: WETH Token Arbswap: Swap Router0.000676652752493082 ETH
0x5559b1c655ca0f6bfc5121510d5eb609c6c130f26cfb6dffcbf2ce214d06690f735632782024-06-25 15:27:282 hrs 25 mins ago Arbswap: Swap Router0x672399c31a3d0452db276edf8cc30be873cd37b10.000798014354174669 ETH
0x5559b1c655ca0f6bfc5121510d5eb609c6c130f26cfb6dffcbf2ce214d06690f735632782024-06-25 15:27:282 hrs 25 mins ago Wrapped Ether: WETH Token Arbswap: Swap Router0.000798014354174669 ETH
0xbd8b5abcb94ffcdcc8fc6612925d22a92b77cde5049ae5377388f8acfee0c408735632672024-06-25 15:27:092 hrs 25 mins ago Arbswap: Swap Router0x48b935b7b81644196e15e438c2613b813ce2e3bf0.000533330732679379 ETH
0xbd8b5abcb94ffcdcc8fc6612925d22a92b77cde5049ae5377388f8acfee0c408735632672024-06-25 15:27:092 hrs 25 mins ago Wrapped Ether: WETH Token Arbswap: Swap Router0.000533330732679379 ETH
0xd9c27532690a1d4d7aa589d5452517f8fbbc2f60a4d3ffe753ae40b9efab3201735632612024-06-25 15:26:572 hrs 25 mins ago Arbswap: Swap Router Wrapped Ether: WETH Token0.00032 ETH
0xd9c27532690a1d4d7aa589d5452517f8fbbc2f60a4d3ffe753ae40b9efab3201735632612024-06-25 15:26:572 hrs 25 mins ago 0xca506793a420e901bbca8066be5661e3c52c84c2 Arbswap: Swap Router0.00032 ETH
0x6e5de2f76740da1b60cf310a1d4a76188648a4d88688e29a3ba89ddad5ef3f96735631982024-06-25 15:24:412 hrs 28 mins ago Arbswap: Swap Router0x4f838b6861a9467299f5031db559eb7387641caa0.000628801780954567 ETH
0x6e5de2f76740da1b60cf310a1d4a76188648a4d88688e29a3ba89ddad5ef3f96735631982024-06-25 15:24:412 hrs 28 mins ago Wrapped Ether: WETH Token Arbswap: Swap Router0.000628801780954567 ETH
0x3c199596067cfbd07babc4ac21a985319afe403112ac46cbd93bf3030a171601735631882024-06-25 15:24:222 hrs 28 mins ago Arbswap: Swap Router0xc7044298c3564b9154e41c517028a1d2b774c3ed0.000638190762024689 ETH
0x3c199596067cfbd07babc4ac21a985319afe403112ac46cbd93bf3030a171601735631882024-06-25 15:24:222 hrs 28 mins ago Wrapped Ether: WETH Token Arbswap: Swap Router0.000638190762024689 ETH
0xb237eeb0fe235be9183fc879d1866882abcaedbe3ed16e5c85cc0d2864ba8e77735631772024-06-25 15:24:032 hrs 28 mins ago Arbswap: Swap Router0x6fe2fdcbd962127fe269437ebd2dd212f024aeba0.000815762577705428 ETH
0xb237eeb0fe235be9183fc879d1866882abcaedbe3ed16e5c85cc0d2864ba8e77735631772024-06-25 15:24:032 hrs 28 mins ago Wrapped Ether: WETH Token Arbswap: Swap Router0.000815762577705428 ETH
0x7b4444b7c3821d44dfcbb620905790798c26fe4349f29723450b78147c631b88735631642024-06-25 15:23:282 hrs 29 mins ago Arbswap: Swap Router0xf50b52bec0224f1f8758ab42a921f4096bb34ca30.000628039640855879 ETH
0x7b4444b7c3821d44dfcbb620905790798c26fe4349f29723450b78147c631b88735631642024-06-25 15:23:282 hrs 29 mins ago Wrapped Ether: WETH Token Arbswap: Swap Router0.000628039640855879 ETH
0x1aaedd663f60980f333f36a1a66e039d87ccc2c8df36b79f212d0671b93925c0735631532024-06-25 15:23:082 hrs 29 mins ago Arbswap: Swap Router0xa42bab17d990411914ba6eecd8a37c0349ed85430.000733466789282337 ETH
0x1aaedd663f60980f333f36a1a66e039d87ccc2c8df36b79f212d0671b93925c0735631532024-06-25 15:23:082 hrs 29 mins ago Wrapped Ether: WETH Token Arbswap: Swap Router0.000733466789282337 ETH
0xe0984f2c90f62d5ec569f3f6a0766924c88da577767342fe214ed3f6751625cf735631462024-06-25 15:22:452 hrs 30 mins ago Arbswap: Swap Router0x40886f9708f87bb634152f80d1617ae2dd42f6df0.000679630914452175 ETH
0xe0984f2c90f62d5ec569f3f6a0766924c88da577767342fe214ed3f6751625cf735631462024-06-25 15:22:452 hrs 30 mins ago Wrapped Ether: WETH Token Arbswap: Swap Router0.000679630914452175 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SwapRouter

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Nova.Arbiscan.io on 2022-11-30
*/

/**
 *Submitted for verification at Arbiscan on 2021-12-09
*/

// Sources flattened with hardhat v2.0.11 https://hardhat.org

// File contracts/interfaces/ISwapPair.sol

// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}


// File contracts/libraries/SafeMath.sol


pragma solidity 0.6.12;
// a library for performing overflow-safe math, updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math)
library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {require((c = a + b) >= b, "SafeMath: Add Overflow");}
    function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {require((c = a - b) <= a, "SafeMath: Underflow");}
    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {require(b == 0 || (c = a * b)/b == a, "SafeMath: Mul Overflow");}
    function to128(uint256 a) internal pure returns (uint128 c) {
        require(a <= uint128(-1), "SafeMath: uint128 Overflow");
        c = uint128(a);
    }
}

library SafeMath128 {
    function add(uint128 a, uint128 b) internal pure returns (uint128 c) {require((c = a + b) >= b, "SafeMath: Add Overflow");}
    function sub(uint128 a, uint128 b) internal pure returns (uint128 c) {require((c = a - b) <= a, "SafeMath: Underflow");}
}


// File contracts/libraries/SwapLibrary.sol



pragma solidity >=0.5.0;

library SwapLibrary {
    using SafeMath for uint;

    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
        require(tokenA != tokenB, 'SwapLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'SwapLibrary: 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'70b19cf85a176c6b86e2d324be179104bdc8fafee13d548ae07d28b9f53cbc71' // 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,) = ISwapPair(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, 'SwapLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'SwapLibrary: 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, 'SwapLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'SwapLibrary: 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, 'SwapLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'SwapLibrary: 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, 'SwapLibrary: 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, 'SwapLibrary: 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/libraries/TransferHelper.sol


pragma solidity 0.6.12;

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

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

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

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


// File contracts/interfaces/ISwapRouter.sol


pragma solidity 0.6.12;

interface ISwapRouter {
    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);

    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/interfaces/ISwapFactory.sol


pragma solidity 0.6.12;

interface ISwapFactory {
    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/interfaces/IERC20.sol


pragma solidity 0.6.12;

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

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

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

    // EIP 2612
    function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;
}


// File contracts/interfaces/IWETH.sol


pragma solidity 0.6.12;

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


// File contracts/swap/SwapRouter.sol


pragma solidity 0.6.12;







contract SwapRouter is ISwapRouter {
    using SafeMath for uint;

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

    modifier ensure(uint deadline) {
        require(deadline >= block.timestamp, 'Arbswap swapRouter: 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 (ISwapFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            ISwapFactory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = SwapLibrary.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = SwapLibrary.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'Arbswap swapRouter: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = SwapLibrary.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'Arbswap swapRouter: 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 = SwapLibrary.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = ISwapPair(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 = SwapLibrary.pairFor(factory, token, WETH);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWETH(WETH).deposit{value: amountETH}();
        assert(IWETH(WETH).transfer(pair, amountETH));
        liquidity = ISwapPair(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 = SwapLibrary.pairFor(factory, tokenA, tokenB);
        ISwapPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = ISwapPair(pair).burn(to);
        (address token0,) = SwapLibrary.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'Arbswap swapRouter: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'Arbswap swapRouter: 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 = SwapLibrary.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        ISwapPair(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 = SwapLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        ISwapPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline);
    }

    // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) ****
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountETH) {
        (, amountETH) = removeLiquidity(
            token,
            WETH,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this)));
        IWETH(WETH).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountETH) {
        address pair = SwapLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        ISwapPair(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,) = SwapLibrary.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 ? SwapLibrary.pairFor(factory, output, path[i + 2]) : _to;
            ISwapPair(SwapLibrary.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 = SwapLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'Arbswap swapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, SwapLibrary.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 = SwapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'Arbswap swapRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, SwapLibrary.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, 'Arbswap swapRouter: INVALID_PATH');
        amounts = SwapLibrary.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'Arbswap swapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(SwapLibrary.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, 'Arbswap swapRouter: INVALID_PATH');
        amounts = SwapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'Arbswap swapRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, SwapLibrary.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, 'Arbswap swapRouter: INVALID_PATH');
        amounts = SwapLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'Arbswap swapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, SwapLibrary.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, 'Arbswap swapRouter: INVALID_PATH');
        amounts = SwapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'Arbswap swapRouter: EXCESSIVE_INPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(SwapLibrary.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,) = SwapLibrary.sortTokens(input, output);
            ISwapPair pair = ISwapPair(SwapLibrary.pairFor(factory, input, output));
            uint amountInput;
            uint amountOutput;
            { // scope to avoid stack too deep errors
            (uint reserve0, uint reserve1,) = pair.getReserves();
            (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
            amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput);
            amountOutput = SwapLibrary.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? SwapLibrary.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, SwapLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'Arbswap swapRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WETH, 'Arbswap swapRouter: INVALID_PATH');
        uint amountIn = msg.value;
        IWETH(WETH).deposit{value: amountIn}();
        assert(IWETH(WETH).transfer(SwapLibrary.pairFor(factory, path[0], path[1]), amountIn));
        uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'Arbswap swapRouter: 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, 'Arbswap swapRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, SwapLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'Arbswap swapRouter: 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 SwapLibrary.quote(amountA, reserveA, reserveB);
    }

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

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

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

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

Contract ABI

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

60c06040523480156200001157600080fd5b50604051620055f7380380620055f7833981810160405260408110156200003757600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c61547062000187600039806101ac5280610e5d5280610e985280610fd5528061129852806116f252806118d65280611dec5280611f2b5280612039528061214052806122f35280612388528061262452806126cb5280612799528061289e52806129865280612a075280613054528061337452806133ca52806133fe528061347f528061366d528061381d52806138b25250806110c752806111c5528061136b52806113a4528061154f52806117e452806118b45280611aa1528061222652806123c7528061255a5280612a465280612d475280612fd952806130025280613032528061320f52806133a8528061375352806138f15280614342528061438552806146cf528061489a5280614de95280614ed65280614fb052506154706000f3fe60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610c71578063f305d71914610cfe578063fb3bdb4114610d51576101d5565b8063c45a015514610b25578063d06ca61f14610b3a578063ded9382a14610bf1576101d5565b8063af2979eb116100b0578063af2979eb146109c8578063b6f9de9514610a28578063baa2abde14610abb576101d5565b80638803dbee146108af578063ad5c464814610954578063ad615dec14610992576101d5565b80634a25d94a11610138578063791ac94711610112578063791ac947146107415780637ff36ab5146107e657806385f8c25914610879576101d5565b80634a25d94a146105775780635b0d59841461061c5780635c11d7951461069c576101d5565b80631f00ca74116101695780631f00ca74146103905780632195995c1461044757806338ed1739146104d2576101d5565b806302751cec146101da578063054d50d41461025357806318cbafe51461029b576101d5565b366101d5573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101d357fe5b005b600080fd5b3480156101e657600080fd5b5061023a600480360360c08110156101fd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135610de4565b6040805192835260208301919091528051918290030190f35b34801561025f57600080fd5b506102896004803603606081101561027657600080fd5b5080359060208101359060400135610f37565b60408051918252519081900360200190f35b3480156102a757600080fd5b50610340600480360360a08110156102be57600080fd5b8135916020810135918101906060810160408201356401000000008111156102e557600080fd5b8201836020820111156102f757600080fd5b8035906020019184602083028401116401000000008311171561031957600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135610f4c565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561037c578181015183820152602001610364565b505050509050019250505060405180910390f35b34801561039c57600080fd5b50610340600480360360408110156103b357600080fd5b813591908101906040810160208201356401000000008111156103d557600080fd5b8201836020820111156103e757600080fd5b8035906020019184602083028401116401000000008311171561040957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611364945050505050565b34801561045357600080fd5b5061023a600480360361016081101561046b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561139a565b3480156104de57600080fd5b50610340600480360360a08110156104f557600080fd5b81359160208101359181019060608101604082013564010000000081111561051c57600080fd5b82018360208201111561052e57600080fd5b8035906020019184602083028401116401000000008311171561055057600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356114d8565b34801561058357600080fd5b50610340600480360360a081101561059a57600080fd5b8135916020810135918101906060810160408201356401000000008111156105c157600080fd5b8201836020820111156105d357600080fd5b803590602001918460208302840111640100000000831117156105f557600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611669565b34801561062857600080fd5b50610289600480360361014081101561064057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356118ac565b3480156106a857600080fd5b506101d3600480360360a08110156106bf57600080fd5b8135916020810135918101906060810160408201356401000000008111156106e657600080fd5b8201836020820111156106f857600080fd5b8035906020019184602083028401116401000000008311171561071a57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356119fe565b34801561074d57600080fd5b506101d3600480360360a081101561076457600080fd5b81359160208101359181019060608101604082013564010000000081111561078b57600080fd5b82018360208201111561079d57600080fd5b803590602001918460208302840111640100000000831117156107bf57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611d65565b610340600480360360808110156107fc57600080fd5b8135919081019060408101602082013564010000000081111561081e57600080fd5b82018360208201111561083057600080fd5b8035906020019184602083028401116401000000008311171561085257600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356120cc565b34801561088557600080fd5b506102896004803603606081101561089c57600080fd5b50803590602081013590604001356124d6565b3480156108bb57600080fd5b50610340600480360360a08110156108d257600080fd5b8135916020810135918101906060810160408201356401000000008111156108f957600080fd5b82018360208201111561090b57600080fd5b8035906020019184602083028401116401000000008311171561092d57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356124e3565b34801561096057600080fd5b50610969612622565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561099e57600080fd5b50610289600480360360608110156109b557600080fd5b5080359060208101359060400135612646565b3480156109d457600080fd5b50610289600480360360c08110156109eb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135612653565b6101d360048036036080811015610a3e57600080fd5b81359190810190604081016020820135640100000000811115610a6057600080fd5b820183602082011115610a7257600080fd5b80359060200191846020830284011164010000000083111715610a9457600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff813516906020013561282c565b348015610ac757600080fd5b5061023a600480360360e0811015610ade57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612ccd565b348015610b3157600080fd5b50610969612fd7565b348015610b4657600080fd5b5061034060048036036040811015610b5d57600080fd5b81359190810190604081016020820135640100000000811115610b7f57600080fd5b820183602082011115610b9157600080fd5b80359060200191846020830284011164010000000083111715610bb357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612ffb945050505050565b348015610bfd57600080fd5b5061023a6004803603610140811015610c1557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135613028565b348015610c7d57600080fd5b50610ce06004803603610100811015610c9557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613180565b60408051938452602084019290925282820152519081900360600190f35b610ce0600480360360c0811015610d1457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356132f9565b61034060048036036080811015610d6757600080fd5b81359190810190604081016020820135640100000000811115610d8957600080fd5b820183602082011115610d9b57600080fd5b80359060200191846020830284011164010000000083111715610dbd57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356135f9565b6000808242811015610e5757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f417262737761702073776170526f757465723a20455850495245440000000000604482015290519081900360640190fd5b610e86897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612ccd565b9093509150610e96898685613a32565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f0957600080fd5b505af1158015610f1d573d6000803e3d6000fd5b50505050610f2b8583613c0f565b50965096945050505050565b6000610f44848484613d4c565b949350505050565b60608142811015610fbe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f417262737761702073776170526f757465723a20455850495245440000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061102357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f417262737761702073776170526f757465723a20494e56414c49445f50415448604482015290519081900360640190fd5b6111207f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613e5892505050565b9150868260018451038151811061113357fe5b60200260200101511015611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806153c6602e913960400191505060405180910390fd5b611257868660008181106111a257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff163361123d7f00000000000000000000000000000000000000000000000000000000000000008a8a60008181106111f157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b600181811061121b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16613fbe565b8560008151811061124a57fe5b60200260200101516140a9565b61129682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614279915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836001855103815181106112e257fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561132057600080fd5b505af1158015611334573d6000803e3d6000fd5b50505050611359848360018551038151811061134c57fe5b6020026020010151613c0f565b509695505050505050565b60606113917f000000000000000000000000000000000000000000000000000000000000000084846144ea565b90505b92915050565b60008060006113ca7f00000000000000000000000000000000000000000000000000000000000000008f8f613fbe565b90506000876113d9578c6113fb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561149757600080fd5b505af11580156114ab573d6000803e3d6000fd5b505050506114be8f8f8f8f8f8f8f612ccd565b809450819550505050509b509b9950505050505050505050565b6060814281101561154a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f417262737761702073776170526f757465723a20455850495245440000000000604482015290519081900360640190fd5b6115a87f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613e5892505050565b915086826001845103815181106115bb57fe5b6020026020010151101561161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806153c6602e913960400191505060405180910390fd5b61162a868660008181106111a257fe5b61135982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614279915050565b606081428110156116db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f417262737761702073776170526f757465723a20455850495245440000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061174057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117df57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f417262737761702073776170526f757465723a20494e56414c49445f50415448604482015290519081900360640190fd5b61183d7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506144ea92505050565b9150868260008151811061184d57fe5b60200260200101511115611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061534f602a913960400191505060405180910390fd5b6000806118fa7f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613fbe565b9050600086611909578b61192b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c48101879052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156119c757600080fd5b505af11580156119db573d6000803e3d6000fd5b505050506119ed8d8d8d8d8d8d612653565b9d9c50505050505050505050505050565b8042811015611a6e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f417262737761702073776170526f757465723a20455850495245440000000000604482015290519081900360640190fd5b611afd85856000818110611a7e57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1633611af77f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a600181811061121b57fe5b8a6140a9565b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611b2d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611bb057600080fd5b505afa158015611bc4573d6000803e3d6000fd5b505050506040513d6020811015611bda57600080fd5b50516040805160208881028281018201909352888252929350611c1c929091899189918291850190849080828437600092019190915250889250614678915050565b86611d048288887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611c4f57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cd257600080fd5b505afa158015611ce6573d6000803e3d6000fd5b505050506040513d6020811015611cfc57600080fd5b5051906149f5565b1015611d5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806153c6602e913960400191505060405180910390fd5b5050505050505050565b8042811015611dd557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f417262737761702073776170526f757465723a20455850495245440000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001685857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611e3a57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ed957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f417262737761702073776170526f757465723a20494e56414c49445f50415448604482015290519081900360640190fd5b611ee985856000818110611a7e57fe5b611f27858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614678915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611fb057600080fd5b505afa158015611fc4573d6000803e3d6000fd5b505050506040513d6020811015611fda57600080fd5b5051905086811015612037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806153c6602e913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156120aa57600080fd5b505af11580156120be573d6000803e3d6000fd5b50505050611d5b8482613c0f565b6060814281101561213e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f417262737761702073776170526f757465723a20455850495245440000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168686600081811061218257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461222157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f417262737761702073776170526f757465723a20494e56414c49445f50415448604482015290519081900360640190fd5b61227f7f000000000000000000000000000000000000000000000000000000000000000034888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613e5892505050565b9150868260018451038151811061229257fe5b602002602001015110156122f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806153c6602e913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061233a57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561236d57600080fd5b505af1158015612381573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6123f37f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b8460008151811061240057fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561245b57600080fd5b505af115801561246f573d6000803e3d6000fd5b505050506040513d602081101561248557600080fd5b505161248d57fe5b6124cc82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614279915050565b5095945050505050565b6000610f44848484614a67565b6060814281101561255557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f417262737761702073776170526f757465723a20455850495245440000000000604482015290519081900360640190fd5b6125b37f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506144ea92505050565b915086826000815181106125c357fe5b6020026020010151111561161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061534f602a913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610f44848484614b73565b600081428110156126c557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f417262737761702073776170526f757465723a20455850495245440000000000604482015290519081900360640190fd5b6126f4887f00000000000000000000000000000000000000000000000000000000000000008989893089612ccd565b90508092505061279788858a73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561276657600080fd5b505afa15801561277a573d6000803e3d6000fd5b505050506040513d602081101561279057600080fd5b5051613a32565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561280a57600080fd5b505af115801561281e573d6000803e3d6000fd5b505050506113598483613c0f565b804281101561289c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f417262737761702073776170526f757465723a20455850495245440000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16858560008181106128e057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461297f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f417262737761702073776170526f757465723a20494e56414c49445f50415448604482015290519081900360640190fd5b60003490507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156129ec57600080fd5b505af1158015612a00573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612a727f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612ac657600080fd5b505af1158015612ada573d6000803e3d6000fd5b505050506040513d6020811015612af057600080fd5b5051612af857fe5b600086867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612b2857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612bab57600080fd5b505afa158015612bbf573d6000803e3d6000fd5b505050506040513d6020811015612bd557600080fd5b50516040805160208981028281018201909352898252929350612c179290918a918a918291850190849080828437600092019190915250899250614678915050565b87611d048289897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612c4a57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cd257600080fd5b6000808242811015612d4057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f417262737761702073776170526f757465723a20455850495245440000000000604482015290519081900360640190fd5b6000612d6d7f00000000000000000000000000000000000000000000000000000000000000008c8c613fbe565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015612dee57600080fd5b505af1158015612e02573d6000803e3d6000fd5b505050506040513d6020811015612e1857600080fd5b5050604080517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612e8b57600080fd5b505af1158015612e9f573d6000803e3d6000fd5b505050506040513d6040811015612eb557600080fd5b50805160209091015190925090506000612ecf8e8e614c63565b5090508073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614612f0c578183612f0f565b82825b90975095508a871015612f6d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806152da6029913960400191505060405180910390fd5b89861015612fc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806153036029913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606113917f00000000000000000000000000000000000000000000000000000000000000008484613e58565b60008060006130787f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613fbe565b9050600087613087578c6130a9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561314557600080fd5b505af1158015613159573d6000803e3d6000fd5b5050505061316b8e8e8e8e8e8e610de4565b909f909e509c50505050505050505050505050565b600080600083428110156131f557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f417262737761702073776170526f757465723a20455850495245440000000000604482015290519081900360640190fd5b6132038c8c8c8c8c8c614dcc565b909450925060006132357f00000000000000000000000000000000000000000000000000000000000000008e8e613fbe565b90506132438d3383886140a9565b61324f8c3383876140a9565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156132b857600080fd5b505af11580156132cc573d6000803e3d6000fd5b505050506040513d60208110156132e257600080fd5b5051949d939c50939a509198505050505050505050565b6000806000834281101561336e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f417262737761702073776170526f757465723a20455850495245440000000000604482015290519081900360640190fd5b61339c8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614dcc565b909450925060006133ee7f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613fbe565b90506133fc8b3383886140a9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561346457600080fd5b505af1158015613478573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561350e57600080fd5b505af1158015613522573d6000803e3d6000fd5b505050506040513d602081101561353857600080fd5b505161354057fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156135a957600080fd5b505af11580156135bd573d6000803e3d6000fd5b505050506040513d60208110156135d357600080fd5b50519250348410156135eb576135eb33853403613c0f565b505096509650969350505050565b6060814281101561366b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f417262737761702073776170526f757465723a20455850495245440000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16868660008181106136af57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461374e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f417262737761702073776170526f757465723a20494e56414c49445f50415448604482015290519081900360640190fd5b6137ac7f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506144ea92505050565b915034826000815181106137bc57fe5b6020026020010151111561381b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061534f602a913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061386457fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561389757600080fd5b505af11580156138ab573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61391d7f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b8460008151811061392a57fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561398557600080fd5b505af1158015613999573d6000803e3d6000fd5b505050506040513d60208110156139af57600080fd5b50516139b757fe5b6139f682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614279915050565b81600081518110613a0357fe5b60200260200101513411156124cc576124cc3383600081518110613a2357fe5b60200260200101513403613c0f565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310613b0857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613acb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613b6a576040519150601f19603f3d011682016040523d82523d6000602084013e613b6f565b606091505b5091509150818015613b9d575080511580613b9d5750808060200190516020811015613b9a57600080fd5b50515b613c0857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310613c8657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613c49565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613ce8576040519150601f19603f3d011682016040523d82523d6000602084013e613ced565b606091505b5050905080613d47576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806153f46023913960400191505060405180910390fd5b505050565b6000808411613da6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806153796026913960400191505060405180910390fd5b600083118015613db65750600082115b613e0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061532c6023913960400191505060405180910390fd5b6000613e19856103e56150f9565b90506000613e2782856150f9565b90506000613e4183613e3b886103e86150f9565b9061517f565b9050808281613e4c57fe5b04979650505050505050565b6060600282511015613ecb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f537761704c6962726172793a20494e56414c49445f5041544800000000000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613ee357600080fd5b50604051908082528060200260200182016040528015613f0d578160200160208202803683370190505b5090508281600081518110613f1e57fe5b60200260200101818152505060005b6001835103811015613fb657600080613f7087868581518110613f4c57fe5b6020026020010151878660010181518110613f6357fe5b60200260200101516151f1565b91509150613f92848481518110613f8357fe5b60200260200101518383613d4c565b848460010181518110613fa157fe5b60209081029190910101525050600101613f2d565b509392505050565b6000806000613fcd8585614c63565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f70b19cf85a176c6b86e2d324be179104bdc8fafee13d548ae07d28b9f53cbc71609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b6020831061418757805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161414a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146141e9576040519150601f19603f3d011682016040523d82523d6000602084013e6141ee565b606091505b509150915081801561421c57508051158061421c575080806020019051602081101561421957600080fd5b50515b614271576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806154176024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156144e45760008084838151811061429757fe5b60200260200101518584600101815181106142ae57fe5b60200260200101519150915060006142c68383614c63565b50905060008785600101815181106142da57fe5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161461432257826000614326565b6000835b91509150600060028a5103881061433d578861437e565b61437e7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061437157fe5b6020026020010151613fbe565b90506143ab7f00000000000000000000000000000000000000000000000000000000000000008888613fbe565b73ffffffffffffffffffffffffffffffffffffffff1663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156143f5576020820181803683370190505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561446a578181015183820152602001614452565b50505050905090810190601f1680156144975780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156144b957600080fd5b505af11580156144cd573d6000803e3d6000fd5b50506001909901985061427c975050505050505050565b50505050565b606060028251101561455d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f537761704c6962726172793a20494e56414c49445f5041544800000000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561457557600080fd5b5060405190808252806020026020018201604052801561459f578160200160208202803683370190505b50905082816001835103815181106145b357fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b8015613fb657600080614613878660018603815181106145ff57fe5b6020026020010151878681518110613f6357fe5b9150915061463584848151811061462657fe5b60200260200101518383614a67565b84600185038151811061464457fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016145e3565b60005b6001835103811015613d475760008084838151811061469657fe5b60200260200101518584600101815181106146ad57fe5b60200260200101519150915060006146c58383614c63565b50905060006146f57f00000000000000000000000000000000000000000000000000000000000000008585613fbe565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561474357600080fd5b505afa158015614757573d6000803e3d6000fd5b505050506040513d606081101561476d57600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905060008073ffffffffffffffffffffffffffffffffffffffff8a8116908916146147b75782846147ba565b83835b91509150614829828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cd257600080fd5b9550614836868383613d4c565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461487a5782600061487e565b6000835b91509150600060028c51038a10614895578a6148c9565b6148c97f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061437157fe5b60408051600080825260208201928390527f022c0d9f000000000000000000000000000000000000000000000000000000008352602482018781526044830187905273ffffffffffffffffffffffffffffffffffffffff8086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015614979578181015183820152602001614961565b50505050905090810190601f1680156149a65780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156149c857600080fd5b505af11580156149dc573d6000803e3d6000fd5b50506001909b019a5061467b9950505050505050505050565b8082038281111561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f536166654d6174683a20556e646572666c6f7700000000000000000000000000604482015290519081900360640190fd5b6000808411614ac1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061539f6027913960400191505060405180910390fd5b600083118015614ad15750600082115b614b26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061532c6023913960400191505060405180910390fd5b6000614b3e6103e8614b3886886150f9565b906150f9565b90506000614b526103e5614b3886896149f5565b9050614b696001828481614b6257fe5b049061517f565b9695505050505050565b6000808411614be357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537761704c6962726172793a20494e53554646494349454e545f414d4f554e54604482015290519081900360640190fd5b600083118015614bf35750600082115b614c48576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061532c6023913960400191505060405180910390fd5b82614c5385846150f9565b81614c5a57fe5b04949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415614d0157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537761704c6962726172793a204944454e544943414c5f414444524553534553604482015290519081900360640190fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610614d3b578284614d3e565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216614dc557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f537761704c6962726172793a205a45524f5f4144445245535300000000000000604482015290519081900360640190fd5b9250929050565b600080600073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e6a439058a8a6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015614e8c57600080fd5b505afa158015614ea0573d6000803e3d6000fd5b505050506040513d6020811015614eb657600080fd5b505173ffffffffffffffffffffffffffffffffffffffff161415614fa8577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c9c6539689896040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015614f7b57600080fd5b505af1158015614f8f573d6000803e3d6000fd5b505050506040513d6020811015614fa557600080fd5b50505b600080614fd67f00000000000000000000000000000000000000000000000000000000000000008b8b6151f1565b91509150816000148015614fe8575080155b15614ff8578793508692506150ec565b6000615005898484614b73565b90508781116150725785811015615067576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806153036029913960400191505060405180910390fd5b8894509250826150ea565b600061507f898486614b73565b90508981111561508b57fe5b878110156150e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806152da6029913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806151145750508082028282828161511157fe5b04145b61139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f536166654d6174683a204d756c204f766572666c6f7700000000000000000000604482015290519081900360640190fd5b8181018181101561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f536166654d6174683a20416464204f766572666c6f7700000000000000000000604482015290519081900360640190fd5b60008060006152008585614c63565b509050600080615211888888613fbe565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561525657600080fd5b505afa15801561526a573d6000803e3d6000fd5b505050506040513d606081101561528057600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff878116908416146152c75780826152ca565b81815b9099909850965050505050505056fe417262737761702073776170526f757465723a20494e53554646494349454e545f415f414d4f554e54417262737761702073776170526f757465723a20494e53554646494349454e545f425f414d4f554e54537761704c6962726172793a20494e53554646494349454e545f4c4951554944495459417262737761702073776170526f757465723a204558434553534956455f494e5055545f414d4f554e54537761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54537761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54417262737761702073776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45445472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a26469706673582212200fb9c47092c3c66c1cb627cf5531f879a0bb1dcb4ab2089828dc3930cc4aa18c64736f6c634300060c0033000000000000000000000000f6239423fcf1c19ed2791d9648a90836074242fd000000000000000000000000722e8bdd2ce80a4422e880164f2079488e115365

Deployed Bytecode

0x60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610c71578063f305d71914610cfe578063fb3bdb4114610d51576101d5565b8063c45a015514610b25578063d06ca61f14610b3a578063ded9382a14610bf1576101d5565b8063af2979eb116100b0578063af2979eb146109c8578063b6f9de9514610a28578063baa2abde14610abb576101d5565b80638803dbee146108af578063ad5c464814610954578063ad615dec14610992576101d5565b80634a25d94a11610138578063791ac94711610112578063791ac947146107415780637ff36ab5146107e657806385f8c25914610879576101d5565b80634a25d94a146105775780635b0d59841461061c5780635c11d7951461069c576101d5565b80631f00ca74116101695780631f00ca74146103905780632195995c1461044757806338ed1739146104d2576101d5565b806302751cec146101da578063054d50d41461025357806318cbafe51461029b576101d5565b366101d5573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000722e8bdd2ce80a4422e880164f2079488e11536516146101d357fe5b005b600080fd5b3480156101e657600080fd5b5061023a600480360360c08110156101fd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135610de4565b6040805192835260208301919091528051918290030190f35b34801561025f57600080fd5b506102896004803603606081101561027657600080fd5b5080359060208101359060400135610f37565b60408051918252519081900360200190f35b3480156102a757600080fd5b50610340600480360360a08110156102be57600080fd5b8135916020810135918101906060810160408201356401000000008111156102e557600080fd5b8201836020820111156102f757600080fd5b8035906020019184602083028401116401000000008311171561031957600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135610f4c565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561037c578181015183820152602001610364565b505050509050019250505060405180910390f35b34801561039c57600080fd5b50610340600480360360408110156103b357600080fd5b813591908101906040810160208201356401000000008111156103d557600080fd5b8201836020820111156103e757600080fd5b8035906020019184602083028401116401000000008311171561040957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611364945050505050565b34801561045357600080fd5b5061023a600480360361016081101561046b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561139a565b3480156104de57600080fd5b50610340600480360360a08110156104f557600080fd5b81359160208101359181019060608101604082013564010000000081111561051c57600080fd5b82018360208201111561052e57600080fd5b8035906020019184602083028401116401000000008311171561055057600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356114d8565b34801561058357600080fd5b50610340600480360360a081101561059a57600080fd5b8135916020810135918101906060810160408201356401000000008111156105c157600080fd5b8201836020820111156105d357600080fd5b803590602001918460208302840111640100000000831117156105f557600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611669565b34801561062857600080fd5b50610289600480360361014081101561064057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356118ac565b3480156106a857600080fd5b506101d3600480360360a08110156106bf57600080fd5b8135916020810135918101906060810160408201356401000000008111156106e657600080fd5b8201836020820111156106f857600080fd5b8035906020019184602083028401116401000000008311171561071a57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356119fe565b34801561074d57600080fd5b506101d3600480360360a081101561076457600080fd5b81359160208101359181019060608101604082013564010000000081111561078b57600080fd5b82018360208201111561079d57600080fd5b803590602001918460208302840111640100000000831117156107bf57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611d65565b610340600480360360808110156107fc57600080fd5b8135919081019060408101602082013564010000000081111561081e57600080fd5b82018360208201111561083057600080fd5b8035906020019184602083028401116401000000008311171561085257600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356120cc565b34801561088557600080fd5b506102896004803603606081101561089c57600080fd5b50803590602081013590604001356124d6565b3480156108bb57600080fd5b50610340600480360360a08110156108d257600080fd5b8135916020810135918101906060810160408201356401000000008111156108f957600080fd5b82018360208201111561090b57600080fd5b8035906020019184602083028401116401000000008311171561092d57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356124e3565b34801561096057600080fd5b50610969612622565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561099e57600080fd5b50610289600480360360608110156109b557600080fd5b5080359060208101359060400135612646565b3480156109d457600080fd5b50610289600480360360c08110156109eb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135612653565b6101d360048036036080811015610a3e57600080fd5b81359190810190604081016020820135640100000000811115610a6057600080fd5b820183602082011115610a7257600080fd5b80359060200191846020830284011164010000000083111715610a9457600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff813516906020013561282c565b348015610ac757600080fd5b5061023a600480360360e0811015610ade57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612ccd565b348015610b3157600080fd5b50610969612fd7565b348015610b4657600080fd5b5061034060048036036040811015610b5d57600080fd5b81359190810190604081016020820135640100000000811115610b7f57600080fd5b820183602082011115610b9157600080fd5b80359060200191846020830284011164010000000083111715610bb357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612ffb945050505050565b348015610bfd57600080fd5b5061023a6004803603610140811015610c1557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135613028565b348015610c7d57600080fd5b50610ce06004803603610100811015610c9557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613180565b60408051938452602084019290925282820152519081900360600190f35b610ce0600480360360c0811015610d1457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356132f9565b61034060048036036080811015610d6757600080fd5b81359190810190604081016020820135640100000000811115610d8957600080fd5b820183602082011115610d9b57600080fd5b80359060200191846020830284011164010000000083111715610dbd57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356135f9565b6000808242811015610e5757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f417262737761702073776170526f757465723a20455850495245440000000000604482015290519081900360640190fd5b610e86897f000000000000000000000000722e8bdd2ce80a4422e880164f2079488e1153658a8a8a308a612ccd565b9093509150610e96898685613a32565b7f000000000000000000000000722e8bdd2ce80a4422e880164f2079488e11536573ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f0957600080fd5b505af1158015610f1d573d6000803e3d6000fd5b50505050610f2b8583613c0f565b50965096945050505050565b6000610f44848484613d4c565b949350505050565b60608142811015610fbe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f417262737761702073776170526f757465723a20455850495245440000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000722e8bdd2ce80a4422e880164f2079488e1153651686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061102357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f417262737761702073776170526f757465723a20494e56414c49445f50415448604482015290519081900360640190fd5b6111207f000000000000000000000000f6239423fcf1c19ed2791d9648a90836074242fd89888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613e5892505050565b9150868260018451038151811061113357fe5b60200260200101511015611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806153c6602e913960400191505060405180910390fd5b611257868660008181106111a257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff163361123d7f000000000000000000000000f6239423fcf1c19ed2791d9648a90836074242fd8a8a60008181106111f157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b600181811061121b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16613fbe565b8560008151811061124a57fe5b60200260200101516140a9565b61129682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614279915050565b7f000000000000000000000000722e8bdd2ce80a4422e880164f2079488e11536573ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836001855103815181106112e257fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561132057600080fd5b505af1158015611334573d6000803e3d6000fd5b50505050611359848360018551038151811061134c57fe5b6020026020010151613c0f565b509695505050505050565b60606113917f000000000000000000000000f6239423fcf1c19ed2791d9648a90836074242fd84846144ea565b90505b92915050565b60008060006113ca7f000000000000000000000000f6239423fcf1c19ed2791d9648a90836074242fd8f8f613fbe565b90506000876113d9578c6113fb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561149757600080fd5b505af11580156114ab573d6000803e3d6000fd5b505050506114be8f8f8f8f8f8f8f612ccd565b809450819550505050509b509b9950505050505050505050565b6060814281101561154a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f417262737761702073776170526f757465723a20455850495245440000000000604482015290519081900360640190fd5b6115a87f000000000000000000000000f6239423fcf1c19ed2791d9648a90836074242fd89888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613e5892505050565b915086826001845103815181106115bb57fe5b6020026020010151101561161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806153c6602e913960400191505060405180910390fd5b61162a868660008181106111a257fe5b61135982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614279915050565b606081428110156116db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f417262737761702073776170526f757465723a20455850495245440000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000722e8bdd2ce80a4422e880164f2079488e1153651686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061174057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117df57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f417262737761702073776170526f757465723a20494e56414c49445f50415448604482015290519081900360640190fd5b61183d7f000000000000000000000000f6239423fcf1c19ed2791d9648a90836074242fd898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506144ea92505050565b9150868260008151811061184d57fe5b60200260200101511115611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061534f602a913960400191505060405180910390fd5b6000806118fa7f000000000000000000000000f6239423fcf1c19ed2791d9648a90836074242fd8d7f000000000000000000000000722e8bdd2ce80a4422e880164f2079488e115365613fbe565b9050600086611909578b61192b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c48101879052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156119c757600080fd5b505af11580156119db573d6000803e3d6000fd5b505050506119ed8d8d8d8d8d8d612653565b9d9c50505050505050505050505050565b8042811015611a6e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f417262737761702073776170526f757465723a20455850495245440000000000604482015290519081900360640190fd5b611afd85856000818110611a7e57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1633611af77f000000000000000000000000f6239423fcf1c19ed2791d9648a90836074242fd89896000818110611acd57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a600181811061121b57fe5b8a6140a9565b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611b2d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611bb057600080fd5b505afa158015611bc4573d6000803e3d6000fd5b505050506040513d6020811015611bda57600080fd5b50516040805160208881028281018201909352888252929350611c1c929091899189918291850190849080828437600092019190915250889250614678915050565b86611d048288887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611c4f57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cd257600080fd5b505afa158015611ce6573d6000803e3d6000fd5b505050506040513d6020811015611cfc57600080fd5b5051906149f5565b1015611d5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806153c6602e913960400191505060405180910390fd5b5050505050505050565b8042811015611dd557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f417262737761702073776170526f757465723a20455850495245440000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000722e8bdd2ce80a4422e880164f2079488e1153651685857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611e3a57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ed957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f417262737761702073776170526f757465723a20494e56414c49445f50415448604482015290519081900360640190fd5b611ee985856000818110611a7e57fe5b611f27858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614678915050565b60007f000000000000000000000000722e8bdd2ce80a4422e880164f2079488e11536573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611fb057600080fd5b505afa158015611fc4573d6000803e3d6000fd5b505050506040513d6020811015611fda57600080fd5b5051905086811015612037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806153c6602e913960400191505060405180910390fd5b7f000000000000000000000000722e8bdd2ce80a4422e880164f2079488e11536573ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156120aa57600080fd5b505af11580156120be573d6000803e3d6000fd5b50505050611d5b8482613c0f565b6060814281101561213e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f417262737761702073776170526f757465723a20455850495245440000000000604482015290519081900360640190fd5b7f000000000000000000000000722e8bdd2ce80a4422e880164f2079488e11536573ffffffffffffffffffffffffffffffffffffffff168686600081811061218257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461222157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f417262737761702073776170526f757465723a20494e56414c49445f50415448604482015290519081900360640190fd5b61227f7f000000000000000000000000f6239423fcf1c19ed2791d9648a90836074242fd34888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613e5892505050565b9150868260018451038151811061229257fe5b602002602001015110156122f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806153c6602e913960400191505060405180910390fd5b7f000000000000000000000000722e8bdd2ce80a4422e880164f2079488e11536573ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061233a57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561236d57600080fd5b505af1158015612381573d6000803e3d6000fd5b50505050507f000000000000000000000000722e8bdd2ce80a4422e880164f2079488e11536573ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6123f37f000000000000000000000000f6239423fcf1c19ed2791d9648a90836074242fd89896000818110611acd57fe5b8460008151811061240057fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561245b57600080fd5b505af115801561246f573d6000803e3d6000fd5b505050506040513d602081101561248557600080fd5b505161248d57fe5b6124cc82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614279915050565b5095945050505050565b6000610f44848484614a67565b6060814281101561255557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f417262737761702073776170526f757465723a20455850495245440000000000604482015290519081900360640190fd5b6125b37f000000000000000000000000f6239423fcf1c19ed2791d9648a90836074242fd898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506144ea92505050565b915086826000815181106125c357fe5b6020026020010151111561161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061534f602a913960400191505060405180910390fd5b7f000000000000000000000000722e8bdd2ce80a4422e880164f2079488e11536581565b6000610f44848484614b73565b600081428110156126c557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f417262737761702073776170526f757465723a20455850495245440000000000604482015290519081900360640190fd5b6126f4887f000000000000000000000000722e8bdd2ce80a4422e880164f2079488e1153658989893089612ccd565b90508092505061279788858a73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561276657600080fd5b505afa15801561277a573d6000803e3d6000fd5b505050506040513d602081101561279057600080fd5b5051613a32565b7f000000000000000000000000722e8bdd2ce80a4422e880164f2079488e11536573ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561280a57600080fd5b505af115801561281e573d6000803e3d6000fd5b505050506113598483613c0f565b804281101561289c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f417262737761702073776170526f757465723a20455850495245440000000000604482015290519081900360640190fd5b7f000000000000000000000000722e8bdd2ce80a4422e880164f2079488e11536573ffffffffffffffffffffffffffffffffffffffff16858560008181106128e057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461297f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f417262737761702073776170526f757465723a20494e56414c49445f50415448604482015290519081900360640190fd5b60003490507f000000000000000000000000722e8bdd2ce80a4422e880164f2079488e11536573ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156129ec57600080fd5b505af1158015612a00573d6000803e3d6000fd5b50505050507f000000000000000000000000722e8bdd2ce80a4422e880164f2079488e11536573ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612a727f000000000000000000000000f6239423fcf1c19ed2791d9648a90836074242fd89896000818110611acd57fe5b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612ac657600080fd5b505af1158015612ada573d6000803e3d6000fd5b505050506040513d6020811015612af057600080fd5b5051612af857fe5b600086867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612b2857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612bab57600080fd5b505afa158015612bbf573d6000803e3d6000fd5b505050506040513d6020811015612bd557600080fd5b50516040805160208981028281018201909352898252929350612c179290918a918a918291850190849080828437600092019190915250899250614678915050565b87611d048289897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612c4a57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cd257600080fd5b6000808242811015612d4057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f417262737761702073776170526f757465723a20455850495245440000000000604482015290519081900360640190fd5b6000612d6d7f000000000000000000000000f6239423fcf1c19ed2791d9648a90836074242fd8c8c613fbe565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015612dee57600080fd5b505af1158015612e02573d6000803e3d6000fd5b505050506040513d6020811015612e1857600080fd5b5050604080517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612e8b57600080fd5b505af1158015612e9f573d6000803e3d6000fd5b505050506040513d6040811015612eb557600080fd5b50805160209091015190925090506000612ecf8e8e614c63565b5090508073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614612f0c578183612f0f565b82825b90975095508a871015612f6d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806152da6029913960400191505060405180910390fd5b89861015612fc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806153036029913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000f6239423fcf1c19ed2791d9648a90836074242fd81565b60606113917f000000000000000000000000f6239423fcf1c19ed2791d9648a90836074242fd8484613e58565b60008060006130787f000000000000000000000000f6239423fcf1c19ed2791d9648a90836074242fd8e7f000000000000000000000000722e8bdd2ce80a4422e880164f2079488e115365613fbe565b9050600087613087578c6130a9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561314557600080fd5b505af1158015613159573d6000803e3d6000fd5b5050505061316b8e8e8e8e8e8e610de4565b909f909e509c50505050505050505050505050565b600080600083428110156131f557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f417262737761702073776170526f757465723a20455850495245440000000000604482015290519081900360640190fd5b6132038c8c8c8c8c8c614dcc565b909450925060006132357f000000000000000000000000f6239423fcf1c19ed2791d9648a90836074242fd8e8e613fbe565b90506132438d3383886140a9565b61324f8c3383876140a9565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156132b857600080fd5b505af11580156132cc573d6000803e3d6000fd5b505050506040513d60208110156132e257600080fd5b5051949d939c50939a509198505050505050505050565b6000806000834281101561336e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f417262737761702073776170526f757465723a20455850495245440000000000604482015290519081900360640190fd5b61339c8a7f000000000000000000000000722e8bdd2ce80a4422e880164f2079488e1153658b348c8c614dcc565b909450925060006133ee7f000000000000000000000000f6239423fcf1c19ed2791d9648a90836074242fd8c7f000000000000000000000000722e8bdd2ce80a4422e880164f2079488e115365613fbe565b90506133fc8b3383886140a9565b7f000000000000000000000000722e8bdd2ce80a4422e880164f2079488e11536573ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561346457600080fd5b505af1158015613478573d6000803e3d6000fd5b50505050507f000000000000000000000000722e8bdd2ce80a4422e880164f2079488e11536573ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561350e57600080fd5b505af1158015613522573d6000803e3d6000fd5b505050506040513d602081101561353857600080fd5b505161354057fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156135a957600080fd5b505af11580156135bd573d6000803e3d6000fd5b505050506040513d60208110156135d357600080fd5b50519250348410156135eb576135eb33853403613c0f565b505096509650969350505050565b6060814281101561366b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f417262737761702073776170526f757465723a20455850495245440000000000604482015290519081900360640190fd5b7f000000000000000000000000722e8bdd2ce80a4422e880164f2079488e11536573ffffffffffffffffffffffffffffffffffffffff16868660008181106136af57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461374e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f417262737761702073776170526f757465723a20494e56414c49445f50415448604482015290519081900360640190fd5b6137ac7f000000000000000000000000f6239423fcf1c19ed2791d9648a90836074242fd888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506144ea92505050565b915034826000815181106137bc57fe5b6020026020010151111561381b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061534f602a913960400191505060405180910390fd5b7f000000000000000000000000722e8bdd2ce80a4422e880164f2079488e11536573ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061386457fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561389757600080fd5b505af11580156138ab573d6000803e3d6000fd5b50505050507f000000000000000000000000722e8bdd2ce80a4422e880164f2079488e11536573ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61391d7f000000000000000000000000f6239423fcf1c19ed2791d9648a90836074242fd89896000818110611acd57fe5b8460008151811061392a57fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561398557600080fd5b505af1158015613999573d6000803e3d6000fd5b505050506040513d60208110156139af57600080fd5b50516139b757fe5b6139f682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614279915050565b81600081518110613a0357fe5b60200260200101513411156124cc576124cc3383600081518110613a2357fe5b60200260200101513403613c0f565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310613b0857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613acb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613b6a576040519150601f19603f3d011682016040523d82523d6000602084013e613b6f565b606091505b5091509150818015613b9d575080511580613b9d5750808060200190516020811015613b9a57600080fd5b50515b613c0857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310613c8657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613c49565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613ce8576040519150601f19603f3d011682016040523d82523d6000602084013e613ced565b606091505b5050905080613d47576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806153f46023913960400191505060405180910390fd5b505050565b6000808411613da6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806153796026913960400191505060405180910390fd5b600083118015613db65750600082115b613e0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061532c6023913960400191505060405180910390fd5b6000613e19856103e56150f9565b90506000613e2782856150f9565b90506000613e4183613e3b886103e86150f9565b9061517f565b9050808281613e4c57fe5b04979650505050505050565b6060600282511015613ecb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f537761704c6962726172793a20494e56414c49445f5041544800000000000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613ee357600080fd5b50604051908082528060200260200182016040528015613f0d578160200160208202803683370190505b5090508281600081518110613f1e57fe5b60200260200101818152505060005b6001835103811015613fb657600080613f7087868581518110613f4c57fe5b6020026020010151878660010181518110613f6357fe5b60200260200101516151f1565b91509150613f92848481518110613f8357fe5b60200260200101518383613d4c565b848460010181518110613fa157fe5b60209081029190910101525050600101613f2d565b509392505050565b6000806000613fcd8585614c63565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f70b19cf85a176c6b86e2d324be179104bdc8fafee13d548ae07d28b9f53cbc71609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b6020831061418757805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161414a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146141e9576040519150601f19603f3d011682016040523d82523d6000602084013e6141ee565b606091505b509150915081801561421c57508051158061421c575080806020019051602081101561421957600080fd5b50515b614271576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806154176024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156144e45760008084838151811061429757fe5b60200260200101518584600101815181106142ae57fe5b60200260200101519150915060006142c68383614c63565b50905060008785600101815181106142da57fe5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161461432257826000614326565b6000835b91509150600060028a5103881061433d578861437e565b61437e7f000000000000000000000000f6239423fcf1c19ed2791d9648a90836074242fd878c8b6002018151811061437157fe5b6020026020010151613fbe565b90506143ab7f000000000000000000000000f6239423fcf1c19ed2791d9648a90836074242fd8888613fbe565b73ffffffffffffffffffffffffffffffffffffffff1663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156143f5576020820181803683370190505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561446a578181015183820152602001614452565b50505050905090810190601f1680156144975780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156144b957600080fd5b505af11580156144cd573d6000803e3d6000fd5b50506001909901985061427c975050505050505050565b50505050565b606060028251101561455d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f537761704c6962726172793a20494e56414c49445f5041544800000000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561457557600080fd5b5060405190808252806020026020018201604052801561459f578160200160208202803683370190505b50905082816001835103815181106145b357fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b8015613fb657600080614613878660018603815181106145ff57fe5b6020026020010151878681518110613f6357fe5b9150915061463584848151811061462657fe5b60200260200101518383614a67565b84600185038151811061464457fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016145e3565b60005b6001835103811015613d475760008084838151811061469657fe5b60200260200101518584600101815181106146ad57fe5b60200260200101519150915060006146c58383614c63565b50905060006146f57f000000000000000000000000f6239423fcf1c19ed2791d9648a90836074242fd8585613fbe565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561474357600080fd5b505afa158015614757573d6000803e3d6000fd5b505050506040513d606081101561476d57600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905060008073ffffffffffffffffffffffffffffffffffffffff8a8116908916146147b75782846147ba565b83835b91509150614829828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cd257600080fd5b9550614836868383613d4c565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461487a5782600061487e565b6000835b91509150600060028c51038a10614895578a6148c9565b6148c97f000000000000000000000000f6239423fcf1c19ed2791d9648a90836074242fd898e8d6002018151811061437157fe5b60408051600080825260208201928390527f022c0d9f000000000000000000000000000000000000000000000000000000008352602482018781526044830187905273ffffffffffffffffffffffffffffffffffffffff8086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015614979578181015183820152602001614961565b50505050905090810190601f1680156149a65780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156149c857600080fd5b505af11580156149dc573d6000803e3d6000fd5b50506001909b019a5061467b9950505050505050505050565b8082038281111561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f536166654d6174683a20556e646572666c6f7700000000000000000000000000604482015290519081900360640190fd5b6000808411614ac1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061539f6027913960400191505060405180910390fd5b600083118015614ad15750600082115b614b26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061532c6023913960400191505060405180910390fd5b6000614b3e6103e8614b3886886150f9565b906150f9565b90506000614b526103e5614b3886896149f5565b9050614b696001828481614b6257fe5b049061517f565b9695505050505050565b6000808411614be357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537761704c6962726172793a20494e53554646494349454e545f414d4f554e54604482015290519081900360640190fd5b600083118015614bf35750600082115b614c48576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061532c6023913960400191505060405180910390fd5b82614c5385846150f9565b81614c5a57fe5b04949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415614d0157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537761704c6962726172793a204944454e544943414c5f414444524553534553604482015290519081900360640190fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610614d3b578284614d3e565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216614dc557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f537761704c6962726172793a205a45524f5f4144445245535300000000000000604482015290519081900360640190fd5b9250929050565b600080600073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000f6239423fcf1c19ed2791d9648a90836074242fd73ffffffffffffffffffffffffffffffffffffffff1663e6a439058a8a6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015614e8c57600080fd5b505afa158015614ea0573d6000803e3d6000fd5b505050506040513d6020811015614eb657600080fd5b505173ffffffffffffffffffffffffffffffffffffffff161415614fa8577f000000000000000000000000f6239423fcf1c19ed2791d9648a90836074242fd73ffffffffffffffffffffffffffffffffffffffff1663c9c6539689896040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015614f7b57600080fd5b505af1158015614f8f573d6000803e3d6000fd5b505050506040513d6020811015614fa557600080fd5b50505b600080614fd67f000000000000000000000000f6239423fcf1c19ed2791d9648a90836074242fd8b8b6151f1565b91509150816000148015614fe8575080155b15614ff8578793508692506150ec565b6000615005898484614b73565b90508781116150725785811015615067576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806153036029913960400191505060405180910390fd5b8894509250826150ea565b600061507f898486614b73565b90508981111561508b57fe5b878110156150e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806152da6029913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806151145750508082028282828161511157fe5b04145b61139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f536166654d6174683a204d756c204f766572666c6f7700000000000000000000604482015290519081900360640190fd5b8181018181101561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f536166654d6174683a20416464204f766572666c6f7700000000000000000000604482015290519081900360640190fd5b60008060006152008585614c63565b509050600080615211888888613fbe565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561525657600080fd5b505afa15801561526a573d6000803e3d6000fd5b505050506040513d606081101561528057600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff878116908416146152c75780826152ca565b81815b9099909850965050505050505056fe417262737761702073776170526f757465723a20494e53554646494349454e545f415f414d4f554e54417262737761702073776170526f757465723a20494e53554646494349454e545f425f414d4f554e54537761704c6962726172793a20494e53554646494349454e545f4c4951554944495459417262737761702073776170526f757465723a204558434553534956455f494e5055545f414d4f554e54537761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54537761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54417262737761702073776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45445472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a26469706673582212200fb9c47092c3c66c1cb627cf5531f879a0bb1dcb4ab2089828dc3930cc4aa18c64736f6c634300060c0033

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

000000000000000000000000f6239423fcf1c19ed2791d9648a90836074242fd000000000000000000000000722e8bdd2ce80a4422e880164f2079488e115365

-----Decoded View---------------
Arg [0] : _factory (address): 0xf6239423FcF1c19ED2791D9648A90836074242Fd
Arg [1] : _WETH (address): 0x722E8BdD2ce80A4422E880164f2079488e115365

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000f6239423fcf1c19ed2791d9648a90836074242fd
Arg [1] : 000000000000000000000000722e8bdd2ce80a4422e880164f2079488e115365


Deployed ByteCode Sourcemap

16835:18350:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17306:10;:18;17320:4;17306:18;;17299:26;;;;16835:18350;;;;;21403:673;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21403:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;34149:257;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34149:257:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;28500:846;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28500:846:0;-1:-1:-1;28500:846:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34934:248;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34934:248:0;;-1:-1:-1;34934:248:0;;-1:-1:-1;;;;;34934:248:0:i;22082:667::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22082:667:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25739:621::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25739:621:0;-1:-1:-1;25739:621:0;;;;;;;;;:::i;27670:824::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27670:824:0;-1:-1:-1;27670:824:0;;;;;;;;;:::i;24199:708::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24199:708:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31495:712::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31495:712:0;-1:-1:-1;31495:712:0;;;;;;;;;:::i;33070:844::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33070:844:0;-1:-1:-1;33070:844:0;;;;;;;;;:::i;26971:693::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26971:693:0;-1:-1:-1;26971:693:0;;;;;;;;;:::i;34414:256::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34414:256:0;;;;;;;;;;;;:::i;26366:599::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26366:599:0;-1:-1:-1;26366:599:0;;;;;;;;;:::i;16957:38::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33958:183;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33958:183:0;;;;;;;;;;;;:::i;23493:700::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23493:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32213:851::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32213:851:0;-1:-1:-1;32213:851:0;;;;;;;;;:::i;20546:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20546:851:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16909:41::-;;;;;;;;;;;;;:::i;34678:248::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34678:248:0;;-1:-1:-1;34678:248:0;;-1:-1:-1;;;;;34678:248:0:i;22755:659::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22755:659:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18805:728::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18805:728:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;19539:964;;;;;;;;;;;;;;;;-1:-1:-1;19539:964:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29352:806::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29352:806:0;-1:-1:-1;29352:806:0;;;;;;;;;:::i;21403:673::-;21640:16;21658:14;21621:8;17066:15;17054:8;:27;;17046:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21712:196:::1;21742:5;21762:4;21781:9;21805:14;21834:12;21869:4;21889:8;21712:15;:196::i;:::-;21685:223:::0;;-1:-1:-1;21685:223:0;-1:-1:-1;21919:51:0::1;21947:5:::0;21954:2;21685:223;21919:27:::1;:51::i;:::-;21987:4;21981:20;;;22002:9;21981:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22023:45;22054:2;22058:9;22023:30;:45::i;:::-;21403:673:::0;;;;;;;;;;:::o;34149:257::-;34302:14;34341:57;34366:8;34376:9;34387:10;34341:24;:57::i;:::-;34334:64;34149:257;-1:-1:-1;;;;34149:257:0:o;28500:846::-;28714:21;28686:8;17066:15;17054:8;:27;;17046:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28761:29:::1;28786:4;28761:29;:4:::0;;28766:15;;;28761:21;;::::1;;;;;;;;;;;;;:29;;;28753:74;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28848:50;28874:7;28883:8;28893:4;;28848:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;28848:25:0::1;::::0;-1:-1:-1;;;28848:50:0:i:1;:::-;28838:60;;28948:12;28917:7;28942:1;28925:7;:14;:18;28917:27;;;;;;;;;;;;;;:43;;28909:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29022:136;29068:4;;29073:1;29068:7;;;;;;;;;;;;;;;29077:10;29089:46;29109:7;29118:4;;29123:1;29118:7;;;;;;;;;;;;;;;29127:4;;29132:1;29127:7;;;;;;;;;;;;;;;29089:19;:46::i;:::-;29137:7;29145:1;29137:10;;;;;;;;;;;;;;29022:31;:136::i;:::-;29169:35;29175:7;29184:4;;29169:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29198:4:0::1;::::0;-1:-1:-1;29169:5:0::1;::::0;-1:-1:-1;;29169:35:0:i:1;:::-;29221:4;29215:20;;;29236:7;29261:1;29244:7;:14;:18;29236:27;;;;;;;;;;;;;;29215:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29275:63;29306:2;29310:7;29335:1;29318:7;:14;:18;29310:27;;;;;;;;;;;;;;29275:30;:63::i;:::-;28500:846:::0;;;;;;;;;:::o;34934:248::-;35078:21;35124:50;35149:7;35158:9;35169:4;35124:24;:50::i;:::-;35117:57;;34934:248;;;;;:::o;22082:667::-;22388:12;22402;22427;22442:44;22462:7;22471:6;22479;22442:19;:44::i;:::-;22427:59;;22497:10;22510;:33;;22534:9;22510:33;;;22528:2;22510:33;22554:75;;;;;;22577:10;22554:75;;;;22597:4;22554:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22497:46;;-1:-1:-1;22554:22:0;;;;;;:75;;;;;-1:-1:-1;;22554:75:0;;;;;;;;-1:-1:-1;22554:22:0;:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22661:80;22677:6;22685;22693:9;22704:10;22716;22728:2;22732:8;22661:15;:80::i;:::-;22640:101;;;;;;;;22082:667;;;;;;;;;;;;;;;;:::o;25739:621::-;25963:21;25944:8;17066:15;17054:8;:27;;17046:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26007:50:::1;26033:7;26042:8;26052:4;;26007:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;26007:25:0::1;::::0;-1:-1:-1;;;26007:50:0:i:1;:::-;25997:60;;26107:12;26076:7;26101:1;26084:7;:14;:18;26076:27;;;;;;;;;;;;;;:43;;26068:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26181:136;26227:4;;26232:1;26227:7;;;;;;26181:136;26328:24;26334:7;26343:4;;26328:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;26349:2:0;;-1:-1:-1;26328:5:0::1;::::0;-1:-1:-1;;26328:24:0:i:1;27670:824::-:0;27884:21;27856:8;17066:15;17054:8;:27;;17046:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27931:29:::1;27956:4;27931:29;:4:::0;;27936:15;;;27931:21;;::::1;;;;;;;;;;;;;:29;;;27923:74;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28018:50;28043:7;28052:9;28063:4;;28018:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;28018:24:0::1;::::0;-1:-1:-1;;;28018:50:0:i:1;:::-;28008:60;;28101:11;28087:7;28095:1;28087:10;;;;;;;;;;;;;;:25;;28079:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24199:708:::0;24517:14;24544:12;24559:41;24579:7;24588:5;24595:4;24559:19;:41::i;:::-;24544:56;;24611:10;24624;:33;;24648:9;24624:33;;;24642:2;24624:33;24668:75;;;;;;24691:10;24668:75;;;;24711:4;24668:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24611:46;;-1:-1:-1;24668:22:0;;;;;;:75;;;;;-1:-1:-1;;24668:75:0;;;;;;;;-1:-1:-1;24668:22:0;:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24766:133;24828:5;24835:9;24846:14;24862:12;24876:2;24880:8;24766:47;:133::i;:::-;24754:145;24199:708;-1:-1:-1;;;;;;;;;;;;;24199:708:0:o;31495:712::-;31729:8;17066:15;17054:8;:27;;17046:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31750:134:::1;31796:4;;31801:1;31796:7;;;;;;;;;;;;;;;31805:10;31817:46;31837:7;31846:4;;31851:1;31846:7;;;;;;;;;;;;;;;31855:4;;31860:1;31855:7;;;;;;31817:46;31865:8;31750:31;:134::i;:::-;31895:18;31923:4:::0;;31928:15;;;31923:21;;::::1;;;;;;;;;;;;;31916:39;;;31956:2;31916:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31916:43:0;31970:44:::1;::::0;;31916:43:::1;31970:44:::0;;::::1;::::0;;;;;;;;;;;31916:43;;-1:-1:-1;31970:44:0::1;::::0;;;32005:4;;;;;;31970:44;::::1;::::0;32005:4;;31970:44;32005:4;31970:44;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;32011:2:0;;-1:-1:-1;31970:34:0::1;::::0;-1:-1:-1;;31970:44:0:i:1;:::-;32113:12:::0;32047:62:::1;32095:13:::0;32054:4;;32059:15;;;32054:21;;::::1;;;;;;;;;;;;;32047:39;;;32087:2;32047:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32047:43:0;;:47:::1;:62::i;:::-;:78;;32025:174;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17124:1;31495:712:::0;;;;;;;:::o;33070:844::-;33337:8;17066:15;17054:8;:27;;17046:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33371:29:::1;33396:4;33371:29;:4:::0;;33376:15;;;33371:21;;::::1;;;;;;;;;;;;;:29;;;33363:74;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;33448:134;33494:4;;33499:1;33494:7;;;;;;33448:134;33593:55;33628:4;;33593:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;33642:4:0::1;::::0;-1:-1:-1;33593:34:0::1;::::0;-1:-1:-1;;33593:55:0:i:1;:::-;33659:14;33683:4;33676:22;;;33707:4;33676:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;33676:37:0;;-1:-1:-1;33732:25:0;;::::1;;33724:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33825:4;33819:20;;;33840:9;33819:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33861:45;33892:2;33896:9;33861:30;:45::i;26971:693::-:0;27187:21;27159:8;17066:15;17054:8;:27;;17046:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27245:4:::1;27234:15;;:4;;27239:1;27234:7;;;;;;;;;;;;;;;:15;;;27226:60;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27307:51;27333:7;27342:9;27353:4;;27307:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27307:25:0::1;::::0;-1:-1:-1;;;27307:51:0:i:1;:::-;27297:61;;27408:12;27377:7;27402:1;27385:7;:14;:18;27377:27;;;;;;;;;;;;;;:43;;27369:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27488:4;27482:19;;;27509:7;27517:1;27509:10;;;;;;;;;;;;;;27482:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;27546:4;27540:20;;;27561:46;27581:7;27590:4;;27595:1;27590:7;;;;;;27561:46;27609:7;27617:1;27609:10;;;;;;;;;;;;;;27540:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;27540:80:0;27533:88:::1;;;;27632:24;27638:7;27647:4;;27632:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27653:2:0;;-1:-1:-1;27632:5:0::1;::::0;-1:-1:-1;;27632:24:0:i:1;:::-;26971:693:::0;;;;;;;;:::o;34414:256::-;34567:13;34605:57;34629:9;34640;34651:10;34605:23;:57::i;26366:599::-;26590:21;26571:8;17066:15;17054:8;:27;;17046:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26634:50:::1;26659:7;26668:9;26679:4;;26634:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;26634:24:0::1;::::0;-1:-1:-1;;;26634:50:0:i:1;:::-;26624:60;;26717:11;26703:7;26711:1;26703:10;;;;;;;;;;;;;;:25;;26695:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16957:38:::0;;;:::o;33958:183::-;34055:12;34087:46;34105:7;34114:8;34124;34087:17;:46::i;23493:700::-;23759:14;23740:8;17066:15;17054:8;:27;;17046:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23802:196:::1;23832:5;23852:4;23871:9;23895:14;23924:12;23959:4;23979:8;23802:15;:196::i;:::-;23786:212;;;;;;24009:78;24037:5;24044:2;24055:5;24048:23;;;24080:4;24048:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;24048:38:0;24009:27:::1;:78::i;:::-;24104:4;24098:20;;;24119:9;24098:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24140:45;24171:2;24175:9;24140:30;:45::i;32213:851::-:0;32473:8;17066:15;17054:8;:27;;17046:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32518:4:::1;32507:15;;:4;;32512:1;32507:7;;;;;;;;;;;;;;;:15;;;32499:60;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;32570:13;32586:9;32570:25;;32612:4;32606:19;;;32633:8;32606:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;32668:4;32662:20;;;32683:46;32703:7;32712:4;;32717:1;32712:7;;;;;;32683:46;32731:8;32662:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32662:78:0;32655:86:::1;;;;32752:18;32780:4:::0;;32785:15;;;32780:21;;::::1;;;;;;;;;;;;;32773:39;;;32813:2;32773:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32773:43:0;32827:44:::1;::::0;;32773:43:::1;32827:44:::0;;::::1;::::0;;;;;;;;;;;32773:43;;-1:-1:-1;32827:44:0::1;::::0;;;32862:4;;;;;;32827:44;::::1;::::0;32862:4;;32827:44;32862:4;32827:44;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;32868:2:0;;-1:-1:-1;32827:34:0::1;::::0;-1:-1:-1;;32827:44:0:i:1;:::-;32970:12:::0;32904:62:::1;32952:13:::0;32911:4;;32916:15;;;32911:21;;::::1;;;;;;;;;;;;;32904:39;;;32944:2;32904:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;20546:851:::0;20800:12;20814;20781:8;17066:15;17054:8;:27;;17046:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20839:12:::1;20854:44;20874:7;20883:6;20891;20854:19;:44::i;:::-;20909:57;::::0;;;;;20938:10:::1;20909:57;::::0;::::1;::::0;:28:::1;::::0;::::1;:57:::0;;;;;;;;;;;;;;20839:59;;-1:-1:-1;20909:28:0;;::::1;::::0;:57;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20909:28:0;:57;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;21034:24:0::1;::::0;;;;;:20:::1;:24:::0;;::::1;;::::0;::::1;::::0;;;21004:12:::1;::::0;;;21034:20;;::::1;::::0;::::1;::::0;:24;;;;;;;;;;;21004:12;21034:20;:24;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;21034:24:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;21034:24:0;-1:-1:-1;21070:14:0::1;21089:38;21112:6:::0;21120;21089:22:::1;:38::i;:::-;21069:58;;;21169:6;21159:16;;:6;:16;;;:58;;21200:7;21209;21159:58;;;21179:7;21188;21159:58;21138:79:::0;;-1:-1:-1;21138:79:0;-1:-1:-1;21236:21:0;;::::1;;21228:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21333:10;21322:7;:21;;21314:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17124:1;;;;20546:851:::0;;;;;;;;;;;:::o;16909:41::-;;;:::o;34678:248::-;34822:21;34868:50;34894:7;34903:8;34913:4;34868:25;:50::i;22755:659::-;23044:16;23062:14;23089:12;23104:41;23124:7;23133:5;23140:4;23104:19;:41::i;:::-;23089:56;;23156:10;23169;:33;;23193:9;23169:33;;;23187:2;23169:33;23213:75;;;;;;23236:10;23213:75;;;;23256:4;23213:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23156:46;;-1:-1:-1;23213:22:0;;;;;;:75;;;;;-1:-1:-1;;23213:75:0;;;;;;;;-1:-1:-1;23213:22:0;:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23326:80;23345:5;23352:9;23363:14;23379:12;23393:2;23397:8;23326:18;:80::i;:::-;23299:107;;;;-1:-1:-1;22755:659:0;-1:-1:-1;;;;;;;;;;;;;22755:659:0:o;18805:728::-;19093:12;19107;19121:14;19074:8;17066:15;17054:8;:27;;17046:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19169:85:::1;19183:6;19191;19199:14;19215;19231:10;19243;19169:13;:85::i;:::-;19148:106:::0;;-1:-1:-1;19148:106:0;-1:-1:-1;19265:12:0::1;19280:44;19300:7;19309:6:::0;19317;19280:19:::1;:44::i;:::-;19265:59;;19335:66;19367:6;19375:10;19387:4;19393:7;19335:31;:66::i;:::-;19412;19444:6;19452:10;19464:4;19470:7;19412:31;:66::i;:::-;19511:4;19501:20;;;19522:2;19501:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19501:24:0;18805:728;;;;-1:-1:-1;19501:24:0;;-1:-1:-1;18805:728:0;;-1:-1:-1;;;;;;;;;18805:728:0:o;19539:964::-;19792:16;19810:14;19826;19773:8;17066:15;17054:8;:27;;17046:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19880:176:::1;19908:5;19928:4;19947:18;19980:9;20004:14;20033:12;19880:13;:176::i;:::-;19853:203:::0;;-1:-1:-1;19853:203:0;-1:-1:-1;20067:12:0::1;20082:41;20102:7;20111:5:::0;20118:4:::1;20082:19;:41::i;:::-;20067:56;;20134:69;20166:5;20173:10;20185:4;20191:11;20134:31;:69::i;:::-;20220:4;20214:19;;;20241:9;20214:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;20277:4;20271:20;;;20292:4;20298:9;20271:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;20271:37:0;20264:45:::1;;;;20342:4;20332:20;;;20353:2;20332:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;20332:24:0;;-1:-1:-1;20407:9:0::1;:21:::0;-1:-1:-1;20403:92:0::1;;;20430:65;20461:10;20485:9;20473;:21;20430:30;:65::i;:::-;17124:1;19539:964:::0;;;;;;;;;;;:::o;29352:806::-;29565:21;29537:8;17066:15;17054:8;:27;;17046:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29623:4:::1;29612:15;;:4;;29617:1;29612:7;;;;;;;;;;;;;;;:15;;;29604:60;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;29685:50;29710:7;29719:9;29730:4;;29685:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29685:24:0::1;::::0;-1:-1:-1;;;29685:50:0:i:1;:::-;29675:60;;29768:9;29754:7;29762:1;29754:10;;;;;;;;;;;;;;:23;;29746:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29841:4;29835:19;;;29862:7;29870:1;29862:10;;;;;;;;;;;;;;29835:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;29899:4;29893:20;;;29914:46;29934:7;29943:4;;29948:1;29943:7;;;;;;29914:46;29962:7;29970:1;29962:10;;;;;;;;;;;;;;29893:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;29893:80:0;29886:88:::1;;;;29985:24;29991:7;30000:4;;29985:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;30006:2:0;;-1:-1:-1;29985:5:0::1;::::0;-1:-1:-1;;29985:24:0:i:1;:::-;30072:7;30080:1;30072:10;;;;;;;;;;;;;;30060:9;:22;30056:94;;;30084:66;30115:10;30139:7;30147:1;30139:10;;;;;;;;;;;;;;30127:9;:22;30084:30;:66::i;8774:361::-:0;8969:45;;;8958:10;8969:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8958:57;;;;8923:12;;8937:17;;8958:10;;;;8969:45;8958:57;;;8969:45;8958:57;;8969:45;8958:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8922:93;;;;9034:7;:57;;;;-1:-1:-1;9046:11:0;;:16;;:44;;;9077:4;9066:24;;;;;;;;;;;;;;;-1:-1:-1;9066:24:0;9046:44;9026:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8774:361;;;;;:::o;9553:195::-;9661:12;;;9623;9661;;;;;;;;;9640:7;;;;9654:5;;9640:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9622:52;;;9693:7;9685:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9553:195;;;:::o;5892:507::-;5985:14;6031:1;6020:8;:12;6012:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6106:1;6094:9;:13;:31;;;;;6124:1;6111:10;:14;6094:31;6086:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6176:20;6199:17;:8;6212:3;6199:12;:17::i;:::-;6176:40;-1:-1:-1;6227:14:0;6244:31;6176:40;6264:10;6244:19;:31::i;:::-;6227:48;-1:-1:-1;6286:16:0;6305:40;6329:15;6305:19;:9;6319:4;6305:13;:19::i;:::-;:23;;:40::i;:::-;6286:59;;6380:11;6368:9;:23;;;;;;;5892:507;-1:-1:-1;;;;;;;5892:507:0:o;7064:506::-;7165:21;7222:1;7207:4;:11;:16;;7199:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7285:4;:11;7274:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7274:23:0;;7264:33;;7321:8;7308:7;7316:1;7308:10;;;;;;;;;;;;;:21;;;;;7345:6;7340:223;7371:1;7357:4;:11;:15;7353:1;:19;7340:223;;;7395:14;7411:15;7430:42;7442:7;7451:4;7456:1;7451:7;;;;;;;;;;;;;;7460:4;7465:1;7469;7465:5;7460:11;;;;;;;;;;;;;;7430;:42::i;:::-;7394:78;;;;7504:47;7517:7;7525:1;7517:10;;;;;;;;;;;;;;7529:9;7540:10;7504:12;:47::i;:::-;7487:7;7495:1;7499;7495:5;7487:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;7374:3:0;;7340:223;;;;7064:506;;;;;:::o;4424:478::-;4513:12;4539:14;4555;4573:26;4584:6;4592;4573:10;:26::i;:::-;4737:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4727:43;;;;;;4640:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4630:262;;;;;;;;;4424:478;-1:-1:-1;;;;;4424:478:0:o;9143:402::-;9368:51;;;9357:10;9368:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9357:63;;;;9322:12;;9336:17;;9357:10;;;;9368:51;9357:63;;;9368:51;9357:63;;9368:51;9357:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9321:99;;;;9439:7;:57;;;;-1:-1:-1;9451:11:0;;:16;;:44;;;9482:4;9471:24;;;;;;;;;;;;;;;-1:-1:-1;9471:24:0;9451:44;9431:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9143:402;;;;;;:::o;25018:715::-;25125:6;25120:606;25151:1;25137:4;:11;:15;25133:1;:19;25120:606;;;25175:13;25190:14;25209:4;25214:1;25209:7;;;;;;;;;;;;;;25218:4;25223:1;25227;25223:5;25218:11;;;;;;;;;;;;;;25174:56;;;;25246:14;25265:37;25288:5;25295:6;25265:22;:37::i;:::-;25245:57;;;25317:14;25334:7;25342:1;25346;25342:5;25334:14;;;;;;;;;;;;;;25317:31;;25364:15;25381;25409:6;25400:15;;:5;:15;;;:61;;25442:9;25458:1;25400:61;;;25424:1;25428:9;25400:61;25363:98;;;;25476:10;25507:1;25493:4;:11;:15;25489:1;:19;:77;;25563:3;25489:77;;;25511:49;25531:7;25540:6;25548:4;25553:1;25557;25553:5;25548:11;;;;;;;;;;;;;;25511:19;:49::i;:::-;25476:90;;25591:43;25611:7;25620:5;25627:6;25591:19;:43::i;:::-;25581:59;;;25659:10;25671;25683:2;25697:1;25687:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25687:12:0;;25581:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25154:3:0;;;;;-1:-1:-1;25120:606:0;;-1:-1:-1;;;;;;;;25120:606:0;;;25018:715;;;:::o;7651:527::-;7752:21;7809:1;7794:4;:11;:16;;7786:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7872:4;:11;7861:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7861:23:0;;7851:33;;7925:9;7895:7;7920:1;7903:7;:14;:18;7895:27;;;;;;;;;;;;;;;;;:39;7959:11;;:15;;7945:226;7976:5;;7945:226;;8004:14;8020:15;8039:42;8051:7;8060:4;8069:1;8065;:5;8060:11;;;;;;;;;;;;;;8073:4;8078:1;8073:7;;;;;;;8039:42;8003:78;;;;8113:46;8125:7;8133:1;8125:10;;;;;;;;;;;;;;8137:9;8148:10;8113:11;:46::i;:::-;8096:7;8108:1;8104;:5;8096:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;7983:3:0;;7945:226;;30305:1184;30418:6;30413:1069;30444:1;30430:4;:11;:15;30426:1;:19;30413:1069;;;30468:13;30483:14;30502:4;30507:1;30502:7;;;;;;;;;;;;;;30511:4;30516:1;30520;30516:5;30511:11;;;;;;;;;;;;;;30467:56;;;;30539:14;30558:37;30581:5;30588:6;30558:22;:37::i;:::-;30538:57;;;30610:14;30637:43;30657:7;30666:5;30673:6;30637:19;:43::i;:::-;30610:71;;30696:16;30727:17;30815:13;30830;30848:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30848:18:0;;;;;;;30814:52;;;;;-1:-1:-1;30814:52:0;;-1:-1:-1;30882:17:0;;30923:15;;;;;;;;:61;;30965:8;30975;30923:61;;;30942:8;30952;30923:61;30881:103;;;;31013:56;31056:12;31020:5;31013:23;;;31045:4;31013:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:56;30999:70;;31099:66;31124:11;31137:12;31151:13;31099:24;:66::i;:::-;31084:81;;30413:1069;;;;31196:15;31213;31241:6;31232:15;;:5;:15;;;:67;;31277:12;31296:1;31232:67;;;31256:1;31260:12;31232:67;31195:104;;;;31314:10;31345:1;31331:4;:11;:15;31327:1;:19;:77;;31401:3;31327:77;;;31349:49;31369:7;31378:6;31386:4;31391:1;31395;31391:5;31386:11;;;;;;;31349:49;31457:12;;;31467:1;31457:12;;;;;;;;;;31419:51;;;;;;;;;;;;;;;:9;:51;;;;;;;;;;;;;;;;;;;;;;31314:90;;-1:-1:-1;31419:9:0;;;;;;31429:10;;31441;;31314:90;;31457:12;;31419:51;;;;;;;;31457:12;;31419:51;;;;31457:12;;31419:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30447:3:0;;;;;-1:-1:-1;30413:1069:0;;-1:-1:-1;;;;;;;;;;30413:1069:0;3036:120;3119:5;;;3114:16;;;;3106:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6520:462;6613:13;6659:1;6647:9;:13;6639:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6735:1;6723:9;:13;:31;;;;;6753:1;6740:10;:14;6723:31;6715:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6805:14;6822:34;6851:4;6822:24;:9;6836;6822:13;:24::i;:::-;:28;;:34::i;:::-;6805:51;-1:-1:-1;6867:16:0;6886:34;6916:3;6886:25;:10;6901:9;6886:14;:25::i;:34::-;6867:53;;6942:32;6972:1;6955:11;6943:9;:23;;;;;;;6942:29;:32::i;:::-;6931:43;6520:462;-1:-1:-1;;;;;;6520:462:0:o;5459:311::-;5541:12;5584:1;5574:7;:11;5566:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5652:1;5641:8;:12;:28;;;;;5668:1;5657:8;:12;5641:28;5633:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5754:8;5730:21;:7;5742:8;5730:11;:21::i;:::-;:32;;;;;;;5459:311;-1:-1:-1;;;;5459:311:0:o;3993:339::-;4068:14;4084;4129:6;4119:16;;:6;:16;;;;4111:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4211:6;4202:15;;:6;:15;;;:53;;4240:6;4248;4202:53;;;4221:6;4229;4202:53;4183:72;;-1:-1:-1;4183:72:0;-1:-1:-1;4274:20:0;;;4266:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3993:339;;;;;:::o;17428:1371::-;17646:12;17660;17798:1;17741:59;;17754:7;17741:29;;;17771:6;17779;17741:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17741:45:0;:59;;;17737:140;;;17830:7;17817:32;;;17850:6;17858;17817:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17737:140:0;17888:13;17903;17920:48;17944:7;17953:6;17961;17920:23;:48::i;:::-;17887:81;;;;17983:8;17995:1;17983:13;:30;;;;-1:-1:-1;18000:13:0;;17983:30;17979:813;;;18052:14;;-1:-1:-1;18068:14:0;;-1:-1:-1;17979:813:0;;;18116:19;18138:53;18156:14;18172:8;18182;18138:17;:53::i;:::-;18116:75;;18228:14;18210;:32;18206:575;;18289:10;18271:14;:28;;18263:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18386:14;;-1:-1:-1;18402:14:0;-1:-1:-1;18402:14:0;18206:575;;;18458:19;18480:53;18498:14;18514:8;18524;18480:17;:53::i;:::-;18458:75;;18577:14;18559;:32;;18552:40;;;;18637:10;18619:14;:28;;18611:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18734:14;-1:-1:-1;18750:14:0;;-1:-1:-1;18206:575:0;17979:813;;17428:1371;;;;;;;;;;;:::o;3162:135::-;3220:9;3240:6;;;:28;;-1:-1:-1;;3255:5:0;;;3267:1;3262;3255:5;3262:1;3250:13;;;;;:18;3240:28;3232:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2907:123;2990:5;;;2985:16;;;;2977:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4960:386;5053:13;5068;5095:14;5114:26;5125:6;5133;5114:10;:26::i;:::-;5094:46;;;5152:13;5167;5195:32;5203:7;5212:6;5220;5195:7;:32::i;:::-;5185:55;;;:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5185:57:0;;;;;;;5151:91;;;;;-1:-1:-1;5151:91:0;;-1:-1:-1;5276:16:0;;;;;;;;:62;;5319:8;5329;5276:62;;;5296:8;5306;5276:62;5253:85;;;;-1:-1:-1;4960:386:0;-1:-1:-1;;;;;;;4960:386:0:o

Metadata Hash

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