Contract 0xed7d5f38c79115ca12fe6c0041abb22f0a06c300 8

Contract Overview

Mdex: Router
Balance:
0 HT

HT Value:
$0.00

Token:
Txn Hash
Block
From
To
Value [Txn Fee]
0x435b1604deb02404644f4578be3470ca6a6bf6c91522ca0071e975971ff4df57(pending)2021-07-28 8:00:162 secs ago0x0dbe613c88237b4fd155f0866d1d6075c0ef7ba5 IN 0xed7d5f38c79115ca12fe6c0041abb22f0a06c3000 HT(Pending)
0xc31101b28bc19403ae3f517458183cc4f094147e75c77b3648b49c49e5fa37ee(pending)2021-07-28 8:00:162 secs ago0x0dbe613c88237b4fd155f0866d1d6075c0ef7ba5 IN 0xed7d5f38c79115ca12fe6c0041abb22f0a06c3000 HT(Pending)
0x636b74e4378df710cce17ac5c0e4f8daa21b8ea344c94be9415ebc991fb59808(pending)2021-07-28 8:00:162 secs ago0x565c2cc3970a78f69ad2d4f06237757b99ee54c6 IN 0xed7d5f38c79115ca12fe6c0041abb22f0a06c3000 HT(Pending)
0x1125fd137f2d7b40795f9ea401374a208771a95bf4fee1e0551992ce3dc4ece6(pending)2021-07-28 8:00:162 secs ago0xa6ce6f4fdce34460c907811c72ee0589272ed971 IN 0xed7d5f38c79115ca12fe6c0041abb22f0a06c3000.000128763424290195 HT(Pending)
0x919b8838d881c2cd76dfad09de734fc05af02b76fe6015e5db210f7fdb7eb3de(pending)2021-07-28 7:57:422 mins ago0xd02941c35ee65d099273c72f7c7dfeb83fa3446e IN 0xed7d5f38c79115ca12fe6c0041abb22f0a06c3000 HT(Pending)
0xf436f0c39c57f27f241f232693b24887f6c8d6f22e62686acb8d53046fe3ced1(pending)2021-07-28 7:57:422 mins ago0x5d8af959ee8fbcc7af43fba30a65c3fdd3198946 IN 0xed7d5f38c79115ca12fe6c0041abb22f0a06c3000 HT(Pending)
0x4a21edebae5aca770541fa72b81e4a48f70aeae93f2b697141c70a938e629ba6(pending)2021-07-28 7:57:422 mins ago0x13e3427aeb07b2c450e9690aaae30fb350074051 IN 0xed7d5f38c79115ca12fe6c0041abb22f0a06c3000 HT(Pending)
0x8227dda9236c69602dfff3df74d148c5b015b638de2798888e443ad1c81bd9ce(pending)2021-07-28 7:50:449 mins ago0x79fcaca13ffcb87e7ed9046ae861f0b6686a6830 IN 0xed7d5f38c79115ca12fe6c0041abb22f0a06c3000 HT(Pending)
0x99aee01ed80be9b614e83f5f905138bab38396e2f128145137525706e6009c05(pending)2021-07-28 7:50:449 mins ago0xd650f7198e45cb42b01cc4bd4b728e0b54a9c12f IN 0xed7d5f38c79115ca12fe6c0041abb22f0a06c3000 HT(Pending)
0x45e4bafc58bad17f9b39d329e2668f5c447d6b1331357949c8cdacb485c53caf(pending)2021-07-28 7:50:449 mins ago0x98e21027c63b3e609d979581b8bf9d78667b3839 IN 0xed7d5f38c79115ca12fe6c0041abb22f0a06c3000 HT(Pending)
0x1507178a9982c6c72db3a3699e44894500aee66d5223a83852cb683440c32d42(pending)2021-07-28 7:50:449 mins ago0x8fcebcaba7bd2922832aee619e0a8f4418097ba5 IN 0xed7d5f38c79115ca12fe6c0041abb22f0a06c3000 HT(Pending)
0x01d1ce380918c56ce791472819a99de1dcb003e323c88c3cac5a7ee324e5a943(pending)2021-07-28 7:50:449 mins ago0x7826e83cc797fc6355aec4d8b0e111ba7b970118 IN 0xed7d5f38c79115ca12fe6c0041abb22f0a06c3000 HT(Pending)
0xbaeb14d8e83d97652cc0c8ff5df1a8ebc75abbe1e25f47bc2724470d094670a2(pending)2021-07-28 7:50:449 mins ago0x828f5300051a8e1827067c8cf339947c4339e168 IN 0xed7d5f38c79115ca12fe6c0041abb22f0a06c3000.569691981675 HT(Pending)
0xea4ce75e724b94daa991986e3f9754d97ba2db8ad9e62346d63010bfefa644ef(pending)2021-07-28 7:50:449 mins ago0x9d0d958c236f29a0c32d1ecbaf8f2f9abe4fbe0a IN 0xed7d5f38c79115ca12fe6c0041abb22f0a06c3000 HT(Pending)
0x583e3530c9dd02eec2fa0a8ae60f7e1c901b7be18352de9d488415558232385e(pending)2021-07-28 7:50:449 mins ago0x0c6cc7d47877abf97e05a3aff0a57b1cd92ddeeb IN 0xed7d5f38c79115ca12fe6c0041abb22f0a06c3000 HT(Pending)
0x3913acc2d2e8357dabecb180bbc391e44c7192d468ad7ff953112a99e43e8626(pending)2021-07-28 7:50:449 mins ago0x3acd8665ee81abee75a5540d26953bd48cbaad09 IN 0xed7d5f38c79115ca12fe6c0041abb22f0a06c3000 HT(Pending)
0x0391f7ec91f52efdc2a7bbde9e652876f4d59dd91f3cdb347cce32a7d4e648fb(pending)2021-07-28 7:50:449 mins ago0x3acd8665ee81abee75a5540d26953bd48cbaad09 IN 0xed7d5f38c79115ca12fe6c0041abb22f0a06c3000.015963722 HT(Pending)
0x87e136f9542fe770bf843c2d90dac9a484f52068f37d674179b63f9674569c82(pending)2021-07-28 7:50:449 mins ago0xdcd5de4e9360a7519eab6078153abc5021b60a34 IN 0xed7d5f38c79115ca12fe6c0041abb22f0a06c3000 HT(Pending)
0x23967b8bc6083a4fdd560c8078fb8e46e7356fd0efc41930e751a408c65fce3c(pending)2021-07-28 7:50:449 mins ago0x94e8ff2ccf5f4de6bffc88e930b57eb3b988012e IN 0xed7d5f38c79115ca12fe6c0041abb22f0a06c3000 HT(Pending)
0x38c2d818008ad1feea74a40d8efcc595d9f169bc1e879159f464a918ce6d39cd(pending)2021-07-28 7:50:449 mins ago0x0b3b8c6b0d24605be08a1c3016dc85dcc36be7ed IN 0xed7d5f38c79115ca12fe6c0041abb22f0a06c3000 HT(Pending)
0x8e03f8522647371e9645b0464d0f08abe98a5ff13f287e467512666e3c6c77e2(pending)2021-07-28 7:50:449 mins ago0xc59c1a44d1ca7e5840cecec1939dbcb17eb6be71 IN 0xed7d5f38c79115ca12fe6c0041abb22f0a06c3000 HT(Pending)
0x1d1eede719acbbfcda7b425235648c946a743c7df37ce3d5d911ee8ef4def062(pending)2021-07-28 7:50:449 mins ago0x8796eced05c53d66ea0cda7987fce67e35cf900e IN 0xed7d5f38c79115ca12fe6c0041abb22f0a06c3000 HT(Pending)
0xf2c85dd388e50e71479407726711ce5bdc142582a062ba68bb17bfd20d16a187(pending)2021-07-28 7:50:449 mins ago0x7826e83cc797fc6355aec4d8b0e111ba7b970118 IN 0xed7d5f38c79115ca12fe6c0041abb22f0a06c3000 HT(Pending)
0xbfaabe0e59b6139481af5604926ac113278ea276447f0ed4c4416babe77d1350(pending)2021-07-28 7:50:449 mins ago0x9687e1562dbebce83a91f06906b5d59f9d9af392 IN 0xed7d5f38c79115ca12fe6c0041abb22f0a06c3000 HT(Pending)
0x242928cfb8a3dd2e5c4a33b1506daac14f5c6387b11ee13dc4edb1c60f3815d7(pending)2021-07-28 7:50:449 mins ago0xe317dec9d24dc3d4881488504bb2bbb739a7403f IN 0xed7d5f38c79115ca12fe6c0041abb22f0a06c3000 HT(Pending)
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xa4e7a1057c44a7bd1cce4db9b87d7a564d421e009fbcaf050fce0f4f024517b668551402021-07-28 7:59:4533 secs ago Mdex: Router Huobi: Wrapped Huobi Token0.000125 HT
0x4b29eece3da73edba9e65c937026722b07dde031e10004745d6f7d7b96d08edf68551402021-07-28 7:59:4533 secs ago Mdex: Router Huobi: Wrapped Huobi Token0.00000002 HT
0x9639649acaceb6472c1d326412b93b687e7c3ab78a61b796d858af9b75525de368551392021-07-28 7:59:4236 secs ago Mdex: Router0x237cbc2b3260e0bebe45ef5c440014c1dae153e00.000999999987538693 HT
0x9639649acaceb6472c1d326412b93b687e7c3ab78a61b796d858af9b75525de368551392021-07-28 7:59:4236 secs ago Mdex: Router Huobi: Wrapped Huobi Token0.999999987538693508 HT
0xa153fd7201131753cd7d2b1e7b9ac7bc14dda0440d3daef54e0e83ee8578125e68551392021-07-28 7:59:4236 secs ago Mdex: Router Huobi: Wrapped Huobi Token0.0000001 HT
0x712aa3be57cfabcac093bee9113bd2526267dfbb7d272f6e8c84678c0311e94568551392021-07-28 7:59:4236 secs ago Mdex: Router Huobi: Wrapped Huobi Token0.0000001 HT
0x984e7b1d6d58c1f6136b5fed7dcc857beb72c9412edf86b9ad4bd05d1ba7a92268551392021-07-28 7:59:4236 secs ago Mdex: Router Huobi: Wrapped Huobi Token0.011351997054428894 HT
0xc27feeb88f51c43865b1ef599081311f4dca6cac591c8d4fd8b443a6a671fe8168551392021-07-28 7:59:4236 secs ago Mdex: Router Huobi: Wrapped Huobi Token0.000170151615845752 HT
0x28e9a175d754756afd83bccf8f943d44a68e7e43b0ea53f1ac924861da5a152b68551372021-07-28 7:59:3642 secs ago Mdex: Router Huobi: Wrapped Huobi Token0.00000001 HT
0x980fdc2f2250241e89c33e1bfa5caa283a5039530fff1c83feb6caf3ba0b9db868551372021-07-28 7:59:3642 secs ago Mdex: Router Huobi: Wrapped Huobi Token0.011733298890606963 HT
0xc4234e3bc8e07e2b2e8c2895eda84828800d879bed15f23eb22b4878b44479a068551362021-07-28 7:59:3345 secs ago Mdex: Router Huobi: Wrapped Huobi Token1 HT
0x048c1b784e018b200e694d1615956cbcc2c9766b3ca7d98586db0df44e6836e268551362021-07-28 7:59:3345 secs ago Mdex: Router Huobi: Wrapped Huobi Token0.00000001 HT
0x27a57f1ba5c8c35d50fddd021c33fdd10a69c9ebb93de29ef3ec632eeb38c1b668551362021-07-28 7:59:3345 secs ago Mdex: Router Huobi: Wrapped Huobi Token0.011504051876856556 HT
0x365defe201325d74b28b313d288c75d7ab1d2742d228c541c788ee4e3e6c922d68551362021-07-28 7:59:3345 secs ago Mdex: Router Huobi: Wrapped Huobi Token0.0001 HT
0x2582a6df8ede6ece7677d6589b43c03c8f8714a393fdc570367f290ef37709c968551362021-07-28 7:59:3345 secs ago Mdex: Router Huobi: Wrapped Huobi Token0.00012876337762353 HT
0xc7b0cd462fcac40a6b690f8361207459ab8caf05fc0457bb4a4d83851e2d7cd268551362021-07-28 7:59:3345 secs ago Mdex: Router Huobi: Wrapped Huobi Token0.000173192751803445 HT
0x451bbde78f283513455388751b0155a1e5eeba8cd505d005e8135eadb6c3262068551352021-07-28 7:59:3048 secs ago Mdex: Router Huobi: Wrapped Huobi Token1 HT
0x1a7c4aa703f1ad862bd3675cb7863497f60d0c9fba1e77188ec48c283dc1f78a68551352021-07-28 7:59:3048 secs ago Mdex: Router Huobi: Wrapped Huobi Token0.00000001 HT
0x4e9c72b07d076938344c9d5379d58fb9ac3f8f7794b88dca7a2775b14838d6d168551352021-07-28 7:59:3048 secs ago Mdex: Router Huobi: Wrapped Huobi Token0.000343975325357664 HT
0xb813a6245b139cf8955ed467474f758db37b1bf0d346737675a073c6437f0ba468551352021-07-28 7:59:3048 secs ago Mdex: Router Huobi: Wrapped Huobi Token0.000170151599401308 HT
0x27739ef0943a6eb6200ac506f5a4ddcc901060075dbe2be39f348ca35aa3c61e68551342021-07-28 7:59:2751 secs ago Mdex: Router Huobi: Wrapped Huobi Token0.011351993373758117 HT
0x17977213748b5e496ada87d87d12f0bbc8045d4ab8f01618bde315f428ec028268551342021-07-28 7:59:2751 secs ago Mdex: Router Huobi: Wrapped Huobi Token0.00002 HT
0xdbd0a4662cefde3cb3d8f9decd27af73bc841bfdae94380adedd666c5366a86868551332021-07-28 7:59:2454 secs ago Mdex: Router Huobi: Wrapped Huobi Token0.5 HT
0x742a6bd42e7b64852c1440933c2c7dd67265d2f72fbb5c3be4b47d6e4dfe410b68551332021-07-28 7:59:2454 secs ago Mdex: Router Huobi: Wrapped Huobi Token0.000000029999999999 HT
0x29133e401346d07f46ef9f0059b91142d3355330753b8740d8f67ba38acb957568551322021-07-28 7:59:2157 secs ago Mdex: Router Huobi: Wrapped Huobi Token0.00000001 HT
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MdexRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at hecoinfo.com on 2021-02-04
*/

