Contract 0xc294ab598ab67610f3a0775f21db5d34f51043b8 1

 

Contract Overview

Balance:
0.00073098120613955 FTM

FTM Value:
Less Than $0.01 (@ $0.32/FTM)
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xaefa64ef7d5eb2fd1fff2435a1d23dd613fadb8cc2bfce374edffdd36135e971Approve634037092023-06-01 4:39:232 days 4 hrs ago0xe938f2776dc76f3cd70e17c62f5cd0bb3dad9f23 IN  0xc294ab598ab67610f3a0775f21db5d34f51043b80 FTM0.00483142
0x2ef9ec9c1787b088e7b2f513319cd8f5e748a6c4f784c8af6d4312ead6778cecApprove634034012023-06-01 4:30:292 days 4 hrs ago0xe938f2776dc76f3cd70e17c62f5cd0bb3dad9f23 IN  0xc294ab598ab67610f3a0775f21db5d34f51043b80 FTM0.036535495032
0xd46af96a54adfba981573fa22ad82f40578a825047bf6d1292498d60046c3709Switch Mode634033082023-06-01 4:28:202 days 4 hrs ago0x949546250d19a5c93df867a59bc67fa42120c55d IN  0xc294ab598ab67610f3a0775f21db5d34f51043b80 FTM0.002353494476
0xff62e453bddbd8476c6486cbd7dc9cf03862dbdb8f0286af9c2e7b09fa80f3abUpgrade Token Ad...634032562023-06-01 4:26:562 days 4 hrs ago0x949546250d19a5c93df867a59bc67fa42120c55d IN  0xc294ab598ab67610f3a0775f21db5d34f51043b80 FTM0.00593952044
0x8b26bea1bb52c462a598fce5ba23e359965ded959187888a26a3580ac4b8d29eApprove631547302023-05-27 3:14:377 days 5 hrs ago0xe9239071975841e21623c107bca0b7a631a0571b IN  0xc294ab598ab67610f3a0775f21db5d34f51043b80 FTM0.0037572
0x74f7bafc646b0dd6f56a07cd6a33710a13736845c519a3070c0456122a38eeadApprove631545892023-05-27 3:09:327 days 5 hrs ago0xe9239071975841e21623c107bca0b7a631a0571b IN  0xc294ab598ab67610f3a0775f21db5d34f51043b80 FTM0.003576815169
0x32e2a991860b0bb1c75da0f3dd016477a906e0cbfb79b7f0bd5f06e341b3a364Approve631049992023-05-26 7:20:348 days 1 hr ago0x4b024b1609e1c3c8335a7396748e9339c671dfa6 IN  0xc294ab598ab67610f3a0775f21db5d34f51043b80 FTM0.02015010571
0x46ea15ec07c018a3c2f8f20ac29047c74a93486117ad1170a7010b7635182703Approve631024422023-05-26 6:34:228 days 2 hrs ago0xb149d3a6f895b87353a8e6f41cc424c5e517390d IN  0xc294ab598ab67610f3a0775f21db5d34f51043b80 FTM0.002719463226
0x970b0affb6a828393756803935b0b9595345d8d20f8c8eafff7d059b62a19f5eUpdate Max631015172023-05-26 6:12:128 days 2 hrs ago0x949546250d19a5c93df867a59bc67fa42120c55d IN  0xc294ab598ab67610f3a0775f21db5d34f51043b80 FTM0.002222051887
0x698261b3a22f04db8457d52ccad7dd353e1cf04256a3450e903742c0fc04ca39Update Manager631011012023-05-26 6:02:558 days 2 hrs ago0x949546250d19a5c93df867a59bc67fa42120c55d IN  0xc294ab598ab67610f3a0775f21db5d34f51043b80 FTM0.002889900773
0xbde3c04660f0671826169afebef84546ff05f92c70c7da40d0ce1cd6c5f27bceApprove631010672023-05-26 6:01:428 days 2 hrs ago0xe938f2776dc76f3cd70e17c62f5cd0bb3dad9f23 IN  0xc294ab598ab67610f3a0775f21db5d34f51043b80 FTM0.011044049471
0x30e94a543c688a9622ad9846c55e28358ac8f1d9cf0a88ffd8e51335aa0e6349Approve631010082023-05-26 5:59:308 days 2 hrs ago0xb149d3a6f895b87353a8e6f41cc424c5e517390d IN  0xc294ab598ab67610f3a0775f21db5d34f51043b80 FTM0.019302258286
0x90bd309f01370b71d82fdabb09cf8d6e77211dfd757e70142c4f4ef265cd92a2Transfer631009452023-05-26 5:58:138 days 2 hrs ago0x949546250d19a5c93df867a59bc67fa42120c55d IN  0xc294ab598ab67610f3a0775f21db5d34f51043b80 FTM0.005142605139
0xd1dfb59052d4d285a9976cca30b6c1148a39c4858ab339400166bb0fb356affbTransfer631005392023-05-26 5:47:518 days 2 hrs ago0xe938f2776dc76f3cd70e17c62f5cd0bb3dad9f23 IN  0xc294ab598ab67610f3a0775f21db5d34f51043b80 FTM0.045338897742
0x88bcfc94bc5de4694b1fcde69d91eb5a5e299245e1e152a7ad0323e3946f535fTransfer631004702023-05-26 5:45:208 days 2 hrs ago0x949546250d19a5c93df867a59bc67fa42120c55d IN  0xc294ab598ab67610f3a0775f21db5d34f51043b80 FTM0.007942954505
0xa90139b95ca48a6d54a7df5eda63a3126fbb6e56c4ff17765424ffa7ec1ee39aSwitch Mode631004522023-05-26 5:44:378 days 2 hrs ago0x949546250d19a5c93df867a59bc67fa42120c55d IN  0xc294ab598ab67610f3a0775f21db5d34f51043b80 FTM0.002600401043
0xe11d90fc6c5d260c15f7ffb89aaed5122414e75f1d8e06f44724feed034d65fcUpdate Whitelist...631004092023-05-26 5:42:458 days 3 hrs ago0x949546250d19a5c93df867a59bc67fa42120c55d IN  0xc294ab598ab67610f3a0775f21db5d34f51043b80 FTM0.00749087261
0x4d60a1834455e7d3fa752e4bc27b71c8dd6691d756e17ccd9474eb2ac36d3ee3Update Max Exemp...631003932023-05-26 5:42:148 days 3 hrs ago0x949546250d19a5c93df867a59bc67fa42120c55d IN  0xc294ab598ab67610f3a0775f21db5d34f51043b80 FTM0.012063452834
0xdddfd80f6fabaa3a6292ad611af2b3014af57a46d31eb8201331977e28246618Update Fee Exemp...631003732023-05-26 5:41:148 days 3 hrs ago0x949546250d19a5c93df867a59bc67fa42120c55d IN  0xc294ab598ab67610f3a0775f21db5d34f51043b80 FTM0.009604115383
0x2f14ac66ad9ab2a68aa95510c164c7ab28d7181d90a0202e6bd442cb98d431920x60806040631001642023-05-26 5:35:318 days 3 hrs ago0x949546250d19a5c93df867a59bc67fa42120c55d IN  Create: SHARK0 FTM0.951657003308
[ Download CSV Export 
Latest 23 internal transactions
Parent Txn Hash Block From To Value
0x2ef9ec9c1787b088e7b2f513319cd8f5e748a6c4f784c8af6d4312ead6778cec634034012023-06-01 4:30:292 days 4 hrs ago 0x31f63a33141ffee63d4b26755430a390acdd8a4d 0xc294ab598ab67610f3a0775f21db5d34f51043b80.000356674309298279 FTM
0x2ef9ec9c1787b088e7b2f513319cd8f5e748a6c4f784c8af6d4312ead6778cec634034012023-06-01 4:30:292 days 4 hrs ago 0xc294ab598ab67610f3a0775f21db5d34f51043b8 0x31f63a33141ffee63d4b26755430a390acdd8a4d0.046264009247238561 FTM
0x2ef9ec9c1787b088e7b2f513319cd8f5e748a6c4f784c8af6d4312ead6778cec634034012023-06-01 4:30:292 days 4 hrs ago 0x31f63a33141ffee63d4b26755430a390acdd8a4d 0xc294ab598ab67610f3a0775f21db5d34f51043b80.046264009247238561 FTM
0x32e2a991860b0bb1c75da0f3dd016477a906e0cbfb79b7f0bd5f06e341b3a364631049992023-05-26 7:20:348 days 1 hr ago 0x31f63a33141ffee63d4b26755430a390acdd8a4d 0xc294ab598ab67610f3a0775f21db5d34f51043b80.000206899207143332 FTM
0x32e2a991860b0bb1c75da0f3dd016477a906e0cbfb79b7f0bd5f06e341b3a364631049992023-05-26 7:20:348 days 1 hr ago 0xc294ab598ab67610f3a0775f21db5d34f51043b8 0x31f63a33141ffee63d4b26755430a390acdd8a4d0.032982538089805004 FTM
0x32e2a991860b0bb1c75da0f3dd016477a906e0cbfb79b7f0bd5f06e341b3a364631049992023-05-26 7:20:348 days 1 hr ago 0x31f63a33141ffee63d4b26755430a390acdd8a4d 0xc294ab598ab67610f3a0775f21db5d34f51043b80.032982538089805004 FTM
0x6f5e595173c4b4d61e306481fc34e4e14645e6bff4e503424d99cbd5cb733aa0631024072023-05-26 6:33:408 days 2 hrs ago 0xc294ab598ab67610f3a0775f21db5d34f51043b80xe938f2776dc76f3cd70e17c62f5cd0bb3dad9f230.040768675262902781 FTM
0x6f5e595173c4b4d61e306481fc34e4e14645e6bff4e503424d99cbd5cb733aa0631024072023-05-26 6:33:408 days 2 hrs ago 0xc294ab598ab67610f3a0775f21db5d34f51043b80xe938f2776dc76f3cd70e17c62f5cd0bb3dad9f230.005112402051935886 FTM
0x6f5e595173c4b4d61e306481fc34e4e14645e6bff4e503424d99cbd5cb733aa0631024072023-05-26 6:33:408 days 2 hrs ago 0x31f63a33141ffee63d4b26755430a390acdd8a4d 0xc294ab598ab67610f3a0775f21db5d34f51043b80.045881077314838667 FTM
0x952abbfc5549a9b04699f56172c0d667b1491144918466798a2555b11f9141e1631011472023-05-26 6:04:188 days 2 hrs ago 0xc294ab598ab67610f3a0775f21db5d34f51043b80xe938f2776dc76f3cd70e17c62f5cd0bb3dad9f230.002492262079969687 FTM
0x952abbfc5549a9b04699f56172c0d667b1491144918466798a2555b11f9141e1631011472023-05-26 6:04:188 days 2 hrs ago 0xc294ab598ab67610f3a0775f21db5d34f51043b80xe938f2776dc76f3cd70e17c62f5cd0bb3dad9f230.000315349558001009 FTM
0x952abbfc5549a9b04699f56172c0d667b1491144918466798a2555b11f9141e1631011472023-05-26 6:04:188 days 2 hrs ago 0x31f63a33141ffee63d4b26755430a390acdd8a4d 0xc294ab598ab67610f3a0775f21db5d34f51043b80.002807611637970696 FTM
0x30e94a543c688a9622ad9846c55e28358ac8f1d9cf0a88ffd8e51335aa0e6349631010082023-05-26 5:59:308 days 2 hrs ago 0x31f63a33141ffee63d4b26755430a390acdd8a4d 0xc294ab598ab67610f3a0775f21db5d34f51043b80.000083877518680289 FTM
0x30e94a543c688a9622ad9846c55e28358ac8f1d9cf0a88ffd8e51335aa0e6349631010082023-05-26 5:59:308 days 2 hrs ago 0xc294ab598ab67610f3a0775f21db5d34f51043b8 0x31f63a33141ffee63d4b26755430a390acdd8a4d0.019223840260526902 FTM
0x30e94a543c688a9622ad9846c55e28358ac8f1d9cf0a88ffd8e51335aa0e6349631010082023-05-26 5:59:308 days 2 hrs ago 0x31f63a33141ffee63d4b26755430a390acdd8a4d 0xc294ab598ab67610f3a0775f21db5d34f51043b80.019223840260526902 FTM
0xd1dfb59052d4d285a9976cca30b6c1148a39c4858ab339400166bb0fb356affb631005392023-05-26 5:47:518 days 2 hrs ago 0xc294ab598ab67610f3a0775f21db5d34f51043b80xe938f2776dc76f3cd70e17c62f5cd0bb3dad9f230.000030355857569519 FTM
0xd1dfb59052d4d285a9976cca30b6c1148a39c4858ab339400166bb0fb356affb631005392023-05-26 5:47:518 days 2 hrs ago 0xc294ab598ab67610f3a0775f21db5d34f51043b80xe938f2776dc76f3cd70e17c62f5cd0bb3dad9f230.000003794482196189 FTM
0xd1dfb59052d4d285a9976cca30b6c1148a39c4858ab339400166bb0fb356affb631005392023-05-26 5:47:518 days 2 hrs ago 0x31f63a33141ffee63d4b26755430a390acdd8a4d 0xc294ab598ab67610f3a0775f21db5d34f51043b80.000034150339765708 FTM
0xd1dfb59052d4d285a9976cca30b6c1148a39c4858ab339400166bb0fb356affb631005392023-05-26 5:47:518 days 2 hrs ago 0x31f63a33141ffee63d4b26755430a390acdd8a4d 0xc294ab598ab67610f3a0775f21db5d34f51043b80.00008353017101765 FTM
0xd1dfb59052d4d285a9976cca30b6c1148a39c4858ab339400166bb0fb356affb631005392023-05-26 5:47:518 days 2 hrs ago 0xc294ab598ab67610f3a0775f21db5d34f51043b8 0x31f63a33141ffee63d4b26755430a390acdd8a4d0.019075186744006183 FTM
0xd1dfb59052d4d285a9976cca30b6c1148a39c4858ab339400166bb0fb356affb631005392023-05-26 5:47:518 days 2 hrs ago 0x31f63a33141ffee63d4b26755430a390acdd8a4d 0xc294ab598ab67610f3a0775f21db5d34f51043b80.019075186744006183 FTM
0x2f14ac66ad9ab2a68aa95510c164c7ab28d7181d90a0202e6bd442cb98d43192631001642023-05-26 5:35:318 days 3 hrs ago 0xc294ab598ab67610f3a0775f21db5d34f51043b8  Contract Creation0 FTM
0x2f14ac66ad9ab2a68aa95510c164c7ab28d7181d90a0202e6bd442cb98d43192631001642023-05-26 5:35:318 days 3 hrs ago 0x949546250d19a5c93df867a59bc67fa42120c55d  Contract Creation0 FTM
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SHARK

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 20 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at FtmScan.com on 2023-05-26
*/

//SPDX-License-Identifier: UNDEFINED

pragma solidity 0.8.17;

library SafeMath {
    function tryAdd(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

    function trySub(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }

    function tryMul(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        if (a == 0) return (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }

    function tryDiv(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }

    function tryMod(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }

    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) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        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) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }

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

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a / b;
    }

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

interface IERC20 {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

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

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

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

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

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


}

//IDEXFactory interface to create token pool pair address
interface IDEXFactory {
    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);

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



//IDEXRouter interface to integrate Tarder Joe(liquidity pool) router
interface IDEXRouter {
    function factory() external pure returns (address);
    function WETH() 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 amountAVAXMin,
        address to,
        uint deadline
    )
        external
        payable
        returns (uint amountToken, uint amountAVAX, uint liquidity);

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

    function swapExactTokensForTokens(
        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;

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

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

interface IDEXPair{
    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function sync() external;
}

    //////// intefaces of stable usd token mint function  \\\\\\\\
interface Istable is IERC20 {
    function mint(
        uint amount
        ) external  returns(bool);
}


interface IPrinter {
    function setShare(address shareholder, uint256 amount) external;
    function deposit(bool _usdTokenLiquidity, uint _liquidityPercentage) external payable   returns(uint) ;
    function avaxSwap(address _tokenAdd, uint tokenAmount) external   returns(uint);
    function shareHolderBal(address _tokenAdd, address shareHolder) external view returns(uint);
    function claimPrintReflaction(address _tokenAdd, address _sender) external;
    function printBal() external view  returns(uint);
}

contract Printer is IPrinter {

    ///////// using libraries \\\\\\\\\
    using SafeMath for uint256;

    address  _callerToken;  // authority contract which can regulate this 
    address public printTokenAddress; // printing token address
    address public  nativeCoin; // native Wrraped coin address 
    address  routerAddress; //dex router address
    
         //////////////// contract instances \\\\\\\\\\\\\\\\\\
    IERC20 printToken;     
    Istable liquidityAddingToken;
    IDEXRouter router;
      
    mapping (address => mapping(address => uint256)) shareholderClaims;  // USd reward claiming mapping

    uint256 public totalRewardReflaction; // total printing token amount of Usd
    uint256 public totalRewardDistributed;  // to be shown in UI
    uint256 public totalPayableReward;  // total claimable reward amount



    modifier onlyToken() {
        require(msg.sender == _callerToken); _;
    }

    constructor (address _routerAdd, address _printToken, address _nativeCoin) {
        require(_routerAdd != address(0), "invalid router address");
        require(_printToken != address(0), "invalid pegToken Address");
        require(_nativeCoin != address(0), "invalid nativeCoin address");
        routerAddress = _routerAdd;
        router = IDEXRouter(_routerAdd);
        printTokenAddress = _printToken;
        printToken = IERC20(_printToken);
        nativeCoin = _nativeCoin;
        _callerToken = msg.sender;
    }

    receive() external payable { }

   function surplasBal() external view returns(uint){
       return (totalRewardReflaction.sub(totalRewardDistributed)).sub(totalPayableReward);
   }


   function printBal() external view  returns(uint){
       return printToken.balanceOf(address(this));
   }
    
     
    function setPrintToken(address _printToken)
        external
        onlyToken
    {   
        require(_printToken != address(0), "invalid  printer addiing address");
        printTokenAddress = _printToken;
        printToken = IERC20( _printToken);
    }

    event HolderRewardAdded(address _shareHolder, uint _amount);

    function setShare(address shareholder, uint256 amount) external override onlyToken {
      shareholderClaims[printTokenAddress][shareholder] = shareholderClaims[printTokenAddress][shareholder].add(amount);
      totalPayableReward = totalPayableReward.add(amount);
      emit  HolderRewardAdded(shareholder, amount);
    }

    function shareHolderBal(address _tokenAdd, address shareHolder) external view override returns(uint){
    return shareholderClaims[_tokenAdd][shareHolder];
    }

    event swapPrintedToken(uint _printAmount);

    function deposit(bool _usdTokenLiquidity, uint _liquidityPercentage) external payable override onlyToken returns(uint){
        uint liquidityAmount;
        uint256 balanceBefore = printToken.balanceOf(address(this));   

        address[] memory path = new address[](2);
        path[0] = nativeCoin;
        path[1] = printTokenAddress;

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amount = (printToken.balanceOf(address(this))) - balanceBefore;
    
        emit swapPrintedToken(amount);
        if(_usdTokenLiquidity == true){
           liquidityAmount = (amount.mul(_liquidityPercentage)).div(1000);
           printToken.transfer(_callerToken, liquidityAmount);
        }
        totalRewardReflaction = totalRewardReflaction.add(amount.sub(liquidityAmount));
        return liquidityAmount;   
    }
    

    function avaxSwap(address _tokenAdd, uint tokenAmount) external  onlyToken returns(uint){
        IERC20(_tokenAdd).approve(routerAddress, tokenAmount);
        uint256 initialSwapBal = (_callerToken).balance;
        
        address[] memory path = new address[](2);
        path[0] = _tokenAdd;
        path[1] = nativeCoin;
       

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            _callerToken,
            block.timestamp
        );
        uint256 swapAmount = (_callerToken.balance).sub(initialSwapBal);
        return swapAmount;
    }

    function withdrawToken(address _tokenAdd, address receiver, uint amount) external onlyToken{
        require(receiver != address(0));
        totalRewardDistributed = totalRewardDistributed.add(amount);
        totalPayableReward = totalPayableReward.sub(amount);
        IERC20(_tokenAdd).transfer(receiver, amount);
    }

   event TransferPrint(address from, address to, uint amount);

    function claimPrintReflaction(address _tokenAdd, address _sender) external onlyToken{
        require(shareholderClaims[_tokenAdd][_sender] >0, "insufficinet balances");
        uint amount = shareholderClaims[_tokenAdd][_sender];
        shareholderClaims[_tokenAdd][_sender] = 0;
        totalRewardDistributed = totalRewardDistributed.add(amount);
        totalPayableReward = totalPayableReward.sub(amount);
        printToken.transfer( _sender, amount) ;
        emit TransferPrint(address(this), _sender, amount);
    }

}




