Contract 0x0cae51e1032e8461f4806e26332c030e34de3adb 6

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x3c5a2d503e2dad679939f7ebf0f7a12e560d8e94ffe5065efc9c9c55f784b71bAny Swap In Auto200509672022-08-12 2:36:391 hr 11 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  0x0cae51e1032e8461f4806e26332c030e34de3adb0 ETH0.000152062541 ETH
0xe967a17f286b5722852a7e9f26ccab87e6918fe7e4bff0a4d39cd1880f2d25ecAny Swap In Auto200477842022-08-12 1:26:162 hrs 21 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  0x0cae51e1032e8461f4806e26332c030e34de3adb0 ETH0.000162006141 ETH
0xac9c9f5e358f7bc4f0ddcca877323645cdc3f64d4945b2e073a021640c9730dbAny Swap In Auto200464602022-08-12 0:51:062 hrs 56 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  0x0cae51e1032e8461f4806e26332c030e34de3adb0 ETH0.000162491616 ETH
0x373e1853c4c95542554aacd690393d85f61f96ec669f1036ac35a44bc2882d52Any Swap In Auto200458642022-08-12 0:36:233 hrs 11 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  0x0cae51e1032e8461f4806e26332c030e34de3adb0 ETH0.000148410157 ETH
0xbbf28de025d7c11a81ec6cd68dc6cdaa8ea4b2f9f93d09aaeaceb3584d5fa855Any Swap In Auto200419012022-08-11 23:11:104 hrs 36 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  0x0cae51e1032e8461f4806e26332c030e34de3adb0 ETH0.000167563168 ETH
0xa862f935c50b495b7edc5b8629491f2c1c307e8c668df7f46e254aff6775f57fAny Swap In Auto200406592022-08-11 22:53:354 hrs 54 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  0x0cae51e1032e8461f4806e26332c030e34de3adb0 ETH0.00017629326 ETH
0xca3e74b3235699c144d5f7fbb1847a259a0a7c98835edd264fd5bf27a48c56c2Any Swap In Auto200384672022-08-11 21:53:195 hrs 54 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  0x0cae51e1032e8461f4806e26332c030e34de3adb0 ETH0.000177180419 ETH
0x704df40f53edc46a3670d3aceb15ffac55a875b83122aad098a23064701fa84dAny Swap In Auto200352172022-08-11 20:37:597 hrs 9 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  0x0cae51e1032e8461f4806e26332c030e34de3adb0 ETH0.000181118215 ETH
0x26802522cba44334aa839a97642f5577ec1f9808d3f30f888767d320c44578f9Any Swap Out Und...200321732022-08-11 19:27:338 hrs 20 mins ago0xf5659d33af64b5b987f048a4ba7cfca1c96f7f7a IN  0x0cae51e1032e8461f4806e26332c030e34de3adb0 ETH0.000150106078 ETH
0x1178724b8334a68d669e352281acfd25810029cc7bde449361421648eb9407eeAny Swap In Auto200314562022-08-11 19:15:428 hrs 32 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  0x0cae51e1032e8461f4806e26332c030e34de3adb0 ETH0.000166314455 ETH
0x49d52f4eb5de74a6d0dc24e742fba43e96d7d25df6541a2119b8b9e257df3f44Any Swap Out200308592022-08-11 19:06:378 hrs 41 mins ago0x70886cfe3287a77926c81b1dfcf9e111f6471bdd IN  0x0cae51e1032e8461f4806e26332c030e34de3adb0 ETH0.000149330809 ETH
0xa70558dd95a29f4d5064030d27978a256182902ba4cc0e439185b4c99a4be436Any Swap In Auto200303622022-08-11 18:56:198 hrs 51 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  0x0cae51e1032e8461f4806e26332c030e34de3adb0 ETH0.000180682619 ETH
0x164d39c4eff0b832ae8fdafb043b0268061a2356528569737c60f42a862ae5f9Any Swap In Auto200293372022-08-11 18:33:439 hrs 14 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  0x0cae51e1032e8461f4806e26332c030e34de3adb0 ETH0.000179531263 ETH
0x478f6617f4e7ff7a6c879e6c580ad92a4d21ecee106e5f5a4c778547dbc8a0deAny Swap Out Und...200286802022-08-11 18:22:439 hrs 25 mins ago0x8594d8e9483473626908648a5539d9d65ca2fe8d IN  0x0cae51e1032e8461f4806e26332c030e34de3adb0 ETH0.000141628192 ETH
0x4a1496509eaa0507e28716aa7115e1f19eff4b78f3859cd53b397e1daa4f275cAny Swap Out200271262022-08-11 17:56:459 hrs 51 mins ago0x20007eee0605f759b0e5f08b84898acdba93f136 IN  0x0cae51e1032e8461f4806e26332c030e34de3adb0 ETH0.000140313983 ETH
0x35cd4a0f653ce4c03403ef56e12a6ec3d51a19fc8a35e9217871803b51993a5eAny Swap In Auto200254452022-08-11 17:22:5310 hrs 24 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  0x0cae51e1032e8461f4806e26332c030e34de3adb0 ETH0.000151292575 ETH
0x62168dcb7098af8d667305f85390e92933412daa31203f0619b98b2b2b845070Any Swap In Auto200247982022-08-11 17:12:0810 hrs 35 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  0x0cae51e1032e8461f4806e26332c030e34de3adb0 ETH0.000164775366 ETH
0x92b2f6037714aa0eca44cdabb1a246eb8e48e97a3a75e924d67c96ae76c9e99dAny Swap In Auto200244592022-08-11 17:04:4210 hrs 43 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  0x0cae51e1032e8461f4806e26332c030e34de3adb0 ETH0.000164431906 ETH
0x4a653b36a5e7aed4736ca44d390694596fd96b551ae46c2c25dc4349a7542a1bAny Swap In Auto200234632022-08-11 16:42:2211 hrs 5 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  0x0cae51e1032e8461f4806e26332c030e34de3adb0 ETH0.000165480454 ETH
0x5779f9c08780341b29bf2e4752267dccb9eff03daa0e453251bda0f7cccab07bAny Swap In Auto200217242022-08-11 16:09:3811 hrs 38 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  0x0cae51e1032e8461f4806e26332c030e34de3adb0 ETH0.000164434146 ETH
0xcd2f13593558bfad60955b961c55414d5e27e5987c394f6dea258647250c97c9Any Swap In Auto200213942022-08-11 16:04:0711 hrs 43 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  0x0cae51e1032e8461f4806e26332c030e34de3adb0 ETH0.000163744986 ETH
0xcfc084e96779f64bd8fdef52777596cfacea5afb3d8843a2ccc6be8dc8fba6e5Any Swap In Auto200206112022-08-11 15:49:2811 hrs 58 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  0x0cae51e1032e8461f4806e26332c030e34de3adb0 ETH0.000164886345 ETH
0xb9383843bcd86db2b8149bf7883d0d57597860a4814bcd36576dcf8fae963ce8Any Swap Out200201992022-08-11 15:43:5312 hrs 3 mins ago0x2e1a8a6c2f8d1af772faa99f71606727171ca9f0 IN  0x0cae51e1032e8461f4806e26332c030e34de3adb0 ETH0.000136776916 ETH
0x1511f1c12a90978c0bd00618b4892a29c48037a012066067f28e1b44e7f8ca1eAny Swap In Auto200201972022-08-11 15:43:5312 hrs 3 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  0x0cae51e1032e8461f4806e26332c030e34de3adb0 ETH0.000165198469 ETH
0x44e0ad97af4d7cbdd642f61400840def96f7c65d21fe61e102ca843e5bbf9c93Any Swap In Auto200192952022-08-11 15:29:2312 hrs 18 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  0x0cae51e1032e8461f4806e26332c030e34de3adb0 ETH0.000133413186 ETH
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x3c5a2d503e2dad679939f7ebf0f7a12e560d8e94ffe5065efc9c9c55f784b71b200509672022-08-12 2:36:391 hr 11 mins ago 0x0cae51e1032e8461f4806e26332c030e34de3adb 0x9873795f5dab11e1c0342c4a58904c59827ede0c0 ETH
0x3c5a2d503e2dad679939f7ebf0f7a12e560d8e94ffe5065efc9c9c55f784b71b200509672022-08-12 2:36:391 hr 11 mins ago 0x0cae51e1032e8461f4806e26332c030e34de3adb0xd4d42f0b6def4ce0383636770ef773390d85c61a0 ETH
0x3c5a2d503e2dad679939f7ebf0f7a12e560d8e94ffe5065efc9c9c55f784b71b200509672022-08-12 2:36:391 hr 11 mins ago 0x0cae51e1032e8461f4806e26332c030e34de3adb 0x9873795f5dab11e1c0342c4a58904c59827ede0c0 ETH
0x3c5a2d503e2dad679939f7ebf0f7a12e560d8e94ffe5065efc9c9c55f784b71b200509672022-08-12 2:36:391 hr 11 mins ago 0x0cae51e1032e8461f4806e26332c030e34de3adb 0x9873795f5dab11e1c0342c4a58904c59827ede0c0 ETH
0xe967a17f286b5722852a7e9f26ccab87e6918fe7e4bff0a4d39cd1880f2d25ec200477842022-08-12 1:26:162 hrs 21 mins ago 0x0cae51e1032e8461f4806e26332c030e34de3adb 0xae8627db72d7fc6241f2e2b87eb2bbc7cafb16610 ETH
0xe967a17f286b5722852a7e9f26ccab87e6918fe7e4bff0a4d39cd1880f2d25ec200477842022-08-12 1:26:162 hrs 21 mins ago 0x0cae51e1032e8461f4806e26332c030e34de3adb 0xae8627db72d7fc6241f2e2b87eb2bbc7cafb16610 ETH
0xac9c9f5e358f7bc4f0ddcca877323645cdc3f64d4945b2e073a021640c9730db200464602022-08-12 0:51:062 hrs 56 mins ago 0x0cae51e1032e8461f4806e26332c030e34de3adb Multichain: anyHND Token0 ETH
0xac9c9f5e358f7bc4f0ddcca877323645cdc3f64d4945b2e073a021640c9730db200464602022-08-12 0:51:062 hrs 56 mins ago 0x0cae51e1032e8461f4806e26332c030e34de3adb Hundred Finance: HND Token0 ETH
0xac9c9f5e358f7bc4f0ddcca877323645cdc3f64d4945b2e073a021640c9730db200464602022-08-12 0:51:062 hrs 56 mins ago 0x0cae51e1032e8461f4806e26332c030e34de3adb Multichain: anyHND Token0 ETH
0xac9c9f5e358f7bc4f0ddcca877323645cdc3f64d4945b2e073a021640c9730db200464602022-08-12 0:51:062 hrs 56 mins ago 0x0cae51e1032e8461f4806e26332c030e34de3adb Multichain: anyHND Token0 ETH
0x373e1853c4c95542554aacd690393d85f61f96ec669f1036ac35a44bc2882d52200458642022-08-12 0:36:233 hrs 11 mins ago 0x0cae51e1032e8461f4806e26332c030e34de3adb 0xae8627db72d7fc6241f2e2b87eb2bbc7cafb16610 ETH
0x373e1853c4c95542554aacd690393d85f61f96ec669f1036ac35a44bc2882d52200458642022-08-12 0:36:233 hrs 11 mins ago 0x0cae51e1032e8461f4806e26332c030e34de3adb 0xae8627db72d7fc6241f2e2b87eb2bbc7cafb16610 ETH
0xbbf28de025d7c11a81ec6cd68dc6cdaa8ea4b2f9f93d09aaeaceb3584d5fa855200419012022-08-11 23:11:104 hrs 36 mins ago 0x0cae51e1032e8461f4806e26332c030e34de3adb 0x99c409e5f62e4bd2ac142f17cafb6810b8f0baae0 ETH
0xbbf28de025d7c11a81ec6cd68dc6cdaa8ea4b2f9f93d09aaeaceb3584d5fa855200419012022-08-11 23:11:104 hrs 36 mins ago 0x0cae51e1032e8461f4806e26332c030e34de3adb 0x99c409e5f62e4bd2ac142f17cafb6810b8f0baae0 ETH
0xa862f935c50b495b7edc5b8629491f2c1c307e8c668df7f46e254aff6775f57f200406592022-08-11 22:53:354 hrs 54 mins ago 0x0cae51e1032e8461f4806e26332c030e34de3adb 0x99c409e5f62e4bd2ac142f17cafb6810b8f0baae0 ETH
0xa862f935c50b495b7edc5b8629491f2c1c307e8c668df7f46e254aff6775f57f200406592022-08-11 22:53:354 hrs 54 mins ago 0x0cae51e1032e8461f4806e26332c030e34de3adb 0x99c409e5f62e4bd2ac142f17cafb6810b8f0baae0 ETH
0xca3e74b3235699c144d5f7fbb1847a259a0a7c98835edd264fd5bf27a48c56c2200384672022-08-11 21:53:195 hrs 54 mins ago 0x0cae51e1032e8461f4806e26332c030e34de3adb Multichain: anyHND Token0 ETH
0xca3e74b3235699c144d5f7fbb1847a259a0a7c98835edd264fd5bf27a48c56c2200384672022-08-11 21:53:195 hrs 54 mins ago 0x0cae51e1032e8461f4806e26332c030e34de3adb Hundred Finance: HND Token0 ETH
0xca3e74b3235699c144d5f7fbb1847a259a0a7c98835edd264fd5bf27a48c56c2200384672022-08-11 21:53:195 hrs 54 mins ago 0x0cae51e1032e8461f4806e26332c030e34de3adb Multichain: anyHND Token0 ETH
0xca3e74b3235699c144d5f7fbb1847a259a0a7c98835edd264fd5bf27a48c56c2200384672022-08-11 21:53:195 hrs 54 mins ago 0x0cae51e1032e8461f4806e26332c030e34de3adb Multichain: anyHND Token0 ETH
0x704df40f53edc46a3670d3aceb15ffac55a875b83122aad098a23064701fa84d200352172022-08-11 20:37:597 hrs 9 mins ago 0x0cae51e1032e8461f4806e26332c030e34de3adb 0x7c10b66c442fc403ab2b8bd73553d0df262ad8a50 ETH
0x704df40f53edc46a3670d3aceb15ffac55a875b83122aad098a23064701fa84d200352172022-08-11 20:37:597 hrs 9 mins ago 0x0cae51e1032e8461f4806e26332c030e34de3adb0x51fc0f6660482ea73330e414efd7808811a57fa20 ETH
0x704df40f53edc46a3670d3aceb15ffac55a875b83122aad098a23064701fa84d200352172022-08-11 20:37:597 hrs 9 mins ago 0x0cae51e1032e8461f4806e26332c030e34de3adb 0x7c10b66c442fc403ab2b8bd73553d0df262ad8a50 ETH
0x704df40f53edc46a3670d3aceb15ffac55a875b83122aad098a23064701fa84d200352172022-08-11 20:37:597 hrs 9 mins ago 0x0cae51e1032e8461f4806e26332c030e34de3adb 0x7c10b66c442fc403ab2b8bd73553d0df262ad8a50 ETH
0x26802522cba44334aa839a97642f5577ec1f9808d3f30f888767d320c44578f9200321732022-08-11 19:27:338 hrs 20 mins ago 0x0cae51e1032e8461f4806e26332c030e34de3adb 0xbc2597d3f1f9565100582cde02e3712d03b8b0f60 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

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 Arbiscan on 2021-09-22
*/