pragma solidity =0.6.6;

interface IMdexFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function feeToRate() external view returns (uint256);

    function initCodeHash() external view returns (bytes32);

    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 setFeeToRate(uint256) external;

    function setInitCodeHash(bytes32) external;

    function sortTokens(address tokenA, address tokenB) external pure returns (address token0, address token1);

    function pairFor(address tokenA, address tokenB) external view returns (address pair);

    function getReserves(address tokenA, address tokenB) external view returns (uint256 reserveA, uint256 reserveB);

    function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) external pure returns (uint256 amountB);

    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut) external view returns (uint256 amountOut);

    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut) external view returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts);
}

interface IMdexPair {
    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 price(address token, uint256 baseDecimal) external view returns (uint256);

    function initialize(address, address) external;
}

interface IMdexRouter {
    function factory() external pure returns (address);

    function WHT() external pure returns (address);

    function swapMining() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);

    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);

    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);

    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);

    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);

    function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) external view returns (uint256 amountB);

    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut) external view returns (uint256 amountOut);

    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut) external view returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts);

    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface ISwapMining {
    function swap(address account, address input, address output, uint256 amount) external returns (bool);
}

contract Ownable {
    address private _owner;

    constructor () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    function isOwner(address account) public view returns (bool) {
        return account == _owner;
    }

    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }


    modifier onlyOwner() {
        require(isOwner(msg.sender), "Ownable: caller is not the owner");
        _;
    }

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
}

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

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);

    function totalSupply() external view returns (uint);

    function balanceOf(address owner) external view returns (uint);

    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);

    function transfer(address to, uint value) external returns (bool);

    function transferFrom(address from, address to, uint value) external returns (bool);
}

interface IWHT {
    function deposit() external payable;

    function transfer(address to, uint value) external returns (bool);

    function withdraw(uint) external;
}