contract SHARK is IERC20 {

    ///////////////////// math library \\\\\\\\\\\\\\\\\\\\\\\
    using SafeMath for uint;

    address public Owner;

    ///////////////////// ERC20 token's meta data \\\\\\\\\\\\\\\\\\\\\\\
    string constant _name = "Shark";
    string constant _symbol = "SRK";
    uint8 constant _decimals = 18;
    uint constant   maxSupply = 1000000000*(10**_decimals); // 1 bilion hardcoded;
    uint public totalSupply = (maxSupply.mul(80)).div(100); // initial supply 0.9 bilion
    

    //////////////// events \\\\\\\\\\\\\\\\\\\\

        ///////////////////////////////////////trading mode \\\\\\\\\\\\\\\\\\\\\\\\\\\\
    bool public printingMode = true;
    bool public nativeReflaction = true;
    bool public printTokenLiquidity = true;
    bool public antibotMode = false;
    bool public transferTax = true;
    uint public mode = 2;

        ////////////////////////////////// additional token info \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    address  nativeCoin;
    address public printToken = 0x04068DA6C83AFCFA0e13ba15A6696662335D5B75;
    address  selfliquidityTokenAdd;
    address  usdLiquidityTokenAdd;
    address public tfusdAdd  ;

    //token unique variables(fee calculating variables)
    uint constant _taxCalcDenominator = 1000; // fee calculation denominator by 1000
    //taxes on buy
    uint buyMarketingFee = 20;
    uint buyTreseryFee = 10;
    uint buyReflactionFee = 10;
    uint buyPrintFee = 60;
    //taxes on sell
    uint sellMarketingFee = 30;
    uint sellTreseryFee = 20;
    uint sellReflactionFee = 10;
    uint sellPrintFee = 40;
    
    uint tokenLiquidity = 500;

    uint constant maxTotalFee = 200;  // tax cant exceed over 20% (except antibot mode)

    uint public buyTaxFee = buyMarketingFee + buyTreseryFee + buyReflactionFee + buyPrintFee;
    uint public sellTaxFee = sellMarketingFee + sellPrintFee + sellReflactionFee + sellTreseryFee;

    //additional Fee
    uint contractReflactionPortion = 900;
    uint gurdianLpRewardFee = 10; //1% of token liquidity;
    uint basicModeTaxDenominator = 10000000; // 0.00001% tax will be deducted at basicMode
    uint largeSellFee = 30; // large amount of sell 0.1% of totalSupply
    uint mediumSellFee = 30; // medium amount of sell 0.05% of totalSupply
    uint HFTFee = 30; //High frequency trade fee (if anyone trade within short time period below 24 hours)
    uint quickSellFee = 20; //quick sell like if anyone sell within a week
    uint antibotFee = 500;
    // storing on buy swaping tax amount to swap later on sell
    uint public  reserveMarketingCollection; 
    uint  reserveTreseryCollection;
    uint  reservePrintingCollection;
    
    //thresholds
    uint public LPDriverThreshold = (maxSupply.mul(10)).div(_taxCalcDenominator);  // 1% of totalSupply
    uint  MaxWalletAmount = (maxSupply.mul(10)).div(_taxCalcDenominator);
    uint  MaxTxAmount = (MaxWalletAmount.mul(200)).div(_taxCalcDenominator);
    uint  largeSellAmountThreshold = maxSupply.div(1000); // 0.1% of totalSupply
    uint  mediumSellAmountThreshold = maxSupply.div(2000); // 0.05% of totalsupply
    uint  HFTTimingThreshold = 1*60*60; // 1 hour
    uint  quickSellTimingThreshold = 7*24*60*60; // in a week;
    uint  boosterThreshold = 1000000*(10**_decimals); // peg booster threshold 
   
    
    //price goes up variables
    uint pegBoostingRate = 250;
    uint appreciateRate = 250;
    uint public reserveBooster;

    
     //struct for contract internal functions
    struct Share {
        uint256 lastRewardPercantage;
        uint256 totalUSDTRewards;
        uint256 totalNativeRewards;
    }

    struct vestingInfo {
        bool isvesting;
        uint periodThresHold;
        uint amountThresHold;
    }

    
    struct balanceInfo {
       uint256 balance;
       uint256 updatedAt;
       uint256 lastSellAt;
    }



    mapping(address => balanceInfo)  _balances;
    mapping(address => mapping(address => uint256)) _allowances;
    // token internal mapping
    mapping(address => bool) public isWhitelisted;
    mapping(address => vestingInfo) public isAddedVesting;
    mapping(address => bool) public isFeeExempt;
    mapping(address => bool) public isGurdian;
    mapping(address => bool)  public isManager;
    mapping(address => bool)  isExcludeReWard;
    mapping(address => bool) public isMaxExempt;
    //reflaction related mapping
    mapping(address => uint256) private holderByIndex;
    mapping(address => uint256) private shareHolderClaims;
    mapping(address => Share) public Shares;
    address[]  tokenHolders;
    
    uint  NumberOfGurdian;
    uint constant MaxNumberOfGurdian = 20;
    



    //tax fee receiver
    address  marketingFeeReceiver = 0xE938F2776dC76f3cD70e17c62f5Cd0Bb3dAD9f23;
    address  treseryFeeReceiver   = 0xE938F2776dC76f3cD70e17c62f5Cd0Bb3dAD9f23;



    Printer printer;
    address public printerAddress;
    
    //dex variables
    address public routerAddress;
    IDEXRouter  router;
    IDEXPair lTank;
    address public tAddress;
    bool  swapEnabled = true;

    bool inSwap;
    modifier swaping() { inSwap = true; _; inSwap = false; }

    modifier onlyOwner() {
        require(msg.sender == Owner, "only owner can call the function");
        _;
    }

    modifier onlyManager() {
        require(msg.sender == Owner || isManager[msg.sender] == true, "caller isnt gurdian nor Owner");
        _;
    }

    modifier onlyValidSender(address sender, address receipient, uint amount){
        if(isAddedVesting[sender].isvesting == true && receipient == tAddress){
            if(_balances[sender].lastSellAt != 0){
               require((block.timestamp).sub(_balances[sender].lastSellAt) >= isAddedVesting[sender].periodThresHold , "sender is added to vesting mode , cant transfer before the period is completed");
            }
               require(amount <= (amount.mul(isAddedVesting[sender].amountThresHold)).div(_taxCalcDenominator), "sender is added to vesting mode , cant sell more than 10% of balance amount");
        }

       if(mode == 0 && !antibotMode || mode == 1 && !antibotMode){
            require(isWhitelisted[receipient] == true, "only whitelisted can tx");
            require(isWhitelisted[sender] == true, "only whitelist mode can tx");
        }
        
        _;
    }

    modifier printPaymentFirst() {
        if (msg.sender != address(this)) {
            uint amount = printer.shareHolderBal(printToken, msg.sender);
            if ( amount > 0) {
                Shares[msg.sender].totalUSDTRewards = 0;
                try printer.claimPrintReflaction(printToken, msg.sender) {} catch {}
                
            }
        }
        _;
    }

    modifier lpdriver(bool permission){
        if(_balances[address(this)].balance > LPDriverThreshold && mode != 3 && permission == true){
            _lpDriver();
        }
        _;
    }

 

 
constructor(address _routerAddress) {
        Owner = msg.sender;
        routerAddress = _routerAddress;
        router = IDEXRouter(routerAddress);
        nativeCoin = router.WETH();
        tAddress = IDEXFactory(router.factory()).createPair(router.WETH(), address(this));
        lTank = IDEXPair(tAddress);

        printer = new Printer(routerAddress, printToken, router.WETH());
        printerAddress = address(printer);
        
        tokenHolders.push(msg.sender);
        
        _allowances[address(this)][address(router)] = maxSupply;
        approve(routerAddress, maxSupply);
        _balances[msg.sender].balance = totalSupply; 
    }

    receive() external payable { }

    ////////////// standard function of IERC20Metadata and IER20 interface \\\\\\\\\\\\\\\\\\\\
    function name() external pure override returns (string memory) {
        return _name;
    }

    function symbol() external pure override returns (string memory) {
        return _symbol;
    }

    function decimals() external pure override returns (uint8) {
        return _decimals;
    }


    function balanceOf(
        address account
    ) public view override  returns (uint256) {
        return _balances[account].balance;
    }
    


    function approve(
        address spender,
        uint256 amount
    ) public override printPaymentFirst lpdriver(true) returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function allowance(
        address holder,
        address spender
    ) external view override returns (uint256) {
        return _allowances[holder][spender];
    }

    function transfer(
        address to,
        uint256 amount
    ) external override onlyValidSender(msg.sender, to, amount)   returns (bool) {

        return _transfer(msg.sender, to, amount);
    }
    
    
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external override onlyValidSender(from, to, amount) returns (bool) {
        return _transfer(from, to, amount);
    }



    function _basicTransfer(address sender, address to, uint amount) internal returns(bool){
        if(_balances[to].balance == 0 && to != tAddress && to != address(this)) {       
            _addTokenHolder(to);  
        }
        _balances[to].balance = (_balances[to].balance).add(amount);
        require(isMaxExempt[to] ? true : _balances[to].balance <= MaxWalletAmount, "Max wallet amount exceed");
        _balances[to].updatedAt = block.timestamp;
        _balances[sender].updatedAt = block.timestamp; 
        emit Transfer(sender, to, amount);
        return true;
    }

    
   

    function _transfer(
        address from,
        address to,
        uint256 amount
     ) internal printPaymentFirst lpdriver(from != tAddress && to != tAddress) returns (bool) {
        require(from != address(0), "invalid sender");
        require(to != address(0), "invalid receiver");
        require(isMaxExempt[from] ? true : amount <= MaxTxAmount, "Max Tx Amount Exceed");
        require(_balances[from].balance >= amount, "insufficient amount");
        uint feeAmount;
        bool W2W = from != tAddress && to != tAddress;
        if(_allowances[from][routerAddress] > 0 && from != address(this)){
            _allowances[from][routerAddress] = (_allowances[from][routerAddress]).sub(amount);
        }
   
        _balances[from].balance = (_balances[from].balance).sub(amount);

        
       
        bool isTransferTax = W2W && transferTax == true && mode != 3 && isFeeExempt[from] == false && _balances[address(this)].balance < LPDriverThreshold;
        bool isTakeFee = shouldTakeFee(from, to) && mode != 3 && W2W == false ;
          
        if(isTakeFee || isTransferTax){
           feeAmount = takeFee(from, to, amount, W2W);
           if(to == tAddress || W2W){
            uint totalSwapToken = reserveMarketingCollection + reserveTreseryCollection + reservePrintingCollection;
            if(shouldSwapBack(totalSwapToken)){
                swapBack();
            }
            _balances[from].lastSellAt = block.timestamp;
           
        }}  

        if( mode == 1 || mode == 2 || mode == 0 || W2W){
          _basicTransfer(from, to, amount.sub(feeAmount));
        }

        if(mode == 3 && from == tAddress){
                _basicTransfer(from, to, amount.sub(feeAmount));
                bpFixing(amount, feeAmount);  
        }

        if(mode == 3 && to == tAddress){
                spFixing(from, amount, feeAmount);
        }

        return true;
    }


    function takeFee(address sender, address receipient, uint _amount, bool isTransfer) private returns(uint){
      
        uint feeAmount;
        uint nativeReflactionAmount;
        uint contractAmount;
        uint printingAmount;
        uint marketingAmount;
        uint treseryAmount;
        uint antibotTaxAmount;
        uint amount = _amount;
        address from = sender;
        if(mode == 0){
                feeAmount = amount.div(basicModeTaxDenominator);
                reserveMarketingCollection += feeAmount;
                contractAmount = contractAmount.add(feeAmount);
        }
        if(mode == 2 || mode == 3){
        if(sender == tAddress || isTransfer){
            feeAmount = (amount.mul(buyTaxFee)).div(_taxCalcDenominator);
            nativeReflactionAmount = nativeReflaction ? (amount.mul(buyReflactionFee)).div(_taxCalcDenominator) : 0;
            printingAmount = printingMode ? (amount.mul(buyPrintFee)).div(_taxCalcDenominator) : 0;
            treseryAmount = (amount.mul(buyTreseryFee)).div(_taxCalcDenominator);
            marketingAmount =  feeAmount.sub(nativeReflactionAmount + printingAmount + treseryAmount);
            reserveMarketingCollection += marketingAmount;
            reserveTreseryCollection += treseryAmount;
            reservePrintingCollection += printingAmount;
            contractAmount = marketingAmount + treseryAmount + printingAmount;
            
        }
        
        if(receipient == tAddress && sender != address(this)){
            feeAmount = (amount.mul(sellTaxFee)).div(_taxCalcDenominator);
            nativeReflactionAmount = nativeReflaction ? (amount.mul(sellReflactionFee)).div(_taxCalcDenominator) : 0;
            printingAmount = printingMode ? (amount.mul(sellPrintFee)).div(_taxCalcDenominator) : 0;
            treseryAmount = (amount.mul(sellTreseryFee)).div(_taxCalcDenominator);
            reserveTreseryCollection += treseryAmount;
            reservePrintingCollection += printingAmount;
            
            uint largeAmountTax = amount >= largeSellAmountThreshold ? (amount.mul(largeSellFee)).div(_taxCalcDenominator) : 0;
            uint mediumAmountTax = amount >= mediumSellAmountThreshold ? (amount.mul(mediumSellFee)).div(_taxCalcDenominator) : 0;
            uint HFTaxAmount = (block.timestamp).sub(_balances[from].updatedAt) <= HFTTimingThreshold ? (amount.mul(HFTFee)).div(_taxCalcDenominator) :
           (block.timestamp).sub(_balances[from].updatedAt) <= quickSellTimingThreshold ? (amount.mul(quickSellFee)).div(_taxCalcDenominator) : 0;
            
            {
            feeAmount = feeAmount + largeAmountTax + mediumAmountTax + HFTaxAmount;
            marketingAmount = feeAmount.sub( printingAmount + treseryAmount + largeAmountTax + mediumAmountTax + HFTaxAmount);
            reserveMarketingCollection = reserveMarketingCollection.add(marketingAmount);
            contractAmount = contractAmount.add(feeAmount.sub(nativeReflactionAmount));
            }
        }}



        if(antibotMode == true && mode != 2){
            require(sender == tAddress || receipient == tAddress);
                if(isWhitelisted[from] == false || isWhitelisted[receipient] == false){
                    antibotTaxAmount = (amount.mul(antibotFee)).div(_taxCalcDenominator);
                    if(antibotTaxAmount > feeAmount){
                        uint antibotMarketingAmount = antibotTaxAmount.sub(feeAmount);
                        feeAmount = feeAmount.add(antibotMarketingAmount);
                        reserveMarketingCollection = reserveMarketingCollection.add(antibotMarketingAmount);
                        contractAmount = contractAmount.add(antibotMarketingAmount);
                    }
                }
        }


        if(nativeReflaction == true && nativeReflactionAmount > 0){
            _dToken(nativeReflactionAmount, 1);
        }

        if(contractAmount > 0){
        _basicTransfer(sender, address(this), contractAmount);
        }

        return feeAmount;
    }



    //reward distribute events
    event DistributeRewards(uint totalRewardAmount);

    function _dToken(uint _totalAmount, uint num) internal {
        //1 for native token  2 for print token
       uint totalHoldedTokens = totalSupply.sub(_balances[tAddress].balance);
       uint totalDistributed;
       uint contractReflaction = (_totalAmount.mul(contractReflactionPortion)).div(_taxCalcDenominator);
       uint distributeAmount = _totalAmount.sub(contractReflaction);
        for (uint i = 0; i < tokenHolders.length; i++) {
            uint256 rewardAmount ;
          if(isExcludeReWard[tokenHolders[i]] == false){
              uint holderPercantage = ((_balances[tokenHolders[i]].balance).mul(1000)).div(totalHoldedTokens);
            Shares[tokenHolders[i]].lastRewardPercantage = holderPercantage;
            rewardAmount = ((_balances[tokenHolders[i]].balance).mul(distributeAmount)).div(totalHoldedTokens); 
            if (num == 1) {
                Shares[tokenHolders[i]].totalNativeRewards = Shares[
                    tokenHolders[i]
                ].totalNativeRewards.add(rewardAmount);
                _balances[tokenHolders[i]].balance = (_balances[tokenHolders[i]].balance).add(rewardAmount);
                totalDistributed = totalDistributed.add(rewardAmount);
            }
            if (num == 2) {
                Shares[tokenHolders[i]].totalUSDTRewards = Shares[
                    tokenHolders[i]
                ].totalUSDTRewards.add(rewardAmount);
                try printer.setShare(tokenHolders[i], rewardAmount) {} catch {}
                totalDistributed = totalDistributed.add(rewardAmount);
            }}}
        uint contractAmount = contractReflaction.add(distributeAmount.sub(totalDistributed));
           if(num == 1){
               Shares[address(this)].totalNativeRewards = Shares[
                    address(this)
                ].totalNativeRewards.add(contractAmount);
               _balances[address(this)].balance  = (_balances[address(this)].balance).add(contractAmount);

            }
            if(num ==2){
               Shares[address(this)].totalUSDTRewards = Shares[
                    address(this)
                ].totalUSDTRewards.add(contractAmount);                
               try printer.withdrawToken(printToken, address(this), contractAmount) {} catch {}
            }
        
        emit DistributeRewards(_totalAmount);
    }


    
   

    event DistributeSwapBack(uint Reflaction_Print, uint WAVAX_liquidity, uint WAVAX_marketing );

    function swapBack() public swaping {
        uint totalAmountToSwap = reserveMarketingCollection + reserveTreseryCollection + reservePrintingCollection;
        if(totalAmountToSwap > 0){
           require(_balances[address(this)].balance >= totalAmountToSwap, "insufficient contract balance to swap");      
              uint256 printingAmount;
              uint256 treseryAmount;
              uint256 marketingAmount;
              uint256 usdTokenLiquidity;
 
        uint totalAmount = reserveMarketingCollection.add(reserveTreseryCollection);
        if(printingMode == true){
            totalAmount = totalAmount.add(reservePrintingCollection);
        }

        uint256 initialSwapBal = (address(this)).balance;
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = nativeCoin;
       

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            totalAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
        uint256 swapAmount = ((address(this)).balance).sub(initialSwapBal);


        if(reserveTreseryCollection > 0){
           treseryAmount = (swapAmount.mul(reserveTreseryCollection)).div(totalAmount);
            payable(treseryFeeReceiver).transfer(treseryAmount);
            reserveTreseryCollection = 0;
        }
        
        if(printingMode == true){
        printingAmount = (swapAmount.mul(reservePrintingCollection)).div(totalAmount);
        } 
        

        if(printingAmount > 0 && printingMode == true){     
         usdTokenLiquidity = printer.deposit{value: printingAmount}(printTokenLiquidity, tokenLiquidity) ;
            uint surplasPrintBal = printer.surplasBal();
            _dToken(surplasPrintBal, 2);
            reservePrintingCollection = 0;
        }

        if(usdTokenLiquidity > 0 && printTokenLiquidity == true){
            Istable(tfusdAdd).mint(usdTokenLiquidity);
            IERC20(printToken).approve(routerAddress, usdTokenLiquidity);
            IERC20(tfusdAdd).approve(routerAddress, usdTokenLiquidity);
            router.addLiquidity(
                printToken,
                tfusdAdd,
                usdTokenLiquidity,
                usdTokenLiquidity,
                0,
                0,
                Owner,
                block.timestamp
            );
        }


        
        marketingAmount = swapAmount.sub(treseryAmount + printingAmount);
        reserveMarketingCollection = 0;
        payable(marketingFeeReceiver).transfer(marketingAmount);
       
        emit DistributeSwapBack( printingAmount, treseryAmount, marketingAmount);  
        }
    }

    function _lpDriver() private {
            uint gurdianReward;
            uint256 lpDriverAmount;
            uint256 lpDriverAvax;
            lpDriverAmount = LPDriverThreshold.div(2);
            lpDriverAvax = LPDriverThreshold.sub(lpDriverAmount);
            _balances[printerAddress].balance = (_balances[printerAddress].balance).add(lpDriverAvax);
            _balances[address(this)].balance = (_balances[address(this)].balance).sub(lpDriverAvax);
            uint liquidityAvaxAmount =  printer.avaxSwap(address(this), lpDriverAvax);
            (, , uint nativeLiquidity) = router.addLiquidityETH{value:liquidityAvaxAmount}(
                address(this),
                lpDriverAmount,
                0,
                0,
                address(this),
                block.timestamp
            );
          if(isGurdian[msg.sender] == true){
            gurdianReward = (nativeLiquidity.mul(gurdianLpRewardFee)).div(_taxCalcDenominator);
            IERC20(selfliquidityTokenAdd).transfer(msg.sender, gurdianReward);
          }
          
        
    }

    function selfLpDriver() external {
        require(isGurdian[msg.sender] == true|| isManager[msg.sender] == true || msg.sender == Owner);
        require(_balances[address(this)].balance > LPDriverThreshold && mode != 3);
        _lpDriver();
    }

    

    event Ladder(uint reserve0, uint reserve1 , uint amountWithouFee, uint expectedPairAmount, uint initialPairBalance, uint appreciationAmount, uint calculativeToken);
    function bpFixing( uint amount, uint feeAmount) private {
           uint mintAmount;
           uint contractAmount;
           uint newAmount;
           uint appreciationAmount;
           uint expectedPairAmount;
           uint amountWithoutFee = amount.sub(feeAmount);
           address tokenA = lTank.token0();
            (uint reserve0, uint reserve1, ) = lTank.getReserves();
            uint initialPairBalance = _balances[tAddress].balance;
            if(tokenA == address(this)){
                uint amountIn = router.getAmountIn(amount, reserve1, reserve0);
                uint tokenPrice = (reserve1.mul(10**_decimals)).div(reserve0);
                newAmount = ((10**_decimals).mul(reserve1.add(amountIn))).div(tokenPrice);        
            }else{
                uint amountIn = router.getAmountIn(amount, reserve0, reserve1);
                uint tokenPrice = (reserve0.mul(10**_decimals)).div(reserve1);
                newAmount = ((10**_decimals).mul(reserve0.add(amountIn))).div(tokenPrice);
            }
         
        if(appreciateRate > 0 && pegBoostingRate > 0){
            appreciationAmount = (amountWithoutFee.mul(appreciateRate)).div(_taxCalcDenominator);
            uint boostingAmount = (amountWithoutFee.mul(pegBoostingRate)).div(_taxCalcDenominator);
            reserveBooster = reserveBooster.add(boostingAmount);
        }
        expectedPairAmount = newAmount.sub(appreciationAmount);
        if(reserveBooster >= boosterThreshold){
            expectedPairAmount = expectedPairAmount.sub(boosterThreshold);
            reserveBooster = reserveBooster.sub(boosterThreshold);
        }
        
        if(expectedPairAmount > initialPairBalance){
            uint supplyAmount = expectedPairAmount.sub(initialPairBalance);
            uint swapRequiredToken = reserveMarketingCollection + reserveTreseryCollection + reservePrintingCollection;
            require(_balances[address(this)].balance >= swapRequiredToken, "contract is imbalanced");
            uint contractReserveBal = (_balances[address(this)].balance).sub(swapRequiredToken);
                if(contractReserveBal >= supplyAmount){
                    _balances[address(this)].balance = (_balances[address(this)].balance).sub(supplyAmount);
                    _balances[tAddress].balance = (_balances[tAddress].balance).add(supplyAmount);
                    emit Transfer(address(this), tAddress, supplyAmount); 
                }else{
                    
                    if(contractReserveBal > 0){
                         _balances[address(this)].balance = (_balances[address(this)].balance).sub(contractReserveBal);
                         _balances[tAddress].balance = (_balances[tAddress].balance).add(contractReserveBal);
                         emit Transfer(address(this), tAddress, contractReserveBal);
                    }
                  if(totalSupply != maxSupply){
                     mintAmount = supplyAmount.sub(contractReserveBal);
                    if(totalSupply.add(mintAmount) > maxSupply){
                        mintAmount = maxSupply.sub(totalSupply);
                        mode = 2;
                    }
                    totalSupply = totalSupply.add(mintAmount);
                    _balances[tAddress].balance = (_balances[tAddress].balance).add(mintAmount);
                    }else{
                      mode = 2;
                    }

                }
                 
        }else{
         contractAmount = contractAmount.add(initialPairBalance.sub(expectedPairAmount));
         _balances[tAddress].balance = (_balances[tAddress].balance).sub(contractAmount);
         _balances[address(this)].balance = (_balances[address(this)].balance).add(contractAmount);
            emit Transfer(tAddress, address(this), contractAmount);
        }
        
       {
            uint _mintAmount = mintAmount;
            emit Ladder( reserve0, reserve1, amountWithoutFee, expectedPairAmount, initialPairBalance,  appreciationAmount, _mintAmount );
       }
          
    }

    function spFixing(address sender, uint amount, uint feeAmount) private {
           uint contractAmount;
           uint newAmount;
           uint tokenPrice;
           uint appreciationAmount;
           uint amountWithoutFee = amount.sub(feeAmount);
            address tokenA = lTank.token0();
            (uint reserve0, uint reserve1, ) = lTank.getReserves();
           uint initialpairBalance = _balances[tAddress].balance;
           uint expectedPairAmount;

            if(tokenA == address(this)){
                uint  amountOut = router.getAmountOut(amount, reserve0, reserve1);
                tokenPrice = (reserve1.mul(10**_decimals)).div(reserve0);
                newAmount = ((10**_decimals).mul(reserve1.sub(amountOut))).div(tokenPrice);
            }else{
               uint amountOut = router.getAmountOut(amount, reserve1, reserve0);
               tokenPrice = (reserve0.mul(10**_decimals)).div(reserve1);
               newAmount = ((10**_decimals).mul(reserve0.sub(amountOut))).div(tokenPrice);         
            }
            
            if(appreciateRate > 0 && pegBoostingRate > 0){
                    appreciationAmount = (amountWithoutFee.mul(appreciateRate)).div(_taxCalcDenominator);
                    uint boostingAmount = (amountWithoutFee.mul(pegBoostingRate)).div(_taxCalcDenominator);
                   reserveBooster = reserveBooster.add(boostingAmount);
               }
               expectedPairAmount = newAmount.add(appreciationAmount);
            if(reserveBooster >= boosterThreshold){
                   expectedPairAmount = expectedPairAmount.sub(boosterThreshold);
                    reserveBooster = reserveBooster.sub(boosterThreshold);
                }
            
            
            uint  expectedDiff = initialpairBalance.sub(expectedPairAmount); 

            _balances[tAddress].balance = expectedPairAmount.sub(amount);
            contractAmount = amountWithoutFee.add(expectedDiff);
            lTank.sync(); //force reserve to fix peg
            _balances[tAddress].balance = expectedPairAmount;

            if(contractAmount > 0){
            _balances[address(this)].balance = (_balances[address(this)].balance).add(contractAmount);
            emit Transfer(tAddress, address(this), contractAmount);
            }
            {
              uint _contractAmount = contractAmount;
              emit Transfer(sender, tAddress, amountWithoutFee);
              emit Ladder(reserve0, reserve1,  amountWithoutFee, expectedPairAmount, initialpairBalance,  appreciationAmount, _contractAmount); 
            }
            
    }

    



                                             ///////// state Update functions \\\\\\\\\\\
   //-----------------------------------------------------------------------------------------------------------------------------------


    function shouldSwapBack(uint256 _amount) private view returns (bool) {
        return msg.sender != tAddress
        && !inSwap
        && swapEnabled
        && _balances[address(this)].balance >= _amount;
    }
  
    function shouldTakeFee(address sender, address receiver) private view returns (bool) {
         bool permission = !isFeeExempt[sender];
         if(sender == tAddress && isFeeExempt[receiver]){
             permission = false;
         }
        return permission;
    }

    function _addTokenHolder(address _holder) private {
        holderByIndex[_holder] = tokenHolders.length;
        tokenHolders.push(_holder);
    }



    function updateFeeExempt(address[] calldata addressArray, bool exempt ) external onlyManager{
        for(uint i = 0 ; i < addressArray.length ; i++){
             require(addressArray[i] != address(0), "invalid address");
             isFeeExempt[addressArray[i]] = exempt;
        }
        
    }

    function updatePegBooster(uint _pegBoosterrate, uint appreciationAmount, uint _boosterThreshold, uint _driverFee) external onlyManager{
        pegBoostingRate = _pegBoosterrate;
        appreciateRate = appreciationAmount;
        boosterThreshold = _boosterThreshold;
        LPDriverThreshold = (maxSupply.mul(_driverFee)).div(_taxCalcDenominator);
    }



    function updateWhitelisted(address[] calldata  _holders, bool position) external onlyManager {
        for(uint i =0 ; i < _holders.length; i++){
            require(_holders[i] != address(0), "invalid Address");
            isWhitelisted[_holders[i]] = position;
        }

    }

    function updateVesting(address[] calldata addressArray, bool _switch, uint[] calldata periodArray, uint[] calldata amountArray ) external onlyManager{
            require(addressArray.length == periodArray.length, "invalid Vesting periods");
            require(addressArray.length == amountArray.length, "invalid Vesting amounts");
            
                for(uint i = 0; i < addressArray.length ; i++){
                    if(addressArray[i] != address(0)){
                    if(_switch == true){
                        isAddedVesting[addressArray[i]].isvesting = true;
                        isAddedVesting[addressArray[i]].periodThresHold = periodArray[i];
                        isAddedVesting[addressArray[i]].amountThresHold = amountArray[i].mul(10);
                    }else{
                        isAddedVesting[addressArray[i]].isvesting =false;
                    }

            }}

    }

    function updateManager(address _add, bool position) external onlyOwner{
        require(_add != address(0));
        isManager[_add]  = position;
    }

    function upgradeGurdian(address[] calldata addressArray, bool rank) external onlyManager{
      if(rank == true) {
        require((NumberOfGurdian + addressArray.length) <= MaxNumberOfGurdian, "max number of gurdian exceed");
      }else{ 
        require(NumberOfGurdian >= addressArray.length, "no gurdian to remove");
      }
      for(uint i = 0; i < addressArray.length ; i++){
             if(addressArray[i] != address(0)){
               isGurdian[addressArray[i]] = rank;
               rank == true ? NumberOfGurdian.add(1) : NumberOfGurdian.sub(1);
        }}

    }



    function updateMaxExempt(address[] calldata addressArray, bool option) external onlyManager{
        for(uint i = 0 ; i < addressArray.length ; i++){
             if(addressArray[i] != address(0)){
           isMaxExempt[addressArray[i]] = option;
        }}
    }

    function updateRewardExempt(address[] calldata addressArray, bool option) external onlyManager{
         for(uint i = 0 ; i < addressArray.length ; i++){
            if(addressArray[i] != address(0)){
           isExcludeReWard[addressArray[i]] = option;
            }
        } 
    }


 

    function claimReward(address _tokenAdd) external {
             require(printer.shareHolderBal(_tokenAdd, msg.sender) > 0 , "insufficient balance");
             try printer.claimPrintReflaction(_tokenAdd, msg.sender) {} catch {}
    }

   

    function updatePeriodThreshold(
        uint _hftPeriod,
        uint _quickSellPeriod
    ) external onlyManager{
        
        HFTTimingThreshold = _hftPeriod;
        quickSellTimingThreshold = _quickSellPeriod;
    }

    function updateMax(
        uint _maxTx,
        uint _maxWallet
    ) external onlyManager returns(bool){
        MaxWalletAmount = _maxWallet.mul(10**_decimals);
        MaxTxAmount = _maxTx.mul(10**_decimals);
        require(MaxWalletAmount > MaxTxAmount, "Max tx exceed maxWallet");
        return true;
    }


    function switchAntibot(uint _antibotFee)external onlyManager{
        require(mode == 0 || mode == 1);
        antibotMode = true;
        antibotFee = _antibotFee;
    }

    function switchMode(
        bool _prinitingSwitch,
        bool _nativeReflactionSwitch,
        bool _tokenLiquiditySwitch,
        bool _transferSwitch,
        uint _mode,
        bool _payit
        )external onlyManager{
            
        if(_payit == true && reservePrintingCollection > 0 &&  shouldSwapBack(reservePrintingCollection + reserveMarketingCollection + reserveTreseryCollection)){
            swapBack();
           }
 
            printingMode = _prinitingSwitch;
            nativeReflaction = _nativeReflactionSwitch;
            printTokenLiquidity = _tokenLiquiditySwitch;
            antibotMode = false;
            transferTax = _transferSwitch;
            mode = _mode;
        }


    function updateBuyandSellTax(
        uint marketingFee,
        uint treseryFee,
        uint printTokenFee,
        uint reflactionFee, 
        bool _option // true for buy and false for sell
    ) external onlyManager  {
        uint totalTax = marketingFee + treseryFee + printTokenFee + reflactionFee;
        require(totalTax.add(HFTFee.add(largeSellFee)) <= maxTotalFee);
        require(totalTax.add(HFTFee.add(mediumSellFee)) <= maxTotalFee);
        require(totalTax.add(quickSellFee.add(mediumSellFee)) <= maxTotalFee);
        require(totalTax.add(quickSellFee.add(largeSellFee)) <= maxTotalFee);
        require(totalTax <= maxTotalFee, "total tax exceed the max total tax");
        if(_option == true){
             buyMarketingFee = marketingFee.mul(10);
             buyTreseryFee = treseryFee.mul(10);
             buyReflactionFee = reflactionFee.mul(10);
             buyPrintFee = printTokenFee.mul(10);
             buyTaxFee = totalTax.mul(10);
        }else{
              sellMarketingFee = marketingFee.mul(10);
              sellTreseryFee = treseryFee.mul(10);
              sellReflactionFee = reflactionFee.mul(10);
              sellPrintFee = printTokenFee.mul(10);
              sellTaxFee = totalTax.mul(10);
        }
       
    }

    



    function sell(uint amount) external returns(uint){
        uint avaxAmount;
        uint feeAmount;
        if(shouldTakeFee(msg.sender, tAddress)){
           feeAmount = takeFee(msg.sender, tAddress, amount, false);
        }
        uint amountToSell = amount.sub(feeAmount);
        _balances[msg.sender].balance = (_balances[msg.sender].balance).sub(amount);
        _basicTransfer(msg.sender, address(this), amount.sub(feeAmount));
        uint256 initialSwapBal = (msg.sender).balance;
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = nativeCoin;
       

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSell,
            0,
            path,
            msg.sender,
            block.timestamp
        );
        avaxAmount = ((msg.sender).balance).sub(initialSwapBal);
        return avaxAmount;
    }

    function updateAdditionalTax(
        uint _hftTax,
        uint _quickSellTax,
        uint _mediumSellTax,
        uint _largerSellTax
    ) external onlyManager {
       require(sellTaxFee.add(_hftTax.add(_largerSellTax)) <= maxTotalFee);
       require(sellTaxFee.add(_hftTax.add(_mediumSellTax)) <= maxTotalFee);
       require(sellTaxFee.add(_quickSellTax.add(_mediumSellTax)) <= maxTotalFee);
       require(sellTaxFee.add(_quickSellTax.add(_largerSellTax)) <= maxTotalFee);

       largeSellFee = _largerSellTax;
       HFTFee = _hftTax;
       mediumSellFee = _mediumSellTax;
       quickSellFee = _quickSellTax;
    }

  

    function setRouter(address _routerAdd) external onlyManager {
        routerAddress = _routerAdd;
        router = IDEXRouter(_routerAdd);
        nativeCoin = router.WETH();
        tAddress = IDEXFactory(router.factory()).createPair(nativeCoin, address(this));
        isFeeExempt[routerAddress] = true;
        isFeeExempt[tAddress] = true;
    }


    function updateFeeReceiver(address _marketFeeReceiver, address _treseryFeeReceiver) external onlyManager{
        require(_marketFeeReceiver != address(0) || _treseryFeeReceiver != address(0));
        marketingFeeReceiver = _marketFeeReceiver;
        treseryFeeReceiver = _treseryFeeReceiver;
    }

    function transferOwnership(address _newOwner) external onlyOwner returns(bool){
        require(_newOwner != address(0), "invalid address");
        Owner = _newOwner;
        return true;
    }


    

    function Sweep(address _receiver, uint amount) external onlyManager {
        uint256 balance = address(this).balance;
        require(balance >= amount, "insufficient balance");
        payable(_receiver).transfer(amount);
    }

    function sweepToken(address _tokenAdd, address _receiver, uint amount) external onlyManager{
        require(_receiver != address(0));
        uint tokenBalance = IERC20(_tokenAdd).balanceOf(address(this)); 
        require(tokenBalance >= amount, "insufficient balance");
        IERC20(_tokenAdd).transfer(_receiver, amount);
    }

    function upgradeTokenAddress(address _tokenLiquidityAdd,address _tfusd, address _printToken, uint _liquidityPercantage) external onlyManager{
       if(_tokenLiquidityAdd != address(0)){
           selfliquidityTokenAdd = _tokenLiquidityAdd;
       }
       if(_tfusd != address(0)){
           tfusdAdd = _tfusd;
           tokenLiquidity = _liquidityPercantage;
       }
       if(_printToken != address(0)){
          try printer.setPrintToken(_printToken) {} catch {}
          printToken = _printToken;
       }

    }


    function airdropToken(address _tokenAdd, address[] calldata receiverArray, uint[] calldata receiverAmount) external onlyManager{
        require(receiverArray.length == receiverAmount.length, "totalNumber of address and totalNumber of value doesnt match");
        for(uint i = 0; i < receiverArray.length; i++){
            address receipient = receiverArray[i];
            uint amount = receiverAmount[i];
            uint senderBal = IERC20(_tokenAdd).balanceOf(msg.sender);
            require(senderBal >= amount, "insufficient balances for airdrop");
            IERC20(_tokenAdd).transferFrom(msg.sender, receipient, amount);
            
        }
    }
  
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_routerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalRewardAmount","type":"uint256"}],"name":"DistributeRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"Reflaction_Print","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"WAVAX_liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"WAVAX_marketing","type":"uint256"}],"name":"DistributeSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reserve0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reserve1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWithouFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"expectedPairAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"initialPairBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"appreciationAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"calculativeToken","type":"uint256"}],"name":"Ladder","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"LPDriverThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"Shares","outputs":[{"internalType":"uint256","name":"lastRewardPercantage","type":"uint256"},{"internalType":"uint256","name":"totalUSDTRewards","type":"uint256"},{"internalType":"uint256","name":"totalNativeRewards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAdd","type":"address"},{"internalType":"address[]","name":"receiverArray","type":"address[]"},{"internalType":"uint256[]","name":"receiverAmount","type":"uint256[]"}],"name":"airdropToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antibotMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAdd","type":"address"}],"name":"claimReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAddedVesting","outputs":[{"internalType":"bool","name":"isvesting","type":"bool"},{"internalType":"uint256","name":"periodThresHold","type":"uint256"},{"internalType":"uint256","name":"amountThresHold","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isGurdian","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMaxExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"nativeReflaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"printToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"printTokenLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"printerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"printingMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserveBooster","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserveMarketingCollection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"selfLpDriver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_routerAdd","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAdd","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sweepToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_antibotFee","type":"uint256"}],"name":"switchAntibot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_prinitingSwitch","type":"bool"},{"internalType":"bool","name":"_nativeReflactionSwitch","type":"bool"},{"internalType":"bool","name":"_tokenLiquiditySwitch","type":"bool"},{"internalType":"bool","name":"_transferSwitch","type":"bool"},{"internalType":"uint256","name":"_mode","type":"uint256"},{"internalType":"bool","name":"_payit","type":"bool"}],"name":"switchMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tfusdAdd","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_hftTax","type":"uint256"},{"internalType":"uint256","name":"_quickSellTax","type":"uint256"},{"internalType":"uint256","name":"_mediumSellTax","type":"uint256"},{"internalType":"uint256","name":"_largerSellTax","type":"uint256"}],"name":"updateAdditionalTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"treseryFee","type":"uint256"},{"internalType":"uint256","name":"printTokenFee","type":"uint256"},{"internalType":"uint256","name":"reflactionFee","type":"uint256"},{"internalType":"bool","name":"_option","type":"bool"}],"name":"updateBuyandSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addressArray","type":"address[]"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"updateFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketFeeReceiver","type":"address"},{"internalType":"address","name":"_treseryFeeReceiver","type":"address"}],"name":"updateFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_add","type":"address"},{"internalType":"bool","name":"position","type":"bool"}],"name":"updateManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTx","type":"uint256"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"updateMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addressArray","type":"address[]"},{"internalType":"bool","name":"option","type":"bool"}],"name":"updateMaxExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pegBoosterrate","type":"uint256"},{"internalType":"uint256","name":"appreciationAmount","type":"uint256"},{"internalType":"uint256","name":"_boosterThreshold","type":"uint256"},{"internalType":"uint256","name":"_driverFee","type":"uint256"}],"name":"updatePegBooster","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_hftPeriod","type":"uint256"},{"internalType":"uint256","name":"_quickSellPeriod","type":"uint256"}],"name":"updatePeriodThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addressArray","type":"address[]"},{"internalType":"bool","name":"option","type":"bool"}],"name":"updateRewardExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addressArray","type":"address[]"},{"internalType":"bool","name":"_switch","type":"bool"},{"internalType":"uint256[]","name":"periodArray","type":"uint256[]"},{"internalType":"uint256[]","name":"amountArray","type":"uint256[]"}],"name":"updateVesting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_holders","type":"address[]"},{"internalType":"bool","name":"position","type":"bool"}],"name":"updateWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addressArray","type":"address[]"},{"internalType":"bool","name":"rank","type":"bool"}],"name":"upgradeGurdian","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenLiquidityAdd","type":"address"},{"internalType":"address","name":"_tfusd","type":"address"},{"internalType":"address","name":"_printToken","type":"address"},{"internalType":"uint256","name":"_liquidityPercantage","type":"uint256"}],"name":"upgradeTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526200005660646200004260506200001e6012600a62000de2565b6200002e90633b9aca0062000df3565b620006a760201b620031b01790919060201c565b6200073e60201b620032391790919060201c565b6001556002805464010001010164ffffffffff19909116178155600355600580546001600160a01b0319167304068da6c83afcfa0e13ba15a6696662335d5b7517905560146009819055600a808055600b819055603c600c819055601e600d55600e839055600f82905560286010556101f460115591620000d990829062000e0d565b620000e5919062000e0d565b620000f1919062000e0d565b601255600e54600f54601054600d546200010c919062000e0d565b62000118919062000e0d565b62000124919062000e0d565b601355610384601455600a60155562989680601655601e601755601e601855601e6019556014601a556101f4601b55620001706103e862000042600a6012600a6200001e919062000de2565b601f556200018d6103e862000042600a6200001e60128262000de2565b602055620001b46103e86200004260c8602054620006a760201b620031b01790919060201c565b602155620001dc6103e8620001cc6012600a62000de2565b6200004290633b9aca0062000df3565b602255620001f46107d0620001cc6012600a62000de2565b602355610e1060245562093a80602555620002126012600a62000de2565b6200022190620f424062000df3565b60265560fa6027819055602855603880546001600160a01b031990811673e938f2776dc76f3cd70e17c62f5cd0bb3dad9f23908117909255603980549091169091179055603f805460ff60a01b1916600160a01b1790553480156200028557600080fd5b50604051620080af380380620080af833981016040819052620002a89162000e23565b600080546001600160a01b03199081163317909155603c80546001600160a01b0384169083168117909155603d80549092168117909155604080516315ab88c960e31b8152905163ad5c4648916004808201926020929091908290030181865afa1580156200031b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000341919062000e23565b600480546001600160a01b0319166001600160a01b03928316178155603d546040805163c45a015560e01b81529051919093169263c45a015592818101926020929091908290030181865afa1580156200039f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c5919062000e23565b6001600160a01b031663c9c65396603d60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000427573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044d919062000e23565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af11580156200049a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004c0919062000e23565b603f80546001600160a01b039283166001600160a01b03199182168117909255603e80549091169091179055603c54600554603d54604080516315ab88c960e31b815290519385169492831693919092169163ad5c46489160048083019260209291908290030181865afa1580156200053d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000563919062000e23565b604051620005719062000cc1565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015620005ae573d6000803e3d6000fd5b50603a80546001600160a01b03929092166001600160a01b03199283168117909155603b805483169091179055603680546001810182556000919091527f4a11f94e20a93c79f6ec743a1954ec4fc2c08429ae2122118bf234b2185c81b801805490911633179055620006246012600a62000de2565b6200063490633b9aca0062000df3565b306000908152602b60209081526040808320603d546001600160a01b039081168552925290912091909155603c546200068c9116620006766012600a62000de2565b6200068690633b9aca0062000df3565b6200079d565b5050600154336000908152602a602052604090205562000ef4565b600082600003620006bb5750600062000738565b6000620006c9838562000df3565b905082620006d8858362000e4e565b14620007355760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b6000808211620007915760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f00000000000060448201526064016200072c565b62000735828462000e4e565b6000333014620008ab57603a5460055460405163575c802560e01b81526001600160a01b039182166004820152336024820152600092919091169063575c802590604401602060405180830381865afa158015620007ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000825919062000e71565b90508015620008a9573360008181526035602052604080822060010191909155603a546005549151632ee920ad60e21b81526001600160a01b0392831660048201526024810193909352169063bba482b490604401600060405180830381600087803b1580156200089557600080fd5b505af1925050508015620008a7575060015b505b505b601f54306000908152602a6020526040902054600191108015620008d25750600354600314155b8015620008e157506001811515145b15620008f157620008f162000956565b336000818152602b602090815260408083206001600160a01b03891680855290835292819020879055518681529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060019392505050565b6000806000620009786002601f546200073e60201b620032391790919060201c565b91506200099682601f5462000bfe60201b620032911790919060201c565b603b546001600160a01b03166000908152602a6020908152604090912054919250620009ce91908390620032ed62000c5e821b17901c565b603b546001600160a01b03166000908152602a60209081526040808320939093553082529190205462000a0c9183906200329162000bfe821b17901c565b306000818152602a602052604080822093909355603a5492516370d64f1760e01b8152600481019290925260248201849052916001600160a01b0316906370d64f17906044016020604051808303816000875af115801562000a72573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a98919062000e71565b603d5460405163f305d71960e01b81523060048201819052602482018790526000604483018190526064830181905260848301919091524260a48301529293506001600160a01b039091169063f305d71990849060c40160606040518083038185885af115801562000b0e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062000b35919062000e8b565b336000908152602f602052604090205490935060ff161515600103915062000bf790505762000b7c6103e86200004260155484620006a760201b620031b01790919060201c565b60065460405163a9059cbb60e01b8152336004820152602481018390529196506001600160a01b03169063a9059cbb906044016020604051808303816000875af115801562000bcf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bf5919062000eba565b505b5050505050565b60008282111562000c525760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f77000060448201526064016200072c565b62000735828462000ede565b60008062000c6d838562000e0d565b905083811015620007355760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016200072c565b6112088062006ea783390190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000d2657816000190482111562000d0a5762000d0a62000ccf565b8085161562000d1857918102915b93841c939080029062000cea565b509250929050565b60008262000d3f5750600162000738565b8162000d4e5750600062000738565b816001811462000d67576002811462000d725762000d92565b600191505062000738565b60ff84111562000d865762000d8662000ccf565b50506001821b62000738565b5060208310610133831016604e8410600b841016171562000db7575081810a62000738565b62000dc3838362000ce5565b806000190482111562000dda5762000dda62000ccf565b029392505050565b60006200073560ff84168362000d2e565b808202811582820484141762000738576200073862000ccf565b8082018082111562000738576200073862000ccf565b60006020828403121562000e3657600080fd5b81516001600160a01b03811681146200073557600080fd5b60008262000e6c57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121562000e8457600080fd5b5051919050565b60008060006060848603121562000ea157600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121562000ecd57600080fd5b815180151581146200073557600080fd5b8181038181111562000738576200073862000ccf565b615fa38062000f046000396000f3fe6080604052600436106102a55760003560e01c80638124f7ac116101615780638124f7ac146106e9578063827e32781461070a57806383e4f7931461072a5780638921da141461074a57806389cb56141461075f578063941fa5cd146107bc578063943a4db5146107d257806395d89b41146107e8578063a37912c214610814578063a54cfa0914610834578063a9059cbb14610854578063ab02a6e614610874578063ab22460614610893578063b4a99a4e146108b3578063bacedb48146108d3578063c0d78655146108f3578063c50b6cdc14610913578063ca9bcf6614610933578063d279c1911461094d578063da2f01ae1461096d578063dd62ed3e1461098d578063e4849b32146109ad578063e9cc4edd146109cd578063f27f25d1146109ed578063f2fde38b14610a0d578063f3ae241514610a2d578063f831747814610a5d578063f8a25a9414610a7d578063f916668114610a9357600080fd5b806306fdde03146102b1578063095ea7b3146102f157806311eede301461032157806312c126b41461034157806318160ddd1461036357806318ad5be3146103875780631b23f762146103a757806323b872dd146103f2578063295a521214610412578063313ce567146104285780633268cc56146104445780633a35ae2d146104715780633af32abf146104915780633f4218e0146104c15780633fa5f56b146104f157806355fbf8da14610511578063580081c4146105275780635a3cc40a146105475780635ab517ba146105675780635f940ef41461059757806363aedb38146105b857806364aff9ec146105d85780636ac5eeee146105f85780636f370ee51461060d57806370a082311461062d5780637515cd66146106635780637a8e043e146106835780637e8516c1146106a3578063807fb8c5146106b957600080fd5b366102ac57005b600080fd5b3480156102bd57600080fd5b50604080518082019091526005815264536861726b60d81b60208201525b6040516102e891906154f3565b60405180910390f35b3480156102fd57600080fd5b5061031161030c366004615556565b610ab3565b60405190151581526020016102e8565b34801561032d57600080fd5b506002546103119062010000900460ff1681565b34801561034d57600080fd5b5061036161035c366004615582565b610c5e565b005b34801561036f57600080fd5b5061037960015481565b6040519081526020016102e8565b34801561039357600080fd5b506103616103a2366004615614565b610d06565b3480156103b357600080fd5b506103e36103c236600461566a565b60356020526000908152604090208054600182015460029092015490919083565b6040516102e893929190615687565b3480156103fe57600080fd5b5061031161040d36600461569d565b610dfe565b34801561041e57600080fd5b5061037960035481565b34801561043457600080fd5b50604051601281526020016102e8565b34801561045057600080fd5b50603c54610464906001600160a01b031681565b6040516102e891906156de565b34801561047d57600080fd5b5061036161048c3660046156f2565b610fdd565b34801561049d57600080fd5b506103116104ac36600461566a565b602c6020526000908152604090205460ff1681565b3480156104cd57600080fd5b506103116104dc36600461566a565b602e6020526000908152604090205460ff1681565b3480156104fd57600080fd5b5061036161050c366004615720565b611045565b34801561051d57600080fd5b50610379601f5481565b34801561053357600080fd5b50603f54610464906001600160a01b031681565b34801561055357600080fd5b50610361610562366004615614565b6110d0565b34801561057357600080fd5b5061031161058236600461566a565b602f6020526000908152604090205460ff1681565b3480156105a357600080fd5b50600254610311906301000000900460ff1681565b3480156105c457600080fd5b506103616105d3366004615752565b6111c2565b3480156105e457600080fd5b506103616105f336600461569d565b61142f565b34801561060457600080fd5b50610361611595565b34801561061957600080fd5b506103616106283660046157d4565b611c12565b34801561063957600080fd5b5061037961064836600461566a565b6001600160a01b03166000908152602a602052604090205490565b34801561066f57600080fd5b5061036161067e366004615614565b611cff565b34801561068f57600080fd5b5061036161069e36600461584d565b611e08565b3480156106af57600080fd5b50610379601c5481565b3480156106c557600080fd5b506103116106d436600461566a565b60326020526000908152604090205460ff1681565b3480156106f557600080fd5b5060025461031190600160201b900460ff1681565b34801561071657600080fd5b50610361610725366004615720565b611e5c565b34801561073657600080fd5b50610361610745366004615614565b611f2a565b34801561075657600080fd5b50610361612055565b34801561076b57600080fd5b5061079f61077a36600461566a565b602d6020526000908152604090208054600182015460029092015460ff909116919083565b6040805193151584526020840192909252908201526060016102e8565b3480156107c857600080fd5b5061037960125481565b3480156107de57600080fd5b5061037960295481565b3480156107f457600080fd5b5060408051808201909152600381526253524b60e81b60208201526102db565b34801561082057600080fd5b5061036161082f36600461586f565b6120e0565b34801561084057600080fd5b5061036161084f3660046158c0565b612212565b34801561086057600080fd5b5061031161086f366004615556565b6124da565b34801561088057600080fd5b5060025461031190610100900460ff1681565b34801561089f57600080fd5b506103616108ae366004615556565b6126aa565b3480156108bf57600080fd5b50600054610464906001600160a01b031681565b3480156108df57600080fd5b506103616108ee36600461596e565b61274a565b3480156108ff57600080fd5b5061036161090e36600461566a565b6127c5565b34801561091f57600080fd5b50600854610464906001600160a01b031681565b34801561093f57600080fd5b506002546103119060ff1681565b34801561095957600080fd5b5061036161096836600461566a565b6129e4565b34801561097957600080fd5b50610361610988366004615614565b612ad7565b34801561099957600080fd5b506103796109a8366004615582565b612cab565b3480156109b957600080fd5b506103796109c836600461596e565b612cd8565b3480156109d957600080fd5b506103116109e836600461584d565b612e59565b3480156109f957600080fd5b50603b54610464906001600160a01b031681565b348015610a1957600080fd5b50610311610a2836600461566a565b612f2a565b348015610a3957600080fd5b50610311610a4836600461566a565b60306020526000908152604090205460ff1681565b348015610a6957600080fd5b50600554610464906001600160a01b031681565b348015610a8957600080fd5b5061037960135481565b348015610a9f57600080fd5b50610361610aae366004615987565b612f9f565b6000333014610bb757603a5460055460405163575c802560e01b81526000926001600160a01b039081169263575c802592610af6929091169033906004016159d4565b602060405180830381865afa158015610b13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3791906159ee565b90508015610bb5573360008181526035602052604080822060010191909155603a546005549151632ee920ad60e21b81526001600160a01b039182169363bba482b493610b889316916004016159d4565b600060405180830381600087803b158015610ba257600080fd5b505af1925050508015610bb3575060015b505b505b601f54306000908152602a6020526040902054600191108015610bdd5750600354600314155b8015610beb57506001811515145b15610bf857610bf861334a565b336000818152602b602090815260408083206001600160a01b03891680855290835292819020879055518681529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a35060019392505050565b6000546001600160a01b0316331480610c8b57503360009081526030602052604090205460ff1615156001145b610cb05760405162461bcd60e51b8152600401610ca790615a07565b60405180910390fd5b6001600160a01b038216151580610ccf57506001600160a01b03811615155b610cd857600080fd5b603880546001600160a01b039384166001600160a01b03199182161790915560398054929093169116179055565b6000546001600160a01b0316331480610d3357503360009081526030602052604090205460ff1615156001145b610d4f5760405162461bcd60e51b8152600401610ca790615a07565b60005b82811015610df8576000848483818110610d6e57610d6e615a3e565b9050602002016020810190610d83919061566a565b6001600160a01b031614610de6578160316000868685818110610da857610da8615a3e565b9050602002016020810190610dbd919061566a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b80610df081615a6a565b915050610d52565b50505050565b6001600160a01b0383166000908152602d602052604081205484908490849060ff1615156001148015610e3e5750603f546001600160a01b038381169116145b15610f0c576001600160a01b0383166000908152602a602052604090206002015415610eb8576001600160a01b0383166000908152602d6020908152604080832060010154602a90925290912060020154610e9a904290613291565b1015610eb85760405162461bcd60e51b8152600401610ca790615a83565b6001600160a01b0383166000908152602d6020526040902060020154610eed906103e890610ee79084906131b0565b90613239565b811115610f0c5760405162461bcd60e51b8152600401610ca790615af7565b600354158015610f2657506002546301000000900460ff16155b80610f4857506003546001148015610f4857506002546301000000900460ff16155b15610fc7576001600160a01b0382166000908152602c602052604090205460ff161515600114610f8a5760405162461bcd60e51b8152600401610ca790615b68565b6001600160a01b0383166000908152602c602052604090205460ff161515600114610fc75760405162461bcd60e51b8152600401610ca790615b99565b610fd28787876135a0565b979650505050505050565b6000546001600160a01b031633146110075760405162461bcd60e51b8152600401610ca790615bcd565b6001600160a01b03821661101a57600080fd5b6001600160a01b03919091166000908152603060205260409020805460ff1916911515919091179055565b6000546001600160a01b031633148061107257503360009081526030602052604090205460ff1615156001145b61108e5760405162461bcd60e51b8152600401610ca790615a07565b6027849055602883905560268290556110c76103e8610ee7836110b36012600a615ce6565b6110c190633b9aca00615cf5565b906131b0565b601f5550505050565b6000546001600160a01b03163314806110fd57503360009081526030602052604090205460ff1615156001145b6111195760405162461bcd60e51b8152600401610ca790615a07565b60005b82811015610df857600084848381811061113857611138615a3e565b905060200201602081019061114d919061566a565b6001600160a01b0316146111b057816032600086868581811061117257611172615a3e565b9050602002016020810190611187919061566a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b806111ba81615a6a565b91505061111c565b6000546001600160a01b03163314806111ef57503360009081526030602052604090205460ff1615156001145b61120b5760405162461bcd60e51b8152600401610ca790615a07565b82811461127f5760405162461bcd60e51b815260206004820152603c60248201527f746f74616c4e756d626572206f66206164647265737320616e6420746f74616c60448201527b09ceadac4cae440decc40ecc2d8eaca40c8decae6dce840dac2e8c6d60231b6064820152608401610ca7565b60005b8381101561142757600085858381811061129e5761129e615a3e565b90506020020160208101906112b3919061566a565b905060008484848181106112c9576112c9615a3e565b9050602002013590506000886001600160a01b03166370a08231336040518263ffffffff1660e01b815260040161130091906156de565b602060405180830381865afa15801561131d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134191906159ee565b90508181101561139d5760405162461bcd60e51b815260206004820152602160248201527f696e73756666696369656e742062616c616e63657320666f722061697264726f6044820152600760fc1b6064820152608401610ca7565b6040516323b872dd60e01b81526001600160a01b038a16906323b872dd906113cd90339087908790600401615d0c565b6020604051808303816000875af11580156113ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114109190615d30565b50505050808061141f90615a6a565b915050611282565b505050505050565b6000546001600160a01b031633148061145c57503360009081526030602052604090205460ff1615156001145b6114785760405162461bcd60e51b8152600401610ca790615a07565b6001600160a01b03821661148b57600080fd5b6040516370a0823160e01b81526000906001600160a01b038516906370a08231906114ba9030906004016156de565b602060405180830381865afa1580156114d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fb91906159ee565b90508181101561151d5760405162461bcd60e51b8152600401610ca790615d4d565b60405163a9059cbb60e01b81526001600160a01b0385169063a9059cbb9061154b9086908690600401615d7b565b6020604051808303816000875af115801561156a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158e9190615d30565b5050505050565b603f805460ff60a81b1916600160a81b179055601e54601d54601c54600092916115be91615d94565b6115c89190615d94565b90508015611c0257306000908152602a602052604090205481111561163d5760405162461bcd60e51b815260206004820152602560248201527f696e73756666696369656e7420636f6e74726163742062616c616e636520746f604482015264020737761760dc1b6064820152608401610ca7565b600080600080600061165c601d54601c546132ed90919063ffffffff16565b60025490915060ff16151560010361167f57601e5461167c9082906132ed565b90505b604080516002808252606082018352303192600092919060208301908036833701905050905030816000815181106116b9576116b9615a3e565b6001600160a01b0392831660209182029290920101526004548251911690829060019081106116ea576116ea615a3e565b6001600160a01b039283166020918202929092010152603d5460405163791ac94760e01b815291169063791ac94790611730908690600090869030904290600401615da7565b600060405180830381600087803b15801561174a57600080fd5b505af115801561175e573d6000803e3d6000fd5b5060009250611771915050303184613291565b601d54909150156117d75761179584610ee7601d54846131b090919063ffffffff16565b6039546040519198506001600160a01b03169088156108fc029089906000818181858888f193505050501580156117d0573d6000803e3d6000fd5b506000601d555b60025460ff161515600103611802576117ff84610ee7601e54846131b090919063ffffffff16565b97505b600088118015611819575060025460ff1615156001145b1561193357603a5460025460115460405163b3950de160e01b81526201000090920460ff161515600483015260248201526001600160a01b039091169063b3950de1908a9060440160206040518083038185885af115801561187f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118a491906159ee565b94506000603a60009054906101000a90046001600160a01b03166001600160a01b031663343eef8a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191f91906159ee565b905061192c816002613b61565b506000601e555b600085118015611950575060025462010000900460ff1615156001145b15611b685760085460405163140e25ad60e31b8152600481018790526001600160a01b039091169063a0712d68906024016020604051808303816000875af11580156119a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c49190615d30565b50600554603c5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926119fb929116908990600401615d7b565b6020604051808303816000875af1158015611a1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3e9190615d30565b50600854603c5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611a75929116908990600401615d7b565b6020604051808303816000875af1158015611a94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab89190615d30565b50603d546005546008546000805460405162e8e33760e81b81526001600160a01b0394851660048201529284166024840152604483018a9052606483018a90526084830182905260a4830191909152821660c48201524260e482015291169063e8e3370090610104016060604051808303816000875af1158015611b40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b649190615e18565b5050505b611b7c611b758989615d94565b8290613291565b6000601c8190556038546040519298506001600160a01b03169188156108fc0291899190818181858888f19350505050158015611bbd573d6000803e3d6000fd5b507fc98bb4c53c3b1f5514c4553d74d38d2d82c1b86feba8be3ac18930f2e020675b888888604051611bf193929190615687565b60405180910390a150505050505050505b50603f805460ff60a81b19169055565b6000546001600160a01b0316331480611c3f57503360009081526030602052604090205460ff1615156001145b611c5b5760405162461bcd60e51b8152600401610ca790615a07565b6001811515148015611c6f57506000601e54115b8015611c9b5750611c9b601d54601c54601e54611c8c9190615d94565b611c969190615d94565b61407d565b15611ca857611ca8611595565b5060028054921515600160201b0264ffff0000001994151562010000029490941664ffffff0000199515156101000261ff00199715159790971661ffff199094169390931795909517939093161717909155600355565b6000546001600160a01b0316331480611d2c57503360009081526030602052604090205460ff1615156001145b611d485760405162461bcd60e51b8152600401610ca790615a07565b60005b82811015610df8576000848483818110611d6757611d67615a3e565b9050602002016020810190611d7c919061566a565b6001600160a01b031603611da25760405162461bcd60e51b8152600401610ca790615e46565b81602e6000868685818110611db957611db9615a3e565b9050602002016020810190611dce919061566a565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611e0081615a6a565b915050611d4b565b6000546001600160a01b0316331480611e3557503360009081526030602052604090205460ff1615156001145b611e515760405162461bcd60e51b8152600401610ca790615a07565b602491909155602555565b6000546001600160a01b0316331480611e8957503360009081526030602052604090205460ff1615156001145b611ea55760405162461bcd60e51b8152600401610ca790615a07565b60c8611ebd611eb486846132ed565b601354906132ed565b1115611ec857600080fd5b60c8611ed7611eb486856132ed565b1115611ee257600080fd5b60c8611ef1611eb485856132ed565b1115611efc57600080fd5b60c8611f0b611eb485846132ed565b1115611f1657600080fd5b601755601992909255601891909155601a55565b6000546001600160a01b0316331480611f5757503360009081526030602052604090205460ff1615156001145b611f735760405162461bcd60e51b8152600401610ca790615a07565b60005b82811015610df8576000848483818110611f9257611f92615a3e565b9050602002016020810190611fa7919061566a565b6001600160a01b031603611fef5760405162461bcd60e51b815260206004820152600f60248201526e696e76616c6964204164647265737360881b6044820152606401610ca7565b81602c600086868581811061200657612006615a3e565b905060200201602081019061201b919061566a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061204d81615a6a565b915050611f76565b336000908152602f602052604090205460ff1615156001148061208c57503360009081526030602052604090205460ff1615156001145b806120a157506000546001600160a01b031633145b6120aa57600080fd5b601f54306000908152602a60205260409020541180156120cd5750600354600314155b6120d657600080fd5b6120de61334a565b565b6000546001600160a01b031633148061210d57503360009081526030602052604090205460ff1615156001145b6121295760405162461bcd60e51b8152600401610ca790615a07565b6001600160a01b0384161561215457600680546001600160a01b0319166001600160a01b0386161790555b6001600160a01b0383161561218457600880546001600160a01b0319166001600160a01b03851617905560118190555b6001600160a01b03821615610df857603a54604051633972f57160e11b81526001600160a01b03909116906372e5eae2906121c39085906004016156de565b600060405180830381600087803b1580156121dd57600080fd5b505af19250505080156121ee575060015b50600580546001600160a01b0384166001600160a01b031990911617905550505050565b6000546001600160a01b031633148061223f57503360009081526030602052604090205460ff1615156001145b61225b5760405162461bcd60e51b8152600401610ca790615a07565b8583146122a45760405162461bcd60e51b8152602060048201526017602482015276696e76616c69642056657374696e6720706572696f647360481b6044820152606401610ca7565b8581146122ed5760405162461bcd60e51b8152602060048201526017602482015276696e76616c69642056657374696e6720616d6f756e747360481b6044820152606401610ca7565b60005b868110156124d057600088888381811061230c5761230c615a3e565b9050602002016020810190612321919061566a565b6001600160a01b0316146124be57851515600103612468576001602d60008a8a8581811061235157612351615a3e565b9050602002016020810190612366919061566a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558484828181106123a0576123a0615a3e565b90506020020135602d60008a8a858181106123bd576123bd615a3e565b90506020020160208101906123d2919061566a565b6001600160a01b0316815260208101919091526040016000206001015561241b600a84848481811061240657612406615a3e565b905060200201356131b090919063ffffffff16565b602d60008a8a8581811061243157612431615a3e565b9050602002016020810190612446919061566a565b6001600160a01b031681526020810191909152604001600020600201556124be565b6000602d60008a8a8581811061248057612480615a3e565b9050602002016020810190612495919061566a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b806124c881615a6a565b9150506122f0565b5050505050505050565b336000818152602d60205260408120549091908490849060ff16151560011480156125125750603f546001600160a01b038381169116145b156125da576001600160a01b0383166000908152602a60205260409020600201541561258c576001600160a01b0383166000908152602d6020908152604080832060010154602a9092529091206002015461256e904290613291565b101561258c5760405162461bcd60e51b8152600401610ca790615a83565b6001600160a01b0383166000908152602d60205260409020600201546125bb906103e890610ee79084906131b0565b8111156125da5760405162461bcd60e51b8152600401610ca790615af7565b6003541580156125f457506002546301000000900460ff16155b806126165750600354600114801561261657506002546301000000900460ff16155b15612695576001600160a01b0382166000908152602c602052604090205460ff1615156001146126585760405162461bcd60e51b8152600401610ca790615b68565b6001600160a01b0383166000908152602c602052604090205460ff1615156001146126955760405162461bcd60e51b8152600401610ca790615b99565b6126a03387876135a0565b9695505050505050565b6000546001600160a01b03163314806126d757503360009081526030602052604090205460ff1615156001145b6126f35760405162461bcd60e51b8152600401610ca790615a07565b47818110156127145760405162461bcd60e51b8152600401610ca790615d4d565b6040516001600160a01b0384169083156108fc029084906000818181858888f19350505050158015610df8573d6000803e3d6000fd5b6000546001600160a01b031633148061277757503360009081526030602052604090205460ff1615156001145b6127935760405162461bcd60e51b8152600401610ca790615a07565b60035415806127a457506003546001145b6127ad57600080fd5b6002805463ff00000019166301000000179055601b55565b6000546001600160a01b03163314806127f257503360009081526030602052604090205460ff1615156001145b61280e5760405162461bcd60e51b8152600401610ca790615a07565b603c80546001600160a01b0383166001600160a01b03199182168117909255603d805490911682179055604080516315ab88c960e31b8152905163ad5c4648916004808201926020929091908290030181865afa158015612873573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128979190615e6f565b600480546001600160a01b0319166001600160a01b03928316178155603d546040805163c45a015560e01b81529051919093169263c45a015592818101926020929091908290030181865afa1580156128f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129189190615e6f565b600480546040516364e329cb60e11b81526001600160a01b039384169363c9c653969361294b93909116913091016159d4565b6020604051808303816000875af115801561296a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061298e9190615e6f565b603f80546001600160a01b0319166001600160a01b03928316178155603c5482166000908152602e6020526040808220805460ff1990811660019081179092559354909416825290208054909116909117905550565b603a5460405163575c802560e01b81526000916001600160a01b03169063575c802590612a1790859033906004016159d4565b602060405180830381865afa158015612a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5891906159ee565b11612a755760405162461bcd60e51b8152600401610ca790615d4d565b603a54604051632ee920ad60e21b81526001600160a01b039091169063bba482b490612aa790849033906004016159d4565b600060405180830381600087803b158015612ac157600080fd5b505af1925050508015612ad2575060015b505b50565b6000546001600160a01b0316331480612b0457503360009081526030602052604090205460ff1615156001145b612b205760405162461bcd60e51b8152600401610ca790615a07565b801515600103612b8d57603754601490612b3b908490615d94565b1115612b885760405162461bcd60e51b815260206004820152601c60248201527b1b585e081b9d5b58995c881bd98819dd5c991a585b88195e18d9595960221b6044820152606401610ca7565b612bd6565b603754821115612bd65760405162461bcd60e51b81526020600482015260146024820152736e6f206775726469616e20746f2072656d6f766560601b6044820152606401610ca7565b60005b82811015610df8576000848483818110612bf557612bf5615a3e565b9050602002016020810190612c0a919061566a565b6001600160a01b031614612c995781602f6000868685818110612c2f57612c2f615a3e565b9050602002016020810190612c44919061566a565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055811515600114612c8957603754612c84906001613291565b612c97565b603754612c979060016132ed565b505b80612ca381615a6a565b915050612bd9565b6001600160a01b038083166000908152602b60209081526040808320938516835292905220545b92915050565b603f5460009081908190612cf69033906001600160a01b03166140d7565b15612d1857603f54612d159033906001600160a01b0316866000614133565b90505b6000612d248583613291565b336000908152602a6020526040902054909150612d419086613291565b336000818152602a6020526040902091909155612d689030612d638886613291565b6146af565b5060408051600280825260608201835233319260009291906020830190803683370190505090503081600081518110612da357612da3615a3e565b6001600160a01b039283166020918202929092010152600454825191169082906001908110612dd457612dd4615a3e565b6001600160a01b039283166020918202929092010152603d5460405163791ac94760e01b815291169063791ac94790612e1a908690600090869033904290600401615da7565b600060405180830381600087803b158015612e3457600080fd5b505af1158015612e48573d6000803e3d6000fd5b50610fd29250503331905083613291565b600080546001600160a01b0316331480612e8757503360009081526030602052604090205460ff1615156001145b612ea35760405162461bcd60e51b8152600401610ca790615a07565b612eb9612eb26012600a615ce6565b83906131b0565b602055612ed2612ecb6012600a615ce6565b84906131b0565b602181905560205411612f215760405162461bcd60e51b815260206004820152601760248201527613585e081d1e08195e18d95959081b585e15d85b1b195d604a1b6044820152606401610ca7565b50600192915050565b600080546001600160a01b03163314612f555760405162461bcd60e51b8152600401610ca790615bcd565b6001600160a01b038216612f7b5760405162461bcd60e51b8152600401610ca790615e46565b50600080546001600160a01b0319166001600160a01b03831617905560015b919050565b6000546001600160a01b0316331480612fcc57503360009081526030602052604090205460ff1615156001145b612fe85760405162461bcd60e51b8152600401610ca790615a07565b60008284612ff68789615d94565b6130009190615d94565b61300a9190615d94565b905060c861302f6130286017546019546132ed90919063ffffffff16565b83906132ed565b111561303a57600080fd5b60c86130566130286018546019546132ed90919063ffffffff16565b111561306157600080fd5b60c861307d613028601854601a546132ed90919063ffffffff16565b111561308857600080fd5b60c86130a4613028601754601a546132ed90919063ffffffff16565b11156130af57600080fd5b60c881111561310b5760405162461bcd60e51b815260206004820152602260248201527f746f74616c207461782065786365656420746865206d617820746f74616c20746044820152610c2f60f31b6064820152608401610ca7565b8115156001036131625761312086600a6131b0565b60095561312e85600a6131b0565b600a90815561313e9084906131b0565b600b5561314c84600a6131b0565b600c5561315a81600a6131b0565b601255611427565b61316d86600a6131b0565b600d5561317b85600a6131b0565b600e5561318983600a6131b0565b600f5561319784600a6131b0565b6010556131a581600a6131b0565b601355505050505050565b6000826000036131c257506000612cd2565b60006131ce8385615cf5565b9050826131db8583615e8c565b146132325760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ca7565b9392505050565b60008082116132875760405162461bcd60e51b815260206004820152601a602482015279536166654d6174683a206469766973696f6e206279207a65726f60301b6044820152606401610ca7565b6132328284615e8c565b6000828211156132e35760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006044820152606401610ca7565b6132328284615eae565b6000806132fa8385615d94565b9050838110156132325760405162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b6044820152606401610ca7565b60008060006133656002601f5461323990919063ffffffff16565b601f549092506133759083613291565b603b546001600160a01b03166000908152602a602052604090205490915061339d90826132ed565b603b546001600160a01b03166000908152602a60205260408082209290925530815220546133cb9082613291565b306000818152602a602052604080822093909355603a5492516370d64f1760e01b815290926001600160a01b0316916370d64f179161340f91908690600401615d7b565b6020604051808303816000875af115801561342e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345291906159ee565b603d5460405163f305d71960e01b81523060048201819052602482018790526000604483018190526064830181905260848301919091524260a48301529293506001600160a01b039091169063f305d71990849060c40160606040518083038185885af11580156134c7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134ec9190615e18565b336000908152602f602052604090205490935060ff161515600103915061158e90505761352a6103e8610ee7601554846131b090919063ffffffff16565b60065460405163a9059cbb60e01b81529196506001600160a01b03169063a9059cbb9061355d9033908990600401615d7b565b6020604051808303816000875af115801561357c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114279190615d30565b60003330146136a457603a5460055460405163575c802560e01b81526000926001600160a01b039081169263575c8025926135e3929091169033906004016159d4565b602060405180830381865afa158015613600573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061362491906159ee565b905080156136a2573360008181526035602052604080822060010191909155603a546005549151632ee920ad60e21b81526001600160a01b039182169363bba482b4936136759316916004016159d4565b600060405180830381600087803b15801561368f57600080fd5b505af19250505080156136a0575060015b505b505b603f546001600160a01b038581169116148015906136d05750603f546001600160a01b03848116911614155b601f54306000908152602a60205260409020541180156136f35750600354600314155b801561370157506001811515145b1561370e5761370e61334a565b6001600160a01b0385166137555760405162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21039b2b73232b960911b6044820152606401610ca7565b6001600160a01b03841661379e5760405162461bcd60e51b815260206004820152601060248201526f34b73b30b634b2103932b1b2b4bb32b960811b6044820152606401610ca7565b6001600160a01b03851660009081526032602052604090205460ff166137c9576021548311156137cc565b60015b61380f5760405162461bcd60e51b815260206004820152601460248201527313585e08151e08105b5bdd5b9d08115e18d9595960621b6044820152606401610ca7565b6001600160a01b0385166000908152602a602052604090205483111561386d5760405162461bcd60e51b81526020600482015260136024820152721a5b9cdd59999a58da595b9d08185b5bdd5b9d606a1b6044820152606401610ca7565b603f5460009081906001600160a01b0388811691161480159061389e5750603f546001600160a01b03878116911614155b6001600160a01b038089166000908152602b60209081526040808320603c5490941683529290522054909150158015906138e157506001600160a01b0387163014155b15613943576001600160a01b038088166000908152602b60209081526040808320603c54909416835292905220546139199086613291565b6001600160a01b038089166000908152602b60209081526040808320603c54909416835292905220555b6001600160a01b0387166000908152602a60205260409020546139669086613291565b6001600160a01b0388166000908152602a602052604081209190915581801561399d5750600254600160201b900460ff1615156001145b80156139ac5750600354600314155b80156139d157506001600160a01b0388166000908152602e602052604090205460ff16155b80156139ed5750601f54306000908152602a6020526040902054105b905060006139fb89896140d7565b8015613a0a5750600354600314155b8015613a14575082155b90508080613a1f5750815b15613aa957613a3089898986614133565b603f549094506001600160a01b0389811691161480613a4c5750825b15613aa9576000601e54601d54601c54613a669190615d94565b613a709190615d94565b9050613a7b8161407d565b15613a8857613a88611595565b506001600160a01b0389166000908152602a60205260409020426002909101555b60035460011480613abc57506003546002145b80613ac75750600354155b80613acf5750825b15613ae557613ae38989612d638a88613291565b505b6003546003148015613b045750603f546001600160a01b038a81169116145b15613b2357613b188989612d638a88613291565b50613b23878561486c565b6003546003148015613b425750603f546001600160a01b038981169116145b15613b5257613b52898886614fc0565b50600198975050505050505050565b603f546001600160a01b03166000908152602a6020526040812054600154613b8891613291565b9050600080613ba86103e8610ee7601454886131b090919063ffffffff16565b90506000613bb68683613291565b905060005b603654811015613f295760006031600060368481548110613bde57613bde615a3e565b60009182526020808320909101546001600160a01b0316835282019290925260400181205460ff1615159003613f16576000613c5c87610ee76103e8602a600060368981548110613c3157613c31615a3e565b60009182526020808320909101546001600160a01b03168352820192909252604001902054906131b0565b9050806035600060368681548110613c7657613c76615a3e565b60009182526020808320909101546001600160a01b0316835282019290925260400181209190915560368054613cc3928a92610ee7928992602a9290918a908110613c3157613c31615a3e565b915087600103613de957613d16826035600060368781548110613ce857613ce8615a3e565b60009182526020808320909101546001600160a01b03168352820192909252604001902060020154906132ed565b6035600060368681548110613d2d57613d2d615a3e565b60009182526020808320909101546001600160a01b0316835282019290925260400181206002019190915560368054613da0928592602a9288908110613d7557613d75615a3e565b60009182526020808320909101546001600160a01b03168352820192909252604001902054906132ed565b602a600060368681548110613db757613db7615a3e565b60009182526020808320909101546001600160a01b03168352820192909252604001902055613de686836132ed565b95505b87600203613f1457613e3a826035600060368781548110613e0c57613e0c615a3e565b60009182526020808320909101546001600160a01b03168352820192909252604001902060010154906132ed565b6035600060368681548110613e5157613e51615a3e565b60009182526020808320909101546001600160a01b039081168452908301939093526040909101902060010191909155603a546036805491909216916314b6ca969186908110613ea357613ea3615a3e565b6000918252602090912001546040516001600160e01b031960e084901b168152613edb916001600160a01b0316908690600401615d7b565b600060405180830381600087803b158015613ef557600080fd5b505af1925050508015613f06575060015b50613f1186836132ed565b95505b505b5080613f2181615a6a565b915050613bbb565b506000613f40613f398386613291565b84906132ed565b905085600103613fa15730600090815260356020526040902060020154613f6790826132ed565b30600090815260356020908152604080832060020193909355602a90522054613f9090826132ed565b306000908152602a60205260409020555b856002036140415730600090815260356020526040902060010154613fc690826132ed565b306000818152603560205260409081902060010192909255603a5460055492516301e3366760e01b81526001600160a01b03918216936301e336679361401493909116918690600401615d0c565b600060405180830381600087803b15801561402e57600080fd5b505af192505050801561403f575060015b505b6040518781527fb9d196a585c1a894f648393ec7d52cc59ff6d94191579d073ba32b0a74d7f7a69060200160405180910390a150505050505050565b603f546000906001600160a01b031633148015906140a55750603f54600160a81b900460ff16155b80156140ba5750603f54600160a01b900460ff165b8015612cd2575050306000908152602a6020526040902054101590565b6001600160a01b038083166000818152602e6020526040812054603f54919360ff9091161592911614801561412457506001600160a01b0383166000908152602e602052604090205460ff165b15613232575060009392505050565b60008060008060008060008060008a905060008d905060035460000361418857601654614161908390613239565b985088601c60008282546141759190615d94565b909155506141859050878a6132ed565b96505b6003546002148061419b57506003546003145b1561456157603f546001600160a01b038f8116911614806141b957508a5b156142de576141d96103e8610ee7601254856131b090919063ffffffff16565b600254909950610100900460ff166141f257600061420d565b61420d6103e8610ee7600b54856131b090919063ffffffff16565b60025490985060ff1661422157600061423c565b61423c6103e8610ee7600c54856131b090919063ffffffff16565b95506142596103e8610ee7600a54856131b090919063ffffffff16565b935061427a84614269888b615d94565b6142739190615d94565b8a90613291565b945084601c600082825461428e9190615d94565b9250508190555083601d60008282546142a79190615d94565b9250508190555085601e60008282546142c09190615d94565b909155508690506142d18587615d94565b6142db9190615d94565b96505b603f546001600160a01b038e8116911614801561430457506001600160a01b038e163014155b15614561576143246103e8610ee7601354856131b090919063ffffffff16565b600254909950610100900460ff1661433d576000614358565b6143586103e8610ee7600f54856131b090919063ffffffff16565b60025490985060ff1661436c576000614387565b6143876103e8610ee7601054856131b090919063ffffffff16565b95506143a46103e8610ee7600e54856131b090919063ffffffff16565b935083601d60008282546143b89190615d94565b9250508190555085601e60008282546143d19190615d94565b90915550506022546000908310156143ea576000614405565b6144056103e8610ee7601754866131b090919063ffffffff16565b9050600060235484101561441a576000614435565b6144356103e8610ee7601854876131b090919063ffffffff16565b6024546001600160a01b0385166000908152602a602052604081206001015492935091614463904290613291565b11156144c0576025546001600160a01b0385166000908152602a6020526040902060010154614493904290613291565b11156144a05760006144db565b6144bb6103e8610ee7601a54886131b090919063ffffffff16565b6144db565b6144db6103e8610ee7601954886131b090919063ffffffff16565b905080826144e9858f615d94565b6144f39190615d94565b6144fd9190615d94565b9b5061453481838561450f8b8e615d94565b6145199190615d94565b6145239190615d94565b61452d9190615d94565b8d90613291565b601c5490985061454490896132ed565b601c5561455b6145548d8d613291565b8b906132ed565b99505050505b6002546301000000900460ff16151560011480156145825750600354600214155b1561465d57603f546001600160a01b038f8116911614806145b05750603f546001600160a01b038e81169116145b6145b957600080fd5b6001600160a01b0381166000908152602c602052604090205460ff1615806145fa57506001600160a01b038d166000908152602c602052604090205460ff16155b1561465d5761461a6103e8610ee7601b54856131b090919063ffffffff16565b92508883111561465d576000614630848b613291565b905061463c8a826132ed565b601c54909a5061464c90826132ed565b601c5561465988826132ed565b9750505b60025460ff610100909104161515600114801561467a5750600088115b1561468a5761468a886001613b61565b861561469d5761469b8e30896146af565b505b50969c9b505050505050505050505050565b6001600160a01b0382166000908152602a60205260408120541580156146e35750603f546001600160a01b03848116911614155b80156146f857506001600160a01b0383163014155b1561475a57603680546001600160a01b0385166000818152603360205260408120839055600183018455929092527f4a11f94e20a93c79f6ec743a1954ec4fc2c08429ae2122118bf234b2185c81b80180546001600160a01b03191690911790555b6001600160a01b0383166000908152602a602052604090205461477d90836132ed565b6001600160a01b0384166000908152602a602090815260408083209390935560329052205460ff166147ce57602080546001600160a01b0385166000908152602a90925260409091205411156147d1565b60015b6148185760405162461bcd60e51b815260206004820152601860248201527713585e081dd85b1b195d08185b5bdd5b9d08195e18d9595960421b6044820152606401610ca7565b6001600160a01b038084166000818152602a60205260408082204260019182018190559489168084529282902001939093559151909190600080516020615f4e83398151915290610c4c9086815260200190565b6000808080808061487d8888613291565b90506000603e60009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156148d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148f89190615e6f565b9050600080603e60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015614950573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149749190615ed8565b50603f546001600160a01b039081166000908152602a60205260409020546001600160701b039384169550919092169250903090851603614a7d576000603d60009054906101000a90046001600160a01b03166001600160a01b03166385f8c2598e85876040518463ffffffff1660e01b81526004016149f693929190615687565b602060405180830381865afa158015614a13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a3791906159ee565b90506000614a5585610ee7614a4e6012600a615ce6565b87906131b0565b9050614a7481610ee7614a6887866132ed565b6110c16012600a615ce6565b99505050614b3b565b6000603d60009054906101000a90046001600160a01b03166001600160a01b03166385f8c2598e86866040518463ffffffff1660e01b8152600401614ac493929190615687565b602060405180830381865afa158015614ae1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b0591906159ee565b90506000614b2384610ee7614b1c6012600a615ce6565b88906131b0565b9050614b3681610ee7614a6888866132ed565b995050505b6000602854118015614b4f57506000602754115b15614ba357614b6f6103e8610ee7602854886131b090919063ffffffff16565b96506000614b8e6103e8610ee7602754896131b090919063ffffffff16565b602954909150614b9e90826132ed565b602955505b614bad8888613291565b955060265460295410614be557602654614bc8908790613291565b9550614be160265460295461329190919063ffffffff16565b6029555b80861115614eb5576000614bf98783613291565b90506000601e54601d54601c54614c109190615d94565b614c1a9190615d94565b306000908152602a6020526040902054909150811115614c755760405162461bcd60e51b815260206004820152601660248201527518dbdb9d1c9858dd081a5cc81a5b58985b185b98d95960521b6044820152606401610ca7565b306000908152602a6020526040812054614c8f9083613291565b9050828110614d2f57306000908152602a6020526040902054614cb29084613291565b306000908152602a602052604080822092909255603f546001600160a01b031681522054614ce090846132ed565b603f80546001600160a01b039081166000908152602a602090815260409182902094909455915491518681529116913091600080516020615f4e833981519152910160405180910390a3614ead565b8015614dc857306000908152602a6020526040902054614d4f9082613291565b306000908152602a602052604080822092909255603f546001600160a01b031681522054614d7d90826132ed565b603f80546001600160a01b039081166000908152602a602090815260409182902094909455915491518481529116913091600080516020615f4e833981519152910160405180910390a35b614dd46012600a615ce6565b614de290633b9aca00615cf5565b60015414614ea757614df48382613291565b9c50614e026012600a615ce6565b614e1090633b9aca00615cf5565b600154614e1d908f6132ed565b1115614e5257600154614e4a90614e366012600a615ce6565b614e4490633b9aca00615cf5565b90613291565b60026003559c505b600154614e5f908e6132ed565b600155603f546001600160a01b03166000908152602a6020526040902054614e87908e6132ed565b603f546001600160a01b03166000908152602a6020526040902055614ead565b60026003555b505050614f6b565b614ec9614ec28288613291565b8a906132ed565b603f546001600160a01b03166000908152602a6020526040902054909950614ef1908a613291565b603f546001600160a01b03166000908152602a6020526040808220929092553081522054614f1f908a6132ed565b306000818152602a60205260409081902092909255603f54915190916001600160a01b031690600080516020615f4e83398151915290614f62908d815260200190565b60405180910390a35b6040518a907f9b0cc008a443ad5d27f5ccc0cb8f206f8a51bfd2a7f4a9ac3313b41747f4624790614fa990869086908a908c9088908f908990615f1d565b60405180910390a150505050505050505050505050565b600080808080614fd08787613291565b90506000603e60009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015615027573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061504b9190615e6f565b9050600080603e60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156150a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906150c79190615ed8565b50603f546001600160a01b039081166000908152602a60205260408120546001600160701b03948516965092909316935090919030908616036151bc576000603d60009054906101000a90046001600160a01b03166001600160a01b031663054d50d48e87876040518463ffffffff1660e01b815260040161514b93929190615687565b602060405180830381865afa158015615168573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061518c91906159ee565b90506151a185610ee7614a4e6012600a615ce6565b98506151b489610ee7614a688785613291565b995050615270565b6000603d60009054906101000a90046001600160a01b03166001600160a01b031663054d50d48e86886040518463ffffffff1660e01b815260040161520393929190615687565b602060405180830381865afa158015615220573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061524491906159ee565b905061525984610ee7614b1c6012600a615ce6565b985061526c89610ee7614a688885613291565b9950505b600060285411801561528457506000602754115b156152d8576152a46103e8610ee7602854896131b090919063ffffffff16565b965060006152c36103e8610ee76027548a6131b090919063ffffffff16565b6029549091506152d390826132ed565b602955505b6152e289886132ed565b90506026546029541061531a576026546152fd908290613291565b905061531660265460295461329190919063ffffffff16565b6029555b60006153268383613291565b9050615332828e613291565b603f546001600160a01b03166000908152602a602052604090205561535787826132ed565b9a50603e60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156153a957600080fd5b505af11580156153bd573d6000803e3d6000fd5b5050603f546001600160a01b03166000908152602a6020526040902084905550508a1561544a57306000908152602a60205260409020546153fe908c6132ed565b306000818152602a60205260409081902092909255603f54915190916001600160a01b031690600080516020615f4e83398151915290615441908f815260200190565b60405180910390a35b60008b9050603f60009054906101000a90046001600160a01b03166001600160a01b03168f6001600160a01b0316600080516020615f4e8339815191528a60405161549791815260200190565b60405180910390a37f9b0cc008a443ad5d27f5ccc0cb8f206f8a51bfd2a7f4a9ac3313b41747f4624786868a86888e876040516154da9796959493929190615f1d565b60405180910390a1505050505050505050505050505050565b600060208083528351808285015260005b8181101561552057858101830151858201604001528201615504565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612ad457600080fd5b6000806040838503121561556957600080fd5b823561557481615541565b946020939093013593505050565b6000806040838503121561559557600080fd5b82356155a081615541565b915060208301356155b081615541565b809150509250929050565b60008083601f8401126155cd57600080fd5b5081356001600160401b038111156155e457600080fd5b6020830191508360208260051b85010111156155ff57600080fd5b9250929050565b8015158114612ad457600080fd5b60008060006040848603121561562957600080fd5b83356001600160401b0381111561563f57600080fd5b61564b868287016155bb565b909450925050602084013561565f81615606565b809150509250925092565b60006020828403121561567c57600080fd5b813561323281615541565b9283526020830191909152604082015260600190565b6000806000606084860312156156b257600080fd5b83356156bd81615541565b925060208401356156cd81615541565b929592945050506040919091013590565b6001600160a01b0391909116815260200190565b6000806040838503121561570557600080fd5b823561571081615541565b915060208301356155b081615606565b6000806000806080858703121561573657600080fd5b5050823594602084013594506040840135936060013592509050565b60008060008060006060868803121561576a57600080fd5b853561577581615541565b945060208601356001600160401b038082111561579157600080fd5b61579d89838a016155bb565b909650945060408801359150808211156157b657600080fd5b506157c3888289016155bb565b969995985093965092949392505050565b60008060008060008060c087890312156157ed57600080fd5b86356157f881615606565b9550602087013561580881615606565b9450604087013561581881615606565b9350606087013561582881615606565b92506080870135915060a087013561583f81615606565b809150509295509295509295565b6000806040838503121561586057600080fd5b50508035926020909101359150565b6000806000806080858703121561588557600080fd5b843561589081615541565b935060208501356158a081615541565b925060408501356158b081615541565b9396929550929360600135925050565b60008060008060008060006080888a0312156158db57600080fd5b87356001600160401b03808211156158f257600080fd5b6158fe8b838c016155bb565b909950975060208a0135915061591382615606565b9095506040890135908082111561592957600080fd5b6159358b838c016155bb565b909650945060608a013591508082111561594e57600080fd5b5061595b8a828b016155bb565b989b979a50959850939692959293505050565b60006020828403121561598057600080fd5b5035919050565b600080600080600060a0868803121561599f57600080fd5b8535945060208601359350604086013592506060860135915060808601356159c681615606565b809150509295509295909350565b6001600160a01b0392831681529116602082015260400190565b600060208284031215615a0057600080fd5b5051919050565b6020808252601d908201527f63616c6c65722069736e74206775726469616e206e6f72204f776e6572000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201615a7c57615a7c615a54565b5060010190565b6020808252604e908201527f73656e64657220697320616464656420746f2076657374696e67206d6f64652060408201527f2c2063616e74207472616e73666572206265666f72652074686520706572696f60608201526d19081a5cc818dbdb5c1b195d195960921b608082015260a00190565b6020808252604b908201527f73656e64657220697320616464656420746f2076657374696e67206d6f64652060408201527f2c2063616e742073656c6c206d6f7265207468616e20313025206f662062616c60608201526a185b98d948185b5bdd5b9d60aa1b608082015260a00190565b6020808252601790820152760dedcd8f240eed0d2e8cad8d2e6e8cac840c6c2dc40e8f604b1b604082015260600190565b6020808252601a90820152790dedcd8f240eed0d2e8cad8d2e6e840dadec8ca40c6c2dc40e8f60331b604082015260600190565b6020808252818101527f6f6e6c79206f776e65722063616e2063616c6c207468652066756e6374696f6e604082015260600190565b600181815b80851115615c3d578160001904821115615c2357615c23615a54565b80851615615c3057918102915b93841c9390800290615c07565b509250929050565b600082615c5457506001612cd2565b81615c6157506000612cd2565b8160018114615c775760028114615c8157615c9d565b6001915050612cd2565b60ff841115615c9257615c92615a54565b50506001821b612cd2565b5060208310610133831016604e8410600b8410161715615cc0575081810a612cd2565b615cca8383615c02565b8060001904821115615cde57615cde615a54565b029392505050565b600061323260ff841683615c45565b8082028115828204841417612cd257612cd2615a54565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060208284031215615d4257600080fd5b815161323281615606565b602080825260149082015273696e73756666696369656e742062616c616e636560601b604082015260600190565b6001600160a01b03929092168252602082015260400190565b80820180821115612cd257612cd2615a54565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015615df75784516001600160a01b031683529383019391830191600101615dd2565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215615e2d57600080fd5b8351925060208401519150604084015190509250925092565b6020808252600f908201526e696e76616c6964206164647265737360881b604082015260600190565b600060208284031215615e8157600080fd5b815161323281615541565b600082615ea957634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115612cd257612cd2615a54565b80516001600160701b0381168114612f9a57600080fd5b600080600060608486031215615eed57600080fd5b615ef684615ec1565b9250615f0460208501615ec1565b9150604084015163ffffffff8116811461565f57600080fd5b968752602087019590955260408601939093526060850191909152608084015260a083015260c082015260e0019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212203d127d3585a15a193bc28374e307ac312f4f47575bf9aaae793227aa7ab397a564736f6c6343000811003360806040523480156200001157600080fd5b5060405162001208380380620012088339810160408190526200003491620001c3565b6001600160a01b038316620000905760405162461bcd60e51b815260206004820152601660248201527f696e76616c696420726f7574657220616464726573730000000000000000000060448201526064015b60405180910390fd5b6001600160a01b038216620000e85760405162461bcd60e51b815260206004820152601860248201527f696e76616c696420706567546f6b656e20416464726573730000000000000000604482015260640162000087565b6001600160a01b038116620001405760405162461bcd60e51b815260206004820152601a60248201527f696e76616c6964206e6174697665436f696e2061646472657373000000000000604482015260640162000087565b600380546001600160a01b039485166001600160a01b03199182168117909255600680548216909217909155600180549385169382168417905560048054821690931790925560028054919093169082161790915560008054909116331790556200020d565b80516001600160a01b0381168114620001be57600080fd5b919050565b600080600060608486031215620001d957600080fd5b620001e484620001a6565b9250620001f460208501620001a6565b91506200020460408501620001a6565b90509250925092565b610feb806200021d6000396000f3fe6080604052600436106100b15760003560e01c806301e33667146100bd57806314b6ca96146100df578063167b78cd146100ff57806330188ee814610135578063343eef8a146101595780634d5c5cef1461016e578063575c80251461018357806370d64f17146101a357806372e5eae2146101c357806390a889b7146101e3578063b3950de114610203578063bba482b414610216578063e6c6b0f614610236578063f675ebdd1461024c57600080fd5b366100b857005b600080fd5b3480156100c957600080fd5b506100dd6100d8366004610d2f565b610262565b005b3480156100eb57600080fd5b506100dd6100fa366004610d6b565b610323565b34801561010b57600080fd5b5060025461011f906001600160a01b031681565b60405161012c9190610d95565b60405180910390f35b34801561014157600080fd5b5061014b60095481565b60405190815260200161012c565b34801561016557600080fd5b5061014b6103e4565b34801561017a57600080fd5b5061014b61040e565b34801561018f57600080fd5b5061014b61019e366004610da9565b610481565b3480156101af57600080fd5b5061014b6101be366004610d6b565b6104ae565b3480156101cf57600080fd5b506100dd6101de366004610ddc565b610656565b3480156101ef57600080fd5b5060015461011f906001600160a01b031681565b61014b610211366004610e08565b6106f4565b34801561022257600080fd5b506100dd610231366004610da9565b6109e9565b34801561024257600080fd5b5061014b60085481565b34801561025857600080fd5b5061014b600a5481565b6000546001600160a01b0316331461027957600080fd5b6001600160a01b03821661028c57600080fd5b6009546102999082610b79565b600955600a546102a99082610bdd565b600a5560405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb906102da9085908590600401610e26565b6020604051808303816000875af11580156102f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061031d9190610e3f565b50505050565b6000546001600160a01b0316331461033a57600080fd5b6001546001600160a01b0390811660009081526007602090815260408083209386168352929052205461036d9082610b79565b6001546001600160a01b03908116600090815260076020908152604080832093871683529290522055600a546103a39082610b79565b600a556040517fd9d52af7867c8282cb7d91b0c2868ffa9977a15158e1c3221ef446c837cb4be7906103d89084908490610e26565b60405180910390a15050565b6000610409600a54610403600954600854610bdd90919063ffffffff16565b90610bdd565b905090565b600480546040516370a0823160e01b81526000926001600160a01b03909216916370a082319161044091309101610d95565b602060405180830381865afa15801561045d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104099190610e5c565b6001600160a01b038083166000908152600760209081526040808320938516835292905220545b92915050565b600080546001600160a01b031633146104c657600080fd5b60035460405163095ea7b360e01b81526001600160a01b038581169263095ea7b3926104fa92909116908690600401610e26565b6020604051808303816000875af1158015610519573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053d9190610e3f565b50600080546040805160028082526060820183526001600160a01b039093163193929091602083019080368337019050509050848160008151811061058457610584610e75565b6001600160a01b0392831660209182029290920101526002548251911690829060019081106105b5576105b5610e75565b6001600160a01b0392831660209182029290920101526006546000805460405163791ac94760e01b81529284169363791ac94793610600938a93909288929116904290600401610ecf565b600060405180830381600087803b15801561061a57600080fd5b505af115801561062e573d6000803e3d6000fd5b50506000805490925061064c91506001600160a01b03163184610bdd565b9695505050505050565b6000546001600160a01b0316331461066d57600080fd5b6001600160a01b0381166106c85760405162461bcd60e51b815260206004820181905260248201527f696e76616c696420207072696e7465722061646469696e67206164647265737360448201526064015b60405180910390fd5b600180546001600160a01b039092166001600160a01b0319928316811790915560048054909216179055565b600080546001600160a01b0316331461070c57600080fd5b600480546040516370a0823160e01b815260009283926001600160a01b0316916370a082319161073e91309101610d95565b602060405180830381865afa15801561075b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077f9190610e5c565b6040805160028082526060820183529293506000929091602083019080368337505060025482519293506001600160a01b0316918391506000906107c5576107c5610e75565b6001600160a01b03928316602091820292909201015260018054835192169183919081106107f5576107f5610e75565b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de9590349061083b90600090869030904290600401610f0b565b6000604051808303818588803b15801561085457600080fd5b505af1158015610868573d6000803e3d6000fd5b5050600480546040516370a0823160e01b8152600095508794506001600160a01b0390911692506370a08231916108a191309101610d95565b602060405180830381865afa1580156108be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e29190610e5c565b6108ec9190610f56565b90507ffd518100ba709c72e02205703a0c599e318336c967e5d254d16754b221acd1818160405161091f91815260200190565b60405180910390a18615156001036109c5576109476103e86109418389610c39565b90610cbb565b6004805460005460405163a9059cbb60e01b81529397506001600160a01b039182169363a9059cbb936109809390921691899101610e26565b6020604051808303816000875af115801561099f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c39190610e3f565b505b6109db6109d28286610bdd565b60085490610b79565b600855509195945050505050565b6000546001600160a01b03163314610a0057600080fd5b6001600160a01b03808316600090815260076020908152604080832093851683529290522054610a6a5760405162461bcd60e51b8152602060048201526015602482015274696e737566666963696e65742062616c616e63657360581b60448201526064016106bf565b6001600160a01b03828116600090815260076020908152604080832093851683529290529081208054919055600954610aa39082610b79565b600955600a54610ab39082610bdd565b600a556004805460405163a9059cbb60e01b81526001600160a01b039091169163a9059cbb91610ae7918691869101610e26565b6020604051808303816000875af1158015610b06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2a9190610e3f565b50604080513081526001600160a01b03841660208201529081018290527fed796ee78ff544a644a61ebe44847a2df6de9bd938486286253b8a0f9866620a9060600160405180910390a1505050565b600080610b868385610f69565b905083811015610bd65760405162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b60448201526064016106bf565b9392505050565b600082821115610c2f5760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f77000060448201526064016106bf565b610bd68284610f56565b600082600003610c4b575060006104a8565b6000610c578385610f7c565b905082610c648583610f93565b14610bd65760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016106bf565b6000808211610d095760405162461bcd60e51b815260206004820152601a602482015279536166654d6174683a206469766973696f6e206279207a65726f60301b60448201526064016106bf565b610bd68284610f93565b80356001600160a01b0381168114610d2a57600080fd5b919050565b600080600060608486031215610d4457600080fd5b610d4d84610d13565b9250610d5b60208501610d13565b9150604084013590509250925092565b60008060408385031215610d7e57600080fd5b610d8783610d13565b946020939093013593505050565b6001600160a01b0391909116815260200190565b60008060408385031215610dbc57600080fd5b610dc583610d13565b9150610dd360208401610d13565b90509250929050565b600060208284031215610dee57600080fd5b610bd682610d13565b8015158114610e0557600080fd5b50565b60008060408385031215610e1b57600080fd5b8235610d8781610df7565b6001600160a01b03929092168252602082015260400190565b600060208284031215610e5157600080fd5b8151610bd681610df7565b600060208284031215610e6e57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b83811015610ec45781516001600160a01b031687529582019590820190600101610e9f565b509495945050505050565b85815284602082015260a060408201526000610eee60a0830186610e8b565b6001600160a01b0394909416606083015250608001529392505050565b848152608060208201526000610f246080830186610e8b565b6001600160a01b03949094166040830152506060015292915050565b634e487b7160e01b600052601160045260246000fd5b818103818111156104a8576104a8610f40565b808201808211156104a8576104a8610f40565b80820281158282048414176104a8576104a8610f40565b600082610fb057634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212205468fbc48cf8fbe5eabc749bbbc7ae7ba922a07a8923b6b3b6d1b871a4f07d3b64736f6c6343000811003300000000000000000000000031f63a33141ffee63d4b26755430a390acdd8a4d

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

00000000000000000000000031f63a33141ffee63d4b26755430a390acdd8a4d

-----Decoded View---------------
Arg [0] : _routerAddress (address): 0x31f63a33141ffee63d4b26755430a390acdd8a4d

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000031f63a33141ffee63d4b26755430a390acdd8a4d


Deployed ByteCode Sourcemap

12267:41201:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20156:94;;;;;;;;;;-1:-1:-1;20237:5:0;;;;;;;;;;;;-1:-1:-1;;;20237:5:0;;;;20156:94;;;;;;;:::i;:::-;;;;;;;;20628:274;;;;;;;;;;-1:-1:-1;20628:274:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;20628:274:0;1023:187:1;13017:38:0;;;;;;;;;;-1:-1:-1;13017:38:0;;;;;;;;;;;51128:304;;;;;;;;;;-1:-1:-1;51128:304:0;;;;;:::i;:::-;;:::i;:::-;;12697:54;;;;;;;;;;;;;;;;;;;1754:25:1;;;1742:2;1727:18;12697:54:0;1608:177:1;45798:291:0;;;;;;;;;;-1:-1:-1;45798:291:0;;;;;:::i;:::-;;:::i;16879:39::-;;;;;;;;;;-1:-1:-1;16879:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21315:218::-;;;;;;;;;;-1:-1:-1;21315:218:0;;;;;:::i;:::-;;:::i;13137:20::-;;;;;;;;;;;;;;;;20364:94;;;;;;;;;;-1:-1:-1;20364:94:0;;12604:2;4035:36:1;;4023:2;4008:18;20364:94:0;3893:184:1;17322:28:0;;;;;;;;;;-1:-1:-1;17322:28:0;;;;-1:-1:-1;;;;;17322:28:0;;;;;;;;;;:::i;44757:154::-;;;;;;;;;;-1:-1:-1;44757:154:0;;;;;:::i;:::-;;:::i;16372:45::-;;;;;;;;;;-1:-1:-1;16372:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16484:43;;;;;;;;;;-1:-1:-1;16484:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;43152:362;;;;;;;;;;-1:-1:-1;43152:362:0;;;;;:::i;:::-;;:::i;15024:76::-;;;;;;;;;;;;;;;;17403:23;;;;;;;;;;-1:-1:-1;17403:23:0;;;;-1:-1:-1;;;;;17403:23:0;;;45521:269;;;;;;;;;;-1:-1:-1;45521:269:0;;;;;:::i;:::-;;:::i;16534:41::-;;;;;;;;;;-1:-1:-1;16534:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13062:31;;;;;;;;;;-1:-1:-1;13062:31:0;;;;;;;;;;;52789:672;;;;;;;;;;-1:-1:-1;52789:672:0;;;;;:::i;:::-;;:::i;51897:338::-;;;;;;;;;;-1:-1:-1;51897:338:0;;;;;:::i;:::-;;:::i;30822:2755::-;;;;;;;;;;;;;:::i;47109:730::-;;;;;;;;;;-1:-1:-1;47109:730:0;;;;;:::i;:::-;;:::i;20468:144::-;;;;;;;;;;-1:-1:-1;20468:144:0;;;;;:::i;:::-;-1:-1:-1;;;;;20578:18:0;20551:7;20578:18;;;:9;:18;;;;;:26;;20468:144;42839:305;;;;;;;;;;-1:-1:-1;42839:305:0;;;;;:::i;:::-;;:::i;46357:230::-;;;;;;;;;;-1:-1:-1;46357:230:0;;;;;:::i;:::-;;:::i;14878:39::-;;;;;;;;;;;;;;;;16679:43;;;;;;;;;;-1:-1:-1;16679:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13100:30;;;;;;;;;;-1:-1:-1;13100:30:0;;;;-1:-1:-1;;;13100:30:0;;;;;;50106:642;;;;;;;;;;-1:-1:-1;50106:642:0;;;;;:::i;:::-;;:::i;43526:286::-;;;;;;;;;;-1:-1:-1;43526:286:0;;;;;:::i;:::-;;:::i;34689:252::-;;;;;;;;;;;;;:::i;16424:53::-;;;;;;;;;;-1:-1:-1;16424:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7311:14:1;;7304:22;7286:41;;7358:2;7343:18;;7336:34;;;;7386:18;;;7379:34;7274:2;7259:18;16424:53:0;7090:329:1;14039:88:0;;;;;;;;;;;;;;;;15751:26;;;;;;;;;;;;;;;;20258:98;;;;;;;;;;-1:-1:-1;20341:7:0;;;;;;;;;;;;-1:-1:-1;;;20341:7:0;;;;20258:98;;52243:536;;;;;;;;;;-1:-1:-1;52243:536:0;;;;;:::i;:::-;;:::i;43820:929::-;;;;;;;;;;-1:-1:-1;43820:929:0;;;;;:::i;:::-;;:::i;21090:207::-;;;;;;;;;;-1:-1:-1;21090:207:0;;;;;:::i;:::-;;:::i;12975:35::-;;;;;;;;;;-1:-1:-1;12975:35:0;;;;;;;;;;;51656:233;;;;;;;;;;-1:-1:-1;51656:233:0;;;;;:::i;:::-;;:::i;12397:20::-;;;;;;;;;;-1:-1:-1;12397:20:0;;;;-1:-1:-1;;;;;12397:20:0;;;46927:174;;;;;;;;;;-1:-1:-1;46927:174:0;;;;;:::i;:::-;;:::i;50762:356::-;;;;;;;;;;-1:-1:-1;50762:356:0;;;;;:::i;:::-;;:::i;13440:23::-;;;;;;;;;;-1:-1:-1;13440:23:0;;;;-1:-1:-1;;;;;13440:23:0;;;12937:31;;;;;;;;;;-1:-1:-1;12937:31:0;;;;;;;;46104:238;;;;;;;;;;-1:-1:-1;46104:238:0;;;;;:::i;:::-;;:::i;44919:590::-;;;;;;;;;;-1:-1:-1;44919:590:0;;;;;:::i;:::-;;:::i;20910:172::-;;;;;;;;;;-1:-1:-1;20910:172:0;;;;;:::i;:::-;;:::i;49163:935::-;;;;;;;;;;-1:-1:-1;49163:935:0;;;;;:::i;:::-;;:::i;46595:322::-;;;;;;;;;;-1:-1:-1;46595:322:0;;;;;:::i;:::-;;:::i;17259:29::-;;;;;;;;;;-1:-1:-1;17259:29:0;;;;-1:-1:-1;;;;;17259:29:0;;;51440:198;;;;;;;;;;-1:-1:-1;51440:198:0;;;;;:::i;:::-;;:::i;16582:42::-;;;;;;;;;;-1:-1:-1;16582:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13290:70;;;;;;;;;;-1:-1:-1;13290:70:0;;;;-1:-1:-1;;;;;13290:70:0;;;14134:93;;;;;;;;;;;;;;;;47849:1294;;;;;;;;;;-1:-1:-1;47849:1294:0;;;;;:::i;:::-;;:::i;20628:274::-;20761:4;18786:10;18808:4;18786:27;18782:329;;18844:7;;18867:10;;18844:46;;-1:-1:-1;;;18844:46:0;;18830:11;;-1:-1:-1;;;;;18844:7:0;;;;:22;;:46;;18867:10;;;;18879;;18844:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18830:60;-1:-1:-1;18910:10:0;;18905:195;;18948:10;18979:1;18941:18;;;:6;:18;;;;;;:35;;:39;;;;19003:7;;19032:10;;19003:52;;-1:-1:-1;;;19003:52:0;;-1:-1:-1;;;;;19003:7:0;;;;:28;;:52;;19032:10;;19003:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18999:68;;18815:296;18782:329;19221:17:::1;::::0;19204:4:::1;19186:24;::::0;;;:9:::1;:24;::::0;;;;:32;20746:4:::1;::::0;-1:-1:-1;19186:65:0;::::1;;;;19242:4;;19250:1;19242:9;;19186:65;:87;;;;-1:-1:-1::0;19269:4:0::1;19255:18:::0;::::1;;;19186:87;19183:129;;;19289:11;:9;:11::i;:::-;20790:10:::2;20778:23;::::0;;;:11:::2;:23;::::0;;;;;;;-1:-1:-1;;;;;20778:32:0;::::2;::::0;;;;;;;;;;:41;;;20835:37;1754:25:1;;;20778:32:0;;20790:10;20835:37:::2;::::0;1727:18:1;20835:37:0::2;;;;;;;;-1:-1:-1::0;20890:4:0::2;::::0;20628:274;-1:-1:-1;;;20628:274:0:o;51128:304::-;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;51251:32:0;::::1;::::0;::::1;::::0;:69:::1;;-1:-1:-1::0;;;;;;51287:33:0;::::1;::::0;::::1;51251:69;51243:78;;;::::0;::::1;;51332:20;:41:::0;;-1:-1:-1;;;;;51332:41:0;;::::1;-1:-1:-1::0;;;;;;51332:41:0;;::::1;;::::0;;;51384:18:::1;:40:::0;;;;;::::1;::::0;::::1;;::::0;;51128:304::o;45798:291::-;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;45908:6:::1;45904:177;45921:23:::0;;::::1;45904:177;;;45996:1;45969:12:::0;;45982:1;45969:15;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;45969:29:0::1;;45966:104;;46048:6;46013:15;:32;46029:12;;46042:1;46029:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;46013:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;46013:32:0;:41;;-1:-1:-1;;46013:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;45966:104:::1;45947:3:::0;::::1;::::0;::::1;:::i;:::-;;;;45904:177;;;;45798:291:::0;;;:::o;21315:218::-;-1:-1:-1;;;;;17915:22:0;;21474:4;17915:22;;;:14;:22;;;;;:32;21447:4;;21453:2;;21457:6;;17915:32;;:40;;:32;:40;:66;;;;-1:-1:-1;17973:8:0;;-1:-1:-1;;;;;17959:22:0;;;17973:8;;17959:22;17915:66;17912:545;;;-1:-1:-1;;;;;18000:17:0;;;;;;:9;:17;;;;;:28;;;:33;17997:256;;-1:-1:-1;;;;;18115:22:0;;;;;;:14;:22;;;;;;;;:38;;;18082:9;:17;;;;;;:28;;;18060:51;;18061:15;;18060:21;:51::i;:::-;:93;;18052:185;;;;-1:-1:-1;;;18052:185:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18300:22:0;;;;;;:14;:22;;;;;:38;;;18288:77;;13567:4;;18289:50;;:6;;:10;:50::i;:::-;18288:56;;:77::i;:::-;18278:6;:87;;18270:175;;;;-1:-1:-1;;;18270:175:0;;;;;;;:::i;:::-;18471:4;;:9;:25;;;;-1:-1:-1;18485:11:0;;;;;;;18484:12;18471:25;:54;;;;18500:4;;18508:1;18500:9;:25;;;;-1:-1:-1;18514:11:0;;;;;;;18513:12;18500:25;18468:237;;;-1:-1:-1;;;;;18549:25:0;;;;;;:13;:25;;;;;;;;:33;;:25;:33;18541:69;;;;-1:-1:-1;;;18541:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18633:21:0;;;;;;:13;:21;;;;;;;;:29;;:21;:29;18625:68;;;;-1:-1:-1;;;18625:68:0;;;;;;;:::i;:::-;21498:27:::1;21508:4;21514:2;21518:6;21498:9;:27::i;:::-;21491:34:::0;21315:218;-1:-1:-1;;;;;;;21315:218:0:o;44757:154::-;17602:5;;-1:-1:-1;;;;;17602:5:0;17588:10;:19;17580:64;;;;-1:-1:-1;;;17580:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44846:18:0;::::1;44838:27;;;::::0;::::1;;-1:-1:-1::0;;;;;44876:15:0;;;::::1;;::::0;;;:9:::1;:15;::::0;;;;:27;;-1:-1:-1;;44876:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;44757:154::o;43152:362::-;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;43297:15:::1;:33:::0;;;43341:14:::1;:35:::0;;;43387:16:::1;:36:::0;;;43454:52:::1;13567:4;43455:25;43469:10:::0;12653:13:::1;12604:2;12653;:13;:::i;:::-;12641:26;::::0;:10:::1;:26;:::i;:::-;43455:13:::0;::::1;:25::i;43454:52::-;43434:17;:72:::0;-1:-1:-1;;;;43152:362:0:o;45521:269::-;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;45627:6:::1;45623:160;45640:23:::0;;::::1;45623:160;;;45716:1;45689:12:::0;;45702:1;45689:15;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;45689:29:0::1;;45686:96;;45764:6;45733:11;:28;45745:12;;45758:1;45745:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;45733:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;45733:28:0;:37;;-1:-1:-1;;45733:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;45686:96:::1;45666:3:::0;::::1;::::0;::::1;:::i;:::-;;;;45623:160;;52789:672:::0;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;52935:45;;::::1;52927:118;;;::::0;-1:-1:-1;;;52927:118:0;;15012:2:1;52927:118:0::1;::::0;::::1;14994:21:1::0;15051:2;15031:18;;;15024:30;15090:34;15070:18;;;15063:62;-1:-1:-1;;;15141:18:1;;;15134:58;15209:19;;52927:118:0::1;14810:424:1::0;52927:118:0::1;53060:6;53056:398;53072:24:::0;;::::1;53056:398;;;53117:18;53138:13;;53152:1;53138:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;53117:37;;53169:11;53183:14;;53198:1;53183:17;;;;;;;:::i;:::-;;;;;;;53169:31;;53215:14;53239:9;-1:-1:-1::0;;;;;53232:27:0::1;;53260:10;53232:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53215:56;;53307:6;53294:9;:19;;53286:65;;;::::0;-1:-1:-1;;;53286:65:0;;15441:2:1;53286:65:0::1;::::0;::::1;15423:21:1::0;15480:2;15460:18;;;15453:30;15519:34;15499:18;;;15492:62;-1:-1:-1;;;15570:18:1;;;15563:31;15611:19;;53286:65:0::1;15239:397:1::0;53286:65:0::1;53366:62;::::0;-1:-1:-1;;;53366:62:0;;-1:-1:-1;;;;;53366:30:0;::::1;::::0;::::1;::::0;:62:::1;::::0;53397:10:::1;::::0;53409;;53421:6;;53366:62:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;53102:352;;;53098:3;;;;;:::i;:::-;;;;53056:398;;;;52789:672:::0;;;;;:::o;51897:338::-;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;52007:23:0;::::1;51999:32;;;::::0;::::1;;52062:42;::::0;-1:-1:-1;;;52062:42:0;;52042:17:::1;::::0;-1:-1:-1;;;;;52062:27:0;::::1;::::0;::::1;::::0;:42:::1;::::0;52098:4:::1;::::0;52062:42:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52042:62;;52140:6;52124:12;:22;;52116:55;;;;-1:-1:-1::0;;;52116:55:0::1;;;;;;;:::i;:::-;52182:45;::::0;-1:-1:-1;;;52182:45:0;;-1:-1:-1;;;;;52182:26:0;::::1;::::0;::::1;::::0;:45:::1;::::0;52209:9;;52220:6;;52182:45:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;51988:247;51897:338:::0;;;:::o;30822:2755::-;17505:6;:13;;-1:-1:-1;;;;17505:13:0;-1:-1:-1;;;17505:13:0;;;30949:25:::1;::::0;30922:24:::1;::::0;30893:26:::1;::::0;17505:13;;30949:25;30893:53:::1;::::0;::::1;:::i;:::-;:81;;;;:::i;:::-;30868:106:::0;-1:-1:-1;30988:21:0;;30985:2585:::1;;31050:4;31032:24;::::0;;;:9:::1;:24;::::0;;;;:32;:53;-1:-1:-1;31032:53:0::1;31024:103;;;::::0;-1:-1:-1;;;31024:103:0;;17231:2:1;31024:103:0::1;::::0;::::1;17213:21:1::0;17270:2;17250:18;;;17243:30;17309:34;17289:18;;;17282:62;-1:-1:-1;;;17360:18:1;;;17353:35;17405:19;;31024:103:0::1;17029:401:1::0;31024:103:0::1;31150:22;31189:21:::0;31227:23:::1;31267:25:::0;31306:16:::1;31325:56;31356:24;;31325:26;;:30;;:56;;;;:::i;:::-;31395:12;::::0;31306:75;;-1:-1:-1;31395:12:0::1;;:20;;:12:::0;:20;31392:107:::1;;31461:25;::::0;31445:42:::1;::::0;:11;;:15:::1;:42::i;:::-;31431:56;;31392:107;31604:16;::::0;;31618:1:::1;31604:16:::0;;;;;::::1;::::0;;31545:4:::1;31536:23;::::0;31511:22:::1;::::0;31604:16;31618:1;31604:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;31604:16:0::1;31580:40;;31649:4;31631;31636:1;31631:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;31631:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;31675:10:::1;::::0;31665:7;;31675:10;::::1;::::0;31665:4;;31675:10;;31665:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;31665:20:0;;::::1;:7;::::0;;::::1;::::0;;;;;:20;31707:6:::1;::::0;:187:::1;::::0;-1:-1:-1;;;31707:187:0;;:6;::::1;::::0;:57:::1;::::0;:187:::1;::::0;31779:11;;31707:6:::1;::::0;31821:4;;31848::::1;::::0;31868:15:::1;::::0;31707:187:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;31905:18:0::1;::::0;-1:-1:-1;31926:45:0::1;::::0;-1:-1:-1;;31936:4:0::1;31927:23;31956:14:::0;31926:29:::1;:45::i;:::-;31989:24;::::0;31905:66;;-1:-1:-1;31989:28:0;31986:242:::1;;32048:59;32095:11;32049:40;32064:24;;32049:10;:14;;:40;;;;:::i;32048:59::-;32130:18;::::0;32122:51:::1;::::0;32032:75;;-1:-1:-1;;;;;;32130:18:0::1;::::0;32122:51;::::1;;;::::0;32032:75;;32130:18:::1;32122:51:::0;32130:18;32122:51;32032:75;32130:18;32122:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;32215:1:0::1;32188:24;:28:::0;31986:242:::1;32251:12;::::0;::::1;;:20;;:12:::0;:20;32248:124:::1;;32300:60;32348:11;32301:41;32316:25;;32301:10;:14;;:41;;;;:::i;32300:60::-;32283:77;;32248:124;32415:1;32398:14;:18;:42;;;;-1:-1:-1::0;32420:12:0::1;::::0;::::1;;:20;;:12:::0;:20:::1;32398:42;32395:315;;;32478:7;::::0;32517:19:::1;::::0;32538:14:::1;::::0;32478:75:::1;::::0;-1:-1:-1;;;32478:75:0;;32517:19;;;::::1;;;18745:14:1::0;18738:22;32478:75:0::1;::::0;::::1;18720:41:1::0;18777:18;;;18770:34;-1:-1:-1;;;;;32478:7:0;;::::1;::::0;:15:::1;::::0;32501:14;;18693:18:1;;32478:75:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32458:95;;32569:20;32592:7;;;;;;;;;-1:-1:-1::0;;;;;32592:7:0::1;-1:-1:-1::0;;;;;32592:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32569:43;;32627:27;32635:15;32652:1;32627:7;:27::i;:::-;-1:-1:-1::0;32697:1:0::1;32669:25;:29:::0;32395:315:::1;32745:1;32725:17;:21;:52;;;;-1:-1:-1::0;32750:19:0::1;::::0;;;::::1;;;:27;;32773:4;32750:27;32725:52;32722:547;;;32801:8;::::0;32793:41:::1;::::0;-1:-1:-1;;;32793:41:0;;::::1;::::0;::::1;1754:25:1::0;;;-1:-1:-1;;;;;32801:8:0;;::::1;::::0;32793:22:::1;::::0;1727:18:1;;32793:41:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;32856:10:0::1;::::0;32876:13:::1;::::0;32849:60:::1;::::0;-1:-1:-1;;;32849:60:0;;-1:-1:-1;;;;;32856:10:0;;::::1;::::0;32849:26:::1;::::0;:60:::1;::::0;32876:13;::::1;::::0;32891:17;;32849:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;32931:8:0::1;::::0;32949:13:::1;::::0;32924:58:::1;::::0;-1:-1:-1;;;32924:58:0;;-1:-1:-1;;;;;32931:8:0;;::::1;::::0;32924:24:::1;::::0;:58:::1;::::0;32949:13;::::1;::::0;32964:17;;32924:58:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;32997:6:0::1;::::0;33035:10:::1;::::0;33064:8:::1;::::0;32997:6:::1;33203:5:::0;;32997:260:::1;::::0;-1:-1:-1;;;32997:260:0;;-1:-1:-1;;;;;33035:10:0;;::::1;32997:260;::::0;::::1;19212:34:1::0;33064:8:0;;::::1;19262:18:1::0;;;19255:43;19314:18;;;19307:34;;;19357:18;;;19350:34;;;19400:19;;;19393:35;;;19444:19;;;19437:35;;;;33203:5:0;::::1;19488:19:1::0;;;19481:44;33227:15:0::1;19541:19:1::0;;;19534:35;32997:6:0;::::1;::::0;:19:::1;::::0;19146::1;;32997:260:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32722:547;33311:46;33326:30;33342:14:::0;33326:13;:30:::1;:::i;:::-;33311:10:::0;;:14:::1;:46::i;:::-;33397:1;33368:26;:30:::0;;;33417:20:::1;::::0;33409:55:::1;::::0;33293:64;;-1:-1:-1;;;;;;33417:20:0::1;::::0;33409:55;::::1;;;::::0;33293:64;;33409:55;;33397:1;33409:55;33293:64;33417:20;33409:55;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;33489:67;33509:14;33525:13;33540:15;33489:67;;;;;;;;:::i;:::-;;;;;;;;31010:2560;;;;;;;;30985:2585;-1:-1:-1::0;17523:6:0;:14;;-1:-1:-1;;;;17523:14:0;;;30822:2755::o;47109:730::-;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;47379:4:::1;47369:14:::0;::::1;;;:47:::0;::::1;;;;47415:1;47387:25;;:29;47369:47;:149;;;;;47421:97;47493:24;;47464:26;;47436:25;;:54;;;;:::i;:::-;:81;;;;:::i;:::-;47421:14;:97::i;:::-;47366:193;;;47534:10;:8;:10::i;:::-;-1:-1:-1::0;47576:12:0::1;:31:::0;;47771:29;::::1;;-1:-1:-1::0;;;47771:29:0::1;-1:-1:-1::0;;47679:43:0;::::1;;::::0;::::1;47771:29:::0;;;;-1:-1:-1;;47622:42:0;::::1;;47576:31;47622:42;-1:-1:-1::0;;47576:31:0;::::1;;47622:42:::0;;;;-1:-1:-1;;47622:42:0;;;;;;;;;;::::1;47771:29:::0;;;;;::::1;::::0;;;47737:11:::1;47815:12:::0;47109:730::o;42839:305::-;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;42946:6:::1;42942:185;42959:23:::0;;::::1;42942:185;;;43040:1;43013:12:::0;;43026:1;43013:15;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43013:29:0::1;::::0;43005:57:::1;;;;-1:-1:-1::0;;;43005:57:0::1;;;;;;;:::i;:::-;43109:6;43078:11;:28;43090:12;;43103:1;43090:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43078:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;43078:28:0;:37;;-1:-1:-1;;43078:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;42985:3;::::1;::::0;::::1;:::i;:::-;;;;42942:185;;46357:230:::0;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;46494:18:::1;:31:::0;;;;46536:24:::1;:43:::0;46357:230::o;50106:642::-;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;13976:3:::1;50293:43;50308:27;:7:::0;50320:14;50308:11:::1;:27::i;:::-;50293:10;::::0;;:14:::1;:43::i;:::-;:58;;50285:67;;;::::0;::::1;;13976:3;50370:43;50385:27;:7:::0;50397:14;50385:11:::1;:27::i;50370:43::-;:58;;50362:67;;;::::0;::::1;;13976:3;50447:49;50462:33;:13:::0;50480:14;50462:17:::1;:33::i;50447:49::-;:64;;50439:73;;;::::0;::::1;;13976:3;50530:49;50545:33;:13:::0;50563:14;50545:17:::1;:33::i;50530:49::-;:64;;50522:73;;;::::0;::::1;;50607:12;:29:::0;50646:6:::1;:16:::0;;;;50672:13:::1;:30:::0;;;;50712:12:::1;:28:::0;50106:642::o;43526:286::-;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;43634:6:::1;43630:173;43646:19:::0;;::::1;43630:173;;;43717:1;43694:8:::0;;43703:1;43694:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43694:25:0::1;::::0;43686:53:::1;;;::::0;-1:-1:-1;;;43686:53:0;;20437:2:1;43686:53:0::1;::::0;::::1;20419:21:1::0;20476:2;20456:18;;;20449:30;-1:-1:-1;;;20495:18:1;;;20488:45;20550:18;;43686:53:0::1;20235:339:1::0;43686:53:0::1;43783:8;43754:13;:26;43768:8;;43777:1;43768:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43754:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;43754:26:0;:37;;-1:-1:-1;;43754:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;43667:3;::::1;::::0;::::1;:::i;:::-;;;;43630:173;;34689:252:::0;34751:10;34741:21;;;;:9;:21;;;;;;;;:29;;:21;:29;;:61;;-1:-1:-1;34783:10:0;34773:21;;;;:9;:21;;;;;;;;:29;;:21;:29;34741:61;:84;;;-1:-1:-1;34820:5:0;;-1:-1:-1;;;;;34820:5:0;34806:10;:19;34741:84;34733:93;;;;;;34880:17;;34863:4;34845:24;;;;:9;:24;;;;;:32;:52;:65;;;;;34901:4;;34909:1;34901:9;;34845:65;34837:74;;;;;;34922:11;:9;:11::i;:::-;34689:252::o;52243:536::-;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;52396:32:0;::::1;::::0;52393:103:::1;;52443:21;:42:::0;;-1:-1:-1;;;;;;52443:42:0::1;-1:-1:-1::0;;;;;52443:42:0;::::1;;::::0;;52393:103:::1;-1:-1:-1::0;;;;;52508:20:0;::::1;::::0;52505:117:::1;;52543:8;:17:::0;;-1:-1:-1;;;;;;52543:17:0::1;-1:-1:-1::0;;;;;52543:17:0;::::1;;::::0;;52574:14:::1;:37:::0;;;52505:117:::1;-1:-1:-1::0;;;;;52634:25:0;::::1;::::0;52631:139:::1;;52677:7;::::0;:34:::1;::::0;-1:-1:-1;;;52677:34:0;;-1:-1:-1;;;;;52677:7:0;;::::1;::::0;:21:::1;::::0;:34:::1;::::0;52699:11;;52677:34:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;52673:50:::0;52735:10:::1;:24:::0;;-1:-1:-1;;;;;52735:24:0;::::1;-1:-1:-1::0;;;;;;52735:24:0;;::::1;;::::0;;52243:536;;;;:::o;43820:929::-;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;43992:41;;::::1;43984:77;;;::::0;-1:-1:-1;;;43984:77:0;;20781:2:1;43984:77:0::1;::::0;::::1;20763:21:1::0;20820:2;20800:18;;;20793:30;-1:-1:-1;;;20839:18:1;;;20832:53;20902:18;;43984:77:0::1;20579:347:1::0;43984:77:0::1;44084:41:::0;;::::1;44076:77;;;::::0;-1:-1:-1;;;44076:77:0;;21133:2:1;44076:77:0::1;::::0;::::1;21115:21:1::0;21172:2;21152:18;;;21145:30;-1:-1:-1;;;21191:18:1;;;21184:53;21254:18;;44076:77:0::1;20931:347:1::0;44076:77:0::1;44190:6;44186:554;44202:23:::0;;::::1;44186:554;;;44285:1;44258:12:::0;;44271:1;44258:15;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44258:29:0::1;;44255:484;;44314:15:::0;::::1;;44325:4;44314:15:::0;44311:411:::1;;44401:4;44357:14;:31;44372:12;;44385:1;44372:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44357:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;44357:31:0;:48;;-1:-1:-1;;44357:48:0::1;::::0;::::1;;::::0;;;::::1;::::0;;44482:11;;44494:1;44482:14;;::::1;;;;;:::i;:::-;;;;;;;44432;:31;44447:12;;44460:1;44447:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44432:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;44432:31:0;:47:::1;;:64:::0;44573:22:::1;44592:2;44573:11:::0;;44585:1;44573:14;;::::1;;;;;:::i;:::-;;;;;;;:18;;:22;;;;:::i;:::-;44523:14;:31;44538:12;;44551:1;44538:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44523:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;44523:31:0;:47:::1;;:72:::0;44311:411:::1;;;44693:5;44650:14;:31;44665:12;;44678:1;44665:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44650:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;44650:31:0;:48;;-1:-1:-1;;44650:48:0::1;::::0;::::1;;::::0;;;::::1;::::0;;44311:411:::1;44228:3:::0;::::1;::::0;::::1;:::i;:::-;;;;44186:554;;;;43820:929:::0;;;;;;;:::o;21090:207::-;21195:10;21230:4;17915:22;;;:14;:22;;;;;:32;21230:4;;21195:10;21207:2;;21211:6;;17915:32;;:40;;:32;:40;:66;;;;-1:-1:-1;17973:8:0;;-1:-1:-1;;;;;17959:22:0;;;17973:8;;17959:22;17915:66;17912:545;;;-1:-1:-1;;;;;18000:17:0;;;;;;:9;:17;;;;;:28;;;:33;17997:256;;-1:-1:-1;;;;;18115:22:0;;;;;;:14;:22;;;;;;;;:38;;;18082:9;:17;;;;;;:28;;;18060:51;;18061:15;;18060:21;:51::i;:::-;:93;;18052:185;;;;-1:-1:-1;;;18052:185:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18300:22:0;;;;;;:14;:22;;;;;:38;;;18288:77;;13567:4;;18289:50;;:6;;:10;:50::i;18288:77::-;18278:6;:87;;18270:175;;;;-1:-1:-1;;;18270:175:0;;;;;;;:::i;:::-;18471:4;;:9;:25;;;;-1:-1:-1;18485:11:0;;;;;;;18484:12;18471:25;:54;;;;18500:4;;18508:1;18500:9;:25;;;;-1:-1:-1;18514:11:0;;;;;;;18513:12;18500:25;18468:237;;;-1:-1:-1;;;;;18549:25:0;;;;;;:13;:25;;;;;;;;:33;;:25;:33;18541:69;;;;-1:-1:-1;;;18541:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18633:21:0;;;;;;:13;:21;;;;;;;;:29;;:21;:29;18625:68;;;;-1:-1:-1;;;18625:68:0;;;;;;;:::i;:::-;21256:33:::1;21266:10;21278:2;21282:6;21256:9;:33::i;:::-;21249:40:::0;21090:207;-1:-1:-1;;;;;;21090:207:0:o;51656:233::-;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;51753:21:::1;51793:17:::0;;::::1;;51785:50;;;;-1:-1:-1::0;;;51785:50:0::1;;;;;;;:::i;:::-;51846:35;::::0;-1:-1:-1;;;;;51846:27:0;::::1;::::0;:35;::::1;;;::::0;51874:6;;51846:35:::1;::::0;;;51874:6;51846:27;:35;::::1;;;;;;;;;;;;;::::0;::::1;;;;46927:174:::0;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;47006:4:::1;::::0;:9;;:22:::1;;;47019:4;;47027:1;47019:9;47006:22;46998:31;;;::::0;::::1;;47040:11;:18:::0;;-1:-1:-1;;47040:18:0::1;::::0;::::1;::::0;;47069:10:::1;:24:::0;46927:174::o;50762:356::-;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;50833:13:::1;:26:::0;;-1:-1:-1;;;;;50833:26:0;::::1;-1:-1:-1::0;;;;;;50833:26:0;;::::1;::::0;::::1;::::0;;;50870:6:::1;:31:::0;;;;::::1;::::0;::::1;::::0;;50925:13:::1;::::0;;-1:-1:-1;;;50925:13:0;;;;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;50833:26;50925:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50912:10;:26:::0;;-1:-1:-1;;;;;;50912:26:0::1;-1:-1:-1::0;;;;;50912:26:0;;::::1;;::::0;;50972:6:::1;::::0;:16:::1;::::0;;-1:-1:-1;;;50972:16:0;;;;:6;;;::::1;::::0;:14:::1;::::0;:16;;::::1;::::0;::::1;::::0;;;;;;;;;:6;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51001:10;::::0;;50960:67:::1;::::0;-1:-1:-1;;;50960:67:0;;-1:-1:-1;;;;;50960:40:0;;::::1;::::0;::::1;::::0;:67:::1;::::0;51001:10;;::::1;::::0;51021:4:::1;::::0;50960:67:::1;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50949:8;:78:::0;;-1:-1:-1;;;;;;50949:78:0::1;-1:-1:-1::0;;;;;50949:78:0;;::::1;;::::0;;51050:13:::1;::::0;;::::1;-1:-1:-1::0;51038:26:0;;;:11:::1;:26;::::0;;;;;:33;;-1:-1:-1;;51038:33:0;;::::1;-1:-1:-1::0;51038:33:0;;::::1;::::0;;;51094:8;;;;::::1;51082:21:::0;;;;:28;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;50762:356:0:o;46104:238::-;46177:7;;:45;;-1:-1:-1;;;46177:45:0;;46225:1;;-1:-1:-1;;;;;46177:7:0;;:22;;:45;;46200:9;;46211:10;;46177:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:49;46169:83;;;;-1:-1:-1;;;46169:83:0;;;;;;;:::i;:::-;46272:7;;:51;;-1:-1:-1;;;46272:51:0;;-1:-1:-1;;;;;46272:7:0;;;;:28;;:51;;46301:9;;46312:10;;46272:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46268:67;;46104:238;:::o;44919:590::-;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;45019:12;::::1;;45027:4;45019:12:::0;45016:237:::1;;45053:15;::::0;17024:2:::1;::::0;45053:37:::1;::::0;45071:12;;45053:37:::1;:::i;:::-;45052:61;;45044:102;;;::::0;-1:-1:-1;;;45044:102:0;;21741:2:1;45044:102:0::1;::::0;::::1;21723:21:1::0;21780:2;21760:18;;;21753:30;-1:-1:-1;;;21799:18:1;;;21792:58;21867:18;;45044:102:0::1;21539:352:1::0;45044:102:0::1;45016:237;;;45180:15;::::0;:38;-1:-1:-1;45180:38:0::1;45172:71;;;::::0;-1:-1:-1;;;45172:71:0;;22098:2:1;45172:71:0::1;::::0;::::1;22080:21:1::0;22137:2;22117:18;;;22110:30;-1:-1:-1;;;22156:18:1;;;22149:50;22216:18;;45172:71:0::1;21896:344:1::0;45172:71:0::1;45265:6;45261:239;45277:23:::0;;::::1;45261:239;;;45353:1;45326:12:::0;;45339:1;45326:15;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;45326:29:0::1;;45323:176;;45403:4;45374:9;:26;45384:12;;45397:1;45384:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;45374:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;45374:26:0;:33;;-1:-1:-1;;45374:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;45425:12;::::1;;-1:-1:-1::0;45425:12:0::1;:62;;45465:15;::::0;:22:::1;::::0;45485:1:::1;45465:19;:22::i;:::-;45425:62;;;45440:15;::::0;:22:::1;::::0;45460:1:::1;45440:19;:22::i;:::-;45425:62;45323:176;45303:3:::0;::::1;::::0;::::1;:::i;:::-;;;;45261:239;;20910:172:::0;-1:-1:-1;;;;;21046:19:0;;;21019:7;21046:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;20910:172;;;;;:::o;49163:935::-;49303:8;;49207:4;;;;;;49277:35;;49291:10;;-1:-1:-1;;;;;49303:8:0;49277:13;:35::i;:::-;49274:121;;;49359:8;;49339:44;;49347:10;;-1:-1:-1;;;;;49359:8:0;49369:6;49359:8;49339:7;:44::i;:::-;49327:56;;49274:121;49405:17;49425:21;:6;49436:9;49425:10;:21::i;:::-;49500:10;49490:21;;;;:9;:21;;;;;:29;49405:41;;-1:-1:-1;49489:43:0;;49525:6;49489:35;:43::i;:::-;49467:10;49457:21;;;;:9;:21;;;;;:75;;;;49543:64;;49578:4;49585:21;:6;49596:9;49585:10;:21::i;:::-;49543:14;:64::i;:::-;-1:-1:-1;49708:16:0;;;49722:1;49708:16;;;;;;;;49644:10;49643:20;;49618:22;;49708:16;49722:1;49708:16;;;;;;;;;;-1:-1:-1;49708:16:0;49684:40;;49753:4;49735;49740:1;49735:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;49735:23:0;;;:7;;;;;;;;;:23;49779:10;;49769:7;;49779:10;;;49769:4;;49779:10;;49769:7;;;;;;:::i;:::-;-1:-1:-1;;;;;49769:20:0;;;:7;;;;;;;;;:20;49811:6;;:185;;-1:-1:-1;;;49811:185:0;;:6;;;:57;;:185;;49883:12;;49811:6;;49926:4;;49945:10;;49970:15;;49811:185;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50020:42:0;;-1:-1:-1;;50022:10:0;50021:20;;-1:-1:-1;50047:14:0;50020:26;:42::i;46595:322::-;46698:4;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;46732:29:::1;46747:13;12604:2;46747;:13;:::i;:::-;46732:10:::0;;:14:::1;:29::i;:::-;46714:15;:47:::0;46786:25:::1;46797:13;12604:2;46797;:13;:::i;:::-;46786:6:::0;;:10:::1;:25::i;:::-;46772:11;:39:::0;;;46830:15:::1;::::0;:29:::1;46822:65;;;::::0;-1:-1:-1;;;46822:65:0;;22447:2:1;46822:65:0::1;::::0;::::1;22429:21:1::0;22486:2;22466:18;;;22459:30;-1:-1:-1;;;22505:18:1;;;22498:53;22568:18;;46822:65:0::1;22245:347:1::0;46822:65:0::1;-1:-1:-1::0;46905:4:0::1;46595:322:::0;;;;:::o;51440:198::-;51513:4;17602:5;;-1:-1:-1;;;;;17602:5:0;17588:10;:19;17580:64;;;;-1:-1:-1;;;17580:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;51537:23:0;::::1;51529:51;;;;-1:-1:-1::0;;;51529:51:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;51591:5:0::1;:17:::0;;-1:-1:-1;;;;;;51591:17:0::1;-1:-1:-1::0;;;;;51591:17:0;::::1;;::::0;;-1:-1:-1;17655:1:0::1;51440:198:::0;;;:::o;47849:1294::-;17728:5;;-1:-1:-1;;;;;17728:5:0;17714:10;:19;;:52;;-1:-1:-1;17747:10:0;17737:21;;;;:9;:21;;;;;;;;:29;;:21;:29;17714:52;17706:94;;;;-1:-1:-1;;;17706:94:0;;;;;;;:::i;:::-;48089:13:::1;48149::::0;48133;48105:25:::1;48120:10:::0;48105:12;:25:::1;:::i;:::-;:41;;;;:::i;:::-;:57;;;;:::i;:::-;48089:73;;13976:3;48181:38;48194:24;48205:12;;48194:6;;:10;;:24;;;;:::i;:::-;48181:8:::0;;:12:::1;:38::i;:::-;:53;;48173:62;;;::::0;::::1;;13976:3;48254:39;48267:25;48278:13;;48267:6;;:10;;:25;;;;:::i;48254:39::-;:54;;48246:63;;;::::0;::::1;;13976:3;48328:45;48341:31;48358:13;;48341:12;;:16;;:31;;;;:::i;48328:45::-;:60;;48320:69;;;::::0;::::1;;13976:3;48408:44;48421:30;48438:12;;48421;;:16;;:30;;;;:::i;48408:44::-;:59;;48400:68;;;::::0;::::1;;13976:3;48487:8;:23;;48479:70;;;::::0;-1:-1:-1;;;48479:70:0;;22799:2:1;48479:70:0::1;::::0;::::1;22781:21:1::0;22838:2;22818:18;;;22811:30;22877:34;22857:18;;;22850:62;-1:-1:-1;;;22928:18:1;;;22921:32;22970:19;;48479:70:0::1;22597:398:1::0;48479:70:0::1;48563:15:::0;::::1;;48574:4;48563:15:::0;48560:567:::1;;48613:20;:12:::0;48630:2:::1;48613:16;:20::i;:::-;48595:15;:38:::0;48665:18:::1;:10:::0;48680:2:::1;48665:14;:18::i;:::-;48649:13;:34:::0;;;48718:21:::1;::::0;:13;;:17:::1;:21::i;:::-;48699:16;:40:::0;48769:21:::1;:13:::0;48787:2:::1;48769:17;:21::i;:::-;48755:11;:35:::0;48818:16:::1;:8:::0;48831:2:::1;48818:12;:16::i;:::-;48806:9;:28:::0;48560:567:::1;;;48886:20;:12:::0;48903:2:::1;48886:16;:20::i;:::-;48867:16;:39:::0;48940:18:::1;:10:::0;48955:2:::1;48940:14;:18::i;:::-;48923:14;:35:::0;48995:21:::1;:13:::0;49013:2:::1;48995:17;:21::i;:::-;48975:17;:41:::0;49048:21:::1;:13:::0;49066:2:::1;49048:17;:21::i;:::-;49033:12;:36:::0;49099:16:::1;:8:::0;49112:2:::1;49099:12;:16::i;:::-;49086:10;:29:::0;48078:1065:::1;47849:1294:::0;;;;;:::o;1473:220::-;1531:7;1555:1;1560;1555:6;1551:20;;-1:-1:-1;1570:1:0;1563:8;;1551:20;1582:9;1594:5;1598:1;1594;:5;:::i;:::-;1582:17;-1:-1:-1;1627:1:0;1618:5;1622:1;1582:17;1618:5;:::i;:::-;:10;1610:56;;;;-1:-1:-1;;;1610:56:0;;23424:2:1;1610:56:0;;;23406:21:1;23463:2;23443:18;;;23436:30;23502:34;23482:18;;;23475:62;-1:-1:-1;;;23553:18:1;;;23546:31;23594:19;;1610:56:0;23222:397:1;1610:56:0;1684:1;1473:220;-1:-1:-1;;;1473:220:0:o;1701:153::-;1759:7;1791:1;1787;:5;1779:44;;;;-1:-1:-1;;;1779:44:0;;23826:2:1;1779:44:0;;;23808:21:1;23865:2;23845:18;;;23838:30;-1:-1:-1;;;23884:18:1;;;23877:56;23950:18;;1779:44:0;23624:350:1;1779:44:0;1841:5;1845:1;1841;:5;:::i;1307:158::-;1365:7;1398:1;1393;:6;;1385:49;;;;-1:-1:-1;;;1385:49:0;;24181:2:1;1385:49:0;;;24163:21:1;24220:2;24200:18;;;24193:30;24259:32;24239:18;;;24232:60;24309:18;;1385:49:0;23979:354:1;1385:49:0;1452:5;1456:1;1452;:5;:::i;1120:179::-;1178:7;;1210:5;1214:1;1210;:5;:::i;:::-;1198:17;;1239:1;1234;:6;;1226:46;;;;-1:-1:-1;;;1226:46:0;;24673:2:1;1226:46:0;;;24655:21:1;24712:2;24692:18;;;24685:30;-1:-1:-1;;;24731:18:1;;;24724:57;24798:18;;1226:46:0;24471:351:1;33585:1096:0;33629:18;33662:22;33699:20;33751:24;33773:1;33751:17;;:21;;:24;;;;:::i;:::-;33805:17;;33734:41;;-1:-1:-1;33805:37:0;;33734:41;33805:21;:37::i;:::-;33904:14;;-1:-1:-1;;;;;33904:14:0;33894:25;;;;:9;:25;;;;;:33;33790:52;;-1:-1:-1;33893:53:0;;33790:52;33893:39;:53::i;:::-;33867:14;;-1:-1:-1;;;;;33867:14:0;33857:25;;;;:9;:25;;;;;;:89;;;;34015:4;33997:24;;;:32;33996:52;;34035:12;33996:38;:52::i;:::-;33979:4;33961:24;;;;:9;:24;;;;;;:87;;;;34091:7;;:45;;-1:-1:-1;;;34091:45:0;;33961:24;;-1:-1:-1;;;;;34091:7:0;;:16;;:45;;33979:4;34123:12;;34091:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34180:6;;:235;;-1:-1:-1;;;34180:235:0;;34256:4;34180:235;;;25168:34:1;;;25218:18;;;25211:34;;;34156:20:0;25261:18:1;;;25254:34;;;25304:18;;;25297:34;;;25347:19;;;25340:44;;;;34385:15:0;25400:19:1;;;25393:35;34063:73:0;;-1:-1:-1;;;;;;34180:6:0;;;;:22;;34063:73;;25102:19:1;;34180:235:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34441:10;34431:21;;;;:9;:21;;;;;;34151:264;;-1:-1:-1;34431:21:0;;:29;;:21;:29;;-1:-1:-1;34428:224:0;;-1:-1:-1;34428:224:0;34492:66;13567:4;34493:39;34513:18;;34493:15;:19;;:39;;;;:::i;34492:66::-;34580:21;;34573:65;;-1:-1:-1;;;34573:65:0;;34476:82;;-1:-1:-1;;;;;;34580:21:0;;34573:38;;:65;;34612:10;;34476:82;;34573:65;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22156:1951::-;22333:4;18786:10;18808:4;18786:27;18782:329;;18844:7;;18867:10;;18844:46;;-1:-1:-1;;;18844:46:0;;18830:11;;-1:-1:-1;;;;;18844:7:0;;;;:22;;:46;;18867:10;;;;18879;;18844:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18830:60;-1:-1:-1;18910:10:0;;18905:195;;18948:10;18979:1;18941:18;;;:6;:18;;;;;;:35;;:39;;;;19003:7;;19032:10;;19003:52;;-1:-1:-1;;;19003:52:0;;-1:-1:-1;;;;;19003:7:0;;;;:28;;:52;;19032:10;;19003:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18999:68;;18815:296;18782:329;22296:8:::1;::::0;-1:-1:-1;;;;;22288:16:0;;::::1;22296:8:::0;::::1;22288:16;::::0;::::1;::::0;:34:::1;;-1:-1:-1::0;22314:8:0::1;::::0;-1:-1:-1;;;;;22308:14:0;;::::1;22314:8:::0;::::1;22308:14;;22288:34;19221:17;::::0;19204:4:::1;19186:24;::::0;;;:9:::1;:24;::::0;;;;:32;:52:::1;:65:::0;::::1;;;;19242:4;;19250:1;19242:9;;19186:65;:87;;;;-1:-1:-1::0;19269:4:0::1;19255:18:::0;::::1;;;19186:87;19183:129;;;19289:11;:9;:11::i;:::-;-1:-1:-1::0;;;;;22358:18:0;::::2;22350:45;;;::::0;-1:-1:-1;;;22350:45:0;;25641:2:1;22350:45:0::2;::::0;::::2;25623:21:1::0;25680:2;25660:18;;;25653:30;-1:-1:-1;;;25699:18:1;;;25692:44;25753:18;;22350:45:0::2;25439:338:1::0;22350:45:0::2;-1:-1:-1::0;;;;;22414:16:0;::::2;22406:45;;;::::0;-1:-1:-1;;;22406:45:0;;25984:2:1;22406:45:0::2;::::0;::::2;25966:21:1::0;26023:2;26003:18;;;25996:30;-1:-1:-1;;;26042:18:1;;;26035:46;26098:18;;22406:45:0::2;25782:340:1::0;22406:45:0::2;-1:-1:-1::0;;;;;22470:17:0;::::2;;::::0;;;:11:::2;:17;::::0;;;;;::::2;;:48;;22507:11;;22497:6;:21;;22470:48;;;22490:4;22470:48;22462:81;;;::::0;-1:-1:-1;;;22462:81:0;;26329:2:1;22462:81:0::2;::::0;::::2;26311:21:1::0;26368:2;26348:18;;;26341:30;-1:-1:-1;;;26387:18:1;;;26380:50;26447:18;;22462:81:0::2;26127:344:1::0;22462:81:0::2;-1:-1:-1::0;;;;;22562:15:0;::::2;;::::0;;;:9:::2;:15;::::0;;;;:23;:33;-1:-1:-1;22562:33:0::2;22554:65;;;::::0;-1:-1:-1;;;22554:65:0;;26678:2:1;22554:65:0::2;::::0;::::2;26660:21:1::0;26717:2;26697:18;;;26690:30;-1:-1:-1;;;26736:18:1;;;26729:49;26795:18;;22554:65:0::2;26476:343:1::0;22554:65:0::2;22674:8;::::0;22630:14:::2;::::0;;;-1:-1:-1;;;;;22666:16:0;;::::2;22674:8:::0;::::2;22666:16;::::0;::::2;::::0;:34:::2;;-1:-1:-1::0;22692:8:0::2;::::0;-1:-1:-1;;;;;22686:14:0;;::::2;22692:8:::0;::::2;22686:14;;22666:34;-1:-1:-1::0;;;;;22714:17:0;;::::2;22749:1;22714:17:::0;;;:11:::2;:17;::::0;;;;;;;22732:13:::2;::::0;;;::::2;22714:32:::0;;;;;;;22655:45;;-1:-1:-1;22714:36:0;;;;:61:::2;;-1:-1:-1::0;;;;;;22754:21:0;::::2;22770:4;22754:21;;22714:61;22711:173;;;-1:-1:-1::0;;;;;22827:17:0;;::::2;;::::0;;;:11:::2;:17;::::0;;;;;;;22845:13:::2;::::0;;;::::2;22827:32:::0;;;;;;;22826:46:::2;::::0;22865:6;22826:38:::2;:46::i;:::-;-1:-1:-1::0;;;;;22791:17:0;;::::2;;::::0;;;:11:::2;:17;::::0;;;;;;;22809:13:::2;::::0;;;::::2;22791:32:::0;;;;;;:81;22711:173:::2;-1:-1:-1::0;;;;;22926:15:0;::::2;;::::0;;;:9:::2;:15;::::0;;;;:23;22925:37:::2;::::0;22955:6;22925:29:::2;:37::i;:::-;-1:-1:-1::0;;;;;22899:15:0;::::2;;::::0;;;:9:::2;:15;::::0;;;;:63;;;;23015:3;:26;::::2;;;-1:-1:-1::0;23022:11:0::2;::::0;-1:-1:-1;;;23022:11:0;::::2;;;:19;;23037:4;23022:19;23015:26;:39;;;;;23045:4;;23053:1;23045:9;;23015:39;:69;;;;-1:-1:-1::0;;;;;;23058:17:0;::::2;;::::0;;;:11:::2;:17;::::0;;;;;::::2;;:26;23015:69;:125;;;;-1:-1:-1::0;23123:17:0::2;::::0;23106:4:::2;23088:24;::::0;;;:9:::2;:24;::::0;;;;:32;:52:::2;23015:125;22994:146;;23151:14;23168:23;23182:4;23188:2;23168:13;:23::i;:::-;:36;;;;;23195:4;;23203:1;23195:9;;23168:36;:52;;;;-1:-1:-1::0;23208:12:0;::::2;23168:52;23151:69;;23247:9;:26;;;;23260:13;23247:26;23244:421;;;23300:30;23308:4;23314:2;23318:6;23326:3;23300:7;:30::i;:::-;23353:8;::::0;23288:42;;-1:-1:-1;;;;;;23347:14:0;;::::2;23353:8:::0;::::2;23347:14;::::0;:21:::2;;;23365:3;23347:21;23344:320;;;23384:19;23462:25;;23435:24;;23406:26;;:53;;;;:::i;:::-;:81;;;;:::i;:::-;23384:103;;23505:30;23520:14;23505;:30::i;:::-;23502:79;;;23555:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;;23595:15:0;::::2;;::::0;;;:9:::2;:15;::::0;;;;23624::::2;23595:26;::::0;;::::2;:44:::0;23344:320:::2;23683:4;;23691:1;23683:9;:22;;;;23696:4;;23704:1;23696:9;23683:22;:35;;;-1:-1:-1::0;23709:4:0::2;::::0;:9;23683:35:::2;:42;;;;23722:3;23683:42;23679:119;;;23739:47;23754:4:::0;23760:2;23764:21:::2;:6:::0;23775:9;23764:10:::2;:21::i;23739:47::-;;23679:119;23813:4;;23821:1;23813:9;:29;;;;-1:-1:-1::0;23834:8:0::2;::::0;-1:-1:-1;;;;;23826:16:0;;::::2;23834:8:::0;::::2;23826:16;23813:29;23810:159;;;23862:47;23877:4:::0;23883:2;23887:21:::2;:6:::0;23898:9;23887:10:::2;:21::i;23862:47::-;;23928:27;23937:6;23945:9;23928:8;:27::i;:::-;23984:4;;23992:1;23984:9;:27;;;;-1:-1:-1::0;24003:8:0::2;::::0;-1:-1:-1;;;;;23997:14:0;;::::2;24003:8:::0;::::2;23997:14;23984:27;23981:95;;;24031:33;24040:4;24046:6;24054:9;24031:8;:33::i;:::-;-1:-1:-1::0;24095:4:0::2;::::0;22156:1951;-1:-1:-1;;;;;;;;22156:1951:0:o;28320:2378::-;28485:8;;-1:-1:-1;;;;;28485:8:0;28434:22;28475:19;;;:9;:19;;;;;:27;28485:8;28459:11;:44;;:15;:44::i;:::-;28434:69;;28513:21;28544:23;28570:70;13567:4;28571:43;28588:25;;28571:12;:16;;:43;;;;:::i;28570:70::-;28544:96;-1:-1:-1;28650:21:0;28674:36;:12;28544:96;28674:16;:36::i;:::-;28650:60;;28726:6;28721:1195;28742:12;:19;28738:23;;28721:1195;;;28783:20;28820:15;:32;28836:12;28849:1;28836:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28836:15:0;28820:32;;;;;;;;;;;;;;;:41;;;;28817:1098;;28879:21;28903:71;28956:17;28904:46;28945:4;28905:9;:26;28915:12;28928:1;28915:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28915:15:0;28905:26;;;;;;;;;;;;:34;;28904:40;:46::i;28903:71::-;28879:95;;29036:16;28989:6;:23;28996:12;29009:1;28996:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28996:15:0;28989:23;;;;;;;;;;;;:63;;;;29094:12;:15;;29082:83;;29147:17;;29083:58;;29124:16;;29084:9;;28996:15;;29107:1;;29094:15;;;;;;:::i;29082:83::-;29067:98;;29185:3;29192:1;29185:8;29181:376;;29259:100;29346:12;29259:6;:63;29288:12;29301:1;29288:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29288:15:0;29259:63;;;;;;;;;;;;:82;;;;:86;:100::i;:::-;29214:6;:23;29221:12;29234:1;29221:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29221:15:0;29214:23;;;;;;;;;;;;:42;;:145;;;;29426:12;:15;;29415:54;;29456:12;;29416:9;;29439:1;;29426:15;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29426:15:0;29416:26;;;;;;;;;;;;:34;;29415:40;:54::i;:::-;29378:9;:26;29388:12;29401:1;29388:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29388:15:0;29378:26;;;;;;;;;;;;:91;29507:34;:16;29528:12;29507:20;:34::i;:::-;29488:53;;29181:376;29575:3;29582:1;29575:8;29571:343;;29647:98;29732:12;29647:6;:63;29676:12;29689:1;29676:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29676:15:0;29647:63;;;;;;;;;;;;29676:15;29647:80;;;:84;:98::i;:::-;29604:6;:23;29611:12;29624:1;29611:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29611:15:0;;;29604:23;;;;;;;;;;;;;;;29611:15;29604:40;:141;;;;29768:7;;29785:12;:15;;29768:7;;;;;:16;;29798:1;;29785:15;;;;;;:::i;:::-;;;;;;;;;;;29768:47;;-1:-1:-1;;;;;;29768:47:0;;;;;;;;;-1:-1:-1;;;;;29785:15:0;;29802:12;;29768:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29764:63;29864:34;:16;29885:12;29864:20;:34::i;:::-;29845:53;;29571:343;28862:1053;28817:1098;-1:-1:-1;28763:3:0;;;;:::i;:::-;;;;28721:1195;;;-1:-1:-1;29926:19:0;29948:62;29971:38;:16;29992;29971:20;:38::i;:::-;29948:18;;:22;:62::i;:::-;29926:84;;30027:3;30034:1;30027:8;30024:299;;30134:4;30097:61;;;;:6;:61;;;;;:80;;;:100;;30182:14;30097:84;:100::i;:::-;30069:4;30054:21;;;;:6;:21;;;;;;;;:40;;:143;;;;30252:9;:24;;;:32;30251:54;;30290:14;30251:38;:54::i;:::-;30233:4;30215:24;;;;:9;:24;;;;;:90;30024:299;30340:3;30346:1;30340:7;30337:297;;30444:4;30407:61;;;;:6;:61;;;;;:78;;;:98;;30490:14;30407:82;:98::i;:::-;30381:4;30366:21;;;;:6;:21;;;;;;;:38;;:139;;;;30543:7;;30565:10;;30543:64;;-1:-1:-1;;;30543:64:0;;-1:-1:-1;;;;;30543:7:0;;;;:21;;:64;;30565:10;;;;30592:14;;30543:64;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30539:80;;30659:31;;1754:25:1;;;30659:31:0;;1742:2:1;1727:18;30659:31:0;;;;;;;28375:2323;;;;;28320:2378;;:::o;42166:217::-;42267:8;;42229:4;;-1:-1:-1;;;;;42267:8:0;42253:10;:22;;;;:42;;-1:-1:-1;42289:6:0;;-1:-1:-1;;;42289:6:0;;;;42288:7;42253:42;:66;;;;-1:-1:-1;42308:11:0;;-1:-1:-1;;;42308:11:0;;;;42253:66;:122;;;;-1:-1:-1;;42350:4:0;42332:24;;;;:9;:24;;;;;:32;-1:-1:-1;42332:43:0;;42166:217::o;42393:276::-;-1:-1:-1;;;;;42509:19:0;;;42472:4;42509:19;;;:11;:19;;;;;;42553:8;;42472:4;;42509:19;;;;42508:20;;42553:8;;42543:18;:43;;;;-1:-1:-1;;;;;;42565:21:0;;;;;;:11;:21;;;;;;;;42543:43;42540:94;;;-1:-1:-1;42616:5:0;;42393:276;-1:-1:-1;;;42393:276:0:o;24117:4103::-;24217:4;24241:14;24266:27;24304:19;24334;24364:20;24395:18;24424:21;24456:11;24470:7;24456:21;;24488:12;24503:6;24488:21;;24523:4;;24531:1;24523:9;24520:214;;24575:23;;24564:35;;:6;;:10;:35::i;:::-;24552:47;;24648:9;24618:26;;:39;;;;;;;:::i;:::-;;;;-1:-1:-1;24693:29:0;;-1:-1:-1;24693:14:0;24712:9;24693:18;:29::i;:::-;24676:46;;24520:214;24747:4;;24755:1;24747:9;:22;;;;24760:4;;24768:1;24760:9;24747:22;24744:2428;;;24794:8;;-1:-1:-1;;;;;24784:18:0;;;24794:8;;24784:18;;:32;;;24806:10;24784:32;24781:797;;;24844:48;13567:4;24845:21;24856:9;;24845:6;:10;;:21;;;;:::i;24844:48::-;24932:16;;24832:60;;-1:-1:-1;24932:16:0;;;;;:78;;25009:1;24932:78;;;24951:55;13567:4;24952:28;24963:16;;24952:6;:10;;:28;;;;:::i;24951:55::-;25042:12;;24907:103;;-1:-1:-1;25042:12:0;;:69;;25110:1;25042:69;;;25057:50;13567:4;25058:23;25069:11;;25058:6;:10;;:23;;;;:::i;25057:50::-;25025:86;;25142:52;13567:4;25143:25;25154:13;;25143:6;:10;;:25;;;;:::i;25142:52::-;25126:68;-1:-1:-1;25228:70:0;25126:68;25242:39;25267:14;25242:22;:39;:::i;:::-;:55;;;;:::i;:::-;25228:9;;:13;:70::i;:::-;25209:89;;25343:15;25313:26;;:45;;;;;;;:::i;:::-;;;;;;;;25401:13;25373:24;;:41;;;;;;;:::i;:::-;;;;;;;;25458:14;25429:25;;:43;;;;;;;:::i;:::-;;;;-1:-1:-1;25538:14:0;;-1:-1:-1;25504:31:0;25522:13;25504:15;:31;:::i;:::-;:48;;;;:::i;:::-;25487:65;;24781:797;25615:8;;-1:-1:-1;;;;;25601:22:0;;;25615:8;;25601:22;:49;;;;-1:-1:-1;;;;;;25627:23:0;;25645:4;25627:23;;25601:49;25598:1573;;;25678:49;13567:4;25679:22;25690:10;;25679:6;:10;;:22;;;;:::i;25678:49::-;25767:16;;25666:61;;-1:-1:-1;25767:16:0;;;;;:79;;25845:1;25767:79;;;25786:56;13567:4;25787:29;25798:17;;25787:6;:10;;:29;;;;:::i;25786:56::-;25878:12;;25742:104;;-1:-1:-1;25878:12:0;;:70;;25947:1;25878:70;;;25893:51;13567:4;25894:24;25905:12;;25894:6;:10;;:24;;;;:::i;25893:51::-;25861:87;;25979:53;13567:4;25980:26;25991:14;;25980:6;:10;;:26;;;;:::i;25979:53::-;25963:69;;26075:13;26047:24;;:41;;;;;;;:::i;:::-;;;;;;;;26132:14;26103:25;;:43;;;;;;;:::i;:::-;;;;-1:-1:-1;;26207:24:0;;26175:19;;26197:34;;;:92;;26288:1;26197:92;;;26234:51;13567:4;26235:24;26246:12;;26235:6;:10;;:24;;;;:::i;26234:51::-;26175:114;;26304:20;26337:25;;26327:6;:35;;:94;;26420:1;26327:94;;;26365:52;13567:4;26366:25;26377:13;;26366:6;:10;;:25;;;;:::i;26365:52::-;26507:18;;-1:-1:-1;;;;;26477:15:0;;26436:16;26477:15;;;:9;:15;;;;;:25;;;26304:117;;-1:-1:-1;26436:16:0;26455:48;;26456:15;;26455:21;:48::i;:::-;:70;;:267;;26640:24;;-1:-1:-1;;;;;26610:15:0;;;;;;:9;:15;;;;;:25;;;26588:48;;26589:15;;26588:21;:48::i;:::-;:76;;:134;;26721:1;26455:267;;26588:134;26667:51;13567:4;26668:24;26679:12;;26668:6;:10;;:24;;;;:::i;26667:51::-;26455:267;;;26528:45;13567:4;26529:18;26540:6;;26529;:10;;:18;;;;:::i;26528:45::-;26436:286;-1:-1:-1;26436:286:0;26807:15;26778:26;26790:14;26778:9;:26;:::i;:::-;:44;;;;:::i;:::-;:58;;;;:::i;:::-;26766:70;-1:-1:-1;26869:95:0;26952:11;26934:15;26917:14;26884:30;26901:13;26884:14;:30;:::i;:::-;:47;;;;:::i;:::-;:65;;;;:::i;:::-;:79;;;;:::i;:::-;26869:9;;:13;:95::i;:::-;27008:26;;26851:113;;-1:-1:-1;27008:47:0;;26851:113;27008:30;:47::i;:::-;26979:26;:76;27087:57;27106:37;:9;27120:22;27106:13;:37::i;:::-;27087:14;;:18;:57::i;:::-;27070:74;;25651:1520;;;25598:1573;27191:11;;;;;;;:19;;27206:4;27191:19;:32;;;;;27214:4;;27222:1;27214:9;;27191:32;27188:753;;;27257:8;;-1:-1:-1;;;;;27247:18:0;;;27257:8;;27247:18;;:44;;-1:-1:-1;27283:8:0;;-1:-1:-1;;;;;27269:22:0;;;27283:8;;27269:22;27247:44;27239:53;;;;;;-1:-1:-1;;;;;27314:19:0;;;;;;:13;:19;;;;;;;;:28;;:66;;-1:-1:-1;;;;;;27346:25:0;;;;;;:13;:25;;;;;;;;:34;27314:66;27311:619;;;27423:49;13567:4;27424:22;27435:10;;27424:6;:10;;:22;;;;:::i;27423:49::-;27404:68;;27517:9;27498:16;:28;27495:416;;;27554:27;27584:31;:16;27605:9;27584:20;:31::i;:::-;27554:61;-1:-1:-1;27654:37:0;:9;27554:61;27654:13;:37::i;:::-;27747:26;;27642:49;;-1:-1:-1;27747:54:0;;27778:22;27747:30;:54::i;:::-;27718:26;:83;27845:42;:14;27864:22;27845:18;:42::i;:::-;27828:59;;27527:384;27495:416;27958:16;;;;;;;;:24;;:16;:24;:54;;;;;28011:1;27986:22;:26;27958:54;27955:119;;;28028:34;28036:22;28060:1;28028:7;:34::i;:::-;28089:18;;28086:98;;28119:53;28134:6;28150:4;28157:14;28119;:53::i;:::-;;28086:98;-1:-1:-1;28203:9:0;;24117:4103;-1:-1:-1;;;;;;;;;;;;24117:4103:0:o;21545:590::-;-1:-1:-1;;;;;21646:13:0;;21627:4;21646:13;;;:9;:13;;;;;:21;:26;:44;;;;-1:-1:-1;21682:8:0;;-1:-1:-1;;;;;21676:14:0;;;21682:8;;21676:14;;21646:44;:67;;;;-1:-1:-1;;;;;;21694:19:0;;21708:4;21694:19;;21646:67;21643:127;;;42763:12;:19;;-1:-1:-1;;;;;42738:22:0;;;;;;:13;:22;;;;;:44;;;42793:26;;;;;;;;;;;;;-1:-1:-1;;;;;;42793:26:0;;;;;;21737:19;-1:-1:-1;;;;;21805:13:0;;;;;;:9;:13;;;;;:21;21804:35;;21832:6;21804:27;:35::i;:::-;-1:-1:-1;;;;;21780:13:0;;;;;;:9;:13;;;;;;;;:59;;;;21858:11;:15;;;;;;:65;;21908:15;;;-1:-1:-1;;;;;21883:13:0;;;;;;:9;:13;;;;;;;:21;:40;;21858:65;;;21876:4;21858:65;21850:102;;;;-1:-1:-1;;;21850:102:0;;27026:2:1;21850:102:0;;;27008:21:1;27065:2;27045:18;;;27038:30;-1:-1:-1;;;27084:18:1;;;27077:54;27148:18;;21850:102:0;26824:348:1;21850:102:0;-1:-1:-1;;;;;21963:13:0;;;;;;;:9;:13;;;;;;21989:15;21963:23;;;;:41;;;22015:17;;;;;;;;;;:27;:45;;;;22077:28;;21963:13;;22015:17;-1:-1:-1;;;;;;;;;;;22077:28:0;;;22098:6;1754:25:1;;1742:2;1727:18;;1608:177;35127:4118:0;35197:15;;;;;;35385:21;:6;35396:9;35385:10;:21::i;:::-;35361:45;;35420:14;35437:5;;;;;;;;;-1:-1:-1;;;;;35437:5:0;-1:-1:-1;;;;;35437:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35420:31;;35467:13;35482;35501:5;;;;;;;;;-1:-1:-1;;;;;35501:5:0;-1:-1:-1;;;;;35501:17:0;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;35571:8:0;;-1:-1:-1;;;;;35571:8:0;;;35535:23;35561:19;;;:9;:19;;;;;:27;-1:-1:-1;;;;;35466:54:0;;;;-1:-1:-1;35466:54:0;;;;;-1:-1:-1;35561:27:0;35624:4;35606:23;;;;35603:577;;35649:13;35665:6;;;;;;;;;-1:-1:-1;;;;;35665:6:0;-1:-1:-1;;;;;35665:18:0;;35684:6;35692:8;35702;35665:46;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35649:62;-1:-1:-1;35730:15:0;35748:43;35782:8;35749:27;35762:13;12604:2;35762;:13;:::i;:::-;35749:8;;:12;:27::i;35748:43::-;35730:61;-1:-1:-1;35822:61:0;35730;35823:43;35843:22;:8;35856;35843:12;:22::i;:::-;35824:13;12604:2;35824;:13;:::i;35822:61::-;35810:73;;35630:277;;35603:577;;;35930:13;35946:6;;;;;;;;;-1:-1:-1;;;;;35946:6:0;-1:-1:-1;;;;;35946:18:0;;35965:6;35973:8;35983;35946:46;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35930:62;-1:-1:-1;36011:15:0;36029:43;36063:8;36030:27;36043:13;12604:2;36043;:13;:::i;:::-;36030:8;;:12;:27::i;36029:43::-;36011:61;-1:-1:-1;36103:61:0;36011;36104:43;36124:22;:8;36137;36124:12;:22::i;36103:61::-;36091:73;;35911:269;;35603:577;36221:1;36204:14;;:18;:41;;;;;36244:1;36226:15;;:19;36204:41;36201:323;;;36282:63;13567:4;36283:36;36304:14;;36283:16;:20;;:36;;;;:::i;36282:63::-;36261:84;;36360:19;36382:64;13567:4;36383:37;36404:15;;36383:16;:20;;:37;;;;:::i;36382:64::-;36478:14;;36360:86;;-1:-1:-1;36478:34:0;;36360:86;36478:18;:34::i;:::-;36461:14;:51;-1:-1:-1;36201:323:0;36555:33;:9;36569:18;36555:13;:33::i;:::-;36534:54;;36620:16;;36602:14;;:34;36599:194;;36696:16;;36673:40;;:18;;:22;:40::i;:::-;36652:61;;36745:36;36764:16;;36745:14;;:18;;:36;;;;:::i;:::-;36728:14;:53;36599:194;36837:18;36816;:39;36813:2199;;;36871:17;36891:42;:18;36914;36891:22;:42::i;:::-;36871:62;;36948:22;37029:25;;37002:24;;36973:26;;:53;;;;:::i;:::-;:81;;;;:::i;:::-;37095:4;37077:24;;;;:9;:24;;;;;:32;36948:106;;-1:-1:-1;37077:53:0;-1:-1:-1;37077:53:0;37069:88;;;;-1:-1:-1;;;37069:88:0;;28016:2:1;37069:88:0;;;27998:21:1;28055:2;28035:18;;;28028:30;-1:-1:-1;;;28074:18:1;;;28067:52;28136:18;;37069:88:0;27814:346:1;37069:88:0;37217:4;37172:23;37199:24;;;:9;:24;;;;;:32;37198:57;;37237:17;37198:38;:57::i;:::-;37172:83;;37299:12;37277:18;:34;37274:1340;;37389:4;37371:24;;;;:9;:24;;;;;:32;37370:52;;37409:12;37370:38;:52::i;:::-;37353:4;37335:24;;;;:9;:24;;;;;;:87;;;;37486:8;;-1:-1:-1;;;;;37486:8:0;37476:19;;;:27;37475:47;;37509:12;37475:33;:47::i;:::-;37455:8;;;-1:-1:-1;;;;;37455:8:0;;;37445:19;;;;:9;:19;;;;;;;;;:77;;;;37574:8;;37550:47;;1754:25:1;;;37574:8:0;;;37567:4;;-1:-1:-1;;;;;;;;;;;37550:47:0;1727:18:1;37550:47:0;;;;;;;37274:1340;;;37670:22;;37667:368;;37775:4;37757:24;;;;:9;:24;;;;;:32;37756:58;;37795:18;37756:38;:58::i;:::-;37739:4;37721:24;;;;:9;:24;;;;;;:93;;;;37883:8;;-1:-1:-1;;;;;37883:8:0;37873:19;;;:27;37872:53;;37906:18;37872:33;:53::i;:::-;37852:8;;;-1:-1:-1;;;;;37852:8:0;;;37842:19;;;;:9;:19;;;;;;;;;:83;;;;37982:8;;37958:53;;1754:25:1;;;37982:8:0;;;37975:4;;-1:-1:-1;;;;;;;;;;;37958:53:0;1727:18:1;37958:53:0;;;;;;;37667:368;12653:13;12604:2;12653;:13;:::i;:::-;12641:26;;:10;:26;:::i;:::-;38058:11;;:24;38055:538;;38120:36;:12;38137:18;38120:16;:36::i;:::-;38107:49;-1:-1:-1;12653:13:0;12604:2;12653;:13;:::i;:::-;12641:26;;:10;:26;:::i;:::-;38182:11;;:27;;38198:10;38182:15;:27::i;:::-;:39;38179:168;;;38276:11;;38262:26;;12653:13;12604:2;12653;:13;:::i;:::-;12641:26;;:10;:26;:::i;:::-;38262:13;;:26::i;:::-;38322:1;38315:4;:8;38249:39;-1:-1:-1;38179:168:0;38383:11;;:27;;38399:10;38383:15;:27::i;:::-;38369:11;:41;38474:8;;-1:-1:-1;;;;;38474:8:0;38464:19;;;;:9;:19;;;;;:27;38463:45;;38497:10;38463:33;:45::i;:::-;38443:8;;-1:-1:-1;;;;;38443:8:0;38433:19;;;;:9;:19;;;;;:75;38055:538;;;38568:1;38561:4;:8;38055:538;36856:1788;;;36813:2199;;;38677:62;38696:42;:18;38719;38696:22;:42::i;:::-;38677:14;;:18;:62::i;:::-;38792:8;;-1:-1:-1;;;;;38792:8:0;38782:19;;;;:9;:19;;;;;:27;38660:79;;-1:-1:-1;38781:49:0;;38660:79;38781:33;:49::i;:::-;38761:8;;-1:-1:-1;;;;;38761:8:0;38751:19;;;;:9;:19;;;;;;:79;;;;38896:4;38878:24;;;:32;38877:54;;38916:14;38877:38;:54::i;:::-;38860:4;38842:24;;;;:9;:24;;;;;;;:89;;;;38960:8;;38951:49;;38860:4;;-1:-1:-1;;;;;38960:8:0;;-1:-1:-1;;;;;;;;;;;38951:49:0;;;38985:14;1754:25:1;;1742:2;1727:18;;1608:177;38951:49:0;;;;;;;;36813:2199;39095:120;;39065:10;;39095:120;;;;39103:8;;39113;;39123:16;;39141:18;;39161;;39182;;39065:10;;39095:120;:::i;:::-;;;;;;;;39031:195;35183:4062;;;;;;;;;;35127:4118;;:::o;39253:2660::-;39338:19;;;;;39489:21;:6;39500:9;39489:10;:21::i;:::-;39465:45;;39525:14;39542:5;;;;;;;;;-1:-1:-1;;;;;39542:5:0;-1:-1:-1;;;;;39542:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39525:31;;39572:13;39587;39606:5;;;;;;;;;-1:-1:-1;;;;;39606:5:0;-1:-1:-1;;;;;39606:17:0;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;39675:8:0;;-1:-1:-1;;;;;39675:8:0;;;39639:23;39665:19;;;:9;:19;;;;;:27;-1:-1:-1;;;;;39571:54:0;;;;-1:-1:-1;39571:54:0;;;;;-1:-1:-1;39665:27:0;;39639:23;39767:4;39749:23;;;;39746:572;;39792:15;39810:6;;;;;;;;;-1:-1:-1;;;;;39810:6:0;-1:-1:-1;;;;;39810:19:0;;39830:6;39838:8;39848;39810:47;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39792:65;-1:-1:-1;39889:43:0;39923:8;39890:27;39903:13;12604:2;39903;:13;:::i;39889:43::-;39876:56;-1:-1:-1;39963:62:0;39876:56;39964:44;39984:23;:8;39997:9;39984:12;:23::i;39963:62::-;39951:74;;39773:268;39746:572;;;40063:14;40080:6;;;;;;;;;-1:-1:-1;;;;;40080:6:0;-1:-1:-1;;;;;40080:19:0;;40100:6;40108:8;40118;40080:47;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40063:64;-1:-1:-1;40158:43:0;40192:8;40159:27;40172:13;12604:2;40172;:13;:::i;40158:43::-;40145:56;-1:-1:-1;40231:62:0;40145:56;40232:44;40252:23;:8;40265:9;40252:12;:23::i;40231:62::-;40219:74;;40045:273;39746:572;40366:1;40349:14;;:18;:41;;;;;40389:1;40371:15;;:19;40349:41;40346:353;;;40435:63;13567:4;40436:36;40457:14;;40436:16;:20;;:36;;;;:::i;40435:63::-;40414:84;;40521:19;40543:64;13567:4;40544:37;40565:15;;40544:16;:20;;:37;;;;:::i;40543:64::-;40646:14;;40521:86;;-1:-1:-1;40646:34:0;;40521:86;40646:18;:34::i;:::-;40629:14;:51;-1:-1:-1;40346:353:0;40737:33;:9;40751:18;40737:13;:33::i;:::-;40716:54;;40806:16;;40788:14;;:34;40785:217;;40889:16;;40866:40;;:18;;:22;:40::i;:::-;40845:61;;40946:36;40965:16;;40946:14;;:18;;:36;;;;:::i;:::-;40929:14;:53;40785:217;41044:18;41065:42;:18;41088;41065:22;:42::i;:::-;41044:63;-1:-1:-1;41155:30:0;:18;41178:6;41155:22;:30::i;:::-;41135:8;;-1:-1:-1;;;;;41135:8:0;41125:19;;;;:9;:19;;;;;:60;41217:34;:16;41238:12;41217:20;:34::i;:::-;41200:51;;41266:5;;;;;;;;;-1:-1:-1;;;;;41266:5:0;-1:-1:-1;;;;;41266:10:0;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;41330:8:0;;-1:-1:-1;;;;;41330:8:0;41320:19;;;;:9;:19;;;;;:48;;;-1:-1:-1;;41388:18:0;;41385:211;;41476:4;41458:24;;;;:9;:24;;;;;:32;41457:54;;41496:14;41457:38;:54::i;:::-;41440:4;41422:24;;;;:9;:24;;;;;;;:89;;;;41540:8;;41531:49;;41440:4;;-1:-1:-1;;;;;41540:8:0;;-1:-1:-1;;;;;;;;;;;41531:49:0;;;41565:14;1754:25:1;;1742:2;1727:18;;1608:177;41531:49:0;;;;;;;;41385:211;41627:20;41650:14;41627:37;;41703:8;;;;;;;;;-1:-1:-1;;;;;41703:8:0;-1:-1:-1;;;;;41686:44:0;41695:6;-1:-1:-1;;;;;41686:44:0;-1:-1:-1;;;;;;;;;;;41713:16:0;41686:44;;;;1754:25:1;;1742:2;1727:18;;1608:177;41686:44:0;;;;;;;;41752:123;41759:8;41769;41780:16;41798:18;41818;41839;41859:15;41752:123;;;;;;;;;;;;:::i;:::-;;;;;;;;41610:282;39324:2589;;;;;;;;;;;39253:2660;;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:388::-;1283:6;1291;1344:2;1332:9;1323:7;1319:23;1315:32;1312:52;;;1360:1;1357;1350:12;1312:52;1399:9;1386:23;1418:31;1443:5;1418:31;:::i;:::-;1468:5;-1:-1:-1;1525:2:1;1510:18;;1497:32;1538:33;1497:32;1538:33;:::i;:::-;1590:7;1580:17;;;1215:388;;;;;:::o;1790:367::-;1853:8;1863:6;1917:3;1910:4;1902:6;1898:17;1894:27;1884:55;;1935:1;1932;1925:12;1884:55;-1:-1:-1;1958:20:1;;-1:-1:-1;;;;;1990:30:1;;1987:50;;;2033:1;2030;2023:12;1987:50;2070:4;2062:6;2058:17;2046:29;;2130:3;2123:4;2113:6;2110:1;2106:14;2098:6;2094:27;2090:38;2087:47;2084:67;;;2147:1;2144;2137:12;2084:67;1790:367;;;;;:::o;2162:118::-;2248:5;2241:13;2234:21;2227:5;2224:32;2214:60;;2270:1;2267;2260:12;2285:566;2377:6;2385;2393;2446:2;2434:9;2425:7;2421:23;2417:32;2414:52;;;2462:1;2459;2452:12;2414:52;2502:9;2489:23;-1:-1:-1;;;;;2527:6:1;2524:30;2521:50;;;2567:1;2564;2557:12;2521:50;2606:70;2668:7;2659:6;2648:9;2644:22;2606:70;:::i;:::-;2695:8;;-1:-1:-1;2580:96:1;-1:-1:-1;;2780:2:1;2765:18;;2752:32;2793:28;2752:32;2793:28;:::i;:::-;2840:5;2830:15;;;2285:566;;;;;:::o;2856:247::-;2915:6;2968:2;2956:9;2947:7;2943:23;2939:32;2936:52;;;2984:1;2981;2974:12;2936:52;3023:9;3010:23;3042:31;3067:5;3042:31;:::i;3108:319::-;3310:25;;;3366:2;3351:18;;3344:34;;;;3409:2;3394:18;;3387:34;3298:2;3283:18;;3108:319::o;3432:456::-;3509:6;3517;3525;3578:2;3566:9;3557:7;3553:23;3549:32;3546:52;;;3594:1;3591;3584:12;3546:52;3633:9;3620:23;3652:31;3677:5;3652:31;:::i;:::-;3702:5;-1:-1:-1;3759:2:1;3744:18;;3731:32;3772:33;3731:32;3772:33;:::i;:::-;3432:456;;3824:7;;-1:-1:-1;;;3878:2:1;3863:18;;;;3850:32;;3432:456::o;4082:203::-;-1:-1:-1;;;;;4246:32:1;;;;4228:51;;4216:2;4201:18;;4082:203::o;4290:382::-;4355:6;4363;4416:2;4404:9;4395:7;4391:23;4387:32;4384:52;;;4432:1;4429;4422:12;4384:52;4471:9;4458:23;4490:31;4515:5;4490:31;:::i;:::-;4540:5;-1:-1:-1;4597:2:1;4582:18;;4569:32;4610:30;4569:32;4610:30;:::i;4677:385::-;4763:6;4771;4779;4787;4840:3;4828:9;4819:7;4815:23;4811:33;4808:53;;;4857:1;4854;4847:12;4808:53;-1:-1:-1;;4880:23:1;;;4950:2;4935:18;;4922:32;;-1:-1:-1;5001:2:1;4986:18;;4973:32;;5052:2;5037:18;5024:32;;-1:-1:-1;4677:385:1;-1:-1:-1;4677:385:1:o;5067:908::-;5198:6;5206;5214;5222;5230;5283:2;5271:9;5262:7;5258:23;5254:32;5251:52;;;5299:1;5296;5289:12;5251:52;5338:9;5325:23;5357:31;5382:5;5357:31;:::i;:::-;5407:5;-1:-1:-1;5463:2:1;5448:18;;5435:32;-1:-1:-1;;;;;5516:14:1;;;5513:34;;;5543:1;5540;5533:12;5513:34;5582:70;5644:7;5635:6;5624:9;5620:22;5582:70;:::i;:::-;5671:8;;-1:-1:-1;5556:96:1;-1:-1:-1;5759:2:1;5744:18;;5731:32;;-1:-1:-1;5775:16:1;;;5772:36;;;5804:1;5801;5794:12;5772:36;;5843:72;5907:7;5896:8;5885:9;5881:24;5843:72;:::i;:::-;5067:908;;;;-1:-1:-1;5067:908:1;;-1:-1:-1;5934:8:1;;5817:98;5067:908;-1:-1:-1;;;5067:908:1:o;5980:852::-;6069:6;6077;6085;6093;6101;6109;6162:3;6150:9;6141:7;6137:23;6133:33;6130:53;;;6179:1;6176;6169:12;6130:53;6218:9;6205:23;6237:28;6259:5;6237:28;:::i;:::-;6284:5;-1:-1:-1;6341:2:1;6326:18;;6313:32;6354:30;6313:32;6354:30;:::i;:::-;6403:7;-1:-1:-1;6462:2:1;6447:18;;6434:32;6475:30;6434:32;6475:30;:::i;:::-;6524:7;-1:-1:-1;6583:2:1;6568:18;;6555:32;6596:30;6555:32;6596:30;:::i;:::-;6645:7;-1:-1:-1;6699:3:1;6684:19;;6671:33;;-1:-1:-1;6756:3:1;6741:19;;6728:33;6770:30;6728:33;6770:30;:::i;:::-;6819:7;6809:17;;;5980:852;;;;;;;;:::o;6837:248::-;6905:6;6913;6966:2;6954:9;6945:7;6941:23;6937:32;6934:52;;;6982:1;6979;6972:12;6934:52;-1:-1:-1;;7005:23:1;;;7075:2;7060:18;;;7047:32;;-1:-1:-1;6837:248:1:o;7424:598::-;7510:6;7518;7526;7534;7587:3;7575:9;7566:7;7562:23;7558:33;7555:53;;;7604:1;7601;7594:12;7555:53;7643:9;7630:23;7662:31;7687:5;7662:31;:::i;:::-;7712:5;-1:-1:-1;7769:2:1;7754:18;;7741:32;7782:33;7741:32;7782:33;:::i;:::-;7834:7;-1:-1:-1;7893:2:1;7878:18;;7865:32;7906:33;7865:32;7906:33;:::i;:::-;7424:598;;;;-1:-1:-1;7958:7:1;;8012:2;7997:18;7984:32;;-1:-1:-1;;7424:598:1:o;8027:1218::-;8191:6;8199;8207;8215;8223;8231;8239;8292:3;8280:9;8271:7;8267:23;8263:33;8260:53;;;8309:1;8306;8299:12;8260:53;8349:9;8336:23;-1:-1:-1;;;;;8419:2:1;8411:6;8408:14;8405:34;;;8435:1;8432;8425:12;8405:34;8474:70;8536:7;8527:6;8516:9;8512:22;8474:70;:::i;:::-;8563:8;;-1:-1:-1;8448:96:1;-1:-1:-1;8648:2:1;8633:18;;8620:32;;-1:-1:-1;8661:28:1;8620:32;8661:28;:::i;:::-;8708:5;;-1:-1:-1;8766:2:1;8751:18;;8738:32;;8782:16;;;8779:36;;;8811:1;8808;8801:12;8779:36;8850:72;8914:7;8903:8;8892:9;8888:24;8850:72;:::i;:::-;8941:8;;-1:-1:-1;8824:98:1;-1:-1:-1;9029:2:1;9014:18;;9001:32;;-1:-1:-1;9045:16:1;;;9042:36;;;9074:1;9071;9064:12;9042:36;;9113:72;9177:7;9166:8;9155:9;9151:24;9113:72;:::i;:::-;8027:1218;;;;-1:-1:-1;8027:1218:1;;-1:-1:-1;8027:1218:1;;;;9087:98;;-1:-1:-1;;;8027:1218:1:o;9250:180::-;9309:6;9362:2;9350:9;9341:7;9337:23;9333:32;9330:52;;;9378:1;9375;9368:12;9330:52;-1:-1:-1;9401:23:1;;9250:180;-1:-1:-1;9250:180:1:o;9435:515::-;9527:6;9535;9543;9551;9559;9612:3;9600:9;9591:7;9587:23;9583:33;9580:53;;;9629:1;9626;9619:12;9580:53;9665:9;9652:23;9642:33;;9722:2;9711:9;9707:18;9694:32;9684:42;;9773:2;9762:9;9758:18;9745:32;9735:42;;9824:2;9813:9;9809:18;9796:32;9786:42;;9878:3;9867:9;9863:19;9850:33;9892:28;9914:5;9892:28;:::i;:::-;9939:5;9929:15;;;9435:515;;;;;;;;:::o;9955:304::-;-1:-1:-1;;;;;10185:15:1;;;10167:34;;10237:15;;10232:2;10217:18;;10210:43;10117:2;10102:18;;9955:304::o;10264:184::-;10334:6;10387:2;10375:9;10366:7;10362:23;10358:32;10355:52;;;10403:1;10400;10393:12;10355:52;-1:-1:-1;10426:16:1;;10264:184;-1:-1:-1;10264:184:1:o;10453:353::-;10655:2;10637:21;;;10694:2;10674:18;;;10667:30;10733:31;10728:2;10713:18;;10706:59;10797:2;10782:18;;10453:353::o;10811:127::-;10872:10;10867:3;10863:20;10860:1;10853:31;10903:4;10900:1;10893:15;10927:4;10924:1;10917:15;10943:127;11004:10;10999:3;10995:20;10992:1;10985:31;11035:4;11032:1;11025:15;11059:4;11056:1;11049:15;11075:135;11114:3;11135:17;;;11132:43;;11155:18;;:::i;:::-;-1:-1:-1;11202:1:1;11191:13;;11075:135::o;11215:482::-;11417:2;11399:21;;;11456:2;11436:18;;;11429:30;11495:34;11490:2;11475:18;;11468:62;11566:34;11561:2;11546:18;;11539:62;-1:-1:-1;;;11632:3:1;11617:19;;11610:45;11687:3;11672:19;;11215:482::o;11702:479::-;11904:2;11886:21;;;11943:2;11923:18;;;11916:30;11982:34;11977:2;11962:18;;11955:62;12053:34;12048:2;12033:18;;12026:62;-1:-1:-1;;;12119:3:1;12104:19;;12097:42;12171:3;12156:19;;11702:479::o;12186:347::-;12388:2;12370:21;;;12427:2;12407:18;;;12400:30;-1:-1:-1;;;12461:2:1;12446:18;;12439:53;12524:2;12509:18;;12186:347::o;12538:350::-;12740:2;12722:21;;;12779:2;12759:18;;;12752:30;-1:-1:-1;;;12813:2:1;12798:18;;12791:56;12879:2;12864:18;;12538:350::o;12893:356::-;13095:2;13077:21;;;13114:18;;;13107:30;13173:34;13168:2;13153:18;;13146:62;13240:2;13225:18;;12893:356::o;13254:422::-;13343:1;13386:5;13343:1;13400:270;13421:7;13411:8;13408:21;13400:270;;;13480:4;13476:1;13472:6;13468:17;13462:4;13459:27;13456:53;;;13489:18;;:::i;:::-;13539:7;13529:8;13525:22;13522:55;;;13559:16;;;;13522:55;13638:22;;;;13598:15;;;;13400:270;;;13404:3;13254:422;;;;;:::o;13681:806::-;13730:5;13760:8;13750:80;;-1:-1:-1;13801:1:1;13815:5;;13750:80;13849:4;13839:76;;-1:-1:-1;13886:1:1;13900:5;;13839:76;13931:4;13949:1;13944:59;;;;14017:1;14012:130;;;;13924:218;;13944:59;13974:1;13965:10;;13988:5;;;14012:130;14049:3;14039:8;14036:17;14033:43;;;14056:18;;:::i;:::-;-1:-1:-1;;14112:1:1;14098:16;;14127:5;;13924:218;;14226:2;14216:8;14213:16;14207:3;14201:4;14198:13;14194:36;14188:2;14178:8;14175:16;14170:2;14164:4;14161:12;14157:35;14154:77;14151:159;;;-1:-1:-1;14263:19:1;;;14295:5;;14151:159;14342:34;14367:8;14361:4;14342:34;:::i;:::-;14412:6;14408:1;14404:6;14400:19;14391:7;14388:32;14385:58;;;14423:18;;:::i;:::-;14461:20;;13681:806;-1:-1:-1;;;13681:806:1:o;14492:140::-;14550:5;14579:47;14620:4;14610:8;14606:19;14600:4;14579:47;:::i;14637:168::-;14710:9;;;14741;;14758:15;;;14752:22;;14738:37;14728:71;;14779:18;;:::i;15641:375::-;-1:-1:-1;;;;;15899:15:1;;;15881:34;;15951:15;;;;15946:2;15931:18;;15924:43;15998:2;15983:18;;15976:34;;;;15831:2;15816:18;;15641:375::o;16021:245::-;16088:6;16141:2;16129:9;16120:7;16116:23;16112:32;16109:52;;;16157:1;16154;16147:12;16109:52;16189:9;16183:16;16208:28;16230:5;16208:28;:::i;16271:344::-;16473:2;16455:21;;;16512:2;16492:18;;;16485:30;-1:-1:-1;;;16546:2:1;16531:18;;16524:50;16606:2;16591:18;;16271:344::o;16620:274::-;-1:-1:-1;;;;;16812:32:1;;;;16794:51;;16876:2;16861:18;;16854:34;16782:2;16767:18;;16620:274::o;16899:125::-;16964:9;;;16985:10;;;16982:36;;;16998:18;;:::i;17567:980::-;17829:4;17877:3;17866:9;17862:19;17908:6;17897:9;17890:25;17934:2;17972:6;17967:2;17956:9;17952:18;17945:34;18015:3;18010:2;17999:9;17995:18;17988:31;18039:6;18074;18068:13;18105:6;18097;18090:22;18143:3;18132:9;18128:19;18121:26;;18182:2;18174:6;18170:15;18156:29;;18203:1;18213:195;18227:6;18224:1;18221:13;18213:195;;;18292:13;;-1:-1:-1;;;;;18288:39:1;18276:52;;18383:15;;;;18348:12;;;;18324:1;18242:9;18213:195;;;-1:-1:-1;;;;;;;18464:32:1;;;;18459:2;18444:18;;18437:60;-1:-1:-1;;;18528:3:1;18513:19;18506:35;18425:3;17567:980;-1:-1:-1;;;17567:980:1:o;19580:306::-;19668:6;19676;19684;19737:2;19725:9;19716:7;19712:23;19708:32;19705:52;;;19753:1;19750;19743:12;19705:52;19782:9;19776:16;19766:26;;19832:2;19821:9;19817:18;19811:25;19801:35;;19876:2;19865:9;19861:18;19855:25;19845:35;;19580:306;;;;;:::o;19891:339::-;20093:2;20075:21;;;20132:2;20112:18;;;20105:30;-1:-1:-1;;;20166:2:1;20151:18;;20144:45;20221:2;20206:18;;19891:339::o;21283:251::-;21353:6;21406:2;21394:9;21385:7;21381:23;21377:32;21374:52;;;21422:1;21419;21412:12;21374:52;21454:9;21448:16;21473:31;21498:5;21473:31;:::i;23000:217::-;23040:1;23066;23056:132;;23110:10;23105:3;23101:20;23098:1;23091:31;23145:4;23142:1;23135:15;23173:4;23170:1;23163:15;23056:132;-1:-1:-1;23202:9:1;;23000:217::o;24338:128::-;24405:9;;;24426:11;;;24423:37;;;24440:18;;:::i;27177:177::-;27256:13;;-1:-1:-1;;;;;27298:31:1;;27288:42;;27278:70;;27344:1;27341;27334:12;27359:450;27446:6;27454;27462;27515:2;27503:9;27494:7;27490:23;27486:32;27483:52;;;27531:1;27528;27521:12;27483:52;27554:40;27584:9;27554:40;:::i;:::-;27544:50;;27613:49;27658:2;27647:9;27643:18;27613:49;:::i;:::-;27603:59;;27705:2;27694:9;27690:18;27684:25;27749:10;27742:5;27738:22;27731:5;27728:33;27718:61;;27775:1;27772;27765:12;28165:607;28480:25;;;28536:2;28521:18;;28514:34;;;;28579:2;28564:18;;28557:34;;;;28622:2;28607:18;;28600:34;;;;28665:3;28650:19;;28643:35;28709:3;28694:19;;28687:35;28753:3;28738:19;;28731:35;28467:3;28452:19;;28165:607::o

Swarm Source

ipfs://5468fbc48cf8fbe5eabc749bbbc7ae7ba922a07a8923b6b3b6d1b871a4f07d3b
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Validator ID :
0 FTM

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

Downtime
0 s
Address Amount claimed Rewards Created On Epoch Created On
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.