// 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"}]

60c06040523480156200001157600080fd5b506040516200504d3803806200504d833981016040819052620000349162000095565b600180546001600160a01b039092166001600160a01b0319909216919091179055426002556001600160601b0319606092831b8116608052911b1660a052620000df565b80516001600160a01b03811681146200009057600080fd5b919050565b600080600060608486031215620000ab57600080fd5b620000b68462000078565b9250620000c66020850162000078565b9150620000d66040850162000078565b90509250925092565b60805160601c60a05160601c614eb6620001976000396000818161020d0152818161051601528181610820015281816108ef015281816116270152818161181001528181611cc401528181611d8501528181611e0b01528181611f7d015281816120d301528181612aa001528181612b610152612be70152600081816105e801528181610cbf01528181610e6401528181610f7c015281816116d30152818161302401528181613b0a0152613b5a0152614eb66000f3fe6080604052600436106101fd5760003560e01c8063832e94921161010d578063a5e56571116100a0578063d06ca61f1161006f578063d06ca61f1461062a578063d8b9f6101461064a578063dcfb77b11461066a578063edbdf5e21461068a578063f75c2664146106aa57600080fd5b8063a5e56571146105a3578063ad615dec146105b6578063c45a0155146105d6578063c8e174f61461060a57600080fd5b80638fd903f5116100dc5780638fd903f51461050457806399a2f2d71461055057806399cd84b5146105635780639aa1ac611461058357600080fd5b8063832e94921461048457806385f8c259146104a457806387cc6e2f146104c45780638d7d3eea146104e457600080fd5b80633f88de89116101905780635b7b018c1161015f5780635b7b018c146103f157806365782f56146104115780636a45397214610431578063701bb89114610451578063825bb13c1461046457600080fd5b80633f88de8914610361578063456862aa146103815780634d93bb94146103b157806352a397d5146103d157600080fd5b80631f00ca74116101cc5780631f00ca74146102d4578063241dc2df1461030157806325121b76146103215780632fc1e7281461034157600080fd5b80630175b1c414610241578063054d50d4146102615780630bb57203146102945780631b91a934146102b457600080fd5b3661023c57336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461023a5761023a614df0565b005b600080fd5b34801561024d57600080fd5b5061023a61025c36600461477d565b6106bf565b34801561026d57600080fd5b5061028161027c366004614a07565b6109ed565b6040519081526020015b60405180910390f35b3480156102a057600080fd5b5061023a6102af36600461498a565b610a02565b3480156102c057600080fd5b5061023a6102cf366004614371565b610b22565b3480156102e057600080fd5b506102f46102ef3660046148b2565b610cb8565b60405161028b9190614b9e565b34801561030d57600080fd5b5061023a61031c36600461443d565b610cee565b34801561032d57600080fd5b5061023a61033c36600461466a565b610d01565b34801561034d57600080fd5b506102f461035c3660046147cf565b610e04565b34801561036d57600080fd5b5061023a61037c36600461477d565b61105d565b34801561038d57600080fd5b506103a161039c366004614338565b61112a565b604051901515815260200161028b565b3480156103bd57600080fd5b5061023a6103cc3660046144f1565b611235565b3480156103dd57600080fd5b506102f46103ec3660046147cf565b6115c2565b3480156103fd57600080fd5b506103a161040c3660046142f7565b6118e4565b34801561041d57600080fd5b5061023a61042c36600461498a565b611a0c565b34801561043d57600080fd5b5061023a61044c36600461498a565b611b0b565b61028161045f366004614338565b611cc0565b34801561047057600080fd5b5061023a61047f36600461477d565b611f2d565b34801561049057600080fd5b5061028161049f3660046144af565b611f79565b3480156104b057600080fd5b506102816104bf366004614a07565b612149565b3480156104d057600080fd5b5061023a6104df366004614483565b612156565b3480156104f057600080fd5b5061023a6104ff366004614371565b61229c565b34801561051057600080fd5b506105387f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161028b565b34801561055c57600080fd5b5046610281565b34801561056f57600080fd5b5061023a61057e3660046144f1565b61242e565b34801561058f57600080fd5b5061023a61059e3660046144f1565b612776565b61023a6105b13660046143fc565b612a9e565b3480156105c257600080fd5b506102816105d1366004614a07565b612d11565b3480156105e257600080fd5b506105387f000000000000000000000000000000000000000000000000000000000000000081565b34801561061657600080fd5b5061023a6106253660046144f1565b612d1e565b34801561063657600080fd5b506102f46106453660046148b2565b61301d565b34801561065657600080fd5b5061023a61066536600461498a565b61304a565b34801561067657600080fd5b5061023a6106853660046145a6565b613140565b34801561069657600080fd5b5061023a6106a536600461443d565b6131e6565b3480156106b657600080fd5b506105386132b3565b6106c76132b3565b6001600160a01b0316336001600160a01b0316146107005760405162461bcd60e51b81526004016106f790614c64565b60405180910390fd5b61070d85858585856132de565b60008490506000816001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561074d57600080fd5b505afa158015610761573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610785919061431b565b90506001600160a01b0381161580159061081957506040516370a0823160e01b81526001600160a01b0387811660048301528591908316906370a082319060240160206040518083038186803b1580156107de57600080fd5b505afa1580156107f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108169190614899565b10155b156109e4577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316141561096257604051620e75bb60e21b81526001600160a01b038316906239d6ec9061088690889088903090600401614aa9565b602060405180830381600087803b1580156108a057600080fd5b505af11580156108b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d89190614899565b50604051632e1a7d4d60e01b8152600481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561093b57600080fd5b505af115801561094f573d6000803e3d6000fd5b5050505061095d85856133c4565b6109e4565b604051620e75bb60e21b81526001600160a01b038316906239d6ec9061099090889088908290600401614aa9565b602060405180830381600087803b1580156109aa57600080fd5b505af11580156109be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e29190614899565b505b50505050505050565b60006109fa848484613490565b949350505050565b8142811015610a235760405162461bcd60e51b81526004016106f790614c9b565b85856000818110610a3657610a36614e1c565b9050602002016020810190610a4b91906142f7565b6001600160a01b0316639dc29fac338a6040518363ffffffff1660e01b8152600401610a78929190614a90565b602060405180830381600087803b158015610a9257600080fd5b505af1158015610aa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aca919061475b565b506001600160a01b038416337ffea6abdf4fd32f20966dff7619354cd82cd43dc78a3bee479f04c74dbfc585b388888c8c465b89604051610b1096959493929190614acc565b60405180910390a35050505050505050565b876001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015610b5b57600080fd5b505afa158015610b6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b93919061431b565b6001600160a01b031663605629d68a8a89898989896040518863ffffffff1660e01b8152600401610bca9796959493929190614a4f565b602060405180830381600087803b158015610be457600080fd5b505af1158015610bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1c919061475b565b50604051630bebbf4d60e41b8152600481018790526001600160a01b038a8116602483015289169063bebbf4d090604401602060405180830381600087803b158015610c6757600080fd5b505af1158015610c7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9f9190614899565b50610cad898989898561355e565b505050505050505050565b6060610ce57f00000000000000000000000000000000000000000000000000000000000000008484613642565b90505b92915050565b610cfb338585858561355e565b50505050565b610d096132b3565b6001600160a01b0316336001600160a01b031614610d395760405162461bcd60e51b81526004016106f790614c64565b60005b87811015610df757610de58b8b83818110610d5957610d59614e1c565b905060200201358a8a84818110610d7257610d72614e1c565b9050602002016020810190610d8791906142f7565b898985818110610d9957610d99614e1c565b9050602002016020810190610dae91906142f7565b888886818110610dc057610dc0614e1c565b90506020020135878787818110610dd957610dd9614e1c565b905060200201356132de565b80610def81614dd5565b915050610d3c565b5050505050505050505050565b6060610e0e6132b3565b6001600160a01b0316336001600160a01b031614610e3e5760405162461bcd60e51b81526004016106f790614c64565b8242811015610e5f5760405162461bcd60e51b81526004016106f790614c9b565b610ebd7f00000000000000000000000000000000000000000000000000000000000000008a8989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506137d892505050565b9150878260018451610ecf9190614d7b565b81518110610edf57610edf614e1c565b60200260200101511015610f4b5760405162461bcd60e51b815260206004820152602d60248201527f5375736869737761705632526f757465723a20494e53554646494349454e545f60448201526c13d55514155517d05353d55395609a1b60648201526084016106f7565b6110118a88886000818110610f6257610f62614e1c565b9050602002016020810190610f7791906142f7565b610ff07f00000000000000000000000000000000000000000000000000000000000000008b8b6000818110610fae57610fae614e1c565b9050602002016020810190610fc391906142f7565b8c8c6001818110610fd657610fd6614e1c565b9050602002016020810190610feb91906142f7565b61394e565b8560008151811061100357611003614e1c565b6020026020010151876132de565b611050828888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a9250613a27915050565b5098975050505050505050565b6110656132b3565b6001600160a01b0316336001600160a01b0316146110955760405162461bcd60e51b81526004016106f790614c64565b6110a285858585856132de565b604051620e75bb60e21b81526001600160a01b038516906239d6ec906110d090869086908290600401614aa9565b602060405180830381600087803b1580156110ea57600080fd5b505af11580156110fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111229190614899565b505050505050565b60006111346132b3565b6001600160a01b0316336001600160a01b0316146111645760405162461bcd60e51b81526004016106f790614c64565b6001600160a01b0382166111ba5760405162461bcd60e51b815260206004820152601d60248201527f416e79737761705633526f757465723a2061646472657373283078302900000060448201526064016106f7565b6040516360e232a960e01b81526001600160a01b0383811660048301528416906360e232a990602401602060405180830381600087803b1580156111fd57600080fd5b505af1158015611211573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce5919061475b565b84428110156112565760405162461bcd60e51b81526004016106f790614c9b565b60008989600081811061126b5761126b614e1c565b905060200201602081019061128091906142f7565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156112b857600080fd5b505afa1580156112cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f0919061431b565b9050806001600160a01b031663d505accf8e308f8b8b8b8b6040518863ffffffff1660e01b815260040161132a9796959493929190614a4f565b600060405180830381600087803b15801561134457600080fd5b505af1158015611358573d6000803e3d6000fd5b5050505061139a8d8b8b600081811061137357611373614e1c565b905060200201602081019061138891906142f7565b6001600160a01b03841691908f613c29565b898960008181106113ad576113ad614e1c565b90506020020160208101906113c291906142f7565b604051630bebbf4d60e41b8152600481018e90526001600160a01b038f81166024830152919091169063bebbf4d090604401602060405180830381600087803b15801561140e57600080fd5b505af1158015611422573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114469190614899565b508989600081811061145a5761145a614e1c565b905060200201602081019061146f91906142f7565b6001600160a01b0316639dc29fac8e8e6040518363ffffffff1660e01b815260040161149c929190614a90565b602060405180830381600087803b1580156114b657600080fd5b505af11580156114ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ee919061475b565b5060008a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050905060008e905060008a905060008f905060008f905060006115524690565b90506000899050846001600160a01b0316866001600160a01b03167f278277e0209c347189add7bd92411973b5f6b8644f7ac62ea1be984ce993f8f489878787876040516115a4959493929190614b36565b60405180910390a35050505050505050505050505050505050505050565b60606115cc6132b3565b6001600160a01b0316336001600160a01b0316146115fc5760405162461bcd60e51b81526004016106f790614c64565b824281101561161d5760405162461bcd60e51b81526004016106f790614c9b565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168787611654600182614d7b565b81811061166357611663614e1c565b905060200201602081019061167891906142f7565b6001600160a01b0316146116ce5760405162461bcd60e51b815260206004820152601d60248201527f416e79737761705633526f757465723a20494e56414c49445f5041544800000060448201526064016106f7565b61172c7f00000000000000000000000000000000000000000000000000000000000000008a8989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506137d892505050565b915087826001845161173e9190614d7b565b8151811061174e5761174e614e1c565b602002602001015110156117b85760405162461bcd60e51b815260206004820152602b60248201527f416e79737761705633526f757465723a20494e53554646494349454e545f4f5560448201526a1514155517d05353d5539560aa1b60648201526084016106f7565b6117cf8a88886000818110610f6257610f62614e1c565b61180e82888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613a27915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836001855161184c9190614d7b565b8151811061185c5761185c614e1c565b60200260200101516040518263ffffffff1660e01b815260040161188291815260200190565b600060405180830381600087803b15801561189c57600080fd5b505af11580156118b0573d6000803e3d6000fd5b505050506110508583600185516118c79190614d7b565b815181106118d7576118d7614e1c565b60200260200101516133c4565b60006118ee6132b3565b6001600160a01b0316336001600160a01b03161461191e5760405162461bcd60e51b81526004016106f790614c64565b6001600160a01b0382166119745760405162461bcd60e51b815260206004820152601d60248201527f416e79737761705633526f757465723a2061646472657373283078302900000060448201526064016106f7565b61197c6132b3565b600080546001600160a01b03199081166001600160a01b0393841617909155600180549091169184169190911790556119b8426202a300614d22565b60028190556001546000546001600160a01b0391821691167fcda32bc39904597666dfa9f9c845714756e1ffffad55b52e0d344673a21981214660405190815260200160405180910390a45060015b919050565b8142811015611a2d5760405162461bcd60e51b81526004016106f790614c9b565b85856000818110611a4057611a40614e1c565b9050602002016020810190611a5591906142f7565b6001600160a01b0316639dc29fac338a6040518363ffffffff1660e01b8152600401611a82929190614a90565b602060405180830381600087803b158015611a9c57600080fd5b505af1158015611ab0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad4919061475b565b506001600160a01b038416337f278277e0209c347189add7bd92411973b5f6b8644f7ac62ea1be984ce993f8f488888c8c46610afd565b8142811015611b2c5760405162461bcd60e51b81526004016106f790614c9b565b611c023387876000818110611b4357611b43614e1c565b9050602002016020810190611b5891906142f7565b8a89896000818110611b6c57611b6c614e1c565b9050602002016020810190611b8191906142f7565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015611bb957600080fd5b505afa158015611bcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf1919061431b565b6001600160a01b0316929190613c29565b85856000818110611c1557611c15614e1c565b9050602002016020810190611c2a91906142f7565b604051630bebbf4d60e41b8152600481018a90523360248201526001600160a01b03919091169063bebbf4d090604401602060405180830381600087803b158015611c7457600080fd5b505af1158015611c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cac9190614899565b5085856000818110611a4057611a40614e1c565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015611d2557600080fd5b505afa158015611d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5d919061431b565b6001600160a01b031614611d835760405162461bcd60e51b81526004016106f790614c1a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015611dde57600080fd5b505af1158015611df2573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb9250611e45915086903490600401614a90565b602060405180830381600087803b158015611e5f57600080fd5b505af1158015611e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e97919061475b565b611ea357611ea3614df0565b604051630bebbf4d60e41b81523460048201526001600160a01b03838116602483015284169063bebbf4d090604401602060405180830381600087803b158015611eec57600080fd5b505af1158015611f00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f249190614899565b50349392505050565b611f356132b3565b6001600160a01b0316336001600160a01b031614611f655760405162461bcd60e51b81526004016106f790614c64565b611f7285858585856132de565b5050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015611fde57600080fd5b505afa158015611ff2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612016919061431b565b6001600160a01b03161461203c5760405162461bcd60e51b81526004016106f790614c1a565b604051620e75bb60e21b81526001600160a01b038516906239d6ec9061206a90339087903090600401614aa9565b602060405180830381600087803b15801561208457600080fd5b505af1158015612098573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120bc9190614899565b50604051632e1a7d4d60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561211f57600080fd5b505af1158015612133573d6000803e3d6000fd5b5050505061214182846133c4565b509092915050565b60006109fa848484613c83565b61215e6132b3565b6001600160a01b0316336001600160a01b03161461218e5760405162461bcd60e51b81526004016106f790614c64565b60006121986132b3565b6040516340c10f1960e01b81529091506001600160a01b038416906340c10f19906121c99084908690600401614a90565b602060405180830381600087803b1580156121e357600080fd5b505af11580156121f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061221b919061475b565b50604051620e75bb60e21b81526001600160a01b038416906239d6ec9061224a90849086908290600401614aa9565b602060405180830381600087803b15801561226457600080fd5b505af1158015612278573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cfb9190614899565b6000886001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156122d757600080fd5b505afa1580156122eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230f919061431b565b60405163d505accf60e01b81529091506001600160a01b0382169063d505accf9061234a908d9030908c908c908c908c908c90600401614a4f565b600060405180830381600087803b15801561236457600080fd5b505af1158015612378573d6000803e3d6000fd5b50612392925050506001600160a01b0382168b8b8a613c29565b604051630bebbf4d60e41b8152600481018890526001600160a01b038b811660248301528a169063bebbf4d090604401602060405180830381600087803b1580156123dc57600080fd5b505af11580156123f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124149190614899565b506124228a8a8a8a8661355e565b50505050505050505050565b844281101561244f5760405162461bcd60e51b81526004016106f790614c9b565b60008989600081811061246457612464614e1c565b905060200201602081019061247991906142f7565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156124b157600080fd5b505afa1580156124c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e9919061431b565b9050806001600160a01b031663d505accf8e308f8b8b8b8b6040518863ffffffff1660e01b81526004016125239796959493929190614a4f565b600060405180830381600087803b15801561253d57600080fd5b505af1158015612551573d6000803e3d6000fd5b5050505061256c8d8b8b600081811061137357611373614e1c565b8989600081811061257f5761257f614e1c565b905060200201602081019061259491906142f7565b604051630bebbf4d60e41b8152600481018e90526001600160a01b038f81166024830152919091169063bebbf4d090604401602060405180830381600087803b1580156125e057600080fd5b505af11580156125f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126189190614899565b508989600081811061262c5761262c614e1c565b905060200201602081019061264191906142f7565b6001600160a01b0316639dc29fac8e8e6040518363ffffffff1660e01b815260040161266e929190614a90565b602060405180830381600087803b15801561268857600080fd5b505af115801561269c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c0919061475b565b5060008a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050905060008e905060008a905060008f905060008f905060006127244690565b90506000899050846001600160a01b0316866001600160a01b03167ffea6abdf4fd32f20966dff7619354cd82cd43dc78a3bee479f04c74dbfc585b389878787876040516115a4959493929190614b36565b84428110156127975760405162461bcd60e51b81526004016106f790614c9b565b888860008181106127aa576127aa614e1c565b90506020020160208101906127bf91906142f7565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156127f757600080fd5b505afa15801561280b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282f919061431b565b6001600160a01b031663605629d68d8b8b600081811061285157612851614e1c565b905060200201602081019061286691906142f7565b8e8a8a8a8a6040518863ffffffff1660e01b815260040161288d9796959493929190614a4f565b602060405180830381600087803b1580156128a757600080fd5b505af11580156128bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128df919061475b565b50888860008181106128f3576128f3614e1c565b905060200201602081019061290891906142f7565b604051630bebbf4d60e41b8152600481018d90526001600160a01b038e81166024830152919091169063bebbf4d090604401602060405180830381600087803b15801561295457600080fd5b505af1158015612968573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061298c9190614899565b50888860008181106129a0576129a0614e1c565b90506020020160208101906129b591906142f7565b6001600160a01b0316639dc29fac8d8d6040518363ffffffff1660e01b81526004016129e2929190614a90565b602060405180830381600087803b1580156129fc57600080fd5b505af1158015612a10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a34919061475b565b50866001600160a01b03168c6001600160a01b03167ffea6abdf4fd32f20966dff7619354cd82cd43dc78a3bee479f04c74dbfc585b38b8b8f8f612a754690565b89604051612a8896959493929190614acc565b60405180910390a3505050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015612b0157600080fd5b505afa158015612b15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b39919061431b565b6001600160a01b031614612b5f5760405162461bcd60e51b81526004016106f790614c1a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015612bba57600080fd5b505af1158015612bce573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb9250612c21915086903490600401614a90565b602060405180830381600087803b158015612c3b57600080fd5b505af1158015612c4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c73919061475b565b612c7f57612c7f614df0565b604051630bebbf4d60e41b81523460048201523360248201526001600160a01b0384169063bebbf4d090604401602060405180830381600087803b158015612cc657600080fd5b505af1158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe9190614899565b50612d0c338484348561355e565b505050565b60006109fa848484613d4c565b8442811015612d3f5760405162461bcd60e51b81526004016106f790614c9b565b88886000818110612d5257612d52614e1c565b9050602002016020810190612d6791906142f7565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015612d9f57600080fd5b505afa158015612db3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd7919061431b565b6001600160a01b031663605629d68d8b8b6000818110612df957612df9614e1c565b9050602002016020810190612e0e91906142f7565b8e8a8a8a8a6040518863ffffffff1660e01b8152600401612e359796959493929190614a4f565b602060405180830381600087803b158015612e4f57600080fd5b505af1158015612e63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e87919061475b565b5088886000818110612e9b57612e9b614e1c565b9050602002016020810190612eb091906142f7565b604051630bebbf4d60e41b8152600481018d90526001600160a01b038e81166024830152919091169063bebbf4d090604401602060405180830381600087803b158015612efc57600080fd5b505af1158015612f10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f349190614899565b5088886000818110612f4857612f48614e1c565b9050602002016020810190612f5d91906142f7565b6001600160a01b0316639dc29fac8d8d6040518363ffffffff1660e01b8152600401612f8a929190614a90565b602060405180830381600087803b158015612fa457600080fd5b505af1158015612fb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fdc919061475b565b50866001600160a01b03168c6001600160a01b03167f278277e0209c347189add7bd92411973b5f6b8644f7ac62ea1be984ce993f8f48b8b8f8f612a754690565b6060610ce57f000000000000000000000000000000000000000000000000000000000000000084846137d8565b814281101561306b5760405162461bcd60e51b81526004016106f790614c9b565b6130823387876000818110611b4357611b43614e1c565b8585600081811061309557613095614e1c565b90506020020160208101906130aa91906142f7565b604051630bebbf4d60e41b8152600481018a90523360248201526001600160a01b03919091169063bebbf4d090604401602060405180830381600087803b1580156130f457600080fd5b505af1158015613108573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061312c9190614899565b5085856000818110610a3657610a36614e1c565b60005b87811015610cad576131d4338a8a8481811061316157613161614e1c565b905060200201602081019061317691906142f7565b89898581811061318857613188614e1c565b905060200201602081019061319d91906142f7565b8888868181106131af576131af614e1c565b905060200201358787878181106131c8576131c8614e1c565b9050602002013561355e565b806131de81614dd5565b915050613143565b613225338584876001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015611bb957600080fd5b604051630bebbf4d60e41b8152600481018390523360248201526001600160a01b0385169063bebbf4d090604401602060405180830381600087803b15801561326d57600080fd5b505af1158015613281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a59190614899565b50610cfb338585858561355e565b600060025442106132ce57506001546001600160a01b031690565b506000546001600160a01b031690565b6040516340c10f1960e01b81526001600160a01b038516906340c10f199061330c9086908690600401614a90565b602060405180830381600087803b15801561332657600080fd5b505af115801561333a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061335e919061475b565b50826001600160a01b0316846001600160a01b0316867faac9ce45fe3adf5143598c4f18a369591a20a3384aedaf1b525d29127e1fcd55858561339e4690565b604080519384526020840192909252908201526060015b60405180910390a45050505050565b604080516000808252602082019092526001600160a01b0384169083906040516133ee9190614a33565b60006040518083038185875af1925050503d806000811461342b576040519150601f19603f3d011682016040523d82523d6000602084013e613430565b606091505b5050905080612d0c5760405162461bcd60e51b815260206004820152602660248201527f5472616e7366657248656c7065723a204e41544956455f5452414e534645525f60448201526511905253115160d21b60648201526084016106f7565b60008084116134e55760405162461bcd60e51b815260206004820152602d6024820152600080516020614e6183398151915260448201526c17d25394155517d05353d55395609a1b60648201526084016106f7565b6000831180156134f55750600082115b6135115760405162461bcd60e51b81526004016106f790614be2565b600061351f856103e5613ddc565b9050600061352d8285613ddc565b9050600061354783613541886103e8613ddc565b90613e43565b90506135538183614d3a565b979650505050505050565b604051632770a7eb60e21b81526001600160a01b03851690639dc29fac9061358c9088908690600401614a90565b602060405180830381600087803b1580156135a657600080fd5b505af11580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de919061475b565b50826001600160a01b0316856001600160a01b0316856001600160a01b03167f97116cf6cd4f6412bb47914d6db18da9e16ab2142f543b86e207c24fbd16b23a856136264690565b60408051928352602083019190915281018690526060016133b5565b60606002825110156136965760405162461bcd60e51b815260206004820181905260248201527f53757368697377617056324c6962726172793a20494e56414c49445f5041544860448201526064016106f7565b815167ffffffffffffffff8111156136b0576136b0614e32565b6040519080825280602002602001820160405280156136d9578160200160208202803683370190505b5090508281600183516136ec9190614d7b565b815181106136fc576136fc614e1c565b6020026020010181815250506000600183516137189190614d7b565b90505b80156137d05760008061376b8786613734600187614d7b565b8151811061374457613744614e1c565b602002602001015187868151811061375e5761375e614e1c565b6020026020010151613e98565b9150915061379384848151811061378457613784614e1c565b60200260200101518383613c83565b8461379f600186614d7b565b815181106137af576137af614e1c565b602002602001018181525050505080806137c890614dbe565b91505061371b565b509392505050565b606060028251101561382c5760405162461bcd60e51b815260206004820181905260248201527f53757368697377617056324c6962726172793a20494e56414c49445f5041544860448201526064016106f7565b815167ffffffffffffffff81111561384657613846614e32565b60405190808252806020026020018201604052801561386f578160200160208202803683370190505b509050828160008151811061388657613886614e1c565b60200260200101818152505060005b600183516138a39190614d7b565b8110156137d0576000806138e9878685815181106138c3576138c3614e1c565b6020026020010151878660016138d99190614d22565b8151811061375e5761375e614e1c565b9150915061391184848151811061390257613902614e1c565b60200260200101518383613490565b8461391d856001614d22565b8151811061392d5761392d614e1c565b6020026020010181815250505050808061394690614dd5565b915050613895565b600080600061395d8585613f71565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b1660348201529193509150869060480160405160208183030381529060405280519060200120604051602001613a059291906001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527fe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b60005b60018351613a389190614d7b565b811015610cfb57600080848381518110613a5457613a54614e1c565b602002602001015185846001613a6a9190614d22565b81518110613a7a57613a7a614e1c565b6020026020010151915091506000613a928383613f71565b509050600087613aa3866001614d22565b81518110613ab357613ab3614e1c565b60200260200101519050600080836001600160a01b0316866001600160a01b031614613ae157826000613ae5565b6000835b91509150600060028a51613af99190614d7b565b8810613b055788613b53565b613b537f0000000000000000000000000000000000000000000000000000000000000000878c613b368c6002614d22565b81518110613b4657613b46614e1c565b602002602001015161394e565b9050613b807f0000000000000000000000000000000000000000000000000000000000000000888861394e565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613bbd576020820181803683370190505b506040518563ffffffff1660e01b8152600401613bdd9493929190614cd2565b600060405180830381600087803b158015613bf757600080fd5b505af1158015613c0b573d6000803e3d6000fd5b50505050505050505050508080613c2190614dd5565b915050613a2a565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610cfb90859061406b565b6000808411613cd95760405162461bcd60e51b815260206004820152602e6024820152600080516020614e6183398151915260448201526d17d3d55514155517d05353d5539560921b60648201526084016106f7565b600083118015613ce95750600082115b613d055760405162461bcd60e51b81526004016106f790614be2565b6000613d1d6103e8613d178688613ddc565b90613ddc565b90506000613d316103e5613d1786896141f2565b9050613d4260016135418385614d3a565b9695505050505050565b6000808411613d9b5760405162461bcd60e51b81526020600482015260276024820152600080516020614e6183398151915260448201526617d05353d5539560ca1b60648201526084016106f7565b600083118015613dab5750600082115b613dc75760405162461bcd60e51b81526004016106f790614be2565b82613dd28584613ddc565b6109fa9190614d3a565b6000811580613e0057508282613df28183614d5c565b9250613dfe9083614d3a565b145b610ce85760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b60448201526064016106f7565b600082613e508382614d22565b9150811015610ce85760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b60448201526064016106f7565b6000806000613ea78585613f71565b509050600080613eb888888861394e565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613ef057600080fd5b505afa158015613f04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f289190614854565b506001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b031614613f5f578082613f62565b81815b90999098509650505050505050565b600080826001600160a01b0316846001600160a01b03161415613fe65760405162461bcd60e51b815260206004820152602760248201527f53757368697377617056324c6962726172793a204944454e544943414c5f41446044820152664452455353455360c81b60648201526084016106f7565b826001600160a01b0316846001600160a01b031610614006578284614009565b83835b90925090506001600160a01b0382166140645760405162461bcd60e51b815260206004820181905260248201527f53757368697377617056324c6962726172793a205a45524f5f4144445245535360448201526064016106f7565b9250929050565b61407d826001600160a01b0316614248565b6140c95760405162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740060448201526064016106f7565b600080836001600160a01b0316836040516140e49190614a33565b6000604051808303816000865af19150503d8060008114614121576040519150601f19603f3d011682016040523d82523d6000602084013e614126565b606091505b5091509150816141785760405162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656460448201526064016106f7565b805115610cfb5780806020019051810190614193919061475b565b610cfb5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106f7565b6000826141ff8382614d7b565b9150811115610ce85760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b60448201526064016106f7565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906109fa5750141592915050565b8035611a0781614e48565b60008083601f84011261429c57600080fd5b50813567ffffffffffffffff8111156142b457600080fd5b6020830191508360208260051b850101111561406457600080fd5b80516001600160701b0381168114611a0757600080fd5b803560ff81168114611a0757600080fd5b60006020828403121561430957600080fd5b813561431481614e48565b9392505050565b60006020828403121561432d57600080fd5b815161431481614e48565b6000806040838503121561434b57600080fd5b823561435681614e48565b9150602083013561436681614e48565b809150509250929050565b60008060008060008060008060006101208a8c03121561439057600080fd5b893561439b81614e48565b985060208a01356143ab81614e48565b975060408a01356143bb81614e48565b965060608a0135955060808a013594506143d760a08b016142e6565b935060c08a0135925060e08a013591506101008a013590509295985092959850929598565b60008060006060848603121561441157600080fd5b833561441c81614e48565b9250602084013561442c81614e48565b929592945050506040919091013590565b6000806000806080858703121561445357600080fd5b843561445e81614e48565b9350602085013561446e81614e48565b93969395505050506040820135916060013590565b6000806040838503121561449657600080fd5b82356144a181614e48565b946020939093013593505050565b6000806000606084860312156144c457600080fd5b83356144cf81614e48565b92506020840135915060408401356144e681614e48565b809150509250925092565b60008060008060008060008060008060006101408c8e03121561451357600080fd5b8b3561451e81614e48565b9a5060208c0135995060408c0135985060608c013567ffffffffffffffff81111561454857600080fd5b6145548e828f0161428a565b90995097505060808c013561456881614e48565b955060a08c0135945061457d60c08d016142e6565b935060e08c013592506101008c013591506101208c013590509295989b509295989b9093969950565b6000806000806000806000806080898b0312156145c257600080fd5b883567ffffffffffffffff808211156145da57600080fd5b6145e68c838d0161428a565b909a50985060208b01359150808211156145ff57600080fd5b61460b8c838d0161428a565b909850965060408b013591508082111561462457600080fd5b6146308c838d0161428a565b909650945060608b013591508082111561464957600080fd5b506146568b828c0161428a565b999c989b5096995094979396929594505050565b60008060008060008060008060008060a08b8d03121561468957600080fd5b8a3567ffffffffffffffff808211156146a157600080fd5b6146ad8e838f0161428a565b909c509a5060208d01359150808211156146c657600080fd5b6146d28e838f0161428a565b909a50985060408d01359150808211156146eb57600080fd5b6146f78e838f0161428a565b909850965060608d013591508082111561471057600080fd5b61471c8e838f0161428a565b909650945060808d013591508082111561473557600080fd5b506147428d828e0161428a565b915080935050809150509295989b9194979a5092959850565b60006020828403121561476d57600080fd5b8151801515811461431457600080fd5b600080600080600060a0868803121561479557600080fd5b8535945060208601356147a781614e48565b935060408601356147b781614e48565b94979396509394606081013594506080013592915050565b60008060008060008060008060e0898b0312156147eb57600080fd5b883597506020890135965060408901359550606089013567ffffffffffffffff81111561481757600080fd5b6148238b828c0161428a565b909650945050608089013561483781614e48565b979a969950949793969295929450505060a08201359160c0013590565b60008060006060848603121561486957600080fd5b614872846142cf565b9250614880602085016142cf565b9150604084015163ffffffff811681146144e657600080fd5b6000602082840312156148ab57600080fd5b5051919050565b600080604083850312156148c557600080fd5b8235915060208084013567ffffffffffffffff808211156148e557600080fd5b818601915086601f8301126148f957600080fd5b81358181111561490b5761490b614e32565b8060051b604051601f19603f8301168101818110858211171561493057614930614e32565b604052828152858101935084860182860187018b101561494f57600080fd5b600095505b83861015614979576149658161427f565b855260019590950194938601938601614954565b508096505050505050509250929050565b600080600080600080600060c0888a0312156149a557600080fd5b8735965060208801359550604088013567ffffffffffffffff8111156149ca57600080fd5b6149d68a828b0161428a565b90965094505060608801356149ea81614e48565b969995985093969295946080840135945060a09093013592915050565b600080600060608486031215614a1c57600080fd5b505081359360208301359350604090920135919050565b60008251614a45818460208701614d92565b9190910192915050565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393841681526020810192909252909116604082015260600190565b60a0808252810186905260008760c08301825b89811015614b0f578235614af281614e48565b6001600160a01b0316825260209283019290910190600101614adf565b50602084019790975250506040810193909352606083019190915260809091015292915050565b60a0808252865190820181905260009060209060c0840190828a01845b82811015614b785781516001600160a01b031684529284019290840190600101614b53565b505050908301969096525060408101939093526060830191909152608090910152919050565b6020808252825182820181905260009190848201906040850190845b81811015614bd657835183529284019291840191600101614bba565b50909695505050505050565b6020808252602a90820152600080516020614e618339815191526040820152695f4c495155494449545960b01b606082015260800190565b6020808252602a908201527f416e79737761705633526f757465723a20756e6465726c79696e67206973206e6040820152696f7420774e415449564560b01b606082015260800190565b6020808252601a908201527f416e79737761705633526f757465723a20464f5242494444454e000000000000604082015260600190565b60208082526018908201527f416e79737761705633526f757465723a20455850495245440000000000000000604082015260600190565b84815283602082015260018060a01b03831660408201526080606082015260008251806080840152614d0b8160a0850160208701614d92565b601f01601f19169190910160a00195945050505050565b60008219821115614d3557614d35614e06565b500190565b600082614d5757634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614d7657614d76614e06565b500290565b600082821015614d8d57614d8d614e06565b500390565b60005b83811015614dad578181015183820152602001614d95565b83811115610cfb5750506000910152565b600081614dcd57614dcd614e06565b506000190190565b6000600019821415614de957614de9614e06565b5060010190565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114614e5d57600080fd5b5056fe53757368697377617056324c6962726172793a20494e53554646494349454e54a264697066735822122073407528f159bfea36d084e49afe223dc0f542434e791cc076c52d87bb5c136a64736f6c63430008060033000000000000000000000000c35dadb65012ec5796536bd9864ed8773abc74c400000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1000000000000000000000000647dc1366da28f8a64eb831fc8e9f05c90d1ea5a

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

000000000000000000000000c35dadb65012ec5796536bd9864ed8773abc74c400000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1000000000000000000000000647dc1366da28f8a64eb831fc8e9f05c90d1ea5a

-----Decoded View---------------
Arg [0] : _factory (address): 0xc35dadb65012ec5796536bd9864ed8773abc74c4
Arg [1] : _wNATIVE (address): 0x82af49447d8a07e3bd95bd0d56f35241523fbab1
Arg [2] : _mpc (address): 0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000c35dadb65012ec5796536bd9864ed8773abc74c4
Arg [1] : 00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1
Arg [2] : 000000000000000000000000647dc1366da28f8a64eb831fc8e9f05c90d1ea5a


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

Metadata Hash

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.