contract MdexRouter is IMdexRouter, Ownable {
    using SafeMath for uint256;

    address public immutable override factory;
    address public immutable override WHT;
    address public override swapMining;

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

    constructor(address _factory, address _WHT) public {
        factory = _factory;
        WHT = _WHT;
    }

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

    function pairFor(address tokenA, address tokenB) public view returns (address pair){
        pair = IMdexFactory(factory).pairFor(tokenA, tokenB);
    }

    function setSwapMining(address _swapMininng) public onlyOwner {
        swapMining = _swapMininng;
    }

    // **** ADD LIQUIDITY ****
    function _addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin
    ) internal virtual returns (uint amountA, uint amountB) {
        // create the pair if it doesn't exist yet
        if (IMdexFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            IMdexFactory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = IMdexFactory(factory).getReserves(tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = IMdexFactory(factory).quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'MdexRouter: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = IMdexFactory(factory).quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'MdexRouter: INSUFFICIENT_A_AMOUNT');
                (amountA, amountB) = (amountAOptimal, amountBDesired);
            }
        }
    }

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) {
        (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin);
        address pair = pairFor(tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IMdexPair(pair).mint(to);
    }

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) {
        (amountToken, amountETH) = _addLiquidity(
            token,
            WHT,
            amountTokenDesired,
            msg.value,
            amountTokenMin,
            amountETHMin
        );
        address pair = pairFor(token, WHT);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWHT(WHT).deposit{value : amountETH}();
        assert(IWHT(WHT).transfer(pair, amountETH));
        liquidity = IMdexPair(pair).mint(to);
        // refund dust eth, if any
        if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH);
    }

    // **** REMOVE LIQUIDITY ****
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountA, uint amountB) {
        address pair = pairFor(tokenA, tokenB);
        IMdexPair(pair).transferFrom(msg.sender, pair, liquidity);
        // send liquidity to pair
        (uint amount0, uint amount1) = IMdexPair(pair).burn(to);
        (address token0,) = IMdexFactory(factory).sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'MdexRouter: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'MdexRouter: INSUFFICIENT_B_AMOUNT');
    }

    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountToken, uint amountETH) {
        (amountToken, amountETH) = removeLiquidity(
            token,
            WHT,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, amountToken);
        IWHT(WHT).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountA, uint amountB) {
        address pair = pairFor(tokenA, tokenB);
        uint value = approveMax ? uint(- 1) : liquidity;
        IMdexPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline);
    }

    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountToken, uint amountETH) {
        address pair = pairFor(token, WHT);
        uint value = approveMax ? uint(- 1) : liquidity;
        IMdexPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline);
    }

    // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) ****
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountETH) {
        (, amountETH) = removeLiquidity(
            token,
            WHT,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this)));
        IWHT(WHT).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountETH) {
        address pair = pairFor(token, WHT);
        uint value = approveMax ? uint(- 1) : liquidity;
        IMdexPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        amountETH = removeLiquidityETHSupportingFeeOnTransferTokens(
            token, liquidity, amountTokenMin, amountETHMin, to, deadline
        );
    }

    // **** SWAP ****
    // requires the initial amount to have already been sent to the first pair
    function _swap(uint[] memory amounts, address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = IMdexFactory(factory).sortTokens(input, output);
            uint amountOut = amounts[i + 1];
            if (swapMining != address(0)) {
                ISwapMining(swapMining).swap(msg.sender, input, output, amountOut);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0));
            address to = i < path.length - 2 ? pairFor(output, path[i + 2]) : _to;
            IMdexPair(pairFor(input, output)).swap(
                amount0Out, amount1Out, to, new bytes(0)
            );
        }
    }

    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint[] memory amounts) {
        amounts = IMdexFactory(factory).getAmountsOut(amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'MdexRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, pairFor(path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }

    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint[] memory amounts) {
        amounts = IMdexFactory(factory).getAmountsIn(amountOut, path);
        require(amounts[0] <= amountInMax, 'MdexRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, pairFor(path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }

    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    virtual
    override
    payable
    ensure(deadline)
    returns (uint[] memory amounts)
    {
        require(path[0] == WHT, 'MdexRouter: INVALID_PATH');
        amounts = IMdexFactory(factory).getAmountsOut(msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'MdexRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWHT(WHT).deposit{value : amounts[0]}();
        assert(IWHT(WHT).transfer(pairFor(path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
    }

    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    virtual
    override
    ensure(deadline)
    returns (uint[] memory amounts)
    {
        require(path[path.length - 1] == WHT, 'MdexRouter: INVALID_PATH');
        amounts = IMdexFactory(factory).getAmountsIn(amountOut, path);
        require(amounts[0] <= amountInMax, 'MdexRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, pairFor(path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWHT(WHT).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }

    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    virtual
    override
    ensure(deadline)
    returns (uint[] memory amounts)
    {
        require(path[path.length - 1] == WHT, 'MdexRouter: INVALID_PATH');
        amounts = IMdexFactory(factory).getAmountsOut(amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'MdexRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, pairFor(path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWHT(WHT).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }

    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    virtual
    override
    payable
    ensure(deadline)
    returns (uint[] memory amounts)
    {
        require(path[0] == WHT, 'MdexRouter: INVALID_PATH');
        amounts = IMdexFactory(factory).getAmountsIn(amountOut, path);
        require(amounts[0] <= msg.value, 'MdexRouter: EXCESSIVE_INPUT_AMOUNT');
        IWHT(WHT).deposit{value : amounts[0]}();
        assert(IWHT(WHT).transfer(pairFor(path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
        // refund dust eth, if any
        if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]);
    }

    // **** SWAP (supporting fee-on-transfer tokens) ****
    // requires the initial amount to have already been sent to the first pair
    function _swapSupportingFeeOnTransferTokens(address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = IMdexFactory(factory).sortTokens(input, output);
            IMdexPair pair = IMdexPair(pairFor(input, output));
            uint amountInput;
            uint amountOutput;
            {// scope to avoid stack too deep errors
                (uint reserve0, uint reserve1,) = pair.getReserves();
                (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
                amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput);
                amountOutput = IMdexFactory(factory).getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            if (swapMining != address(0)) {
                ISwapMining(swapMining).swap(msg.sender, input, output, amountOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? pairFor(output, path[i + 2]) : _to;
            pair.swap(amount0Out, amount1Out, to, new bytes(0));
        }
    }

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) {
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, pairFor(path[0], path[1]), amountIn
        );
        uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'MdexRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
    external
    virtual
    override
    payable
    ensure(deadline)
    {
        require(path[0] == WHT, 'MdexRouter: INVALID_PATH');
        uint amountIn = msg.value;
        IWHT(WHT).deposit{value : amountIn}();
        assert(IWHT(WHT).transfer(pairFor(path[0], path[1]), amountIn));
        uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'MdexRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
    external
    virtual
    override
    ensure(deadline)
    {
        require(path[path.length - 1] == WHT, 'MdexRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, pairFor(path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WHT).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'MdexRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWHT(WHT).withdraw(amountOut);
        TransferHelper.safeTransferETH(to, amountOut);
    }

    // **** LIBRARY FUNCTIONS ****
    function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) public view override returns (uint256 amountB) {
        return IMdexFactory(factory).quote(amountA, reserveA, reserveB);
    }

    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut) public view override returns (uint256 amountOut){
        return IMdexFactory(factory).getAmountOut(amountIn, reserveIn, reserveOut);
    }

    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut) public view override returns (uint256 amountIn){
        return IMdexFactory(factory).getAmountIn(amountOut, reserveIn, reserveOut);
    }

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

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

}

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

library SafeMath {
    uint256 constant WAD = 10 ** 18;
    uint256 constant RAY = 10 ** 27;

    function wad() public pure returns (uint256) {
        return WAD;
    }

    function ray() public pure returns (uint256) {
        return RAY;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a <= b ? a : b;
    }

    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    function sqrt(uint256 a) internal pure returns (uint256 b) {
        if (a > 3) {
            b = a;
            uint256 x = a / 2 + 1;
            while (x < b) {
                b = x;
                x = (a / x + x) / 2;
            }
        } else if (a != 0) {
            b = 1;
        }
    }

    function wmul(uint256 a, uint256 b) internal pure returns (uint256) {
        return mul(a, b) / WAD;
    }

    function wmulRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, b), WAD / 2) / WAD;
    }

    function rmul(uint256 a, uint256 b) internal pure returns (uint256) {
        return mul(a, b) / RAY;
    }

    function rmulRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, b), RAY / 2) / RAY;
    }

    function wdiv(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(mul(a, WAD), b);
    }

    function wdivRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, WAD), b / 2) / b;
    }

    function rdiv(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(mul(a, RAY), b);
    }

    function rdivRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, RAY), b / 2) / b;
    }

    function wpow(uint256 x, uint256 n) internal pure returns (uint256) {
        uint256 result = WAD;
        while (n > 0) {
            if (n % 2 != 0) {
                result = wmul(result, x);
            }
            x = wmul(x, x);
            n /= 2;
        }
        return result;
    }

    function rpow(uint256 x, uint256 n) internal pure returns (uint256) {
        uint256 result = RAY;
        while (n > 0) {
            if (n % 2 != 0) {
                result = rmul(result, x);
            }
            x = rmul(x, x);
            n /= 2;
        }
        return result;
    }
}


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

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

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

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

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WHT","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"WHT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"view","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":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"pairFor","outputs":[{"internalType":"address","name":"pair","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":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_swapMininng","type":"address"}],"name":"setSwapMining","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapMining","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405234801561001057600080fd5b50604051620050d1380380620050d18339818101604052604081101561003557600080fd5b508051602090910151600080546001600160a01b03191633178082556040516001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c614f1c620001b5600039806101ec5280610e985280610ed3528061105f528061136052806119265280611bfa5280611f5452806120685280612162528061221852806122e6528061253152806125b95280612abf5280612b6e5280612c3a5280612ccf5280612d4352806132f152806135a952806135de5280613612528061368652806138265280613a6d5280613af5525080610f695280611115528061145152806116fa52806119dc52806123a252806126d952806127be52806129845280612a0152806130d1528061323f528061328b52806138e1528061404752806143a552806145795280614894528061494252806149e95280614a855280614b7a5250614f1c6000f3fe6080604052600436106101dc5760003560e01c80637ff36ab511610102578063baa2abde11610095578063e8e3370011610064578063e8e3370014610cce578063f2fde38b14610d4e578063f305d71914610d81578063fb3bdb4114610dc757610215565b8063baa2abde14610b34578063c45a015514610b91578063d06ca61f14610ba6578063ded9382a14610c5b57610215565b806396ed28f9116100d157806396ed28f9146109ec578063ad615dec14610a27578063af2979eb14610a5d578063b6f9de9514610ab057610215565b80637ff36ab51461088757806385f8c2591461090b5780638803dbee146109415780638da5cb5b146109d757610215565b80634a25d94a1161017a5780635c11d795116101495780635c11d795146107315780635cb48592146107c7578063715018a6146107dc578063791ac947146107f157610215565b80634a25d94a146105c45780634e5eda111461065a5780634f8871831461068b5780635b0d5984146106be57610215565b80631f00ca74116101b65780631f00ca74146103b45780632195995c146104695780632f54bf6e146104e757806338ed17391461052e57610215565b806302751cec1461021a578063054d50d41461028657806318cbafe5146102ce57610215565b3661021557336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461021357fe5b005b600080fd5b34801561022657600080fd5b5061026d600480360360c081101561023d57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610e4b565b6040805192835260208301919091528051918290030190f35b34801561029257600080fd5b506102bc600480360360608110156102a957600080fd5b5080359060208101359060400135610f65565b60408051918252519081900360200190f35b3480156102da57600080fd5b50610364600480360360a08110156102f157600080fd5b813591602081013591810190606081016040820135600160201b81111561031757600080fd5b82018360208201111561032957600080fd5b803590602001918460208302840111600160201b8311171561034a57600080fd5b91935091506001600160a01b03813516906020013561100f565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103a0578181015183820152602001610388565b505050509050019250505060405180910390f35b3480156103c057600080fd5b50610364600480360360408110156103d757600080fd5b81359190810190604081016020820135600160201b8111156103f857600080fd5b82018360208201111561040a57600080fd5b803590602001918460208302840111600160201b8311171561042b57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061141f945050505050565b34801561047557600080fd5b5061026d600480360361016081101561048d57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561159a565b3480156104f357600080fd5b5061051a6004803603602081101561050a57600080fd5b50356001600160a01b0316611673565b604080519115158252519081900360200190f35b34801561053a57600080fd5b50610364600480360360a081101561055157600080fd5b813591602081013591810190606081016040820135600160201b81111561057757600080fd5b82018360208201111561058957600080fd5b803590602001918460208302840111600160201b831117156105aa57600080fd5b91935091506001600160a01b038135169060200135611687565b3480156105d057600080fd5b50610364600480360360a08110156105e757600080fd5b813591602081013591810190606081016040820135600160201b81111561060d57600080fd5b82018360208201111561061f57600080fd5b803590602001918460208302840111600160201b8311171561064057600080fd5b91935091506001600160a01b0381351690602001356118d6565b34801561066657600080fd5b5061066f611b66565b604080516001600160a01b039092168252519081900360200190f35b34801561069757600080fd5b50610213600480360360208110156106ae57600080fd5b50356001600160a01b0316611b75565b3480156106ca57600080fd5b506102bc60048036036101408110156106e257600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611bf1565b34801561073d57600080fd5b50610213600480360360a081101561075457600080fd5b813591602081013591810190606081016040820135600160201b81111561077a57600080fd5b82018360208201111561078c57600080fd5b803590602001918460208302840111600160201b831117156107ad57600080fd5b91935091506001600160a01b038135169060200135611cde565b3480156107d357600080fd5b5061066f611f52565b3480156107e857600080fd5b50610213611f76565b3480156107fd57600080fd5b50610213600480360360a081101561081457600080fd5b813591602081013591810190606081016040820135600160201b81111561083a57600080fd5b82018360208201111561084c57600080fd5b803590602001918460208302840111600160201b8311171561086d57600080fd5b91935091506001600160a01b03813516906020013561201a565b6103646004803603608081101561089d57600080fd5b81359190810190604081016020820135600160201b8111156108be57600080fd5b8201836020820111156108d057600080fd5b803590602001918460208302840111600160201b831117156108f157600080fd5b91935091506001600160a01b03813516906020013561229e565b34801561091757600080fd5b506102bc6004803603606081101561092e57600080fd5b50803590602081013590604001356126d5565b34801561094d57600080fd5b50610364600480360360a081101561096457600080fd5b813591602081013591810190606081016040820135600160201b81111561098a57600080fd5b82018360208201111561099c57600080fd5b803590602001918460208302840111600160201b831117156109bd57600080fd5b91935091506001600160a01b03813516906020013561274b565b3480156109e357600080fd5b5061066f612948565b3480156109f857600080fd5b5061066f60048036036040811015610a0f57600080fd5b506001600160a01b0381358116916020013516612957565b348015610a3357600080fd5b506102bc60048036036060811015610a4a57600080fd5b50803590602081013590604001356129fd565b348015610a6957600080fd5b506102bc600480360360c0811015610a8057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612a73565b61021360048036036080811015610ac657600080fd5b81359190810190604081016020820135600160201b811115610ae757600080fd5b820183602082011115610af957600080fd5b803590602001918460208302840111600160201b83111715610b1a57600080fd5b91935091506001600160a01b038135169060200135612bf4565b348015610b4057600080fd5b5061026d600480360360e0811015610b5757600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612f5f565b348015610b9d57600080fd5b5061066f61323d565b348015610bb257600080fd5b5061036460048036036040811015610bc957600080fd5b81359190810190604081016020820135600160201b811115610bea57600080fd5b820183602082011115610bfc57600080fd5b803590602001918460208302840111600160201b83111715610c1d57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613261945050505050565b348015610c6757600080fd5b5061026d6004803603610140811015610c7f57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356132e6565b348015610cda57600080fd5b50610d306004803603610100811015610cf257600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e001356133d9565b60408051938452602084019290925282820152519081900360600190f35b348015610d5a57600080fd5b5061021360048036036020811015610d7157600080fd5b50356001600160a01b03166134f4565b610d30600480360360c0811015610d9757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561355a565b61036460048036036080811015610ddd57600080fd5b81359190810190604081016020820135600160201b811115610dfe57600080fd5b820183602082011115610e1057600080fd5b803590602001918460208302840111600160201b83111715610e3157600080fd5b91935091506001600160a01b0381351690602001356137de565b6000808242811015610e92576040805162461bcd60e51b81526020600482015260136024820152600080516020614ea3833981519152604482015290519081900360640190fd5b610ec1897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612f5f565b9093509150610ed1898685613c43565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f3757600080fd5b505af1158015610f4b573d6000803e3d6000fd5b50505050610f598583613dad565b50965096945050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663054d50d48585856040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015610fdb57600080fd5b505afa158015610fef573d6000803e3d6000fd5b505050506040513d602081101561100557600080fd5b5051949350505050565b60608142811015611055576040805162461bcd60e51b81526020600482015260136024820152600080516020614ea3833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061108f57fe5b905060200201356001600160a01b03166001600160a01b0316146110e8576040805162461bcd60e51b81526020600482015260186024820152600080516020614e1d833981519152604482015290519081900360640190fd5b6040805163d06ca61f60e01b8152600481018a815260248201928352604482018890526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263d06ca61f928c928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b15801561118357600080fd5b505afa158015611197573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156111c057600080fd5b8101908080516040519392919084600160201b8211156111df57600080fd5b9083019060208201858111156111f457600080fd5b82518660208202830111600160201b8211171561121057600080fd5b82525081516020918201928201910280838360005b8381101561123d578181015183820152602001611225565b505050509050016040525050509150868260018451038151811061125d57fe5b602002602001015110156112a25760405162461bcd60e51b8152600401808060200182810382526026815260200180614dd66026913960400191505060405180910390fd5b61131f868660008181106112b257fe5b905060200201356001600160a01b031633611305898960008181106112d357fe5b905060200201356001600160a01b03168a8a60018181106112f057fe5b905060200201356001600160a01b0316612957565b8560008151811061131257fe5b6020026020010151613ea5565b61135e82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614002915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061139d57fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156113db57600080fd5b505af11580156113ef573d6000803e3d6000fd5b50505050611414848360018551038151811061140757fe5b6020026020010151613dad565b509695505050505050565b604080516307c0329d60e21b815260048101848152602482019283528351604483015283516060936001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693631f00ca7493889388939192606401906020808601910280838360005b838110156114a757818101518382015260200161148f565b50505050905001935050505060006040518083038186803b1580156114cb57600080fd5b505afa1580156114df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561150857600080fd5b8101908080516040519392919084600160201b82111561152757600080fd5b90830190602082018581111561153c57600080fd5b82518660208202830111600160201b8211171561155857600080fd5b82525081516020918201928201910280838360005b8381101561158557818101518382015260200161156d565b50505050905001604052505050905092915050565b60008060006115a98e8e612957565b90506000876115b8578c6115bc565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561163257600080fd5b505af1158015611646573d6000803e3d6000fd5b505050506116598f8f8f8f8f8f8f612f5f565b809450819550505050509b509b9950505050505050505050565b6000546001600160a01b0390811691161490565b606081428110156116cd576040805162461bcd60e51b81526020600482015260136024820152600080516020614ea3833981519152604482015290519081900360640190fd5b6040805163d06ca61f60e01b8152600481018a815260248201928352604482018890526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263d06ca61f928c928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b15801561176857600080fd5b505afa15801561177c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156117a557600080fd5b8101908080516040519392919084600160201b8211156117c457600080fd5b9083019060208201858111156117d957600080fd5b82518660208202830111600160201b821117156117f557600080fd5b82525081516020918201928201910280838360005b8381101561182257818101518382015260200161180a565b505050509050016040525050509150868260018451038151811061184257fe5b602002602001015110156118875760405162461bcd60e51b8152600401808060200182810382526026815260200180614dd66026913960400191505060405180910390fd5b611897868660008181106112b257fe5b61141482878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614002915050565b6060814281101561191c576040805162461bcd60e51b81526020600482015260136024820152600080516020614ea3833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061195657fe5b905060200201356001600160a01b03166001600160a01b0316146119af576040805162461bcd60e51b81526020600482015260186024820152600080516020614e1d833981519152604482015290519081900360640190fd5b604080516307c0329d60e21b8152600481018a815260248201928352604482018890526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692631f00ca74928c928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b158015611a4a57600080fd5b505afa158015611a5e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611a8757600080fd5b8101908080516040519392919084600160201b821115611aa657600080fd5b908301906020820185811115611abb57600080fd5b82518660208202830111600160201b82111715611ad757600080fd5b82525081516020918201928201910280838360005b83811015611b04578181015183820152602001611aec565b5050505090500160405250505091508682600081518110611b2157fe5b602002602001015111156112a25760405162461bcd60e51b8152600401808060200182810382526022815260200180614e5e6022913960400191505060405180910390fd5b6001546001600160a01b031681565b611b7e33611673565b611bcf576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080611c1e8c7f0000000000000000000000000000000000000000000000000000000000000000612957565b9050600086611c2d578b611c31565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015611ca757600080fd5b505af1158015611cbb573d6000803e3d6000fd5b50505050611ccd8d8d8d8d8d8d612a73565b9d9c50505050505050505050505050565b8042811015611d22576040805162461bcd60e51b81526020600482015260136024820152600080516020614ea3833981519152604482015290519081900360640190fd5b611d7685856000818110611d3257fe5b905060200201356001600160a01b031633611d7088886000818110611d5357fe5b905060200201356001600160a01b0316898960018181106112f057fe5b8a613ea5565b600085856000198101818110611d8857fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611ded57600080fd5b505afa158015611e01573d6000803e3d6000fd5b505050506040513d6020811015611e1757600080fd5b50516040805160208881028281018201909352888252929350611e59929091899189918291850190849080828437600092019190915250889250614360915050565b86611f0b8288886000198101818110611e6e57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611ed357600080fd5b505afa158015611ee7573d6000803e3d6000fd5b505050506040513d6020811015611efd57600080fd5b50519063ffffffff61481a16565b1015611f485760405162461bcd60e51b8152600401808060200182810382526026815260200180614dd66026913960400191505060405180910390fd5b5050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b611f7f33611673565b611fd0576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b804281101561205e576040805162461bcd60e51b81526020600482015260136024820152600080516020614ea3833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061209857fe5b905060200201356001600160a01b03166001600160a01b0316146120f1576040805162461bcd60e51b81526020600482015260186024820152600080516020614e1d833981519152604482015290519081900360640190fd5b61210185856000818110611d3257fe5b61213f858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614360915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b1580156121a957600080fd5b505afa1580156121bd573d6000803e3d6000fd5b505050506040513d60208110156121d357600080fd5b50519050868110156122165760405162461bcd60e51b8152600401808060200182810382526026815260200180614dd66026913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561227c57600080fd5b505af1158015612290573d6000803e3d6000fd5b50505050611f488482613dad565b606081428110156122e4576040805162461bcd60e51b81526020600482015260136024820152600080516020614ea3833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168686600081811061231b57fe5b905060200201356001600160a01b03166001600160a01b031614612374576040805162461bcd60e51b81526020600482015260186024820152600080516020614e1d833981519152604482015290519081900360640190fd5b6040805163d06ca61f60e01b8152346004820181815260248301938452604483018990526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169363d06ca61f938b928b929091606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b15801561241057600080fd5b505afa158015612424573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561244d57600080fd5b8101908080516040519392919084600160201b82111561246c57600080fd5b90830190602082018581111561248157600080fd5b82518660208202830111600160201b8211171561249d57600080fd5b82525081516020918201928201910280838360005b838110156124ca5781810151838201526020016124b2565b50505050905001604052505050915086826001845103815181106124ea57fe5b6020026020010151101561252f5760405162461bcd60e51b8152600401808060200182810382526026815260200180614dd66026913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db08360008151811061256b57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561259e57600080fd5b505af11580156125b2573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6125f688886000818110611d5357fe5b8460008151811061260357fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561265a57600080fd5b505af115801561266e573d6000803e3d6000fd5b505050506040513d602081101561268457600080fd5b505161268c57fe5b6126cb82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614002915050565b5095945050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166385f8c2598585856040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015610fdb57600080fd5b60608142811015612791576040805162461bcd60e51b81526020600482015260136024820152600080516020614ea3833981519152604482015290519081900360640190fd5b604080516307c0329d60e21b8152600481018a815260248201928352604482018890526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692631f00ca74928c928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b15801561282c57600080fd5b505afa158015612840573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561286957600080fd5b8101908080516040519392919084600160201b82111561288857600080fd5b90830190602082018581111561289d57600080fd5b82518660208202830111600160201b821117156128b957600080fd5b82525081516020918201928201910280838360005b838110156128e65781810151838201526020016128ce565b505050509050016040525050509150868260008151811061290357fe5b602002602001015111156118875760405162461bcd60e51b8152600401808060200182810382526022815260200180614e5e6022913960400191505060405180910390fd5b6000546001600160a01b031690565b604080516396ed28f960e01b81526001600160a01b038481166004830152838116602483015291516000927f000000000000000000000000000000000000000000000000000000000000000016916396ed28f9916044808301926020929190829003018186803b1580156129ca57600080fd5b505afa1580156129de573d6000803e3d6000fd5b505050506040513d60208110156129f457600080fd5b50519392505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad615dec8585856040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015610fdb57600080fd5b60008142811015612ab9576040805162461bcd60e51b81526020600482015260136024820152600080516020614ea3833981519152604482015290519081900360640190fd5b612ae8887f00000000000000000000000000000000000000000000000000000000000000008989893089612f5f565b604080516370a0823160e01b81523060048201529051919450612b6c92508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015612b3b57600080fd5b505afa158015612b4f573d6000803e3d6000fd5b505050506040513d6020811015612b6557600080fd5b5051613c43565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612bd257600080fd5b505af1158015612be6573d6000803e3d6000fd5b505050506114148483613dad565b8042811015612c38576040805162461bcd60e51b81526020600482015260136024820152600080516020614ea3833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031685856000818110612c6f57fe5b905060200201356001600160a01b03166001600160a01b031614612cc8576040805162461bcd60e51b81526020600482015260186024820152600080516020614e1d833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612d2857600080fd5b505af1158015612d3c573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612d8088886000818110611d5357fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612dd057600080fd5b505af1158015612de4573d6000803e3d6000fd5b505050506040513d6020811015612dfa57600080fd5b5051612e0257fe5b600086866000198101818110612e1457fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015612e7957600080fd5b505afa158015612e8d573d6000803e3d6000fd5b505050506040513d6020811015612ea357600080fd5b50516040805160208981028281018201909352898252929350612ee59290918a918a918291850190849080828437600092019190915250899250614360915050565b87611f0b8289896000198101818110612efa57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611ed357600080fd5b6000808242811015612fa6576040805162461bcd60e51b81526020600482015260136024820152600080516020614ea3833981519152604482015290519081900360640190fd5b6000612fb28b8b612957565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561300d57600080fd5b505af1158015613021573d6000803e3d6000fd5b505050506040513d602081101561303757600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561308457600080fd5b505af1158015613098573d6000803e3d6000fd5b505050506040513d60408110156130ae57600080fd5b8101908080519060200190929190805190602001909291905050509150915060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663544caa568f8f6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200192505050604080518083038186803b15801561315e57600080fd5b505afa158015613172573d6000803e3d6000fd5b505050506040513d604081101561318857600080fd5b505190506001600160a01b038e8116908216146131a65781836131a9565b82825b90975095508a8710156131ed5760405162461bcd60e51b8152600401808060200182810382526021815260200180614e3d6021913960400191505060405180910390fd5b8986101561322c5760405162461bcd60e51b8152600401808060200182810382526021815260200180614dfc6021913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6040805163d06ca61f60e01b815260048101848152602482019283528351604483015283516060937f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169363d06ca61f938893889391926064019060208086019102808383600083156114a757818101518382015260200161148f565b60008060006133158d7f0000000000000000000000000000000000000000000000000000000000000000612957565b9050600087613324578c613328565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561339e57600080fd5b505af11580156133b2573d6000803e3d6000fd5b505050506133c48e8e8e8e8e8e610e4b565b909f909e509c50505050505050505050505050565b60008060008342811015613422576040805162461bcd60e51b81526020600482015260136024820152600080516020614ea3833981519152604482015290519081900360640190fd5b6134308c8c8c8c8c8c614863565b909450925060006134418d8d612957565b905061344f8d338388613ea5565b61345b8c338387613ea5565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b1580156134b357600080fd5b505af11580156134c7573d6000803e3d6000fd5b505050506040513d60208110156134dd57600080fd5b5051949d939c50939a509198505050505050505050565b6134fd33611673565b61354e576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61355781614c78565b50565b600080600083428110156135a3576040805162461bcd60e51b81526020600482015260136024820152600080516020614ea3833981519152604482015290519081900360640190fd5b6135d18a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614863565b909450925060006136028b7f0000000000000000000000000000000000000000000000000000000000000000612957565b90506136108b338388613ea5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561366b57600080fd5b505af115801561367f573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561370457600080fd5b505af1158015613718573d6000803e3d6000fd5b505050506040513d602081101561372e57600080fd5b505161373657fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561378e57600080fd5b505af11580156137a2573d6000803e3d6000fd5b505050506040513d60208110156137b857600080fd5b50519250348410156137d0576137d033853403613dad565b505096509650969350505050565b60608142811015613824576040805162461bcd60e51b81526020600482015260136024820152600080516020614ea3833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168686600081811061385b57fe5b905060200201356001600160a01b03166001600160a01b0316146138b4576040805162461bcd60e51b81526020600482015260186024820152600080516020614e1d833981519152604482015290519081900360640190fd5b604080516307c0329d60e21b81526004810189815260248201928352604482018890526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692631f00ca74928b928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b15801561394f57600080fd5b505afa158015613963573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561398c57600080fd5b8101908080516040519392919084600160201b8211156139ab57600080fd5b9083019060208201858111156139c057600080fd5b82518660208202830111600160201b821117156139dc57600080fd5b82525081516020918201928201910280838360005b83811015613a095781810151838201526020016139f1565b5050505090500160405250505091503482600081518110613a2657fe5b60200260200101511115613a6b5760405162461bcd60e51b8152600401808060200182810382526022815260200180614e5e6022913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110613aa757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015613ada57600080fd5b505af1158015613aee573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb613b3288886000818110611d5357fe5b84600081518110613b3f57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613b9657600080fd5b505af1158015613baa573d6000803e3d6000fd5b505050506040513d6020811015613bc057600080fd5b5051613bc857fe5b613c0782878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614002915050565b81600081518110613c1457fe5b60200260200101513411156126cb576126cb3383600081518110613c3457fe5b60200260200101513403613dad565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310613cc05780518252601f199092019160209182019101613ca1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613d22576040519150601f19603f3d011682016040523d82523d6000602084013e613d27565b606091505b5091509150818015613d55575080511580613d555750808060200190516020811015613d5257600080fd5b50515b613da6576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310613df95780518252601f199092019160209182019101613dda565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613e5b576040519150601f19603f3d011682016040523d82523d6000602084013e613e60565b606091505b5050905080613ea05760405162461bcd60e51b8152600401808060200182810382526023815260200180614e806023913960400191505060405180910390fd5b505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b60208310613f2a5780518252601f199092019160209182019101613f0b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613f8c576040519150601f19603f3d011682016040523d82523d6000602084013e613f91565b606091505b5091509150818015613fbf575080511580613fbf5750808060200190516020811015613fbc57600080fd5b50515b613ffa5760405162461bcd60e51b8152600401808060200182810382526024815260200180614ec36024913960400191505060405180910390fd5b505050505050565b60005b600183510381101561435a5760008084838151811061402057fe5b602002602001015185846001018151811061403757fe5b60200260200101519150915060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663544caa5684846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200192505050604080518083038186803b1580156140d457600080fd5b505afa1580156140e8573d6000803e3d6000fd5b505050506040513d60408110156140fe57600080fd5b5051875190915060009088906001870190811061411757fe5b60209081029190910101516001549091506001600160a01b0316156141c7576001546040805163152cf14360e31b81523360048201526001600160a01b0387811660248301528681166044830152606482018590529151919092169163a9678a189160848083019260209291908290030181600087803b15801561419a57600080fd5b505af11580156141ae573d6000803e3d6000fd5b505050506040513d60208110156141c457600080fd5b50505b600080836001600160a01b0316866001600160a01b0316146141eb578260006141ef565b6000835b91509150600060028a510388106142065788614226565b614226868b8a6002018151811061421957fe5b6020026020010151612957565b90506142328787612957565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f19166020018201604052801561426f576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156142e05781810151838201526020016142c8565b50505050905090810190601f16801561430d5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561432f57600080fd5b505af1158015614343573d6000803e3d6000fd5b505060019099019850614005975050505050505050565b50505050565b60005b6001835103811015613ea05760008084838151811061437e57fe5b602002602001015185846001018151811061439557fe5b60200260200101519150915060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663544caa5684846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200192505050604080518083038186803b15801561443257600080fd5b505afa158015614446573d6000803e3d6000fd5b505050506040513d604081101561445c57600080fd5b50519050600061446c8484612957565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156144ad57600080fd5b505afa1580156144c1573d6000803e3d6000fd5b505050506040513d60608110156144d757600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a811690891614614514578284614517565b83835b91509150614575828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611ed357600080fd5b95507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663054d50d48784846040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b1580156145eb57600080fd5b505afa1580156145ff573d6000803e3d6000fd5b505050506040513d602081101561461557600080fd5b50516001549095506001600160a01b03161593506146c292505050576001546040805163152cf14360e31b81523360048201526001600160a01b0389811660248301528881166044830152606482018590529151919092169163a9678a189160848083019260209291908290030181600087803b15801561469557600080fd5b505af11580156146a9573d6000803e3d6000fd5b505050506040513d60208110156146bf57600080fd5b50505b600080856001600160a01b0316886001600160a01b0316146146e6578260006146ea565b6000835b91509150600060028c51038a10614701578a614714565b614714888d8c6002018151811061421957fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b8381101561479e578181015183820152602001614786565b50505050905090810190601f1680156147cb5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b50506001909b019a506143639950505050505050505050565b600061485c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614d18565b9392505050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b1580156148dd57600080fd5b505afa1580156148f1573d6000803e3d6000fd5b505050506040513d602081101561490757600080fd5b50516001600160a01b031614156149ba57604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561498d57600080fd5b505af11580156149a1573d6000803e3d6000fd5b505050506040513d60208110156149b757600080fd5b50505b6040805163354aedbd60e21b81526001600160a01b038a811660048301528981166024830152825160009384937f00000000000000000000000000000000000000000000000000000000000000009093169263d52bb6f49260448083019392829003018186803b158015614a2d57600080fd5b505afa158015614a41573d6000803e3d6000fd5b505050506040513d6040811015614a5757600080fd5b508051602090910151909250905081158015614a71575080155b15614a8157879350869250614c6b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad615dec8a85856040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015614af757600080fd5b505afa158015614b0b573d6000803e3d6000fd5b505050506040513d6020811015614b2157600080fd5b50519050878111614b765785811015614b6b5760405162461bcd60e51b8152600401808060200182810382526021815260200180614dfc6021913960400191505060405180910390fd5b889450925082614c69565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad615dec8a85876040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015614bec57600080fd5b505afa158015614c00573d6000803e3d6000fd5b505050506040513d6020811015614c1657600080fd5b5051905089811115614c2457fe5b87811015614c635760405162461bcd60e51b8152600401808060200182810382526021815260200180614e3d6021913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6001600160a01b038116614cbd5760405162461bcd60e51b8152600401808060200182810382526026815260200180614db06026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008184841115614da75760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614d6c578181015183820152602001614d54565b50505050905090810190601f168015614d995780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734d646578526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e544d646578526f757465723a20494e53554646494349454e545f425f414d4f554e544d646578526f757465723a20494e56414c49445f5041544800000000000000004d646578526f757465723a20494e53554646494349454e545f415f414d4f554e544d646578526f757465723a204558434553534956455f494e5055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45444d646578526f757465723a2045585049524544000000000000000000000000005472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a264697066735822122009c8059c0ab1cb5ef465896e1d6b1d7246315470ae910c291ef0ca200eec989364736f6c63430006060033000000000000000000000000b0b670fc1f7724119963018db0bfa86adb22d9410000000000000000000000005545153ccfca01fbd7dd11c0b23ba694d9509a6f

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

