Contract 0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d 18

 
Txn Hash Method
Block
From
To
Value
0x08c2f0259f536ef9310714c0a4e4be9a16dac086fe66070c93795eb7fa1f1447Any Swap In Auto10192612023-05-31 7:28:453 days 14 hrs ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d0 Ether0.0002247885421.221
0x93b269fce08281fda654f6c6a043471d1d27d034fcc3f2df214de0c5aad613b3Any Swap In Auto10172042023-05-24 14:24:0410 days 7 hrs ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d0 Ether0.00043069181.1
0xebbfebcc9aa5129ebc333a0224c985acb4576a7c4d654793bc6c06beb7916e51Any Swap In Auto10171912023-05-24 13:57:0710 days 8 hrs ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d0 Ether0.00044855471.1
0x103d0c330e7303ebcb274f66e545e3253b6e5f997b3c51a9fa25b3bdd23439a9Any Swap Out10170382023-05-24 1:15:5710 days 20 hrs ago0xa57e7b069d3433d14c4f4648384860274e279ee8 IN  0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d0 Ether0.0001890040381.010101
0xbe36f3acd76ea7867c02eda69b3844da6fb966b363d0cc4b556aa6b77a5a4630Any Swap In Auto10163682023-05-21 16:19:4813 days 5 hrs ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d0 Ether0.00027370311.1
0x68af625c8e10aa3da2afbe49d4fb55ac20683e7827f5c5b7becb4ba8f7227726Any Swap Out10141202023-05-14 17:12:2520 days 4 hrs ago0x2b8cd75d3e679531918feebb9f095a17c982baca IN  0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d0 Ether0.0002463111
0xcfb8fd0edcf5e8fbc9946fe32011390e14d6e04f54585830398c169a31b5a630Any Swap In Auto10140452023-05-14 12:11:1320 days 9 hrs ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d0 Ether0.00026798861.1
0xf8981f5cfa44cca4b2fc52c092e24653dabc3d3e2b2e3a423d8d10fb454cedc3Any Swap Out10131212023-05-11 18:43:1023 days 3 hrs ago0xbe46fc5cb5b4b20d636dfe193b08f40fbcfbf898 IN  0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d0 Ether0.0006149431
0x611433439135da0075117add274ff7e1e7e77ff5dad1ddd5843d74b39daf9b32Any Swap In Auto10130362023-05-11 12:02:2323 days 10 hrs ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d0 Ether0.00042107011.1
0x357e46a674318c9c54ad360a16f42c339a75b16376cc61951dad8273d7b3e58dAny Swap Out10129822023-05-11 6:29:3223 days 15 hrs ago0xea8a444fdcb9ba3a5673a0d8c79b6c154201f8aa IN  0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d0 Ether0.0003239141
0x0aa3f94f1de8bea60f8c3520388083150daf6a0f9a3c1ed2cff204d845b2dac5Any Swap Out10127362023-05-10 14:59:0924 days 7 hrs ago0x2b8cd75d3e679531918feebb9f095a17c982baca IN  0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d0 Ether0.0006319831
0xdb4fe7bc399f46eb7a7c21db7299eb4898d4d3ece4d1b6a649f57fabe26e0b4cAny Swap Out10124442023-05-09 12:19:1525 days 9 hrs ago0x4ab3d7f4c46e511ca09eecdac483e43ed96bd7aa IN  0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d0 Ether0.00042288841.2
0x7f959f89ccde380dae3bfcb89c5fa1bc13f4df96c81ecc3f5a44156504bb0d39Any Swap In Auto10124082023-05-09 9:42:1425 days 12 hrs ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d0 Ether0.00033796951.1
0x81bc538335f671e43e369c5de98d85a9bbc3b9836c9855c1d73483273dab15cdAny Swap In Auto10099282023-05-04 2:11:2430 days 19 hrs ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d0 Ether0.0003902361.1
0x7c97c7e5d28685aeadac23e3d15d6dc6ea8b62c0109baf0afa667bfc262641e6Any Swap In Auto10091132023-05-01 19:38:5433 days 2 hrs ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d0 Ether0.00045864391.1
0xf6ca9041e149e0e01b38ced0a50cf1420f1c5369ab4e95a2584cb96e55bf95c7Any Swap In Auto10091052023-05-01 19:32:0333 days 2 hrs ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d0 Ether0.00053509831.1
0x2a9c70f72d021bdd1ccd954dc20f4f73bea77371c2020af22c2ab91d67a4164dAny Swap Out10089562023-05-01 11:55:5633 days 10 hrs ago0x2bdab32fc7285ea127cd72046d7a0f9c5bf0dcbc IN  0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d0 Ether0.0002594411
0x904b186f77c5ab0c4f8af78c85cebc0964ec01fd18cda51c26b05738c6fd230cAny Swap In Auto10089452023-05-01 11:52:4233 days 10 hrs ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d0 Ether0.00029531371.1
0x9d43925756f10ced8404d2c1242607a82ae2372212e0af56962b7abe50f1b9bcAny Swap In Auto10089402023-05-01 11:50:4133 days 10 hrs ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d0 Ether0.00031412371.1
0x0b0b0f760b2933a7599e122191602e8a4d26b5fe3b5edc41c68bce59086e29ccAny Swap Out10072232023-04-27 10:11:3437 days 11 hrs ago0xf2455a4c6fcc6f41f59222f4244afddc85ff1ed7 IN  0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d0 Ether0.0001971141
0xc6088157485b1e4fe431008572b09b873a3a1f4791fe6e75ca4cbe11f88583c6Any Swap In Auto10066892023-04-26 3:39:3638 days 18 hrs ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d0 Ether0.00022457711.1
0xc955bcbb7af668376dd1c1ea0844d59ef931b2bfae134162c1a1037d89c90edaAny Swap Out10061462023-04-24 19:33:2840 days 2 hrs ago0xae2240e119160e964cc11a14eb779a92b91cebfc IN  0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d0 Ether0.0003021831
0x9f25d2c15a3094014b1368b4464677ef838ab86be0293d54da7540a7ea8d7abbAny Swap In Auto10057232023-04-23 13:04:2541 days 9 hrs ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d0 Ether0.0002712381.1
0x436969a85034745aef811a1724b346c8e960b710d031059adf64aa747a08769eAny Swap Out10055482023-04-22 20:39:3342 days 1 hr ago0x743ef32a0749192d5e2287ab30cc81e5db3e9697 IN  0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d0 Ether0.0002311851
0x7c4016af9ff8c83be36f07fa6e6229e6c70950ef529972da6497c245ad3ce422Any Swap In Auto10044322023-04-19 15:47:1945 days 6 hrs ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d0 Ether0.00049822961.1
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x08c2f0259f536ef9310714c0a4e4be9a16dac086fe66070c93795eb7fa1f144710192612023-05-31 7:28:453 days 14 hrs ago 0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d 0x818ec0a7fe18ff94269904fced6ae3dae6d6dc0b0 Ether
0x08c2f0259f536ef9310714c0a4e4be9a16dac086fe66070c93795eb7fa1f144710192612023-05-31 7:28:453 days 14 hrs ago 0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d 0x818ec0a7fe18ff94269904fced6ae3dae6d6dc0b0 Ether
0x93b269fce08281fda654f6c6a043471d1d27d034fcc3f2df214de0c5aad613b310172042023-05-24 14:24:0410 days 7 hrs ago 0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d 0xefaeee334f0fd1712f9a8cc375f427d9cdd40d730 Ether
0x93b269fce08281fda654f6c6a043471d1d27d034fcc3f2df214de0c5aad613b310172042023-05-24 14:24:0410 days 7 hrs ago 0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d 0xefaeee334f0fd1712f9a8cc375f427d9cdd40d730 Ether
0xebbfebcc9aa5129ebc333a0224c985acb4576a7c4d654793bc6c06beb7916e5110171912023-05-24 13:57:0710 days 8 hrs ago 0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d 0xfa9343c3897324496a05fc75abed6bac29f8a40f0 Ether
0xebbfebcc9aa5129ebc333a0224c985acb4576a7c4d654793bc6c06beb7916e5110171912023-05-24 13:57:0710 days 8 hrs ago 0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d 0xfa9343c3897324496a05fc75abed6bac29f8a40f0 Ether
0x103d0c330e7303ebcb274f66e545e3253b6e5f997b3c51a9fa25b3bdd23439a910170382023-05-24 1:15:5710 days 20 hrs ago 0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d 0x461d52769884ca6235b685ef2040f47d30c94eb50 Ether
0x8654f6eb346e2801f359fb9ce336e6eb4dd6324b2ed896a94392b0a6ab00f65410167522023-05-23 2:49:1711 days 19 hrs ago 0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d 0xefaeee334f0fd1712f9a8cc375f427d9cdd40d730 Ether
0x8654f6eb346e2801f359fb9ce336e6eb4dd6324b2ed896a94392b0a6ab00f65410167522023-05-23 2:49:1711 days 19 hrs ago LI.FI: LiFi Diamond 0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d0 Ether
0x8654f6eb346e2801f359fb9ce336e6eb4dd6324b2ed896a94392b0a6ab00f65410167522023-05-23 2:49:1711 days 19 hrs ago LI.FI: LiFi Diamond 0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d0 Ether
0x709e531729fdabd5fb4d703defd7de7c0a3122f354390ecb84252df2ed36edee10164022023-05-21 20:02:0113 days 2 hrs ago 0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d 0xefaeee334f0fd1712f9a8cc375f427d9cdd40d730 Ether
0x709e531729fdabd5fb4d703defd7de7c0a3122f354390ecb84252df2ed36edee10164022023-05-21 20:02:0113 days 2 hrs ago LI.FI: LiFi Diamond 0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d0 Ether
0x709e531729fdabd5fb4d703defd7de7c0a3122f354390ecb84252df2ed36edee10164022023-05-21 20:02:0113 days 2 hrs ago LI.FI: LiFi Diamond 0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d0 Ether
0xbe36f3acd76ea7867c02eda69b3844da6fb966b363d0cc4b556aa6b77a5a463010163682023-05-21 16:19:4813 days 5 hrs ago 0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d 0xfa9343c3897324496a05fc75abed6bac29f8a40f0 Ether
0xbe36f3acd76ea7867c02eda69b3844da6fb966b363d0cc4b556aa6b77a5a463010163682023-05-21 16:19:4813 days 5 hrs ago 0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d 0xfa9343c3897324496a05fc75abed6bac29f8a40f0 Ether
0xefe1669507de94a24d1843f502bed1cc87d67ea693e063f6f7b0710144c9cb5a10153672023-05-19 9:56:2815 days 12 hrs ago 0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d 0xfa9343c3897324496a05fc75abed6bac29f8a40f0 Ether
0xefe1669507de94a24d1843f502bed1cc87d67ea693e063f6f7b0710144c9cb5a10153672023-05-19 9:56:2815 days 12 hrs ago 0xe569d45803c76a6651f466f6b16da4c8705d4257 0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d0 Ether
0x68af625c8e10aa3da2afbe49d4fb55ac20683e7827f5c5b7becb4ba8f722772610141202023-05-14 17:12:2520 days 4 hrs ago 0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d 0xfa9343c3897324496a05fc75abed6bac29f8a40f0 Ether
0x245e5b7c67f92129a3afda6b3901626825f1303f56233acb436ddf16f90a20b710140752023-05-14 14:12:1020 days 7 hrs ago 0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d 0x922d641a426dcffaef11680e5358f34d97d112e10 Ether
0x245e5b7c67f92129a3afda6b3901626825f1303f56233acb436ddf16f90a20b710140752023-05-14 14:12:1020 days 7 hrs ago LI.FI: LiFi Diamond 0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d0 Ether
0x245e5b7c67f92129a3afda6b3901626825f1303f56233acb436ddf16f90a20b710140752023-05-14 14:12:1020 days 7 hrs ago LI.FI: LiFi Diamond 0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d0 Ether
0xcfb8fd0edcf5e8fbc9946fe32011390e14d6e04f54585830398c169a31b5a63010140452023-05-14 12:11:1320 days 9 hrs ago 0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d 0x818ec0a7fe18ff94269904fced6ae3dae6d6dc0b0 Ether
0xcfb8fd0edcf5e8fbc9946fe32011390e14d6e04f54585830398c169a31b5a63010140452023-05-14 12:11:1320 days 9 hrs ago 0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d 0x818ec0a7fe18ff94269904fced6ae3dae6d6dc0b0 Ether
0x257fa5d3601048d5cffb59b15ff382f45c32decd344a3895c22543f0b5225fe910135252023-05-12 16:13:2722 days 5 hrs ago 0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d 0x922d641a426dcffaef11680e5358f34d97d112e10 Ether
0x257fa5d3601048d5cffb59b15ff382f45c32decd344a3895c22543f0b5225fe910135252023-05-12 16:13:2722 days 5 hrs ago LI.FI: LiFi Diamond 0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d0 Ether
[ Download CSV Export 
Loading

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

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 bobascan.com on 2022-11-28
*/

/**
 *Submitted for verification at moonriver.moonscan.io on 2022-01-07
*/

/**
 *Submitted for verification at arbiscan.io 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 Security Audit

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

60c06040523480156200001157600080fd5b506040516200504d3803806200504d833981016040819052620000349162000095565b600180546001600160a01b039092166001600160a01b0319909216919091179055426002556001600160601b0319606092831b8116608052911b1660a052620000df565b80516001600160a01b03811681146200009057600080fd5b919050565b600080600060608486031215620000ab57600080fd5b620000b68462000078565b9250620000c66020850162000078565b9150620000d66040850162000078565b90509250925092565b60805160601c60a05160601c614eb6620001976000396000818161020d0152818161051601528181610820015281816108ef015281816116270152818161181001528181611cc401528181611d8501528181611e0b01528181611f7d015281816120d301528181612aa001528181612b610152612be70152600081816105e801528181610cbf01528181610e6401528181610f7c015281816116d30152818161302401528181613b0a0152613b5a0152614eb66000f3fe6080604052600436106101fd5760003560e01c8063832e94921161010d578063a5e56571116100a0578063d06ca61f1161006f578063d06ca61f1461062a578063d8b9f6101461064a578063dcfb77b11461066a578063edbdf5e21461068a578063f75c2664146106aa57600080fd5b8063a5e56571146105a3578063ad615dec146105b6578063c45a0155146105d6578063c8e174f61461060a57600080fd5b80638fd903f5116100dc5780638fd903f51461050457806399a2f2d71461055057806399cd84b5146105635780639aa1ac611461058357600080fd5b8063832e94921461048457806385f8c259146104a457806387cc6e2f146104c45780638d7d3eea146104e457600080fd5b80633f88de89116101905780635b7b018c1161015f5780635b7b018c146103f157806365782f56146104115780636a45397214610431578063701bb89114610451578063825bb13c1461046457600080fd5b80633f88de8914610361578063456862aa146103815780634d93bb94146103b157806352a397d5146103d157600080fd5b80631f00ca74116101cc5780631f00ca74146102d4578063241dc2df1461030157806325121b76146103215780632fc1e7281461034157600080fd5b80630175b1c414610241578063054d50d4146102615780630bb57203146102945780631b91a934146102b457600080fd5b3661023c57336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461023a5761023a614df0565b005b600080fd5b34801561024d57600080fd5b5061023a61025c36600461477d565b6106bf565b34801561026d57600080fd5b5061028161027c366004614a07565b6109ed565b6040519081526020015b60405180910390f35b3480156102a057600080fd5b5061023a6102af36600461498a565b610a02565b3480156102c057600080fd5b5061023a6102cf366004614371565b610b22565b3480156102e057600080fd5b506102f46102ef3660046148b2565b610cb8565b60405161028b9190614b9e565b34801561030d57600080fd5b5061023a61031c36600461443d565b610cee565b34801561032d57600080fd5b5061023a61033c36600461466a565b610d01565b34801561034d57600080fd5b506102f461035c3660046147cf565b610e04565b34801561036d57600080fd5b5061023a61037c36600461477d565b61105d565b34801561038d57600080fd5b506103a161039c366004614338565b61112a565b604051901515815260200161028b565b3480156103bd57600080fd5b5061023a6103cc3660046144f1565b611235565b3480156103dd57600080fd5b506102f46103ec3660046147cf565b6115c2565b3480156103fd57600080fd5b506103a161040c3660046142f7565b6118e4565b34801561041d57600080fd5b5061023a61042c36600461498a565b611a0c565b34801561043d57600080fd5b5061023a61044c36600461498a565b611b0b565b61028161045f366004614338565b611cc0565b34801561047057600080fd5b5061023a61047f36600461477d565b611f2d565b34801561049057600080fd5b5061028161049f3660046144af565b611f79565b3480156104b057600080fd5b506102816104bf366004614a07565b612149565b3480156104d057600080fd5b5061023a6104df366004614483565b612156565b3480156104f057600080fd5b5061023a6104ff366004614371565b61229c565b34801561051057600080fd5b506105387f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161028b565b34801561055c57600080fd5b5046610281565b34801561056f57600080fd5b5061023a61057e3660046144f1565b61242e565b34801561058f57600080fd5b5061023a61059e3660046144f1565b612776565b61023a6105b13660046143fc565b612a9e565b3480156105c257600080fd5b506102816105d1366004614a07565b612d11565b3480156105e257600080fd5b506105387f000000000000000000000000000000000000000000000000000000000000000081565b34801561061657600080fd5b5061023a6106253660046144f1565b612d1e565b34801561063657600080fd5b506102f46106453660046148b2565b61301d565b34801561065657600080fd5b5061023a61066536600461498a565b61304a565b34801561067657600080fd5b5061023a6106853660046145a6565b613140565b34801561069657600080fd5b5061023a6106a536600461443d565b6131e6565b3480156106b657600080fd5b506105386132b3565b6106c76132b3565b6001600160a01b0316336001600160a01b0316146107005760405162461bcd60e51b81526004016106f790614c64565b60405180910390fd5b61070d85858585856132de565b60008490506000816001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561074d57600080fd5b505afa158015610761573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610785919061431b565b90506001600160a01b0381161580159061081957506040516370a0823160e01b81526001600160a01b0387811660048301528591908316906370a082319060240160206040518083038186803b1580156107de57600080fd5b505afa1580156107f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108169190614899565b10155b156109e4577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316141561096257604051620e75bb60e21b81526001600160a01b038316906239d6ec9061088690889088903090600401614aa9565b602060405180830381600087803b1580156108a057600080fd5b505af11580156108b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d89190614899565b50604051632e1a7d4d60e01b8152600481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561093b57600080fd5b505af115801561094f573d6000803e3d6000fd5b5050505061095d85856133c4565b6109e4565b604051620e75bb60e21b81526001600160a01b038316906239d6ec9061099090889088908290600401614aa9565b602060405180830381600087803b1580156109aa57600080fd5b505af11580156109be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e29190614899565b505b50505050505050565b60006109fa848484613490565b949350505050565b8142811015610a235760405162461bcd60e51b81526004016106f790614c9b565b85856000818110610a3657610a36614e1c565b9050602002016020810190610a4b91906142f7565b6001600160a01b0316639dc29fac338a6040518363ffffffff1660e01b8152600401610a78929190614a90565b602060405180830381600087803b158015610a9257600080fd5b505af1158015610aa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aca919061475b565b506001600160a01b038416337ffea6abdf4fd32f20966dff7619354cd82cd43dc78a3bee479f04c74dbfc585b388888c8c465b89604051610b1096959493929190614acc565b60405180910390a35050505050505050565b876001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015610b5b57600080fd5b505afa158015610b6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b93919061431b565b6001600160a01b031663605629d68a8a89898989896040518863ffffffff1660e01b8152600401610bca9796959493929190614a4f565b602060405180830381600087803b158015610be457600080fd5b505af1158015610bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1c919061475b565b50604051630bebbf4d60e41b8152600481018790526001600160a01b038a8116602483015289169063bebbf4d090604401602060405180830381600087803b158015610c6757600080fd5b505af1158015610c7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9f9190614899565b50610cad898989898561355e565b505050505050505050565b6060610ce57f00000000000000000000000000000000000000000000000000000000000000008484613642565b90505b92915050565b610cfb338585858561355e565b50505050565b610d096132b3565b6001600160a01b0316336001600160a01b031614610d395760405162461bcd60e51b81526004016106f790614c64565b60005b87811015610df757610de58b8b83818110610d5957610d59614e1c565b905060200201358a8a84818110610d7257610d72614e1c565b9050602002016020810190610d8791906142f7565b898985818110610d9957610d99614e1c565b9050602002016020810190610dae91906142f7565b888886818110610dc057610dc0614e1c565b90506020020135878787818110610dd957610dd9614e1c565b905060200201356132de565b80610def81614dd5565b915050610d3c565b5050505050505050505050565b6060610e0e6132b3565b6001600160a01b0316336001600160a01b031614610e3e5760405162461bcd60e51b81526004016106f790614c64565b8242811015610e5f5760405162461bcd60e51b81526004016106f790614c9b565b610ebd7f00000000000000000000000000000000000000000000000000000000000000008a8989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506137d892505050565b9150878260018451610ecf9190614d7b565b81518110610edf57610edf614e1c565b60200260200101511015610f4b5760405162461bcd60e51b815260206004820152602d60248201527f5375736869737761705632526f757465723a20494e53554646494349454e545f60448201526c13d55514155517d05353d55395609a1b60648201526084016106f7565b6110118a88886000818110610f6257610f62614e1c565b9050602002016020810190610f7791906142f7565b610ff07f00000000000000000000000000000000000000000000000000000000000000008b8b6000818110610fae57610fae614e1c565b9050602002016020810190610fc391906142f7565b8c8c6001818110610fd657610fd6614e1c565b9050602002016020810190610feb91906142f7565b61394e565b8560008151811061100357611003614e1c565b6020026020010151876132de565b611050828888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a9250613a27915050565b5098975050505050505050565b6110656132b3565b6001600160a01b0316336001600160a01b0316146110955760405162461bcd60e51b81526004016106f790614c64565b6110a285858585856132de565b604051620e75bb60e21b81526001600160a01b038516906239d6ec906110d090869086908290600401614aa9565b602060405180830381600087803b1580156110ea57600080fd5b505af11580156110fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111229190614899565b505050505050565b60006111346132b3565b6001600160a01b0316336001600160a01b0316146111645760405162461bcd60e51b81526004016106f790614c64565b6001600160a01b0382166111ba5760405162461bcd60e51b815260206004820152601d60248201527f416e79737761705633526f757465723a2061646472657373283078302900000060448201526064016106f7565b6040516360e232a960e01b81526001600160a01b0383811660048301528416906360e232a990602401602060405180830381600087803b1580156111fd57600080fd5b505af1158015611211573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce5919061475b565b84428110156112565760405162461bcd60e51b81526004016106f790614c9b565b60008989600081811061126b5761126b614e1c565b905060200201602081019061128091906142f7565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156112b857600080fd5b505afa1580156112cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f0919061431b565b9050806001600160a01b031663d505accf8e308f8b8b8b8b6040518863ffffffff1660e01b815260040161132a9796959493929190614a4f565b600060405180830381600087803b15801561134457600080fd5b505af1158015611358573d6000803e3d6000fd5b5050505061139a8d8b8b600081811061137357611373614e1c565b905060200201602081019061138891906142f7565b6001600160a01b03841691908f613c29565b898960008181106113ad576113ad614e1c565b90506020020160208101906113c291906142f7565b604051630bebbf4d60e41b8152600481018e90526001600160a01b038f81166024830152919091169063bebbf4d090604401602060405180830381600087803b15801561140e57600080fd5b505af1158015611422573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114469190614899565b508989600081811061145a5761145a614e1c565b905060200201602081019061146f91906142f7565b6001600160a01b0316639dc29fac8e8e6040518363ffffffff1660e01b815260040161149c929190614a90565b602060405180830381600087803b1580156114b657600080fd5b505af11580156114ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ee919061475b565b5060008a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050905060008e905060008a905060008f905060008f905060006115524690565b90506000899050846001600160a01b0316866001600160a01b03167f278277e0209c347189add7bd92411973b5f6b8644f7ac62ea1be984ce993f8f489878787876040516115a4959493929190614b36565b60405180910390a35050505050505050505050505050505050505050565b60606115cc6132b3565b6001600160a01b0316336001600160a01b0316146115fc5760405162461bcd60e51b81526004016106f790614c64565b824281101561161d5760405162461bcd60e51b81526004016106f790614c9b565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168787611654600182614d7b565b81811061166357611663614e1c565b905060200201602081019061167891906142f7565b6001600160a01b0316146116ce5760405162461bcd60e51b815260206004820152601d60248201527f416e79737761705633526f757465723a20494e56414c49445f5041544800000060448201526064016106f7565b61172c7f00000000000000000000000000000000000000000000000000000000000000008a8989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506137d892505050565b915087826001845161173e9190614d7b565b8151811061174e5761174e614e1c565b602002602001015110156117b85760405162461bcd60e51b815260206004820152602b60248201527f416e79737761705633526f757465723a20494e53554646494349454e545f4f5560448201526a1514155517d05353d5539560aa1b60648201526084016106f7565b6117cf8a88886000818110610f6257610f62614e1c565b61180e82888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613a27915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836001855161184c9190614d7b565b8151811061185c5761185c614e1c565b60200260200101516040518263ffffffff1660e01b815260040161188291815260200190565b600060405180830381600087803b15801561189c57600080fd5b505af11580156118b0573d6000803e3d6000fd5b505050506110508583600185516118c79190614d7b565b815181106118d7576118d7614e1c565b60200260200101516133c4565b60006118ee6132b3565b6001600160a01b0316336001600160a01b03161461191e5760405162461bcd60e51b81526004016106f790614c64565b6001600160a01b0382166119745760405162461bcd60e51b815260206004820152601d60248201527f416e79737761705633526f757465723a2061646472657373283078302900000060448201526064016106f7565b61197c6132b3565b600080546001600160a01b03199081166001600160a01b0393841617909155600180549091169184169190911790556119b8426202a300614d22565b60028190556001546000546001600160a01b0391821691167fcda32bc39904597666dfa9f9c845714756e1ffffad55b52e0d344673a21981214660405190815260200160405180910390a45060015b919050565b8142811015611a2d5760405162461bcd60e51b81526004016106f790614c9b565b85856000818110611a4057611a40614e1c565b9050602002016020810190611a5591906142f7565b6001600160a01b0316639dc29fac338a6040518363ffffffff1660e01b8152600401611a82929190614a90565b602060405180830381600087803b158015611a9c57600080fd5b505af1158015611ab0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad4919061475b565b506001600160a01b038416337f278277e0209c347189add7bd92411973b5f6b8644f7ac62ea1be984ce993f8f488888c8c46610afd565b8142811015611b2c5760405162461bcd60e51b81526004016106f790614c9b565b611c023387876000818110611b4357611b43614e1c565b9050602002016020810190611b5891906142f7565b8a89896000818110611b6c57611b6c614e1c565b9050602002016020810190611b8191906142f7565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015611bb957600080fd5b505afa158015611bcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf1919061431b565b6001600160a01b0316929190613c29565b85856000818110611c1557611c15614e1c565b9050602002016020810190611c2a91906142f7565b604051630bebbf4d60e41b8152600481018a90523360248201526001600160a01b03919091169063bebbf4d090604401602060405180830381600087803b158015611c7457600080fd5b505af1158015611c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cac9190614899565b5085856000818110611a4057611a40614e1c565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015611d2557600080fd5b505afa158015611d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5d919061431b565b6001600160a01b031614611d835760405162461bcd60e51b81526004016106f790614c1a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015611dde57600080fd5b505af1158015611df2573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb9250611e45915086903490600401614a90565b602060405180830381600087803b158015611e5f57600080fd5b505af1158015611e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e97919061475b565b611ea357611ea3614df0565b604051630bebbf4d60e41b81523460048201526001600160a01b03838116602483015284169063bebbf4d090604401602060405180830381600087803b158015611eec57600080fd5b505af1158015611f00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f249190614899565b50349392505050565b611f356132b3565b6001600160a01b0316336001600160a01b031614611f655760405162461bcd60e51b81526004016106f790614c64565b611f7285858585856132de565b5050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015611fde57600080fd5b505afa158015611ff2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612016919061431b565b6001600160a01b03161461203c5760405162461bcd60e51b81526004016106f790614c1a565b604051620e75bb60e21b81526001600160a01b038516906239d6ec9061206a90339087903090600401614aa9565b602060405180830381600087803b15801561208457600080fd5b505af1158015612098573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120bc9190614899565b50604051632e1a7d4d60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561211f57600080fd5b505af1158015612133573d6000803e3d6000fd5b5050505061214182846133c4565b509092915050565b60006109fa848484613c83565b61215e6132b3565b6001600160a01b0316336001600160a01b03161461218e5760405162461bcd60e51b81526004016106f790614c64565b60006121986132b3565b6040516340c10f1960e01b81529091506001600160a01b038416906340c10f19906121c99084908690600401614a90565b602060405180830381600087803b1580156121e357600080fd5b505af11580156121f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061221b919061475b565b50604051620e75bb60e21b81526001600160a01b038416906239d6ec9061224a90849086908290600401614aa9565b602060405180830381600087803b15801561226457600080fd5b505af1158015612278573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cfb9190614899565b6000886001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156122d757600080fd5b505afa1580156122eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230f919061431b565b60405163d505accf60e01b81529091506001600160a01b0382169063d505accf9061234a908d9030908c908c908c908c908c90600401614a4f565b600060405180830381600087803b15801561236457600080fd5b505af1158015612378573d6000803e3d6000fd5b50612392925050506001600160a01b0382168b8b8a613c29565b604051630bebbf4d60e41b8152600481018890526001600160a01b038b811660248301528a169063bebbf4d090604401602060405180830381600087803b1580156123dc57600080fd5b505af11580156123f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124149190614899565b506124228a8a8a8a8661355e565b50505050505050505050565b844281101561244f5760405162461bcd60e51b81526004016106f790614c9b565b60008989600081811061246457612464614e1c565b905060200201602081019061247991906142f7565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156124b157600080fd5b505afa1580156124c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e9919061431b565b9050806001600160a01b031663d505accf8e308f8b8b8b8b6040518863ffffffff1660e01b81526004016125239796959493929190614a4f565b600060405180830381600087803b15801561253d57600080fd5b505af1158015612551573d6000803e3d6000fd5b5050505061256c8d8b8b600081811061137357611373614e1c565b8989600081811061257f5761257f614e1c565b905060200201602081019061259491906142f7565b604051630bebbf4d60e41b8152600481018e90526001600160a01b038f81166024830152919091169063bebbf4d090604401602060405180830381600087803b1580156125e057600080fd5b505af11580156125f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126189190614899565b508989600081811061262c5761262c614e1c565b905060200201602081019061264191906142f7565b6001600160a01b0316639dc29fac8e8e6040518363ffffffff1660e01b815260040161266e929190614a90565b602060405180830381600087803b15801561268857600080fd5b505af115801561269c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c0919061475b565b5060008a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050905060008e905060008a905060008f905060008f905060006127244690565b90506000899050846001600160a01b0316866001600160a01b03167ffea6abdf4fd32f20966dff7619354cd82cd43dc78a3bee479f04c74dbfc585b389878787876040516115a4959493929190614b36565b84428110156127975760405162461bcd60e51b81526004016106f790614c9b565b888860008181106127aa576127aa614e1c565b90506020020160208101906127bf91906142f7565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156127f757600080fd5b505afa15801561280b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282f919061431b565b6001600160a01b031663605629d68d8b8b600081811061285157612851614e1c565b905060200201602081019061286691906142f7565b8e8a8a8a8a6040518863ffffffff1660e01b815260040161288d9796959493929190614a4f565b602060405180830381600087803b1580156128a757600080fd5b505af11580156128bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128df919061475b565b50888860008181106128f3576128f3614e1c565b905060200201602081019061290891906142f7565b604051630bebbf4d60e41b8152600481018d90526001600160a01b038e81166024830152919091169063bebbf4d090604401602060405180830381600087803b15801561295457600080fd5b505af1158015612968573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061298c9190614899565b50888860008181106129a0576129a0614e1c565b90506020020160208101906129b591906142f7565b6001600160a01b0316639dc29fac8d8d6040518363ffffffff1660e01b81526004016129e2929190614a90565b602060405180830381600087803b1580156129fc57600080fd5b505af1158015612a10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a34919061475b565b50866001600160a01b03168c6001600160a01b03167ffea6abdf4fd32f20966dff7619354cd82cd43dc78a3bee479f04c74dbfc585b38b8b8f8f612a754690565b89604051612a8896959493929190614acc565b60405180910390a3505050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015612b0157600080fd5b505afa158015612b15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b39919061431b565b6001600160a01b031614612b5f5760405162461bcd60e51b81526004016106f790614c1a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015612bba57600080fd5b505af1158015612bce573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb9250612c21915086903490600401614a90565b602060405180830381600087803b158015612c3b57600080fd5b505af1158015612c4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c73919061475b565b612c7f57612c7f614df0565b604051630bebbf4d60e41b81523460048201523360248201526001600160a01b0384169063bebbf4d090604401602060405180830381600087803b158015612cc657600080fd5b505af1158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe9190614899565b50612d0c338484348561355e565b505050565b60006109fa848484613d4c565b8442811015612d3f5760405162461bcd60e51b81526004016106f790614c9b565b88886000818110612d5257612d52614e1c565b9050602002016020810190612d6791906142f7565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015612d9f57600080fd5b505afa158015612db3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd7919061431b565b6001600160a01b031663605629d68d8b8b6000818110612df957612df9614e1c565b9050602002016020810190612e0e91906142f7565b8e8a8a8a8a6040518863ffffffff1660e01b8152600401612e359796959493929190614a4f565b602060405180830381600087803b158015612e4f57600080fd5b505af1158015612e63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e87919061475b565b5088886000818110612e9b57612e9b614e1c565b9050602002016020810190612eb091906142f7565b604051630bebbf4d60e41b8152600481018d90526001600160a01b038e81166024830152919091169063bebbf4d090604401602060405180830381600087803b158015612efc57600080fd5b505af1158015612f10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f349190614899565b5088886000818110612f4857612f48614e1c565b9050602002016020810190612f5d91906142f7565b6001600160a01b0316639dc29fac8d8d6040518363ffffffff1660e01b8152600401612f8a929190614a90565b602060405180830381600087803b158015612fa457600080fd5b505af1158015612fb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fdc919061475b565b50866001600160a01b03168c6001600160a01b03167f278277e0209c347189add7bd92411973b5f6b8644f7ac62ea1be984ce993f8f48b8b8f8f612a754690565b6060610ce57f000000000000000000000000000000000000000000000000000000000000000084846137d8565b814281101561306b5760405162461bcd60e51b81526004016106f790614c9b565b6130823387876000818110611b4357611b43614e1c565b8585600081811061309557613095614e1c565b90506020020160208101906130aa91906142f7565b604051630bebbf4d60e41b8152600481018a90523360248201526001600160a01b03919091169063bebbf4d090604401602060405180830381600087803b1580156130f457600080fd5b505af1158015613108573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061312c9190614899565b5085856000818110610a3657610a36614e1c565b60005b87811015610cad576131d4338a8a8481811061316157613161614e1c565b905060200201602081019061317691906142f7565b89898581811061318857613188614e1c565b905060200201602081019061319d91906142f7565b8888868181106131af576131af614e1c565b905060200201358787878181106131c8576131c8614e1c565b9050602002013561355e565b806131de81614dd5565b915050613143565b613225338584876001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015611bb957600080fd5b604051630bebbf4d60e41b8152600481018390523360248201526001600160a01b0385169063bebbf4d090604401602060405180830381600087803b15801561326d57600080fd5b505af1158015613281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a59190614899565b50610cfb338585858561355e565b600060025442106132ce57506001546001600160a01b031690565b506000546001600160a01b031690565b6040516340c10f1960e01b81526001600160a01b038516906340c10f199061330c9086908690600401614a90565b602060405180830381600087803b15801561332657600080fd5b505af115801561333a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061335e919061475b565b50826001600160a01b0316846001600160a01b0316867faac9ce45fe3adf5143598c4f18a369591a20a3384aedaf1b525d29127e1fcd55858561339e4690565b604080519384526020840192909252908201526060015b60405180910390a45050505050565b604080516000808252602082019092526001600160a01b0384169083906040516133ee9190614a33565b60006040518083038185875af1925050503d806000811461342b576040519150601f19603f3d011682016040523d82523d6000602084013e613430565b606091505b5050905080612d0c5760405162461bcd60e51b815260206004820152602660248201527f5472616e7366657248656c7065723a204e41544956455f5452414e534645525f60448201526511905253115160d21b60648201526084016106f7565b60008084116134e55760405162461bcd60e51b815260206004820152602d6024820152600080516020614e6183398151915260448201526c17d25394155517d05353d55395609a1b60648201526084016106f7565b6000831180156134f55750600082115b6135115760405162461bcd60e51b81526004016106f790614be2565b600061351f856103e5613ddc565b9050600061352d8285613ddc565b9050600061354783613541886103e8613ddc565b90613e43565b90506135538183614d3a565b979650505050505050565b604051632770a7eb60e21b81526001600160a01b03851690639dc29fac9061358c9088908690600401614a90565b602060405180830381600087803b1580156135a657600080fd5b505af11580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de919061475b565b50826001600160a01b0316856001600160a01b0316856001600160a01b03167f97116cf6cd4f6412bb47914d6db18da9e16ab2142f543b86e207c24fbd16b23a856136264690565b60408051928352602083019190915281018690526060016133b5565b60606002825110156136965760405162461bcd60e51b815260206004820181905260248201527f53757368697377617056324c6962726172793a20494e56414c49445f5041544860448201526064016106f7565b815167ffffffffffffffff8111156136b0576136b0614e32565b6040519080825280602002602001820160405280156136d9578160200160208202803683370190505b5090508281600183516136ec9190614d7b565b815181106136fc576136fc614e1c565b6020026020010181815250506000600183516137189190614d7b565b90505b80156137d05760008061376b8786613734600187614d7b565b8151811061374457613744614e1c565b602002602001015187868151811061375e5761375e614e1c565b6020026020010151613e98565b9150915061379384848151811061378457613784614e1c565b60200260200101518383613c83565b8461379f600186614d7b565b815181106137af576137af614e1c565b602002602001018181525050505080806137c890614dbe565b91505061371b565b509392505050565b606060028251101561382c5760405162461bcd60e51b815260206004820181905260248201527f53757368697377617056324c6962726172793a20494e56414c49445f5041544860448201526064016106f7565b815167ffffffffffffffff81111561384657613846614e32565b60405190808252806020026020018201604052801561386f578160200160208202803683370190505b509050828160008151811061388657613886614e1c565b60200260200101818152505060005b600183516138a39190614d7b565b8110156137d0576000806138e9878685815181106138c3576138c3614e1c565b6020026020010151878660016138d99190614d22565b8151811061375e5761375e614e1c565b9150915061391184848151811061390257613902614e1c565b60200260200101518383613490565b8461391d856001614d22565b8151811061392d5761392d614e1c565b6020026020010181815250505050808061394690614dd5565b915050613895565b600080600061395d8585613f71565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b1660348201529193509150869060480160405160208183030381529060405280519060200120604051602001613a059291906001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527fe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b60005b60018351613a389190614d7b565b811015610cfb57600080848381518110613a5457613a54614e1c565b602002602001015185846001613a6a9190614d22565b81518110613a7a57613a7a614e1c565b6020026020010151915091506000613a928383613f71565b509050600087613aa3866001614d22565b81518110613ab357613ab3614e1c565b60200260200101519050600080836001600160a01b0316866001600160a01b031614613ae157826000613ae5565b6000835b91509150600060028a51613af99190614d7b565b8810613b055788613b53565b613b537f0000000000000000000000000000000000000000000000000000000000000000878c613b368c6002614d22565b81518110613b4657613b46614e1c565b602002602001015161394e565b9050613b807f0000000000000000000000000000000000000000000000000000000000000000888861394e565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613bbd576020820181803683370190505b506040518563ffffffff1660e01b8152600401613bdd9493929190614cd2565b600060405180830381600087803b158015613bf757600080fd5b505af1158015613c0b573d6000803e3d6000fd5b50505050505050505050508080613c2190614dd5565b915050613a2a565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610cfb90859061406b565b6000808411613cd95760405162461bcd60e51b815260206004820152602e6024820152600080516020614e6183398151915260448201526d17d3d55514155517d05353d5539560921b60648201526084016106f7565b600083118015613ce95750600082115b613d055760405162461bcd60e51b81526004016106f790614be2565b6000613d1d6103e8613d178688613ddc565b90613ddc565b90506000613d316103e5613d1786896141f2565b9050613d4260016135418385614d3a565b9695505050505050565b6000808411613d9b5760405162461bcd60e51b81526020600482015260276024820152600080516020614e6183398151915260448201526617d05353d5539560ca1b60648201526084016106f7565b600083118015613dab5750600082115b613dc75760405162461bcd60e51b81526004016106f790614be2565b82613dd28584613ddc565b6109fa9190614d3a565b6000811580613e0057508282613df28183614d5c565b9250613dfe9083614d3a565b145b610ce85760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b60448201526064016106f7565b600082613e508382614d22565b9150811015610ce85760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b60448201526064016106f7565b6000806000613ea78585613f71565b509050600080613eb888888861394e565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613ef057600080fd5b505afa158015613f04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f289190614854565b506001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b031614613f5f578082613f62565b81815b90999098509650505050505050565b600080826001600160a01b0316846001600160a01b03161415613fe65760405162461bcd60e51b815260206004820152602760248201527f53757368697377617056324c6962726172793a204944454e544943414c5f41446044820152664452455353455360c81b60648201526084016106f7565b826001600160a01b0316846001600160a01b031610614006578284614009565b83835b90925090506001600160a01b0382166140645760405162461bcd60e51b815260206004820181905260248201527f53757368697377617056324c6962726172793a205a45524f5f4144445245535360448201526064016106f7565b9250929050565b61407d826001600160a01b0316614248565b6140c95760405162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740060448201526064016106f7565b600080836001600160a01b0316836040516140e49190614a33565b6000604051808303816000865af19150503d8060008114614121576040519150601f19603f3d011682016040523d82523d6000602084013e614126565b606091505b5091509150816141785760405162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656460448201526064016106f7565b805115610cfb5780806020019051810190614193919061475b565b610cfb5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106f7565b6000826141ff8382614d7b565b9150811115610ce85760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b60448201526064016106f7565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906109fa5750141592915050565b8035611a0781614e48565b60008083601f84011261429c57600080fd5b50813567ffffffffffffffff8111156142b457600080fd5b6020830191508360208260051b850101111561406457600080fd5b80516001600160701b0381168114611a0757600080fd5b803560ff81168114611a0757600080fd5b60006020828403121561430957600080fd5b813561431481614e48565b9392505050565b60006020828403121561432d57600080fd5b815161431481614e48565b6000806040838503121561434b57600080fd5b823561435681614e48565b9150602083013561436681614e48565b809150509250929050565b60008060008060008060008060006101208a8c03121561439057600080fd5b893561439b81614e48565b985060208a01356143ab81614e48565b975060408a01356143bb81614e48565b965060608a0135955060808a013594506143d760a08b016142e6565b935060c08a0135925060e08a013591506101008a013590509295985092959850929598565b60008060006060848603121561441157600080fd5b833561441c81614e48565b9250602084013561442c81614e48565b929592945050506040919091013590565b6000806000806080858703121561445357600080fd5b843561445e81614e48565b9350602085013561446e81614e48565b93969395505050506040820135916060013590565b6000806040838503121561449657600080fd5b82356144a181614e48565b946020939093013593505050565b6000806000606084860312156144c457600080fd5b83356144cf81614e48565b92506020840135915060408401356144e681614e48565b809150509250925092565b60008060008060008060008060008060006101408c8e03121561451357600080fd5b8b3561451e81614e48565b9a5060208c0135995060408c0135985060608c013567ffffffffffffffff81111561454857600080fd5b6145548e828f0161428a565b90995097505060808c013561456881614e48565b955060a08c0135945061457d60c08d016142e6565b935060e08c013592506101008c013591506101208c013590509295989b509295989b9093969950565b6000806000806000806000806080898b0312156145c257600080fd5b883567ffffffffffffffff808211156145da57600080fd5b6145e68c838d0161428a565b909a50985060208b01359150808211156145ff57600080fd5b61460b8c838d0161428a565b909850965060408b013591508082111561462457600080fd5b6146308c838d0161428a565b909650945060608b013591508082111561464957600080fd5b506146568b828c0161428a565b999c989b5096995094979396929594505050565b60008060008060008060008060008060a08b8d03121561468957600080fd5b8a3567ffffffffffffffff808211156146a157600080fd5b6146ad8e838f0161428a565b909c509a5060208d01359150808211156146c657600080fd5b6146d28e838f0161428a565b909a50985060408d01359150808211156146eb57600080fd5b6146f78e838f0161428a565b909850965060608d013591508082111561471057600080fd5b61471c8e838f0161428a565b909650945060808d013591508082111561473557600080fd5b506147428d828e0161428a565b915080935050809150509295989b9194979a5092959850565b60006020828403121561476d57600080fd5b8151801515811461431457600080fd5b600080600080600060a0868803121561479557600080fd5b8535945060208601356147a781614e48565b935060408601356147b781614e48565b94979396509394606081013594506080013592915050565b60008060008060008060008060e0898b0312156147eb57600080fd5b883597506020890135965060408901359550606089013567ffffffffffffffff81111561481757600080fd5b6148238b828c0161428a565b909650945050608089013561483781614e48565b979a969950949793969295929450505060a08201359160c0013590565b60008060006060848603121561486957600080fd5b614872846142cf565b9250614880602085016142cf565b9150604084015163ffffffff811681146144e657600080fd5b6000602082840312156148ab57600080fd5b5051919050565b600080604083850312156148c557600080fd5b8235915060208084013567ffffffffffffffff808211156148e557600080fd5b818601915086601f8301126148f957600080fd5b81358181111561490b5761490b614e32565b8060051b604051601f19603f8301168101818110858211171561493057614930614e32565b604052828152858101935084860182860187018b101561494f57600080fd5b600095505b83861015614979576149658161427f565b855260019590950194938601938601614954565b508096505050505050509250929050565b600080600080600080600060c0888a0312156149a557600080fd5b8735965060208801359550604088013567ffffffffffffffff8111156149ca57600080fd5b6149d68a828b0161428a565b90965094505060608801356149ea81614e48565b969995985093969295946080840135945060a09093013592915050565b600080600060608486031215614a1c57600080fd5b505081359360208301359350604090920135919050565b60008251614a45818460208701614d92565b9190910192915050565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393841681526020810192909252909116604082015260600190565b60a0808252810186905260008760c08301825b89811015614b0f578235614af281614e48565b6001600160a01b0316825260209283019290910190600101614adf565b50602084019790975250506040810193909352606083019190915260809091015292915050565b60a0808252865190820181905260009060209060c0840190828a01845b82811015614b785781516001600160a01b031684529284019290840190600101614b53565b505050908301969096525060408101939093526060830191909152608090910152919050565b6020808252825182820181905260009190848201906040850190845b81811015614bd657835183529284019291840191600101614bba565b50909695505050505050565b6020808252602a90820152600080516020614e618339815191526040820152695f4c495155494449545960b01b606082015260800190565b6020808252602a908201527f416e79737761705633526f757465723a20756e6465726c79696e67206973206e6040820152696f7420774e415449564560b01b606082015260800190565b6020808252601a908201527f416e79737761705633526f757465723a20464f5242494444454e000000000000604082015260600190565b60208082526018908201527f416e79737761705633526f757465723a20455850495245440000000000000000604082015260600190565b84815283602082015260018060a01b03831660408201526080606082015260008251806080840152614d0b8160a0850160208701614d92565b601f01601f19169190910160a00195945050505050565b60008219821115614d3557614d35614e06565b500190565b600082614d5757634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614d7657614d76614e06565b500290565b600082821015614d8d57614d8d614e06565b500390565b60005b83811015614dad578181015183820152602001614d95565b83811115610cfb5750506000910152565b600081614dcd57614dcd614e06565b506000190190565b6000600019821415614de957614de9614e06565b5060010190565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114614e5d57600080fd5b5056fe53757368697377617056324c6962726172793a20494e53554646494349454e54a264697066735822122073407528f159bfea36d084e49afe223dc0f542434e791cc076c52d87bb5c136a64736f6c63430008060033000000000000000000000000c35dadb65012ec5796536bd9864ed8773abc74c4000000000000000000000000deaddeaddeaddeaddeaddeaddeaddeaddead0000000000000000000000000000647dc1366da28f8a64eb831fc8e9f05c90d1ea5a

Deployed ByteCode Sourcemap

13594:18910:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14169:10;-1:-1:-1;;;;;14183:7:0;14169:21;;14162:29;;;;:::i;:::-;13594:18910;;;;;20089:718;;;;;;;;;;-1:-1:-1;20089:718:0;;;;;:::i;:::-;;:::i;31512:246::-;;;;;;;;;;-1:-1:-1;31512:246:0;;;;;:::i;:::-;;:::i;:::-;;;27805:25:1;;;27793:2;27778:18;31512:246:0;;;;;;;;23198:416;;;;;;;;;;-1:-1:-1;23198:416:0;;;;;:::i;:::-;;:::i;18218:498::-;;;;;;;;;;-1:-1:-1;18218:498:0;;;;;:::i;:::-;;:::i;32264:237::-;;;;;;;;;;-1:-1:-1;32264:237:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;16526:157::-;;;;;;;;;;-1:-1:-1;16526:157:0;;;;;:::i;:::-;;:::i;21924:319::-;;;;;;;;;;-1:-1:-1;21924:319:0;;;;;:::i;:::-;;:::i;26421:648::-;;;;;;;;;;-1:-1:-1;26421:648:0;;;;;:::i;:::-;;:::i;19719:245::-;;;;;;;;;;-1:-1:-1;19719:245:0;;;;;:::i;:::-;;:::i;15963:228::-;;;;;;;;;;-1:-1:-1;15963:228:0;;;;;:::i;:::-;;:::i;:::-;;;19606:14:1;;19599:22;19581:41;;19569:2;19554:18;15963:228:0;19536:92:1;28386:1067:0;;;;;;;;;;-1:-1:-1;28386:1067:0;;;;;:::i;:::-;;:::i;30393:886::-;;;;;;;;;;-1:-1:-1;30393:886:0;;;;;:::i;:::-;;:::i;15598:357::-;;;;;;;;;;-1:-1:-1;15598:357:0;;;;;:::i;:::-;;:::i;27170:416::-;;;;;;;;;;-1:-1:-1;27170:416:0;;;;;:::i;:::-;;:::i;27687:598::-;;;;;;;;;;-1:-1:-1;27687:598:0;;;;;:::i;:::-;;:::i;20815:407::-;;;;;;:::i;:::-;;:::i;19433:173::-;;;;;;;;;;-1:-1:-1;19433:173:0;;;;;:::i;:::-;;:::i;21230:413::-;;;;;;;;;;-1:-1:-1;21230:413:0;;;;;:::i;:::-;;:::i;31766:245::-;;;;;;;;;;-1:-1:-1;31766:245:0;;;;;:::i;:::-;;:::i;21693:223::-;;;;;;;;;;-1:-1:-1;21693:223:0;;;;;:::i;:::-;;:::i;17612:598::-;;;;;;;;;;-1:-1:-1;17612:598:0;;;;;:::i;:::-;;:::i;13739:32::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15087:32:1;;;15069:51;;15057:2;15042:18;13739:32:0;15024:102:1;15501:89:0;;;;;;;;;;-1:-1:-1;15573:9:0;15501:89;;24414:1067;;;;;;;;;;-1:-1:-1;24414:1067:0;;;;;:::i;:::-;;:::i;25582:694::-;;;;;;;;;;-1:-1:-1;25582:694:0;;;;;:::i;:::-;;:::i;17145:459::-;;;;;;:::i;:::-;;:::i;31323:181::-;;;;;;;;;;-1:-1:-1;31323:181:0;;;;;:::i;:::-;;:::i;13700:32::-;;;;;;;;;;;;;;;29554:694;;;;;;;;;;-1:-1:-1;29554:694:0;;;;;:::i;:::-;;:::i;32019:237::-;;;;;;;;;;-1:-1:-1;32019:237:0;;;;;:::i;:::-;;:::i;23715:598::-;;;;;;;;;;-1:-1:-1;23715:598:0;;;;;:::i;:::-;;:::i;18724:286::-;;;;;;;;;;-1:-1:-1;18724:286:0;;;;;:::i;:::-;;:::i;16808:329::-;;;;;;;;;;-1:-1:-1;16808:329:0;;;;;:::i;:::-;;:::i;15319:174::-;;;;;;;;;;;;;:::i;20089:718::-;15255:5;:3;:5::i;:::-;-1:-1:-1;;;;;15241:19:0;:10;-1:-1:-1;;;;;15241:19:0;;15233:58;;;;-1:-1:-1;;;15233:58:0;;;;;;;:::i;:::-;;;;;;;;;20211:47:::1;20222:3;20227:5;20234:2;20238:6;20246:11;20211:10;:47::i;:::-;20269:24;20311:5;20269:48;;20328:19;20350:9;-1:-1:-1::0;;;;;20350:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20328:44:::0;-1:-1:-1;;;;;;20387:25:0;::::1;::::0;;::::1;::::0;:75:::1;;-1:-1:-1::0;20416:36:0::1;::::0;-1:-1:-1;;;20416:36:0;;-1:-1:-1;;;;;15087:32:1;;;20416:36:0::1;::::0;::::1;15069:51:1::0;20456:6:0;;20416:29;;::::1;::::0;::::1;::::0;15042:18:1;;20416:36:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;20387:75;20383:417;;;20498:7;-1:-1:-1::0;;;;;20483:22:0::1;:11;-1:-1:-1::0;;;;;20483:22:0::1;;20479:310;;;20526:50;::::0;-1:-1:-1;;;20526:50:0;;-1:-1:-1;;;;;20526:23:0;::::1;::::0;::::1;::::0;:50:::1;::::0;20550:2;;20554:6;;20570:4:::1;::::0;20526:50:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;20595:34:0::1;::::0;-1:-1:-1;;;20595:34:0;;::::1;::::0;::::1;27805:25:1::0;;;20604:7:0::1;-1:-1:-1::0;;;;;20595:26:0::1;::::0;::::1;::::0;27778:18:1;;20595:34:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20648:45;20682:2;20686:6;20648:33;:45::i;:::-;20479:310;;;20734:39;::::0;-1:-1:-1;;;20734:39:0;;-1:-1:-1;;;;;20734:23:0;::::1;::::0;::::1;::::0;:39:::1;::::0;20758:2;;20762:6;;20758:2;;20734:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20479:310;20200:607;;20089:718:::0;;;;;:::o;31512:246::-;31647:14;31686:64;31718:8;31728:9;31739:10;31686:31;:64::i;:::-;31679:71;31512:246;-1:-1:-1;;;;31512:246:0:o;23198:416::-;23425:8;13842:15;13830:8;:27;;13822:64;;;;-1:-1:-1;;;13822:64:0;;;;;;;:::i;:::-;23461:4:::1;;23466:1;23461:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23446:28:0::1;;23475:10;23487:8;23446:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;23512:94:0;::::1;23549:10;23512:94;23543:4:::0;;23565:8;23575:12;15573:9;23589:5:::1;23596:9;23512:94;;;;;;;;;;;:::i;:::-;;;;;;;;23198:416:::0;;;;;;;;:::o;18218:498::-;18512:5;-1:-1:-1;;;;;18497:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18490:61:0;;18552:4;18558:5;18565:6;18573:8;18583:1;18586;18589;18490:101;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;18602:48:0;;-1:-1:-1;;;18602:48:0;;;;;28015:25:1;;;-1:-1:-1;;;;;28076:32:1;;;28056:18;;;28049:60;18602:34:0;;;;;27988:18:1;;18602:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18661:47;18673:4;18679:5;18686:2;18690:6;18698:9;18661:11;:47::i;:::-;18218:498;;;;;;;;;:::o;32264:237::-;32390:21;32436:57;32468:7;32477:9;32488:4;32436:31;:57::i;:::-;32429:64;;32264:237;;;;;:::o;16526:157::-;16622:53;16634:10;16646:5;16653:2;16657:6;16665:9;16622:11;:53::i;:::-;16526:157;;;;:::o;21924:319::-;15255:5;:3;:5::i;:::-;-1:-1:-1;;;;;15241:19:0;:10;-1:-1:-1;;;;;15241:19:0;;15233:58;;;;-1:-1:-1;;;15233:58:0;;;;;;;:::i;:::-;22108:6:::1;22103:133;22120:17:::0;;::::1;22103:133;;;22159:65;22170:3;;22174:1;22170:6;;;;;;;:::i;:::-;;;;;;;22178;;22185:1;22178:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;22189:2;;22192:1;22189:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;22196:7;;22204:1;22196:10;;;;;;;:::i;:::-;;;;;;;22208:12;;22221:1;22208:15;;;;;;;:::i;:::-;;;;;;;22159:10;:65::i;:::-;22139:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22103:133;;;;21924:319:::0;;;;;;;;;;:::o;26421:648::-;26698:21;15255:5;:3;:5::i;:::-;-1:-1:-1;;;;;15241:19:0;:10;-1:-1:-1;;;;;15241:19:0;;15233:58;;;;-1:-1:-1;;;15233:58:0;;;;;;;:::i;:::-;26679:8:::1;13842:15;13830:8;:27;;13822:64;;;;-1:-1:-1::0;;;13822:64:0::1;;;;;;;:::i;:::-;26742:57:::2;26775:7;26784:8;26794:4;;26742:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;26742:32:0::2;::::0;-1:-1:-1;;;26742:57:0:i:2;:::-;26732:67;;26849:12;26818:7;26843:1;26826:7;:14;:18;;;;:::i;:::-;26818:27;;;;;;;;:::i;:::-;;;;;;;:43;;26810:101;;;::::0;-1:-1:-1;;;26810:101:0;;22886:2:1;26810: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;;26810:101:0::2;22858:235:1::0;26810:101:0::2;26922:104;26933:3;26938:4;;26943:1;26938:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;26947:53;26974:7;26983:4;;26988:1;26983:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;26992:4;;26997:1;26992:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;26947:26;:53::i;:::-;27002:7;27010:1;27002:10;;;;;;;;:::i;:::-;;;;;;;27014:11;26922:10;:104::i;:::-;27037:24;27043:7;27052:4;;27037:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;27058:2:0;;-1:-1:-1;27037:5:0::2;::::0;-1:-1:-1;;27037:24:0:i:2;:::-;15302:1:::1;26421:648:::0;;;;;;;;;;:::o;19719:245::-;15255:5;:3;:5::i;:::-;-1:-1:-1;;;;;15241:19:0;:10;-1:-1:-1;;;;;15241:19:0;;15233:58;;;;-1:-1:-1;;;15233:58:0;;;;;;;:::i;:::-;19847:47:::1;19858:3;19863:5;19870:2;19874:6;19882:11;19847:10;:47::i;:::-;19905:51;::::0;-1:-1:-1;;;19905:51:0;;-1:-1:-1;;;;;19905:35:0;::::1;::::0;::::1;::::0;:51:::1;::::0;19941:2;;19945:6;;19941:2;;19905:51:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19719:245:::0;;;;;:::o;15963:228::-;16041:4;15255:5;:3;:5::i;:::-;-1:-1:-1;;;;;15241:19:0;:10;-1:-1:-1;;;;;15241:19:0;;15233:58;;;;-1:-1:-1;;;15233:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16066:22:0;::::1;16058:64;;;::::0;-1:-1:-1;;;16058:64:0;;21415:2:1;16058:64:0::1;::::0;::::1;21397:21:1::0;21454:2;21434:18;;;21427:30;21493:31;21473:18;;;21466:59;21542:18;;16058:64:0::1;21387:179:1::0;16058:64:0::1;16140:43;::::0;-1:-1:-1;;;16140:43:0;;-1:-1:-1;;;;;15087:32:1;;;16140:43:0::1;::::0;::::1;15069:51:1::0;16140:33:0;::::1;::::0;::::1;::::0;15042:18:1;;16140:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28386:1067::-:0;28714:8;13842:15;13830:8;:27;;13822:64;;;;-1:-1:-1;;;13822:64:0;;;;;;;:::i;:::-;28735:19:::1;28772:4;;28777:1;28772:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28757:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28735:58;;28811:11;-1:-1:-1::0;;;;;28804:26:0::1;;28831:4;28845;28852:8;28862;28872:1;28875;28878;28804:76;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28891:61;28928:4;28934;;28939:1;28934:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28891:36:0;::::1;::::0;:61;28943:8;28891:36:::1;:61::i;:::-;28978:4;;28983:1;28978:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;28963:52;::::0;-1:-1:-1;;;28963:52:0;;::::1;::::0;::::1;28015:25:1::0;;;-1:-1:-1;;;;;28076:32:1;;;28056:18;;;28049:60;28963:36:0;;;::::1;::::0;::::1;::::0;27988:18:1;;28963:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29041:4;;29046:1;29041:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29026:28:0::1;;29055:4;29061:8;29026:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29092:22;29117:4;;29092:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29132:13;29148:4;29132:20;;29163:11;29177:2;29163:16;;29190:14;29207:8;29190:25;;29226:18;29247:12;29226:33;;29270:9;29282:5;15573:9:::0;;15501:89;29282:5:::1;29270:17;;29298:15;29316:9;29298:27;;29386:3;-1:-1:-1::0;;;;;29341:93:0::1;29379:5;-1:-1:-1::0;;;;;29341:93:0::1;;29372:5;29391:9;29402:13;29417:4;29423:10;29341:93;;;;;;;;;;:::i;:::-;;;;;;;;29081:365;;;;;;;28724:729;28386:1067:::0;;;;;;;;;;;;:::o;30393:886::-;30670:21;15255:5;:3;:5::i;:::-;-1:-1:-1;;;;;15241:19:0;:10;-1:-1:-1;;;;;15241:19:0;;15233:58;;;;-1:-1:-1;;;15233:58:0;;;;;;;:::i;:::-;30651:8:::1;13842:15;13830:8;:27;;13822:64;;;;-1:-1:-1::0;;;13822:64:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30737:7:0::2;30712:32;:4:::0;;30717:15:::2;30731:1;30712:4:::0;30717:15:::2;:::i;:::-;30712:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30712:32:0::2;;30704:74;;;::::0;-1:-1:-1;;;30704:74:0;;24784:2:1;30704:74:0::2;::::0;::::2;24766:21:1::0;24823:2;24803:18;;;24796:30;24862:31;24842:18;;;24835:59;24911:18;;30704:74:0::2;24756:179:1::0;30704:74:0::2;30799:57;30832:7;30841:8;30851:4;;30799:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;30799:32:0::2;::::0;-1:-1:-1;;;30799:57:0:i:2;:::-;30789:67;;30906:12;30875:7;30900:1;30883:7;:14;:18;;;;:::i;:::-;30875:27;;;;;;;;:::i;:::-;;;;;;;:43;;30867:99;;;::::0;-1:-1:-1;;;30867:99:0;;25142:2:1;30867: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;;30867:99:0::2;25114:233:1::0;30867:99:0::2;30977:105;30988:3;30993:4;;30998:1;30993:7;;;;;;;:::i;30977:105::-;31093:35;31099:7;31108:4;;31093:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;31122:4:0::2;::::0;-1:-1:-1;31093:5:0::2;::::0;-1:-1:-1;;31093:35:0:i:2;:::-;31148:7;-1:-1:-1::0;;;;;31139:26:0::2;;31166:7;31191:1;31174:7;:14;:18;;;;:::i;:::-;31166:27;;;;;;;;:::i;:::-;;;;;;;31139:55;;;;;;;;;;;;;27805:25:1::0;;27793:2;27778:18;;27760:76;31139:55:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;31205:66;31239:2;31243:7;31268:1;31251:7;:14;:18;;;;:::i;:::-;31243:27;;;;;;;;:::i;:::-;;;;;;;31205:33;:66::i;15598:357::-:0;15657:4;15255:5;:3;:5::i;:::-;-1:-1:-1;;;;;15241:19:0;:10;-1:-1:-1;;;;;15241:19:0;;15233:58;;;;-1:-1:-1;;;15233:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15682:20:0;::::1;15674:62;;;::::0;-1:-1:-1;;;15674:62:0;;21415:2:1;15674:62:0::1;::::0;::::1;21397:21:1::0;21454:2;21434:18;;;21427:30;21493:31;21473:18;;;21466:59;21542:18;;15674:62:0::1;21387:179:1::0;15674:62:0::1;15757:5;:3;:5::i;:::-;15747:7;:15:::0;;-1:-1:-1;;;;;;15747:15:0;;::::1;-1:-1:-1::0;;;;;15747:15:0;;::::1;;::::0;;;-1:-1:-1;15773:16:0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;15823:27:::1;:15;15841:9;15823:27;:::i;:::-;15800:20;:50:::0;;;15888:7:::1;::::0;::::1;15879::::0;-1:-1:-1;;;;;15888:7:0;;::::1;::::0;15879::::1;15866:59;15573:9:::0;15866:59:::1;::::0;27805:25:1;;;27793:2;27778:18;15866:59:0::1;;;;;;;-1:-1:-1::0;15943:4:0::1;15302:1;15598:357:::0;;;:::o;27170:416::-;27397:8;13842:15;13830:8;:27;;13822:64;;;;-1:-1:-1;;;13822:64:0;;;;;;;:::i;:::-;27433:4:::1;;27438:1;27433:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27418:28:0::1;;27447:10;27459:8;27418:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;27484:94:0;::::1;27521:10;27484:94;27515:4:::0;;27537:8;27547:12;15573:9;27561:5:::1;15501:89:::0;27687:598;27924:8;13842:15;13830:8;:27;;13822:64;;;;-1:-1:-1;;;13822:64:0;;;;;;;:::i;:::-;27945:92:::1;28007:10;28019:4;;28024:1;28019:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;28028:8;27967:4;;27972:1;27967:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27952:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27945:61:0::1;::::0;:92;;:61:::1;:92::i;:::-;28063:4;;28068:1;28063:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;28048:58;::::0;-1:-1:-1;;;28048:58:0;;::::1;::::0;::::1;28015:25:1::0;;;28095:10:0::1;28056:18:1::0;;;28049:60;-1:-1:-1;;;;;28048:36:0;;;::::1;::::0;::::1;::::0;27988:18:1;;28048:58:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28132:4;;28137:1;28132:7;;;;;;;:::i;20815:407::-:0;20891:4;20954:7;-1:-1:-1;;;;;20916:45:0;20931:5;-1:-1:-1;;;;;20916:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20916:45:0;;20908:100;;;;-1:-1:-1;;;20908:100:0;;;;;;;:::i;:::-;21028:7;-1:-1:-1;;;;;21019:25:0;;21052:9;21019:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21082:44:0;;-1:-1:-1;;;21082:44:0;;-1:-1:-1;;;;;21091:7:0;21082:26;;-1:-1:-1;21082:26:0;;-1:-1:-1;21082:44:0;;-1:-1:-1;21109:5:0;;21116:9;;21082:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21075:52;;;;:::i;:::-;21138:49;;-1:-1:-1;;;21138:49:0;;21173:9;21138:49;;;28015:25:1;-1:-1:-1;;;;;28076:32:1;;;28056:18;;;28049:60;21138:34:0;;;;;27988:18:1;;21138:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;21205:9:0;;20815:407;-1:-1:-1;;;20815:407:0:o;19433:173::-;15255:5;:3;:5::i;:::-;-1:-1:-1;;;;;15241:19:0;:10;-1:-1:-1;;;;;15241:19:0;;15233:58;;;;-1:-1:-1;;;15233:58:0;;;;;;;:::i;:::-;19551:47:::1;19562:3;19567:5;19574:2;19578:6;19586:11;19551:10;:47::i;:::-;19433:173:::0;;;;;:::o;21230:413::-;21312:4;21375:7;-1:-1:-1;;;;;21337:45:0;21352:5;-1:-1:-1;;;;;21337:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21337:45:0;;21329:100;;;;-1:-1:-1;;;21329:100:0;;;;;;;:::i;:::-;21440:70;;-1:-1:-1;;;21440:70:0;;-1:-1:-1;;;;;21440:35:0;;;;;:70;;21476:10;;21488:6;;21504:4;;21440:70;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;21521:34:0;;-1:-1:-1;;;21521:34:0;;;;;27805:25:1;;;21530:7:0;-1:-1:-1;;;;;21521:26:0;;;;27778:18:1;;21521:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21566:45;21600:2;21604:6;21566:33;:45::i;:::-;-1:-1:-1;21629:6:0;;21230:413;-1:-1:-1;;21230:413:0:o;31766:245::-;31901:13;31939:64;31970:9;31981;31992:10;31939:30;:64::i;21693:223::-;15255:5;:3;:5::i;:::-;-1:-1:-1;;;;;15241:19:0;:10;-1:-1:-1;;;;;15241:19:0;;15233:58;;;;-1:-1:-1;;;15233:58:0;;;;;;;:::i;:::-;21771:12:::1;21786:5;:3;:5::i;:::-;21802:40;::::0;-1:-1:-1;;;21802:40:0;;21771:20;;-1:-1:-1;;;;;;21802:26:0;::::1;::::0;::::1;::::0;:40:::1;::::0;21771:20;;21835:6;;21802:40:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;21853:55:0::1;::::0;-1:-1:-1;;;21853:55:0;;-1:-1:-1;;;;;21853:35:0;::::1;::::0;::::1;::::0;:55:::1;::::0;21889:4;;21895:6;;21889:4;;21853:55:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17612:598::-:0;17876:19;17913:5;-1:-1:-1;;;;;17898:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17943:74;;-1:-1:-1;;;17943:74:0;;17876:56;;-1:-1:-1;;;;;;17943:26:0;;;;;:74;;17970:4;;17984;;17991:6;;17999:8;;18009:1;;18012;;18015;;17943:74;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18028:57:0;;-1:-1:-1;;;;;;;;18028:36:0;;18065:4;18071:5;18078:6;18028:36;:57::i;:::-;18096:48;;-1:-1:-1;;;18096:48:0;;;;;28015:25:1;;;-1:-1:-1;;;;;28076:32:1;;;28056:18;;;28049:60;18096:34:0;;;;;27988:18:1;;18096:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18155:47;18167:4;18173:5;18180:2;18184:6;18192:9;18155:11;:47::i;:::-;17865:345;17612:598;;;;;;;;;:::o;24414:1067::-;24742:8;13842:15;13830:8;:27;;13822:64;;;;-1:-1:-1;;;13822:64:0;;;;;;;:::i;:::-;24763:19:::1;24800:4;;24805:1;24800:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24785:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24763:58;;24839:11;-1:-1:-1::0;;;;;24832:26:0::1;;24859:4;24873;24880:8;24890;24900:1;24903;24906;24832:76;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24919:61;24956:4;24962;;24967:1;24962:7;;;;;;;:::i;24919:61::-;25006:4;;25011:1;25006:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;24991:52;::::0;-1:-1:-1;;;24991:52:0;;::::1;::::0;::::1;28015:25:1::0;;;-1:-1:-1;;;;;28076:32:1;;;28056:18;;;28049:60;24991:36:0;;;::::1;::::0;::::1;::::0;27988:18:1;;24991:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25069:4;;25074:1;25069:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25054:28:0::1;;25083:4;25089:8;25054:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25120:22;25145:4;;25120:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25160:13;25176:4;25160:20;;25191:11;25205:2;25191:16;;25218:14;25235:8;25218:25;;25254:18;25275:12;25254:33;;25298:9;25310:5;15573:9:::0;;15501:89;25310:5:::1;25298:17;;25326:15;25344:9;25326:27;;25414:3;-1:-1:-1::0;;;;;25369:93:0::1;25407:5;-1:-1:-1::0;;;;;25369:93:0::1;;25400:5;25419:9;25430:13;25445:4;25451:10;25369:93;;;;;;;;;;:::i;25582:694::-:0;25918:8;13842:15;13830:8;:27;;13822:64;;;;-1:-1:-1;;;13822:64:0;;;;;;;:::i;:::-;25961:4:::1;;25966:1;25961:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25946:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25939:63:0::1;;26003:4;26009;;26014:1;26009:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;26018:8;26028;26038:1;26041;26044;25939:107;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26072:4;;26077:1;26072:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;26057:52;::::0;-1:-1:-1;;;26057:52:0;;::::1;::::0;::::1;28015:25:1::0;;;-1:-1:-1;;;;;28076:32:1;;;28056:18;;;28049:60;26057:36:0;;;::::1;::::0;::::1;::::0;27988:18:1;;26057:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26135:4;;26140:1;26135:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26120:28:0::1;;26149:4;26155:8;26120:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26223:2;-1:-1:-1::0;;;;;26180:88:0::1;26217:4;-1:-1:-1::0;;;;;26180:88:0::1;;26211:4;;26227:8;26237:12;26251:5;15573:9:::0;;15501:89;26251:5:::1;26258:9;26180:88;;;;;;;;;;;:::i;:::-;;;;;;;;25582:694:::0;;;;;;;;;;;;:::o;17145:459::-;17288:7;-1:-1:-1;;;;;17250:45:0;17265:5;-1:-1:-1;;;;;17250:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17250:45:0;;17242:100;;;;-1:-1:-1;;;17242:100:0;;;;;;;:::i;:::-;17362:7;-1:-1:-1;;;;;17353:25:0;;17386:9;17353:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17416:44:0;;-1:-1:-1;;;17416:44:0;;-1:-1:-1;;;;;17425:7:0;17416:26;;-1:-1:-1;17416:26:0;;-1:-1:-1;17416:44:0;;-1:-1:-1;17443:5:0;;17450:9;;17416:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17409:52;;;;:::i;:::-;17472:57;;-1:-1:-1;;;17472:57:0;;17507:9;17472:57;;;28015:25:1;17518:10:0;28056:18:1;;;28049:60;-1:-1:-1;;;;;17472:34:0;;;;;27988:18:1;;17472:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17540:56;17552:10;17564:5;17571:2;17575:9;17586;17540:11;:56::i;:::-;17145:459;;;:::o;31323:181::-;31411:12;31443:53;31468:7;31477:8;31487;31443:24;:53::i;29554:694::-;29890:8;13842:15;13830:8;:27;;13822:64;;;;-1:-1:-1;;;13822:64:0;;;;;;;:::i;:::-;29933:4:::1;;29938:1;29933:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29918:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29911:63:0::1;;29975:4;29981;;29986:1;29981:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;29990:8;30000;30010:1;30013;30016;29911:107;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30044:4;;30049:1;30044:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;30029:52;::::0;-1:-1:-1;;;30029:52:0;;::::1;::::0;::::1;28015:25:1::0;;;-1:-1:-1;;;;;28076:32:1;;;28056:18;;;28049:60;30029:36:0;;;::::1;::::0;::::1;::::0;27988:18:1;;30029:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30107:4;;30112:1;30107:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30092:28:0::1;;30121:4;30127:8;30092:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30195:2;-1:-1:-1::0;;;;;30152:88:0::1;30189:4;-1:-1:-1::0;;;;;30152:88:0::1;;30183:4;;30199:8;30209:12;30223:5;15573:9:::0;;15501:89;32019:237;32145:21;32191:57;32224:7;32233:8;32243:4;32191:32;:57::i;23715:598::-;23952:8;13842:15;13830:8;:27;;13822:64;;;;-1:-1:-1;;;13822:64:0;;;;;;;:::i;:::-;23973:92:::1;24035:10;24047:4;;24052:1;24047:7;;;;;;;:::i;23973:92::-;24091:4;;24096:1;24091:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;24076:58;::::0;-1:-1:-1;;;24076:58:0;;::::1;::::0;::::1;28015:25:1::0;;;24123:10:0::1;28056:18:1::0;;;28049:60;-1:-1:-1;;;;;24076:36:0;;;::::1;::::0;::::1;::::0;27988:18:1;;24076:58:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24160:4;;24165:1;24160:7;;;;;;;:::i;18724:286::-:0;18872:6;18867:136;18884:17;;;18867:136;;;18923:68;18935:10;18947:6;;18954:1;18947:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;18958:2;;18961:1;18958:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;18965:7;;18973:1;18965:10;;;;;;;:::i;:::-;;;;;;;18977;;18988:1;18977:13;;;;;;;:::i;:::-;;;;;;;18923:11;:68::i;:::-;18903:3;;;;:::i;:::-;;;;18867:136;;16808:329;16914:86;16974:10;16986:5;16993:6;16936:5;-1:-1:-1;;;;;16921:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16914:86;17011:54;;-1:-1:-1;;;17011:54:0;;;;;28015:25:1;;;17054:10:0;28056:18:1;;;28049:60;-1:-1:-1;;;;;17011:34:0;;;;;27988:18:1;;17011:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17076:53;17088:10;17100:5;17107:2;17111:6;17119:9;17076:11;:53::i;15319:174::-;15355:7;15398:20;;15379:15;:39;15375:86;;-1:-1:-1;15442:7:0;;-1:-1:-1;;;;;15442:7:0;;15319:174::o;15375:86::-;-1:-1:-1;15478:7:0;;-1:-1:-1;;;;;15478:7:0;;15319:174::o;19090:229::-;19201:38;;-1:-1:-1;;;19201:38:0;;-1:-1:-1;;;;;19201:26:0;;;;;:38;;19228:2;;19232:6;;19201:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19280:2;-1:-1:-1;;;;;19255:56:0;19273:5;-1:-1:-1;;;;;19255:56:0;19268:3;19255:56;19284:6;19292:11;19305:5;15573:9;;15501:89;19305:5;19255:56;;;28951:25:1;;;29007:2;28992:18;;28985:34;;;;29035:18;;;29028:34;28939:2;28924:18;19255:56:0;;;;;;;;19090:229;;;;;:::o;8988:201::-;9099:12;;;9061;9099;;;;;;;;;-1:-1:-1;;;;;9078:7:0;;;9092:5;;9078:34;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9060:52;;;9131:7;9123:58;;;;-1:-1:-1;;;9123:58:0;;23661:2:1;9123: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;;9123:58:0;23633:228:1;5363:521:0;5456:14;5502:1;5491:8;:12;5483:70;;;;-1:-1:-1;;;5483:70:0;;26726:2:1;5483: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;;5483:70:0;26698:235:1;5483:70:0;5584:1;5572:9;:13;:31;;;;;5602:1;5589:10;:14;5572:31;5564:86;;;;-1:-1:-1;;;5564:86:0;;;;;;;:::i;:::-;5661:20;5684:17;:8;5697:3;5684:12;:17::i;:::-;5661:40;-1:-1:-1;5712:14:0;5729:31;5661:40;5749:10;5729:19;:31::i;:::-;5712:48;-1:-1:-1;5771:16:0;5790:40;5814:15;5790:19;:9;5804:4;5790:13;:19::i;:::-;:23;;:40::i;:::-;5771:59;-1:-1:-1;5853:23:0;5771:59;5853:9;:23;:::i;:::-;5841:35;5363:521;-1:-1:-1;;;;;;;5363:521:0:o;16199:231::-;16310:40;;-1:-1:-1;;;16310:40:0;;-1:-1:-1;;;;;16310:26:0;;;;;:40;;16337:4;;16343:6;;16310:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16393:2;-1:-1:-1;;;;;16366:56:0;16387:4;-1:-1:-1;;;;;16366:56:0;16380:5;-1:-1:-1;;;;;16366:56:0;;16397:6;16405:5;15573:9;;15501:89;16405:5;16366:56;;;28951:25:1;;;29007:2;28992:18;;28985:34;;;;29035:18;;29028:34;;;28939:2;28924:18;16366:56:0;28906:162:1;7157:534:0;7258:21;7315:1;7300:4;:11;:16;;7292:61;;;;-1:-1:-1;;;7292:61:0;;27500:2:1;7292:61:0;;;27482:21:1;;;27519:18;;;27512:30;27578:34;27558:18;;;27551:62;27630:18;;7292:61:0;27472:182:1;7292:61:0;7385:4;:11;7374:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7374:23:0;;7364:33;;7438:9;7408:7;7433:1;7416:7;:14;:18;;;;:::i;:::-;7408:27;;;;;;;;:::i;:::-;;;;;;:39;;;;;7463:6;7486:1;7472:4;:11;:15;;;;:::i;:::-;7463:24;;7458:226;7489:5;;7458:226;;7517:14;;7552:42;7564:7;7573:4;7578:5;7582:1;7578;:5;:::i;:::-;7573:11;;;;;;;;:::i;:::-;;;;;;;7586:4;7591:1;7586:7;;;;;;;;:::i;:::-;;;;;;;7552:11;:42::i;:::-;7516:78;;;;7626:46;7638:7;7646:1;7638:10;;;;;;;;:::i;:::-;;;;;;;7650:9;7661:10;7626:11;:46::i;:::-;7609:7;7617:5;7621:1;7617;:5;:::i;:::-;7609:14;;;;;;;;:::i;:::-;;;;;;:63;;;;;7501:183;;7496:3;;;;;:::i;:::-;;;;7458:226;;;;7157:534;;;;;:::o;6563:513::-;6664:21;6721:1;6706:4;:11;:16;;6698:61;;;;-1:-1:-1;;;6698:61:0;;27500:2:1;6698:61:0;;;27482:21:1;;;27519:18;;;27512:30;27578:34;27558:18;;;27551:62;27630:18;;6698:61:0;27472:182:1;6698:61:0;6791:4;:11;6780:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6780:23:0;;6770:33;;6827:8;6814:7;6822:1;6814:10;;;;;;;;:::i;:::-;;;;;;:21;;;;;6851:6;6846:223;6877:1;6863:4;:11;:15;;;;:::i;:::-;6859:1;:19;6846:223;;;6901:14;6917:15;6936:42;6948:7;6957:4;6962:1;6957:7;;;;;;;;:::i;:::-;;;;;;;6966:4;6971:1;6975;6971:5;;;;:::i;:::-;6966:11;;;;;;;;:::i;6936:42::-;6900:78;;;;7010:47;7023:7;7031:1;7023:10;;;;;;;;:::i;:::-;;;;;;;7035:9;7046:10;7010:12;:47::i;:::-;6993:7;7001:5;:1;7005;7001:5;:::i;:::-;6993:14;;;;;;;;:::i;:::-;;;;;;:64;;;;;6885:184;;6880:3;;;;;:::i;:::-;;;;6846:223;;3862:490;3951:12;3977:14;3993;4011:26;4022:6;4030;4011:10;:26::i;:::-;4186:32;;-1:-1:-1;;13892:2:1;13888:15;;;13884:24;;4186:32:0;;;13872:37:1;13943:15;;;13939:24;13925:12;;;13918:46;3976:61:0;;-1:-1:-1;3976:61:0;-1:-1:-1;4150:7:0;;13980:12:1;;4186:32:0;;;;;;;;;;;;4176:43;;;;;;4089: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;4089:251:0;;;;-1:-1:-1;;4089:251:0;;;;;;;;;4079:262;;4089:251;4079:262;;;;;3862:490;-1:-1:-1;;;;;;3862:490:0:o;22354:743::-;22461:6;22456:634;22487:1;22473:4;:11;:15;;;;:::i;:::-;22469:1;:19;22456:634;;;22511:13;22526:14;22545:4;22550:1;22545:7;;;;;;;;:::i;:::-;;;;;;;22554:4;22559:1;22563;22559:5;;;;:::i;:::-;22554:11;;;;;;;;:::i;:::-;;;;;;;22510:56;;;;22582:14;22601:44;22631:5;22638:6;22601:29;:44::i;:::-;-1:-1:-1;22581:64:0;-1:-1:-1;22660:14:0;22677:7;22685:5;:1;22689;22685:5;:::i;:::-;22677:14;;;;;;;;:::i;:::-;;;;;;;22660:31;;22707:15;22724;22752:6;-1:-1:-1;;;;;22743:15:0;:5;-1:-1:-1;;;;;22743:15:0;;:61;;22785:9;22801:1;22743:61;;;22767:1;22771:9;22743:61;22706:98;;;;22819:10;22850:1;22836:4;:11;:15;;;;:::i;:::-;22832:1;:19;:84;;22913:3;22832:84;;;22854:56;22881:7;22890:6;22898:4;22903:5;:1;22907;22903:5;:::i;:::-;22898:11;;;;;;;;:::i;:::-;;;;;;;22854:26;:56::i;:::-;22819:97;;22948:50;22975:7;22984:5;22991:6;22948:26;:50::i;:::-;-1:-1:-1;;;;;22931:73:0;;23023:10;23035;23047:2;23061:1;23051:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23051:12:0;;22931:147;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22495:595;;;;;;;22490:3;;;;;:::i;:::-;;;;22456:634;;12430:201;12554:68;;;-1:-1:-1;;;;;15389:15:1;;;12554:68:0;;;15371:34:1;15441:15;;15421:18;;;15414:43;15473:18;;;;15466:34;;;12554:68:0;;;;;;;;;;15306:18:1;;;;12554:68:0;;;;;;;;-1:-1:-1;;;;;12554:68:0;-1:-1:-1;;;12554:68:0;;;12528:95;;12547:5;;12528:18;:95::i;6005:476::-;6098:13;6144:1;6132:9;:13;6124:72;;;;-1:-1:-1;;;6124:72:0;;22122:2:1;6124: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;;6124:72:0;22094:236:1;6124:72:0;6227:1;6215:9;:13;:31;;;;;6245:1;6232:10;:14;6215:31;6207:86;;;;-1:-1:-1;;;6207:86:0;;;;;;;:::i;:::-;6304:14;6321:34;6350:4;6321:24;:9;6335;6321:13;:24::i;:::-;:28;;:34::i;:::-;6304:51;-1:-1:-1;6366:16:0;6385:34;6415:3;6385:25;:10;6400:9;6385:14;:25::i;:34::-;6366:53;-1:-1:-1;6441:32:0;6471:1;6442:23;6366:53;6442:9;:23;:::i;6441:32::-;6430:43;6005:476;-1:-1:-1;;;;;;6005:476:0:o;4916:325::-;4998:12;5041:1;5031:7;:11;5023:63;;;;-1:-1:-1;;;5023:63:0;;25554:2:1;5023: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;;5023:63:0;25526:229:1;5023:63:0;5116:1;5105:8;:12;:28;;;;;5132:1;5121:8;:12;5105:28;5097:83;;;;-1:-1:-1;;;5097:83:0;;;;;;;:::i;:::-;5225:8;5201:21;:7;5213:8;5201:11;:21::i;:::-;:32;;;;:::i;3092:142::-;3144:6;3171;;;:30;;-1:-1:-1;3200:1:0;3195;3186:5;3195:1;3200;3186:5;:::i;:::-;3182:9;-1:-1:-1;3181:15:0;;3182:9;3181:15;:::i;:::-;:20;3171:30;3163:63;;;;-1:-1:-1;;;3163:63:0;;21773:2:1;3163:63:0;;;21755:21:1;21812:2;21792:18;;;21785:30;-1:-1:-1;;;21831:18:1;;;21824:50;21891:18;;3163:63:0;21745:170:1;2819:128:0;2871:6;2913:1;2903:5;2907:1;2913;2903:5;:::i;:::-;2899:9;;;2898:16;;2890:49;;;;-1:-1:-1;;;2890:49:0;;22537:2:1;2890:49:0;;;22519:21:1;22576:2;22556:18;;;22549:30;-1:-1:-1;;;22595:18:1;;;22588:50;22655:18;;2890:49:0;22509:170:1;4410:393:0;4503:13;4518;4545:14;4564:26;4575:6;4583;4564:10;:26::i;:::-;4544:46;;;4602:13;4617;4652:32;4660:7;4669:6;4677;4652:7;:32::i;:::-;-1:-1:-1;;;;;4635:62:0;;:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4601:98;-1:-1:-1;;;;;4601:98:0;;;-1:-1:-1;;;;;4601:98:0;;;4743:6;-1:-1:-1;;;;;4733:16:0;:6;-1:-1:-1;;;;;4733:16:0;;:62;;4776:8;4786;4733:62;;;4753:8;4763;4733:62;4710:85;;;;-1:-1:-1;4410:393:0;-1:-1:-1;;;;;;;4410:393:0:o;3417:353::-;3492:14;3508;3553:6;-1:-1:-1;;;;;3543:16:0;:6;-1:-1:-1;;;;;3543:16:0;;;3535:68;;;;-1:-1:-1;;;3535:68:0;;21007:2:1;3535: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;;3535:68:0;20979:229:1;3535:68:0;3642:6;-1:-1:-1;;;;;3633:15:0;:6;-1:-1:-1;;;;;3633:15:0;;:53;;3671:6;3679;3633:53;;;3652:6;3660;3633:53;3614:72;;-1:-1:-1;3614:72:0;-1:-1:-1;;;;;;3705:20:0;;3697:65;;;;-1:-1:-1;;;3697:65:0;;24423:2:1;3697:65:0;;;24405:21:1;;;24442:18;;;24435:30;24501:34;24481:18;;;24474:62;24553:18;;3697:65:0;24395:182:1;3697:65:0;3417:353;;;;;:::o;12989:598::-;13077:27;13085:5;-1:-1:-1;;;;;13077:25:0;;:27::i;:::-;13069:71;;;;-1:-1:-1;;;13069:71:0;;27140:2:1;13069:71:0;;;27122:21:1;27179:2;27159:18;;;27152:30;27218:33;27198:18;;;27191:61;27269:18;;13069:71:0;27112:181:1;13069:71:0;13214:12;13228:23;13263:5;-1:-1:-1;;;;;13255:19:0;13275:4;13255:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13213:67;;;;13299:7;13291:52;;;;-1:-1:-1;;;13291:52:0;;23300:2:1;13291:52:0;;;23282:21:1;;;23319:18;;;23312:30;23378:34;23358:18;;;23351:62;23430:18;;13291:52:0;23272:182:1;13291:52:0;13360:17;;:21;13356:224;;13502:10;13491:30;;;;;;;;;;;;:::i;:::-;13483:85;;;;-1:-1:-1;;;13483:85:0;;26315:2:1;13483: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;;13483:85:0;26287:232:1;2955:129:0;3007:6;3049:1;3039:5;3043:1;3049;3039:5;:::i;:::-;3035:9;;;3034:16;;3026:50;;;;-1:-1:-1;;;3026:50:0;;20246:2:1;3026:50:0;;;20228:21:1;20285:2;20265:18;;;20258:30;-1:-1:-1;;;20304:18:1;;;20297:51;20365:18;;3026:50:0;20218:171:1;11809:374:0;11869:4;12092:20;;11935:66;12132:15;;;;;:42;;-1:-1:-1;12151:23:0;;;12124:51;-1:-1:-1;;11809:374:0:o;14:134:1:-;82:20;;111:31;82:20;111:31;:::i;153:367::-;216:8;226:6;280:3;273:4;265:6;261:17;257:27;247:2;;298:1;295;288:12;247:2;-1:-1:-1;321:20:1;;364:18;353:30;;350:2;;;396:1;393;386:12;350:2;433:4;425:6;421:17;409:29;;493:3;486:4;476:6;473:1;469:14;461:6;457:27;453:38;450:47;447:2;;;510:1;507;500:12;525:188;604:13;;-1:-1:-1;;;;;646:42:1;;636:53;;626:2;;703:1;700;693:12;718:156;784:20;;844:4;833:16;;823:27;;813:2;;864:1;861;854:12;879:247;938:6;991:2;979:9;970:7;966:23;962:32;959:2;;;1007:1;1004;997:12;959:2;1046:9;1033:23;1065:31;1090:5;1065:31;:::i;:::-;1115:5;949:177;-1:-1:-1;;;949:177:1:o;1131:251::-;1201:6;1254:2;1242:9;1233:7;1229:23;1225:32;1222:2;;;1270:1;1267;1260:12;1222:2;1302:9;1296:16;1321:31;1346:5;1321:31;:::i;1387:388::-;1455:6;1463;1516:2;1504:9;1495:7;1491:23;1487:32;1484:2;;;1532:1;1529;1522:12;1484:2;1571:9;1558:23;1590:31;1615:5;1590:31;:::i;:::-;1640:5;-1:-1:-1;1697:2:1;1682:18;;1669:32;1710:33;1669:32;1710:33;:::i;:::-;1762:7;1752:17;;;1474:301;;;;;:::o;1780:945::-;1909:6;1917;1925;1933;1941;1949;1957;1965;1973;2026:3;2014:9;2005:7;2001:23;1997:33;1994:2;;;2043:1;2040;2033:12;1994:2;2082:9;2069:23;2101:31;2126:5;2101:31;:::i;:::-;2151:5;-1:-1:-1;2208:2:1;2193:18;;2180:32;2221:33;2180:32;2221:33;:::i;:::-;2273:7;-1:-1:-1;2332:2:1;2317:18;;2304:32;2345:33;2304:32;2345:33;:::i;:::-;2397:7;-1:-1:-1;2451:2:1;2436:18;;2423:32;;-1:-1:-1;2502:3:1;2487:19;;2474:33;;-1:-1:-1;2526:37:1;2558:3;2543:19;;2526:37;:::i;:::-;2516:47;;2610:3;2599:9;2595:19;2582:33;2572:43;;2662:3;2651:9;2647:19;2634:33;2624:43;;2714:3;2703:9;2699:19;2686:33;2676:43;;1984:741;;;;;;;;;;;:::o;2730:456::-;2807:6;2815;2823;2876:2;2864:9;2855:7;2851:23;2847:32;2844:2;;;2892:1;2889;2882:12;2844:2;2931:9;2918:23;2950:31;2975:5;2950:31;:::i;:::-;3000:5;-1:-1:-1;3057:2:1;3042:18;;3029:32;3070:33;3029:32;3070:33;:::i;:::-;2834:352;;3122:7;;-1:-1:-1;;;3176:2:1;3161:18;;;;3148:32;;2834:352::o;3191:525::-;3277:6;3285;3293;3301;3354:3;3342:9;3333:7;3329:23;3325:33;3322:2;;;3371:1;3368;3361:12;3322:2;3410:9;3397:23;3429:31;3454:5;3429:31;:::i;:::-;3479:5;-1:-1:-1;3536:2:1;3521:18;;3508:32;3549:33;3508:32;3549:33;:::i;:::-;3312:404;;3601:7;;-1:-1:-1;;;;3655:2:1;3640:18;;3627:32;;3706:2;3691:18;3678:32;;3312:404::o;3721:315::-;3789:6;3797;3850:2;3838:9;3829:7;3825:23;3821:32;3818:2;;;3866:1;3863;3856:12;3818:2;3905:9;3892:23;3924:31;3949:5;3924:31;:::i;:::-;3974:5;4026:2;4011:18;;;;3998:32;;-1:-1:-1;;;3808:228:1:o;4041:456::-;4118:6;4126;4134;4187:2;4175:9;4166:7;4162:23;4158:32;4155:2;;;4203:1;4200;4193:12;4155:2;4242:9;4229:23;4261:31;4286:5;4261:31;:::i;:::-;4311:5;-1:-1:-1;4363:2:1;4348:18;;4335:32;;-1:-1:-1;4419:2:1;4404:18;;4391:32;4432:33;4391:32;4432:33;:::i;:::-;4484:7;4474:17;;;4145:352;;;;;:::o;4502:1200::-;4667:6;4675;4683;4691;4699;4707;4715;4723;4731;4739;4747:7;4801:3;4789:9;4780:7;4776:23;4772:33;4769:2;;;4818:1;4815;4808:12;4769:2;4857:9;4844:23;4876:31;4901:5;4876:31;:::i;:::-;4926:5;-1:-1:-1;4978:2:1;4963:18;;4950:32;;-1:-1:-1;5029:2:1;5014:18;;5001:32;;-1:-1:-1;5084:2:1;5069:18;;5056:32;5111:18;5100:30;;5097:2;;;5143:1;5140;5133:12;5097:2;5182:70;5244:7;5235:6;5224:9;5220:22;5182:70;:::i;:::-;5271:8;;-1:-1:-1;5156:96:1;-1:-1:-1;;5358:3:1;5343:19;;5330:33;5372;5330;5372;:::i;:::-;5424:7;-1:-1:-1;5478:3:1;5463:19;;5450:33;;-1:-1:-1;5502:37:1;5534:3;5519:19;;5502:37;:::i;:::-;5492:47;;5586:3;5575:9;5571:19;5558:33;5548:43;;5638:3;5627:9;5623:19;5610:33;5600:43;;5691:3;5680:9;5676:19;5663:33;5652:44;;4759:943;;;;;;;;;;;;;;:::o;5707:1404::-;5901:6;5909;5917;5925;5933;5941;5949;5957;6010:3;5998:9;5989:7;5985:23;5981:33;5978:2;;;6027:1;6024;6017:12;5978:2;6067:9;6054:23;6096:18;6137:2;6129:6;6126:14;6123:2;;;6153:1;6150;6143:12;6123:2;6192:70;6254:7;6245:6;6234:9;6230:22;6192:70;:::i;:::-;6281:8;;-1:-1:-1;6166:96:1;-1:-1:-1;6369:2:1;6354:18;;6341:32;;-1:-1:-1;6385:16:1;;;6382:2;;;6414:1;6411;6404:12;6382:2;6453:72;6517:7;6506:8;6495:9;6491:24;6453:72;:::i;:::-;6544:8;;-1:-1:-1;6427:98:1;-1:-1:-1;6632:2:1;6617:18;;6604:32;;-1:-1:-1;6648:16:1;;;6645:2;;;6677:1;6674;6667:12;6645:2;6716:72;6780:7;6769:8;6758:9;6754:24;6716:72;:::i;:::-;6807:8;;-1:-1:-1;6690:98:1;-1:-1:-1;6895:2:1;6880:18;;6867:32;;-1:-1:-1;6911:16:1;;;6908:2;;;6940:1;6937;6930:12;6908:2;;6979:72;7043:7;7032:8;7021:9;7017:24;6979:72;:::i;:::-;5968:1143;;;;-1:-1:-1;5968:1143:1;;-1:-1:-1;5968:1143:1;;;;;;7070:8;-1:-1:-1;;;5968:1143:1:o;7116:1720::-;7346:6;7354;7362;7370;7378;7386;7394;7402;7410;7418;7471:3;7459:9;7450:7;7446:23;7442:33;7439:2;;;7488:1;7485;7478:12;7439:2;7528:9;7515:23;7557:18;7598:2;7590:6;7587:14;7584:2;;;7614:1;7611;7604:12;7584:2;7653:70;7715:7;7706:6;7695:9;7691:22;7653:70;:::i;:::-;7742:8;;-1:-1:-1;7627:96:1;-1:-1:-1;7830:2:1;7815:18;;7802:32;;-1:-1:-1;7846:16:1;;;7843:2;;;7875:1;7872;7865:12;7843:2;7914:72;7978:7;7967:8;7956:9;7952:24;7914:72;:::i;:::-;8005:8;;-1:-1:-1;7888:98:1;-1:-1:-1;8093:2:1;8078:18;;8065:32;;-1:-1:-1;8109:16:1;;;8106:2;;;8138:1;8135;8128:12;8106:2;8177:72;8241:7;8230:8;8219:9;8215:24;8177:72;:::i;:::-;8268:8;;-1:-1:-1;8151:98:1;-1:-1:-1;8356:2:1;8341:18;;8328:32;;-1:-1:-1;8372:16:1;;;8369:2;;;8401:1;8398;8391:12;8369:2;8440:72;8504:7;8493:8;8482:9;8478:24;8440:72;:::i;:::-;8531:8;;-1:-1:-1;8414:98:1;-1:-1:-1;8619:3:1;8604:19;;8591:33;;-1:-1:-1;8636:16:1;;;8633:2;;;8665:1;8662;8655:12;8633:2;;8704:72;8768:7;8757:8;8746:9;8742:24;8704:72;:::i;:::-;8678:98;;8795:8;8785:18;;;8822:8;8812:18;;;7429:1407;;;;;;;;;;;;;:::o;8841:277::-;8908:6;8961:2;8949:9;8940:7;8936:23;8932:32;8929:2;;;8977:1;8974;8967:12;8929:2;9009:9;9003:16;9062:5;9055:13;9048:21;9041:5;9038:32;9028:2;;9084:1;9081;9074:12;9123:594;9218:6;9226;9234;9242;9250;9303:3;9291:9;9282:7;9278:23;9274:33;9271:2;;;9320:1;9317;9310:12;9271:2;9356:9;9343:23;9333:33;;9416:2;9405:9;9401:18;9388:32;9429:31;9454:5;9429:31;:::i;:::-;9479:5;-1:-1:-1;9536:2:1;9521:18;;9508:32;9549:33;9508:32;9549:33;:::i;:::-;9261:456;;;;-1:-1:-1;9601:7:1;;9655:2;9640:18;;9627:32;;-1:-1:-1;9706:3:1;9691:19;9678:33;;9261:456;-1:-1:-1;;9261:456:1:o;9722:916::-;9862:6;9870;9878;9886;9894;9902;9910;9918;9971:3;9959:9;9950:7;9946:23;9942:33;9939:2;;;9988:1;9985;9978:12;9939:2;10024:9;10011:23;10001:33;;10081:2;10070:9;10066:18;10053:32;10043:42;;10132:2;10121:9;10117:18;10104:32;10094:42;;10187:2;10176:9;10172:18;10159:32;10214:18;10206:6;10203:30;10200:2;;;10246:1;10243;10236:12;10200:2;10285:70;10347:7;10338:6;10327:9;10323:22;10285:70;:::i;:::-;10374:8;;-1:-1:-1;10259:96:1;-1:-1:-1;;10459:3:1;10444:19;;10431:33;10473:31;10431:33;10473:31;:::i;:::-;9929:709;;;;-1:-1:-1;9929:709:1;;;;;;10523:5;;-1:-1:-1;;;10575:3:1;10560:19;;10547:33;;10627:3;10612:19;10599:33;;9929:709::o;10643:450::-;10730:6;10738;10746;10799:2;10787:9;10778:7;10774:23;10770:32;10767:2;;;10815:1;10812;10805:12;10767:2;10838:40;10868:9;10838:40;:::i;:::-;10828:50;;10897:49;10942:2;10931:9;10927:18;10897:49;:::i;:::-;10887:59;;10989:2;10978:9;10974:18;10968:25;11033:10;11026:5;11022:22;11015:5;11012:33;11002:2;;11059:1;11056;11049:12;11098:184;11168:6;11221:2;11209:9;11200:7;11196:23;11192:32;11189:2;;;11237:1;11234;11227:12;11189:2;-1:-1:-1;11260:16:1;;11179:103;-1:-1:-1;11179:103:1:o;11287:1200::-;11380:6;11388;11441:2;11429:9;11420:7;11416:23;11412:32;11409:2;;;11457:1;11454;11447:12;11409:2;11493:9;11480:23;11470:33;;11522:2;11575;11564:9;11560:18;11547:32;11598:18;11639:2;11631:6;11628:14;11625:2;;;11655:1;11652;11645:12;11625:2;11693:6;11682:9;11678:22;11668:32;;11738:7;11731:4;11727:2;11723:13;11719:27;11709:2;;11760:1;11757;11750:12;11709:2;11796;11783:16;11818:2;11814;11811:10;11808:2;;;11824:18;;:::i;:::-;11870:2;11867:1;11863:10;11902:2;11896:9;11965:2;11961:7;11956:2;11952;11948:11;11944:25;11936:6;11932:38;12020:6;12008:10;12005:22;12000:2;11988:10;11985:18;11982:46;11979:2;;;12031:18;;:::i;:::-;12067:2;12060:22;12117:18;;;12151:15;;;;-1:-1:-1;12186:11:1;;;12216;;;12212:20;;12209:33;-1:-1:-1;12206:2:1;;;12255:1;12252;12245:12;12206:2;12277:1;12268:10;;12287:169;12301:2;12298:1;12295:9;12287:169;;;12358:23;12377:3;12358:23;:::i;:::-;12346:36;;12319:1;12312:9;;;;;12402:12;;;;12434;;12287:169;;;12291:3;12475:6;12465:16;;;;;;;;11399:1088;;;;;:::o;12492:847::-;12623:6;12631;12639;12647;12655;12663;12671;12724:3;12712:9;12703:7;12699:23;12695:33;12692:2;;;12741:1;12738;12731:12;12692:2;12777:9;12764:23;12754:33;;12834:2;12823:9;12819:18;12806:32;12796:42;;12889:2;12878:9;12874:18;12861:32;12916:18;12908:6;12905:30;12902:2;;;12948:1;12945;12938:12;12902:2;12987:70;13049:7;13040:6;13029:9;13025:22;12987:70;:::i;:::-;13076:8;;-1:-1:-1;12961:96:1;-1:-1:-1;;13161:2:1;13146:18;;13133:32;13174:31;13133:32;13174:31;:::i;:::-;12682:657;;;;-1:-1:-1;12682:657:1;;;;13224:5;13276:3;13261:19;;13248:33;;-1:-1:-1;13328:3:1;13313:19;;;13300:33;;12682:657;-1:-1:-1;;12682:657:1:o;13344:316::-;13421:6;13429;13437;13490:2;13478:9;13469:7;13465:23;13461:32;13458:2;;;13506:1;13503;13496:12;13458:2;-1:-1:-1;;13529:23:1;;;13599:2;13584:18;;13571:32;;-1:-1:-1;13650:2:1;13635:18;;;13622:32;;13448:212;-1:-1:-1;13448:212:1:o;14003:274::-;14132:3;14170:6;14164:13;14186:53;14232:6;14227:3;14220:4;14212:6;14208:17;14186:53;:::i;:::-;14255:16;;;;;14140:137;-1:-1:-1;;14140:137:1:o;15511:670::-;-1:-1:-1;;;;;15878:15:1;;;15860:34;;15930:15;;;;15925:2;15910:18;;15903:43;15977:2;15962:18;;15955:34;;;;16020:2;16005:18;;15998:34;;;;16081:4;16069:17;16063:3;16048:19;;16041:46;15840:3;16103:19;;16096:35;16162:3;16147:19;;16140:35;;;;15809:3;15794:19;;15776:405::o;16186:274::-;-1:-1:-1;;;;;16378:32:1;;;;16360:51;;16442:2;16427:18;;16420:34;16348:2;16333:18;;16315:145::o;16465:375::-;-1:-1:-1;;;;;16723:15:1;;;16705:34;;16770:2;16755:18;;16748:34;;;;16818:15;;;16813:2;16798:18;;16791:43;16655:2;16640:18;;16622:218::o;16845:1001::-;17157:3;17170:22;;;17142:19;;17227:22;;;17109:4;17307:6;17280:3;17265:19;;17109:4;17341:304;17355:6;17352:1;17349:13;17341:304;;;17430:6;17417:20;17450:31;17475:5;17450:31;:::i;:::-;-1:-1:-1;;;;;17506:31:1;17494:44;;17561:4;17620:15;;;;17585:12;;;;17534:1;17370:9;17341:304;;;-1:-1:-1;17696:4:1;17681:20;;17674:36;;;;-1:-1:-1;;17741:2:1;17726:18;;17719:34;;;;17784:2;17769:18;;17762:34;;;;17827:3;17812:19;;;17805:35;17662:3;17118:728;-1:-1:-1;;17118:728:1:o;17851:948::-;18153:3;18166:22;;;18237:13;;18138:19;;;18259:22;;;18105:4;;18335;;18312:3;18297:19;;;18362:15;;;18105:4;18405:195;18419:6;18416:1;18413:13;18405:195;;;18484:13;;-1:-1:-1;;;;;18480:39:1;18468:52;;18540:12;;;;18575:15;;;;18516:1;18434:9;18405:195;;;-1:-1:-1;;;18636:18:1;;;18629:34;;;;-1:-1:-1;18694:2:1;18679:18;;18672:34;;;;18737:2;18722:18;;18715:34;;;;18780:3;18765:19;;;18758:35;18617:3;18114:685;-1:-1:-1;18114:685:1:o;18804:632::-;18975:2;19027:21;;;19097:13;;19000:18;;;19119:22;;;18946:4;;18975:2;19198:15;;;;19172:2;19157:18;;;18946:4;19241:169;19255:6;19252:1;19249:13;19241:169;;;19316:13;;19304:26;;19385:15;;;;19350:12;;;;19277:1;19270:9;19241:169;;;-1:-1:-1;19427:3:1;;18955:481;-1:-1:-1;;;;;;18955:481:1:o;19633:406::-;19835:2;19817:21;;;19874:2;19854:18;;;19847:30;-1:-1:-1;;;;;;;;;;;19908:2:1;19893:18;;19886:62;-1:-1:-1;;;19979:2:1;19964:18;;19957:40;20029:3;20014:19;;19807:232::o;20394:406::-;20596:2;20578:21;;;20635:2;20615:18;;;20608:30;20674:34;20669:2;20654:18;;20647:62;-1:-1:-1;;;20740:2:1;20725:18;;20718:40;20790:3;20775:19;;20568:232::o;23866:350::-;24068:2;24050:21;;;24107:2;24087:18;;;24080:30;24146:28;24141:2;24126:18;;24119:56;24207:2;24192:18;;24040:176::o;25760:348::-;25962:2;25944:21;;;26001:2;25981:18;;;25974:30;26040:26;26035:2;26020:18;;26013:54;26099:2;26084:18;;25934:174::o;28120:624::-;28351:6;28340:9;28333:25;28394:6;28389:2;28378:9;28374:18;28367:34;28466:1;28462;28457:3;28453:11;28449:19;28441:6;28437:32;28432:2;28421:9;28417:18;28410:60;28506:3;28501:2;28490:9;28486:18;28479:31;28314:4;28539:6;28533:13;28583:6;28577:3;28566:9;28562:19;28555:35;28599:67;28659:6;28653:3;28642:9;28638:19;28633:2;28625:6;28621:15;28599:67;:::i;:::-;28727:2;28706:15;-1:-1:-1;;28702:29:1;28687:45;;;;28734:3;28683:55;;28323:421;-1:-1:-1;;;;;28323:421:1:o;29073:128::-;29113:3;29144:1;29140:6;29137:1;29134:13;29131:2;;;29150:18;;:::i;:::-;-1:-1:-1;29186:9:1;;29121:80::o;29206:217::-;29246:1;29272;29262:2;;29316:10;29311:3;29307:20;29304:1;29297:31;29351:4;29348:1;29341:15;29379:4;29376:1;29369:15;29262:2;-1:-1:-1;29408:9:1;;29252:171::o;29428:168::-;29468:7;29534:1;29530;29526:6;29522:14;29519:1;29516:21;29511:1;29504:9;29497:17;29493:45;29490:2;;;29541:18;;:::i;:::-;-1:-1:-1;29581:9:1;;29480:116::o;29601:125::-;29641:4;29669:1;29666;29663:8;29660:2;;;29674:18;;:::i;:::-;-1:-1:-1;29711:9:1;;29650:76::o;29731:258::-;29803:1;29813:113;29827:6;29824:1;29821:13;29813:113;;;29903:11;;;29897:18;29884:11;;;29877:39;29849:2;29842:10;29813:113;;;29944:6;29941:1;29938:13;29935:2;;;-1:-1:-1;;29979:1:1;29961:16;;29954:27;29784:205::o;29994:136::-;30033:3;30061:5;30051:2;;30070:18;;:::i;:::-;-1:-1:-1;;;30106:18:1;;30041:89::o;30135:135::-;30174:3;-1:-1:-1;;30195:17:1;;30192:2;;;30215:18;;:::i;:::-;-1:-1:-1;30262:1:1;30251:13;;30182:88::o;30275:127::-;30336:10;30331:3;30327:20;30324:1;30317:31;30367:4;30364:1;30357:15;30391:4;30388:1;30381:15;30407:127;30468:10;30463:3;30459:20;30456:1;30449:31;30499:4;30496:1;30489:15;30523:4;30520:1;30513:15;30539:127;30600:10;30595:3;30591:20;30588:1;30581:31;30631:4;30628:1;30621:15;30655:4;30652:1;30645:15;30671:127;30732:10;30727:3;30723:20;30720:1;30713:31;30763:4;30760:1;30753:15;30787:4;30784:1;30777:15;30803:131;-1:-1:-1;;;;;30878:31:1;;30868:42;;30858:2;;30924:1;30921;30914:12;30858:2;30848:86;:::o

Swarm Source

ipfs://73407528f159bfea36d084e49afe223dc0f542434e791cc076c52d87bb5c136a
Block Transaction Difficulty Gas Used Reward
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.