Contract 0xc8a45dd787a301c38ad33f692f0d41c18590ef94 15

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xf6718c8a2d1efe581427bdd91bc214c216e696efbecafaa7fcf124a361c80ff3Any Swap Out Und...103420462023-09-23 11:01:355 days 23 hrs ago0x32f12cb8a23e76291abc74c6bb6df1e0aef1cb7b IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.2211902795020
0x4f2bfd5bc40ff9120be4f468bb5cd107d6c70289e32678031d1a31dfc445c982Any Swap Out Und...103267822023-09-22 11:07:466 days 23 hrs agoCronos ID Name borabora.cro IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.238799693919 4,659.324395531
0x58c9aeef4e13cb62350e4fab270371b6985edcb632017b79c00259026b208c0cAny Swap Out Und...103240222023-09-22 6:48:407 days 3 hrs ago0x5a512913d3dea32f6a5a702d3c65d9d495e38ef8 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.2438111294580
0xfacc6f2e9a4f794b2ecd4cfa0bb3ed3c12f17b6da2bded79e09cbb75b84b6950Any Swap Out Und...102267742023-09-15 22:33:3113 days 11 hrs ago0x403fccb7b634a497867badfb87c8d5a19e54e477 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.2682617775260
0xc71d4a3ebb2ac20b180a9a832721e684381fd67a75ff99176d8a4bd46297d90cAny Swap Out Und...100272942023-09-02 22:24:3826 days 12 hrs ago0xc0f6f8db2deb1797d849401ca73255ae4862b82a IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.2687844302240
0x17010744d0d88e2b32600eb46c9f55e07580e4bac335eacbd035ab2a6e4a7ec0Any Swap Out Und...100136522023-09-02 1:04:2327 days 9 hrs ago0x93b82c49c2af67797977ae344c07884164e6a592 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.262131154173 4,673.569287068
0xe8987193de12aeb908daae6d0e5c5cc0d09ec96bd5add0e89fe04ed48d437941Any Swap Out Und...100001042023-09-01 3:50:3128 days 6 hrs ago0x4e73199cec5d87faf869f7736694fb8f076f9bc7 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.262053399283 4,674.183063707
0x7e5ff106919d60581c69110ef6af81e36a0548396392abd5cedfb0b25e516e23Any Swap Out Und...99966172023-08-31 22:22:3328 days 12 hrs ago0x0ad2c869930083dfeaec584fe45a850e3826cdba IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.222063960339 4,674.341893601
0x7d1f3420f3f990299365145d9efcc70f5016acbf5c5cdd6c0a02566a6e3ec655Any Swap Out Und...99209932023-08-26 23:54:4033 days 10 hrs ago0xc7798b37c323a1af4b5e4f51f498492b0013eae6 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.261146784596 4,990.288444644
0x09049593ddae271a2c17f55dc26e1dc7d5a28f2d5ce9f59618b6ccd063234d64Withdraw Native99101422023-08-26 6:54:5534 days 3 hrs ago0xd122b76aa4adac51b56b1a308bb6556cd9262532 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.818437345370
0xbe1914a1fecfdb76280a8da3751b10f6af7da4785fb8bdcc5361370a6ca7ae89Any Swap Out Und...99010722023-08-25 16:42:0334 days 17 hrs ago0x9afdaa1f9db537108d165aedc271087e11d0b34c IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.262306578007 4,678.698951334
0x3292eabb923739d0ff520610709bcc6ddc911b5303c3db949641803de2347083Any Swap Out Und...98990262023-08-25 13:29:4834 days 21 hrs ago0xd122b76aa4adac51b56b1a308bb6556cd9262532 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.2446551131960
0xfe43be47a57b0fef19e4fcf6a6c34db26023eb8eeffd7e30371f96038fe464feAny Swap Out Und...98981422023-08-25 12:06:4934 days 22 hrs ago0xdf543fcd9aa4cfff886707fd27fa9f60716604d2 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.2448256029030
0xf793d637f4a600d228d47914c2976cd3f5afcd5be15d8f72c1f60703e1e25578Any Swap Out Und...98433442023-08-21 22:19:0038 days 12 hrs ago0xf028bf33e1faf606a7b20ef5c39c71544978665a IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.217569734096 4,681.335185833
0x00f1f8cd559cbb3b33f0b9cdd385c13257ac04fe9821daff15a884f9e3ee0dbeAny Swap Out Und...98406512023-08-21 18:05:4738 days 16 hrs ago0x41b82b7ce8466d66f4b3806fcde173e47b234be1 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.24487302859 4,681.458095294
0x73f4046e293924f642a449494517dc7fc9c600ee255e71b92caf04eea5824b99Any Swap Out Und...97566272023-08-16 6:29:0744 days 4 hrs ago0xe516311a72d25984ca6662b0f4a2a7b1e648ead7 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.262675356876 4,685.276770763
0x765de8e55b744c46d7c7e26a9a683b0cdaae0613db22b5baa0fc664d438588e6Any Swap Out Und...96972032023-08-12 9:30:1748 days 1 hr ago0xb65d18b91d401224dcf2b072d30c29bc8398463c IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.262883817093 4,687.991602352
0x2d0462a8ef4dea86648179dd7e3f02cd06c03d079e30395b903821ded55c8950Any Swap Out Und...96574192023-08-09 19:15:1250 days 15 hrs ago0xe6ba219e5675ca2231854dc0314ea8f2e9b2c04f IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.245309625268 4,689.804906968
0x78cd32bda25e3ac0a0e83a9af4506650205d983c932df070ebd6fd88e99a2119Any Swap Out Und...96565572023-08-09 17:54:1450 days 16 hrs ago0x52ddb14a9874fdbab07a7c664f2aa4c79186cab3 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.262931425444 4,689.844203856
0xe1fd97efef146f2fc96e0e6224e8290ac3cc55454191f2fd74ff6658fe3aaa04Any Swap Out Und...96516802023-08-09 10:16:0551 days 15 mins ago0xa2e1c184beee56cda42b18224a1c0a6e60a03510 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.234672149331 4,690.066139002
0x291f2c97c8a2d2aba6f2c1e572b4d5f4bbdc1877f32de35e5a6e38ee83f09b19Any Swap Out Und...96388632023-08-08 14:12:4051 days 20 hrs ago0x36f14e9982add589ab2bd8484f292e9003b74704 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.262976433423 4,690.647000281
0xfab413b43c91b208bc32107c55a1a00a9a2b4f3504704b4845c96a8b9da842b0Any Swap Out Und...96386952023-08-08 13:56:5251 days 20 hrs ago0x2b00263a737956cfa821a1fd8fe1c55006fb70b8 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.2454444325850
0x5fc81dbeb42c84b9f95c1a996fac9cc4241bc6ad250c0e07adbb9c85844e0c59Any Swap Out Und...96009432023-08-06 2:51:1454 days 7 hrs ago0x9a43ee39b64afddcec3fad2e03115c556eebe528 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.3182103262720
0xf09aea08b4296ca2cdcb2d70f16d93cf09099baa3583c63da42435d991699f47Any Swap Out Und...95744212023-08-04 9:21:0556 days 1 hr ago0xc905ed94a9910910a11737401a350462974cae4e IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.263141089381 4,693.583928746
0x2821a1d27b3cbb72ee838c9ce731244e2653d69dc4a44ac7af9e96436822a8eaAny Swap Out Und...95130812023-07-31 9:21:5260 days 1 hr ago0x4f9d5c664fb9368f129bf1888174b44a7bc1b191 IN  0xc8a45dd787a301c38ad33f692f0d41c18590ef940 CRO0.245653608881 4,696.381151316
[ Download CSV Export 
Parent Txn Hash Block From To Value
Index Block
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AnyswapV6Router

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-08-11
*/

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

pragma solidity >=0.8.2;

interface ISushiswapV2Pair {
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
}

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

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

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

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

library SushiswapV2Library {
    using SafeMathSushiswap 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, 'SushiswapV2Library: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'SushiswapV2Library: 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(uint160(uint256(keccak256(abi.encodePacked(
                hex'ff',
                factory,
                keccak256(abi.encodePacked(token0, token1)),
                hex'e18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303' // init code hash
            )))));
    }

    // fetches and sorts the reserves for a pair
    function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) {
        (address token0,) = sortTokens(tokenA, tokenB);
        (uint reserve0, uint reserve1,) = ISushiswapV2Pair(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, 'SushiswapV2Library: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'SushiswapV2Library: 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, 'SushiswapV2Library: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'SushiswapV2Library: 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, 'SushiswapV2Library: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'SushiswapV2Library: 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, 'SushiswapV2Library: 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, 'SushiswapV2Library: 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);
        }
    }
}

// helper methods for interacting with ERC20 tokens and sending NATIVE 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 safeTransferNative(address to, uint value) internal {
        (bool success,) = to.call{value:value}(new bytes(0));
        require(success, 'TransferHelper: NATIVE_TRANSFER_FAILED');
    }
}

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