000000000000000000000000b0b670fc1f7724119963018db0bfa86adb22d9410000000000000000000000005545153ccfca01fbd7dd11c0b23ba694d9509a6f

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000b0b670fc1f7724119963018db0bfa86adb22d941
Arg [1] : 0000000000000000000000005545153ccfca01fbd7dd11c0b23ba694d9509a6f


Deployed ByteCode Sourcemap

11579:18218:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12091:10;-1:-1:-1;;;;;12105:3:0;12091:17;;12084:25;;;;11579:18218;;12:1:-1;9;2:12;16416:670:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16416:670:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;16416:670:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;28937:220;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28937:220:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;28937:220:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;23395:787;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23395:787:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;23395:787:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;23395:787:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;23395:787:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;23395:787:0;;-1:-1:-1;23395:787:0;-1:-1:-1;;;;;;23395:787:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;23395:787:0;;;;;;;;;;;;;;;;;29596:196;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29596:196:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;29596:196:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;29596:196:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29596:196:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29596:196:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;29596:196:0;;-1:-1:-1;29596:196:0;;-1:-1:-1;;;;;29596:196:0:i;17094:647::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17094:647:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17094:647:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;9740:104::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9740:104:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;9740:104:0;-1:-1:-1;;;;;9740:104:0;;:::i;:::-;;;;;;;;;;;;;;;;;;20805:593;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20805:593:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;20805:593:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;20805:593:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;20805:593:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;20805:593:0;;-1:-1:-1;20805:593:0;-1:-1:-1;;;;;;20805:593:0;;;;;;;;:::i;22622:765::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22622:765:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;22622:765:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;22622:765:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;22622:765:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;22622:765:0;;-1:-1:-1;22622:765:0;-1:-1:-1;;;;;;22622:765:0;;;;;;;;:::i;11757:34::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11757:34:0;;;:::i;:::-;;;;-1:-1:-1;;;;;11757:34:0;;;;;;;;;;;;;;12349:106;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12349:106:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12349:106:0;-1:-1:-1;;;;;12349:106:0;;:::i;19171:687::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19171:687:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19171:687:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26412:683::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26412:683:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26412:683:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26412:683:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26412:683:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26412:683:0;;-1:-1:-1;26412:683:0;-1:-1:-1;;;;;;26412:683:0;;;;;;;;:::i;11713:37::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11713:37:0;;;:::i;9852:140::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9852:140:0;;;:::i;27901:787::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27901:787:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27901:787:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27901:787:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27901:787:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27901:787:0;;-1:-1:-1;27901:787:0;-1:-1:-1;;;;;;27901:787:0;;;;;;;;:::i;21985:629::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;21985:629:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;21985:629:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;21985:629:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;21985:629:0;;-1:-1:-1;21985:629:0;-1:-1:-1;;;;;;21985:629:0;;;;;;;;:::i;29165:219::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29165:219:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29165:219:0;;;;;;;;;;;;:::i;21406:571::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21406:571:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;21406:571:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;21406:571:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;21406:571:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;21406:571:0;;-1:-1:-1;21406:571:0;-1:-1:-1;;;;;;21406:571:0;;;;;;;;:::i;9653:79::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9653:79:0;;;:::i;12187:154::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12187:154:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;12187:154:0;;;;;;;;;;:::i;28732:197::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28732:197:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;28732:197:0;;;;;;;;;;;;:::i;18466:697::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18466:697:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18466:697:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;27103:790::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27103:790:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27103:790:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27103:790:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27103:790:0;;-1:-1:-1;27103:790:0;-1:-1:-1;;;;;;27103:790:0;;;;;;;;:::i;15575:833::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15575:833:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;15575:833:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;11665:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11665:41:0;;;:::i;29392:196::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29392:196:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;29392:196:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;29392:196:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29392:196:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29392:196:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;29392:196:0;;-1:-1:-1;29392:196:0;;-1:-1:-1;;;;;29392:196:0:i;17749:638::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17749:638:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17749:638:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;13879:707::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13879:707:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;13879:707:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;10237:109;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10237:109:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10237:109:0;-1:-1:-1;;;;;10237:109:0;;:::i;14594:938::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;14594:938:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24190:742::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24190:742:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24190:742:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24190:742:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;24190:742:0;;-1:-1:-1;24190:742:0;-1:-1:-1;;;;;;24190:742:0;;;;;;;;:::i;16416:670::-;16653:16;16671:14;16634:8;11862:15;11850:8;:27;;11842:59;;;;;-1:-1:-1;;;11842:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;11842:59:0;;;;;;;;;;;;;;;16725:195:::1;16755:5;16775:3;16793:9;16817:14;16846:12;16881:4;16901:8;16725:15;:195::i;:::-;16698:222:::0;;-1:-1:-1;16698:222:0;-1:-1:-1;16931:51:0::1;16959:5:::0;16966:2;16698:222;16931:27:::1;:51::i;:::-;16998:3;-1:-1:-1::0;;;;;16993:18:0::1;;17012:9;16993:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;16993:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;16993:29:0;;;;17033:45;17064:2;17068:9;17033:30;:45::i;:::-;16416:670:::0;;;;;;;;;;:::o;28937:220::-;29046:17;29095:7;-1:-1:-1;;;;;29082:34:0;;29117:8;29127:9;29138:10;29082:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29082:67:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29082:67:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29082:67:0;;28937:220;-1:-1:-1;;;;28937:220:0:o;23395:787::-;23589:21;23565:8;11862:15;11850:8;:27;;11842:59;;;;;-1:-1:-1;;;11842:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;11842:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23661:3:0::1;23636:28;:4:::0;;-1:-1:-1;;23641:15:0;;23636:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;23636:21:0::1;-1:-1:-1::0;;;;;23636:28:0::1;;23628:65;;;::::0;;-1:-1:-1;;;23628:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;23628:65:0;;;;;;;;;;;;;::::1;;23714:51;::::0;;-1:-1:-1;;;23714:51:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23727:7:0::1;23714:35;::::0;::::1;::::0;23750:8;;23760:4;;;;23714:51;;23760:4;23714:51:::1;::::0;::::1;::::0;23760:4;23714:51;1:33:-1::1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;23714:51:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23714:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23714:51:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;23714:51:0;80:15:-1::0;;::::1;-1:-1:::0;;76:31:::1;65:43:::0;::::1;120:4;113:20:::0;15:2:::1;7:11:::0;::::1;4:2;;;31:1;28::::0;21:12:::1;4:2;23714:51:0;;;;;;;;;;;;;-1:-1:-1::0;;;14:3:::1;11:20;8:2;;;44:1;41::::0;34:12:::1;8:2;62:21:::0;;::::1;::::0;123:4:::1;114:14:::0;::::1;138:31:::0;;::::1;135:2;;;182:1;179::::0;172:12:::1;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1:::0;;;247:12:::1;244:29;233:116;230:2;;;362:1;359::::0;352:12:::1;230:2;373:25:::0;;-1:-1;23714:51:0;;421:4:-1::1;412:14:::0;;::::1;::::0;23714:51:0;::::1;::::0;::::1;::::0;412:14:-1;23714:51:0;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;23714:51:0;;;;;;;;::::0;::::1;;23704:61;;23815:12;23784:7;23809:1;23792:7;:14;:18;23784:27;;;;;;;;;;;;;;:43;;23776:94;;;;-1:-1:-1::0;;;23776:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23881:115;23927:4;;23932:1;23927:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;23927:7:0::1;23936:10;23948:25;23956:4;;23961:1;23956:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;23956:7:0::1;23965:4;;23970:1;23965:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;23965:7:0::1;23948;:25::i;:::-;23975:7;23983:1;23975:10;;;;;;;;;;;;;;23881:31;:115::i;:::-;24007:35;24013:7;24022:4;;24007:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24036:4:0::1;::::0;-1:-1:-1;24007:5:0::1;::::0;-1:-1:-1;;24007:35:0:i:1;:::-;24058:3;-1:-1:-1::0;;;;;24053:18:0::1;;24072:7;24097:1;24080:7;:14;:18;24072:27;;;;;;;;;;;;;;24053:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24053:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24053:47:0;;;;24111:63;24142:2;24146:7;24171:1;24154:7;:14;:18;24146:27;;;;;;;;;;;;;;24111:30;:63::i;:::-;23395:787:::0;;;;;;;;;:::o;29596:196::-;29733:51;;;-1:-1:-1;;;29733:51:0;;;;;;;;;;;;;;;;;;;;;;29690:24;;-1:-1:-1;;;;;29746:7:0;29733:34;;;;29768:9;;29779:4;;29733:51;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;29733:51:0;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29733:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29733:51:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;29733:51:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;15:2;7:11;;4:2;;;31:1;28;21:12;4:2;29733:51:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;29733:51:0;;421:4:-1;412:14;;;;29733:51:0;;;;;412:14:-1;29733:51:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;29733:51:0;;;;;;;;;;;29726:58;;29596:196;;;;:::o;17094:647::-;17400:12;17414;17439;17454:23;17462:6;17470;17454:7;:23::i;:::-;17439:38;;17488:10;17501;:34;;17526:9;17501:34;;;-1:-1:-1;;17501:34:0;17546:75;;;-1:-1:-1;;;17546:75:0;;17569:10;17546:75;;;;17589:4;17546:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17488:47;;-1:-1:-1;;;;;;17546:22:0;;;;;:75;;;;;-1:-1:-1;;17546:75:0;;;;;;;;-1:-1:-1;17546:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;17546:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17546:75:0;;;;17653:80;17669:6;17677;17685:9;17696:10;17708;17720:2;17724:8;17653:15;:80::i;:::-;17632:101;;;;;;;;17094:647;;;;;;;;;;;;;;;;:::o;9740:104::-;9795:4;9830:6;-1:-1:-1;;;;;9830:6:0;;;9819:17;;;;9740:104::o;20805:593::-;21029:21;21010:8;11862:15;11850:8;:27;;11842:59;;;;;-1:-1:-1;;;11842:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;11842:59:0;;;;;;;;;;;;;;;21073:51:::1;::::0;;-1:-1:-1;;;21073:51:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;;;;;21086:7:0::1;21073:35;::::0;::::1;::::0;21109:8;;21119:4;;;;21073:51;;21119:4;21073:51:::1;::::0;::::1;::::0;21119:4;21073:51;1:33:-1::1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;21073:51:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21073:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21073:51:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;21073:51:0;80:15:-1::0;;::::1;-1:-1:::0;;76:31:::1;65:43:::0;::::1;120:4;113:20:::0;15:2:::1;7:11:::0;::::1;4:2;;;31:1;28::::0;21:12:::1;4:2;21073:51:0;;;;;;;;;;;;;-1:-1:-1::0;;;14:3:::1;11:20;8:2;;;44:1;41::::0;34:12:::1;8:2;62:21:::0;;::::1;::::0;123:4:::1;114:14:::0;::::1;138:31:::0;;::::1;135:2;;;182:1;179::::0;172:12:::1;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1:::0;;;247:12:::1;244:29;233:116;230:2;;;362:1;359::::0;352:12:::1;230:2;373:25:::0;;-1:-1;21073:51:0;;421:4:-1::1;412:14:::0;;::::1;::::0;21073:51:0;::::1;::::0;::::1;::::0;412:14:-1;21073:51:0;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;21073:51:0;;;;;;;;::::0;::::1;;21063:61;;21174:12;21143:7;21168:1;21151:7;:14;:18;21143:27;;;;;;;;;;;;;;:43;;21135:94;;;;-1:-1:-1::0;;;21135:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21240:115;21286:4;;21291:1;21286:7;;;;;;21240:115;21366:24;21372:7;21381:4;;21366:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;21387:2:0;;-1:-1:-1;21366:5:0::1;::::0;-1:-1:-1;;21366:24:0:i:1;22622:765::-:0;22816:21;22792:8;11862:15;11850:8;:27;;11842:59;;;;;-1:-1:-1;;;11842:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;11842:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;22888:3:0::1;22863:28;:4:::0;;-1:-1:-1;;22868:15:0;;22863:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;22863:21:0::1;-1:-1:-1::0;;;;;22863:28:0::1;;22855:65;;;::::0;;-1:-1:-1;;;22855:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;22855:65:0;;;;;;;;;;;;;::::1;;22941:51;::::0;;-1:-1:-1;;;22941:51:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;;;;;22954:7:0::1;22941:34;::::0;::::1;::::0;22976:9;;22987:4;;;;22941:51;;22987:4;22941:51:::1;::::0;::::1;::::0;22987:4;22941:51;1:33:-1::1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;22941:51:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22941:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22941:51:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;22941:51:0;80:15:-1::0;;::::1;-1:-1:::0;;76:31:::1;65:43:::0;::::1;120:4;113:20:::0;15:2:::1;7:11:::0;::::1;4:2;;;31:1;28::::0;21:12:::1;4:2;22941:51:0;;;;;;;;;;;;;-1:-1:-1::0;;;14:3:::1;11:20;8:2;;;44:1;41::::0;34:12:::1;8:2;62:21:::0;;::::1;::::0;123:4:::1;114:14:::0;::::1;138:31:::0;;::::1;135:2;;;182:1;179::::0;172:12:::1;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1:::0;;;247:12:::1;244:29;233:116;230:2;;;362:1;359::::0;352:12:::1;230:2;373:25:::0;;-1:-1;22941:51:0;;421:4:-1::1;412:14:::0;;::::1;::::0;22941:51:0;::::1;::::0;::::1;::::0;412:14:-1;22941:51:0;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;22941:51:0;;;;;;;;::::0;::::1;;22931:61;;23025:11;23011:7;23019:1;23011:10;;;;;;;;;;;;;;:25;;23003:72;;;;-1:-1:-1::0;;;23003:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11757:34:::0;;;-1:-1:-1;;;;;11757:34:0;;:::o;12349:106::-;10396:19;10404:10;10396:7;:19::i;:::-;10388:64;;;;;-1:-1:-1;;;10388:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12422:10:::1;:25:::0;;-1:-1:-1;;;;;;12422:25:0::1;-1:-1:-1::0;;;;;12422:25:0;;;::::1;::::0;;;::::1;::::0;;12349:106::o;19171:687::-;19489:14;19516:12;19531:19;19539:5;19546:3;19531:7;:19::i;:::-;19516:34;;19561:10;19574;:34;;19599:9;19574:34;;;-1:-1:-1;;19574:34:0;19619:75;;;-1:-1:-1;;;19619:75:0;;19642:10;19619:75;;;;19662:4;19619:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19561:47;;-1:-1:-1;;;;;;19619:22:0;;;;;:75;;;;;-1:-1:-1;;19619:75:0;;;;;;;;-1:-1:-1;19619:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;19619:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19619:75:0;;;;19717:133;19779:5;19786:9;19797:14;19813:12;19827:2;19831:8;19717:47;:133::i;:::-;19705:145;19171:687;-1:-1:-1;;;;;;;;;;;;;19171:687:0:o;26412:683::-;26646:8;11862:15;11850:8;:27;;11842:59;;;;;-1:-1:-1;;;11842:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;11842:59:0;;;;;;;;;;;;;;;26667:113:::1;26713:4;;26718:1;26713:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26713:7:0::1;26722:10;26734:25;26742:4;;26747:1;26742:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26742:7:0::1;26751:4;;26756:1;26751:7;;;;;;26734:25;26761:8;26667:31;:113::i;:::-;26791:18;26819:4:::0;;-1:-1:-1;;26824:15:0;;26819:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;26819:21:0::1;-1:-1:-1::0;;;;;26812:39:0::1;;26852:2;26812:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;26812:43:0::1;-1:-1:-1::0;;;;;26812:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26812:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26812:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26812:43:0;26866:44:::1;::::0;;26812:43:::1;26866:44:::0;;::::1;::::0;;;;;;;;;;;26812:43;;-1:-1:-1;26866:44:0::1;::::0;;;26901:4;;;;;;26866:44;::::1;::::0;26901:4;;26866:44;26901:4;26866:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26907:2:0;;-1:-1:-1;26866:34:0::1;::::0;-1:-1:-1;;26866:44:0:i:1;:::-;27009:12:::0;26943:62:::1;26991:13:::0;26950:4;;-1:-1:-1;;26955:15:0;;26950:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;26950:21:0::1;-1:-1:-1::0;;;;;26943:39:0::1;;26983:2;26943:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;26943:43:0::1;-1:-1:-1::0;;;;;26943:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26943:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26943:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26943:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;26921:166;;;;-1:-1:-1::0;;;26921:166:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11912:1;26412:683:::0;;;;;;;:::o;11713:37::-;;;:::o;9852:140::-;10396:19;10404:10;10396:7;:19::i;:::-;10388:64;;;;;-1:-1:-1;;;10388:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9951:1:::1;9935:6:::0;;9914:40:::1;::::0;-1:-1:-1;;;;;9935:6:0;;::::1;::::0;9914:40:::1;::::0;9951:1;;9914:40:::1;9982:1;9965:19:::0;;-1:-1:-1;;;;;;9965:19:0::1;::::0;;9852:140::o;27901:787::-;28152:8;11862:15;11850:8;:27;;11842:59;;;;;-1:-1:-1;;;11842:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;11842:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28211:3:0::1;28186:28;:4:::0;;-1:-1:-1;;28191:15:0;;28186:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28186:21:0::1;-1:-1:-1::0;;;;;28186:28:0::1;;28178:65;;;::::0;;-1:-1:-1;;;28178:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28178:65:0;;;;;;;;;;;;;::::1;;28254:113;28300:4;;28305:1;28300:7;;;;;;28254:113;28378:55;28413:4;;28378:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28427:4:0::1;::::0;-1:-1:-1;28378:34:0::1;::::0;-1:-1:-1;;28378:55:0:i:1;:::-;28461:36;::::0;;-1:-1:-1;;;28461:36:0;;28491:4:::1;28461:36;::::0;::::1;::::0;;;28444:14:::1;::::0;-1:-1:-1;;;;;28468:3:0::1;28461:21;::::0;::::1;::::0;:36;;;;;::::1;::::0;;;;;;;;;:21;:36;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;28461:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28461:36:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28461:36:0;;-1:-1:-1;28516:25:0;;::::1;;28508:76;;;;-1:-1:-1::0;;;28508:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28600:3;-1:-1:-1::0;;;;;28595:18:0::1;;28614:9;28595:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28595:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28595:29:0;;;;28635:45;28666:2;28670:9;28635:30;:45::i;21985:629::-:0;22177:21;22153:8;11862:15;11850:8;:27;;11842:59;;;;;-1:-1:-1;;;11842:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;11842:59:0;;;;;;;;;;;;;;;22235:3:::1;-1:-1:-1::0;;;;;22224:14:0::1;:4;;22229:1;22224:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;22224:7:0::1;-1:-1:-1::0;;;;;22224:14:0::1;;22216:51;;;::::0;;-1:-1:-1;;;22216:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;22216:51:0;;;;;;;;;;;;;::::1;;22288:52;::::0;;-1:-1:-1;;;22288:52:0;;22324:9:::1;22288:52;::::0;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;;;;;22301:7:0::1;22288:35;::::0;::::1;::::0;22335:4;;;;22288:52;;;;22335:4;22288:52:::1;::::0;::::1;::::0;22335:4;22288:52;1:33:-1::1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;22288:52:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22288:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22288:52:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;22288:52:0;80:15:-1::0;;::::1;-1:-1:::0;;76:31:::1;65:43:::0;::::1;120:4;113:20:::0;15:2:::1;7:11:::0;::::1;4:2;;;31:1;28::::0;21:12:::1;4:2;22288:52:0;;;;;;;;;;;;;-1:-1:-1::0;;;14:3:::1;11:20;8:2;;;44:1;41::::0;34:12:::1;8:2;62:21:::0;;::::1;::::0;123:4:::1;114:14:::0;::::1;138:31:::0;;::::1;135:2;;;182:1;179::::0;172:12:::1;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1:::0;;;247:12:::1;244:29;233:116;230:2;;;362:1;359::::0;352:12:::1;230:2;373:25:::0;;-1:-1;22288:52:0;;421:4:-1::1;412:14:::0;;::::1;::::0;22288:52:0;::::1;::::0;::::1;::::0;412:14:-1;22288:52:0;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;22288:52:0;;;;;;;;::::0;::::1;;22278:62;;22390:12;22359:7;22384:1;22367:7;:14;:18;22359:27;;;;;;;;;;;;;;:43;;22351:94;;;;-1:-1:-1::0;;;22351:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22461:3;-1:-1:-1::0;;;;;22456:17:0::1;;22482:7;22490:1;22482:10;;;;;;;;;;;;;;22456:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22456:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22456:39:0;;;;;22518:3;-1:-1:-1::0;;;;;22513:18:0::1;;22532:25;22540:4;;22545:1;22540:7;;;;;;22532:25;22559:7;22567:1;22559:10;;;;;;;;;;;;;;22513:57;;;;;;;;;;;;;-1:-1:-1::0;;;;;22513:57:0::1;-1:-1:-1::0;;;;;22513:57:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22513:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22513:57:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22513:57:0;22506:65:::1;;;;22582:24;22588:7;22597:4;;22582:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;22603:2:0;;-1:-1:-1;22582:5:0::1;::::0;-1:-1:-1;;22582:24:0:i:1;:::-;21985:629:::0;;;;;;;;:::o;29165:219::-;29274:16;29322:7;-1:-1:-1;;;;;29309:33:0;;29343:9;29354;29365:10;29309:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;21406:571:0;21630:21;21611:8;11862:15;11850:8;:27;;11842:59;;;;;-1:-1:-1;;;11842:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;11842:59:0;;;;;;;;;;;;;;;21674:51:::1;::::0;;-1:-1:-1;;;21674:51:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;;;;;21687:7:0::1;21674:34;::::0;::::1;::::0;21709:9;;21720:4;;;;21674:51;;21720:4;21674:51:::1;::::0;::::1;::::0;21720:4;21674:51;1:33:-1::1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;21674:51:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21674:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21674:51:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;21674:51:0;80:15:-1::0;;::::1;-1:-1:::0;;76:31:::1;65:43:::0;::::1;120:4;113:20:::0;15:2:::1;7:11:::0;::::1;4:2;;;31:1;28::::0;21:12:::1;4:2;21674:51:0;;;;;;;;;;;;;-1:-1:-1::0;;;14:3:::1;11:20;8:2;;;44:1;41::::0;34:12:::1;8:2;62:21:::0;;::::1;::::0;123:4:::1;114:14:::0;::::1;138:31:::0;;::::1;135:2;;;182:1;179::::0;172:12:::1;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1:::0;;;247:12:::1;244:29;233:116;230:2;;;362:1;359::::0;352:12:::1;230:2;373:25:::0;;-1:-1;21674:51:0;;421:4:-1::1;412:14:::0;;::::1;::::0;21674:51:0;::::1;::::0;::::1;::::0;412:14:-1;21674:51:0;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;21674:51:0;;;;;;;;::::0;::::1;;21664:61;;21758:11;21744:7;21752:1;21744:10;;;;;;;;;;;;;;:25;;21736:72;;;;-1:-1:-1::0;;;21736:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9653:79:::0;9691:7;9718:6;-1:-1:-1;;;;;9718:6:0;9653:79;:::o;12187:154::-;12288:45;;;-1:-1:-1;;;12288:45:0;;-1:-1:-1;;;;;12288:45:0;;;;;;;;;;;;;;;;12257:12;;12301:7;12288:29;;;;:45;;;;;;;;;;;;;;:29;:45;;;2:2:-1;;;;27:1;24;17:12;2:2;12288:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12288:45:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12288:45:0;;12187:154;-1:-1:-1;;;12187:154:0:o;28732:197::-;28830:15;28878:7;-1:-1:-1;;;;;28865:27:0;;28893:7;28902:8;28912;28865:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;18466:697:0;18732:14;18713:8;11862:15;11850:8;:27;;11842:59;;;;;-1:-1:-1;;;11842:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;11842:59:0;;;;;;;;;;;;;;;18775:195:::1;18805:5;18825:3;18843:9;18867:14;18896:12;18931:4;18951:8;18775:15;:195::i;:::-;19020:38;::::0;;-1:-1:-1;;;19020:38:0;;19052:4:::1;19020:38;::::0;::::1;::::0;;;18759:211;;-1:-1:-1;18981:78:0::1;::::0;-1:-1:-1;19009:5:0;;19016:2;;-1:-1:-1;;;;;19020:23:0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19020:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19020:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19020:38:0;18981:27:::1;:78::i;:::-;19075:3;-1:-1:-1::0;;;;;19070:18:0::1;;19089:9;19070:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19070:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19070:29:0;;;;19110:45;19141:2;19145:9;19110:30;:45::i;27103:790::-:0;27343:8;11862:15;11850:8;:27;;11842:59;;;;;-1:-1:-1;;;11842:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;11842:59:0;;;;;;;;;;;;;;;27388:3:::1;-1:-1:-1::0;;;;;27377:14:0::1;:4;;27382:1;27377:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27377:7:0::1;-1:-1:-1::0;;;;;27377:14:0::1;;27369:51;;;::::0;;-1:-1:-1;;;27369:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27369:51:0;;;;;;;;;;;;;::::1;;27431:13;27447:9;27431:25;;27472:3;-1:-1:-1::0;;;;;27467:17:0::1;;27493:8;27467:37;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27467:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27467:37:0;;;;;27527:3;-1:-1:-1::0;;;;;27522:18:0::1;;27541:25;27549:4;;27554:1;27549:7;;;;;;27541:25;27568:8;27522:55;;;;;;;;;;;;;-1:-1:-1::0;;;;;27522:55:0::1;-1:-1:-1::0;;;;;27522:55:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27522:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27522:55:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27522:55:0;27515:63:::1;;;;27589:18;27617:4:::0;;-1:-1:-1;;27622:15:0;;27617:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27617:21:0::1;-1:-1:-1::0;;;;;27610:39:0::1;;27650:2;27610:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;27610:43:0::1;-1:-1:-1::0;;;;;27610:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27610:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27610:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27610:43:0;27664:44:::1;::::0;;27610:43:::1;27664:44:::0;;::::1;::::0;;;;;;;;;;;27610:43;;-1:-1:-1;27664:44:0::1;::::0;;;27699:4;;;;;;27664:44;::::1;::::0;27699:4;;27664:44;27699:4;27664:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27705:2:0;;-1:-1:-1;27664:34:0::1;::::0;-1:-1:-1;;27664:44:0:i:1;:::-;27807:12:::0;27741:62:::1;27789:13:::0;27748:4;;-1:-1:-1;;27753:15:0;;27748:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27748:21:0::1;-1:-1:-1::0;;;;;27741:39:0::1;;27781:2;27741:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;27741:43:0::1;-1:-1:-1::0;;;;;27741:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;15575:833:0::0;15829:12;15843;15810:8;11862:15;11850:8;:27;;11842:59;;;;;-1:-1:-1;;;11842:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;11842:59:0;;;;;;;;;;;;;;;15868:12:::1;15883:23;15891:6;15899;15883:7;:23::i;:::-;15917:57;::::0;;-1:-1:-1;;;15917:57:0;;15946:10:::1;15917:57;::::0;::::1;::::0;-1:-1:-1;;;;;15917:28:0;::::1;:57:::0;;;;;;;;;;;;;;15868:38;;-1:-1:-1;15917:28:0;;::::1;::::0;:57;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;15917:28:0;:57;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;15917:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;15917:57:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;16051:24:0::1;::::0;;-1:-1:-1;;;16051:24:0;;-1:-1:-1;;;;;16051:24:0;;::::1;;::::0;::::1;::::0;;;16021:12:::1;::::0;;;16051:20;;::::1;::::0;::::1;::::0;:24;;;;;;;;;;;16021:12;16051:20;:24;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;16051:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;16051:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;16051:24:0;;;;;;;;;;;;;;;;;;;;;;;;;16020:55;;;;16087:14;16119:7;-1:-1:-1::0;;;;;16106:32:0::1;;16139:6;16147;16106:48;;;;;;;;;;;;;-1:-1:-1::0;;;;;16106:48:0::1;-1:-1:-1::0;;;;;16106:48:0::1;;;;;;-1:-1:-1::0;;;;;16106:48:0::1;-1:-1:-1::0;;;;;16106:48:0::1;;;;;;;;;;::::0;::::1;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;16106:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;16106:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;16106:48:0;;-1:-1:-1;;;;;;16186:16:0;;::::1;::::0;;::::1;;:58;;16227:7;16236;16186:58;;;16206:7;16215;16186:58;16165:79:::0;;-1:-1:-1;16165:79:0;-1:-1:-1;16263:21:0;;::::1;;16255:67;;;;-1:-1:-1::0;;;16255:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16352:10;16341:7;:21;;16333:67;;;;-1:-1:-1::0;;;16333:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11912:1;;;;15575:833:::0;;;;;;;;;;;:::o;11665:41::-;;;:::o;29392:196::-;29529:51;;;-1:-1:-1;;;29529:51:0;;;;;;;;;;;;;;;;;;;;;;29486:24;;29542:7;-1:-1:-1;;;;;29529:35:0;;;;:51;;;;;;;;;;;;;;;;;;-1:-1:-1;27:10;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;17749:638:0;18038:16;18056:14;18083:12;18098:19;18106:5;18113:3;18098:7;:19::i;:::-;18083:34;;18128:10;18141;:34;;18166:9;18141:34;;;-1:-1:-1;;18141:34:0;18186:75;;;-1:-1:-1;;;18186:75:0;;18209:10;18186:75;;;;18229:4;18186:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18128:47;;-1:-1:-1;;;;;;18186:22:0;;;;;:75;;;;;-1:-1:-1;;18186:75:0;;;;;;;;-1:-1:-1;18186:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;18186:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18186:75:0;;;;18299:80;18318:5;18325:9;18336:14;18352:12;18366:2;18370:8;18299:18;:80::i;:::-;18272:107;;;;-1:-1:-1;17749:638:0;-1:-1:-1;;;;;;;;;;;;;17749:638:0:o;13879:707::-;14167:12;14181;14195:14;14148:8;11862:15;11850:8;:27;;11842:59;;;;;-1:-1:-1;;;11842:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;11842:59:0;;;;;;;;;;;;;;;14243:85:::1;14257:6;14265;14273:14;14289;14305:10;14317;14243:13;:85::i;:::-;14222:106:::0;;-1:-1:-1;14222:106:0;-1:-1:-1;14339:12:0::1;14354:23;14362:6:::0;14370;14354:7:::1;:23::i;:::-;14339:38;;14388:66;14420:6;14428:10;14440:4;14446:7;14388:31;:66::i;:::-;14465;14497:6;14505:10;14517:4;14523:7;14465:31;:66::i;:::-;14564:4;-1:-1:-1::0;;;;;14554:20:0::1;;14575:2;14554:24;;;;;;;;;;;;;-1:-1:-1::0;;;;;14554:24:0::1;-1:-1:-1::0;;;;;14554:24:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;14554:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;14554:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;14554:24:0;13879:707;;;;-1:-1:-1;14554:24:0;;-1:-1:-1;13879:707:0;;-1:-1:-1;;;;;;;;;13879:707:0:o;10237:109::-;10396:19;10404:10;10396:7;:19::i;:::-;10388:64;;;;;-1:-1:-1;;;10388:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10310:28:::1;10329:8;10310:18;:28::i;:::-;10237:109:::0;:::o;14594:938::-;14847:16;14865:14;14881;14828:8;11862:15;11850:8;:27;;11842:59;;;;;-1:-1:-1;;;11842:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;11842:59:0;;;;;;;;;;;;;;;14935:175:::1;14963:5;14983:3;15001:18;15034:9;15058:14;15087:12;14935:13;:175::i;:::-;14908:202:::0;;-1:-1:-1;14908:202:0;-1:-1:-1;15121:12:0::1;15136:19;15144:5:::0;15151:3:::1;15136:7;:19::i;:::-;15121:34;;15166:69;15198:5;15205:10;15217:4;15223:11;15166:31;:69::i;:::-;15251:3;-1:-1:-1::0;;;;;15246:17:0::1;;15272:9;15246:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;15246:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;15246:38:0;;;;;15307:3;-1:-1:-1::0;;;;;15302:18:0::1;;15321:4;15327:9;15302:35;;;;;;;;;;;;;-1:-1:-1::0;;;;;15302:35:0::1;-1:-1:-1::0;;;;;15302:35:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;15302:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;15302:35:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;15302:35:0;15295:43:::1;;;;15371:4;-1:-1:-1::0;;;;;15361:20:0::1;;15382:2;15361:24;;;;;;;;;;;;;-1:-1:-1::0;;;;;15361:24:0::1;-1:-1:-1::0;;;;;15361:24:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;15361:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;15361:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;15361:24:0;;-1:-1:-1;15436:9:0::1;:21:::0;-1:-1:-1;15432:92:0::1;;;15459:65;15490:10;15514:9;15502;:21;15459:30;:65::i;:::-;11912:1;14594:938:::0;;;;;;;;;;;:::o;24190:742::-;24379:21;24355:8;11862:15;11850:8;:27;;11842:59;;;;;-1:-1:-1;;;11842:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;11842:59:0;;;;;;;;;;;;;;;24437:3:::1;-1:-1:-1::0;;;;;24426:14:0::1;:4;;24431:1;24426:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;24426:7:0::1;-1:-1:-1::0;;;;;24426:14:0::1;;24418:51;;;::::0;;-1:-1:-1;;;24418:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;24418:51:0;;;;;;;;;;;;;::::1;;24490;::::0;;-1:-1:-1;;;24490:51:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24503:7:0::1;24490:34;::::0;::::1;::::0;24525:9;;24536:4;;;;24490:51;;24536:4;24490:51:::1;::::0;::::1;::::0;24536:4;24490:51;1:33:-1::1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;24490:51:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24490:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24490:51:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;24490:51:0;80:15:-1::0;;::::1;-1:-1:::0;;76:31:::1;65:43:::0;::::1;120:4;113:20:::0;15:2:::1;7:11:::0;::::1;4:2;;;31:1;28::::0;21:12:::1;4:2;24490:51:0;;;;;;;;;;;;;-1:-1:-1::0;;;14:3:::1;11:20;8:2;;;44:1;41::::0;34:12:::1;8:2;62:21:::0;;::::1;::::0;123:4:::1;114:14:::0;::::1;138:31:::0;;::::1;135:2;;;182:1;179::::0;172:12:::1;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1:::0;;;247:12:::1;244:29;233:116;230:2;;;362:1;359::::0;352:12:::1;230:2;373:25:::0;;-1:-1;24490:51:0;;421:4:-1::1;412:14:::0;;::::1;::::0;24490:51:0;::::1;::::0;::::1;::::0;412:14:-1;24490:51:0;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;24490:51:0;;;;;;;;::::0;::::1;;24480:61;;24574:9;24560:7;24568:1;24560:10;;;;;;;;;;;;;;:23;;24552:70;;;;-1:-1:-1::0;;;24552:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24638:3;-1:-1:-1::0;;;;;24633:17:0::1;;24659:7;24667:1;24659:10;;;;;;;;;;;;;;24633:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24633:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24633:39:0;;;;;24695:3;-1:-1:-1::0;;;;;24690:18:0::1;;24709:25;24717:4;;24722:1;24717:7;;;;;;24709:25;24736:7;24744:1;24736:10;;;;;;;;;;;;;;24690:57;;;;;;;;;;;;;-1:-1:-1::0;;;;;24690:57:0::1;-1:-1:-1::0;;;;;24690:57:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24690:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24690:57:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;24690:57:0;24683:65:::1;;;;24759:24;24765:7;24774:4;;24759:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24780:2:0;;-1:-1:-1;24759:5:0::1;::::0;-1:-1:-1;;24759:24:0:i:1;:::-;24846:7;24854:1;24846:10;;;;;;;;;;;;;;24834:9;:22;24830:94;;;24858:66;24889:10;24913:7;24921:1;24913:10;;;;;;;;;;;;;;24901:9;:22;24858:30;:66::i;34695:361::-:0;34890:45;;;-1:-1:-1;;;;;34890:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;34890:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;34879:57:0;;;;34844:12;;34858:17;;34879:10;;;;34890:45;34879:57;;;25:18:-1;34879:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;34879:57:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;34843:93:0;;;;34955:7;:57;;;;-1:-1:-1;34967:11:0;;:16;;:44;;;34998:4;34987:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34987:24:0;34967:44;34947:101;;;;;-1:-1:-1;;;34947:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;34695:361;;;;;:::o;35474:197::-;35584:12;;;35544;35584;;;;;;;;;-1:-1:-1;;;;;35561:7:0;;;35577:5;;35561:36;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;35561:36:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;35543:54:0;;;35616:7;35608:55;;;;-1:-1:-1;;;35608:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35474:197;;;:::o;35064:402::-;35289:51;;;-1:-1:-1;;;;;35289:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;35289:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;35278:63:0;;;;35243:12;;35257:17;;35278:10;;;;35289:51;35278:63;;;25:18:-1;35278:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;35278:63:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;35242:99:0;;;;35360:7;:57;;;;-1:-1:-1;35372:11:0;;:16;;:44;;;35403:4;35392:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35392:24:0;35372:44;35352:106;;;;-1:-1:-1;;;35352:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35064:402;;;;;;:::o;19969:828::-;20076:6;20071:719;20102:1;20088:4;:11;:15;20084:1;:19;20071:719;;;20126:13;20141:14;20160:4;20165:1;20160:7;;;;;;;;;;;;;;20169:4;20174:1;20178;20174:5;20169:11;;;;;;;;;;;;;;20125:56;;;;20197:14;20229:7;-1:-1:-1;;;;;20216:32:0;;20249:5;20256:6;20216:47;;;;;;;;;;;;;-1:-1:-1;;;;;20216:47:0;-1:-1:-1;;;;;20216:47:0;;;;;;-1:-1:-1;;;;;20216:47:0;-1:-1:-1;;;;;20216:47:0;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20216:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20216:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20216:47:0;20295:14;;20216:47;;-1:-1:-1;20278:14:0;;20295:7;;20307:1;20303:5;;;20295:14;;;;;;;;;;;;;;;;20328:10;;20295:14;;-1:-1:-1;;;;;;20328:10:0;:24;20324:131;;20385:10;;20373:66;;;-1:-1:-1;;;20373:66:0;;20402:10;20373:66;;;;-1:-1:-1;;;;;20373:66:0;;;;;;;;;;;;;;;;;;;;;;20385:10;;;;;20373:28;;:66;;;;;;;;;;;;;;20385:10;;20373:66;;;2:2:-1;;;;27:1;24;17:12;2:2;20373:66:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20373:66:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;20324:131:0;20470:15;20487;20515:6;-1:-1:-1;;;;;20506:15:0;:5;-1:-1:-1;;;;;20506:15:0;;:61;;20548:9;20564:1;20506:61;;;20530:1;20534:9;20506:61;20469:98;;;;20582:10;20613:1;20599:4;:11;:15;20595:1;:19;:56;;20648:3;20595:56;;;20617:28;20625:6;20633:4;20638:1;20642;20638:5;20633:11;;;;;;;;;;;;;;20617:7;:28::i;:::-;20582:69;;20676:22;20684:5;20691:6;20676:7;:22::i;:::-;-1:-1:-1;;;;;20666:38:0;;20723:10;20735;20747:2;20761:1;20751:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;20751:12:0;87:42:-1;143:17;;-1:-1;20751:12:0;;20666:112;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20666:112:0;-1:-1:-1;;;;;20666:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;20666:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20666:112:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;20105:3:0;;;;;-1:-1:-1;20071:719:0;;-1:-1:-1;;;;;;;;20071:719:0;;;19969:828;;;:::o;25079:1325::-;25192:6;25187:1210;25218:1;25204:4;:11;:15;25200:1;:19;25187:1210;;;25242:13;25257:14;25276:4;25281:1;25276:7;;;;;;;;;;;;;;25285:4;25290:1;25294;25290:5;25285:11;;;;;;;;;;;;;;25241:56;;;;25313:14;25345:7;-1:-1:-1;;;;;25332:32:0;;25365:5;25372:6;25332:47;;;;;;;;;;;;;-1:-1:-1;;;;;25332:47:0;-1:-1:-1;;;;;25332:47:0;;;;;;-1:-1:-1;;;;;25332:47:0;-1:-1:-1;;;;;25332:47:0;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25332:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25332:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;25332:47:0;;-1:-1:-1;25394:14:0;25421:22;25429:5;25436:6;25421:7;:22::i;:::-;25394:50;;25459:16;25490:17;25581:13;25596;25614:4;-1:-1:-1;;;;;25614:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25614:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25614:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;25614:18:0;;;;;;;25580:52;;;;;-1:-1:-1;25580:52:0;;-1:-1:-1;25652:17:0;;-1:-1:-1;;;;;25693:15:0;;;;;;;:61;;25735:8;25745;25693:61;;;25712:8;25722;25693:61;25651:103;;;;25787:56;25830:12;25794:5;-1:-1:-1;;;;;25787:23:0;;25819:4;25787:38;;;;;;;;;;;;;-1:-1:-1;;;;;25787:38:0;-1:-1:-1;;;;;25787:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;25787:56:0;25773:70;;25890:7;-1:-1:-1;;;;;25877:34:0;;25912:11;25925:12;25939:13;25877:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25877:76:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25877:76:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;25877:76:0;25987:10;;25877:76;;-1:-1:-1;;;;;;25987:10:0;:24;;-1:-1:-1;25983:134:0;;-1:-1:-1;;;25983:134:0;26044:10;;26032:69;;;-1:-1:-1;;;26032:69:0;;26061:10;26032:69;;;;-1:-1:-1;;;;;26032:69:0;;;;;;;;;;;;;;;;;;;;;;26044:10;;;;;26032:28;;:69;;;;;;;;;;;;;;26044:10;;26032:69;;;2:2:-1;;;;27:1;24;17:12;2:2;26032:69:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26032:69:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;25983:134:0;26132:15;26149;26177:6;-1:-1:-1;;;;;26168:15:0;:5;-1:-1:-1;;;;;26168:15:0;;:67;;26213:12;26232:1;26168:67;;;26192:1;26196:12;26168:67;26131:104;;;;26250:10;26281:1;26267:4;:11;:15;26263:1;:19;:56;;26316:3;26263:56;;;26285:28;26293:6;26301:4;26306:1;26310;26306:5;26301:11;;;;;;;26285:28;26372:12;;;26382:1;26372:12;;;;;;;;;;-1:-1:-1;;;26334:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;26334:51:0;;;;;;;;;;;;;;;;;;;;;;26250:69;;-1:-1:-1;26334:9:0;;;;;;26344:10;;26356;;26250:69;;26372:12;;26334:51;;;;;;;;26372:12;;26334:51;;;;26372:12;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;26334:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26334:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;25221:3:0;;;;;-1:-1:-1;25187:1210:0;;-1:-1:-1;;;;;;;;;;25187:1210:0;30364:136;30422:7;30449:43;30453:1;30456;30449:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;30442:50;30364:136;-1:-1:-1;;;30364:136:0:o;12495:1376::-;12808:45;;;-1:-1:-1;;;12808:45:0;;-1:-1:-1;;;;;12808:45:0;;;;;;;;;;;;;;;;12713:12;;;;;;12821:7;12808:29;;;;;;:45;;;;;;;;;;;;;;;:29;:45;;;2:2:-1;;;;27:1;24;17:12;2:2;12808:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12808:45:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12808:45:0;-1:-1:-1;;;;;12808:59:0;;12804:140;;;12884:48;;;-1:-1:-1;;;12884:48:0;;-1:-1:-1;;;;;12884:48:0;;;;;;;;;;;;;;;;12897:7;12884:32;;;;;;:48;;;;;;;;;;;;;;;-1:-1:-1;12884:32:0;:48;;;2:2:-1;;;;27:1;24;17:12;2:2;12884:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12884:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;12804:140:0;12987:49;;;-1:-1:-1;;;12987:49:0;;-1:-1:-1;;;;;12987:49:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;13000:7:0;12987:33;;;;;;:49;;;;;;;;;;;:33;:49;;;2:2:-1;;;;27:1;24;17:12;2:2;12987:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12987:49:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12987:49:0;;;;;;;;;-1:-1:-1;12987:49:0;-1:-1:-1;13051:13:0;;:30;;;;-1:-1:-1;13068:13:0;;13051:30;13047:817;;;13120:14;;-1:-1:-1;13136:14:0;;-1:-1:-1;13047:817:0;;;13184:19;13219:7;-1:-1:-1;;;;;13206:27:0;;13234:14;13250:8;13260;13206:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13206:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13206:63:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;13206:63:0;;-1:-1:-1;13288:32:0;;;13284:569;;13367:10;13349:14;:28;;13341:74;;;;-1:-1:-1;;;13341:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13456:14;;-1:-1:-1;13472:14:0;-1:-1:-1;13472:14:0;13284:569;;;13528:19;13563:7;-1:-1:-1;;;;;13550:27:0;;13578:14;13594:8;13604;13550:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13550:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13550:63:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;13550:63:0;;-1:-1:-1;13639:32:0;;;;13632:40;;;;13717:10;13699:14;:28;;13691:74;;;;-1:-1:-1;;;13691:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13806:14;-1:-1:-1;13822:14:0;;-1:-1:-1;13284:569:0;13047:817;;12495:1376;;;;;;;;;;;:::o;10000:229::-;-1:-1:-1;;;;;10074:22:0;;10066:73;;;;-1:-1:-1;;;10066:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10176:6;;;10155:38;;-1:-1:-1;;;;;10155:38:0;;;;10176:6;;;10155:38;;;10204:6;:17;;-1:-1:-1;;;;;;10204:17:0;-1:-1:-1;;;;;10204:17:0;;;;;;;;;;10000:229::o;30508:192::-;30594:7;30630:12;30622:6;;;;30614:29;;;;-1:-1:-1;;;30614:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;30614:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30666:5:0;;;30508:192::o

Swarm Source

ipfs://09c8059c0ab1cb5ef465896e1d6b1d7246315470ae910c291ef0ca200eec9893
Block Transaction Gas Used Reward
Age Block Fee Address Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading