Contract 0xf27ee99622c3c9b264583dacb2cce056e194494f 7

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x2f310fc7412a21b0ce0578663d33ad6d3a8a01637236eda1e155edf48ac9c2aaAny Swap Out Und...68833712023-02-09 11:12:0158 mins ago0x083e958db271a5ba105c0878a94507fe37f25446 IN  0xf27ee99622c3c9b264583dacb2cce056e194494f0 CRO0.362626141705 4,817.415597752
0x9f05db8f36e1dbef91bc57f7be4ec8f5a26a2bf293141e5dd60a09123bc2de3dAny Swap Out Und...68832232023-02-09 10:58:051 hr 12 mins ago0x083e958db271a5ba105c0878a94507fe37f25446 IN  0xf27ee99622c3c9b264583dacb2cce056e194494f0 CRO0.362626663697 4,817.422532321
0x3f6d71e7a761312b1378231a129e324bf4a55555f7e7c0790638893b62e29063Any Swap In Auto68822132023-02-09 9:23:032 hrs 47 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  0xf27ee99622c3c9b264583dacb2cce056e194494f0 CRO0.4567087627680
0xcd63dd1ff220f6e58c3bffec210d0c959e052e505c794960561c8bef2d1f038dAny Swap Out Und...68810372023-02-09 7:32:264 hrs 38 mins ago0x3f83f93ee57feeb0ff225b921141d71b286ee749 IN  0xf27ee99622c3c9b264583dacb2cce056e194494f0 CRO0.362688199796 4,817.024156249
0x14296c56229d2d18aa3c8af1c75a3ef4d63795a4e51cf4a8ea99261b2fb940caAny Swap Out68748912023-02-08 21:53:2214 hrs 17 mins ago0xe0129cf752099d79deb241e9289df68bc6e96882 IN  0xf27ee99622c3c9b264583dacb2cce056e194494f0 CRO0.210349628140
0x34fce89b95d7adf178555fa9cc4ed81e63ce07c407c69c7f323b5570f0cc37c0Any Swap Out68742692023-02-08 20:54:4615 hrs 16 mins ago0x8bd39b9c46de57c02c8410cbf3c44f70f75524f6 IN  0xf27ee99622c3c9b264583dacb2cce056e194494f0 CRO0.2098837319380
0x770ff45de8e858bda502e18c36e90de51dca6672ab0b27f64f6713f56c34cdf9Any Swap Out68735642023-02-08 19:48:2116 hrs 22 mins ago0x820cdf87f1a6e90b0cd05d53753b60c8b06e9437 IN  0xf27ee99622c3c9b264583dacb2cce056e194494f0 CRO0.18729441382 4,817.367057284
0x700e35f109d0da961952ed284d73b17d9cfd82942868dc76cf29174debb715a0Any Swap Out68734462023-02-08 19:37:1516 hrs 33 mins ago0x820cdf87f1a6e90b0cd05d53753b60c8b06e9437 IN  0xf27ee99622c3c9b264583dacb2cce056e194494f0 CRO0.187410241128 4,817.372468149
0x9370f07c02e97517c1958f0e6951e193ac8ad1c04301aebeb20d82a18f273301Any Swap In Auto68728782023-02-08 18:43:4317 hrs 27 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  0xf27ee99622c3c9b264583dacb2cce056e194494f0 CRO0.4654744011360
0xd4b01bbad8910baec889f1d11274cfcc3d1209754b4957136340b6a5074f5991Any Swap In Auto68728762023-02-08 18:43:3217 hrs 27 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  0xf27ee99622c3c9b264583dacb2cce056e194494f0 CRO0.5378910710770
0xe0e3a8413562c9b9399415da1ab87760d656ee5a105358c00cca9261188f1c12Any Swap In Auto68716332023-02-08 16:46:3019 hrs 24 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  0xf27ee99622c3c9b264583dacb2cce056e194494f0 CRO0.3519904166740
0x83cd5476deca81cfe7b367b2172ab87345ff3ea05a1ff51a7ad3b641e2ed2f53Any Swap Out68714392023-02-08 16:28:1219 hrs 42 mins ago0xf12f8f40096d7e2399ac11590a128f091480a5f6 IN  0xf27ee99622c3c9b264583dacb2cce056e194494f0 CRO0.186830850941 4,817.463022574
0x13674b368b79da118ee89e8940121ce73532ce11674de570652260fd1eec5abdAny Swap In Auto68713352023-02-08 16:18:2319 hrs 52 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  0xf27ee99622c3c9b264583dacb2cce056e194494f0 CRO0.528903541370
0x7244e6a5b175dd6ace5a8516e722951b59eedd886a7324bb7e9c911b30bedb22Any Swap In Auto68707812023-02-08 15:26:1020 hrs 44 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  0xf27ee99622c3c9b264583dacb2cce056e194494f0 CRO0.2613408024380
0xf0722722a502277a0bf934e020a6198f6cbfbc94e28f3fda9cb7cba88a85d315Any Swap In Auto68698312023-02-08 13:56:2922 hrs 14 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  0xf27ee99622c3c9b264583dacb2cce056e194494f0 CRO0.5412227147440
0x99e4c570f2c67098ae51f42a912d0b6d23eb14c1761a1a8153b18ea19c476c53Any Swap In Auto68681612023-02-08 11:19:101 day 51 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  0xf27ee99622c3c9b264583dacb2cce056e194494f0 CRO0.4852713547220
0x6d8e6675b139a8abe754a86a6a0e99b3af4994cfcb3eca330c7144e606ea84dcAny Swap In Auto68681532023-02-08 11:18:251 day 52 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  0xf27ee99622c3c9b264583dacb2cce056e194494f0 CRO0.4562981514750
0x2ade0d1105216bc9d2d92839c1ad2c2a651cb234109714921c899d2b8d8ec977Any Swap In Auto68656782023-02-08 7:25:351 day 4 hrs ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  0xf27ee99622c3c9b264583dacb2cce056e194494f0 CRO0.4565897576460
0xce34d79752fca4e1ebce5f2fc7ae990fb94e791cac512955b4ba214c73f95559Any Swap Out Und...68628392023-02-08 2:58:411 day 9 hrs ago0xf58d5b955b57312847c95f51a2c31fd54a224230 IN  0xf27ee99622c3c9b264583dacb2cce056e194494f0 CRO0.362659358793 4,817.856880115
0xea35b595b03ab57bd3552e0bc8f57f567869b88318f5f9e03feb29c494e9bb79Any Swap Out68627502023-02-08 2:50:191 day 9 hrs ago0x1abedd35d082a77b43bb39c2140446e0aa068f2b IN  0xf27ee99622c3c9b264583dacb2cce056e194494f0 CRO0.193969987862 4,999.999687141
0x85202272a8eb8bff1288d77ab955c2edee6ee7f7efd02eb83051b636c4df5d06Any Swap In Auto68621002023-02-08 1:49:161 day 10 hrs ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  0xf27ee99622c3c9b264583dacb2cce056e194494f0 CRO0.3520858967650
0x82971ab867d10cf4d8c0282c6af97e151dcac4c2f9778684fbbeb90a1f5437b5Any Swap In Auto68617682023-02-08 1:18:011 day 10 hrs ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  0xf27ee99622c3c9b264583dacb2cce056e194494f0 CRO0.2614268242950
0x5e19a3965db04b8b6dff4060e18c2892b59b5d6ae8c224675a9cab55ea4ea609Any Swap Out68607292023-02-07 23:40:191 day 12 hrs ago0xfa093fc8109099986f170c775fec8ccd5aef939f IN  0xf27ee99622c3c9b264583dacb2cce056e194494f0 CRO0.210501208474 4,817.953548211
0x7cd560d68cb6464c34441f399933eca2a488793f902a56f455c5d45ffb24c28dAny Swap Out68607182023-02-07 23:39:171 day 12 hrs ago0xfa093fc8109099986f170c775fec8ccd5aef939f IN  0xf27ee99622c3c9b264583dacb2cce056e194494f0 CRO0.210479384817 4,817.454048148
0x4341e57b7df6142021b06f56df48a6838b17f0e1be8f7f6b48ae0adfd903db73Any Swap Out Und...68604592023-02-07 23:14:491 day 12 hrs ago0xf58d5b955b57312847c95f51a2c31fd54a224230 IN  0xf27ee99622c3c9b264583dacb2cce056e194494f0 CRO0.362667557483 4,817.96579806
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c

Contract Name:
AnyswapV3Router

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-01-12
*/

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

pragma solidity >=0.8.2;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

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

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

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

library 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 ISushiswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

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

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

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

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

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 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 permit(address target, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    function transferWithPermit(address target, address to, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) 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 AnyswapV3Router {
    using SafeERC20 for IERC20;
    using SafeMathSushiswap for uint;

    address public immutable factory;
    address public immutable wNATIVE;

    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 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 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 _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);
        AnyswapV1ERC20(token).depositVault(amount, msg.sender);
        _anySwapOut(msg.sender, token, to, amount, 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));
        AnyswapV1ERC20(token).depositVault(msg.value, msg.sender);
        _anySwapOut(msg.sender, token, to, msg.value, toChainID);
    }

    function anySwapOutUnderlyingWithPermit(
        address from,
        address token,
        address to,
        uint amount,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s,
        uint toChainID
    ) external {
        address _underlying = AnyswapV1ERC20(token).underlying();
        IERC20(_underlying).permit(from, address(this), amount, deadline, v, r, s);
        IERC20(_underlying).safeTransferFrom(from, token, amount);
        AnyswapV1ERC20(token).depositVault(amount, from);
        _anySwapOut(from, token, to, amount, toChainID);
    }

    function anySwapOutUnderlyingWithTransferPermit(
        address from,
        address token,
        address to,
        uint amount,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s,
        uint toChainID
    ) external {
        IERC20(AnyswapV1ERC20(token).underlying()).transferWithPermit(from, token, amount, deadline, v, r, s);
        AnyswapV1ERC20(token).depositVault(amount, from);
        _anySwapOut(from, token, to, amount, 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]);
        }
    }

    // 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 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 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);
    }

    // sets up a cross-chain trade from this chain to `toChainID` for `path` trades to `to`
    function anySwapOutExactTokensForTokensUnderlyingWithPermit(
        address from,
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s,
        uint toChainID
    ) external virtual ensure(deadline) {
        address _underlying = AnyswapV1ERC20(path[0]).underlying();
        IERC20(_underlying).permit(from, address(this), amountIn, deadline, v, r, s);
        IERC20(_underlying).safeTransferFrom(from, path[0], amountIn);
        AnyswapV1ERC20(path[0]).depositVault(amountIn, from);
        AnyswapV1ERC20(path[0]).burn(from, amountIn);
        {
        address[] memory _path = path;
        address _from = from;
        address _to = to;
        uint _amountIn = amountIn;
        uint _amountOutMin = amountOutMin;
        uint _cID = cID();
        uint _toChainID = toChainID;
        emit LogAnySwapTradeTokensForTokens(_path, _from, _to, _amountIn, _amountOutMin, _cID, _toChainID);
        }
    }

    // sets up a cross-chain trade from this chain to `toChainID` for `path` trades to `to`
    function anySwapOutExactTokensForTokensUnderlyingWithTransferPermit(
        address from,
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s,
        uint toChainID
    ) external virtual ensure(deadline) {
        IERC20(AnyswapV1ERC20(path[0]).underlying()).transferWithPermit(from, path[0], amountIn, deadline, v, r, s);
        AnyswapV1ERC20(path[0]).depositVault(amountIn, from);
        AnyswapV1ERC20(path[0]).burn(from, amountIn);
        emit LogAnySwapTradeTokensForTokens(path, from, 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 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 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 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);
    }

    // sets up a cross-chain trade from this chain to `toChainID` for `path` trades to `to`
    function anySwapOutExactTokensForNativeUnderlyingWithPermit(
        address from,
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s,
        uint toChainID
    ) external virtual ensure(deadline) {
        address _underlying = AnyswapV1ERC20(path[0]).underlying();
        IERC20(_underlying).permit(from, address(this), amountIn, deadline, v, r, s);
        IERC20(_underlying).safeTransferFrom(from, path[0], amountIn);
        AnyswapV1ERC20(path[0]).depositVault(amountIn, from);
        AnyswapV1ERC20(path[0]).burn(from, amountIn);
        {
        address[] memory _path = path;
        address _from = from;
        address _to = to;
        uint _amountIn = amountIn;
        uint _amountOutMin = amountOutMin;
        uint _cID = cID();
        uint _toChainID = toChainID;
        emit LogAnySwapTradeTokensForNative(_path, _from, _to, _amountIn, _amountOutMin, _cID, _toChainID);
        }
    }

    // sets up a cross-chain trade from this chain to `toChainID` for `path` trades to `to`
    function anySwapOutExactTokensForNativeUnderlyingWithTransferPermit(
        address from,
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s,
        uint toChainID
    ) external virtual ensure(deadline) {
        IERC20(AnyswapV1ERC20(path[0]).underlying()).transferWithPermit(from, path[0], amountIn, deadline, v, r, s);
        AnyswapV1ERC20(path[0]).depositVault(amountIn, from);
        AnyswapV1ERC20(path[0]).burn(from, amountIn);
        emit LogAnySwapTradeTokensForNative(path, from, 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 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":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":"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":"address","name":"from","type":"address"},{"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":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutExactTokensForNativeUnderlyingWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"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":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutExactTokensForNativeUnderlyingWithTransferPermit","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":"from","type":"address"},{"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":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutExactTokensForTokensUnderlyingWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"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":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutExactTokensForTokensUnderlyingWithTransferPermit","outputs":[],"stateMutability":"nonpayable","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":"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":"from","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutUnderlyingWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutUnderlyingWithTransferPermit","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":"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":[],"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"}]