interface AnyswapV1ERC20 {
    function mint(address to, uint256 amount) external returns (bool);
    function burn(address from, uint256 amount) external returns (bool);
    function setMinter(address _auth) external;
    function applyMinter() external;
    function revokeMinter(address _auth) external;
    function changeVault(address newVault) external returns (bool);
    function depositVault(uint amount, address to) external returns (uint);
    function withdrawVault(address from, uint amount, address to) external returns (uint);
    function underlying() external view returns (address);
    function deposit(uint amount, address to) external returns (uint);
    function withdraw(uint amount, address to) external returns (uint);
}

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != 0x0 && codehash != accountHash);
    }
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint value) internal {
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
    function callOptionalReturn(IERC20 token, bytes memory data) private {
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

contract AnyswapV6Router {
    using SafeERC20 for IERC20;
    using SafeMathSushiswap for uint;

    address public immutable factory;
    address public immutable wNATIVE;

    bool public enableSwapTrade;
    modifier swapTradeEnabled() {
        require(enableSwapTrade, 'AnyswapV6Router: SwapTrade disabled');
        _;
    }

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

    constructor(address _factory, address _wNATIVE, address _mpc) {
        _newMPC = _mpc;
        _newMPCEffectiveTime = block.timestamp;
        factory = _factory;
        wNATIVE = _wNATIVE;
    }

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

    address private _oldMPC;
    address private _newMPC;
    uint256 private _newMPCEffectiveTime;


    event LogChangeMPC(address indexed oldMPC, address indexed newMPC, uint indexed effectiveTime, uint chainID);
    event LogChangeRouter(address indexed oldRouter, address indexed newRouter, uint chainID);
    event LogAnySwapIn(bytes32 indexed txhash, address indexed token, address indexed to, uint amount, uint fromChainID, uint toChainID);
    event LogAnySwapOut(address indexed token, address indexed from, address indexed to, uint amount, uint fromChainID, uint toChainID);
    event LogAnySwapOut(address indexed token, address indexed from, string to, uint amount, uint fromChainID, uint toChainID);
    event LogAnySwapTradeTokensForTokens(address[] path, address indexed from, address indexed to, uint amountIn, uint amountOutMin, uint fromChainID, uint toChainID);
    event LogAnySwapTradeTokensForNative(address[] path, address indexed from, address indexed to, uint amountIn, uint amountOutMin, uint fromChainID, uint toChainID);

    modifier onlyMPC() {
        require(msg.sender == mpc(), "AnyswapV3Router: FORBIDDEN");
        _;
    }

    function mpc() public view returns (address) {
        if (block.timestamp >= _newMPCEffectiveTime) {
            return _newMPC;
        }
        return _oldMPC;
    }

    function cID() public view returns (uint id) {
        assembly {id := chainid()}
    }

    function setEnableSwapTrade(bool enable) external onlyMPC {
        enableSwapTrade = enable;
    }

    function changeMPC(address newMPC) public onlyMPC returns (bool) {
        require(newMPC != address(0), "AnyswapV3Router: address(0x0)");
        _oldMPC = mpc();
        _newMPC = newMPC;
        _newMPCEffectiveTime = block.timestamp + 2*24*3600;
        emit LogChangeMPC(_oldMPC, _newMPC, _newMPCEffectiveTime, cID());
        return true;
    }

    function changeVault(address token, address newVault) public onlyMPC returns (bool) {
        require(newVault != address(0), "AnyswapV3Router: address(0x0)");
        return AnyswapV1ERC20(token).changeVault(newVault);
    }

    function setMinter(address token, address _auth) external onlyMPC {
        return AnyswapV1ERC20(token).setMinter(_auth);
    }

    function applyMinter(address token) external onlyMPC {
        return AnyswapV1ERC20(token).applyMinter();
    }

    function revokeMinter(address token, address _auth) external onlyMPC {
        return AnyswapV1ERC20(token).revokeMinter(_auth);
    }

    function _anySwapOut(address from, address token, address to, uint amount, uint toChainID) internal {
        AnyswapV1ERC20(token).burn(from, amount);
        emit LogAnySwapOut(token, from, to, amount, cID(), toChainID);
    }

    // Swaps `amount` `token` from this chain to `toChainID` chain with recipient `to`
    function anySwapOut(address token, address to, uint amount, uint toChainID) external {
        _anySwapOut(msg.sender, token, to, amount, toChainID);
    }

    // Swaps `amount` `token` from this chain to `toChainID` chain with recipient `to` by minting with `underlying`
    function anySwapOutUnderlying(address token, address to, uint amount, uint toChainID) external {
        IERC20(AnyswapV1ERC20(token).underlying()).safeTransferFrom(msg.sender, token, amount);
        emit LogAnySwapOut(token, msg.sender, to, amount, cID(), toChainID);
    }

    function anySwapOutNative(address token, address to, uint toChainID) external payable {
        require(AnyswapV1ERC20(token).underlying() == wNATIVE, "AnyswapV3Router: underlying is not wNATIVE");
        IwNATIVE(wNATIVE).deposit{value: msg.value}();
        assert(IwNATIVE(wNATIVE).transfer(token, msg.value));
        emit LogAnySwapOut(token, msg.sender, to, msg.value, cID(), toChainID);
    }

    function anySwapOut(address[] calldata tokens, address[] calldata to, uint[] calldata amounts, uint[] calldata toChainIDs) external {
        for (uint i = 0; i < tokens.length; i++) {
            _anySwapOut(msg.sender, tokens[i], to[i], amounts[i], toChainIDs[i]);
        }
    }

    function anySwapOut(address token, string memory to, uint amount, uint toChainID) external {
        AnyswapV1ERC20(token).burn(msg.sender, amount);
        emit LogAnySwapOut(token, msg.sender, to, amount, cID(), toChainID);
    }

    function anySwapOutUnderlying(address token, string memory to, uint amount, uint toChainID) external {
        IERC20(AnyswapV1ERC20(token).underlying()).safeTransferFrom(msg.sender, token, amount);
        emit LogAnySwapOut(token, msg.sender, to, amount, cID(), toChainID);
    }

    function anySwapOutNative(address token, string memory to, uint toChainID) external payable {
        require(AnyswapV1ERC20(token).underlying() == wNATIVE, "AnyswapV3Router: underlying is not wNATIVE");
        IwNATIVE(wNATIVE).deposit{value: msg.value}();
        assert(IwNATIVE(wNATIVE).transfer(token, msg.value));
        emit LogAnySwapOut(token, msg.sender, to, msg.value, cID(), toChainID);
    }

    // swaps `amount` `token` in `fromChainID` to `to` on this chainID
    function _anySwapIn(bytes32 txs, address token, address to, uint amount, uint fromChainID) internal {
        AnyswapV1ERC20(token).mint(to, amount);
        emit LogAnySwapIn(txs, token, to, amount, fromChainID, cID());
    }

    // swaps `amount` `token` in `fromChainID` to `to` on this chainID
    // triggered by `anySwapOut`
    function anySwapIn(bytes32 txs, address token, address to, uint amount, uint fromChainID) external onlyMPC {
        _anySwapIn(txs, token, to, amount, fromChainID);
    }

    // swaps `amount` `token` in `fromChainID` to `to` on this chainID with `to` receiving `underlying`
    function anySwapInUnderlying(bytes32 txs, address token, address to, uint amount, uint fromChainID) external onlyMPC {
        _anySwapIn(txs, token, to, amount, fromChainID);
        AnyswapV1ERC20(token).withdrawVault(to, amount, to);
    }

    // swaps `amount` `token` in `fromChainID` to `to` on this chainID with `to` receiving `underlying` if possible
    function anySwapInAuto(bytes32 txs, address token, address to, uint amount, uint fromChainID) external onlyMPC {
        _anySwapIn(txs, token, to, amount, fromChainID);
        AnyswapV1ERC20 _anyToken = AnyswapV1ERC20(token);
        address _underlying = _anyToken.underlying();
        if (_underlying != address(0) && IERC20(_underlying).balanceOf(token) >= amount) {
            if (_underlying == wNATIVE) {
                _anyToken.withdrawVault(to, amount, address(this));
                IwNATIVE(wNATIVE).withdraw(amount);
                TransferHelper.safeTransferNative(to, amount);
            } else {
                _anyToken.withdrawVault(to, amount, to);
            }
        }
    }

    function depositNative(address token, address to) external payable returns (uint) {
        require(AnyswapV1ERC20(token).underlying() == wNATIVE, "AnyswapV3Router: underlying is not wNATIVE");
        IwNATIVE(wNATIVE).deposit{value: msg.value}();
        assert(IwNATIVE(wNATIVE).transfer(token, msg.value));
        AnyswapV1ERC20(token).depositVault(msg.value, to);
        return msg.value;
    }

    function withdrawNative(address token, uint amount, address to) external returns (uint) {
        require(AnyswapV1ERC20(token).underlying() == wNATIVE, "AnyswapV3Router: underlying is not wNATIVE");
        AnyswapV1ERC20(token).withdrawVault(msg.sender, amount, address(this));
        IwNATIVE(wNATIVE).withdraw(amount);
        TransferHelper.safeTransferNative(to, amount);
        return amount;
    }

    // extracts mpc fee from bridge fees
    function anySwapFeeTo(address token, uint amount) external onlyMPC {
        address _mpc = mpc();
        AnyswapV1ERC20(token).mint(_mpc, amount);
        AnyswapV1ERC20(token).withdrawVault(_mpc, amount, _mpc);
    }

    function anySwapIn(bytes32[] calldata txs, address[] calldata tokens, address[] calldata to, uint256[] calldata amounts, uint[] calldata fromChainIDs) external onlyMPC {
        for (uint i = 0; i < tokens.length; i++) {
            _anySwapIn(txs[i], tokens[i], to[i], amounts[i], fromChainIDs[i]);
        }
    }

    // **** 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,) = SushiswapV2Library.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 ? SushiswapV2Library.pairFor(factory, output, path[i + 2]) : _to;
            ISushiswapV2Pair(SushiswapV2Library.pairFor(factory, input, output)).swap(
                amount0Out, amount1Out, to, new bytes(0)
            );
        }
    }

    // sets up a cross-chain trade from this chain to `toChainID` for `path` trades to `to`
    function anySwapOutExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint toChainID
    ) external virtual swapTradeEnabled ensure(deadline) {
        AnyswapV1ERC20(path[0]).burn(msg.sender, amountIn);
        emit LogAnySwapTradeTokensForTokens(path, msg.sender, to, amountIn, amountOutMin, cID(), toChainID);
    }

    // sets up a cross-chain trade from this chain to `toChainID` for `path` trades to `to`
    function anySwapOutExactTokensForTokensUnderlying(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint toChainID
    ) external virtual swapTradeEnabled ensure(deadline) {
        IERC20(AnyswapV1ERC20(path[0]).underlying()).safeTransferFrom(msg.sender, path[0], amountIn);
        AnyswapV1ERC20(path[0]).depositVault(amountIn, msg.sender);
        AnyswapV1ERC20(path[0]).burn(msg.sender, amountIn);
        emit LogAnySwapTradeTokensForTokens(path, msg.sender, to, amountIn, amountOutMin, cID(), toChainID);
    }

    // Swaps `amounts[path.length-1]` `path[path.length-1]` to `to` on this chain
    // Triggered by `anySwapOutExactTokensForTokens`
    function anySwapInExactTokensForTokens(
        bytes32 txs,
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint fromChainID
    ) external onlyMPC virtual swapTradeEnabled ensure(deadline) returns (uint[] memory amounts) {
        amounts = SushiswapV2Library.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'SushiswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        _anySwapIn(txs, path[0], SushiswapV2Library.pairFor(factory, path[0], path[1]), amounts[0], fromChainID);
        _swap(amounts, path, to);
    }

    // sets up a cross-chain trade from this chain to `toChainID` for `path` trades to `to`
    function anySwapOutExactTokensForNative(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint toChainID
    ) external virtual swapTradeEnabled ensure(deadline) {
        AnyswapV1ERC20(path[0]).burn(msg.sender, amountIn);
        emit LogAnySwapTradeTokensForNative(path, msg.sender, to, amountIn, amountOutMin, cID(), toChainID);
    }

    // sets up a cross-chain trade from this chain to `toChainID` for `path` trades to `to`
    function anySwapOutExactTokensForNativeUnderlying(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint toChainID
    ) external virtual swapTradeEnabled ensure(deadline) {
        IERC20(AnyswapV1ERC20(path[0]).underlying()).safeTransferFrom(msg.sender, path[0], amountIn);
        AnyswapV1ERC20(path[0]).depositVault(amountIn, msg.sender);
        AnyswapV1ERC20(path[0]).burn(msg.sender, amountIn);
        emit LogAnySwapTradeTokensForNative(path, msg.sender, to, amountIn, amountOutMin, cID(), toChainID);
    }

    // Swaps `amounts[path.length-1]` `path[path.length-1]` to `to` on this chain
    // Triggered by `anySwapOutExactTokensForNative`
    function anySwapInExactTokensForNative(
        bytes32 txs,
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint fromChainID
    ) external onlyMPC virtual swapTradeEnabled ensure(deadline) returns (uint[] memory amounts) {
        require(path[path.length - 1] == wNATIVE, 'AnyswapV3Router: INVALID_PATH');
        amounts = SushiswapV2Library.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'AnyswapV3Router: INSUFFICIENT_OUTPUT_AMOUNT');
        _anySwapIn(txs, path[0],  SushiswapV2Library.pairFor(factory, path[0], path[1]), amounts[0], fromChainID);
        _swap(amounts, path, address(this));
        IwNATIVE(wNATIVE).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferNative(to, amounts[amounts.length - 1]);
    }

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

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

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

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

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

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_wNATIVE","type":"address"},{"internalType":"address","name":"_mpc","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txhash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"LogAnySwapIn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"LogAnySwapOut","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"string","name":"to","type":"string"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"LogAnySwapOut","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"LogAnySwapTradeTokensForNative","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"LogAnySwapTradeTokensForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldMPC","type":"address"},{"indexed":true,"internalType":"address","name":"newMPC","type":"address"},{"indexed":true,"internalType":"uint256","name":"effectiveTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"chainID","type":"uint256"}],"name":"LogChangeMPC","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldRouter","type":"address"},{"indexed":true,"internalType":"address","name":"newRouter","type":"address"},{"indexed":false,"internalType":"uint256","name":"chainID","type":"uint256"}],"name":"LogChangeRouter","type":"event"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"anySwapFeeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"txs","type":"bytes32[]"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"fromChainIDs","type":"uint256[]"}],"name":"anySwapIn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txs","type":"bytes32"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fromChainID","type":"uint256"}],"name":"anySwapIn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txs","type":"bytes32"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fromChainID","type":"uint256"}],"name":"anySwapInAuto","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txs","type":"bytes32"},{"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"},{"internalType":"uint256","name":"fromChainID","type":"uint256"}],"name":"anySwapInExactTokensForNative","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txs","type":"bytes32"},{"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"},{"internalType":"uint256","name":"fromChainID","type":"uint256"}],"name":"anySwapInExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txs","type":"bytes32"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fromChainID","type":"uint256"}],"name":"anySwapInUnderlying","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"string","name":"to","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"toChainIDs","type":"uint256[]"}],"name":"anySwapOut","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"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutExactTokensForNative","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"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutExactTokensForNativeUnderlying","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"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutExactTokensForTokens","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"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutExactTokensForTokensUnderlying","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"string","name":"to","type":"string"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutNative","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutNative","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"string","name":"to","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutUnderlying","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutUnderlying","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"applyMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cID","outputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newMPC","type":"address"}],"name":"changeMPC","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"newVault","type":"address"}],"name":"changeVault","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"depositNative","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"enableSwapTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"name":"mpc","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"token","type":"address"},{"internalType":"address","name":"_auth","type":"address"}],"name":"revokeMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableSwapTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"_auth","type":"address"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wNATIVE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawNative","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040523480156200001157600080fd5b506040516200445338038062004453833981016040819052620000349162000081565b600180546001600160a01b0319166001600160a01b03928316179055426002559182166080521660a052620000cb565b80516001600160a01b03811681146200007c57600080fd5b919050565b6000806000606084860312156200009757600080fd5b620000a28462000064565b9250620000b26020850162000064565b9150620000c26040850162000064565b90509250925092565b60805160a0516142c16200019260003960008181610223015281816105590152818161084501528181610904015281816112590152818161144201528181611518015281816115ca0152818161165e01528181611afc01528181611bae01528181611c4201528181611d8a01528181611ec2015281816121680152818161221a01526122ae01526000818161060b01528181610c5801528181610e1f01528181610f37015281816113050152818161243c01528181612fe3015261303301526142c16000f3fe6080604052600436106102135760003560e01c8063825bb13c11610118578063ad615dec116100a0578063d8b9f6101161006f578063d8b9f6101461066d578063d9e35bb21461068d578063dcfb77b1146106ad578063edbdf5e2146106cd578063f75c2664146106ed57600080fd5b8063ad615dec146105d9578063c45a0155146105f9578063c604b0b81461062d578063d06ca61f1461064d57600080fd5b806387cc6e2f116100e757806387cc6e2f146105275780638fd903f51461054757806399a2f2d7146105935780639f122d6c146105a6578063a5e56571146105c657600080fd5b8063825bb13c146104a7578063832e9492146104c757806385f8c259146104e757806387bafe5f1461050757600080fd5b8063353cb3a81161019b578063540dd52c1161016a578063540dd52c146104215780635b7b018c1461043457806365782f56146104545780636a45397214610474578063701bb8911461049457600080fd5b8063353cb3a8146103975780633f88de89146103c1578063456862aa146103e157806352a397d51461040157600080fd5b80630bb57203116101e25780630bb57203146102ea5780631f00ca741461030a578063241dc2df1461033757806325121b76146103575780632fc1e7281461037757600080fd5b80630175b1c414610257578063049b4e7e14610277578063054d50d414610297578063085c6d5e146102ca57600080fd5b3661025257336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610250576102506136d5565b005b600080fd5b34801561026357600080fd5b50610250610272366004613700565b610702565b34801561028357600080fd5b50610250610292366004613809565b6109f3565b3480156102a357600080fd5b506102b76102b2366004613869565b610abb565b6040519081526020015b60405180910390f35b3480156102d657600080fd5b506102506102e53660046138a3565b610ad0565b3480156102f657600080fd5b5061025061030536600461390c565b610b1b565b34801561031657600080fd5b5061032a610325366004613989565b610c51565b6040516102c19190613a47565b34801561034357600080fd5b50610250610352366004613a8b565b610c87565b34801561036357600080fd5b50610250610372366004613ad1565b610c9a565b34801561038357600080fd5b5061032a610392366004613bc2565b610d9d565b3480156103a357600080fd5b506000546103b19060ff1681565b60405190151581526020016102c1565b3480156103cd57600080fd5b506102506103dc366004613700565b611018565b3480156103ed57600080fd5b506103b16103fc366004613c47565b6110d6565b34801561040d57600080fd5b5061032a61041c366004613bc2565b6111d2565b61025061042f366004613c80565b611516565b34801561044057600080fd5b506103b161044f366004613cd9565b611728565b34801561046057600080fd5b5061025061046f36600461390c565b61185f565b34801561048057600080fd5b5061025061048f36600461390c565b611974565b6102b76104a2366004613c47565b611af8565b3480156104b357600080fd5b506102506104c2366004613700565b611d3a565b3480156104d357600080fd5b506102b76104e2366004613cf6565b611d86565b3480156104f357600080fd5b506102b7610502366004613869565b611f38565b34801561051357600080fd5b50610250610522366004613c47565b611f45565b34801561053357600080fd5b50610250610542366004613d38565b611fd5565b34801561055357600080fd5b5061057b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102c1565b34801561059f57600080fd5b50466102b7565b3480156105b257600080fd5b506102506105c1366004613c47565b612100565b6102506105d4366004613d64565b612166565b3480156105e557600080fd5b506102b76105f4366004613869565b612382565b34801561060557600080fd5b5061057b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561063957600080fd5b50610250610648366004613809565b61238f565b34801561065957600080fd5b5061032a610668366004613989565b612435565b34801561067957600080fd5b5061025061068836600461390c565b612462565b34801561069957600080fd5b506102506106a8366004613cd9565b61256b565b3480156106b957600080fd5b506102506106c8366004613da5565b6125f5565b3480156106d957600080fd5b506102506106e8366004613a8b565b6126a6565b3480156106f957600080fd5b5061057b612742565b61070a612742565b6001600160a01b0316336001600160a01b0316146107435760405162461bcd60e51b815260040161073a90613e69565b60405180910390fd5b6107508585858585612772565b60008490506000816001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b99190613ea0565b90506001600160a01b0381161580159061083e57506040516370a0823160e01b81526001600160a01b0387811660048301528591908316906370a0823190602401602060405180830381865afa158015610817573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083b9190613ebd565b10155b156109ea577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03160361097757604051620e75bb60e21b81526001600160a01b038316906239d6ec906108aa90889088903090600401613ed6565b6020604051808303816000875af11580156108c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ed9190613ebd565b50604051632e1a7d4d60e01b8152600481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561095057600080fd5b505af1158015610964573d6000803e3d6000fd5b50505050610972858561284b565b6109ea565b604051620e75bb60e21b81526001600160a01b038316906239d6ec906109a590889088908290600401613ed6565b6020604051808303816000875af11580156109c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e89190613ebd565b505b50505050505050565b610a6c338584876001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5b9190613ea0565b6001600160a01b031692919061291c565b336001600160a01b0385167f409e0ad946b19f77602d6cf11d59e1796ddaa4828159a0b4fb7fa2ff6b161b798585465b86604051610aad9493929190613f51565b60405180910390a350505050565b6000610ac8848484612976565b949350505050565b610ad8612742565b6001600160a01b0316336001600160a01b031614610b085760405162461bcd60e51b815260040161073a90613e69565b6000805460ff1916911515919091179055565b60005460ff16610b3d5760405162461bcd60e51b815260040161073a90613f80565b8142811015610b5e5760405162461bcd60e51b815260040161073a90613fc3565b85856000818110610b7157610b71613ffa565b9050602002016020810190610b869190613cd9565b604051632770a7eb60e21b8152336004820152602481018a90526001600160a01b039190911690639dc29fac906044016020604051808303816000875af1158015610bd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf99190614010565b506001600160a01b038416337ffea6abdf4fd32f20966dff7619354cd82cd43dc78a3bee479f04c74dbfc585b388888c8c465b89604051610c3f9695949392919061402d565b60405180910390a35050505050505050565b6060610c7e7f00000000000000000000000000000000000000000000000000000000000000008484612a44565b90505b92915050565b610c943385858585612bda565b50505050565b610ca2612742565b6001600160a01b0316336001600160a01b031614610cd25760405162461bcd60e51b815260040161073a90613e69565b60005b87811015610d9057610d7e8b8b83818110610cf257610cf2613ffa565b905060200201358a8a84818110610d0b57610d0b613ffa565b9050602002016020810190610d209190613cd9565b898985818110610d3257610d32613ffa565b9050602002016020810190610d479190613cd9565b888886818110610d5957610d59613ffa565b90506020020135878787818110610d7257610d72613ffa565b90506020020135612772565b80610d88816140ad565b915050610cd5565b5050505050505050505050565b6060610da7612742565b6001600160a01b0316336001600160a01b031614610dd75760405162461bcd60e51b815260040161073a90613e69565b60005460ff16610df95760405162461bcd60e51b815260040161073a90613f80565b8242811015610e1a5760405162461bcd60e51b815260040161073a90613fc3565b610e787f00000000000000000000000000000000000000000000000000000000000000008a898980806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612cb192505050565b9150878260018451610e8a91906140c6565b81518110610e9a57610e9a613ffa565b60200260200101511015610f065760405162461bcd60e51b815260206004820152602d60248201527f5375736869737761705632526f757465723a20494e53554646494349454e545f60448201526c13d55514155517d05353d55395609a1b606482015260840161073a565b610fcc8a88886000818110610f1d57610f1d613ffa565b9050602002016020810190610f329190613cd9565b610fab7f00000000000000000000000000000000000000000000000000000000000000008b8b6000818110610f6957610f69613ffa565b9050602002016020810190610f7e9190613cd9565b8c8c6001818110610f9157610f91613ffa565b9050602002016020810190610fa69190613cd9565b612e27565b85600081518110610fbe57610fbe613ffa565b602002602001015187612772565b61100b828888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a9250612f00915050565b5098975050505050505050565b611020612742565b6001600160a01b0316336001600160a01b0316146110505760405162461bcd60e51b815260040161073a90613e69565b61105d8585858585612772565b604051620e75bb60e21b81526001600160a01b038516906239d6ec9061108b90869086908290600401613ed6565b6020604051808303816000875af11580156110aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ce9190613ebd565b505050505050565b60006110e0612742565b6001600160a01b0316336001600160a01b0316146111105760405162461bcd60e51b815260040161073a90613e69565b6001600160a01b0382166111665760405162461bcd60e51b815260206004820152601d60248201527f416e79737761705633526f757465723a20616464726573732830783029000000604482015260640161073a565b6040516360e232a960e01b81526001600160a01b0383811660048301528416906360e232a9906024016020604051808303816000875af11580156111ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7e9190614010565b60606111dc612742565b6001600160a01b0316336001600160a01b03161461120c5760405162461bcd60e51b815260040161073a90613e69565b60005460ff1661122e5760405162461bcd60e51b815260040161073a90613f80565b824281101561124f5760405162461bcd60e51b815260040161073a90613fc3565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001687876112866001826140c6565b81811061129557611295613ffa565b90506020020160208101906112aa9190613cd9565b6001600160a01b0316146113005760405162461bcd60e51b815260206004820152601d60248201527f416e79737761705633526f757465723a20494e56414c49445f50415448000000604482015260640161073a565b61135e7f00000000000000000000000000000000000000000000000000000000000000008a898980806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612cb192505050565b915087826001845161137091906140c6565b8151811061138057611380613ffa565b602002602001015110156113ea5760405162461bcd60e51b815260206004820152602b60248201527f416e79737761705633526f757465723a20494e53554646494349454e545f4f5560448201526a1514155517d05353d5539560aa1b606482015260840161073a565b6114018a88886000818110610f1d57610f1d613ffa565b61144082888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250612f00915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836001855161147e91906140c6565b8151811061148e5761148e613ffa565b60200260200101516040518263ffffffff1660e01b81526004016114b491815260200190565b600060405180830381600087803b1580156114ce57600080fd5b505af11580156114e2573d6000803e3d6000fd5b5050505061100b8583600185516114f991906140c6565b8151811061150957611509613ffa565b602002602001015161284b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561157e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a29190613ea0565b6001600160a01b0316146115c85760405162461bcd60e51b815260040161073a906140dd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561162357600080fd5b505af1158015611637573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b0387811660048301523460248301527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb925060440190506020604051808303816000875af11580156116ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116cf9190614010565b6116db576116db6136d5565b336001600160a01b0384167f409e0ad946b19f77602d6cf11d59e1796ddaa4828159a0b4fb7fa2ff6b161b798434468660405161171b9493929190613f51565b60405180910390a3505050565b6000611732612742565b6001600160a01b0316336001600160a01b0316146117625760405162461bcd60e51b815260040161073a90613e69565b6001600160a01b0382166117b85760405162461bcd60e51b815260206004820152601d60248201527f416e79737761705633526f757465723a20616464726573732830783029000000604482015260640161073a565b6117c0612742565b60008054610100600160a81b0319166101006001600160a01b0393841602179055600180546001600160a01b031916918416919091179055611805426202a300614127565b60028190556001546000546001600160a01b0391821691610100909104167fcda32bc39904597666dfa9f9c845714756e1ffffad55b52e0d344673a21981214660405190815260200160405180910390a45060015b919050565b60005460ff166118815760405162461bcd60e51b815260040161073a90613f80565b81428110156118a25760405162461bcd60e51b815260040161073a90613fc3565b858560008181106118b5576118b5613ffa565b90506020020160208101906118ca9190613cd9565b604051632770a7eb60e21b8152336004820152602481018a90526001600160a01b039190911690639dc29fac906044016020604051808303816000875af1158015611919573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193d9190614010565b506001600160a01b038416337f278277e0209c347189add7bd92411973b5f6b8644f7ac62ea1be984ce993f8f488888c8c46610c2c565b60005460ff166119965760405162461bcd60e51b815260040161073a90613f80565b81428110156119b75760405162461bcd60e51b815260040161073a90613fc3565b611a4933878760008181106119ce576119ce613ffa565b90506020020160208101906119e39190613cd9565b8a898960008181106119f7576119f7613ffa565b9050602002016020810190611a0c9190613cd9565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a37573d6000803e3d6000fd5b85856000818110611a5c57611a5c613ffa565b9050602002016020810190611a719190613cd9565b604051630bebbf4d60e41b8152600481018a90523360248201526001600160a01b03919091169063bebbf4d0906044016020604051808303816000875af1158015611ac0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae49190613ebd565b50858560008181106118b5576118b5613ffa565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b869190613ea0565b6001600160a01b031614611bac5760405162461bcd60e51b815260040161073a906140dd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015611c0757600080fd5b505af1158015611c1b573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b0387811660048301523460248301527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb925060440190506020604051808303816000875af1158015611c8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb39190614010565b611cbf57611cbf6136d5565b604051630bebbf4d60e41b81523460048201526001600160a01b03838116602483015284169063bebbf4d0906044016020604051808303816000875af1158015611d0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d319190613ebd565b50349392505050565b611d42612742565b6001600160a01b0316336001600160a01b031614611d725760405162461bcd60e51b815260040161073a90613e69565b611d7f8585858585612772565b5050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611df0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e149190613ea0565b6001600160a01b031614611e3a5760405162461bcd60e51b815260040161073a906140dd565b604051620e75bb60e21b81526001600160a01b038516906239d6ec90611e6890339087903090600401613ed6565b6020604051808303816000875af1158015611e87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eab9190613ebd565b50604051632e1a7d4d60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b158015611f0e57600080fd5b505af1158015611f22573d6000803e3d6000fd5b50505050611f30828461284b565b509092915050565b6000610ac8848484613102565b611f4d612742565b6001600160a01b0316336001600160a01b031614611f7d5760405162461bcd60e51b815260040161073a90613e69565b60405163cfbd488560e01b81526001600160a01b03828116600483015283169063cfbd4885906024015b600060405180830381600087803b158015611fc157600080fd5b505af11580156110ce573d6000803e3d6000fd5b611fdd612742565b6001600160a01b0316336001600160a01b03161461200d5760405162461bcd60e51b815260040161073a90613e69565b6000612017612742565b6040516340c10f1960e01b81526001600160a01b03808316600483015260248201859052919250908416906340c10f19906044016020604051808303816000875af115801561206a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208e9190614010565b50604051620e75bb60e21b81526001600160a01b038416906239d6ec906120bd90849086908290600401613ed6565b6020604051808303816000875af11580156120dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c949190613ebd565b612108612742565b6001600160a01b0316336001600160a01b0316146121385760405162461bcd60e51b815260040161073a90613e69565b604051637e51dad560e11b81526001600160a01b03828116600483015283169063fca3b5aa90602401611fa7565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f29190613ea0565b6001600160a01b0316146122185760405162461bcd60e51b815260040161073a906140dd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561227357600080fd5b505af1158015612287573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b0387811660048301523460248301527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb925060440190506020604051808303816000875af11580156122fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231f9190614010565b61232b5761232b6136d5565b6001600160a01b0380831690339085167f97116cf6cd4f6412bb47914d6db18da9e16ab2142f543b86e207c24fbd16b23a3446604080519283526020830191909152810186905260600160405180910390a4505050565b6000610ac88484846131cb565b604051632770a7eb60e21b8152336004820152602481018390526001600160a01b03851690639dc29fac906044016020604051808303816000875af11580156123dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124009190614010565b50336001600160a01b0385167f409e0ad946b19f77602d6cf11d59e1796ddaa4828159a0b4fb7fa2ff6b161b79858546610a9c565b6060610c7e7f00000000000000000000000000000000000000000000000000000000000000008484612cb1565b60005460ff166124845760405162461bcd60e51b815260040161073a90613f80565b81428110156124a55760405162461bcd60e51b815260040161073a90613fc3565b6124bc33878760008181106119ce576119ce613ffa565b858560008181106124cf576124cf613ffa565b90506020020160208101906124e49190613cd9565b604051630bebbf4d60e41b8152600481018a90523360248201526001600160a01b03919091169063bebbf4d0906044016020604051808303816000875af1158015612533573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125579190613ebd565b5085856000818110610b7157610b71613ffa565b612573612742565b6001600160a01b0316336001600160a01b0316146125a35760405162461bcd60e51b815260040161073a90613e69565b806001600160a01b0316630d707df86040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156125de57600080fd5b505af1158015611d7f573d6000803e3d6000fd5b50565b60005b8781101561269b57612689338a8a8481811061261657612616613ffa565b905060200201602081019061262b9190613cd9565b89898581811061263d5761263d613ffa565b90506020020160208101906126529190613cd9565b88888681811061266457612664613ffa565b9050602002013587878781811061267d5761267d613ffa565b90506020020135612bda565b80612693816140ad565b9150506125f8565b505050505050505050565b6126ea338584876001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a37573d6000803e3d6000fd5b6001600160a01b0380841690339086167f97116cf6cd4f6412bb47914d6db18da9e16ab2142f543b86e207c24fbd16b23a8546604080519283526020830191909152810186905260600160405180910390a450505050565b6000600254421061275d57506001546001600160a01b031690565b5060005461010090046001600160a01b031690565b6040516340c10f1960e01b81526001600160a01b038481166004830152602482018490528516906340c10f19906044016020604051808303816000875af11580156127c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e59190614010565b50826001600160a01b0316846001600160a01b0316867faac9ce45fe3adf5143598c4f18a369591a20a3384aedaf1b525d29127e1fcd5585856128254690565b604080519384526020840192909252908201526060015b60405180910390a45050505050565b604080516000808252602082019092526001600160a01b038416908390604051612875919061413f565b60006040518083038185875af1925050503d80600081146128b2576040519150601f19603f3d011682016040523d82523d6000602084013e6128b7565b606091505b50509050806129175760405162461bcd60e51b815260206004820152602660248201527f5472616e7366657248656c7065723a204e41544956455f5452414e534645525f60448201526511905253115160d21b606482015260840161073a565b505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610c9490859061325b565b60008084116129cb5760405162461bcd60e51b815260206004820152602d602482015260008051602061426c83398151915260448201526c17d25394155517d05353d55395609a1b606482015260840161073a565b6000831180156129db5750600082115b6129f75760405162461bcd60e51b815260040161073a9061415b565b6000612a05856103e56133e2565b90506000612a1382856133e2565b90506000612a2d83612a27886103e86133e2565b90613446565b9050612a3981836141a9565b979650505050505050565b6060600282511015612a985760405162461bcd60e51b815260206004820181905260248201527f53757368697377617056324c6962726172793a20494e56414c49445f50415448604482015260640161073a565b815167ffffffffffffffff811115612ab257612ab2613752565b604051908082528060200260200182016040528015612adb578160200160208202803683370190505b509050828160018351612aee91906140c6565b81518110612afe57612afe613ffa565b602002602001018181525050600060018351612b1a91906140c6565b90505b8015612bd257600080612b6d8786612b366001876140c6565b81518110612b4657612b46613ffa565b6020026020010151878681518110612b6057612b60613ffa565b6020026020010151613490565b91509150612b95848481518110612b8657612b86613ffa565b60200260200101518383613102565b84612ba16001866140c6565b81518110612bb157612bb1613ffa565b60200260200101818152505050508080612bca906141cb565b915050612b1d565b509392505050565b604051632770a7eb60e21b81526001600160a01b03868116600483015260248201849052851690639dc29fac906044016020604051808303816000875af1158015612c29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4d9190614010565b50826001600160a01b0316856001600160a01b0316856001600160a01b03167f97116cf6cd4f6412bb47914d6db18da9e16ab2142f543b86e207c24fbd16b23a85612c954690565b604080519283526020830191909152810186905260600161283c565b6060600282511015612d055760405162461bcd60e51b815260206004820181905260248201527f53757368697377617056324c6962726172793a20494e56414c49445f50415448604482015260640161073a565b815167ffffffffffffffff811115612d1f57612d1f613752565b604051908082528060200260200182016040528015612d48578160200160208202803683370190505b5090508281600081518110612d5f57612d5f613ffa565b60200260200101818152505060005b60018351612d7c91906140c6565b811015612bd257600080612dc287868581518110612d9c57612d9c613ffa565b602002602001015187866001612db29190614127565b81518110612b6057612b60613ffa565b91509150612dea848481518110612ddb57612ddb613ffa565b60200260200101518383612976565b84612df6856001614127565b81518110612e0657612e06613ffa565b60200260200101818152505050508080612e1f906140ad565b915050612d6e565b6000806000612e36858561355a565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b1660348201529193509150869060480160405160208183030381529060405280519060200120604051602001612ede9291906001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527fe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b60005b60018351612f1191906140c6565b811015610c9457600080848381518110612f2d57612f2d613ffa565b602002602001015185846001612f439190614127565b81518110612f5357612f53613ffa565b6020026020010151915091506000612f6b838361355a565b509050600087612f7c866001614127565b81518110612f8c57612f8c613ffa565b60200260200101519050600080836001600160a01b0316866001600160a01b031614612fba57826000612fbe565b6000835b91509150600060028a51612fd291906140c6565b8810612fde578861302c565b61302c7f0000000000000000000000000000000000000000000000000000000000000000878c61300f8c6002614127565b8151811061301f5761301f613ffa565b6020026020010151612e27565b90506130597f00000000000000000000000000000000000000000000000000000000000000008888612e27565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613096576020820181803683370190505b506040518563ffffffff1660e01b81526004016130b694939291906141e2565b600060405180830381600087803b1580156130d057600080fd5b505af11580156130e4573d6000803e3d6000fd5b505050505050505050505080806130fa906140ad565b915050612f03565b60008084116131585760405162461bcd60e51b815260206004820152602e602482015260008051602061426c83398151915260448201526d17d3d55514155517d05353d5539560921b606482015260840161073a565b6000831180156131685750600082115b6131845760405162461bcd60e51b815260040161073a9061415b565b600061319c6103e861319686886133e2565b906133e2565b905060006131b06103e56131968689613653565b90506131c16001612a2783856141a9565b9695505050505050565b600080841161321a5760405162461bcd60e51b8152602060048201526027602482015260008051602061426c83398151915260448201526617d05353d5539560ca1b606482015260840161073a565b60008311801561322a5750600082115b6132465760405162461bcd60e51b815260040161073a9061415b565b8261325185846133e2565b610ac891906141a9565b61326d826001600160a01b031661369e565b6132b95760405162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015260640161073a565b600080836001600160a01b0316836040516132d4919061413f565b6000604051808303816000865af19150503d8060008114613311576040519150601f19603f3d011682016040523d82523d6000602084013e613316565b606091505b5091509150816133685760405162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015260640161073a565b805115610c9457808060200190518101906133839190614010565b610c945760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161073a565b60008115806134035750508082028282828161340057613400614193565b04145b610c815760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015260640161073a565b80820182811015610c815760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015260640161073a565b600080600061349f858561355a565b5090506000806134b0888888612e27565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156134ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135119190614226565b506001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b03161461354857808261354b565b81815b90999098509650505050505050565b600080826001600160a01b0316846001600160a01b0316036135ce5760405162461bcd60e51b815260206004820152602760248201527f53757368697377617056324c6962726172793a204944454e544943414c5f41446044820152664452455353455360c81b606482015260840161073a565b826001600160a01b0316846001600160a01b0316106135ee5782846135f1565b83835b90925090506001600160a01b03821661364c5760405162461bcd60e51b815260206004820181905260248201527f53757368697377617056324c6962726172793a205a45524f5f41444452455353604482015260640161073a565b9250929050565b80820382811115610c815760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015260640161073a565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590610ac85750141592915050565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b03811681146125f257600080fd5b600080600080600060a0868803121561371857600080fd5b85359450602086013561372a816136eb565b9350604086013561373a816136eb565b94979396509394606081013594506080013592915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561379157613791613752565b604052919050565b600082601f8301126137aa57600080fd5b813567ffffffffffffffff8111156137c4576137c4613752565b6137d7601f8201601f1916602001613768565b8181528460208386010111156137ec57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806080858703121561381f57600080fd5b843561382a816136eb565b9350602085013567ffffffffffffffff81111561384657600080fd5b61385287828801613799565b949794965050505060408301359260600135919050565b60008060006060848603121561387e57600080fd5b505081359360208301359350604090920135919050565b80151581146125f257600080fd5b6000602082840312156138b557600080fd5b81356138c081613895565b9392505050565b60008083601f8401126138d957600080fd5b50813567ffffffffffffffff8111156138f157600080fd5b6020830191508360208260051b850101111561364c57600080fd5b600080600080600080600060c0888a03121561392757600080fd5b8735965060208801359550604088013567ffffffffffffffff81111561394c57600080fd5b6139588a828b016138c7565b909650945050606088013561396c816136eb565b969995985093969295946080840135945060a09093013592915050565b6000806040838503121561399c57600080fd5b8235915060208084013567ffffffffffffffff808211156139bc57600080fd5b818601915086601f8301126139d057600080fd5b8135818111156139e2576139e2613752565b8060051b91506139f3848301613768565b8181529183018401918481019089841115613a0d57600080fd5b938501935b83851015613a375784359250613a27836136eb565b8282529385019390850190613a12565b8096505050505050509250929050565b6020808252825182820181905260009190848201906040850190845b81811015613a7f57835183529284019291840191600101613a63565b50909695505050505050565b60008060008060808587031215613aa157600080fd5b8435613aac816136eb565b93506020850135613abc816136eb565b93969395505050506040820135916060013590565b60008060008060008060008060008060a08b8d031215613af057600080fd5b8a3567ffffffffffffffff80821115613b0857600080fd5b613b148e838f016138c7565b909c509a5060208d0135915080821115613b2d57600080fd5b613b398e838f016138c7565b909a50985060408d0135915080821115613b5257600080fd5b613b5e8e838f016138c7565b909850965060608d0135915080821115613b7757600080fd5b613b838e838f016138c7565b909650945060808d0135915080821115613b9c57600080fd5b50613ba98d828e016138c7565b915080935050809150509295989b9194979a5092959850565b60008060008060008060008060e0898b031215613bde57600080fd5b883597506020890135965060408901359550606089013567ffffffffffffffff811115613c0a57600080fd5b613c168b828c016138c7565b9096509450506080890135613c2a816136eb565b979a969950949793969295929450505060a08201359160c0013590565b60008060408385031215613c5a57600080fd5b8235613c65816136eb565b91506020830135613c75816136eb565b809150509250929050565b600080600060608486031215613c9557600080fd5b8335613ca0816136eb565b9250602084013567ffffffffffffffff811115613cbc57600080fd5b613cc886828701613799565b925050604084013590509250925092565b600060208284031215613ceb57600080fd5b81356138c0816136eb565b600080600060608486031215613d0b57600080fd5b8335613d16816136eb565b9250602084013591506040840135613d2d816136eb565b809150509250925092565b60008060408385031215613d4b57600080fd5b8235613d56816136eb565b946020939093013593505050565b600080600060608486031215613d7957600080fd5b8335613d84816136eb565b92506020840135613d94816136eb565b929592945050506040919091013590565b6000806000806000806000806080898b031215613dc157600080fd5b883567ffffffffffffffff80821115613dd957600080fd5b613de58c838d016138c7565b909a50985060208b0135915080821115613dfe57600080fd5b613e0a8c838d016138c7565b909850965060408b0135915080821115613e2357600080fd5b613e2f8c838d016138c7565b909650945060608b0135915080821115613e4857600080fd5b50613e558b828c016138c7565b999c989b5096995094979396929594505050565b6020808252601a908201527f416e79737761705633526f757465723a20464f5242494444454e000000000000604082015260600190565b600060208284031215613eb257600080fd5b81516138c0816136eb565b600060208284031215613ecf57600080fd5b5051919050565b6001600160a01b0393841681526020810192909252909116604082015260600190565b60005b83811015613f14578181015183820152602001613efc565b83811115610c945750506000910152565b60008151808452613f3d816020860160208601613ef9565b601f01601f19169290920160200192915050565b608081526000613f646080830187613f25565b6020830195909552506040810192909252606090910152919050565b60208082526023908201527f416e79737761705636526f757465723a205377617054726164652064697361626040820152621b195960ea1b606082015260800190565b60208082526018908201527f416e79737761705633526f757465723a20455850495245440000000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561402257600080fd5b81516138c081613895565b60a0808252810186905260008760c08301825b89811015614070578235614053816136eb565b6001600160a01b0316825260209283019290910190600101614040565b50602084019790975250506040810193909352606083019190915260809091015292915050565b634e487b7160e01b600052601160045260246000fd5b6000600182016140bf576140bf614097565b5060010190565b6000828210156140d8576140d8614097565b500390565b6020808252602a908201527f416e79737761705633526f757465723a20756e6465726c79696e67206973206e6040820152696f7420774e415449564560b01b606082015260800190565b6000821982111561413a5761413a614097565b500190565b60008251614151818460208701613ef9565b9190910192915050565b6020808252602a9082015260008051602061426c8339815191526040820152695f4c495155494449545960b01b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b6000826141c657634e487b7160e01b600052601260045260246000fd5b500490565b6000816141da576141da614097565b506000190190565b84815283602082015260018060a01b03831660408201526080606082015260006131c16080830184613f25565b80516001600160701b038116811461185a57600080fd5b60008060006060848603121561423b57600080fd5b6142448461420f565b92506142526020850161420f565b9150604084015163ffffffff81168114613d2d57600080fdfe53757368697377617056324c6962726172793a20494e53554646494349454e54a2646970667358221220deda62a60ddae3b9814dc24147c4badc0948ae85c1cf0ddba94326d13c32da3264736f6c634300080e003300000000000000000000000000000000000000000000000000000000000000000000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23000000000000000000000000e19105463d6fe2f2bd86c69ad478f4b76ce49c53

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

00000000000000000000000000000000000000000000000000000000000000000000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23000000000000000000000000e19105463d6fe2f2bd86c69ad478f4b76ce49c53

-----Decoded View---------------
Arg [0] : _factory (address): 0x0000000000000000000000000000000000000000
Arg [1] : _wNATIVE (address): 0x5c7f8a570d578ed84e63fdfa7b1ee72deae1ae23
Arg [2] : _mpc (address): 0xe19105463d6fe2f2bd86c69ad478f4b76ce49c53

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [1] : 0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23
Arg [2] : 000000000000000000000000e19105463d6fe2f2bd86c69ad478f4b76ce49c53


Deployed ByteCode Sourcemap

10450:15628:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11189:10;-1:-1:-1;;;;;11203:7:0;11189:21;;11182:29;;;;:::i;:::-;10450:15628;;;;;17487:718;;;;;;;;;;-1:-1:-1;17487:718:0;;;;;:::i;:::-;;:::i;15705:284::-;;;;;;;;;;-1:-1:-1;15705:284:0;;;;;:::i;:::-;;:::i;25086:246::-;;;;;;;;;;-1:-1:-1;25086:246:0;;;;;:::i;:::-;;:::i;:::-;;;2895:25:1;;;2883:2;2868:18;25086:246:0;;;;;;;;12747:101;;;;;;;;;;-1:-1:-1;12747:101:0;;;;;:::i;:::-;;:::i;20596:433::-;;;;;;;;;;-1:-1:-1;20596:433:0;;;;;:::i;:::-;;:::i;25838:237::-;;;;;;;;;;-1:-1:-1;25838:237:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;14188:157::-;;;;;;;;;;-1:-1:-1;14188:157:0;;;;;:::i;:::-;;:::i;19322:319::-;;;;;;;;;;-1:-1:-1;19322:319:0;;;;;:::i;:::-;;:::i;21890:665::-;;;;;;;;;;-1:-1:-1;21890:665:0;;;;;:::i;:::-;;:::i;10636:27::-;;;;;;;;;;-1:-1:-1;10636:27:0;;;;;;;;;;;9596:14:1;;9589:22;9571:41;;9559:2;9544:18;10636:27:0;9431:187:1;17117:245:0;;;;;;;;;;-1:-1:-1;17117:245:0;;;;;:::i;:::-;;:::i;13221:228::-;;;;;;;;;;-1:-1:-1;13221:228:0;;;;;:::i;:::-;;:::i;23950:903::-;;;;;;;;;;-1:-1:-1;23950:903:0;;;;;:::i;:::-;;:::i;15997:411::-;;;;;;:::i;:::-;;:::i;12856:357::-;;;;;;;;;;-1:-1:-1;12856:357:0;;;;;:::i;:::-;;:::i;22656:433::-;;;;;;;;;;-1:-1:-1;22656:433:0;;;;;:::i;:::-;;:::i;23190:615::-;;;;;;;;;;-1:-1:-1;23190:615:0;;;;;:::i;:::-;;:::i;18213:407::-;;;;;;:::i;:::-;;:::i;16831:173::-;;;;;;;;;;-1:-1:-1;16831:173:0;;;;;:::i;:::-;;:::i;18628:413::-;;;;;;;;;;-1:-1:-1;18628:413:0;;;;;:::i;:::-;;:::i;25340:245::-;;;;;;;;;;-1:-1:-1;25340:245:0;;;;;:::i;:::-;;:::i;13717:136::-;;;;;;;;;;-1:-1:-1;13717:136:0;;;;;:::i;:::-;;:::i;19091:223::-;;;;;;;;;;-1:-1:-1;19091:223:0;;;;;:::i;:::-;;:::i;10595:32::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11743:32:1;;;11725:51;;11713:2;11698:18;10595:32:0;11579:203:1;12650:89:0;;;;;;;;;;-1:-1:-1;12722:9:0;12650:89;;13457:130;;;;;;;;;;-1:-1:-1;13457:130:0;;;;;:::i;:::-;;:::i;14756:405::-;;;;;;:::i;:::-;;:::i;24897:181::-;;;;;;;;;;-1:-1:-1;24897:181:0;;;;;:::i;:::-;;:::i;10556:32::-;;;;;;;;;;;;;;;15463:234;;;;;;;;;;-1:-1:-1;15463:234:0;;;;;:::i;:::-;;:::i;25593:237::-;;;;;;;;;;-1:-1:-1;25593:237:0;;;;;:::i;:::-;;:::i;21130:615::-;;;;;;;;;;-1:-1:-1;21130:615:0;;;;;:::i;:::-;;:::i;13595:114::-;;;;;;;;;;-1:-1:-1;13595:114:0;;;;;:::i;:::-;;:::i;15169:286::-;;;;;;;;;;-1:-1:-1;15169:286:0;;;;;:::i;:::-;;:::i;14470:278::-;;;;;;;;;;-1:-1:-1;14470:278:0;;;;;:::i;:::-;;:::i;12468:174::-;;;;;;;;;;;;;:::i;17487:718::-;12404:5;:3;:5::i;:::-;-1:-1:-1;;;;;12390:19:0;:10;-1:-1:-1;;;;;12390:19:0;;12382:58;;;;-1:-1:-1;;;12382:58:0;;;;;;;:::i;:::-;;;;;;;;;17609:47:::1;17620:3;17625:5;17632:2;17636:6;17644:11;17609:10;:47::i;:::-;17667:24;17709:5;17667:48;;17726:19;17748:9;-1:-1:-1::0;;;;;17748:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17726:44:::0;-1:-1:-1;;;;;;17785:25:0;::::1;::::0;;::::1;::::0;:75:::1;;-1:-1:-1::0;17814:36:0::1;::::0;-1:-1:-1;;;17814:36:0;;-1:-1:-1;;;;;11743:32:1;;;17814:36:0::1;::::0;::::1;11725:51:1::0;17854:6:0;;17814:29;;::::1;::::0;::::1;::::0;11698:18:1;;17814:36:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;17785:75;17781:417;;;17896:7;-1:-1:-1::0;;;;;17881:22:0::1;:11;-1:-1:-1::0;;;;;17881:22:0::1;::::0;17877:310:::1;;17924:50;::::0;-1:-1:-1;;;17924:50:0;;-1:-1:-1;;;;;17924:23:0;::::1;::::0;::::1;::::0;:50:::1;::::0;17948:2;;17952:6;;17968:4:::1;::::0;17924:50:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;17993:34:0::1;::::0;-1:-1:-1;;;17993:34:0;;::::1;::::0;::::1;2895:25:1::0;;;18002:7:0::1;-1:-1:-1::0;;;;;17993:26:0::1;::::0;::::1;::::0;2868:18:1;;17993:34:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18046:45;18080:2;18084:6;18046:33;:45::i;:::-;17877:310;;;18132:39;::::0;-1:-1:-1;;;18132:39:0;;-1:-1:-1;;;;;18132:23:0;::::1;::::0;::::1;::::0;:39:::1;::::0;18156:2;;18160:6;;18156:2;;18132:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17877:310;17598:607;;17487:718:::0;;;;;:::o;15705:284::-;15817:86;15877:10;15889:5;15896:6;15839:5;-1:-1:-1;;;;;15824:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;15817:59:0;;:86;;:59;:86::i;:::-;15940:10;-1:-1:-1;;;;;15919:62:0;;;15952:2;15956:6;12722:9;15964:5;15971:9;15919:62;;;;;;;;;:::i;:::-;;;;;;;;15705:284;;;;:::o;25086:246::-;25221:14;25260:64;25292:8;25302:9;25313:10;25260:31;:64::i;:::-;25253:71;25086:246;-1:-1:-1;;;;25086:246:0:o;12747:101::-;12404:5;:3;:5::i;:::-;-1:-1:-1;;;;;12390:19:0;:10;-1:-1:-1;;;;;12390:19:0;;12382:58;;;;-1:-1:-1;;;12382:58:0;;;;;;;:::i;:::-;12816:15:::1;:24:::0;;-1:-1:-1;;12816:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;12747:101::o;20596:433::-;10717:15;;;;10709:63;;;;-1:-1:-1;;;10709:63:0;;;;;;;:::i;:::-;20840:8:::1;10862:15;10850:8;:27;;10842:64;;;;-1:-1:-1::0;;;10842:64:0::1;;;;;;;:::i;:::-;20876:4:::2;;20881:1;20876:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;20861:50;::::0;-1:-1:-1;;;20861:50:0;;20890:10:::2;20861:50;::::0;::::2;16866:51:1::0;16933:18;;;16926:34;;;-1:-1:-1;;;;;20861:28:0;;;::::2;::::0;::::2;::::0;16839:18:1;;20861:50:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;20927:94:0;::::2;20964:10;20927:94;20958:4:::0;;20980:8;20990:12;12722:9;21004:5:::2;21011:9;20927:94;;;;;;;;;;;:::i;:::-;;;;;;;;10783:1:::1;20596:433:::0;;;;;;;:::o;25838:237::-;25964:21;26010:57;26042:7;26051:9;26062:4;26010:31;:57::i;:::-;26003:64;;25838:237;;;;;:::o;14188:157::-;14284:53;14296:10;14308:5;14315:2;14319:6;14327:9;14284:11;:53::i;:::-;14188:157;;;;:::o;19322:319::-;12404:5;:3;:5::i;:::-;-1:-1:-1;;;;;12390:19:0;:10;-1:-1:-1;;;;;12390:19:0;;12382:58;;;;-1:-1:-1;;;12382:58:0;;;;;;;:::i;:::-;19506:6:::1;19501:133;19518:17:::0;;::::1;19501:133;;;19557:65;19568:3;;19572:1;19568:6;;;;;;;:::i;:::-;;;;;;;19576;;19583:1;19576:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;19587:2;;19590:1;19587:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;19594:7;;19602:1;19594:10;;;;;;;:::i;:::-;;;;;;;19606:12;;19619:1;19606:15;;;;;;;:::i;:::-;;;;;;;19557:10;:65::i;:::-;19537:3:::0;::::1;::::0;::::1;:::i;:::-;;;;19501:133;;;;19322:319:::0;;;;;;;;;;:::o;21890:665::-;22184:21;12404:5;:3;:5::i;:::-;-1:-1:-1;;;;;12390:19:0;:10;-1:-1:-1;;;;;12390:19:0;;12382:58;;;;-1:-1:-1;;;12382:58:0;;;;;;;:::i;:::-;10717:15:::1;::::0;::::1;;10709:63;;;;-1:-1:-1::0;;;10709:63:0::1;;;;;;;:::i;:::-;22165:8:::2;10862:15;10850:8;:27;;10842:64;;;;-1:-1:-1::0;;;10842:64:0::2;;;;;;;:::i;:::-;22228:57:::3;22261:7;22270:8;22280:4;;22228:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;::::0;;;;-1:-1:-1;22228:32:0::3;::::0;-1:-1:-1;;;22228:57:0:i:3;:::-;22218:67;;22335:12;22304:7;22329:1;22312:7;:14;:18;;;;:::i;:::-;22304:27;;;;;;;;:::i;:::-;;;;;;;:43;;22296:101;;;::::0;-1:-1:-1;;;22296:101:0;;18831:2:1;22296:101:0::3;::::0;::::3;18813:21:1::0;18870:2;18850:18;;;18843:30;18909:34;18889:18;;;18882:62;-1:-1:-1;;;18960:18:1;;;18953:43;19013:19;;22296:101:0::3;18629:409:1::0;22296:101:0::3;22408:104;22419:3;22424:4;;22429:1;22424:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;22433:53;22460:7;22469:4;;22474:1;22469:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;22478:4;;22483:1;22478:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;22433:26;:53::i;:::-;22488:7;22496:1;22488:10;;;;;;;;:::i;:::-;;;;;;;22500:11;22408:10;:104::i;:::-;22523:24;22529:7;22538:4;;22523:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;::::0;;;;-1:-1:-1;22544:2:0;;-1:-1:-1;22523:5:0::3;::::0;-1:-1:-1;;22523:24:0:i:3;:::-;10783:1:::2;21890:665:::0;;;;;;;;;;:::o;17117:245::-;12404:5;:3;:5::i;:::-;-1:-1:-1;;;;;12390:19:0;:10;-1:-1:-1;;;;;12390:19:0;;12382:58;;;;-1:-1:-1;;;12382:58:0;;;;;;;:::i;:::-;17245:47:::1;17256:3;17261:5;17268:2;17272:6;17280:11;17245:10;:47::i;:::-;17303:51;::::0;-1:-1:-1;;;17303:51:0;;-1:-1:-1;;;;;17303:35:0;::::1;::::0;::::1;::::0;:51:::1;::::0;17339:2;;17343:6;;17339:2;;17303:51:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17117:245:::0;;;;;:::o;13221:228::-;13299:4;12404:5;:3;:5::i;:::-;-1:-1:-1;;;;;12390:19:0;:10;-1:-1:-1;;;;;12390:19:0;;12382:58;;;;-1:-1:-1;;;12382:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13324:22:0;::::1;13316:64;;;::::0;-1:-1:-1;;;13316:64:0;;19245:2:1;13316:64:0::1;::::0;::::1;19227:21:1::0;19284:2;19264:18;;;19257:30;19323:31;19303:18;;;19296:59;19372:18;;13316:64:0::1;19043:353:1::0;13316:64:0::1;13398:43;::::0;-1:-1:-1;;;13398:43:0;;-1:-1:-1;;;;;11743:32:1;;;13398:43:0::1;::::0;::::1;11725:51:1::0;13398:33:0;::::1;::::0;::::1;::::0;11698:18:1;;13398:43:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23950:903::-:0;24244:21;12404:5;:3;:5::i;:::-;-1:-1:-1;;;;;12390:19:0;:10;-1:-1:-1;;;;;12390:19:0;;12382:58;;;;-1:-1:-1;;;12382:58:0;;;;;;;:::i;:::-;10717:15:::1;::::0;::::1;;10709:63;;;;-1:-1:-1::0;;;10709:63:0::1;;;;;;;:::i;:::-;24225:8:::2;10862:15;10850:8;:27;;10842:64;;;;-1:-1:-1::0;;;10842:64:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24311:7:0::3;24286:32;:4:::0;;24291:15:::3;24305:1;24286:4:::0;24291:15:::3;:::i;:::-;24286:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24286:32:0::3;;24278:74;;;::::0;-1:-1:-1;;;24278:74:0;;19603:2:1;24278:74:0::3;::::0;::::3;19585:21:1::0;19642:2;19622:18;;;19615:30;19681:31;19661:18;;;19654:59;19730:18;;24278:74:0::3;19401:353:1::0;24278:74:0::3;24373:57;24406:7;24415:8;24425:4;;24373:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;::::0;;;;-1:-1:-1;24373:32:0::3;::::0;-1:-1:-1;;;24373:57:0:i:3;:::-;24363:67;;24480:12;24449:7;24474:1;24457:7;:14;:18;;;;:::i;:::-;24449:27;;;;;;;;:::i;:::-;;;;;;;:43;;24441:99;;;::::0;-1:-1:-1;;;24441:99:0;;19961:2:1;24441:99:0::3;::::0;::::3;19943:21:1::0;20000:2;19980:18;;;19973:30;20039:34;20019:18;;;20012:62;-1:-1:-1;;;20090:18:1;;;20083:41;20141:19;;24441:99:0::3;19759:407:1::0;24441:99:0::3;24551:105;24562:3;24567:4;;24572:1;24567:7;;;;;;;:::i;24551:105::-;24667:35;24673:7;24682:4;;24667:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;::::0;;;;-1:-1:-1;24696:4:0::3;::::0;-1:-1:-1;24667:5:0::3;::::0;-1:-1:-1;;24667:35:0:i:3;:::-;24722:7;-1:-1:-1::0;;;;;24713:26:0::3;;24740:7;24765:1;24748:7;:14;:18;;;;:::i;:::-;24740:27;;;;;;;;:::i;:::-;;;;;;;24713:55;;;;;;;;;;;;;2895:25:1::0;;2883:2;2868:18;;2749:177;24713:55:0::3;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;24779:66;24813:2;24817:7;24842:1;24825:7;:14;:18;;;;:::i;:::-;24817:27;;;;;;;;:::i;:::-;;;;;;;24779:33;:66::i;15997:411::-:0;16146:7;-1:-1:-1;;;;;16108:45:0;16123:5;-1:-1:-1;;;;;16108:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;16108:45:0;;16100:100;;;;-1:-1:-1;;;16100:100:0;;;;;;;:::i;:::-;16220:7;-1:-1:-1;;;;;16211:25:0;;16244:9;16211:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16274:44:0;;-1:-1:-1;;;16274:44:0;;-1:-1:-1;;;;;16884:32:1;;;16274:44:0;;;16866:51:1;16308:9:0;16933:18:1;;;16926:34;16283:7:0;16274:26;;-1:-1:-1;16274:26:0;;-1:-1:-1;16839:18:1;;;-1:-1:-1;16274:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16267:52;;;;:::i;:::-;16356:10;-1:-1:-1;;;;;16335:65:0;;;16368:2;16372:9;12722;16390;16335:65;;;;;;;;;:::i;:::-;;;;;;;;15997:411;;;:::o;12856:357::-;12915:4;12404:5;:3;:5::i;:::-;-1:-1:-1;;;;;12390:19:0;:10;-1:-1:-1;;;;;12390:19:0;;12382:58;;;;-1:-1:-1;;;12382:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12940:20:0;::::1;12932:62;;;::::0;-1:-1:-1;;;12932:62:0;;19245:2:1;12932:62:0::1;::::0;::::1;19227:21:1::0;19284:2;19264:18;;;19257:30;19323:31;19303:18;;;19296:59;19372:18;;12932:62:0::1;19043:353:1::0;12932:62:0::1;13015:5;:3;:5::i;:::-;13005:7;:15:::0;;-1:-1:-1;;;;;;13005:15:0::1;;-1:-1:-1::0;;;;;13005:15:0;;::::1;;;::::0;;-1:-1:-1;13031:16:0;;-1:-1:-1;;;;;;13031:16:0::1;::::0;;::::1;::::0;;;::::1;::::0;;13081:27:::1;:15;13099:9;13081:27;:::i;:::-;13058:20;:50:::0;;;13146:7:::1;::::0;::::1;13137::::0;-1:-1:-1;;;;;13146:7:0;;::::1;::::0;::::1;13137::::0;;::::1;;13124:59;12722:9:::0;13124:59:::1;::::0;2895:25:1;;;2883:2;2868:18;13124:59:0::1;;;;;;;-1:-1:-1::0;13201:4:0::1;12451:1;12856:357:::0;;;:::o;22656:433::-;10717:15;;;;10709:63;;;;-1:-1:-1;;;10709:63:0;;;;;;;:::i;:::-;22900:8:::1;10862:15;10850:8;:27;;10842:64;;;;-1:-1:-1::0;;;10842:64:0::1;;;;;;;:::i;:::-;22936:4:::2;;22941:1;22936:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;22921:50;::::0;-1:-1:-1;;;22921:50:0;;22950:10:::2;22921:50;::::0;::::2;16866:51:1::0;16933:18;;;16926:34;;;-1:-1:-1;;;;;22921:28:0;;;::::2;::::0;::::2;::::0;16839:18:1;;22921:50:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;22987:94:0;::::2;23024:10;22987:94;23018:4:::0;;23040:8;23050:12;12722:9;23064:5:::2;12650:89:::0;23190:615;10717:15;;;;10709:63;;;;-1:-1:-1;;;10709:63:0;;;;;;;:::i;:::-;23444:8:::1;10862:15;10850:8;:27;;10842:64;;;;-1:-1:-1::0;;;10842:64:0::1;;;;;;;:::i;:::-;23465:92:::2;23527:10;23539:4;;23544:1;23539:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;23548:8;23487:4;;23492:1;23487:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23472:34:0::2;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;23465:92;23583:4;;23588:1;23583:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;23568:58;::::0;-1:-1:-1;;;23568:58:0;;::::2;::::0;::::2;20889:25:1::0;;;23615:10:0::2;20930:18:1::0;;;20923:60;-1:-1:-1;;;;;23568:36:0;;;::::2;::::0;::::2;::::0;20862:18:1;;23568:58:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23652:4;;23657:1;23652:7;;;;;;;:::i;18213:407::-:0;18289:4;18352:7;-1:-1:-1;;;;;18314:45:0;18329:5;-1:-1:-1;;;;;18314:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18314:45:0;;18306:100;;;;-1:-1:-1;;;18306:100:0;;;;;;;:::i;:::-;18426:7;-1:-1:-1;;;;;18417:25:0;;18450:9;18417:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18480:44:0;;-1:-1:-1;;;18480:44:0;;-1:-1:-1;;;;;16884:32:1;;;18480:44:0;;;16866:51:1;18514:9:0;16933:18:1;;;16926:34;18489:7:0;18480:26;;-1:-1:-1;18480:26:0;;-1:-1:-1;16839:18:1;;;-1:-1:-1;18480:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18473:52;;;;:::i;:::-;18536:49;;-1:-1:-1;;;18536:49:0;;18571:9;18536:49;;;20889:25:1;-1:-1:-1;;;;;20950:32:1;;;20930:18;;;20923:60;18536:34:0;;;;;20862:18:1;;18536:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;18603:9:0;;18213:407;-1:-1:-1;;;18213:407:0:o;16831:173::-;12404:5;:3;:5::i;:::-;-1:-1:-1;;;;;12390:19:0;:10;-1:-1:-1;;;;;12390:19:0;;12382:58;;;;-1:-1:-1;;;12382:58:0;;;;;;;:::i;:::-;16949:47:::1;16960:3;16965:5;16972:2;16976:6;16984:11;16949:10;:47::i;:::-;16831:173:::0;;;;;:::o;18628:413::-;18710:4;18773:7;-1:-1:-1;;;;;18735:45:0;18750:5;-1:-1:-1;;;;;18735:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18735:45:0;;18727:100;;;;-1:-1:-1;;;18727:100:0;;;;;;;:::i;:::-;18838:70;;-1:-1:-1;;;18838:70:0;;-1:-1:-1;;;;;18838:35:0;;;;;:70;;18874:10;;18886:6;;18902:4;;18838:70;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;18919:34:0;;-1:-1:-1;;;18919:34:0;;;;;2895:25:1;;;18928:7:0;-1:-1:-1;;;;;18919:26:0;;;;2868:18:1;;18919:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18964:45;18998:2;19002:6;18964:33;:45::i;:::-;-1:-1:-1;19027:6:0;;18628:413;-1:-1:-1;;18628:413:0:o;25340:245::-;25475:13;25513:64;25544:9;25555;25566:10;25513:30;:64::i;13717:136::-;12404:5;:3;:5::i;:::-;-1:-1:-1;;;;;12390:19:0;:10;-1:-1:-1;;;;;12390:19:0;;12382:58;;;;-1:-1:-1;;;12382:58:0;;;;;;;:::i;:::-;13804:41:::1;::::0;-1:-1:-1;;;13804:41:0;;-1:-1:-1;;;;;11743:32:1;;;13804:41:0::1;::::0;::::1;11725:51:1::0;13804:34:0;::::1;::::0;::::1;::::0;11698:18:1;;13804:41:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;19091:223:::0;12404:5;:3;:5::i;:::-;-1:-1:-1;;;;;12390:19:0;:10;-1:-1:-1;;;;;12390:19:0;;12382:58;;;;-1:-1:-1;;;12382:58:0;;;;;;;:::i;:::-;19169:12:::1;19184:5;:3;:5::i;:::-;19200:40;::::0;-1:-1:-1;;;19200:40:0;;-1:-1:-1;;;;;16884:32:1;;;19200:40:0::1;::::0;::::1;16866:51:1::0;16933:18;;;16926:34;;;19169:20:0;;-1:-1:-1;19200:26:0;;::::1;::::0;::::1;::::0;16839:18:1;;19200:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;19251:55:0::1;::::0;-1:-1:-1;;;19251:55:0;;-1:-1:-1;;;;;19251:35:0;::::1;::::0;::::1;::::0;:55:::1;::::0;19287:4;;19293:6;;19287:4;;19251:55:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;13457:130::-:0;12404:5;:3;:5::i;:::-;-1:-1:-1;;;;;12390:19:0;:10;-1:-1:-1;;;;;12390:19:0;;12382:58;;;;-1:-1:-1;;;12382:58:0;;;;;;;:::i;:::-;13541:38:::1;::::0;-1:-1:-1;;;13541:38:0;;-1:-1:-1;;;;;11743:32:1;;;13541:38:0::1;::::0;::::1;11725:51:1::0;13541:31:0;::::1;::::0;::::1;::::0;11698:18:1;;13541:38:0::1;11579:203:1::0;14756:405:0;14899:7;-1:-1:-1;;;;;14861:45:0;14876:5;-1:-1:-1;;;;;14861:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;14861:45:0;;14853:100;;;;-1:-1:-1;;;14853:100:0;;;;;;;:::i;:::-;14973:7;-1:-1:-1;;;;;14964:25:0;;14997:9;14964:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15027:44:0;;-1:-1:-1;;;15027:44:0;;-1:-1:-1;;;;;16884:32:1;;;15027:44:0;;;16866:51:1;15061:9:0;16933:18:1;;;16926:34;15036:7:0;15027:26;;-1:-1:-1;15027:26:0;;-1:-1:-1;16839:18:1;;;-1:-1:-1;15027:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15020:52;;;;:::i;:::-;-1:-1:-1;;;;;15088:65:0;;;;15109:10;;15088:65;;;15125:9;12722;15088:65;;;21196:25:1;;;21252:2;21237:18;;21230:34;;;;21280:18;;21273:34;;;21184:2;21169:18;15088:65:0;;;;;;;14756:405;;;:::o;24897:181::-;24985:12;25017:53;25042:7;25051:8;25061;25017:24;:53::i;15463:234::-;15565:46;;-1:-1:-1;;;15565:46:0;;15592:10;15565:46;;;16866:51:1;16933:18;;;16926:34;;;-1:-1:-1;;;;;15565:26:0;;;;;16839:18:1;;15565:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;15648:10:0;-1:-1:-1;;;;;15627:62:0;;;15660:2;15664:6;12722:9;15672:5;12650:89;25593:237;25719:21;25765:57;25798:7;25807:8;25817:4;25765:32;:57::i;21130:615::-;10717:15;;;;10709:63;;;;-1:-1:-1;;;10709:63:0;;;;;;;:::i;:::-;21384:8:::1;10862:15;10850:8;:27;;10842:64;;;;-1:-1:-1::0;;;10842:64:0::1;;;;;;;:::i;:::-;21405:92:::2;21467:10;21479:4;;21484:1;21479:7;;;;;;;:::i;21405:92::-;21523:4;;21528:1;21523:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;21508:58;::::0;-1:-1:-1;;;21508:58:0;;::::2;::::0;::::2;20889:25:1::0;;;21555:10:0::2;20930:18:1::0;;;20923:60;-1:-1:-1;;;;;21508:36:0;;;::::2;::::0;::::2;::::0;20862:18:1;;21508:58:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21592:4;;21597:1;21592:7;;;;;;;:::i;13595:114::-:0;12404:5;:3;:5::i;:::-;-1:-1:-1;;;;;12390:19:0;:10;-1:-1:-1;;;;;12390:19:0;;12382:58;;;;-1:-1:-1;;;12382:58:0;;;;;;;:::i;:::-;13681:5:::1;-1:-1:-1::0;;;;;13666:33:0::1;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;12451:1;13595:114:::0;:::o;15169:286::-;15317:6;15312:136;15329:17;;;15312:136;;;15368:68;15380:10;15392:6;;15399:1;15392:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;15403:2;;15406:1;15403:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;15410:7;;15418:1;15410:10;;;;;;;:::i;:::-;;;;;;;15422;;15433:1;15422:13;;;;;;;:::i;:::-;;;;;;;15368:11;:68::i;:::-;15348:3;;;;:::i;:::-;;;;15312:136;;;;15169:286;;;;;;;;:::o;14470:278::-;14576:86;14636:10;14648:5;14655:6;14598:5;-1:-1:-1;;;;;14583:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14576:86;-1:-1:-1;;;;;14678:62:0;;;;14699:10;;14678:62;;;14715:6;12722:9;14678:62;;;21196:25:1;;;21252:2;21237:18;;21230:34;;;;21280:18;;21273:34;;;21184:2;21169:18;14678:62:0;;;;;;;14470:278;;;;:::o;12468:174::-;12504:7;12547:20;;12528:15;:39;12524:86;;-1:-1:-1;12591:7:0;;-1:-1:-1;;;;;12591:7:0;;12468:174::o;12524:86::-;-1:-1:-1;12627:7:0;;;;;-1:-1:-1;;;;;12627:7:0;;12468:174::o;16488:229::-;16599:38;;-1:-1:-1;;;16599:38:0;;-1:-1:-1;;;;;16884:32:1;;;16599:38:0;;;16866:51:1;16933:18;;;16926:34;;;16599:26:0;;;;;16839:18:1;;16599:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16678:2;-1:-1:-1;;;;;16653:56:0;16671:5;-1:-1:-1;;;;;16653:56:0;16666:3;16653:56;16682:6;16690:11;16703:5;12722:9;;12650:89;16703:5;16653:56;;;21196:25:1;;;21252:2;21237:18;;21230:34;;;;21280:18;;;21273:34;21184:2;21169:18;16653:56:0;;;;;;;;16488:229;;;;;:::o;6740:201::-;6851:12;;;6813;6851;;;;;;;;;-1:-1:-1;;;;;6830:7:0;;;6844:5;;6830:34;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6812:52;;;6883:7;6875:58;;;;-1:-1:-1;;;6875:58:0;;21799:2:1;6875:58:0;;;21781:21:1;21838:2;21818:18;;;21811:30;21877:34;21857:18;;;21850:62;-1:-1:-1;;;21928:18:1;;;21921:36;21974:19;;6875:58:0;21597:402:1;6875:58:0;6801:140;6740:201;;:::o;9286:::-;9410:68;;;-1:-1:-1;;;;;22262:15:1;;;9410:68:0;;;22244:34:1;22314:15;;22294:18;;;22287:43;22346:18;;;;22339:34;;;9410:68:0;;;;;;;;;;22179:18:1;;;;9410:68:0;;;;;;;;-1:-1:-1;;;;;9410:68:0;-1:-1:-1;;;9410:68:0;;;9384:95;;9403:5;;9384:18;:95::i;3115:521::-;3208:14;3254:1;3243:8;:12;3235:70;;;;-1:-1:-1;;;3235:70:0;;22586:2:1;3235:70:0;;;22568:21:1;22625:2;22605:18;;;22598:30;-1:-1:-1;;;;;;;;;;;22644:18:1;;;22637:62;-1:-1:-1;;;22715:18:1;;;22708:43;22768:19;;3235:70:0;22384:409:1;3235:70:0;3336:1;3324:9;:13;:31;;;;;3354:1;3341:10;:14;3324:31;3316:86;;;;-1:-1:-1;;;3316:86:0;;;;;;;:::i;:::-;3413:20;3436:17;:8;3449:3;3436:12;:17::i;:::-;3413:40;-1:-1:-1;3464:14:0;3481:31;3413:40;3501:10;3481:19;:31::i;:::-;3464:48;-1:-1:-1;3523:16:0;3542:40;3566:15;3542:19;:9;3556:4;3542:13;:19::i;:::-;:23;;:40::i;:::-;3523:59;-1:-1:-1;3605:23:0;3523:59;3605:9;:23;:::i;:::-;3593:35;3115:521;-1:-1:-1;;;;;;;3115:521:0:o;4909:534::-;5010:21;5067:1;5052:4;:11;:16;;5044:61;;;;-1:-1:-1;;;5044:61:0;;23765:2:1;5044:61:0;;;23747:21:1;;;23784:18;;;23777:30;23843:34;23823:18;;;23816:62;23895:18;;5044:61:0;23563:356:1;5044:61:0;5137:4;:11;5126:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5126:23:0;;5116:33;;5190:9;5160:7;5185:1;5168:7;:14;:18;;;;:::i;:::-;5160:27;;;;;;;;:::i;:::-;;;;;;:39;;;;;5215:6;5238:1;5224:4;:11;:15;;;;:::i;:::-;5215:24;;5210:226;5241:5;;5210:226;;5269:14;;5304:42;5316:7;5325:4;5330:5;5334:1;5330;:5;:::i;:::-;5325:11;;;;;;;;:::i;:::-;;;;;;;5338:4;5343:1;5338:7;;;;;;;;:::i;:::-;;;;;;;5304:11;:42::i;:::-;5268:78;;;;5378:46;5390:7;5398:1;5390:10;;;;;;;;:::i;:::-;;;;;;;5402:9;5413:10;5378:11;:46::i;:::-;5361:7;5369:5;5373:1;5369;:5;:::i;:::-;5361:14;;;;;;;;:::i;:::-;;;;;;:63;;;;;5253:183;;5248:3;;;;;:::i;:::-;;;;5210:226;;;;4909:534;;;;;:::o;13861:231::-;13972:40;;-1:-1:-1;;;13972:40:0;;-1:-1:-1;;;;;16884:32:1;;;13972:40:0;;;16866:51:1;16933:18;;;16926:34;;;13972:26:0;;;;;16839:18:1;;13972:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14055:2;-1:-1:-1;;;;;14028:56:0;14049:4;-1:-1:-1;;;;;14028:56:0;14042:5;-1:-1:-1;;;;;14028:56:0;;14059:6;14067:5;12722:9;;12650:89;14067:5;14028:56;;;21196:25:1;;;21252:2;21237:18;;21230:34;;;;21280:18;;21273:34;;;21184:2;21169:18;14028:56:0;20994:319:1;4315:513:0;4416:21;4473:1;4458:4;:11;:16;;4450:61;;;;-1:-1:-1;;;4450:61:0;;23765:2:1;4450:61:0;;;23747:21:1;;;23784:18;;;23777:30;23843:34;23823:18;;;23816:62;23895:18;;4450:61:0;23563:356:1;4450:61:0;4543:4;:11;4532:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4532:23:0;;4522:33;;4579:8;4566:7;4574:1;4566:10;;;;;;;;:::i;:::-;;;;;;:21;;;;;4603:6;4598:223;4629:1;4615:4;:11;:15;;;;:::i;:::-;4611:1;:19;4598:223;;;4653:14;4669:15;4688:42;4700:7;4709:4;4714:1;4709:7;;;;;;;;:::i;:::-;;;;;;;4718:4;4723:1;4727;4723:5;;;;:::i;:::-;4718:11;;;;;;;;:::i;4688:42::-;4652:78;;;;4762:47;4775:7;4783:1;4775:10;;;;;;;;:::i;:::-;;;;;;;4787:9;4798:10;4762:12;:47::i;:::-;4745:7;4753:5;:1;4757;4753:5;:::i;:::-;4745:14;;;;;;;;:::i;:::-;;;;;;:64;;;;;4637:184;;4632:3;;;;;:::i;:::-;;;;4598:223;;1614:490;1703:12;1729:14;1745;1763:26;1774:6;1782;1763:10;:26::i;:::-;1938:32;;-1:-1:-1;;24292:2:1;24288:15;;;24284:24;;1938:32:0;;;24272:37:1;24343:15;;;24339:24;24325:12;;;24318:46;1728:61:0;;-1:-1:-1;1728:61:0;-1:-1:-1;1902:7:0;;24380:12:1;;1938:32:0;;;;;;;;;;;;1928:43;;;;;;1841:251;;;;;;;;-1:-1:-1;;;;;;24762:26:1;;24825:2;24821:15;;;;-1:-1:-1;;24817:53:1;24813:1;24804:11;;24797:74;24896:2;24887:12;;24880:28;24938:66;24933:2;24924:12;;24917:88;25030:2;25021:12;;24403:636;1841:251:0;;;;-1:-1:-1;;1841:251:0;;;;;;;;;1831:262;;1841:251;1831:262;;;;;1614:490;-1:-1:-1;;;;;;1614:490:0:o;19752:743::-;19859:6;19854:634;19885:1;19871:4;:11;:15;;;;:::i;:::-;19867:1;:19;19854:634;;;19909:13;19924:14;19943:4;19948:1;19943:7;;;;;;;;:::i;:::-;;;;;;;19952:4;19957:1;19961;19957:5;;;;:::i;:::-;19952:11;;;;;;;;:::i;:::-;;;;;;;19908:56;;;;19980:14;19999:44;20029:5;20036:6;19999:29;:44::i;:::-;-1:-1:-1;19979:64:0;-1:-1:-1;20058:14:0;20075:7;20083:5;:1;20087;20083:5;:::i;:::-;20075:14;;;;;;;;:::i;:::-;;;;;;;20058:31;;20105:15;20122;20150:6;-1:-1:-1;;;;;20141:15:0;:5;-1:-1:-1;;;;;20141:15:0;;:61;;20183:9;20199:1;20141:61;;;20165:1;20169:9;20141:61;20104:98;;;;20217:10;20248:1;20234:4;:11;:15;;;;:::i;:::-;20230:1;:19;:84;;20311:3;20230:84;;;20252:56;20279:7;20288:6;20296:4;20301:5;:1;20305;20301:5;:::i;:::-;20296:11;;;;;;;;:::i;:::-;;;;;;;20252:26;:56::i;:::-;20217:97;;20346:50;20373:7;20382:5;20389:6;20346:26;:50::i;:::-;-1:-1:-1;;;;;20329:73:0;;20421:10;20433;20445:2;20459:1;20449:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20449:12:0;;20329:147;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19893:595;;;;;;;19888:3;;;;;:::i;:::-;;;;19854:634;;3757:476;3850:13;3896:1;3884:9;:13;3876:72;;;;-1:-1:-1;;;3876:72:0;;25710:2:1;3876:72:0;;;25692:21:1;25749:2;25729:18;;;25722:30;-1:-1:-1;;;;;;;;;;;25768:18:1;;;25761:62;-1:-1:-1;;;25839:18:1;;;25832:44;25893:19;;3876:72:0;25508:410:1;3876:72:0;3979:1;3967:9;:13;:31;;;;;3997:1;3984:10;:14;3967:31;3959:86;;;;-1:-1:-1;;;3959:86:0;;;;;;;:::i;:::-;4056:14;4073:34;4102:4;4073:24;:9;4087;4073:13;:24::i;:::-;:28;;:34::i;:::-;4056:51;-1:-1:-1;4118:16:0;4137:34;4167:3;4137:25;:10;4152:9;4137:14;:25::i;:34::-;4118:53;-1:-1:-1;4193:32:0;4223:1;4194:23;4118:53;4194:9;:23;:::i;4193:32::-;4182:43;3757:476;-1:-1:-1;;;;;;3757:476:0:o;2668:325::-;2750:12;2793:1;2783:7;:11;2775:63;;;;-1:-1:-1;;;2775:63:0;;26125:2:1;2775:63:0;;;26107:21:1;26164:2;26144:18;;;26137:30;-1:-1:-1;;;;;;;;;;;26183:18:1;;;26176:62;-1:-1:-1;;;26254:18:1;;;26247:37;26301:19;;2775:63:0;25923:403:1;2775:63:0;2868:1;2857:8;:12;:28;;;;;2884:1;2873:8;:12;2857:28;2849:83;;;;-1:-1:-1;;;2849:83:0;;;;;;;:::i;:::-;2977:8;2953:21;:7;2965:8;2953:11;:21::i;:::-;:32;;;;:::i;9845:598::-;9933:27;9941:5;-1:-1:-1;;;;;9933:25:0;;:27::i;:::-;9925:71;;;;-1:-1:-1;;;9925:71:0;;26533:2:1;9925:71:0;;;26515:21:1;26572:2;26552:18;;;26545:30;26611:33;26591:18;;;26584:61;26662:18;;9925:71:0;26331:355:1;9925:71:0;10070:12;10084:23;10119:5;-1:-1:-1;;;;;10111:19:0;10131:4;10111:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10069:67;;;;10155:7;10147:52;;;;-1:-1:-1;;;10147:52:0;;26893:2:1;10147:52:0;;;26875:21:1;;;26912:18;;;26905:30;26971:34;26951:18;;;26944:62;27023:18;;10147:52:0;26691:356:1;10147:52:0;10216:17;;:21;10212:224;;10358:10;10347:30;;;;;;;;;;;;:::i;:::-;10339:85;;;;-1:-1:-1;;;10339:85:0;;27254:2:1;10339:85:0;;;27236:21:1;27293:2;27273:18;;;27266:30;27332:34;27312:18;;;27305:62;-1:-1:-1;;;27383:18:1;;;27376:40;27433:19;;10339:85:0;27052:406:1;808:178:0;860:6;912;;;:30;;-1:-1:-1;;927:5:0;;;941:1;936;927:5;936:1;922:15;;;;:::i;:::-;;:20;912:30;904:63;;;;-1:-1:-1;;;904:63:0;;27665:2:1;904:63:0;;;27647:21:1;27704:2;27684:18;;;27677:30;-1:-1:-1;;;27723:18:1;;;27716:50;27783:18;;904:63:0;27463:344:1;463:164:0;572:5;;;567:16;;;;559:49;;;;-1:-1:-1;;;559:49:0;;28014:2:1;559:49:0;;;27996:21:1;28053:2;28033:18;;;28026:30;-1:-1:-1;;;28072:18:1;;;28065:50;28132:18;;559:49:0;27812:344:1;2162:393:0;2255:13;2270;2297:14;2316:26;2327:6;2335;2316:10;:26::i;:::-;2296:46;;;2354:13;2369;2404:32;2412:7;2421:6;2429;2404:7;:32::i;:::-;-1:-1:-1;;;;;2387:62:0;;:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2353:98;-1:-1:-1;;;;;2353:98:0;;;-1:-1:-1;;;;;2353:98:0;;;2495:6;-1:-1:-1;;;;;2485:16:0;:6;-1:-1:-1;;;;;2485:16:0;;:62;;2528:8;2538;2485:62;;;2505:8;2515;2485:62;2462:85;;;;-1:-1:-1;2162:393:0;-1:-1:-1;;;;;;;2162:393:0:o;1169:353::-;1244:14;1260;1305:6;-1:-1:-1;;;;;1295:16:0;:6;-1:-1:-1;;;;;1295:16:0;;1287:68;;;;-1:-1:-1;;;1287:68:0;;29011:2:1;1287:68:0;;;28993:21:1;29050:2;29030:18;;;29023:30;29089:34;29069:18;;;29062:62;-1:-1:-1;;;29140:18:1;;;29133:37;29187:19;;1287:68:0;28809:403:1;1287:68:0;1394:6;-1:-1:-1;;;;;1385:15:0;:6;-1:-1:-1;;;;;1385:15:0;;:53;;1423:6;1431;1385:53;;;1404:6;1412;1385:53;1366:72;;-1:-1:-1;1366:72:0;-1:-1:-1;;;;;;1457:20:0;;1449:65;;;;-1:-1:-1;;;1449:65:0;;29419:2:1;1449:65:0;;;29401:21:1;;;29438:18;;;29431:30;29497:34;29477:18;;;29470:62;29549:18;;1449:65:0;29217:356:1;1449:65:0;1169:353;;;;;:::o;635:165::-;744:5;;;739:16;;;;731:50;;;;-1:-1:-1;;;731:50:0;;29780:2:1;731:50:0;;;29762:21:1;29819:2;29799:18;;;29792:30;-1:-1:-1;;;29838:18:1;;;29831:51;29899:18;;731:50:0;29578:345:1;8665:374:0;8725:4;8948:20;;8791:66;8988:15;;;;;:42;;-1:-1:-1;9007:23:0;;;8980:51;-1:-1:-1;;8665:374:0:o;14:127:1:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:131;-1:-1:-1;;;;;221:31:1;;211:42;;201:70;;267:1;264;257:12;282:594;377:6;385;393;401;409;462:3;450:9;441:7;437:23;433:33;430:53;;;479:1;476;469:12;430:53;515:9;502:23;492:33;;575:2;564:9;560:18;547:32;588:31;613:5;588:31;:::i;:::-;638:5;-1:-1:-1;695:2:1;680:18;;667:32;708:33;667:32;708:33;:::i;:::-;282:594;;;;-1:-1:-1;760:7:1;;814:2;799:18;;786:32;;-1:-1:-1;865:3:1;850:19;837:33;;282:594;-1:-1:-1;;282:594:1:o;881:127::-;942:10;937:3;933:20;930:1;923:31;973:4;970:1;963:15;997:4;994:1;987:15;1013:275;1084:2;1078:9;1149:2;1130:13;;-1:-1:-1;;1126:27:1;1114:40;;1184:18;1169:34;;1205:22;;;1166:62;1163:88;;;1231:18;;:::i;:::-;1267:2;1260:22;1013:275;;-1:-1:-1;1013:275:1:o;1293:531::-;1336:5;1389:3;1382:4;1374:6;1370:17;1366:27;1356:55;;1407:1;1404;1397:12;1356:55;1443:6;1430:20;1469:18;1465:2;1462:26;1459:52;;;1491:18;;:::i;:::-;1535:55;1578:2;1559:13;;-1:-1:-1;;1555:27:1;1584:4;1551:38;1535:55;:::i;:::-;1615:2;1606:7;1599:19;1661:3;1654:4;1649:2;1641:6;1637:15;1633:26;1630:35;1627:55;;;1678:1;1675;1668:12;1627:55;1743:2;1736:4;1728:6;1724:17;1717:4;1708:7;1704:18;1691:55;1791:1;1766:16;;;1784:4;1762:27;1755:38;;;;1770:7;1293:531;-1:-1:-1;;;1293:531:1:o;1829:594::-;1925:6;1933;1941;1949;2002:3;1990:9;1981:7;1977:23;1973:33;1970:53;;;2019:1;2016;2009:12;1970:53;2058:9;2045:23;2077:31;2102:5;2077:31;:::i;:::-;2127:5;-1:-1:-1;2183:2:1;2168:18;;2155:32;2210:18;2199:30;;2196:50;;;2242:1;2239;2232:12;2196:50;2265;2307:7;2298:6;2287:9;2283:22;2265:50;:::i;:::-;1829:594;;2255:60;;-1:-1:-1;;;;2362:2:1;2347:18;;2334:32;;2413:2;2398:18;2385:32;;1829:594;-1:-1:-1;1829:594:1:o;2428:316::-;2505:6;2513;2521;2574:2;2562:9;2553:7;2549:23;2545:32;2542:52;;;2590:1;2587;2580:12;2542:52;-1:-1:-1;;2613:23:1;;;2683:2;2668:18;;2655:32;;-1:-1:-1;2734:2:1;2719:18;;;2706:32;;2428:316;-1:-1:-1;2428:316:1:o;2931:118::-;3017:5;3010:13;3003:21;2996:5;2993:32;2983:60;;3039:1;3036;3029:12;3054:241;3110:6;3163:2;3151:9;3142:7;3138:23;3134:32;3131:52;;;3179:1;3176;3169:12;3131:52;3218:9;3205:23;3237:28;3259:5;3237:28;:::i;:::-;3284:5;3054:241;-1:-1:-1;;;3054:241:1:o;3300:367::-;3363:8;3373:6;3427:3;3420:4;3412:6;3408:17;3404:27;3394:55;;3445:1;3442;3435:12;3394:55;-1:-1:-1;3468:20:1;;3511:18;3500:30;;3497:50;;;3543:1;3540;3533:12;3497:50;3580:4;3572:6;3568:17;3556:29;;3640:3;3633:4;3623:6;3620:1;3616:14;3608:6;3604:27;3600:38;3597:47;3594:67;;;3657:1;3654;3647:12;3672:847;3803:6;3811;3819;3827;3835;3843;3851;3904:3;3892:9;3883:7;3879:23;3875:33;3872:53;;;3921:1;3918;3911:12;3872:53;3957:9;3944:23;3934:33;;4014:2;4003:9;3999:18;3986:32;3976:42;;4069:2;4058:9;4054:18;4041:32;4096:18;4088:6;4085:30;4082:50;;;4128:1;4125;4118:12;4082:50;4167:70;4229:7;4220:6;4209:9;4205:22;4167:70;:::i;:::-;4256:8;;-1:-1:-1;4141:96:1;-1:-1:-1;;4341:2:1;4326:18;;4313:32;4354:31;4313:32;4354:31;:::i;:::-;3672:847;;;;-1:-1:-1;3672:847:1;;;;4404:5;4456:3;4441:19;;4428:33;;-1:-1:-1;4508:3:1;4493:19;;;4480:33;;3672:847;-1:-1:-1;;3672:847:1:o;4524:1089::-;4617:6;4625;4678:2;4666:9;4657:7;4653:23;4649:32;4646:52;;;4694:1;4691;4684:12;4646:52;4730:9;4717:23;4707:33;;4759:2;4812;4801:9;4797:18;4784:32;4835:18;4876:2;4868:6;4865:14;4862:34;;;4892:1;4889;4882:12;4862:34;4930:6;4919:9;4915:22;4905:32;;4975:7;4968:4;4964:2;4960:13;4956:27;4946:55;;4997:1;4994;4987:12;4946:55;5033:2;5020:16;5055:2;5051;5048:10;5045:36;;;5061:18;;:::i;:::-;5107:2;5104:1;5100:10;5090:20;;5130:28;5154:2;5150;5146:11;5130:28;:::i;:::-;5192:15;;;5262:11;;;5258:20;;;5223:12;;;;5290:19;;;5287:39;;;5322:1;5319;5312:12;5287:39;5346:11;;;;5366:217;5382:6;5377:3;5374:15;5366:217;;;5462:3;5449:17;5436:30;;5479:31;5504:5;5479:31;:::i;:::-;5523:18;;;5399:12;;;;5561;;;;5366:217;;;5602:5;5592:15;;;;;;;;4524:1089;;;;;:::o;5618:632::-;5789:2;5841:21;;;5911:13;;5814:18;;;5933:22;;;5760:4;;5789:2;6012:15;;;;5986:2;5971:18;;;5760:4;6055:169;6069:6;6066:1;6063:13;6055:169;;;6130:13;;6118:26;;6199:15;;;;6164:12;;;;6091:1;6084:9;6055:169;;;-1:-1:-1;6241:3:1;;5618:632;-1:-1:-1;;;;;;5618:632:1:o;6255:525::-;6341:6;6349;6357;6365;6418:3;6406:9;6397:7;6393:23;6389:33;6386:53;;;6435:1;6432;6425:12;6386:53;6474:9;6461:23;6493:31;6518:5;6493:31;:::i;:::-;6543:5;-1:-1:-1;6600:2:1;6585:18;;6572:32;6613:33;6572:32;6613:33;:::i;:::-;6255:525;;6665:7;;-1:-1:-1;;;;6719:2:1;6704:18;;6691:32;;6770:2;6755:18;6742:32;;6255:525::o;6785:1720::-;7015:6;7023;7031;7039;7047;7055;7063;7071;7079;7087;7140:3;7128:9;7119:7;7115:23;7111:33;7108:53;;;7157:1;7154;7147:12;7108:53;7197:9;7184:23;7226:18;7267:2;7259:6;7256:14;7253:34;;;7283:1;7280;7273:12;7253:34;7322:70;7384:7;7375:6;7364:9;7360:22;7322:70;:::i;:::-;7411:8;;-1:-1:-1;7296:96:1;-1:-1:-1;7499:2:1;7484:18;;7471:32;;-1:-1:-1;7515:16:1;;;7512:36;;;7544:1;7541;7534:12;7512:36;7583:72;7647:7;7636:8;7625:9;7621:24;7583:72;:::i;:::-;7674:8;;-1:-1:-1;7557:98:1;-1:-1:-1;7762:2:1;7747:18;;7734:32;;-1:-1:-1;7778:16:1;;;7775:36;;;7807:1;7804;7797:12;7775:36;7846:72;7910:7;7899:8;7888:9;7884:24;7846:72;:::i;:::-;7937:8;;-1:-1:-1;7820:98:1;-1:-1:-1;8025:2:1;8010:18;;7997:32;;-1:-1:-1;8041:16:1;;;8038:36;;;8070:1;8067;8060:12;8038:36;8109:72;8173:7;8162:8;8151:9;8147:24;8109:72;:::i;:::-;8200:8;;-1:-1:-1;8083:98:1;-1:-1:-1;8288:3:1;8273:19;;8260:33;;-1:-1:-1;8305:16:1;;;8302:36;;;8334:1;8331;8324:12;8302:36;;8373:72;8437:7;8426:8;8415:9;8411:24;8373:72;:::i;:::-;8347:98;;8464:8;8454:18;;;8491:8;8481:18;;;6785:1720;;;;;;;;;;;;;:::o;8510:916::-;8650:6;8658;8666;8674;8682;8690;8698;8706;8759:3;8747:9;8738:7;8734:23;8730:33;8727:53;;;8776:1;8773;8766:12;8727:53;8812:9;8799:23;8789:33;;8869:2;8858:9;8854:18;8841:32;8831:42;;8920:2;8909:9;8905:18;8892:32;8882:42;;8975:2;8964:9;8960:18;8947:32;9002:18;8994:6;8991:30;8988:50;;;9034:1;9031;9024:12;8988:50;9073:70;9135:7;9126:6;9115:9;9111:22;9073:70;:::i;:::-;9162:8;;-1:-1:-1;9047:96:1;-1:-1:-1;;9247:3:1;9232:19;;9219:33;9261:31;9219:33;9261:31;:::i;:::-;8510:916;;;;-1:-1:-1;8510:916:1;;;;;;9311:5;;-1:-1:-1;;;9363:3:1;9348:19;;9335:33;;9415:3;9400:19;9387:33;;8510:916::o;9623:388::-;9691:6;9699;9752:2;9740:9;9731:7;9727:23;9723:32;9720:52;;;9768:1;9765;9758:12;9720:52;9807:9;9794:23;9826:31;9851:5;9826:31;:::i;:::-;9876:5;-1:-1:-1;9933:2:1;9918:18;;9905:32;9946:33;9905:32;9946:33;:::i;:::-;9998:7;9988:17;;;9623:388;;;;;:::o;10016:525::-;10103:6;10111;10119;10172:2;10160:9;10151:7;10147:23;10143:32;10140:52;;;10188:1;10185;10178:12;10140:52;10227:9;10214:23;10246:31;10271:5;10246:31;:::i;:::-;10296:5;-1:-1:-1;10352:2:1;10337:18;;10324:32;10379:18;10368:30;;10365:50;;;10411:1;10408;10401:12;10365:50;10434;10476:7;10467:6;10456:9;10452:22;10434:50;:::i;:::-;10424:60;;;10531:2;10520:9;10516:18;10503:32;10493:42;;10016:525;;;;;:::o;10546:247::-;10605:6;10658:2;10646:9;10637:7;10633:23;10629:32;10626:52;;;10674:1;10671;10664:12;10626:52;10713:9;10700:23;10732:31;10757:5;10732:31;:::i;10798:456::-;10875:6;10883;10891;10944:2;10932:9;10923:7;10919:23;10915:32;10912:52;;;10960:1;10957;10950:12;10912:52;10999:9;10986:23;11018:31;11043:5;11018:31;:::i;:::-;11068:5;-1:-1:-1;11120:2:1;11105:18;;11092:32;;-1:-1:-1;11176:2:1;11161:18;;11148:32;11189:33;11148:32;11189:33;:::i;:::-;11241:7;11231:17;;;10798:456;;;;;:::o;11259:315::-;11327:6;11335;11388:2;11376:9;11367:7;11363:23;11359:32;11356:52;;;11404:1;11401;11394:12;11356:52;11443:9;11430:23;11462:31;11487:5;11462:31;:::i;:::-;11512:5;11564:2;11549:18;;;;11536:32;;-1:-1:-1;;;11259:315:1:o;11787:456::-;11864:6;11872;11880;11933:2;11921:9;11912:7;11908:23;11904:32;11901:52;;;11949:1;11946;11939:12;11901:52;11988:9;11975:23;12007:31;12032:5;12007:31;:::i;:::-;12057:5;-1:-1:-1;12114:2:1;12099:18;;12086:32;12127:33;12086:32;12127:33;:::i;:::-;11787:456;;12179:7;;-1:-1:-1;;;12233:2:1;12218:18;;;;12205:32;;11787:456::o;12248:1404::-;12442:6;12450;12458;12466;12474;12482;12490;12498;12551:3;12539:9;12530:7;12526:23;12522:33;12519:53;;;12568:1;12565;12558:12;12519:53;12608:9;12595:23;12637:18;12678:2;12670:6;12667:14;12664:34;;;12694:1;12691;12684:12;12664:34;12733:70;12795:7;12786:6;12775:9;12771:22;12733:70;:::i;:::-;12822:8;;-1:-1:-1;12707:96:1;-1:-1:-1;12910:2:1;12895:18;;12882:32;;-1:-1:-1;12926:16:1;;;12923:36;;;12955:1;12952;12945:12;12923:36;12994:72;13058:7;13047:8;13036:9;13032:24;12994:72;:::i;:::-;13085:8;;-1:-1:-1;12968:98:1;-1:-1:-1;13173:2:1;13158:18;;13145:32;;-1:-1:-1;13189:16:1;;;13186:36;;;13218:1;13215;13208:12;13186:36;13257:72;13321:7;13310:8;13299:9;13295:24;13257:72;:::i;:::-;13348:8;;-1:-1:-1;13231:98:1;-1:-1:-1;13436:2:1;13421:18;;13408:32;;-1:-1:-1;13452:16:1;;;13449:36;;;13481:1;13478;13471:12;13449:36;;13520:72;13584:7;13573:8;13562:9;13558:24;13520:72;:::i;:::-;12248:1404;;;;-1:-1:-1;12248:1404:1;;-1:-1:-1;12248:1404:1;;;;;;13611:8;-1:-1:-1;;;12248:1404:1:o;13657:350::-;13859:2;13841:21;;;13898:2;13878:18;;;13871:30;13937:28;13932:2;13917:18;;13910:56;13998:2;13983:18;;13657:350::o;14012:251::-;14082:6;14135:2;14123:9;14114:7;14110:23;14106:32;14103:52;;;14151:1;14148;14141:12;14103:52;14183:9;14177:16;14202:31;14227:5;14202:31;:::i;14268:184::-;14338:6;14391:2;14379:9;14370:7;14366:23;14362:32;14359:52;;;14407:1;14404;14397:12;14359:52;-1:-1:-1;14430:16:1;;14268:184;-1:-1:-1;14268:184:1:o;14457:375::-;-1:-1:-1;;;;;14715:15:1;;;14697:34;;14762:2;14747:18;;14740:34;;;;14810:15;;;14805:2;14790:18;;14783:43;14647:2;14632:18;;14457:375::o;14837:258::-;14909:1;14919:113;14933:6;14930:1;14927:13;14919:113;;;15009:11;;;15003:18;14990:11;;;14983:39;14955:2;14948:10;14919:113;;;15050:6;15047:1;15044:13;15041:48;;;-1:-1:-1;;15085:1:1;15067:16;;15060:27;14837:258::o;15100:::-;15142:3;15180:5;15174:12;15207:6;15202:3;15195:19;15223:63;15279:6;15272:4;15267:3;15263:14;15256:4;15249:5;15245:16;15223:63;:::i;:::-;15340:2;15319:15;-1:-1:-1;;15315:29:1;15306:39;;;;15347:4;15302:50;;15100:258;-1:-1:-1;;15100:258:1:o;15363:435::-;15596:3;15585:9;15578:22;15559:4;15617:46;15658:3;15647:9;15643:19;15635:6;15617:46;:::i;:::-;15694:2;15679:18;;15672:34;;;;-1:-1:-1;15737:2:1;15722:18;;15715:34;;;;15780:2;15765:18;;;15758:34;15609:54;15363:435;-1:-1:-1;15363:435:1:o;15803:399::-;16005:2;15987:21;;;16044:2;16024:18;;;16017:30;16083:34;16078:2;16063:18;;16056:62;-1:-1:-1;;;16149:2:1;16134:18;;16127:33;16192:3;16177:19;;15803:399::o;16207:348::-;16409:2;16391:21;;;16448:2;16428:18;;;16421:30;16487:26;16482:2;16467:18;;16460:54;16546:2;16531:18;;16207:348::o;16560:127::-;16621:10;16616:3;16612:20;16609:1;16602:31;16652:4;16649:1;16642:15;16676:4;16673:1;16666:15;16971:245;17038:6;17091:2;17079:9;17070:7;17066:23;17062:32;17059:52;;;17107:1;17104;17097:12;17059:52;17139:9;17133:16;17158:28;17180:5;17158:28;:::i;17221:1001::-;17533:3;17546:22;;;17518:19;;17603:22;;;17485:4;17683:6;17656:3;17641:19;;17485:4;17717:304;17731:6;17728:1;17725:13;17717:304;;;17806:6;17793:20;17826:31;17851:5;17826:31;:::i;:::-;-1:-1:-1;;;;;17882:31:1;17870:44;;17937:4;17996:15;;;;17961:12;;;;17910:1;17746:9;17717:304;;;-1:-1:-1;18072:4:1;18057:20;;18050:36;;;;-1:-1:-1;;18117:2:1;18102:18;;18095:34;;;;18160:2;18145:18;;18138:34;;;;18203:3;18188:19;;;18181:35;18038:3;17221:1001;-1:-1:-1;;17221:1001:1:o;18227:127::-;18288:10;18283:3;18279:20;18276:1;18269:31;18319:4;18316:1;18309:15;18343:4;18340:1;18333:15;18359:135;18398:3;18419:17;;;18416:43;;18439:18;;:::i;:::-;-1:-1:-1;18486:1:1;18475:13;;18359:135::o;18499:125::-;18539:4;18567:1;18564;18561:8;18558:34;;;18572:18;;:::i;:::-;-1:-1:-1;18609:9:1;;18499:125::o;20171:406::-;20373:2;20355:21;;;20412:2;20392:18;;;20385:30;20451:34;20446:2;20431:18;;20424:62;-1:-1:-1;;;20517:2:1;20502:18;;20495:40;20567:3;20552:19;;20171:406::o;20582:128::-;20622:3;20653:1;20649:6;20646:1;20643:13;20640:39;;;20659:18;;:::i;:::-;-1:-1:-1;20695:9:1;;20582:128::o;21318:274::-;21447:3;21485:6;21479:13;21501:53;21547:6;21542:3;21535:4;21527:6;21523:17;21501:53;:::i;:::-;21570:16;;;;;21318:274;-1:-1:-1;;21318:274:1:o;22798:406::-;23000:2;22982:21;;;23039:2;23019:18;;;23012:30;-1:-1:-1;;;;;;;;;;;23073:2:1;23058:18;;23051:62;-1:-1:-1;;;23144:2:1;23129:18;;23122:40;23194:3;23179:19;;22798:406::o;23209:127::-;23270:10;23265:3;23261:20;23258:1;23251:31;23301:4;23298:1;23291:15;23325:4;23322:1;23315:15;23341:217;23381:1;23407;23397:132;;23451:10;23446:3;23442:20;23439:1;23432:31;23486:4;23483:1;23476:15;23514:4;23511:1;23504:15;23397:132;-1:-1:-1;23543:9:1;;23341:217::o;23924:136::-;23963:3;23991:5;23981:39;;24000:18;;:::i;:::-;-1:-1:-1;;;24036:18:1;;23924:136::o;25044:459::-;25275:6;25264:9;25257:25;25318:6;25313:2;25302:9;25298:18;25291:34;25390:1;25386;25381:3;25377:11;25373:19;25365:6;25361:32;25356:2;25345:9;25341:18;25334:60;25430:3;25425:2;25414:9;25410:18;25403:31;25238:4;25451:46;25492:3;25481:9;25477:19;25469:6;25451:46;:::i;28161:188::-;28240:13;;-1:-1:-1;;;;;28282:42:1;;28272:53;;28262:81;;28339:1;28336;28329:12;28354:450;28441:6;28449;28457;28510:2;28498:9;28489:7;28485:23;28481:32;28478:52;;;28526:1;28523;28516:12;28478:52;28549:40;28579:9;28549:40;:::i;:::-;28539:50;;28608:49;28653:2;28642:9;28638:18;28608:49;:::i;:::-;28598:59;;28700:2;28689:9;28685:18;28679:25;28744:10;28737:5;28733:22;28726:5;28723:33;28713:61;;28770:1;28767;28760:12

Swarm Source

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