60c06040523480156200001157600080fd5b506040516200504d3803806200504d833981016040819052620000349162000095565b600180546001600160a01b039092166001600160a01b0319909216919091179055426002556001600160601b0319606092831b8116608052911b1660a052620000df565b80516001600160a01b03811681146200009057600080fd5b919050565b600080600060608486031215620000ab57600080fd5b620000b68462000078565b9250620000c66020850162000078565b9150620000d66040850162000078565b90509250925092565b60805160601c60a05160601c614eb6620001976000396000818161020d0152818161051601528181610820015281816108ef015281816116270152818161181001528181611cc401528181611d8501528181611e0b01528181611f7d015281816120d301528181612aa001528181612b610152612be70152600081816105e801528181610cbf01528181610e6401528181610f7c015281816116d30152818161302401528181613b0a0152613b5a0152614eb66000f3fe6080604052600436106101fd5760003560e01c8063832e94921161010d578063a5e56571116100a0578063d06ca61f1161006f578063d06ca61f1461062a578063d8b9f6101461064a578063dcfb77b11461066a578063edbdf5e21461068a578063f75c2664146106aa57600080fd5b8063a5e56571146105a3578063ad615dec146105b6578063c45a0155146105d6578063c8e174f61461060a57600080fd5b80638fd903f5116100dc5780638fd903f51461050457806399a2f2d71461055057806399cd84b5146105635780639aa1ac611461058357600080fd5b8063832e94921461048457806385f8c259146104a457806387cc6e2f146104c45780638d7d3eea146104e457600080fd5b80633f88de89116101905780635b7b018c1161015f5780635b7b018c146103f157806365782f56146104115780636a45397214610431578063701bb89114610451578063825bb13c1461046457600080fd5b80633f88de8914610361578063456862aa146103815780634d93bb94146103b157806352a397d5146103d157600080fd5b80631f00ca74116101cc5780631f00ca74146102d4578063241dc2df1461030157806325121b76146103215780632fc1e7281461034157600080fd5b80630175b1c414610241578063054d50d4146102615780630bb57203146102945780631b91a934146102b457600080fd5b3661023c57336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461023a5761023a614df0565b005b600080fd5b34801561024d57600080fd5b5061023a61025c36600461477d565b6106bf565b34801561026d57600080fd5b5061028161027c366004614a07565b6109ed565b6040519081526020015b60405180910390f35b3480156102a057600080fd5b5061023a6102af36600461498a565b610a02565b3480156102c057600080fd5b5061023a6102cf366004614371565b610b22565b3480156102e057600080fd5b506102f46102ef3660046148b2565b610cb8565b60405161028b9190614b9e565b34801561030d57600080fd5b5061023a61031c36600461443d565b610cee565b34801561032d57600080fd5b5061023a61033c36600461466a565b610d01565b34801561034d57600080fd5b506102f461035c3660046147cf565b610e04565b34801561036d57600080fd5b5061023a61037c36600461477d565b61105d565b34801561038d57600080fd5b506103a161039c366004614338565b61112a565b604051901515815260200161028b565b3480156103bd57600080fd5b5061023a6103cc3660046144f1565b611235565b3480156103dd57600080fd5b506102f46103ec3660046147cf565b6115c2565b3480156103fd57600080fd5b506103a161040c3660046142f7565b6118e4565b34801561041d57600080fd5b5061023a61042c36600461498a565b611a0c565b34801561043d57600080fd5b5061023a61044c36600461498a565b611b0b565b61028161045f366004614338565b611cc0565b34801561047057600080fd5b5061023a61047f36600461477d565b611f2d565b34801561049057600080fd5b5061028161049f3660046144af565b611f79565b3480156104b057600080fd5b506102816104bf366004614a07565b612149565b3480156104d057600080fd5b5061023a6104df366004614483565b612156565b3480156104f057600080fd5b5061023a6104ff366004614371565b61229c565b34801561051057600080fd5b506105387f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161028b565b34801561055c57600080fd5b5046610281565b34801561056f57600080fd5b5061023a61057e3660046144f1565b61242e565b34801561058f57600080fd5b5061023a61059e3660046144f1565b612776565b61023a6105b13660046143fc565b612a9e565b3480156105c257600080fd5b506102816105d1366004614a07565b612d11565b3480156105e257600080fd5b506105387f000000000000000000000000000000000000000000000000000000000000000081565b34801561061657600080fd5b5061023a6106253660046144f1565b612d1e565b34801561063657600080fd5b506102f46106453660046148b2565b61301d565b34801561065657600080fd5b5061023a61066536600461498a565b61304a565b34801561067657600080fd5b5061023a6106853660046145a6565b613140565b34801561069657600080fd5b5061023a6106a536600461443d565b6131e6565b3480156106b657600080fd5b506105386132b3565b6106c76132b3565b6001600160a01b0316336001600160a01b0316146107005760405162461bcd60e51b81526004016106f790614c64565b60405180910390fd5b61070d85858585856132de565b60008490506000816001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561074d57600080fd5b505afa158015610761573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610785919061431b565b90506001600160a01b0381161580159061081957506040516370a0823160e01b81526001600160a01b0387811660048301528591908316906370a082319060240160206040518083038186803b1580156107de57600080fd5b505afa1580156107f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108169190614899565b10155b156109e4577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316141561096257604051620e75bb60e21b81526001600160a01b038316906239d6ec9061088690889088903090600401614aa9565b602060405180830381600087803b1580156108a057600080fd5b505af11580156108b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d89190614899565b50604051632e1a7d4d60e01b8152600481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561093b57600080fd5b505af115801561094f573d6000803e3d6000fd5b5050505061095d85856133c4565b6109e4565b604051620e75bb60e21b81526001600160a01b038316906239d6ec9061099090889088908290600401614aa9565b602060405180830381600087803b1580156109aa57600080fd5b505af11580156109be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e29190614899565b505b50505050505050565b60006109fa848484613490565b949350505050565b8142811015610a235760405162461bcd60e51b81526004016106f790614c9b565b85856000818110610a3657610a36614e1c565b9050602002016020810190610a4b91906142f7565b6001600160a01b0316639dc29fac338a6040518363ffffffff1660e01b8152600401610a78929190614a90565b602060405180830381600087803b158015610a9257600080fd5b505af1158015610aa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aca919061475b565b506001600160a01b038416337ffea6abdf4fd32f20966dff7619354cd82cd43dc78a3bee479f04c74dbfc585b388888c8c465b89604051610b1096959493929190614acc565b60405180910390a35050505050505050565b876001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015610b5b57600080fd5b505afa158015610b6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b93919061431b565b6001600160a01b031663605629d68a8a89898989896040518863ffffffff1660e01b8152600401610bca9796959493929190614a4f565b602060405180830381600087803b158015610be457600080fd5b505af1158015610bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1c919061475b565b50604051630bebbf4d60e41b8152600481018790526001600160a01b038a8116602483015289169063bebbf4d090604401602060405180830381600087803b158015610c6757600080fd5b505af1158015610c7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9f9190614899565b50610cad898989898561355e565b505050505050505050565b6060610ce57f00000000000000000000000000000000000000000000000000000000000000008484613642565b90505b92915050565b610cfb338585858561355e565b50505050565b610d096132b3565b6001600160a01b0316336001600160a01b031614610d395760405162461bcd60e51b81526004016106f790614c64565b60005b87811015610df757610de58b8b83818110610d5957610d59614e1c565b905060200201358a8a84818110610d7257610d72614e1c565b9050602002016020810190610d8791906142f7565b898985818110610d9957610d99614e1c565b9050602002016020810190610dae91906142f7565b888886818110610dc057610dc0614e1c565b90506020020135878787818110610dd957610dd9614e1c565b905060200201356132de565b80610def81614dd5565b915050610d3c565b5050505050505050505050565b6060610e0e6132b3565b6001600160a01b0316336001600160a01b031614610e3e5760405162461bcd60e51b81526004016106f790614c64565b8242811015610e5f5760405162461bcd60e51b81526004016106f790614c9b565b610ebd7f00000000000000000000000000000000000000000000000000000000000000008a8989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506137d892505050565b9150878260018451610ecf9190614d7b565b81518110610edf57610edf614e1c565b60200260200101511015610f4b5760405162461bcd60e51b815260206004820152602d60248201527f5375736869737761705632526f757465723a20494e53554646494349454e545f60448201526c13d55514155517d05353d55395609a1b60648201526084016106f7565b6110118a88886000818110610f6257610f62614e1c565b9050602002016020810190610f7791906142f7565b610ff07f00000000000000000000000000000000000000000000000000000000000000008b8b6000818110610fae57610fae614e1c565b9050602002016020810190610fc391906142f7565b8c8c6001818110610fd657610fd6614e1c565b9050602002016020810190610feb91906142f7565b61394e565b8560008151811061100357611003614e1c565b6020026020010151876132de565b611050828888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a9250613a27915050565b5098975050505050505050565b6110656132b3565b6001600160a01b0316336001600160a01b0316146110955760405162461bcd60e51b81526004016106f790614c64565b6110a285858585856132de565b604051620e75bb60e21b81526001600160a01b038516906239d6ec906110d090869086908290600401614aa9565b602060405180830381600087803b1580156110ea57600080fd5b505af11580156110fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111229190614899565b505050505050565b60006111346132b3565b6001600160a01b0316336001600160a01b0316146111645760405162461bcd60e51b81526004016106f790614c64565b6001600160a01b0382166111ba5760405162461bcd60e51b815260206004820152601d60248201527f416e79737761705633526f757465723a2061646472657373283078302900000060448201526064016106f7565b6040516360e232a960e01b81526001600160a01b0383811660048301528416906360e232a990602401602060405180830381600087803b1580156111fd57600080fd5b505af1158015611211573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce5919061475b565b84428110156112565760405162461bcd60e51b81526004016106f790614c9b565b60008989600081811061126b5761126b614e1c565b905060200201602081019061128091906142f7565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156112b857600080fd5b505afa1580156112cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f0919061431b565b9050806001600160a01b031663d505accf8e308f8b8b8b8b6040518863ffffffff1660e01b815260040161132a9796959493929190614a4f565b600060405180830381600087803b15801561134457600080fd5b505af1158015611358573d6000803e3d6000fd5b5050505061139a8d8b8b600081811061137357611373614e1c565b905060200201602081019061138891906142f7565b6001600160a01b03841691908f613c29565b898960008181106113ad576113ad614e1c565b90506020020160208101906113c291906142f7565b604051630bebbf4d60e41b8152600481018e90526001600160a01b038f81166024830152919091169063bebbf4d090604401602060405180830381600087803b15801561140e57600080fd5b505af1158015611422573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114469190614899565b508989600081811061145a5761145a614e1c565b905060200201602081019061146f91906142f7565b6001600160a01b0316639dc29fac8e8e6040518363ffffffff1660e01b815260040161149c929190614a90565b602060405180830381600087803b1580156114b657600080fd5b505af11580156114ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ee919061475b565b5060008a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050905060008e905060008a905060008f905060008f905060006115524690565b90506000899050846001600160a01b0316866001600160a01b03167f278277e0209c347189add7bd92411973b5f6b8644f7ac62ea1be984ce993f8f489878787876040516115a4959493929190614b36565b60405180910390a35050505050505050505050505050505050505050565b60606115cc6132b3565b6001600160a01b0316336001600160a01b0316146115fc5760405162461bcd60e51b81526004016106f790614c64565b824281101561161d5760405162461bcd60e51b81526004016106f790614c9b565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168787611654600182614d7b565b81811061166357611663614e1c565b905060200201602081019061167891906142f7565b6001600160a01b0316146116ce5760405162461bcd60e51b815260206004820152601d60248201527f416e79737761705633526f757465723a20494e56414c49445f5041544800000060448201526064016106f7565b61172c7f00000000000000000000000000000000000000000000000000000000000000008a8989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506137d892505050565b915087826001845161173e9190614d7b565b8151811061174e5761174e614e1c565b602002602001015110156117b85760405162461bcd60e51b815260206004820152602b60248201527f416e79737761705633526f757465723a20494e53554646494349454e545f4f5560448201526a1514155517d05353d5539560aa1b60648201526084016106f7565b6117cf8a88886000818110610f6257610f62614e1c565b61180e82888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613a27915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836001855161184c9190614d7b565b8151811061185c5761185c614e1c565b60200260200101516040518263ffffffff1660e01b815260040161188291815260200190565b600060405180830381600087803b15801561189c57600080fd5b505af11580156118b0573d6000803e3d6000fd5b505050506110508583600185516118c79190614d7b565b815181106118d7576118d7614e1c565b60200260200101516133c4565b60006118ee6132b3565b6001600160a01b0316336001600160a01b03161461191e5760405162461bcd60e51b81526004016106f790614c64565b6001600160a01b0382166119745760405162461bcd60e51b815260206004820152601d60248201527f416e79737761705633526f757465723a2061646472657373283078302900000060448201526064016106f7565b61197c6132b3565b600080546001600160a01b03199081166001600160a01b0393841617909155600180549091169184169190911790556119b8426202a300614d22565b60028190556001546000546001600160a01b0391821691167fcda32bc39904597666dfa9f9c845714756e1ffffad55b52e0d344673a21981214660405190815260200160405180910390a45060015b919050565b8142811015611a2d5760405162461bcd60e51b81526004016106f790614c9b565b85856000818110611a4057611a40614e1c565b9050602002016020810190611a5591906142f7565b6001600160a01b0316639dc29fac338a6040518363ffffffff1660e01b8152600401611a82929190614a90565b602060405180830381600087803b158015611a9c57600080fd5b505af1158015611ab0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad4919061475b565b506001600160a01b038416337f278277e0209c347189add7bd92411973b5f6b8644f7ac62ea1be984ce993f8f488888c8c46610afd565b8142811015611b2c5760405162461bcd60e51b81526004016106f790614c9b565b611c023387876000818110611b4357611b43614e1c565b9050602002016020810190611b5891906142f7565b8a89896000818110611b6c57611b6c614e1c565b9050602002016020810190611b8191906142f7565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015611bb957600080fd5b505afa158015611bcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf1919061431b565b6001600160a01b0316929190613c29565b85856000818110611c1557611c15614e1c565b9050602002016020810190611c2a91906142f7565b604051630bebbf4d60e41b8152600481018a90523360248201526001600160a01b03919091169063bebbf4d090604401602060405180830381600087803b158015611c7457600080fd5b505af1158015611c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cac9190614899565b5085856000818110611a4057611a40614e1c565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015611d2557600080fd5b505afa158015611d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5d919061431b565b6001600160a01b031614611d835760405162461bcd60e51b81526004016106f790614c1a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015611dde57600080fd5b505af1158015611df2573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb9250611e45915086903490600401614a90565b602060405180830381600087803b158015611e5f57600080fd5b505af1158015611e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e97919061475b565b611ea357611ea3614df0565b604051630bebbf4d60e41b81523460048201526001600160a01b03838116602483015284169063bebbf4d090604401602060405180830381600087803b158015611eec57600080fd5b505af1158015611f00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f249190614899565b50349392505050565b611f356132b3565b6001600160a01b0316336001600160a01b031614611f655760405162461bcd60e51b81526004016106f790614c64565b611f7285858585856132de565b5050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015611fde57600080fd5b505afa158015611ff2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612016919061431b565b6001600160a01b03161461203c5760405162461bcd60e51b81526004016106f790614c1a565b604051620e75bb60e21b81526001600160a01b038516906239d6ec9061206a90339087903090600401614aa9565b602060405180830381600087803b15801561208457600080fd5b505af1158015612098573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120bc9190614899565b50604051632e1a7d4d60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561211f57600080fd5b505af1158015612133573d6000803e3d6000fd5b5050505061214182846133c4565b509092915050565b60006109fa848484613c83565b61215e6132b3565b6001600160a01b0316336001600160a01b03161461218e5760405162461bcd60e51b81526004016106f790614c64565b60006121986132b3565b6040516340c10f1960e01b81529091506001600160a01b038416906340c10f19906121c99084908690600401614a90565b602060405180830381600087803b1580156121e357600080fd5b505af11580156121f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061221b919061475b565b50604051620e75bb60e21b81526001600160a01b038416906239d6ec9061224a90849086908290600401614aa9565b602060405180830381600087803b15801561226457600080fd5b505af1158015612278573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cfb9190614899565b6000886001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156122d757600080fd5b505afa1580156122eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230f919061431b565b60405163d505accf60e01b81529091506001600160a01b0382169063d505accf9061234a908d9030908c908c908c908c908c90600401614a4f565b600060405180830381600087803b15801561236457600080fd5b505af1158015612378573d6000803e3d6000fd5b50612392925050506001600160a01b0382168b8b8a613c29565b604051630bebbf4d60e41b8152600481018890526001600160a01b038b811660248301528a169063bebbf4d090604401602060405180830381600087803b1580156123dc57600080fd5b505af11580156123f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124149190614899565b506124228a8a8a8a8661355e565b50505050505050505050565b844281101561244f5760405162461bcd60e51b81526004016106f790614c9b565b60008989600081811061246457612464614e1c565b905060200201602081019061247991906142f7565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156124b157600080fd5b505afa1580156124c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e9919061431b565b9050806001600160a01b031663d505accf8e308f8b8b8b8b6040518863ffffffff1660e01b81526004016125239796959493929190614a4f565b600060405180830381600087803b15801561253d57600080fd5b505af1158015612551573d6000803e3d6000fd5b5050505061256c8d8b8b600081811061137357611373614e1c565b8989600081811061257f5761257f614e1c565b905060200201602081019061259491906142f7565b604051630bebbf4d60e41b8152600481018e90526001600160a01b038f81166024830152919091169063bebbf4d090604401602060405180830381600087803b1580156125e057600080fd5b505af11580156125f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126189190614899565b508989600081811061262c5761262c614e1c565b905060200201602081019061264191906142f7565b6001600160a01b0316639dc29fac8e8e6040518363ffffffff1660e01b815260040161266e929190614a90565b602060405180830381600087803b15801561268857600080fd5b505af115801561269c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c0919061475b565b5060008a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050905060008e905060008a905060008f905060008f905060006127244690565b90506000899050846001600160a01b0316866001600160a01b03167ffea6abdf4fd32f20966dff7619354cd82cd43dc78a3bee479f04c74dbfc585b389878787876040516115a4959493929190614b36565b84428110156127975760405162461bcd60e51b81526004016106f790614c9b565b888860008181106127aa576127aa614e1c565b90506020020160208101906127bf91906142f7565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156127f757600080fd5b505afa15801561280b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282f919061431b565b6001600160a01b031663605629d68d8b8b600081811061285157612851614e1c565b905060200201602081019061286691906142f7565b8e8a8a8a8a6040518863ffffffff1660e01b815260040161288d9796959493929190614a4f565b602060405180830381600087803b1580156128a757600080fd5b505af11580156128bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128df919061475b565b50888860008181106128f3576128f3614e1c565b905060200201602081019061290891906142f7565b604051630bebbf4d60e41b8152600481018d90526001600160a01b038e81166024830152919091169063bebbf4d090604401602060405180830381600087803b15801561295457600080fd5b505af1158015612968573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061298c9190614899565b50888860008181106129a0576129a0614e1c565b90506020020160208101906129b591906142f7565b6001600160a01b0316639dc29fac8d8d6040518363ffffffff1660e01b81526004016129e2929190614a90565b602060405180830381600087803b1580156129fc57600080fd5b505af1158015612a10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a34919061475b565b50866001600160a01b03168c6001600160a01b03167ffea6abdf4fd32f20966dff7619354cd82cd43dc78a3bee479f04c74dbfc585b38b8b8f8f612a754690565b89604051612a8896959493929190614acc565b60405180910390a3505050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015612b0157600080fd5b505afa158015612b15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b39919061431b565b6001600160a01b031614612b5f5760405162461bcd60e51b81526004016106f790614c1a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015612bba57600080fd5b505af1158015612bce573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb9250612c21915086903490600401614a90565b602060405180830381600087803b158015612c3b57600080fd5b505af1158015612c4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c73919061475b565b612c7f57612c7f614df0565b604051630bebbf4d60e41b81523460048201523360248201526001600160a01b0384169063bebbf4d090604401602060405180830381600087803b158015612cc657600080fd5b505af1158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe9190614899565b50612d0c338484348561355e565b505050565b60006109fa848484613d4c565b8442811015612d3f5760405162461bcd60e51b81526004016106f790614c9b565b88886000818110612d5257612d52614e1c565b9050602002016020810190612d6791906142f7565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015612d9f57600080fd5b505afa158015612db3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd7919061431b565b6001600160a01b031663605629d68d8b8b6000818110612df957612df9614e1c565b9050602002016020810190612e0e91906142f7565b8e8a8a8a8a6040518863ffffffff1660e01b8152600401612e359796959493929190614a4f565b602060405180830381600087803b158015612e4f57600080fd5b505af1158015612e63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e87919061475b565b5088886000818110612e9b57612e9b614e1c565b9050602002016020810190612eb091906142f7565b604051630bebbf4d60e41b8152600481018d90526001600160a01b038e81166024830152919091169063bebbf4d090604401602060405180830381600087803b158015612efc57600080fd5b505af1158015612f10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f349190614899565b5088886000818110612f4857612f48614e1c565b9050602002016020810190612f5d91906142f7565b6001600160a01b0316639dc29fac8d8d6040518363ffffffff1660e01b8152600401612f8a929190614a90565b602060405180830381600087803b158015612fa457600080fd5b505af1158015612fb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fdc919061475b565b50866001600160a01b03168c6001600160a01b03167f278277e0209c347189add7bd92411973b5f6b8644f7ac62ea1be984ce993f8f48b8b8f8f612a754690565b6060610ce57f000000000000000000000000000000000000000000000000000000000000000084846137d8565b814281101561306b5760405162461bcd60e51b81526004016106f790614c9b565b6130823387876000818110611b4357611b43614e1c565b8585600081811061309557613095614e1c565b90506020020160208101906130aa91906142f7565b604051630bebbf4d60e41b8152600481018a90523360248201526001600160a01b03919091169063bebbf4d090604401602060405180830381600087803b1580156130f457600080fd5b505af1158015613108573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061312c9190614899565b5085856000818110610a3657610a36614e1c565b60005b87811015610cad576131d4338a8a8481811061316157613161614e1c565b905060200201602081019061317691906142f7565b89898581811061318857613188614e1c565b905060200201602081019061319d91906142f7565b8888868181106131af576131af614e1c565b905060200201358787878181106131c8576131c8614e1c565b9050602002013561355e565b806131de81614dd5565b915050613143565b613225338584876001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015611bb957600080fd5b604051630bebbf4d60e41b8152600481018390523360248201526001600160a01b0385169063bebbf4d090604401602060405180830381600087803b15801561326d57600080fd5b505af1158015613281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a59190614899565b50610cfb338585858561355e565b600060025442106132ce57506001546001600160a01b031690565b506000546001600160a01b031690565b6040516340c10f1960e01b81526001600160a01b038516906340c10f199061330c9086908690600401614a90565b602060405180830381600087803b15801561332657600080fd5b505af115801561333a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061335e919061475b565b50826001600160a01b0316846001600160a01b0316867faac9ce45fe3adf5143598c4f18a369591a20a3384aedaf1b525d29127e1fcd55858561339e4690565b604080519384526020840192909252908201526060015b60405180910390a45050505050565b604080516000808252602082019092526001600160a01b0384169083906040516133ee9190614a33565b60006040518083038185875af1925050503d806000811461342b576040519150601f19603f3d011682016040523d82523d6000602084013e613430565b606091505b5050905080612d0c5760405162461bcd60e51b815260206004820152602660248201527f5472616e7366657248656c7065723a204e41544956455f5452414e534645525f60448201526511905253115160d21b60648201526084016106f7565b60008084116134e55760405162461bcd60e51b815260206004820152602d6024820152600080516020614e6183398151915260448201526c17d25394155517d05353d55395609a1b60648201526084016106f7565b6000831180156134f55750600082115b6135115760405162461bcd60e51b81526004016106f790614be2565b600061351f856103e5613ddc565b9050600061352d8285613ddc565b9050600061354783613541886103e8613ddc565b90613e43565b90506135538183614d3a565b979650505050505050565b604051632770a7eb60e21b81526001600160a01b03851690639dc29fac9061358c9088908690600401614a90565b602060405180830381600087803b1580156135a657600080fd5b505af11580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de919061475b565b50826001600160a01b0316856001600160a01b0316856001600160a01b03167f97116cf6cd4f6412bb47914d6db18da9e16ab2142f543b86e207c24fbd16b23a856136264690565b60408051928352602083019190915281018690526060016133b5565b60606002825110156136965760405162461bcd60e51b815260206004820181905260248201527f53757368697377617056324c6962726172793a20494e56414c49445f5041544860448201526064016106f7565b815167ffffffffffffffff8111156136b0576136b0614e32565b6040519080825280602002602001820160405280156136d9578160200160208202803683370190505b5090508281600183516136ec9190614d7b565b815181106136fc576136fc614e1c565b6020026020010181815250506000600183516137189190614d7b565b90505b80156137d05760008061376b8786613734600187614d7b565b8151811061374457613744614e1c565b602002602001015187868151811061375e5761375e614e1c565b6020026020010151613e98565b9150915061379384848151811061378457613784614e1c565b60200260200101518383613c83565b8461379f600186614d7b565b815181106137af576137af614e1c565b602002602001018181525050505080806137c890614dbe565b91505061371b565b509392505050565b606060028251101561382c5760405162461bcd60e51b815260206004820181905260248201527f53757368697377617056324c6962726172793a20494e56414c49445f5041544860448201526064016106f7565b815167ffffffffffffffff81111561384657613846614e32565b60405190808252806020026020018201604052801561386f578160200160208202803683370190505b509050828160008151811061388657613886614e1c565b60200260200101818152505060005b600183516138a39190614d7b565b8110156137d0576000806138e9878685815181106138c3576138c3614e1c565b6020026020010151878660016138d99190614d22565b8151811061375e5761375e614e1c565b9150915061391184848151811061390257613902614e1c565b60200260200101518383613490565b8461391d856001614d22565b8151811061392d5761392d614e1c565b6020026020010181815250505050808061394690614dd5565b915050613895565b600080600061395d8585613f71565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b1660348201529193509150869060480160405160208183030381529060405280519060200120604051602001613a059291906001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527fe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b60005b60018351613a389190614d7b565b811015610cfb57600080848381518110613a5457613a54614e1c565b602002602001015185846001613a6a9190614d22565b81518110613a7a57613a7a614e1c565b6020026020010151915091506000613a928383613f71565b509050600087613aa3866001614d22565b81518110613ab357613ab3614e1c565b60200260200101519050600080836001600160a01b0316866001600160a01b031614613ae157826000613ae5565b6000835b91509150600060028a51613af99190614d7b565b8810613b055788613b53565b613b537f0000000000000000000000000000000000000000000000000000000000000000878c613b368c6002614d22565b81518110613b4657613b46614e1c565b602002602001015161394e565b9050613b807f0000000000000000000000000000000000000000000000000000000000000000888861394e565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613bbd576020820181803683370190505b506040518563ffffffff1660e01b8152600401613bdd9493929190614cd2565b600060405180830381600087803b158015613bf757600080fd5b505af1158015613c0b573d6000803e3d6000fd5b50505050505050505050508080613c2190614dd5565b915050613a2a565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610cfb90859061406b565b6000808411613cd95760405162461bcd60e51b815260206004820152602e6024820152600080516020614e6183398151915260448201526d17d3d55514155517d05353d5539560921b60648201526084016106f7565b600083118015613ce95750600082115b613d055760405162461bcd60e51b81526004016106f790614be2565b6000613d1d6103e8613d178688613ddc565b90613ddc565b90506000613d316103e5613d1786896141f2565b9050613d4260016135418385614d3a565b9695505050505050565b6000808411613d9b5760405162461bcd60e51b81526020600482015260276024820152600080516020614e6183398151915260448201526617d05353d5539560ca1b60648201526084016106f7565b600083118015613dab5750600082115b613dc75760405162461bcd60e51b81526004016106f790614be2565b82613dd28584613ddc565b6109fa9190614d3a565b6000811580613e0057508282613df28183614d5c565b9250613dfe9083614d3a565b145b610ce85760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b60448201526064016106f7565b600082613e508382614d22565b9150811015610ce85760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b60448201526064016106f7565b6000806000613ea78585613f71565b509050600080613eb888888861394e565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613ef057600080fd5b505afa158015613f04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f289190614854565b506001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b031614613f5f578082613f62565b81815b90999098509650505050505050565b600080826001600160a01b0316846001600160a01b03161415613fe65760405162461bcd60e51b815260206004820152602760248201527f53757368697377617056324c6962726172793a204944454e544943414c5f41446044820152664452455353455360c81b60648201526084016106f7565b826001600160a01b0316846001600160a01b031610614006578284614009565b83835b90925090506001600160a01b0382166140645760405162461bcd60e51b815260206004820181905260248201527f53757368697377617056324c6962726172793a205a45524f5f4144445245535360448201526064016106f7565b9250929050565b61407d826001600160a01b0316614248565b6140c95760405162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740060448201526064016106f7565b600080836001600160a01b0316836040516140e49190614a33565b6000604051808303816000865af19150503d8060008114614121576040519150601f19603f3d011682016040523d82523d6000602084013e614126565b606091505b5091509150816141785760405162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656460448201526064016106f7565b805115610cfb5780806020019051810190614193919061475b565b610cfb5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106f7565b6000826141ff8382614d7b565b9150811115610ce85760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b60448201526064016106f7565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906109fa5750141592915050565b8035611a0781614e48565b60008083601f84011261429c57600080fd5b50813567ffffffffffffffff8111156142b457600080fd5b6020830191508360208260051b850101111561406457600080fd5b80516001600160701b0381168114611a0757600080fd5b803560ff81168114611a0757600080fd5b60006020828403121561430957600080fd5b813561431481614e48565b9392505050565b60006020828403121561432d57600080fd5b815161431481614e48565b6000806040838503121561434b57600080fd5b823561435681614e48565b9150602083013561436681614e48565b809150509250929050565b60008060008060008060008060006101208a8c03121561439057600080fd5b893561439b81614e48565b985060208a01356143ab81614e48565b975060408a01356143bb81614e48565b965060608a0135955060808a013594506143d760a08b016142e6565b935060c08a0135925060e08a013591506101008a013590509295985092959850929598565b60008060006060848603121561441157600080fd5b833561441c81614e48565b9250602084013561442c81614e48565b929592945050506040919091013590565b6000806000806080858703121561445357600080fd5b843561445e81614e48565b9350602085013561446e81614e48565b93969395505050506040820135916060013590565b6000806040838503121561449657600080fd5b82356144a181614e48565b946020939093013593505050565b6000806000606084860312156144c457600080fd5b83356144cf81614e48565b92506020840135915060408401356144e681614e48565b809150509250925092565b60008060008060008060008060008060006101408c8e03121561451357600080fd5b8b3561451e81614e48565b9a5060208c0135995060408c0135985060608c013567ffffffffffffffff81111561454857600080fd5b6145548e828f0161428a565b90995097505060808c013561456881614e48565b955060a08c0135945061457d60c08d016142e6565b935060e08c013592506101008c013591506101208c013590509295989b509295989b9093969950565b6000806000806000806000806080898b0312156145c257600080fd5b883567ffffffffffffffff808211156145da57600080fd5b6145e68c838d0161428a565b909a50985060208b01359150808211156145ff57600080fd5b61460b8c838d0161428a565b909850965060408b013591508082111561462457600080fd5b6146308c838d0161428a565b909650945060608b013591508082111561464957600080fd5b506146568b828c0161428a565b999c989b5096995094979396929594505050565b60008060008060008060008060008060a08b8d03121561468957600080fd5b8a3567ffffffffffffffff808211156146a157600080fd5b6146ad8e838f0161428a565b909c509a5060208d01359150808211156146c657600080fd5b6146d28e838f0161428a565b909a50985060408d01359150808211156146eb57600080fd5b6146f78e838f0161428a565b909850965060608d013591508082111561471057600080fd5b61471c8e838f0161428a565b909650945060808d013591508082111561473557600080fd5b506147428d828e0161428a565b915080935050809150509295989b9194979a5092959850565b60006020828403121561476d57600080fd5b8151801515811461431457600080fd5b600080600080600060a0868803121561479557600080fd5b8535945060208601356147a781614e48565b935060408601356147b781614e48565b94979396509394606081013594506080013592915050565b60008060008060008060008060e0898b0312156147eb57600080fd5b883597506020890135965060408901359550606089013567ffffffffffffffff81111561481757600080fd5b6148238b828c0161428a565b909650945050608089013561483781614e48565b979a969950949793969295929450505060a08201359160c0013590565b60008060006060848603121561486957600080fd5b614872846142cf565b9250614880602085016142cf565b9150604084015163ffffffff811681146144e657600080fd5b6000602082840312156148ab57600080fd5b5051919050565b600080604083850312156148c557600080fd5b8235915060208084013567ffffffffffffffff808211156148e557600080fd5b818601915086601f8301126148f957600080fd5b81358181111561490b5761490b614e32565b8060051b604051601f19603f8301168101818110858211171561493057614930614e32565b604052828152858101935084860182860187018b101561494f57600080fd5b600095505b83861015614979576149658161427f565b855260019590950194938601938601614954565b508096505050505050509250929050565b600080600080600080600060c0888a0312156149a557600080fd5b8735965060208801359550604088013567ffffffffffffffff8111156149ca57600080fd5b6149d68a828b0161428a565b90965094505060608801356149ea81614e48565b969995985093969295946080840135945060a09093013592915050565b600080600060608486031215614a1c57600080fd5b505081359360208301359350604090920135919050565b60008251614a45818460208701614d92565b9190910192915050565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393841681526020810192909252909116604082015260600190565b60a0808252810186905260008760c08301825b89811015614b0f578235614af281614e48565b6001600160a01b0316825260209283019290910190600101614adf565b50602084019790975250506040810193909352606083019190915260809091015292915050565b60a0808252865190820181905260009060209060c0840190828a01845b82811015614b785781516001600160a01b031684529284019290840190600101614b53565b505050908301969096525060408101939093526060830191909152608090910152919050565b6020808252825182820181905260009190848201906040850190845b81811015614bd657835183529284019291840191600101614bba565b50909695505050505050565b6020808252602a90820152600080516020614e618339815191526040820152695f4c495155494449545960b01b606082015260800190565b6020808252602a908201527f416e79737761705633526f757465723a20756e6465726c79696e67206973206e6040820152696f7420774e415449564560b01b606082015260800190565b6020808252601a908201527f416e79737761705633526f757465723a20464f5242494444454e000000000000604082015260600190565b60208082526018908201527f416e79737761705633526f757465723a20455850495245440000000000000000604082015260600190565b84815283602082015260018060a01b03831660408201526080606082015260008251806080840152614d0b8160a0850160208701614d92565b601f01601f19169190910160a00195945050505050565b60008219821115614d3557614d35614e06565b500190565b600082614d5757634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614d7657614d76614e06565b500290565b600082821015614d8d57614d8d614e06565b500390565b60005b83811015614dad578181015183820152602001614d95565b83811115610cfb5750506000910152565b600081614dcd57614dcd614e06565b506000190190565b6000600019821415614de957614de9614e06565b5060010190565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114614e5d57600080fd5b5056fe53757368697377617056324c6962726172793a20494e53554646494349454e54a264697066735822122073407528f159bfea36d084e49afe223dc0f542434e791cc076c52d87bb5c136a64736f6c63430008060033000000000000000000000000c35dadb65012ec5796536bd9864ed8773abc74c40000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23000000000000000000000000f39fee2fdfe7db022591f4a82e3537fa0b55fb9c

Deployed ByteCode Sourcemap

13444:18910:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14019:10;-1:-1:-1;;;;;14033:7:0;14019:21;;14012:29;;;;:::i;:::-;13444:18910;;;;;19939:718;;;;;;;;;;-1:-1:-1;19939:718:0;;;;;:::i;:::-;;:::i;31362:246::-;;;;;;;;;;-1:-1:-1;31362:246:0;;;;;:::i;:::-;;:::i;:::-;;;27805:25:1;;;27793:2;27778:18;31362:246:0;;;;;;;;23048:416;;;;;;;;;;-1:-1:-1;23048:416:0;;;;;:::i;:::-;;:::i;18068:498::-;;;;;;;;;;-1:-1:-1;18068:498:0;;;;;:::i;:::-;;:::i;32114:237::-;;;;;;;;;;-1:-1:-1;32114:237:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;16376:157::-;;;;;;;;;;-1:-1:-1;16376:157:0;;;;;:::i;:::-;;:::i;21774:319::-;;;;;;;;;;-1:-1:-1;21774:319:0;;;;;:::i;:::-;;:::i;26271:648::-;;;;;;;;;;-1:-1:-1;26271:648:0;;;;;:::i;:::-;;:::i;19569:245::-;;;;;;;;;;-1:-1:-1;19569:245:0;;;;;:::i;:::-;;:::i;15813:228::-;;;;;;;;;;-1:-1:-1;15813:228:0;;;;;:::i;:::-;;:::i;:::-;;;19606:14:1;;19599:22;19581:41;;19569:2;19554:18;15813:228:0;19536:92:1;28236:1067:0;;;;;;;;;;-1:-1:-1;28236:1067:0;;;;;:::i;:::-;;:::i;30243:886::-;;;;;;;;;;-1:-1:-1;30243:886:0;;;;;:::i;:::-;;:::i;15448:357::-;;;;;;;;;;-1:-1:-1;15448:357:0;;;;;:::i;:::-;;:::i;27020:416::-;;;;;;;;;;-1:-1:-1;27020:416:0;;;;;:::i;:::-;;:::i;27537:598::-;;;;;;;;;;-1:-1:-1;27537:598:0;;;;;:::i;:::-;;:::i;20665:407::-;;;;;;:::i;:::-;;:::i;19283:173::-;;;;;;;;;;-1:-1:-1;19283:173:0;;;;;:::i;:::-;;:::i;21080:413::-;;;;;;;;;;-1:-1:-1;21080:413:0;;;;;:::i;:::-;;:::i;31616:245::-;;;;;;;;;;-1:-1:-1;31616:245:0;;;;;:::i;:::-;;:::i;21543:223::-;;;;;;;;;;-1:-1:-1;21543:223:0;;;;;:::i;:::-;;:::i;17462:598::-;;;;;;;;;;-1:-1:-1;17462:598:0;;;;;:::i;:::-;;:::i;13589:32::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15087:32:1;;;15069:51;;15057:2;15042:18;13589:32:0;15024:102:1;15351:89:0;;;;;;;;;;-1:-1:-1;15423:9:0;15351:89;;24264:1067;;;;;;;;;;-1:-1:-1;24264:1067:0;;;;;:::i;:::-;;:::i;25432:694::-;;;;;;;;;;-1:-1:-1;25432:694:0;;;;;:::i;:::-;;:::i;16995:459::-;;;;;;:::i;:::-;;:::i;31173:181::-;;;;;;;;;;-1:-1:-1;31173:181:0;;;;;:::i;:::-;;:::i;13550:32::-;;;;;;;;;;;;;;;29404:694;;;;;;;;;;-1:-1:-1;29404:694:0;;;;;:::i;:::-;;:::i;31869:237::-;;;;;;;;;;-1:-1:-1;31869:237:0;;;;;:::i;:::-;;:::i;23565:598::-;;;;;;;;;;-1:-1:-1;23565:598:0;;;;;:::i;:::-;;:::i;18574:286::-;;;;;;;;;;-1:-1:-1;18574:286:0;;;;;:::i;:::-;;:::i;16658:329::-;;;;;;;;;;-1:-1:-1;16658:329:0;;;;;:::i;:::-;;:::i;15169:174::-;;;;;;;;;;;;;:::i;19939:718::-;15105:5;:3;:5::i;:::-;-1:-1:-1;;;;;15091:19:0;:10;-1:-1:-1;;;;;15091:19:0;;15083:58;;;;-1:-1:-1;;;15083:58:0;;;;;;;:::i;:::-;;;;;;;;;20061:47:::1;20072:3;20077:5;20084:2;20088:6;20096:11;20061:10;:47::i;:::-;20119:24;20161:5;20119:48;;20178:19;20200:9;-1:-1:-1::0;;;;;20200:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20178:44:::0;-1:-1:-1;;;;;;20237:25:0;::::1;::::0;;::::1;::::0;:75:::1;;-1:-1:-1::0;20266:36:0::1;::::0;-1:-1:-1;;;20266:36:0;;-1:-1:-1;;;;;15087:32:1;;;20266:36:0::1;::::0;::::1;15069:51:1::0;20306:6:0;;20266:29;;::::1;::::0;::::1;::::0;15042:18:1;;20266:36:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;20237:75;20233:417;;;20348:7;-1:-1:-1::0;;;;;20333:22:0::1;:11;-1:-1:-1::0;;;;;20333:22:0::1;;20329:310;;;20376:50;::::0;-1:-1:-1;;;20376:50:0;;-1:-1:-1;;;;;20376:23:0;::::1;::::0;::::1;::::0;:50:::1;::::0;20400:2;;20404:6;;20420:4:::1;::::0;20376:50:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;20445:34:0::1;::::0;-1:-1:-1;;;20445:34:0;;::::1;::::0;::::1;27805:25:1::0;;;20454:7:0::1;-1:-1:-1::0;;;;;20445:26:0::1;::::0;::::1;::::0;27778:18:1;;20445:34:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20498:45;20532:2;20536:6;20498:33;:45::i;:::-;20329:310;;;20584:39;::::0;-1:-1:-1;;;20584:39:0;;-1:-1:-1;;;;;20584:23:0;::::1;::::0;::::1;::::0;:39:::1;::::0;20608:2;;20612:6;;20608:2;;20584:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20329:310;20050:607;;19939:718:::0;;;;;:::o;31362:246::-;31497:14;31536:64;31568:8;31578:9;31589:10;31536:31;:64::i;:::-;31529:71;31362:246;-1:-1:-1;;;;31362:246:0:o;23048:416::-;23275:8;13692:15;13680:8;:27;;13672:64;;;;-1:-1:-1;;;13672:64:0;;;;;;;:::i;:::-;23311:4:::1;;23316:1;23311:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23296:28:0::1;;23325:10;23337:8;23296:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;23362:94:0;::::1;23399:10;23362:94;23393:4:::0;;23415:8;23425:12;15423:9;23439:5:::1;23446:9;23362:94;;;;;;;;;;;:::i;:::-;;;;;;;;23048:416:::0;;;;;;;;:::o;18068:498::-;18362:5;-1:-1:-1;;;;;18347:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18340:61:0;;18402:4;18408:5;18415:6;18423:8;18433:1;18436;18439;18340:101;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;18452:48:0;;-1:-1:-1;;;18452:48:0;;;;;28015:25:1;;;-1:-1:-1;;;;;28076:32:1;;;28056:18;;;28049:60;18452:34:0;;;;;27988:18:1;;18452:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18511:47;18523:4;18529:5;18536:2;18540:6;18548:9;18511:11;:47::i;:::-;18068:498;;;;;;;;;:::o;32114:237::-;32240:21;32286:57;32318:7;32327:9;32338:4;32286:31;:57::i;:::-;32279:64;;32114:237;;;;;:::o;16376:157::-;16472:53;16484:10;16496:5;16503:2;16507:6;16515:9;16472:11;:53::i;:::-;16376:157;;;;:::o;21774:319::-;15105:5;:3;:5::i;:::-;-1:-1:-1;;;;;15091:19:0;:10;-1:-1:-1;;;;;15091:19:0;;15083:58;;;;-1:-1:-1;;;15083:58:0;;;;;;;:::i;:::-;21958:6:::1;21953:133;21970:17:::0;;::::1;21953:133;;;22009:65;22020:3;;22024:1;22020:6;;;;;;;:::i;:::-;;;;;;;22028;;22035:1;22028:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;22039:2;;22042:1;22039:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;22046:7;;22054:1;22046:10;;;;;;;:::i;:::-;;;;;;;22058:12;;22071:1;22058:15;;;;;;;:::i;:::-;;;;;;;22009:10;:65::i;:::-;21989:3:::0;::::1;::::0;::::1;:::i;:::-;;;;21953:133;;;;21774:319:::0;;;;;;;;;;:::o;26271:648::-;26548:21;15105:5;:3;:5::i;:::-;-1:-1:-1;;;;;15091:19:0;:10;-1:-1:-1;;;;;15091:19:0;;15083:58;;;;-1:-1:-1;;;15083:58:0;;;;;;;:::i;:::-;26529:8:::1;13692:15;13680:8;:27;;13672:64;;;;-1:-1:-1::0;;;13672:64:0::1;;;;;;;:::i;:::-;26592:57:::2;26625:7;26634:8;26644:4;;26592:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;26592:32:0::2;::::0;-1:-1:-1;;;26592:57:0:i:2;:::-;26582:67;;26699:12;26668:7;26693:1;26676:7;:14;:18;;;;:::i;:::-;26668:27;;;;;;;;:::i;:::-;;;;;;;:43;;26660:101;;;::::0;-1:-1:-1;;;26660:101:0;;22886:2:1;26660:101:0::2;::::0;::::2;22868:21:1::0;22925:2;22905:18;;;22898:30;22964:34;22944:18;;;22937:62;-1:-1:-1;;;23015:18:1;;;23008:43;23068:19;;26660:101:0::2;22858:235:1::0;26660:101:0::2;26772:104;26783:3;26788:4;;26793:1;26788:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;26797:53;26824:7;26833:4;;26838:1;26833:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;26842:4;;26847:1;26842:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;26797:26;:53::i;:::-;26852:7;26860:1;26852:10;;;;;;;;:::i;:::-;;;;;;;26864:11;26772:10;:104::i;:::-;26887:24;26893:7;26902:4;;26887:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;26908:2:0;;-1:-1:-1;26887:5:0::2;::::0;-1:-1:-1;;26887:24:0:i:2;:::-;15152:1:::1;26271:648:::0;;;;;;;;;;:::o;19569:245::-;15105:5;:3;:5::i;:::-;-1:-1:-1;;;;;15091:19:0;:10;-1:-1:-1;;;;;15091:19:0;;15083:58;;;;-1:-1:-1;;;15083:58:0;;;;;;;:::i;:::-;19697:47:::1;19708:3;19713:5;19720:2;19724:6;19732:11;19697:10;:47::i;:::-;19755:51;::::0;-1:-1:-1;;;19755:51:0;;-1:-1:-1;;;;;19755:35:0;::::1;::::0;::::1;::::0;:51:::1;::::0;19791:2;;19795:6;;19791:2;;19755:51:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19569:245:::0;;;;;:::o;15813:228::-;15891:4;15105:5;:3;:5::i;:::-;-1:-1:-1;;;;;15091:19:0;:10;-1:-1:-1;;;;;15091:19:0;;15083:58;;;;-1:-1:-1;;;15083:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15916:22:0;::::1;15908:64;;;::::0;-1:-1:-1;;;15908:64:0;;21415:2:1;15908:64:0::1;::::0;::::1;21397:21:1::0;21454:2;21434:18;;;21427:30;21493:31;21473:18;;;21466:59;21542:18;;15908:64:0::1;21387:179:1::0;15908:64:0::1;15990:43;::::0;-1:-1:-1;;;15990:43:0;;-1:-1:-1;;;;;15087:32:1;;;15990:43:0::1;::::0;::::1;15069:51:1::0;15990:33:0;::::1;::::0;::::1;::::0;15042:18:1;;15990:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28236:1067::-:0;28564:8;13692:15;13680:8;:27;;13672:64;;;;-1:-1:-1;;;13672:64:0;;;;;;;:::i;:::-;28585:19:::1;28622:4;;28627:1;28622:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28607:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28585:58;;28661:11;-1:-1:-1::0;;;;;28654:26:0::1;;28681:4;28695;28702:8;28712;28722:1;28725;28728;28654:76;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28741:61;28778:4;28784;;28789:1;28784:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28741:36:0;::::1;::::0;:61;28793:8;28741:36:::1;:61::i;:::-;28828:4;;28833:1;28828:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;28813:52;::::0;-1:-1:-1;;;28813:52:0;;::::1;::::0;::::1;28015:25:1::0;;;-1:-1:-1;;;;;28076:32:1;;;28056:18;;;28049:60;28813:36:0;;;::::1;::::0;::::1;::::0;27988:18:1;;28813:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28891:4;;28896:1;28891:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28876:28:0::1;;28905:4;28911:8;28876:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28942:22;28967:4;;28942:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28982:13;28998:4;28982:20;;29013:11;29027:2;29013:16;;29040:14;29057:8;29040:25;;29076:18;29097:12;29076:33;;29120:9;29132:5;15423:9:::0;;15351:89;29132:5:::1;29120:17;;29148:15;29166:9;29148:27;;29236:3;-1:-1:-1::0;;;;;29191:93:0::1;29229:5;-1:-1:-1::0;;;;;29191:93:0::1;;29222:5;29241:9;29252:13;29267:4;29273:10;29191:93;;;;;;;;;;:::i;:::-;;;;;;;;28931:365;;;;;;;28574:729;28236:1067:::0;;;;;;;;;;;;:::o;30243:886::-;30520:21;15105:5;:3;:5::i;:::-;-1:-1:-1;;;;;15091:19:0;:10;-1:-1:-1;;;;;15091:19:0;;15083:58;;;;-1:-1:-1;;;15083:58:0;;;;;;;:::i;:::-;30501:8:::1;13692:15;13680:8;:27;;13672:64;;;;-1:-1:-1::0;;;13672:64:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30587:7:0::2;30562:32;:4:::0;;30567:15:::2;30581:1;30562:4:::0;30567:15:::2;:::i;:::-;30562:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30562:32:0::2;;30554:74;;;::::0;-1:-1:-1;;;30554:74:0;;24784:2:1;30554:74:0::2;::::0;::::2;24766:21:1::0;24823:2;24803:18;;;24796:30;24862:31;24842:18;;;24835:59;24911:18;;30554:74:0::2;24756:179:1::0;30554:74:0::2;30649:57;30682:7;30691:8;30701:4;;30649:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;30649:32:0::2;::::0;-1:-1:-1;;;30649:57:0:i:2;:::-;30639:67;;30756:12;30725:7;30750:1;30733:7;:14;:18;;;;:::i;:::-;30725:27;;;;;;;;:::i;:::-;;;;;;;:43;;30717:99;;;::::0;-1:-1:-1;;;30717:99:0;;25142:2:1;30717:99:0::2;::::0;::::2;25124:21:1::0;25181:2;25161:18;;;25154:30;25220:34;25200:18;;;25193:62;-1:-1:-1;;;25271:18:1;;;25264:41;25322:19;;30717:99:0::2;25114:233:1::0;30717:99:0::2;30827:105;30838:3;30843:4;;30848:1;30843:7;;;;;;;:::i;30827:105::-;30943:35;30949:7;30958:4;;30943:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;30972:4:0::2;::::0;-1:-1:-1;30943:5:0::2;::::0;-1:-1:-1;;30943:35:0:i:2;:::-;30998:7;-1:-1:-1::0;;;;;30989:26:0::2;;31016:7;31041:1;31024:7;:14;:18;;;;:::i;:::-;31016:27;;;;;;;;:::i;:::-;;;;;;;30989:55;;;;;;;;;;;;;27805:25:1::0;;27793:2;27778:18;;27760:76;30989:55:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;31055:66;31089:2;31093:7;31118:1;31101:7;:14;:18;;;;:::i;:::-;31093:27;;;;;;;;:::i;:::-;;;;;;;31055:33;:66::i;15448:357::-:0;15507:4;15105:5;:3;:5::i;:::-;-1:-1:-1;;;;;15091:19:0;:10;-1:-1:-1;;;;;15091:19:0;;15083:58;;;;-1:-1:-1;;;15083:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15532:20:0;::::1;15524:62;;;::::0;-1:-1:-1;;;15524:62:0;;21415:2:1;15524:62:0::1;::::0;::::1;21397:21:1::0;21454:2;21434:18;;;21427:30;21493:31;21473:18;;;21466:59;21542:18;;15524:62:0::1;21387:179:1::0;15524:62:0::1;15607:5;:3;:5::i;:::-;15597:7;:15:::0;;-1:-1:-1;;;;;;15597:15:0;;::::1;-1:-1:-1::0;;;;;15597:15:0;;::::1;;::::0;;;-1:-1:-1;15623:16:0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;15673:27:::1;:15;15691:9;15673:27;:::i;:::-;15650:20;:50:::0;;;15738:7:::1;::::0;::::1;15729::::0;-1:-1:-1;;;;;15738:7:0;;::::1;::::0;15729::::1;15716:59;15423:9:::0;15716:59:::1;::::0;27805:25:1;;;27793:2;27778:18;15716:59:0::1;;;;;;;-1:-1:-1::0;15793:4:0::1;15152:1;15448:357:::0;;;:::o;27020:416::-;27247:8;13692:15;13680:8;:27;;13672:64;;;;-1:-1:-1;;;13672:64:0;;;;;;;:::i;:::-;27283:4:::1;;27288:1;27283:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27268:28:0::1;;27297:10;27309:8;27268:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;27334:94:0;::::1;27371:10;27334:94;27365:4:::0;;27387:8;27397:12;15423:9;27411:5:::1;15351:89:::0;27537:598;27774:8;13692:15;13680:8;:27;;13672:64;;;;-1:-1:-1;;;13672:64:0;;;;;;;:::i;:::-;27795:92:::1;27857:10;27869:4;;27874:1;27869:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;27878:8;27817:4;;27822:1;27817:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27802:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27795:61:0::1;::::0;:92;;:61:::1;:92::i;:::-;27913:4;;27918:1;27913:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;27898:58;::::0;-1:-1:-1;;;27898:58:0;;::::1;::::0;::::1;28015:25:1::0;;;27945:10:0::1;28056:18:1::0;;;28049:60;-1:-1:-1;;;;;27898:36:0;;;::::1;::::0;::::1;::::0;27988:18:1;;27898:58:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27982:4;;27987:1;27982:7;;;;;;;:::i;20665:407::-:0;20741:4;20804:7;-1:-1:-1;;;;;20766:45:0;20781:5;-1:-1:-1;;;;;20766:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20766:45:0;;20758:100;;;;-1:-1:-1;;;20758:100:0;;;;;;;:::i;:::-;20878:7;-1:-1:-1;;;;;20869:25:0;;20902:9;20869:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20932:44:0;;-1:-1:-1;;;20932:44:0;;-1:-1:-1;;;;;20941:7:0;20932:26;;-1:-1:-1;20932:26:0;;-1:-1:-1;20932:44:0;;-1:-1:-1;20959:5:0;;20966:9;;20932:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20925:52;;;;:::i;:::-;20988:49;;-1:-1:-1;;;20988:49:0;;21023:9;20988:49;;;28015:25:1;-1:-1:-1;;;;;28076:32:1;;;28056:18;;;28049:60;20988:34:0;;;;;27988:18:1;;20988:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;21055:9:0;;20665:407;-1:-1:-1;;;20665:407:0:o;19283:173::-;15105:5;:3;:5::i;:::-;-1:-1:-1;;;;;15091:19:0;:10;-1:-1:-1;;;;;15091:19:0;;15083:58;;;;-1:-1:-1;;;15083:58:0;;;;;;;:::i;:::-;19401:47:::1;19412:3;19417:5;19424:2;19428:6;19436:11;19401:10;:47::i;:::-;19283:173:::0;;;;;:::o;21080:413::-;21162:4;21225:7;-1:-1:-1;;;;;21187:45:0;21202:5;-1:-1:-1;;;;;21187:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21187:45:0;;21179:100;;;;-1:-1:-1;;;21179:100:0;;;;;;;:::i;:::-;21290:70;;-1:-1:-1;;;21290:70:0;;-1:-1:-1;;;;;21290:35:0;;;;;:70;;21326:10;;21338:6;;21354:4;;21290:70;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;21371:34:0;;-1:-1:-1;;;21371:34:0;;;;;27805:25:1;;;21380:7:0;-1:-1:-1;;;;;21371:26:0;;;;27778:18:1;;21371:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21416:45;21450:2;21454:6;21416:33;:45::i;:::-;-1:-1:-1;21479:6:0;;21080:413;-1:-1:-1;;21080:413:0:o;31616:245::-;31751:13;31789:64;31820:9;31831;31842:10;31789:30;:64::i;21543:223::-;15105:5;:3;:5::i;:::-;-1:-1:-1;;;;;15091:19:0;:10;-1:-1:-1;;;;;15091:19:0;;15083:58;;;;-1:-1:-1;;;15083:58:0;;;;;;;:::i;:::-;21621:12:::1;21636:5;:3;:5::i;:::-;21652:40;::::0;-1:-1:-1;;;21652:40:0;;21621:20;;-1:-1:-1;;;;;;21652:26:0;::::1;::::0;::::1;::::0;:40:::1;::::0;21621:20;;21685:6;;21652:40:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;21703:55:0::1;::::0;-1:-1:-1;;;21703:55:0;;-1:-1:-1;;;;;21703:35:0;::::1;::::0;::::1;::::0;:55:::1;::::0;21739:4;;21745:6;;21739:4;;21703:55:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17462:598::-:0;17726:19;17763:5;-1:-1:-1;;;;;17748:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17793:74;;-1:-1:-1;;;17793:74:0;;17726:56;;-1:-1:-1;;;;;;17793:26:0;;;;;:74;;17820:4;;17834;;17841:6;;17849:8;;17859:1;;17862;;17865;;17793:74;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17878:57:0;;-1:-1:-1;;;;;;;;17878:36:0;;17915:4;17921:5;17928:6;17878:36;:57::i;:::-;17946:48;;-1:-1:-1;;;17946:48:0;;;;;28015:25:1;;;-1:-1:-1;;;;;28076:32:1;;;28056:18;;;28049:60;17946:34:0;;;;;27988:18:1;;17946:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18005:47;18017:4;18023:5;18030:2;18034:6;18042:9;18005:11;:47::i;:::-;17715:345;17462:598;;;;;;;;;:::o;24264:1067::-;24592:8;13692:15;13680:8;:27;;13672:64;;;;-1:-1:-1;;;13672:64:0;;;;;;;:::i;:::-;24613:19:::1;24650:4;;24655:1;24650:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24635:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24613:58;;24689:11;-1:-1:-1::0;;;;;24682:26:0::1;;24709:4;24723;24730:8;24740;24750:1;24753;24756;24682:76;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24769:61;24806:4;24812;;24817:1;24812:7;;;;;;;:::i;24769:61::-;24856:4;;24861:1;24856:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;24841:52;::::0;-1:-1:-1;;;24841:52:0;;::::1;::::0;::::1;28015:25:1::0;;;-1:-1:-1;;;;;28076:32:1;;;28056:18;;;28049:60;24841:36:0;;;::::1;::::0;::::1;::::0;27988:18:1;;24841:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24919:4;;24924:1;24919:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24904:28:0::1;;24933:4;24939:8;24904:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24970:22;24995:4;;24970:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25010:13;25026:4;25010:20;;25041:11;25055:2;25041:16;;25068:14;25085:8;25068:25;;25104:18;25125:12;25104:33;;25148:9;25160:5;15423:9:::0;;15351:89;25160:5:::1;25148:17;;25176:15;25194:9;25176:27;;25264:3;-1:-1:-1::0;;;;;25219:93:0::1;25257:5;-1:-1:-1::0;;;;;25219:93:0::1;;25250:5;25269:9;25280:13;25295:4;25301:10;25219:93;;;;;;;;;;:::i;25432:694::-:0;25768:8;13692:15;13680:8;:27;;13672:64;;;;-1:-1:-1;;;13672:64:0;;;;;;;:::i;:::-;25811:4:::1;;25816:1;25811:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25796:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25789:63:0::1;;25853:4;25859;;25864:1;25859:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;25868:8;25878;25888:1;25891;25894;25789:107;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25922:4;;25927:1;25922:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;25907:52;::::0;-1:-1:-1;;;25907:52:0;;::::1;::::0;::::1;28015:25:1::0;;;-1:-1:-1;;;;;28076:32:1;;;28056:18;;;28049:60;25907:36:0;;;::::1;::::0;::::1;::::0;27988:18:1;;25907:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25985:4;;25990:1;25985:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25970:28:0::1;;25999:4;26005:8;25970:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26073:2;-1:-1:-1::0;;;;;26030:88:0::1;26067:4;-1:-1:-1::0;;;;;26030:88:0::1;;26061:4;;26077:8;26087:12;26101:5;15423:9:::0;;15351:89;26101:5:::1;26108:9;26030:88;;;;;;;;;;;:::i;:::-;;;;;;;;25432:694:::0;;;;;;;;;;;;:::o;16995:459::-;17138:7;-1:-1:-1;;;;;17100:45:0;17115:5;-1:-1:-1;;;;;17100:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17100:45:0;;17092:100;;;;-1:-1:-1;;;17092:100:0;;;;;;;:::i;:::-;17212:7;-1:-1:-1;;;;;17203:25:0;;17236:9;17203:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17266:44:0;;-1:-1:-1;;;17266:44:0;;-1:-1:-1;;;;;17275:7:0;17266:26;;-1:-1:-1;17266:26:0;;-1:-1:-1;17266:44:0;;-1:-1:-1;17293:5:0;;17300:9;;17266:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17259:52;;;;:::i;:::-;17322:57;;-1:-1:-1;;;17322:57:0;;17357:9;17322:57;;;28015:25:1;17368:10:0;28056:18:1;;;28049:60;-1:-1:-1;;;;;17322:34:0;;;;;27988:18:1;;17322:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17390:56;17402:10;17414:5;17421:2;17425:9;17436;17390:11;:56::i;:::-;16995:459;;;:::o;31173:181::-;31261:12;31293:53;31318:7;31327:8;31337;31293:24;:53::i;29404:694::-;29740:8;13692:15;13680:8;:27;;13672:64;;;;-1:-1:-1;;;13672:64:0;;;;;;;:::i;:::-;29783:4:::1;;29788:1;29783:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29768:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29761:63:0::1;;29825:4;29831;;29836:1;29831:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;29840:8;29850;29860:1;29863;29866;29761:107;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29894:4;;29899:1;29894:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;29879:52;::::0;-1:-1:-1;;;29879:52:0;;::::1;::::0;::::1;28015:25:1::0;;;-1:-1:-1;;;;;28076:32:1;;;28056:18;;;28049:60;29879:36:0;;;::::1;::::0;::::1;::::0;27988:18:1;;29879:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29957:4;;29962:1;29957:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29942:28:0::1;;29971:4;29977:8;29942:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30045:2;-1:-1:-1::0;;;;;30002:88:0::1;30039:4;-1:-1:-1::0;;;;;30002:88:0::1;;30033:4;;30049:8;30059:12;30073:5;15423:9:::0;;15351:89;31869:237;31995:21;32041:57;32074:7;32083:8;32093:4;32041:32;:57::i;23565:598::-;23802:8;13692:15;13680:8;:27;;13672:64;;;;-1:-1:-1;;;13672:64:0;;;;;;;:::i;:::-;23823:92:::1;23885:10;23897:4;;23902:1;23897:7;;;;;;;:::i;23823:92::-;23941:4;;23946:1;23941:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;23926:58;::::0;-1:-1:-1;;;23926:58:0;;::::1;::::0;::::1;28015:25:1::0;;;23973:10:0::1;28056:18:1::0;;;28049:60;-1:-1:-1;;;;;23926:36:0;;;::::1;::::0;::::1;::::0;27988:18:1;;23926:58:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24010:4;;24015:1;24010:7;;;;;;;:::i;18574:286::-:0;18722:6;18717:136;18734:17;;;18717:136;;;18773:68;18785:10;18797:6;;18804:1;18797:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;18808:2;;18811:1;18808:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;18815:7;;18823:1;18815:10;;;;;;;:::i;:::-;;;;;;;18827;;18838:1;18827:13;;;;;;;:::i;:::-;;;;;;;18773:11;:68::i;:::-;18753:3;;;;:::i;:::-;;;;18717:136;;16658:329;16764:86;16824:10;16836:5;16843:6;16786:5;-1:-1:-1;;;;;16771:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16764:86;16861:54;;-1:-1:-1;;;16861:54:0;;;;;28015:25:1;;;16904:10:0;28056:18:1;;;28049:60;-1:-1:-1;;;;;16861:34:0;;;;;27988:18:1;;16861:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16926:53;16938:10;16950:5;16957:2;16961:6;16969:9;16926:11;:53::i;15169:174::-;15205:7;15248:20;;15229:15;:39;15225:86;;-1:-1:-1;15292:7:0;;-1:-1:-1;;;;;15292:7:0;;15169:174::o;15225:86::-;-1:-1:-1;15328:7:0;;-1:-1:-1;;;;;15328:7:0;;15169:174::o;18940:229::-;19051:38;;-1:-1:-1;;;19051:38:0;;-1:-1:-1;;;;;19051:26:0;;;;;:38;;19078:2;;19082:6;;19051:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19130:2;-1:-1:-1;;;;;19105:56:0;19123:5;-1:-1:-1;;;;;19105:56:0;19118:3;19105:56;19134:6;19142:11;19155:5;15423:9;;15351:89;19155:5;19105:56;;;28951:25:1;;;29007:2;28992:18;;28985:34;;;;29035:18;;;29028:34;28939:2;28924:18;19105:56:0;;;;;;;;18940:229;;;;;:::o;8838:201::-;8949:12;;;8911;8949;;;;;;;;;-1:-1:-1;;;;;8928:7:0;;;8942:5;;8928:34;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8910:52;;;8981:7;8973:58;;;;-1:-1:-1;;;8973:58:0;;23661:2:1;8973:58:0;;;23643:21:1;23700:2;23680:18;;;23673:30;23739:34;23719:18;;;23712:62;-1:-1:-1;;;23790:18:1;;;23783:36;23836:19;;8973:58:0;23633:228:1;5213:521:0;5306:14;5352:1;5341:8;:12;5333:70;;;;-1:-1:-1;;;5333:70:0;;26726:2:1;5333:70:0;;;26708:21:1;26765:2;26745:18;;;26738:30;-1:-1:-1;;;;;;;;;;;26784:18:1;;;26777:62;-1:-1:-1;;;26855:18:1;;;26848:43;26908:19;;5333:70:0;26698:235:1;5333:70:0;5434:1;5422:9;:13;:31;;;;;5452:1;5439:10;:14;5422:31;5414:86;;;;-1:-1:-1;;;5414:86:0;;;;;;;:::i;:::-;5511:20;5534:17;:8;5547:3;5534:12;:17::i;:::-;5511:40;-1:-1:-1;5562:14:0;5579:31;5511:40;5599:10;5579:19;:31::i;:::-;5562:48;-1:-1:-1;5621:16:0;5640:40;5664:15;5640:19;:9;5654:4;5640:13;:19::i;:::-;:23;;:40::i;:::-;5621:59;-1:-1:-1;5703:23:0;5621:59;5703:9;:23;:::i;:::-;5691:35;5213:521;-1:-1:-1;;;;;;;5213:521:0:o;16049:231::-;16160:40;;-1:-1:-1;;;16160:40:0;;-1:-1:-1;;;;;16160:26:0;;;;;:40;;16187:4;;16193:6;;16160:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16243:2;-1:-1:-1;;;;;16216:56:0;16237:4;-1:-1:-1;;;;;16216:56:0;16230:5;-1:-1:-1;;;;;16216:56:0;;16247:6;16255:5;15423:9;;15351:89;16255:5;16216:56;;;28951:25:1;;;29007:2;28992:18;;28985:34;;;;29035:18;;29028:34;;;28939:2;28924:18;16216:56:0;28906:162:1;7007:534:0;7108:21;7165:1;7150:4;:11;:16;;7142:61;;;;-1:-1:-1;;;7142:61:0;;27500:2:1;7142:61:0;;;27482:21:1;;;27519:18;;;27512:30;27578:34;27558:18;;;27551:62;27630:18;;7142:61:0;27472:182:1;7142:61:0;7235:4;:11;7224:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7224:23:0;;7214:33;;7288:9;7258:7;7283:1;7266:7;:14;:18;;;;:::i;:::-;7258:27;;;;;;;;:::i;:::-;;;;;;:39;;;;;7313:6;7336:1;7322:4;:11;:15;;;;:::i;:::-;7313:24;;7308:226;7339:5;;7308:226;;7367:14;;7402:42;7414:7;7423:4;7428:5;7432:1;7428;:5;:::i;:::-;7423:11;;;;;;;;:::i;:::-;;;;;;;7436:4;7441:1;7436:7;;;;;;;;:::i;:::-;;;;;;;7402:11;:42::i;:::-;7366:78;;;;7476:46;7488:7;7496:1;7488:10;;;;;;;;:::i;:::-;;;;;;;7500:9;7511:10;7476:11;:46::i;:::-;7459:7;7467:5;7471:1;7467;:5;:::i;:::-;7459:14;;;;;;;;:::i;:::-;;;;;;:63;;;;;7351:183;;7346:3;;;;;:::i;:::-;;;;7308:226;;;;7007:534;;;;;:::o;6413:513::-;6514:21;6571:1;6556:4;:11;:16;;6548:61;;;;-1:-1:-1;;;6548:61:0;;27500:2:1;6548:61:0;;;27482:21:1;;;27519:18;;;27512:30;27578:34;27558:18;;;27551:62;27630:18;;6548:61:0;27472:182:1;6548:61:0;6641:4;:11;6630:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6630:23:0;;6620:33;;6677:8;6664:7;6672:1;6664:10;;;;;;;;:::i;:::-;;;;;;:21;;;;;6701:6;6696:223;6727:1;6713:4;:11;:15;;;;:::i;:::-;6709:1;:19;6696:223;;;6751:14;6767:15;6786:42;6798:7;6807:4;6812:1;6807:7;;;;;;;;:::i;:::-;;;;;;;6816:4;6821:1;6825;6821:5;;;;:::i;:::-;6816:11;;;;;;;;:::i;6786:42::-;6750:78;;;;6860:47;6873:7;6881:1;6873:10;;;;;;;;:::i;:::-;;;;;;;6885:9;6896:10;6860:12;:47::i;:::-;6843:7;6851:5;:1;6855;6851:5;:::i;:::-;6843:14;;;;;;;;:::i;:::-;;;;;;:64;;;;;6735:184;;6730:3;;;;;:::i;:::-;;;;6696:223;;3712:490;3801:12;3827:14;3843;3861:26;3872:6;3880;3861:10;:26::i;:::-;4036:32;;-1:-1:-1;;13892:2:1;13888:15;;;13884:24;;4036:32:0;;;13872:37:1;13943:15;;;13939:24;13925:12;;;13918:46;3826:61:0;;-1:-1:-1;3826:61:0;-1:-1:-1;4000:7:0;;13980:12:1;;4036:32:0;;;;;;;;;;;;4026:43;;;;;;3939:251;;;;;;;;-1:-1:-1;;;;;;14641:26:1;;14704:2;14700:15;;;;-1:-1:-1;;14696:53:1;14692:1;14683:11;;14676:74;14775:2;14766:12;;14759:28;14817:66;14812:2;14803:12;;14796:88;14909:2;14900:12;;14631:287;3939:251:0;;;;-1:-1:-1;;3939:251:0;;;;;;;;;3929:262;;3939:251;3929:262;;;;;3712:490;-1:-1:-1;;;;;;3712:490:0:o;22204:743::-;22311:6;22306:634;22337:1;22323:4;:11;:15;;;;:::i;:::-;22319:1;:19;22306:634;;;22361:13;22376:14;22395:4;22400:1;22395:7;;;;;;;;:::i;:::-;;;;;;;22404:4;22409:1;22413;22409:5;;;;:::i;:::-;22404:11;;;;;;;;:::i;:::-;;;;;;;22360:56;;;;22432:14;22451:44;22481:5;22488:6;22451:29;:44::i;:::-;-1:-1:-1;22431:64:0;-1:-1:-1;22510:14:0;22527:7;22535:5;:1;22539;22535:5;:::i;:::-;22527:14;;;;;;;;:::i;:::-;;;;;;;22510:31;;22557:15;22574;22602:6;-1:-1:-1;;;;;22593:15:0;:5;-1:-1:-1;;;;;22593:15:0;;:61;;22635:9;22651:1;22593:61;;;22617:1;22621:9;22593:61;22556:98;;;;22669:10;22700:1;22686:4;:11;:15;;;;:::i;:::-;22682:1;:19;:84;;22763:3;22682:84;;;22704:56;22731:7;22740:6;22748:4;22753:5;:1;22757;22753:5;:::i;:::-;22748:11;;;;;;;;:::i;:::-;;;;;;;22704:26;:56::i;:::-;22669:97;;22798:50;22825:7;22834:5;22841:6;22798:26;:50::i;:::-;-1:-1:-1;;;;;22781:73:0;;22873:10;22885;22897:2;22911:1;22901:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22901:12:0;;22781:147;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22345:595;;;;;;;22340:3;;;;;:::i;:::-;;;;22306:634;;12280:201;12404:68;;;-1:-1:-1;;;;;15389:15:1;;;12404:68:0;;;15371:34:1;15441:15;;15421:18;;;15414:43;15473:18;;;;15466:34;;;12404:68:0;;;;;;;;;;15306:18:1;;;;12404:68:0;;;;;;;;-1:-1:-1;;;;;12404:68:0;-1:-1:-1;;;12404:68:0;;;12378:95;;12397:5;;12378:18;:95::i;5855:476::-;5948:13;5994:1;5982:9;:13;5974:72;;;;-1:-1:-1;;;5974:72:0;;22122:2:1;5974:72:0;;;22104:21:1;22161:2;22141:18;;;22134:30;-1:-1:-1;;;;;;;;;;;22180:18:1;;;22173:62;-1:-1:-1;;;22251:18:1;;;22244:44;22305:19;;5974:72:0;22094:236:1;5974:72:0;6077:1;6065:9;:13;:31;;;;;6095:1;6082:10;:14;6065:31;6057:86;;;;-1:-1:-1;;;6057:86:0;;;;;;;:::i;:::-;6154:14;6171:34;6200:4;6171:24;:9;6185;6171:13;:24::i;:::-;:28;;:34::i;:::-;6154:51;-1:-1:-1;6216:16:0;6235:34;6265:3;6235:25;:10;6250:9;6235:14;:25::i;:34::-;6216:53;-1:-1:-1;6291:32:0;6321:1;6292:23;6216:53;6292:9;:23;:::i;6291:32::-;6280:43;5855:476;-1:-1:-1;;;;;;5855:476:0:o;4766:325::-;4848:12;4891:1;4881:7;:11;4873:63;;;;-1:-1:-1;;;4873:63:0;;25554:2:1;4873:63:0;;;25536:21:1;25593:2;25573:18;;;25566:30;-1:-1:-1;;;;;;;;;;;25612:18:1;;;25605:62;-1:-1:-1;;;25683:18:1;;;25676:37;25730:19;;4873:63:0;25526:229:1;4873:63:0;4966:1;4955:8;:12;:28;;;;;4982:1;4971:8;:12;4955:28;4947:83;;;;-1:-1:-1;;;4947:83:0;;;;;;;:::i;:::-;5075:8;5051:21;:7;5063:8;5051:11;:21::i;:::-;:32;;;;:::i;2942:142::-;2994:6;3021;;;:30;;-1:-1:-1;3050:1:0;3045;3036:5;3045:1;3050;3036:5;:::i;:::-;3032:9;-1:-1:-1;3031:15:0;;3032:9;3031:15;:::i;:::-;:20;3021:30;3013:63;;;;-1:-1:-1;;;3013:63:0;;21773:2:1;3013:63:0;;;21755:21:1;21812:2;21792:18;;;21785:30;-1:-1:-1;;;21831:18:1;;;21824:50;21891:18;;3013:63:0;21745:170:1;2669:128:0;2721:6;2763:1;2753:5;2757:1;2763;2753:5;:::i;:::-;2749:9;;;2748:16;;2740:49;;;;-1:-1:-1;;;2740:49:0;;22537:2:1;2740:49:0;;;22519:21:1;22576:2;22556:18;;;22549:30;-1:-1:-1;;;22595:18:1;;;22588:50;22655:18;;2740:49:0;22509:170:1;4260:393:0;4353:13;4368;4395:14;4414:26;4425:6;4433;4414:10;:26::i;:::-;4394:46;;;4452:13;4467;4502:32;4510:7;4519:6;4527;4502:7;:32::i;:::-;-1:-1:-1;;;;;4485:62:0;;:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4451:98;-1:-1:-1;;;;;4451:98:0;;;-1:-1:-1;;;;;4451:98:0;;;4593:6;-1:-1:-1;;;;;4583:16:0;:6;-1:-1:-1;;;;;4583:16:0;;:62;;4626:8;4636;4583:62;;;4603:8;4613;4583:62;4560:85;;;;-1:-1:-1;4260:393:0;-1:-1:-1;;;;;;;4260:393:0:o;3267:353::-;3342:14;3358;3403:6;-1:-1:-1;;;;;3393:16:0;:6;-1:-1:-1;;;;;3393:16:0;;;3385:68;;;;-1:-1:-1;;;3385:68:0;;21007:2:1;3385:68:0;;;20989:21:1;21046:2;21026:18;;;21019:30;21085:34;21065:18;;;21058:62;-1:-1:-1;;;21136:18:1;;;21129:37;21183:19;;3385:68:0;20979:229:1;3385:68:0;3492:6;-1:-1:-1;;;;;3483:15:0;:6;-1:-1:-1;;;;;3483:15:0;;:53;;3521:6;3529;3483:53;;;3502:6;3510;3483:53;3464:72;;-1:-1:-1;3464:72:0;-1:-1:-1;;;;;;3555:20:0;;3547:65;;;;-1:-1:-1;;;3547:65:0;;24423:2:1;3547:65:0;;;24405:21:1;;;24442:18;;;24435:30;24501:34;24481:18;;;24474:62;24553:18;;3547:65:0;24395:182:1;3547:65:0;3267:353;;;;;:::o;12839:598::-;12927:27;12935:5;-1:-1:-1;;;;;12927:25:0;;:27::i;:::-;12919:71;;;;-1:-1:-1;;;12919:71:0;;27140:2:1;12919:71:0;;;27122:21:1;27179:2;27159:18;;;27152:30;27218:33;27198:18;;;27191:61;27269:18;;12919:71:0;27112:181:1;12919:71:0;13064:12;13078:23;13113:5;-1:-1:-1;;;;;13105:19:0;13125:4;13105:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13063:67;;;;13149:7;13141:52;;;;-1:-1:-1;;;13141:52:0;;23300:2:1;13141:52:0;;;23282:21:1;;;23319:18;;;23312:30;23378:34;23358:18;;;23351:62;23430:18;;13141:52:0;23272:182:1;13141:52:0;13210:17;;:21;13206:224;;13352:10;13341:30;;;;;;;;;;;;:::i;:::-;13333:85;;;;-1:-1:-1;;;13333:85:0;;26315:2:1;13333:85:0;;;26297:21:1;26354:2;26334:18;;;26327:30;26393:34;26373:18;;;26366:62;-1:-1:-1;;;26444:18:1;;;26437:40;26494:19;;13333:85:0;26287:232:1;2805:129:0;2857:6;2899:1;2889:5;2893:1;2899;2889:5;:::i;:::-;2885:9;;;2884:16;;2876:50;;;;-1:-1:-1;;;2876:50:0;;20246:2:1;2876:50:0;;;20228:21:1;20285:2;20265:18;;;20258:30;-1:-1:-1;;;20304:18:1;;;20297:51;20365:18;;2876:50:0;20218:171:1;11659:374:0;11719:4;11942:20;;11785:66;11982:15;;;;;:42;;-1:-1:-1;12001:23:0;;;11974:51;-1:-1:-1;;11659:374:0:o;14:134:1:-;82:20;;111:31;82:20;111:31;:::i;153:367::-;216:8;226:6;280:3;273:4;265:6;261:17;257:27;247:2;;298:1;295;288:12;247:2;-1:-1:-1;321:20:1;;364:18;353:30;;350:2;;;396:1;393;386:12;350:2;433:4;425:6;421:17;409:29;;493:3;486:4;476:6;473:1;469:14;461:6;457:27;453:38;450:47;447:2;;;510:1;507;500:12;525:188;604:13;;-1:-1:-1;;;;;646:42:1;;636:53;;626:2;;703:1;700;693:12;718:156;784:20;;844:4;833:16;;823:27;;813:2;;864:1;861;854:12;879:247;938:6;991:2;979:9;970:7;966:23;962:32;959:2;;;1007:1;1004;997:12;959:2;1046:9;1033:23;1065:31;1090:5;1065:31;:::i;:::-;1115:5;949:177;-1:-1:-1;;;949:177:1:o;1131:251::-;1201:6;1254:2;1242:9;1233:7;1229:23;1225:32;1222:2;;;1270:1;1267;1260:12;1222:2;1302:9;1296:16;1321:31;1346:5;1321:31;:::i;1387:388::-;1455:6;1463;1516:2;1504:9;1495:7;1491:23;1487:32;1484:2;;;1532:1;1529;1522:12;1484:2;1571:9;1558:23;1590:31;1615:5;1590:31;:::i;:::-;1640:5;-1:-1:-1;1697:2:1;1682:18;;1669:32;1710:33;1669:32;1710:33;:::i;:::-;1762:7;1752:17;;;1474:301;;;;;:::o;1780:945::-;1909:6;1917;1925;1933;1941;1949;1957;1965;1973;2026:3;2014:9;2005:7;2001:23;1997:33;1994:2;;;2043:1;2040;2033:12;1994:2;2082:9;2069:23;2101:31;2126:5;2101:31;:::i;:::-;2151:5;-1:-1:-1;2208:2:1;2193:18;;2180:32;2221:33;2180:32;2221:33;:::i;:::-;2273:7;-1:-1:-1;2332:2:1;2317:18;;2304:32;2345:33;2304:32;2345:33;:::i;:::-;2397:7;-1:-1:-1;2451:2:1;2436:18;;2423:32;;-1:-1:-1;2502:3:1;2487:19;;2474:33;;-1:-1:-1;2526:37:1;2558:3;2543:19;;2526:37;:::i;:::-;2516:47;;2610:3;2599:9;2595:19;2582:33;2572:43;;2662:3;2651:9;2647:19;2634:33;2624:43;;2714:3;2703:9;2699:19;2686:33;2676:43;;1984:741;;;;;;;;;;;:::o;2730:456::-;2807:6;2815;2823;2876:2;2864:9;2855:7;2851:23;2847:32;2844:2;;;2892:1;2889;2882:12;2844:2;2931:9;2918:23;2950:31;2975:5;2950:31;:::i;:::-;3000:5;-1:-1:-1;3057:2:1;3042:18;;3029:32;3070:33;3029:32;3070:33;:::i;:::-;2834:352;;3122:7;;-1:-1:-1;;;3176:2:1;3161:18;;;;3148:32;;2834:352::o;3191:525::-;3277:6;3285;3293;3301;3354:3;3342:9;3333:7;3329:23;3325:33;3322:2;;;3371:1;3368;3361:12;3322:2;3410:9;3397:23;3429:31;3454:5;3429:31;:::i;:::-;3479:5;-1:-1:-1;3536:2:1;3521:18;;3508:32;3549:33;3508:32;3549:33;:::i;:::-;3312:404;;3601:7;;-1:-1:-1;;;;3655:2:1;3640:18;;3627:32;;3706:2;3691:18;3678:32;;3312:404::o;3721:315::-;3789:6;3797;3850:2;3838:9;3829:7;3825:23;3821:32;3818:2;;;3866:1;3863;3856:12;3818:2;3905:9;3892:23;3924:31;3949:5;3924:31;:::i;:::-;3974:5;4026:2;4011:18;;;;3998:32;;-1:-1:-1;;;3808:228:1:o;4041:456::-;4118:6;4126;4134;4187:2;4175:9;4166:7;4162:23;4158:32;4155:2;;;4203:1;4200;4193:12;4155:2;4242:9;4229:23;4261:31;4286:5;4261:31;:::i;:::-;4311:5;-1:-1:-1;4363:2:1;4348:18;;4335:32;;-1:-1:-1;4419:2:1;4404:18;;4391:32;4432:33;4391:32;4432:33;:::i;:::-;4484:7;4474:17;;;4145:352;;;;;:::o;4502:1200::-;4667:6;4675;4683;4691;4699;4707;4715;4723;4731;4739;4747:7;4801:3;4789:9;4780:7;4776:23;4772:33;4769:2;;;4818:1;4815;4808:12;4769:2;4857:9;4844:23;4876:31;4901:5;4876:31;:::i;:::-;4926:5;-1:-1:-1;4978:2:1;4963:18;;4950:32;;-1:-1:-1;5029:2:1;5014:18;;5001:32;;-1:-1:-1;5084:2:1;5069:18;;5056:32;5111:18;5100:30;;5097:2;;;5143:1;5140;5133:12;5097:2;5182:70;5244:7;5235:6;5224:9;5220:22;5182:70;:::i;:::-;5271:8;;-1:-1:-1;5156:96:1;-1:-1:-1;;5358:3:1;5343:19;;5330:33;5372;5330;5372;:::i;:::-;5424:7;-1:-1:-1;5478:3:1;5463:19;;5450:33;;-1:-1:-1;5502:37:1;5534:3;5519:19;;5502:37;:::i;:::-;5492:47;;5586:3;5575:9;5571:19;5558:33;5548:43;;5638:3;5627:9;5623:19;5610:33;5600:43;;5691:3;5680:9;5676:19;5663:33;5652:44;;4759:943;;;;;;;;;;;;;;:::o;5707:1404::-;5901:6;5909;5917;5925;5933;5941;5949;5957;6010:3;5998:9;5989:7;5985:23;5981:33;5978:2;;;6027:1;6024;6017:12;5978:2;6067:9;6054:23;6096:18;6137:2;6129:6;6126:14;6123:2;;;6153:1;6150;6143:12;6123:2;6192:70;6254:7;6245:6;6234:9;6230:22;6192:70;:::i;:::-;6281:8;;-1:-1:-1;6166:96:1;-1:-1:-1;6369:2:1;6354:18;;6341:32;;-1:-1:-1;6385:16:1;;;6382:2;;;6414:1;6411;6404:12;6382:2;6453:72;6517:7;6506:8;6495:9;6491:24;6453:72;:::i;:::-;6544:8;;-1:-1:-1;6427:98:1;-1:-1:-1;6632:2:1;6617:18;;6604:32;;-1:-1:-1;6648:16:1;;;6645:2;;;6677:1;6674;6667:12;6645:2;6716:72;6780:7;6769:8;6758:9;6754:24;6716:72;:::i;:::-;6807:8;;-1:-1:-1;6690:98:1;-1:-1:-1;6895:2:1;6880:18;;6867:32;;-1:-1:-1;6911:16:1;;;6908:2;;;6940:1;6937;6930:12;6908:2;;6979:72;7043:7;7032:8;7021:9;7017:24;6979:72;:::i;:::-;5968:1143;;;;-1:-1:-1;5968:1143:1;;-1:-1:-1;5968:1143:1;;;;;;7070:8;-1:-1:-1;;;5968:1143:1:o;7116:1720::-;7346:6;7354;7362;7370;7378;7386;7394;7402;7410;7418;7471:3;7459:9;7450:7;7446:23;7442:33;7439:2;;;7488:1;7485;7478:12;7439:2;7528:9;7515:23;7557:18;7598:2;7590:6;7587:14;7584:2;;;7614:1;7611;7604:12;7584:2;7653:70;7715:7;7706:6;7695:9;7691:22;7653:70;:::i;:::-;7742:8;;-1:-1:-1;7627:96:1;-1:-1:-1;7830:2:1;7815:18;;7802:32;;-1:-1:-1;7846:16:1;;;7843:2;;;7875:1;7872;7865:12;7843:2;7914:72;7978:7;7967:8;7956:9;7952:24;7914:72;:::i;:::-;8005:8;;-1:-1:-1;7888:98:1;-1:-1:-1;8093:2:1;8078:18;;8065:32;;-1:-1:-1;8109:16:1;;;8106:2;;;8138:1;8135;8128:12;8106:2;8177:72;8241:7;8230:8;8219:9;8215:24;8177:72;:::i;:::-;8268:8;;-1:-1:-1;8151:98:1;-1:-1:-1;8356:2:1;8341:18;;8328:32;;-1:-1:-1;8372:16:1;;;8369:2;;;8401:1;8398;8391:12;8369:2;8440:72;8504:7;8493:8;8482:9;8478:24;8440:72;:::i;:::-;8531:8;;-1:-1:-1;8414:98:1;-1:-1:-1;8619:3:1;8604:19;;8591:33;;-1:-1:-1;8636:16:1;;;8633:2;;;8665:1;8662;8655:12;8633:2;;8704:72;8768:7;8757:8;8746:9;8742:24;8704:72;:::i;:::-;8678:98;;8795:8;8785:18;;;8822:8;8812:18;;;7429:1407;;;;;;;;;;;;;:::o;8841:277::-;8908:6;8961:2;8949:9;8940:7;8936:23;8932:32;8929:2;;;8977:1;8974;8967:12;8929:2;9009:9;9003:16;9062:5;9055:13;9048:21;9041:5;9038:32;9028:2;;9084:1;9081;9074:12;9123:594;9218:6;9226;9234;9242;9250;9303:3;9291:9;9282:7;9278:23;9274:33;9271:2;;;9320:1;9317;9310:12;9271:2;9356:9;9343:23;9333:33;;9416:2;9405:9;9401:18;9388:32;9429:31;9454:5;9429:31;:::i;:::-;9479:5;-1:-1:-1;9536:2:1;9521:18;;9508:32;9549:33;9508:32;9549:33;:::i;:::-;9261:456;;;;-1:-1:-1;9601:7:1;;9655:2;9640:18;;9627:32;;-1:-1:-1;9706:3:1;9691:19;9678:33;;9261:456;-1:-1:-1;;9261:456:1:o;9722:916::-;9862:6;9870;9878;9886;9894;9902;9910;9918;9971:3;9959:9;9950:7;9946:23;9942:33;9939:2;;;9988:1;9985;9978:12;9939:2;10024:9;10011:23;10001:33;;10081:2;10070:9;10066:18;10053:32;10043:42;;10132:2;10121:9;10117:18;10104:32;10094:42;;10187:2;10176:9;10172:18;10159:32;10214:18;10206:6;10203:30;10200:2;;;10246:1;10243;10236:12;10200:2;10285:70;10347:7;10338:6;10327:9;10323:22;10285:70;:::i;:::-;10374:8;;-1:-1:-1;10259:96:1;-1:-1:-1;;10459:3:1;10444:19;;10431:33;10473:31;10431:33;10473:31;:::i;:::-;9929:709;;;;-1:-1:-1;9929:709:1;;;;;;10523:5;;-1:-1:-1;;;10575:3:1;10560:19;;10547:33;;10627:3;10612:19;10599:33;;9929:709::o;10643:450::-;10730:6;10738;10746;10799:2;10787:9;10778:7;10774:23;10770:32;10767:2;;;10815:1;10812;10805:12;10767:2;10838:40;10868:9;10838:40;:::i;:::-;10828:50;;10897:49;10942:2;10931:9;10927:18;10897:49;:::i;:::-;10887:59;;10989:2;10978:9;10974:18;10968:25;11033:10;11026:5;11022:22;11015:5;11012:33;11002:2;;11059:1;11056;11049:12;11098:184;11168:6;11221:2;11209:9;11200:7;11196:23;11192:32;11189:2;;;11237:1;11234;11227:12;11189:2;-1:-1:-1;11260:16:1;;11179:103;-1:-1:-1;11179:103:1:o;11287:1200::-;11380:6;11388;11441:2;11429:9;11420:7;11416:23;11412:32;11409:2;;;11457:1;11454;11447:12;11409:2;11493:9;11480:23;11470:33;;11522:2;11575;11564:9;11560:18;11547:32;11598:18;11639:2;11631:6;11628:14;11625:2;;;11655:1;11652;11645:12;11625:2;11693:6;11682:9;11678:22;11668:32;;11738:7;11731:4;11727:2;11723:13;11719:27;11709:2;;11760:1;11757;11750:12;11709:2;11796;11783:16;11818:2;11814;11811:10;11808:2;;;11824:18;;:::i;:::-;11870:2;11867:1;11863:10;11902:2;11896:9;11965:2;11961:7;11956:2;11952;11948:11;11944:25;11936:6;11932:38;12020:6;12008:10;12005:22;12000:2;11988:10;11985:18;11982:46;11979:2;;;12031:18;;:::i;:::-;12067:2;12060:22;12117:18;;;12151:15;;;;-1:-1:-1;12186:11:1;;;12216;;;12212:20;;12209:33;-1:-1:-1;12206:2:1;;;12255:1;12252;12245:12;12206:2;12277:1;12268:10;;12287:169;12301:2;12298:1;12295:9;12287:169;;;12358:23;12377:3;12358:23;:::i;:::-;12346:36;;12319:1;12312:9;;;;;12402:12;;;;12434;;12287:169;;;12291:3;12475:6;12465:16;;;;;;;;11399:1088;;;;;:::o;12492:847::-;12623:6;12631;12639;12647;12655;12663;12671;12724:3;12712:9;12703:7;12699:23;12695:33;12692:2;;;12741:1;12738;12731:12;12692:2;12777:9;12764:23;12754:33;;12834:2;12823:9;12819:18;12806:32;12796:42;;12889:2;12878:9;12874:18;12861:32;12916:18;12908:6;12905:30;12902:2;;;12948:1;12945;12938:12;12902:2;12987:70;13049:7;13040:6;13029:9;13025:22;12987:70;:::i;:::-;13076:8;;-1:-1:-1;12961:96:1;-1:-1:-1;;13161:2:1;13146:18;;13133:32;13174:31;13133:32;13174:31;:::i;:::-;12682:657;;;;-1:-1:-1;12682:657:1;;;;13224:5;13276:3;13261:19;;13248:33;;-1:-1:-1;13328:3:1;13313:19;;;13300:33;;12682:657;-1:-1:-1;;12682:657:1:o;13344:316::-;13421:6;13429;13437;13490:2;13478:9;13469:7;13465:23;13461:32;13458:2;;;13506:1;13503;13496:12;13458:2;-1:-1:-1;;13529:23:1;;;13599:2;13584:18;;13571:32;;-1:-1:-1;13650:2:1;13635:18;;;13622:32;;13448:212;-1:-1:-1;13448:212:1:o;14003:274::-;14132:3;14170:6;14164:13;14186:53;14232:6;14227:3;14220:4;14212:6;14208:17;14186:53;:::i;:::-;14255:16;;;;;14140:137;-1:-1:-1;;14140:137:1:o;15511:670::-;-1:-1:-1;;;;;15878:15:1;;;15860:34;;15930:15;;;;15925:2;15910:18;;15903:43;15977:2;15962:18;;15955:34;;;;16020:2;16005:18;;15998:34;;;;16081:4;16069:17;16063:3;16048:19;;16041:46;15840:3;16103:19;;16096:35;16162:3;16147:19;;16140:35;;;;15809:3;15794:19;;15776:405::o;16186:274::-;-1:-1:-1;;;;;16378:32:1;;;;16360:51;;16442:2;16427:18;;16420:34;16348:2;16333:18;;16315:145::o;16465:375::-;-1:-1:-1;;;;;16723:15:1;;;16705:34;;16770:2;16755:18;;16748:34;;;;16818:15;;;16813:2;16798:18;;16791:43;16655:2;16640:18;;16622:218::o;16845:1001::-;17157:3;17170:22;;;17142:19;;17227:22;;;17109:4;17307:6;17280:3;17265:19;;17109:4;17341:304;17355:6;17352:1;17349:13;17341:304;;;17430:6;17417:20;17450:31;17475:5;17450:31;:::i;:::-;-1:-1:-1;;;;;17506:31:1;17494:44;;17561:4;17620:15;;;;17585:12;;;;17534:1;17370:9;17341:304;;;-1:-1:-1;17696:4:1;17681:20;;17674:36;;;;-1:-1:-1;;17741:2:1;17726:18;;17719:34;;;;17784:2;17769:18;;17762:34;;;;17827:3;17812:19;;;17805:35;17662:3;17118:728;-1:-1:-1;;17118:728:1:o;17851:948::-;18153:3;18166:22;;;18237:13;;18138:19;;;18259:22;;;18105:4;;18335;;18312:3;18297:19;;;18362:15;;;18105:4;18405:195;18419:6;18416:1;18413:13;18405:195;;;18484:13;;-1:-1:-1;;;;;18480:39:1;18468:52;;18540:12;;;;18575:15;;;;18516:1;18434:9;18405:195;;;-1:-1:-1;;;18636:18:1;;;18629:34;;;;-1:-1:-1;18694:2:1;18679:18;;18672:34;;;;18737:2;18722:18;;18715:34;;;;18780:3;18765:19;;;18758:35;18617:3;18114:685;-1:-1:-1;18114:685:1:o;18804:632::-;18975:2;19027:21;;;19097:13;;19000:18;;;19119:22;;;18946:4;;18975:2;19198:15;;;;19172:2;19157:18;;;18946:4;19241:169;19255:6;19252:1;19249:13;19241:169;;;19316:13;;19304:26;;19385:15;;;;19350:12;;;;19277:1;19270:9;19241:169;;;-1:-1:-1;19427:3:1;;18955:481;-1:-1:-1;;;;;;18955:481:1:o;19633:406::-;19835:2;19817:21;;;19874:2;19854:18;;;19847:30;-1:-1:-1;;;;;;;;;;;19908:2:1;19893:18;;19886:62;-1:-1:-1;;;19979:2:1;19964:18;;19957:40;20029:3;20014:19;;19807:232::o;20394:406::-;20596:2;20578:21;;;20635:2;20615:18;;;20608:30;20674:34;20669:2;20654:18;;20647:62;-1:-1:-1;;;20740:2:1;20725:18;;20718:40;20790:3;20775:19;;20568:232::o;23866:350::-;24068:2;24050:21;;;24107:2;24087:18;;;24080:30;24146:28;24141:2;24126:18;;24119:56;24207:2;24192:18;;24040:176::o;25760:348::-;25962:2;25944:21;;;26001:2;25981:18;;;25974:30;26040:26;26035:2;26020:18;;26013:54;26099:2;26084:18;;25934:174::o;28120:624::-;28351:6;28340:9;28333:25;28394:6;28389:2;28378:9;28374:18;28367:34;28466:1;28462;28457:3;28453:11;28449:19;28441:6;28437:32;28432:2;28421:9;28417:18;28410:60;28506:3;28501:2;28490:9;28486:18;28479:31;28314:4;28539:6;28533:13;28583:6;28577:3;28566:9;28562:19;28555:35;28599:67;28659:6;28653:3;28642:9;28638:19;28633:2;28625:6;28621:15;28599:67;:::i;:::-;28727:2;28706:15;-1:-1:-1;;28702:29:1;28687:45;;;;28734:3;28683:55;;28323:421;-1:-1:-1;;;;;28323:421:1:o;29073:128::-;29113:3;29144:1;29140:6;29137:1;29134:13;29131:2;;;29150:18;;:::i;:::-;-1:-1:-1;29186:9:1;;29121:80::o;29206:217::-;29246:1;29272;29262:2;;29316:10;29311:3;29307:20;29304:1;29297:31;29351:4;29348:1;29341:15;29379:4;29376:1;29369:15;29262:2;-1:-1:-1;29408:9:1;;29252:171::o;29428:168::-;29468:7;29534:1;29530;29526:6;29522:14;29519:1;29516:21;29511:1;29504:9;29497:17;29493:45;29490:2;;;29541:18;;:::i;:::-;-1:-1:-1;29581:9:1;;29480:116::o;29601:125::-;29641:4;29669:1;29666;29663:8;29660:2;;;29674:18;;:::i;:::-;-1:-1:-1;29711:9:1;;29650:76::o;29731:258::-;29803:1;29813:113;29827:6;29824:1;29821:13;29813:113;;;29903:11;;;29897:18;29884:11;;;29877:39;29849:2;29842:10;29813:113;;;29944:6;29941:1;29938:13;29935:2;;;-1:-1:-1;;29979:1:1;29961:16;;29954:27;29784:205::o;29994:136::-;30033:3;30061:5;30051:2;;30070:18;;:::i;:::-;-1:-1:-1;;;30106:18:1;;30041:89::o;30135:135::-;30174:3;-1:-1:-1;;30195:17:1;;30192:2;;;30215:18;;:::i;:::-;-1:-1:-1;30262:1:1;30251:13;;30182:88::o;30275:127::-;30336:10;30331:3;30327:20;30324:1;30317:31;30367:4;30364:1;30357:15;30391:4;30388:1;30381:15;30407:127;30468:10;30463:3;30459:20;30456:1;30449:31;30499:4;30496:1;30489:15;30523:4;30520:1;30513:15;30539:127;30600:10;30595:3;30591:20;30588:1;30581:31;30631:4;30628:1;30621:15;30655:4;30652:1;30645:15;30671:127;30732:10;30727:3;30723:20;30720:1;30713:31;30763:4;30760:1;30753:15;30787:4;30784:1;30777:15;30803:131;-1:-1:-1;;;;;30878:31:1;;30868:42;;30858:2;;30924:1;30921;30914:12;30858:2;30848:86;:::o

Swarm Source

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