ETH Price: $2,429.64 (-1.51%)
 

Overview

Max Total Supply

1,000,000,000 Xi

Holders

72

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.88664108 Xi

Value
$0.00
0x7e02DEA1Ec1A76aD75050b0E340c284104Fa8070
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
XiBear

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-18
*/

/*
                                     ....
                                    W$$$$$u
                                    $$$$F**+           .oW$$$eu
                                    ..ueeeWeeo..      e$$$$$$$$$
                                .eW$$$$$$$$$$$$$$$b- d$$$$$$$$$$W
                    ,,,,,,,uee$$$$$$$$$$$$$$$$$$$$$ H$$$$$$$$$$$~
                 :eoC$$$$$$$$$$$C""?$$$$$$$$$$$$$$$ T$$$$$$$$$$"
                  $$$*$$$$$$$$$$$$$e "$$$$$$$$$$$$$$i$$$$$$$$F"
                  ?f"!?$$$$$$$$$$$$$$ud$$$$$$$$$$$$$$$$$$$$*Co
                  $   o$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
          !!!!m.*eeeW$$$$$$$$$$$f?$$$$$$$$$$$$$$$$$$$$$$$$$$$$$U
          !!!!!! !$$$$$$$$$$$$$$  T$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
           *!!*.o$$$$$$$$$$$$$$$e,d$$$$$$$$$$$$$$$$$$$$$$$$$$$$$:
          "eee$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$C
         b ?$$$$$$$$$$$$$$**$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$!
         Tb "$$$$$$$$$$$$$$*uL"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$'
          $$o."?$$$$$$$$F" u$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
           $$$$en ```    .e$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$'
            $$$B*  =*"?.e$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$F
             $$$W"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"
              "$$$o#$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"
             R: ?$$$W$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" :!i.
              !!n.?$???""``.......,``````"""""""""""``   ...+!!!
               !* ,+::!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*`
               "!?!!!!!!!!!!!!!!!!!!~ !!!!!!!!!!!!!!!!!!!~`
               +!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!?!`
             .!!!!!!!!!!!!!!!!!!!!!' !!!!!!!!!!!!!!!, !!!!
            :!!!!!!!!!!!!!!!!!!!!!!' !!!!!!!!!!!!!!!!! `!!:
         .+!!!!!!!!!!!!!!!!!!!!!~~!! !!!!!!!!!!!!!!!!!! !!!.
        :!!!!!!!!!!!!!!!!!!!!!!!!!.`:!!!!!!!!!!!!!!!!!:: `!!+
        "~!!!!!!!!!!!!!!!!!!!!!!!!!!.~!!!!!!!!!!!!!!!!!!!!.`!!:
            ~~!!!!!!!!!!!!!!!!!!!!!!! ;!!!!~` ..eeeeeeo.`+!.!!!!.
          :..    `+~!!!!!!!!!!!!!!!!! :!;`.e$$$$$$$$$$$$$u .
          $$$$$$beeeu..  `````~+~~~~~" ` !$$$$$$$$$$$$$$$$ $b
          $$$$$$$$$$$$$$$$$$$$$UU$U$$$$$ ~$$$$$$$$$$$$$$$$ $$o
         !$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$. $$$$$$$$$$$$$$$~ $$$u
         !$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$! $$$$$$$$$$$$$$$ 8$$$$.
         !$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$X $$$$$$$$$$$$$$`u$$$$$W
         !$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$! $$$$$$$$$$$$$".$$$$$$$:
          $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$  $$$$$$$$$$$$F.$$$$$$$$$
          ?$$$$$$$$$$$$$$$$$$$$$$$$$$$$f $$$$$$$$$$$$' $$$$$$$$$$.
           $$$$$$$$$$$$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$  $$$$$$$$$$!
           "$$$$$$$$$$$$$$$$$$$$$$$$$$$ ?$$$$$$$$$$$$  $$$$$$$$$$!
            "$$$$$$$$$$$$$$$$$$$$$$$$Fib ?$$$$$$$$$$$b ?$$$$$$$$$
              "$$$$$$$$$$$$$$$$$$$$"o$$$b."$$$$$$$$$$$  $$$$$$$$'
             e. ?$$$$$$$$$$$$$$$$$ d$$$$$$o."?$$$$$$$$H $$$$$$$'
            $$$W.`?$$$$$$$$$$$$$$$ $$$$$$$$$e. "??$$$f .$$$$$$'
           d$$$$$$o "?$$$$$$$$$$$$ $$$$$$$$$$$$$eeeeee$$$$$$$"
           $$$$$$$$$bu "?$$$$$$$$$ 3$$$$$$$$$$$$$$$$$$$$*$$"
          d$$$$$$$$$$$$$e. "?$$$$$:`$$$$$$$$$$$$$$$$$$$$8
  e$$e.   $$$$$$$$$$$$$$$$$$+  "??f "$$$$$$$$$$$$$$$$$$$$c
 $$$$$$$o $$$$$$$$$$$$$$$F"          `$$$$$$$$$$$$$$$$$$$$b.
M$$$$$$$$U$$$$$$$$$$$$$F"              ?$$$$$$$$$$$$$$$$$$$$$u
?$$$$$$$$$$$$$$$$$$$$F                   "?$$$$$$$$$$$$$$$$$$$$u
 "$$$$$$$$$$$$$$$$$$"                       ?$$$$$$$$$$$$$$$$$$$$o
   "?$$$$$$$$$$$$$F                            "?$$$$$$$$$$$$$$$$$$
      "??$$$$$$$F                                 ""?3$$$$$$$$$$$$F
                                                .e$$$$$$$$$$$$$$$$'
                                               u$$$$$$$$$$$$$$$$$
                                              `$$$$$$$$$$$$$$$$"
                                               "$$$$$$$$$$$$F"
                                                 ""?????""
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.7;

library Address {
    /**
     * 
     */
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
abstract contract Context {
    function _msgSender() internal view returns (address payable) {
        return payable(msg.sender);
    }

    function _msgData() internal view returns (bytes memory) {
        this;
        return msg.data;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IDEXRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

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

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

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    function owner() public view returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract XiBear is IERC20, Ownable {
    using Address for address;
    
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "Xi Bear";
    string constant _symbol = "Xi";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 1_000_000_000 * (10 ** _decimals);
    uint256 _maxBuyTxAmount = (_totalSupply * 1) / 500;
    uint256 _maxSellTxAmount = (_totalSupply * 1) / 500;
    uint256 _maxWalletSize = (_totalSupply * 2) / 100;

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;
    mapping (address => uint256) public lastSell;
    mapping (address => uint256) public lastBuy;

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) liquidityCreator;

    uint256 marketingFee = 400;
    uint256 liquidityFee = 200;
    uint256 totalFee = marketingFee + liquidityFee;
    uint256 sellBias = 0;
    uint256 feeDenominator = 10000;

    address payable public liquidityFeeReceiver = payable(0x2718a9da84596Bb31370ECC8795411750f495bCe);
    address payable public marketingFeeReceiver = payable(0x2718a9da84596Bb31370ECC8795411750f495bCe);

    IDEXRouter public router;
    address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    mapping (address => bool) liquidityPools;
    mapping (address => uint256) public protected;
    bool protectionEnabled = true;
    bool protectionDisabled = false;
    uint256 protectionLimit;
    uint256 public protectionCount;
    uint256 protectionTimer;

    address public pair;

    uint256 public launchedAt;
    uint256 public launchedTime;
    uint256 public deadBlocks;
    bool startBullRun = false;
    bool pauseDisabled = false;
    uint256 public rateLimit = 2;

    bool public swapEnabled = false;
    bool processEnabled = true;
    uint256 public swapThreshold = _totalSupply / 1000;
    uint256 public swapMinimum = _totalSupply / 10000;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }
    
    mapping (address => bool) teamMember;
    
    modifier onlyTeam() {
        require(teamMember[_msgSender()] || msg.sender == owner(), "Caller is not a team member");
        _;
    }
    
    event ProtectedWallet(address, address, uint256, uint8);

    constructor () {
        router = IDEXRouter(routerAddress);
        pair = IDEXFactory(router.factory()).createPair(router.WETH(), address(this));
        liquidityPools[pair] = true;
        _allowances[owner()][routerAddress] = type(uint256).max;
        _allowances[address(this)][routerAddress] = type(uint256).max;

        isFeeExempt[owner()] = true;
        liquidityCreator[owner()] = true;

        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[routerAddress] = true;
        isTxLimitExempt[DEAD] = true;

        _balances[owner()] = _totalSupply;

        emit Transfer(address(0), owner(), _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure returns (uint8) { return _decimals; }
    function symbol() external pure returns (string memory) { return _symbol; }
    function name() external pure returns (string memory) { return _name; }
    function getOwner() external view returns (address) { return owner(); }
    function maxBuyTxTokens() external view returns (uint256) { return _maxBuyTxAmount / (10 ** _decimals); }
    function maxSellTxTokens() external view returns (uint256) { return _maxSellTxAmount / (10 ** _decimals); }
    function maxWalletTokens() external view returns (uint256) { return _maxWalletSize / (10 ** _decimals); }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

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

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }
    
    function setTeamMember(address _team, bool _enabled) external onlyOwner {
        teamMember[_team] = _enabled;
    }
    
    function airdrop(address[] calldata addresses, uint256[] calldata amounts) external onlyOwner {
        require(addresses.length > 0 && amounts.length == addresses.length);
        address from = msg.sender;

        for (uint i = 0; i < addresses.length; i++) {
            if(!liquidityPools[addresses[i]] && !liquidityCreator[addresses[i]]) {
                _basicTransfer(from, addresses[i], amounts[i] * (10 ** _decimals));
            }
        }
    }
    
    function clearStuckBalance(uint256 amountPercentage, address adr) external onlyTeam {
        uint256 amountETH = address(this).balance;
        payable(adr).transfer((amountETH * amountPercentage) / 100);
    }
    
    function openTrading(uint256 _deadBlocks, uint256 _protection, uint256 _limit) external onlyTeam {
        require(!startBullRun && _deadBlocks < 10);
        deadBlocks = _deadBlocks;
        startBullRun = true;
        launchedAt = block.number;
        protectionTimer = block.timestamp + _protection;
        protectionLimit = _limit * (10 ** _decimals);
    }
    
    function pauseTrading() external onlyTeam {
        require(!pauseDisabled);
        startBullRun = false;
    }
    
    function disablePause() external onlyTeam {
        pauseDisabled = true;
        startBullRun = true;
    }
    
    function setProtection(bool _protect, uint256 _addTime) external onlyTeam {
        require(!protectionDisabled);
        protectionEnabled = _protect;
        require(_addTime < 1 days);
        protectionTimer += _addTime;
    }
    
    function disableProtection() external onlyTeam {
        protectionDisabled = true;
        protectionEnabled = false;
    }
    
    function protectWallet(address[] calldata _wallets, bool _protect) external onlyTeam {
        if (_protect) {
            require(protectionEnabled);
        }
        
        for (uint i = 0; i < _wallets.length; i++) {
            
            if (_protect) {
                protectionCount++;
                emit ProtectedWallet(tx.origin, _wallets[i], block.number, 2);
            }
            else {
                if (protected[_wallets[i]] != 0)
                    protectionCount--;      
            }
            protected[_wallets[i]] = _protect ? block.number : 0;
        }
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender] - amount;
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(sender != address(0), "BEP20: transfer from 0x0");
        require(recipient != address(0), "BEP20: transfer to 0x0");
        require(amount > 0, "Amount must be > zero");
        require(_balances[sender] >= amount, "Insufficient balance");
        if(!launched() && liquidityPools[recipient]){ require(liquidityCreator[sender], "Liquidity not added yet."); launch(); }
        if(!startBullRun){ require(liquidityCreator[sender] || liquidityCreator[recipient], "Trading not open yet."); }

        checkTxLimit(sender, recipient, amount);
        
        if (!liquidityPools[recipient] && recipient != DEAD) {
            if (!isTxLimitExempt[recipient]) {
                checkWalletLimit(recipient, amount);
            }
        }
        
        if(protectionEnabled && protectionTimer > block.timestamp) {
            if(liquidityPools[sender] && tx.origin != recipient && protected[recipient] == 0) {
                protected[recipient] = block.number;
                protectionCount++;
                emit ProtectedWallet(tx.origin, recipient, block.number, 0);
            }
        }
        
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        _balances[sender] = _balances[sender] - amount;

        uint256 amountReceived = shouldTakeFee(sender) ? takeFee(recipient, amount) : amount;
        
        if(shouldSwapBack(recipient)){ if (amount > 0) swapBack(amount); }
        
        _balances[recipient] = _balances[recipient] + amountReceived;

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }
    
    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() internal {
        launchedAt = block.number;
        launchedTime = block.timestamp;
        swapEnabled = true;
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender] - amount;
        _balances[recipient] = _balances[recipient] + amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }
    
    function checkWalletLimit(address recipient, uint256 amount) internal view {
        uint256 walletLimit = _maxWalletSize;
        require(_balances[recipient] + amount <= walletLimit, "Transfer amount exceeds the bag size.");
    }

    function checkTxLimit(address sender, address recipient, uint256 amount) internal {
        require(isTxLimitExempt[sender] || amount <= (liquidityPools[sender] ? _maxBuyTxAmount : _maxSellTxAmount), "TX Limit Exceeded");
        require(isTxLimitExempt[sender] || lastBuy[recipient] + rateLimit <= block.number, "Transfer rate limit exceeded.");
        
        if (protected[sender] != 0){
            require(amount <= protectionLimit * (10 ** _decimals) && lastSell[sender] == 0 && protectionTimer > block.timestamp, "Wallet protected, please contact support.");
            lastSell[sender] = block.number;
        }
        
        if (liquidityPools[recipient]) {
            lastSell[sender] = block.number;
        } else if (shouldTakeFee(sender)) {
            if (protectionEnabled && protectionTimer > block.timestamp && lastBuy[tx.origin] == block.number && protected[recipient] == 0) {
                protected[recipient] = block.number;
                emit ProtectedWallet(tx.origin, recipient, block.number, 1);
            }
            lastBuy[recipient] = block.number;
            if (tx.origin != recipient)
                lastBuy[tx.origin] = block.number;
        }
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    function getTotalFee(bool selling) public view returns (uint256) {
        if(launchedAt + deadBlocks >= block.number){ return feeDenominator - 1; }
        if (selling) return totalFee + sellBias;
        return totalFee - sellBias;
    }

    function takeFee(address recipient, uint256 amount) internal returns (uint256) {
        bool selling = liquidityPools[recipient];
        uint256 feeAmount = (amount * getTotalFee(selling)) / feeDenominator;
        
        _balances[address(this)] += feeAmount;
    
        return amount - feeAmount;
    }

    function shouldSwapBack(address recipient) internal view returns (bool) {
        return !liquidityPools[msg.sender]
        && !inSwap
        && swapEnabled
        && liquidityPools[recipient]
        && _balances[address(this)] >= swapMinimum;
    }

    function swapBack(uint256 amount) internal swapping {
        uint256 amountToSwap = amount < swapThreshold ? amount : swapThreshold;
        if (_balances[address(this)] < amountToSwap) amountToSwap = _balances[address(this)];
        
        uint256 amountToLiquify = (amountToSwap * liquidityFee / 2) / totalFee;
        amountToSwap -= amountToLiquify;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        
        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountBNB = address(this).balance - balanceBefore;
        uint256 totalBNBFee = totalFee - (liquidityFee / 2);

        uint256 amountBNBLiquidity = (amountBNB * liquidityFee / 2) / totalBNBFee;
        uint256 amountBNBMarketing = amountBNB - amountBNBLiquidity;
        
        if (amountBNBMarketing > 0)
            marketingFeeReceiver.transfer(amountBNBMarketing);
        
        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountBNBLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                liquidityFeeReceiver,
                block.timestamp
            );
        }

        emit FundsDistributed(amountBNBMarketing, amountBNBLiquidity, amountToLiquify);
    }
    
    function addLiquidityPool(address lp, bool isPool) external onlyOwner {
        require(lp != pair, "Can't alter current liquidity pair");
        liquidityPools[lp] = isPool;
    }

    function setRateLimit(uint256 rate) external onlyOwner {
        require(rate <= 60 seconds);
        rateLimit = rate;
    }

    function setTxLimit(uint256 buyNumerator, uint256 sellNumerator, uint256 divisor) external onlyOwner {
        require(buyNumerator > 0 && sellNumerator > 0 && divisor > 0 && divisor <= 10000);
        _maxBuyTxAmount = (_totalSupply * buyNumerator) / divisor;
        _maxSellTxAmount = (_totalSupply * sellNumerator) / divisor;
    }
    
    function setMaxWallet(uint256 numerator, uint256 divisor) external onlyOwner() {
        require(numerator > 0 && divisor > 0 && divisor <= 10000);
        _maxWalletSize = (_totalSupply * numerator) / divisor;
    }

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }

    function setFees(uint256 _liquidityFee, uint256 _marketingFee, uint256 _sellBias, uint256 _feeDenominator) external onlyOwner {
        liquidityFee = _liquidityFee;
        marketingFee = _marketingFee;
        totalFee = _marketingFee + _liquidityFee;
        sellBias = _sellBias;
        feeDenominator = _feeDenominator;
        require(totalFee < feeDenominator / 2);
    }

    function setFeeReceivers(address _liquidityFeeReceiver, address _marketingFeeReceiver) external onlyOwner {
        liquidityFeeReceiver = payable(_liquidityFeeReceiver);
        marketingFeeReceiver = payable(_marketingFeeReceiver);
    }

    function setSwapBackSettings(bool _enabled, bool _processEnabled, uint256 _denominator, uint256 _swapMinimum) external onlyOwner {
        require(_denominator > 0);
        swapEnabled = _enabled;
        processEnabled = _processEnabled;
        swapThreshold = _totalSupply / _denominator;
        swapMinimum = _swapMinimum * (10 ** _decimals);
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply - (balanceOf(DEAD) + balanceOf(ZERO));
    }

    event FundsDistributed(uint256 marketingBNB, uint256 liquidityBNB, uint256 liquidityTokens);
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":"marketingBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityTokens","type":"uint256"}],"name":"FundsDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"","type":"uint8"}],"name":"ProtectedWallet","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":[{"internalType":"address","name":"lp","type":"address"},{"internalType":"bool","name":"isPool","type":"bool"}],"name":"addLiquidityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","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":[{"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":"spender","type":"address"}],"name":"approveMax","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":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"},{"internalType":"address","name":"adr","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"disablePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTxTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTxTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deadBlocks","type":"uint256"},{"internalType":"uint256","name":"_protection","type":"uint256"},{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"},{"internalType":"bool","name":"_protect","type":"bool"}],"name":"protectWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"protected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rateLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityFeeReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_sellBias","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_protect","type":"bool"},{"internalType":"uint256","name":"_addTime","type":"uint256"}],"name":"setProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"setRateLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"bool","name":"_processEnabled","type":"bool"},{"internalType":"uint256","name":"_denominator","type":"uint256"},{"internalType":"uint256","name":"_swapMinimum","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_team","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setTeamMember","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyNumerator","type":"uint256"},{"internalType":"uint256","name":"sellNumerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMinimum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","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":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405261dead600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a62000099919062000d84565b633b9aca00620000aa919062000ec1565b6003556101f46001600354620000c1919062000ec1565b620000cd919062000cf1565b6004556101f46001600354620000e4919062000ec1565b620000f0919062000cf1565b6005556064600260035462000106919062000ec1565b62000112919062000cf1565b600655610190600e5560c8600f55600f54600e5462000132919062000c94565b6010556000601155612710601255732718a9da84596bb31370ecc8795411750f495bce601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732718a9da84596bb31370ecc8795411750f495bce601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601960006101000a81548160ff0219169083151502179055506000601960016101000a81548160ff0219169083151502179055506000602160006101000a81548160ff0219169083151502179055506000602160016101000a81548160ff02191690831515021790555060026022556000602360006101000a81548160ff0219169083151502179055506001602360016101000a81548160ff0219169083151502179055506103e8600354620002f8919062000cf1565b6024556127106003546200030d919062000cf1565b6025553480156200031d57600080fd5b5060006200033062000bae60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200049a57600080fd5b505afa158015620004af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d5919062000bf6565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200055957600080fd5b505afa1580156200056e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000594919062000bf6565b306040518363ffffffff1660e01b8152600401620005b492919062000c4a565b602060405180830381600087803b158015620005cf57600080fd5b505af1158015620005e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200060a919062000bf6565b601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160176000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60086000620006f962000bb660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600b60006200086f62000bb660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000620008d662000bb660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60006200099562000bb660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506003546007600062000af162000bb660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000b3f62000bb660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60035460405162000ba0919062000c77565b60405180910390a362000ff7565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008151905062000bf08162000fdd565b92915050565b60006020828403121562000c0f5762000c0e62000fcb565b5b600062000c1f8482850162000bdf565b91505092915050565b62000c338162000f22565b82525050565b62000c448162000f56565b82525050565b600060408201905062000c61600083018562000c28565b62000c70602083018462000c28565b9392505050565b600060208201905062000c8e600083018462000c39565b92915050565b600062000ca18262000f56565b915062000cae8362000f56565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000ce65762000ce562000f6d565b5b828201905092915050565b600062000cfe8262000f56565b915062000d0b8362000f56565b92508262000d1e5762000d1d62000f9c565b5b828204905092915050565b6000808291508390505b600185111562000d7b5780860481111562000d535762000d5262000f6d565b5b600185161562000d635780820291505b808102905062000d738562000fd0565b945062000d33565b94509492505050565b600062000d918262000f56565b915062000d9e8362000f60565b925062000dcd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000dd5565b905092915050565b60008262000de7576001905062000eba565b8162000df7576000905062000eba565b816001811462000e10576002811462000e1b5762000e51565b600191505062000eba565b60ff84111562000e305762000e2f62000f6d565b5b8360020a91508482111562000e4a5762000e4962000f6d565b5b5062000eba565b5060208310610133831016604e8410600b841016171562000e8b5782820a90508381111562000e855762000e8462000f6d565b5b62000eba565b62000e9a848484600162000d29565b9250905081840481111562000eb45762000eb362000f6d565b5b81810290505b9392505050565b600062000ece8262000f56565b915062000edb8362000f56565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000f175762000f1662000f6d565b5b828202905092915050565b600062000f2f8262000f36565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600080fd5b60008160011c9050919050565b62000fe88162000f22565b811462000ff457600080fd5b50565b6159f480620010076000396000f3fe6080604052600436106103035760003560e01c80636f4ce42811610190578063bf56b371116100dc578063e96fada211610095578063f84ba65d1161006f578063f84ba65d14610b65578063f8821a6214610b8e578063f887ea4014610bb9578063fabb0b4f14610be45761030a565b8063e96fada214610ad4578063f1f3bca314610aff578063f2fde38b14610b3c5761030a565b8063bf56b371146109b2578063bfa21d6a146109dd578063c1adf7bc14610a08578063c287184e14610a45578063d686014214610a6e578063dd62ed3e14610a975761030a565b806395d89b4111610149578063a8aa1b3111610123578063a8aa1b31146108f6578063a9059cbb14610921578063abe57e701461095e578063bafe446b146109875761030a565b806395d89b41146108775780639b02c402146108a2578063a4b45c00146108cd5761030a565b80636f4ce428146107675780636fcba377146107a457806370a08231146107cd578063715018a61461080a578063893d20e8146108215780638da5cb5b1461084c5761030a565b8063492a937b1161024f578063584f969a1161020857806363a803e1116101e257806363a803e1146106bf578063658d4b7f146106ea57806367243482146107135780636ddd17131461073c5761030a565b8063584f969a1461065457806360bba03d1461066b57806361e08e72146106945761030a565b8063492a937b14610548578063507139351461057157806354a1dfc91461059a57806356a227f2146105c3578063571ac8b0146105ec5780635804f1e4146106295761030a565b8063234e9494116102bc578063313ce56711610296578063313ce567146104a057806334848b9a146104cb578063421dd7c7146104f457806346d7edaa1461050b5761030a565b8063234e94941461040d57806323b872dd146104385780632b112e49146104755761030a565b80630445b6671461030f57806306fdde031461033a578063095db78f14610365578063095ea7b31461038e5780631031e36e146103cb57806318160ddd146103e25761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c0f565b6040516103319190615071565b60405180910390f35b34801561034657600080fd5b5061034f610c15565b60405161035c9190614e8f565b60405180910390f35b34801561037157600080fd5b5061038c600480360381019061038791906146b8565b610c52565b005b34801561039a57600080fd5b506103b560048036038101906103b091906145f7565b610ef1565b6040516103c29190614e59565b60405180910390f35b3480156103d757600080fd5b506103e0610fe3565b005b3480156103ee57600080fd5b506103f76110ea565b6040516104049190615071565b60405180910390f35b34801561041957600080fd5b506104226110f4565b60405161042f9190615071565b60405180910390f35b34801561044457600080fd5b5061045f600480360381019061045a9190614564565b611116565b60405161046c9190614e59565b60405180910390f35b34801561048157600080fd5b5061048a6112d8565b6040516104979190615071565b60405180910390f35b3480156104ac57600080fd5b506104b561134c565b6040516104c2919061511d565b60405180910390f35b3480156104d757600080fd5b506104f260048036038101906104ed9190614899565b611355565b005b34801561050057600080fd5b506105096114aa565b005b34801561051757600080fd5b50610532600480360381019061052d91906144ca565b6115b2565b60405161053f9190615071565b60405180910390f35b34801561055457600080fd5b5061056f600480360381019061056a91906145b7565b6115ca565b005b34801561057d57600080fd5b5061059860048036038101906105939190614899565b61174b565b005b3480156105a657600080fd5b506105c160048036038101906105bc9190614745565b611856565b005b3480156105cf57600080fd5b506105ea60048036038101906105e59190614819565b611965565b005b3480156105f857600080fd5b50610613600480360381019061060e91906144ca565b611a9d565b6040516106209190614e59565b60405180910390f35b34801561063557600080fd5b5061063e611ad0565b60405161064b9190615071565b60405180910390f35b34801561066057600080fd5b50610669611ad6565b005b34801561067757600080fd5b50610692600480360381019061068d91906145b7565b611bde565b005b3480156106a057600080fd5b506106a9611cce565b6040516106b69190615071565b60405180910390f35b3480156106cb57600080fd5b506106d4611cd4565b6040516106e19190615071565b60405180910390f35b3480156106f657600080fd5b50610711600480360381019061070c91906145b7565b611cf6565b005b34801561071f57600080fd5b5061073a60048036038101906107359190614637565b611de6565b005b34801561074857600080fd5b50610751612026565b60405161075e9190614e59565b60405180910390f35b34801561077357600080fd5b5061078e600480360381019061078991906144ca565b612039565b60405161079b9190615071565b60405180910390f35b3480156107b057600080fd5b506107cb60048036038101906107c6919061493f565b612051565b005b3480156107d957600080fd5b506107f460048036038101906107ef91906144ca565b612136565b6040516108019190615071565b60405180910390f35b34801561081657600080fd5b5061081f61217f565b005b34801561082d57600080fd5b506108366122d2565b6040516108439190614cf3565b60405180910390f35b34801561085857600080fd5b506108616122e1565b60405161086e9190614cf3565b60405180910390f35b34801561088357600080fd5b5061088c61230a565b6040516108999190614e8f565b60405180910390f35b3480156108ae57600080fd5b506108b7612347565b6040516108c49190615071565b60405180910390f35b3480156108d957600080fd5b506108f460048036038101906108ef9190614524565b61234d565b005b34801561090257600080fd5b5061090b612468565b6040516109189190614cf3565b60405180910390f35b34801561092d57600080fd5b50610948600480360381019061094391906145f7565b61248e565b6040516109559190614e59565b60405180910390f35b34801561096a57600080fd5b5061098560048036038101906109809190614859565b6124a3565b005b34801561099357600080fd5b5061099c612582565b6040516109a99190615071565b60405180910390f35b3480156109be57600080fd5b506109c76125a4565b6040516109d49190615071565b60405180910390f35b3480156109e957600080fd5b506109f26125aa565b6040516109ff9190614d0e565b60405180910390f35b348015610a1457600080fd5b50610a2f6004803603810190610a2a91906144ca565b6125d0565b604051610a3c9190615071565b60405180910390f35b348015610a5157600080fd5b50610a6c6004803603810190610a6791906147ec565b6125e8565b005b348015610a7a57600080fd5b50610a956004803603810190610a9091906147ac565b612695565b005b348015610aa357600080fd5b50610abe6004803603810190610ab99190614524565b6127c5565b604051610acb9190615071565b60405180910390f35b348015610ae057600080fd5b50610ae961284c565b604051610af69190614d0e565b60405180910390f35b348015610b0b57600080fd5b50610b266004803603810190610b219190614718565b612872565b604051610b339190615071565b60405180910390f35b348015610b4857600080fd5b50610b636004803603810190610b5e91906144ca565b6128d5565b005b348015610b7157600080fd5b50610b8c6004803603810190610b8791906145b7565b612a97565b005b348015610b9a57600080fd5b50610ba3612b87565b604051610bb09190615071565b60405180910390f35b348015610bc557600080fd5b50610bce612b8d565b604051610bdb9190614e74565b60405180910390f35b348015610bf057600080fd5b50610bf9612bb3565b604051610c069190615071565b60405180910390f35b60245481565b60606040518060400160405280600781526020017f5869204265617200000000000000000000000000000000000000000000000000815250905090565b60276000610c5e612bb9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610ce35750610cb46122e1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1990614f91565b60405180910390fd5b8015610d4257601960009054906101000a900460ff16610d4157600080fd5b5b60005b83839050811015610eeb578115610dd857601b6000815480929190610d6990615567565b91905055507f47e78c0c4ce6dbe67ff01d67de13c04f361afa37858e7056d665001d746855ea32858584818110610da357610da261560e565b5b9050602002016020810190610db891906144ca565b436002604051610dcb9493929190614db3565b60405180910390a1610e60565b600060186000868685818110610df157610df061560e565b5b9050602002016020810190610e0691906144ca565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e5f57601b6000815480929190610e599061553d565b91905055505b5b81610e6c576000610e6e565b435b60186000868685818110610e8557610e8461560e565b5b9050602002016020810190610e9a91906144ca565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080610ee390615567565b915050610d45565b50505050565b600081600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610fd19190615071565b60405180910390a36001905092915050565b60276000610fef612bb9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061107457506110456122e1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6110b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110aa90614f91565b60405180910390fd5b602160019054906101000a900460ff16156110cd57600080fd5b6000602160006101000a81548160ff021916908315150217905550565b6000600354905090565b60006009600a6111049190615267565b60055461111191906151e3565b905090565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146112c45781600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461124391906153df565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6112cf848484612bc1565b90509392505050565b6000611305600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612136565b611330600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612136565b61133a919061518d565b60035461134791906153df565b905090565b60006009905090565b60276000611361612bb9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806113e657506113b76122e1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c90614f91565b60405180910390fd5b602160009054906101000a900460ff161580156114425750600a83105b61144b57600080fd5b826020819055506001602160006101000a81548160ff02191690831515021790555043601e819055508142611480919061518d565b601c819055506009600a6114949190615267565b8161149f9190615385565b601a81905550505050565b602760006114b6612bb9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061153b575061150c6122e1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61157a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157190614f91565b60405180910390fd5b6001601960016101000a81548160ff0219169083151502179055506000601960006101000a81548160ff021916908315150217905550565b60186020528060005260406000206000915090505481565b6115d2612bb9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461165f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165690615011565b60405180910390fd5b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e790615051565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611753612bb9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d790615011565b60405180910390fd5b6000831180156117f05750600082115b80156117fc5750600081115b801561180a57506127108111155b61181357600080fd5b80836003546118229190615385565b61182c91906151e3565b60048190555080826003546118419190615385565b61184b91906151e3565b600581905550505050565b61185e612bb9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e290615011565b60405180910390fd5b600082116118f857600080fd5b83602360006101000a81548160ff02191690831515021790555082602360016101000a81548160ff0219169083151502179055508160035461193a91906151e3565b6024819055506009600a61194e9190615267565b816119599190615385565b60258190555050505050565b60276000611971612bb9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806119f657506119c76122e1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2c90614f91565b60405180910390fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc60648584611a629190615385565b611a6c91906151e3565b9081150290604051600060405180830381858888f19350505050158015611a97573d6000803e3d6000fd5b50505050565b6000611ac9827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ef1565b9050919050565b601f5481565b60276000611ae2612bb9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611b675750611b386122e1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9d90614f91565b60405180910390fd5b6001602160016101000a81548160ff0219169083151502179055506001602160006101000a81548160ff021916908315150217905550565b611be6612bb9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6a90615011565b60405180910390fd5b80602760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60225481565b60006009600a611ce49190615267565b600654611cf191906151e3565b905090565b611cfe612bb9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8290615011565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611dee612bb9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7290615011565b60405180910390fd5b600084849050118015611e9357508383905082829050145b611e9c57600080fd5b600033905060005b8585905081101561201e5760176000878784818110611ec657611ec561560e565b5b9050602002016020810190611edb91906144ca565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611fa15750600d6000878784818110611f4257611f4161560e565b5b9050602002016020810190611f5791906144ca565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561200b5761200982878784818110611fbd57611fbc61560e565b5b9050602002016020810190611fd291906144ca565b6009600a611fe09190615267565b878786818110611ff357611ff261560e565b5b905060200201356120049190615385565b6133f5565b505b808061201690615567565b915050611ea4565b505050505050565b602360009054906101000a900460ff1681565b60096020528060005260406000206000915090505481565b612059612bb9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dd90615011565b60405180910390fd5b83600f8190555082600e819055508383612100919061518d565b6010819055508160118190555080601281905550600260125461212391906151e3565b6010541061213057600080fd5b50505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b612187612bb9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220b90615011565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006122dc6122e1565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600281526020017f5869000000000000000000000000000000000000000000000000000000000000815250905090565b601b5481565b612355612bb9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d990615011565b60405180910390fd5b81601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061249b338484612bc1565b905092915050565b6124ab612bb9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252f90615011565b60405180910390fd5b6000821180156125485750600081115b801561255657506127108111155b61255f57600080fd5b808260035461256e9190615385565b61257891906151e3565b6006819055505050565b60006009600a6125929190615267565b60045461259f91906151e3565b905090565b601e5481565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a6020528060005260406000206000915090505481565b6125f0612bb9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461267d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267490615011565b60405180910390fd5b603c81111561268b57600080fd5b8060228190555050565b602760006126a1612bb9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061272657506126f76122e1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612765576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275c90614f91565b60405180910390fd5b601960019054906101000a900460ff161561277f57600080fd5b81601960006101000a81548160ff0219169083151502179055506201518081106127a857600080fd5b80601c60008282546127ba919061518d565b925050819055505050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600043602054601e54612885919061518d565b106128a057600160125461289991906153df565b90506128d0565b81156128bd576011546010546128b6919061518d565b90506128d0565b6011546010546128cd91906153df565b90505b919050565b6128dd612bb9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461296a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296190615011565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156129da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d190614f31565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612a9f612bb9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2390615011565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60255481565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60205481565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2990614f11565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9990614f51565b60405180910390fd5b60008211612ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cdc90614eb1565b60405180910390fd5b81600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612d67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5e90614f71565b60405180910390fd5b612d6f613583565b158015612dc55750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e5f57600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4d90614fd1565b60405180910390fd5b612e5e613590565b5b602160009054906101000a900460ff16612f5457600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f145750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4a90615031565b60405180910390fd5b5b612f5f8484846135bb565b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156130075750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561306957600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613068576130678383613b78565b5b5b601960009054906101000a900460ff168015613086575042601c54115b156131fc57601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561311057508273ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b801561315b57506000601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156131fb5743601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601b60008154809291906131b790615567565b91905055507f47e78c0c4ce6dbe67ff01d67de13c04f361afa37858e7056d665001d746855ea32844360006040516131f29493929190614d29565b60405180910390a15b5b602660009054906101000a900460ff16156132235761321c8484846133f5565b90506133ee565b81600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461326e91906153df565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006132bc85613c11565b6132c657826132d1565b6132d08484613c68565b5b90506132dc84613d4b565b156132f55760008311156132f4576132f383613e75565b5b5b80600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613340919061518d565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133e09190615071565b60405180910390a360019150505b9392505050565b600081600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461344291906153df565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134d0919061518d565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135709190615071565b60405180910390a3600190509392505050565b600080601e541415905090565b43601e8190555042601f819055506001602360006101000a81548160ff021916908315150217905550565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061366f5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166136675760055461366b565b6004545b8111155b6136ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136a590614ef1565b60405180910390fd5b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613752575043602254600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461374f919061518d565b11155b613791576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378890614fb1565b60405180910390fd5b6000601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146138d2576009600a6137e69190615267565b601a546137f39190615385565b811115801561384157506000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b801561384e575042601c54115b61388d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388490614ff1565b60405180910390fd5b43600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561396d5743600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b73565b61397683613c11565b15613b7257601960009054906101000a900460ff168015613998575042601c54115b80156139e2575043600a60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b8015613a2d57506000601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b15613ab55743601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f47e78c0c4ce6dbe67ff01d67de13c04f361afa37858e7056d665001d746855ea3283436001604051613aac9493929190614d6e565b60405180910390a15b43600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614613b715743600a60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b505050565b600060065490508082600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bcb919061518d565b1115613c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c0390614ed1565b60405180910390fd5b505050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b600080601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000601254613cc883612872565b85613cd39190615385565b613cdd91906151e3565b905080600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613d2e919061518d565b925050819055508084613d4191906153df565b9250505092915050565b6000601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613db45750602660009054906101000a900460ff16155b8015613dcc5750602360009054906101000a900460ff165b8015613e215750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015613e6e5750602554600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b9050919050565b6001602660006101000a81548160ff02191690831515021790555060006024548210613ea357602454613ea5565b815b905080600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015613f3157600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b60006010546002600f5484613f469190615385565b613f5091906151e3565b613f5a91906151e3565b90508082613f6891906153df565b91506000600267ffffffffffffffff811115613f8757613f8661563d565b5b604051908082528060200260200182016040528015613fb55781602001602082028036833780820191505090505b5090503081600081518110613fcd57613fcc61560e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561406f57600080fd5b505afa158015614083573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140a791906144f7565b816001815181106140bb576140ba61560e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478560008530426040518663ffffffff1660e01b815260040161415e95949392919061508c565b600060405180830381600087803b15801561417857600080fd5b505af115801561418c573d6000803e3d6000fd5b505050506000814761419e91906153df565b905060006002600f546141b191906151e3565b6010546141be91906153df565b90506000816002600f54856141d39190615385565b6141dd91906151e3565b6141e791906151e3565b9050600081846141f791906153df565b9050600081111561426c57601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561426a573d6000803e3d6000fd5b505b600087111561435457601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71983308a600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016142fe96959493929190614df8565b6060604051808303818588803b15801561431757600080fd5b505af115801561432b573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061435091906148ec565b5050505b7fdaf6233a382145376035341e71f8a04305f7e323d0fe3e58c908cf0a26b76df9818389604051614387939291906150e6565b60405180910390a150505050505050506000602660006101000a81548160ff02191690831515021790555050565b6000813590506143c481615979565b92915050565b6000815190506143d981615979565b92915050565b60008083601f8401126143f5576143f4615671565b5b8235905067ffffffffffffffff8111156144125761441161566c565b5b60208301915083602082028301111561442e5761442d615676565b5b9250929050565b60008083601f84011261444b5761444a615671565b5b8235905067ffffffffffffffff8111156144685761446761566c565b5b60208301915083602082028301111561448457614483615676565b5b9250929050565b60008135905061449a81615990565b92915050565b6000813590506144af816159a7565b92915050565b6000815190506144c4816159a7565b92915050565b6000602082840312156144e0576144df615680565b5b60006144ee848285016143b5565b91505092915050565b60006020828403121561450d5761450c615680565b5b600061451b848285016143ca565b91505092915050565b6000806040838503121561453b5761453a615680565b5b6000614549858286016143b5565b925050602061455a858286016143b5565b9150509250929050565b60008060006060848603121561457d5761457c615680565b5b600061458b868287016143b5565b935050602061459c868287016143b5565b92505060406145ad868287016144a0565b9150509250925092565b600080604083850312156145ce576145cd615680565b5b60006145dc858286016143b5565b92505060206145ed8582860161448b565b9150509250929050565b6000806040838503121561460e5761460d615680565b5b600061461c858286016143b5565b925050602061462d858286016144a0565b9150509250929050565b6000806000806040858703121561465157614650615680565b5b600085013567ffffffffffffffff81111561466f5761466e61567b565b5b61467b878288016143df565b9450945050602085013567ffffffffffffffff81111561469e5761469d61567b565b5b6146aa87828801614435565b925092505092959194509250565b6000806000604084860312156146d1576146d0615680565b5b600084013567ffffffffffffffff8111156146ef576146ee61567b565b5b6146fb868287016143df565b9350935050602061470e8682870161448b565b9150509250925092565b60006020828403121561472e5761472d615680565b5b600061473c8482850161448b565b91505092915050565b6000806000806080858703121561475f5761475e615680565b5b600061476d8782880161448b565b945050602061477e8782880161448b565b935050604061478f878288016144a0565b92505060606147a0878288016144a0565b91505092959194509250565b600080604083850312156147c3576147c2615680565b5b60006147d18582860161448b565b92505060206147e2858286016144a0565b9150509250929050565b60006020828403121561480257614801615680565b5b6000614810848285016144a0565b91505092915050565b600080604083850312156148305761482f615680565b5b600061483e858286016144a0565b925050602061484f858286016143b5565b9150509250929050565b600080604083850312156148705761486f615680565b5b600061487e858286016144a0565b925050602061488f858286016144a0565b9150509250929050565b6000806000606084860312156148b2576148b1615680565b5b60006148c0868287016144a0565b93505060206148d1868287016144a0565b92505060406148e2868287016144a0565b9150509250925092565b60008060006060848603121561490557614904615680565b5b6000614913868287016144b5565b9350506020614924868287016144b5565b9250506040614935868287016144b5565b9150509250925092565b6000806000806080858703121561495957614958615680565b5b6000614967878288016144a0565b9450506020614978878288016144a0565b9350506040614989878288016144a0565b925050606061499a878288016144a0565b91505092959194509250565b60006149b283836149dc565b60208301905092915050565b6149c78161547a565b82525050565b6149d681615425565b82525050565b6149e581615413565b82525050565b6149f481615413565b82525050565b6000614a0582615148565b614a0f818561516b565b9350614a1a83615138565b8060005b83811015614a4b578151614a3288826149a6565b9750614a3d8361515e565b925050600181019050614a1e565b5085935050505092915050565b614a6181615437565b82525050565b614a708161548c565b82525050565b614a7f8161549e565b82525050565b614a8e816154b0565b82525050565b614a9d816154c2565b82525050565b614aac816154d4565b82525050565b6000614abd82615153565b614ac7818561517c565b9350614ad781856020860161550a565b614ae081615685565b840191505092915050565b6000614af860158361517c565b9150614b03826156a3565b602082019050919050565b6000614b1b60258361517c565b9150614b26826156cc565b604082019050919050565b6000614b3e60118361517c565b9150614b498261571b565b602082019050919050565b6000614b6160188361517c565b9150614b6c82615744565b602082019050919050565b6000614b8460268361517c565b9150614b8f8261576d565b604082019050919050565b6000614ba760168361517c565b9150614bb2826157bc565b602082019050919050565b6000614bca60148361517c565b9150614bd5826157e5565b602082019050919050565b6000614bed601b8361517c565b9150614bf88261580e565b602082019050919050565b6000614c10601d8361517c565b9150614c1b82615837565b602082019050919050565b6000614c3360188361517c565b9150614c3e82615860565b602082019050919050565b6000614c5660298361517c565b9150614c6182615889565b604082019050919050565b6000614c7960208361517c565b9150614c84826158d8565b602082019050919050565b6000614c9c60158361517c565b9150614ca782615901565b602082019050919050565b6000614cbf60228361517c565b9150614cca8261592a565b604082019050919050565b614cde81615463565b82525050565b614ced8161546d565b82525050565b6000602082019050614d0860008301846149eb565b92915050565b6000602082019050614d2360008301846149cd565b92915050565b6000608082019050614d3e60008301876149eb565b614d4b60208301866149eb565b614d586040830185614cd5565b614d656060830184614a85565b95945050505050565b6000608082019050614d8360008301876149eb565b614d9060208301866149eb565b614d9d6040830185614cd5565b614daa6060830184614a94565b95945050505050565b6000608082019050614dc860008301876149eb565b614dd560208301866149eb565b614de26040830185614cd5565b614def6060830184614aa3565b95945050505050565b600060c082019050614e0d60008301896149eb565b614e1a6020830188614cd5565b614e276040830187614a76565b614e346060830186614a76565b614e4160808301856149be565b614e4e60a0830184614cd5565b979650505050505050565b6000602082019050614e6e6000830184614a58565b92915050565b6000602082019050614e896000830184614a67565b92915050565b60006020820190508181036000830152614ea98184614ab2565b905092915050565b60006020820190508181036000830152614eca81614aeb565b9050919050565b60006020820190508181036000830152614eea81614b0e565b9050919050565b60006020820190508181036000830152614f0a81614b31565b9050919050565b60006020820190508181036000830152614f2a81614b54565b9050919050565b60006020820190508181036000830152614f4a81614b77565b9050919050565b60006020820190508181036000830152614f6a81614b9a565b9050919050565b60006020820190508181036000830152614f8a81614bbd565b9050919050565b60006020820190508181036000830152614faa81614be0565b9050919050565b60006020820190508181036000830152614fca81614c03565b9050919050565b60006020820190508181036000830152614fea81614c26565b9050919050565b6000602082019050818103600083015261500a81614c49565b9050919050565b6000602082019050818103600083015261502a81614c6c565b9050919050565b6000602082019050818103600083015261504a81614c8f565b9050919050565b6000602082019050818103600083015261506a81614cb2565b9050919050565b60006020820190506150866000830184614cd5565b92915050565b600060a0820190506150a16000830188614cd5565b6150ae6020830187614a76565b81810360408301526150c081866149fa565b90506150cf60608301856149eb565b6150dc6080830184614cd5565b9695505050505050565b60006060820190506150fb6000830186614cd5565b6151086020830185614cd5565b6151156040830184614cd5565b949350505050565b60006020820190506151326000830184614ce4565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061519882615463565b91506151a383615463565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156151d8576151d76155b0565b5b828201905092915050565b60006151ee82615463565b91506151f983615463565b925082615209576152086155df565b5b828204905092915050565b6000808291508390505b600185111561525e5780860481111561523a576152396155b0565b5b60018516156152495780820291505b808102905061525785615696565b945061521e565b94509492505050565b600061527282615463565b915061527d8361546d565b92506152aa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846152b2565b905092915050565b6000826152c2576001905061537e565b816152d0576000905061537e565b81600181146152e657600281146152f05761531f565b600191505061537e565b60ff841115615302576153016155b0565b5b8360020a915084821115615319576153186155b0565b5b5061537e565b5060208310610133831016604e8410600b84101617156153545782820a90508381111561534f5761534e6155b0565b5b61537e565b6153618484846001615214565b92509050818404811115615378576153776155b0565b5b81810290505b9392505050565b600061539082615463565b915061539b83615463565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153d4576153d36155b0565b5b828202905092915050565b60006153ea82615463565b91506153f583615463565b925082821015615408576154076155b0565b5b828203905092915050565b600061541e82615443565b9050919050565b600061543082615443565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000615485826154e6565b9050919050565b6000615497826154e6565b9050919050565b60006154a982615463565b9050919050565b60006154bb8261546d565b9050919050565b60006154cd8261546d565b9050919050565b60006154df8261546d565b9050919050565b60006154f1826154f8565b9050919050565b600061550382615443565b9050919050565b60005b8381101561552857808201518184015260208101905061550d565b83811115615537576000848401525b50505050565b600061554882615463565b9150600082141561555c5761555b6155b0565b5b600182039050919050565b600061557282615463565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156155a5576155a46155b0565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f416d6f756e74206d757374206265203e207a65726f0000000000000000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206261672060008201527f73697a652e000000000000000000000000000000000000000000000000000000602082015250565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b7f42455032303a207472616e736665722066726f6d203078300000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f42455032303a207472616e7366657220746f2030783000000000000000000000600082015250565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b7f43616c6c6572206973206e6f742061207465616d206d656d6265720000000000600082015250565b7f5472616e736665722072617465206c696d69742065786365656465642e000000600082015250565b7f4c6971756964697479206e6f74206164646564207965742e0000000000000000600082015250565b7f57616c6c65742070726f7465637465642c20706c6561736520636f6e7461637460008201527f20737570706f72742e0000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54726164696e67206e6f74206f70656e207965742e0000000000000000000000600082015250565b7f43616e277420616c7465722063757272656e74206c697175696469747920706160008201527f6972000000000000000000000000000000000000000000000000000000000000602082015250565b61598281615413565b811461598d57600080fd5b50565b61599981615437565b81146159a457600080fd5b50565b6159b081615463565b81146159bb57600080fd5b5056fea264697066735822122097f3143c0d1b6c8c1e57c19e2e2a11eda49eb97de142f94f265bbe38efbaf11964736f6c63430008070033

Deployed Bytecode

0x6080604052600436106103035760003560e01c80636f4ce42811610190578063bf56b371116100dc578063e96fada211610095578063f84ba65d1161006f578063f84ba65d14610b65578063f8821a6214610b8e578063f887ea4014610bb9578063fabb0b4f14610be45761030a565b8063e96fada214610ad4578063f1f3bca314610aff578063f2fde38b14610b3c5761030a565b8063bf56b371146109b2578063bfa21d6a146109dd578063c1adf7bc14610a08578063c287184e14610a45578063d686014214610a6e578063dd62ed3e14610a975761030a565b806395d89b4111610149578063a8aa1b3111610123578063a8aa1b31146108f6578063a9059cbb14610921578063abe57e701461095e578063bafe446b146109875761030a565b806395d89b41146108775780639b02c402146108a2578063a4b45c00146108cd5761030a565b80636f4ce428146107675780636fcba377146107a457806370a08231146107cd578063715018a61461080a578063893d20e8146108215780638da5cb5b1461084c5761030a565b8063492a937b1161024f578063584f969a1161020857806363a803e1116101e257806363a803e1146106bf578063658d4b7f146106ea57806367243482146107135780636ddd17131461073c5761030a565b8063584f969a1461065457806360bba03d1461066b57806361e08e72146106945761030a565b8063492a937b14610548578063507139351461057157806354a1dfc91461059a57806356a227f2146105c3578063571ac8b0146105ec5780635804f1e4146106295761030a565b8063234e9494116102bc578063313ce56711610296578063313ce567146104a057806334848b9a146104cb578063421dd7c7146104f457806346d7edaa1461050b5761030a565b8063234e94941461040d57806323b872dd146104385780632b112e49146104755761030a565b80630445b6671461030f57806306fdde031461033a578063095db78f14610365578063095ea7b31461038e5780631031e36e146103cb57806318160ddd146103e25761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c0f565b6040516103319190615071565b60405180910390f35b34801561034657600080fd5b5061034f610c15565b60405161035c9190614e8f565b60405180910390f35b34801561037157600080fd5b5061038c600480360381019061038791906146b8565b610c52565b005b34801561039a57600080fd5b506103b560048036038101906103b091906145f7565b610ef1565b6040516103c29190614e59565b60405180910390f35b3480156103d757600080fd5b506103e0610fe3565b005b3480156103ee57600080fd5b506103f76110ea565b6040516104049190615071565b60405180910390f35b34801561041957600080fd5b506104226110f4565b60405161042f9190615071565b60405180910390f35b34801561044457600080fd5b5061045f600480360381019061045a9190614564565b611116565b60405161046c9190614e59565b60405180910390f35b34801561048157600080fd5b5061048a6112d8565b6040516104979190615071565b60405180910390f35b3480156104ac57600080fd5b506104b561134c565b6040516104c2919061511d565b60405180910390f35b3480156104d757600080fd5b506104f260048036038101906104ed9190614899565b611355565b005b34801561050057600080fd5b506105096114aa565b005b34801561051757600080fd5b50610532600480360381019061052d91906144ca565b6115b2565b60405161053f9190615071565b60405180910390f35b34801561055457600080fd5b5061056f600480360381019061056a91906145b7565b6115ca565b005b34801561057d57600080fd5b5061059860048036038101906105939190614899565b61174b565b005b3480156105a657600080fd5b506105c160048036038101906105bc9190614745565b611856565b005b3480156105cf57600080fd5b506105ea60048036038101906105e59190614819565b611965565b005b3480156105f857600080fd5b50610613600480360381019061060e91906144ca565b611a9d565b6040516106209190614e59565b60405180910390f35b34801561063557600080fd5b5061063e611ad0565b60405161064b9190615071565b60405180910390f35b34801561066057600080fd5b50610669611ad6565b005b34801561067757600080fd5b50610692600480360381019061068d91906145b7565b611bde565b005b3480156106a057600080fd5b506106a9611cce565b6040516106b69190615071565b60405180910390f35b3480156106cb57600080fd5b506106d4611cd4565b6040516106e19190615071565b60405180910390f35b3480156106f657600080fd5b50610711600480360381019061070c91906145b7565b611cf6565b005b34801561071f57600080fd5b5061073a60048036038101906107359190614637565b611de6565b005b34801561074857600080fd5b50610751612026565b60405161075e9190614e59565b60405180910390f35b34801561077357600080fd5b5061078e600480360381019061078991906144ca565b612039565b60405161079b9190615071565b60405180910390f35b3480156107b057600080fd5b506107cb60048036038101906107c6919061493f565b612051565b005b3480156107d957600080fd5b506107f460048036038101906107ef91906144ca565b612136565b6040516108019190615071565b60405180910390f35b34801561081657600080fd5b5061081f61217f565b005b34801561082d57600080fd5b506108366122d2565b6040516108439190614cf3565b60405180910390f35b34801561085857600080fd5b506108616122e1565b60405161086e9190614cf3565b60405180910390f35b34801561088357600080fd5b5061088c61230a565b6040516108999190614e8f565b60405180910390f35b3480156108ae57600080fd5b506108b7612347565b6040516108c49190615071565b60405180910390f35b3480156108d957600080fd5b506108f460048036038101906108ef9190614524565b61234d565b005b34801561090257600080fd5b5061090b612468565b6040516109189190614cf3565b60405180910390f35b34801561092d57600080fd5b50610948600480360381019061094391906145f7565b61248e565b6040516109559190614e59565b60405180910390f35b34801561096a57600080fd5b5061098560048036038101906109809190614859565b6124a3565b005b34801561099357600080fd5b5061099c612582565b6040516109a99190615071565b60405180910390f35b3480156109be57600080fd5b506109c76125a4565b6040516109d49190615071565b60405180910390f35b3480156109e957600080fd5b506109f26125aa565b6040516109ff9190614d0e565b60405180910390f35b348015610a1457600080fd5b50610a2f6004803603810190610a2a91906144ca565b6125d0565b604051610a3c9190615071565b60405180910390f35b348015610a5157600080fd5b50610a6c6004803603810190610a6791906147ec565b6125e8565b005b348015610a7a57600080fd5b50610a956004803603810190610a9091906147ac565b612695565b005b348015610aa357600080fd5b50610abe6004803603810190610ab99190614524565b6127c5565b604051610acb9190615071565b60405180910390f35b348015610ae057600080fd5b50610ae961284c565b604051610af69190614d0e565b60405180910390f35b348015610b0b57600080fd5b50610b266004803603810190610b219190614718565b612872565b604051610b339190615071565b60405180910390f35b348015610b4857600080fd5b50610b636004803603810190610b5e91906144ca565b6128d5565b005b348015610b7157600080fd5b50610b8c6004803603810190610b8791906145b7565b612a97565b005b348015610b9a57600080fd5b50610ba3612b87565b604051610bb09190615071565b60405180910390f35b348015610bc557600080fd5b50610bce612b8d565b604051610bdb9190614e74565b60405180910390f35b348015610bf057600080fd5b50610bf9612bb3565b604051610c069190615071565b60405180910390f35b60245481565b60606040518060400160405280600781526020017f5869204265617200000000000000000000000000000000000000000000000000815250905090565b60276000610c5e612bb9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610ce35750610cb46122e1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1990614f91565b60405180910390fd5b8015610d4257601960009054906101000a900460ff16610d4157600080fd5b5b60005b83839050811015610eeb578115610dd857601b6000815480929190610d6990615567565b91905055507f47e78c0c4ce6dbe67ff01d67de13c04f361afa37858e7056d665001d746855ea32858584818110610da357610da261560e565b5b9050602002016020810190610db891906144ca565b436002604051610dcb9493929190614db3565b60405180910390a1610e60565b600060186000868685818110610df157610df061560e565b5b9050602002016020810190610e0691906144ca565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e5f57601b6000815480929190610e599061553d565b91905055505b5b81610e6c576000610e6e565b435b60186000868685818110610e8557610e8461560e565b5b9050602002016020810190610e9a91906144ca565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080610ee390615567565b915050610d45565b50505050565b600081600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610fd19190615071565b60405180910390a36001905092915050565b60276000610fef612bb9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061107457506110456122e1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6110b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110aa90614f91565b60405180910390fd5b602160019054906101000a900460ff16156110cd57600080fd5b6000602160006101000a81548160ff021916908315150217905550565b6000600354905090565b60006009600a6111049190615267565b60055461111191906151e3565b905090565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146112c45781600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461124391906153df565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6112cf848484612bc1565b90509392505050565b6000611305600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612136565b611330600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612136565b61133a919061518d565b60035461134791906153df565b905090565b60006009905090565b60276000611361612bb9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806113e657506113b76122e1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c90614f91565b60405180910390fd5b602160009054906101000a900460ff161580156114425750600a83105b61144b57600080fd5b826020819055506001602160006101000a81548160ff02191690831515021790555043601e819055508142611480919061518d565b601c819055506009600a6114949190615267565b8161149f9190615385565b601a81905550505050565b602760006114b6612bb9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061153b575061150c6122e1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61157a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157190614f91565b60405180910390fd5b6001601960016101000a81548160ff0219169083151502179055506000601960006101000a81548160ff021916908315150217905550565b60186020528060005260406000206000915090505481565b6115d2612bb9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461165f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165690615011565b60405180910390fd5b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e790615051565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611753612bb9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d790615011565b60405180910390fd5b6000831180156117f05750600082115b80156117fc5750600081115b801561180a57506127108111155b61181357600080fd5b80836003546118229190615385565b61182c91906151e3565b60048190555080826003546118419190615385565b61184b91906151e3565b600581905550505050565b61185e612bb9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e290615011565b60405180910390fd5b600082116118f857600080fd5b83602360006101000a81548160ff02191690831515021790555082602360016101000a81548160ff0219169083151502179055508160035461193a91906151e3565b6024819055506009600a61194e9190615267565b816119599190615385565b60258190555050505050565b60276000611971612bb9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806119f657506119c76122e1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2c90614f91565b60405180910390fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc60648584611a629190615385565b611a6c91906151e3565b9081150290604051600060405180830381858888f19350505050158015611a97573d6000803e3d6000fd5b50505050565b6000611ac9827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ef1565b9050919050565b601f5481565b60276000611ae2612bb9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611b675750611b386122e1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9d90614f91565b60405180910390fd5b6001602160016101000a81548160ff0219169083151502179055506001602160006101000a81548160ff021916908315150217905550565b611be6612bb9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6a90615011565b60405180910390fd5b80602760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60225481565b60006009600a611ce49190615267565b600654611cf191906151e3565b905090565b611cfe612bb9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8290615011565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611dee612bb9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7290615011565b60405180910390fd5b600084849050118015611e9357508383905082829050145b611e9c57600080fd5b600033905060005b8585905081101561201e5760176000878784818110611ec657611ec561560e565b5b9050602002016020810190611edb91906144ca565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611fa15750600d6000878784818110611f4257611f4161560e565b5b9050602002016020810190611f5791906144ca565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561200b5761200982878784818110611fbd57611fbc61560e565b5b9050602002016020810190611fd291906144ca565b6009600a611fe09190615267565b878786818110611ff357611ff261560e565b5b905060200201356120049190615385565b6133f5565b505b808061201690615567565b915050611ea4565b505050505050565b602360009054906101000a900460ff1681565b60096020528060005260406000206000915090505481565b612059612bb9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dd90615011565b60405180910390fd5b83600f8190555082600e819055508383612100919061518d565b6010819055508160118190555080601281905550600260125461212391906151e3565b6010541061213057600080fd5b50505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b612187612bb9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220b90615011565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006122dc6122e1565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600281526020017f5869000000000000000000000000000000000000000000000000000000000000815250905090565b601b5481565b612355612bb9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d990615011565b60405180910390fd5b81601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061249b338484612bc1565b905092915050565b6124ab612bb9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252f90615011565b60405180910390fd5b6000821180156125485750600081115b801561255657506127108111155b61255f57600080fd5b808260035461256e9190615385565b61257891906151e3565b6006819055505050565b60006009600a6125929190615267565b60045461259f91906151e3565b905090565b601e5481565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a6020528060005260406000206000915090505481565b6125f0612bb9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461267d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267490615011565b60405180910390fd5b603c81111561268b57600080fd5b8060228190555050565b602760006126a1612bb9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061272657506126f76122e1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612765576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275c90614f91565b60405180910390fd5b601960019054906101000a900460ff161561277f57600080fd5b81601960006101000a81548160ff0219169083151502179055506201518081106127a857600080fd5b80601c60008282546127ba919061518d565b925050819055505050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600043602054601e54612885919061518d565b106128a057600160125461289991906153df565b90506128d0565b81156128bd576011546010546128b6919061518d565b90506128d0565b6011546010546128cd91906153df565b90505b919050565b6128dd612bb9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461296a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296190615011565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156129da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d190614f31565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612a9f612bb9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2390615011565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60255481565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60205481565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2990614f11565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9990614f51565b60405180910390fd5b60008211612ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cdc90614eb1565b60405180910390fd5b81600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612d67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5e90614f71565b60405180910390fd5b612d6f613583565b158015612dc55750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e5f57600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4d90614fd1565b60405180910390fd5b612e5e613590565b5b602160009054906101000a900460ff16612f5457600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f145750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4a90615031565b60405180910390fd5b5b612f5f8484846135bb565b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156130075750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561306957600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613068576130678383613b78565b5b5b601960009054906101000a900460ff168015613086575042601c54115b156131fc57601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561311057508273ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b801561315b57506000601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156131fb5743601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601b60008154809291906131b790615567565b91905055507f47e78c0c4ce6dbe67ff01d67de13c04f361afa37858e7056d665001d746855ea32844360006040516131f29493929190614d29565b60405180910390a15b5b602660009054906101000a900460ff16156132235761321c8484846133f5565b90506133ee565b81600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461326e91906153df565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006132bc85613c11565b6132c657826132d1565b6132d08484613c68565b5b90506132dc84613d4b565b156132f55760008311156132f4576132f383613e75565b5b5b80600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613340919061518d565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133e09190615071565b60405180910390a360019150505b9392505050565b600081600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461344291906153df565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134d0919061518d565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135709190615071565b60405180910390a3600190509392505050565b600080601e541415905090565b43601e8190555042601f819055506001602360006101000a81548160ff021916908315150217905550565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061366f5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166136675760055461366b565b6004545b8111155b6136ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136a590614ef1565b60405180910390fd5b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613752575043602254600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461374f919061518d565b11155b613791576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378890614fb1565b60405180910390fd5b6000601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146138d2576009600a6137e69190615267565b601a546137f39190615385565b811115801561384157506000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b801561384e575042601c54115b61388d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388490614ff1565b60405180910390fd5b43600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561396d5743600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b73565b61397683613c11565b15613b7257601960009054906101000a900460ff168015613998575042601c54115b80156139e2575043600a60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b8015613a2d57506000601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b15613ab55743601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f47e78c0c4ce6dbe67ff01d67de13c04f361afa37858e7056d665001d746855ea3283436001604051613aac9493929190614d6e565b60405180910390a15b43600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614613b715743600a60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b505050565b600060065490508082600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bcb919061518d565b1115613c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c0390614ed1565b60405180910390fd5b505050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b600080601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000601254613cc883612872565b85613cd39190615385565b613cdd91906151e3565b905080600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613d2e919061518d565b925050819055508084613d4191906153df565b9250505092915050565b6000601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613db45750602660009054906101000a900460ff16155b8015613dcc5750602360009054906101000a900460ff165b8015613e215750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015613e6e5750602554600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b9050919050565b6001602660006101000a81548160ff02191690831515021790555060006024548210613ea357602454613ea5565b815b905080600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015613f3157600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b60006010546002600f5484613f469190615385565b613f5091906151e3565b613f5a91906151e3565b90508082613f6891906153df565b91506000600267ffffffffffffffff811115613f8757613f8661563d565b5b604051908082528060200260200182016040528015613fb55781602001602082028036833780820191505090505b5090503081600081518110613fcd57613fcc61560e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561406f57600080fd5b505afa158015614083573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140a791906144f7565b816001815181106140bb576140ba61560e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478560008530426040518663ffffffff1660e01b815260040161415e95949392919061508c565b600060405180830381600087803b15801561417857600080fd5b505af115801561418c573d6000803e3d6000fd5b505050506000814761419e91906153df565b905060006002600f546141b191906151e3565b6010546141be91906153df565b90506000816002600f54856141d39190615385565b6141dd91906151e3565b6141e791906151e3565b9050600081846141f791906153df565b9050600081111561426c57601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561426a573d6000803e3d6000fd5b505b600087111561435457601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71983308a600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016142fe96959493929190614df8565b6060604051808303818588803b15801561431757600080fd5b505af115801561432b573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061435091906148ec565b5050505b7fdaf6233a382145376035341e71f8a04305f7e323d0fe3e58c908cf0a26b76df9818389604051614387939291906150e6565b60405180910390a150505050505050506000602660006101000a81548160ff02191690831515021790555050565b6000813590506143c481615979565b92915050565b6000815190506143d981615979565b92915050565b60008083601f8401126143f5576143f4615671565b5b8235905067ffffffffffffffff8111156144125761441161566c565b5b60208301915083602082028301111561442e5761442d615676565b5b9250929050565b60008083601f84011261444b5761444a615671565b5b8235905067ffffffffffffffff8111156144685761446761566c565b5b60208301915083602082028301111561448457614483615676565b5b9250929050565b60008135905061449a81615990565b92915050565b6000813590506144af816159a7565b92915050565b6000815190506144c4816159a7565b92915050565b6000602082840312156144e0576144df615680565b5b60006144ee848285016143b5565b91505092915050565b60006020828403121561450d5761450c615680565b5b600061451b848285016143ca565b91505092915050565b6000806040838503121561453b5761453a615680565b5b6000614549858286016143b5565b925050602061455a858286016143b5565b9150509250929050565b60008060006060848603121561457d5761457c615680565b5b600061458b868287016143b5565b935050602061459c868287016143b5565b92505060406145ad868287016144a0565b9150509250925092565b600080604083850312156145ce576145cd615680565b5b60006145dc858286016143b5565b92505060206145ed8582860161448b565b9150509250929050565b6000806040838503121561460e5761460d615680565b5b600061461c858286016143b5565b925050602061462d858286016144a0565b9150509250929050565b6000806000806040858703121561465157614650615680565b5b600085013567ffffffffffffffff81111561466f5761466e61567b565b5b61467b878288016143df565b9450945050602085013567ffffffffffffffff81111561469e5761469d61567b565b5b6146aa87828801614435565b925092505092959194509250565b6000806000604084860312156146d1576146d0615680565b5b600084013567ffffffffffffffff8111156146ef576146ee61567b565b5b6146fb868287016143df565b9350935050602061470e8682870161448b565b9150509250925092565b60006020828403121561472e5761472d615680565b5b600061473c8482850161448b565b91505092915050565b6000806000806080858703121561475f5761475e615680565b5b600061476d8782880161448b565b945050602061477e8782880161448b565b935050604061478f878288016144a0565b92505060606147a0878288016144a0565b91505092959194509250565b600080604083850312156147c3576147c2615680565b5b60006147d18582860161448b565b92505060206147e2858286016144a0565b9150509250929050565b60006020828403121561480257614801615680565b5b6000614810848285016144a0565b91505092915050565b600080604083850312156148305761482f615680565b5b600061483e858286016144a0565b925050602061484f858286016143b5565b9150509250929050565b600080604083850312156148705761486f615680565b5b600061487e858286016144a0565b925050602061488f858286016144a0565b9150509250929050565b6000806000606084860312156148b2576148b1615680565b5b60006148c0868287016144a0565b93505060206148d1868287016144a0565b92505060406148e2868287016144a0565b9150509250925092565b60008060006060848603121561490557614904615680565b5b6000614913868287016144b5565b9350506020614924868287016144b5565b9250506040614935868287016144b5565b9150509250925092565b6000806000806080858703121561495957614958615680565b5b6000614967878288016144a0565b9450506020614978878288016144a0565b9350506040614989878288016144a0565b925050606061499a878288016144a0565b91505092959194509250565b60006149b283836149dc565b60208301905092915050565b6149c78161547a565b82525050565b6149d681615425565b82525050565b6149e581615413565b82525050565b6149f481615413565b82525050565b6000614a0582615148565b614a0f818561516b565b9350614a1a83615138565b8060005b83811015614a4b578151614a3288826149a6565b9750614a3d8361515e565b925050600181019050614a1e565b5085935050505092915050565b614a6181615437565b82525050565b614a708161548c565b82525050565b614a7f8161549e565b82525050565b614a8e816154b0565b82525050565b614a9d816154c2565b82525050565b614aac816154d4565b82525050565b6000614abd82615153565b614ac7818561517c565b9350614ad781856020860161550a565b614ae081615685565b840191505092915050565b6000614af860158361517c565b9150614b03826156a3565b602082019050919050565b6000614b1b60258361517c565b9150614b26826156cc565b604082019050919050565b6000614b3e60118361517c565b9150614b498261571b565b602082019050919050565b6000614b6160188361517c565b9150614b6c82615744565b602082019050919050565b6000614b8460268361517c565b9150614b8f8261576d565b604082019050919050565b6000614ba760168361517c565b9150614bb2826157bc565b602082019050919050565b6000614bca60148361517c565b9150614bd5826157e5565b602082019050919050565b6000614bed601b8361517c565b9150614bf88261580e565b602082019050919050565b6000614c10601d8361517c565b9150614c1b82615837565b602082019050919050565b6000614c3360188361517c565b9150614c3e82615860565b602082019050919050565b6000614c5660298361517c565b9150614c6182615889565b604082019050919050565b6000614c7960208361517c565b9150614c84826158d8565b602082019050919050565b6000614c9c60158361517c565b9150614ca782615901565b602082019050919050565b6000614cbf60228361517c565b9150614cca8261592a565b604082019050919050565b614cde81615463565b82525050565b614ced8161546d565b82525050565b6000602082019050614d0860008301846149eb565b92915050565b6000602082019050614d2360008301846149cd565b92915050565b6000608082019050614d3e60008301876149eb565b614d4b60208301866149eb565b614d586040830185614cd5565b614d656060830184614a85565b95945050505050565b6000608082019050614d8360008301876149eb565b614d9060208301866149eb565b614d9d6040830185614cd5565b614daa6060830184614a94565b95945050505050565b6000608082019050614dc860008301876149eb565b614dd560208301866149eb565b614de26040830185614cd5565b614def6060830184614aa3565b95945050505050565b600060c082019050614e0d60008301896149eb565b614e1a6020830188614cd5565b614e276040830187614a76565b614e346060830186614a76565b614e4160808301856149be565b614e4e60a0830184614cd5565b979650505050505050565b6000602082019050614e6e6000830184614a58565b92915050565b6000602082019050614e896000830184614a67565b92915050565b60006020820190508181036000830152614ea98184614ab2565b905092915050565b60006020820190508181036000830152614eca81614aeb565b9050919050565b60006020820190508181036000830152614eea81614b0e565b9050919050565b60006020820190508181036000830152614f0a81614b31565b9050919050565b60006020820190508181036000830152614f2a81614b54565b9050919050565b60006020820190508181036000830152614f4a81614b77565b9050919050565b60006020820190508181036000830152614f6a81614b9a565b9050919050565b60006020820190508181036000830152614f8a81614bbd565b9050919050565b60006020820190508181036000830152614faa81614be0565b9050919050565b60006020820190508181036000830152614fca81614c03565b9050919050565b60006020820190508181036000830152614fea81614c26565b9050919050565b6000602082019050818103600083015261500a81614c49565b9050919050565b6000602082019050818103600083015261502a81614c6c565b9050919050565b6000602082019050818103600083015261504a81614c8f565b9050919050565b6000602082019050818103600083015261506a81614cb2565b9050919050565b60006020820190506150866000830184614cd5565b92915050565b600060a0820190506150a16000830188614cd5565b6150ae6020830187614a76565b81810360408301526150c081866149fa565b90506150cf60608301856149eb565b6150dc6080830184614cd5565b9695505050505050565b60006060820190506150fb6000830186614cd5565b6151086020830185614cd5565b6151156040830184614cd5565b949350505050565b60006020820190506151326000830184614ce4565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061519882615463565b91506151a383615463565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156151d8576151d76155b0565b5b828201905092915050565b60006151ee82615463565b91506151f983615463565b925082615209576152086155df565b5b828204905092915050565b6000808291508390505b600185111561525e5780860481111561523a576152396155b0565b5b60018516156152495780820291505b808102905061525785615696565b945061521e565b94509492505050565b600061527282615463565b915061527d8361546d565b92506152aa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846152b2565b905092915050565b6000826152c2576001905061537e565b816152d0576000905061537e565b81600181146152e657600281146152f05761531f565b600191505061537e565b60ff841115615302576153016155b0565b5b8360020a915084821115615319576153186155b0565b5b5061537e565b5060208310610133831016604e8410600b84101617156153545782820a90508381111561534f5761534e6155b0565b5b61537e565b6153618484846001615214565b92509050818404811115615378576153776155b0565b5b81810290505b9392505050565b600061539082615463565b915061539b83615463565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153d4576153d36155b0565b5b828202905092915050565b60006153ea82615463565b91506153f583615463565b925082821015615408576154076155b0565b5b828203905092915050565b600061541e82615443565b9050919050565b600061543082615443565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000615485826154e6565b9050919050565b6000615497826154e6565b9050919050565b60006154a982615463565b9050919050565b60006154bb8261546d565b9050919050565b60006154cd8261546d565b9050919050565b60006154df8261546d565b9050919050565b60006154f1826154f8565b9050919050565b600061550382615443565b9050919050565b60005b8381101561552857808201518184015260208101905061550d565b83811115615537576000848401525b50505050565b600061554882615463565b9150600082141561555c5761555b6155b0565b5b600182039050919050565b600061557282615463565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156155a5576155a46155b0565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f416d6f756e74206d757374206265203e207a65726f0000000000000000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206261672060008201527f73697a652e000000000000000000000000000000000000000000000000000000602082015250565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b7f42455032303a207472616e736665722066726f6d203078300000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f42455032303a207472616e7366657220746f2030783000000000000000000000600082015250565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b7f43616c6c6572206973206e6f742061207465616d206d656d6265720000000000600082015250565b7f5472616e736665722072617465206c696d69742065786365656465642e000000600082015250565b7f4c6971756964697479206e6f74206164646564207965742e0000000000000000600082015250565b7f57616c6c65742070726f7465637465642c20706c6561736520636f6e7461637460008201527f20737570706f72742e0000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54726164696e67206e6f74206f70656e207965742e0000000000000000000000600082015250565b7f43616e277420616c7465722063757272656e74206c697175696469747920706160008201527f6972000000000000000000000000000000000000000000000000000000000000602082015250565b61598281615413565b811461598d57600080fd5b50565b61599981615437565b81146159a457600080fd5b50565b6159b081615463565b81146159bb57600080fd5b5056fea264697066735822122097f3143c0d1b6c8c1e57c19e2e2a11eda49eb97de142f94f265bbe38efbaf11964736f6c63430008070033

Deployed Bytecode Sourcemap

9021:16287:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11010:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12474:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15430:617;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13215:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14794:115;;;;;;;;;;;;;:::i;:::-;;12222:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12739:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16219:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25061:138;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12316:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14410:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15291:127;;;;;;;;;;;;;:::i;:::-;;10486:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22881:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23209:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24693:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14184:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13439:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10771:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14921:111;;;;;;;;;;;;;:::i;:::-;;13573:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10902:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12852:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23787:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13704:468;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10939:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9694:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24049:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12963:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8616:148;;;;;;;;;;;;;:::i;:::-;;12551:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8406:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12393:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10642:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24443:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10711:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16055:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23560:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12628:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10739:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10125:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9745:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23073:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15044:235;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13074:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10229:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20466:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8770:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23914:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11067:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10335:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10805:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11010:50;;;;:::o;12474:71::-;12513:13;12537:5;;;;;;;;;;;;;;;;;12530:12;;12474:71;:::o;15430:617::-;11298:10;:24;11309:12;:10;:12::i;:::-;11298:24;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;11340:7;:5;:7::i;:::-;11326:21;;:10;:21;;;11298:49;11290:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;15530:8:::1;15526:67;;;15563:17;;;;;;;;;;;15555:26;;;::::0;::::1;;15526:67;15618:6;15613:427;15634:8;;:15;;15630:1;:19;15613:427;;;15689:8;15685:277;;;15718:15;;:17;;;;;;;;;:::i;:::-;;;;;;15759:56;15775:9;15786:8;;15795:1;15786:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;15799:12;15813:1;15759:56;;;;;;;;;:::i;:::-;;;;;;;;15685:277;;;15899:1;15873:9;:22;15883:8;;15892:1;15883:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;15873:22;;;;;;;;;;;;;;;;:27;15869:71;;15923:15;;:17;;;;;;;;;:::i;:::-;;;;;;15869:71;15685:277;16001:8;:27;;16027:1;16001:27;;;16012:12;16001:27;15976:9;:22;15986:8;;15995:1;15986:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;15976:22;;;;;;;;;;;;;;;:52;;;;15651:3;;;;;:::i;:::-;;;;15613:427;;;;15430:617:::0;;;:::o;13215:216::-;13290:4;13342:6;13307:11;:23;13319:10;13307:23;;;;;;;;;;;;;;;:32;13331:7;13307:32;;;;;;;;;;;;;;;:41;;;;13385:7;13364:37;;13373:10;13364:37;;;13394:6;13364:37;;;;;;:::i;:::-;;;;;;;;13419:4;13412:11;;13215:216;;;;:::o;14794:115::-;11298:10;:24;11309:12;:10;:12::i;:::-;11298:24;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;11340:7;:5;:7::i;:::-;11326:21;;:10;:21;;;11298:49;11290:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;14856:13:::1;;;;;;;;;;;14855:14;14847:23;;;::::0;::::1;;14896:5;14881:12;;:20;;;;;;;;;;;;;;;;;;14794:115::o:0;12222:88::-;12277:7;12295:12;;12288:19;;12222:88;:::o;12739:107::-;12789:7;9335:1;12827:2;:15;;;;:::i;:::-;12807:16;;:36;;;;:::i;:::-;12800:43;;12739:107;:::o;16219:341::-;16319:4;16374:17;16339:11;:19;16351:6;16339:19;;;;;;;;;;;;;;;:31;16359:10;16339:31;;;;;;;;;;;;;;;;:52;16336:157;;16475:6;16441:11;:19;16453:6;16441:19;;;;;;;;;;;;;;;:31;16461:10;16441:31;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;16407:11;:19;16419:6;16407:19;;;;;;;;;;;;;;;:31;16427:10;16407:31;;;;;;;;;;;;;;;:74;;;;16336:157;16512:40;16526:6;16534:9;16545:6;16512:13;:40::i;:::-;16505:47;;16219:341;;;;;:::o;25061:138::-;25114:7;25175:15;25185:4;;;;;;;;;;;25175:9;:15::i;:::-;25157;25167:4;;;;;;;;;;;25157:9;:15::i;:::-;:33;;;;:::i;:::-;25141:12;;:50;;;;:::i;:::-;25134:57;;25061:138;:::o;12316:71::-;12359:5;9335:1;12368:16;;12316:71;:::o;14410:372::-;11298:10;:24;11309:12;:10;:12::i;:::-;11298:24;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;11340:7;:5;:7::i;:::-;11326:21;;:10;:21;;;11298:49;11290:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;14527:12:::1;;;;;;;;;;;14526:13;:33;;;;;14557:2;14543:11;:16;14526:33;14518:42;;;::::0;::::1;;14584:11;14571:10;:24;;;;14621:4;14606:12;;:19;;;;;;;;;;;;;;;;;;14649:12;14636:10;:25;;;;14708:11;14690:15;:29;;;;:::i;:::-;14672:15;:47;;;;9335:1;14758:2;:15;;;;:::i;:::-;14748:6;:26;;;;:::i;:::-;14730:15;:44;;;;14410:372:::0;;;:::o;15291:127::-;11298:10;:24;11309:12;:10;:12::i;:::-;11298:24;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;11340:7;:5;:7::i;:::-;11326:21;;:10;:21;;;11298:49;11290:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;15370:4:::1;15349:18;;:25;;;;;;;;;;;;;;;;;;15405:5;15385:17;;:25;;;;;;;;;;;;;;;;;;15291:127::o:0;10486:45::-;;;;;;;;;;;;;;;;;:::o;22881:184::-;8541:12;:10;:12::i;:::-;8531:22;;:6;;;;;;;;;;:22;;;8523:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22976:4:::1;;;;;;;;;;;22970:10;;:2;:10;;;;22962:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23051:6;23030:14;:18;23045:2;23030:18;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;22881:184:::0;;:::o;23209:339::-;8541:12;:10;:12::i;:::-;8531:22;;:6;;;;;;;;;;:22;;;8523:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23344:1:::1;23329:12;:16;:37;;;;;23365:1;23349:13;:17;23329:37;:52;;;;;23380:1;23370:7;:11;23329:52;:72;;;;;23396:5;23385:7;:16;;23329:72;23321:81;;;::::0;::::1;;23463:7;23447:12;23432;;:27;;;;:::i;:::-;23431:39;;;;:::i;:::-;23413:15;:57;;;;23533:7;23516:13;23501:12;;:28;;;;:::i;:::-;23500:40;;;;:::i;:::-;23481:16;:59;;;;23209:339:::0;;;:::o;24693:360::-;8541:12;:10;:12::i;:::-;8531:22;;:6;;;;;;;;;;:22;;;8523:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24856:1:::1;24841:12;:16;24833:25;;;::::0;::::1;;24883:8;24869:11;;:22;;;;;;;;;;;;;;;;;;24919:15;24902:14;;:32;;;;;;;;;;;;;;;;;;24976:12;24961;;:27;;;;:::i;:::-;24945:13;:43;;;;9335:1;25029:2;:15;;;;:::i;:::-;25013:12;:32;;;;:::i;:::-;24999:11;:46;;;;24693:360:::0;;;;:::o;14184:214::-;11298:10;:24;11309:12;:10;:12::i;:::-;11298:24;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;11340:7;:5;:7::i;:::-;11326:21;;:10;:21;;;11298:49;11290:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;14279:17:::1;14299:21;14279:41;;14339:3;14331:21;;:59;14386:3;14366:16;14354:9;:28;;;;:::i;:::-;14353:36;;;;:::i;:::-;14331:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;14268:130;14184:214:::0;;:::o;13439:122::-;13494:4;13518:35;13526:7;13535:17;13518:7;:35::i;:::-;13511:42;;13439:122;;;:::o;10771:27::-;;;;:::o;14921:111::-;11298:10;:24;11309:12;:10;:12::i;:::-;11298:24;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;11340:7;:5;:7::i;:::-;11326:21;;:10;:21;;;11298:49;11290:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;14990:4:::1;14974:13;;:20;;;;;;;;;;;;;;;;;;15020:4;15005:12;;:19;;;;;;;;;;;;;;;;;;14921:111::o:0;13573:119::-;8541:12;:10;:12::i;:::-;8531:22;;:6;;;;;;;;;;:22;;;8523:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13676:8:::1;13656:10;:17;13667:5;13656:17;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;13573:119:::0;;:::o;10902:28::-;;;;:::o;12852:105::-;12902:7;9335:1;12938:2;:15;;;;:::i;:::-;12920:14;;:34;;;;:::i;:::-;12913:41;;12852:105;:::o;23787:119::-;8541:12;:10;:12::i;:::-;8531:22;;:6;;;;;;;;;;:22;;;8523:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23892:6:::1;23870:11;:19;23882:6;23870:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;23787:119:::0;;:::o;13704:468::-;8541:12;:10;:12::i;:::-;8531:22;;:6;;;;;;;;;;:22;;;8523:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13836:1:::1;13817:9;;:16;;:20;:58;;;;;13859:9;;:16;;13841:7;;:14;;:34;13817:58;13809:67;;;::::0;::::1;;13887:12;13902:10;13887:25;;13930:6;13925:240;13946:9;;:16;;13942:1;:20;13925:240;;;13988:14;:28;14003:9;;14013:1;14003:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;13988:28;;;;;;;;;;;;;;;;;;;;;;;;;13987:29;:64;;;;;14021:16;:30;14038:9;;14048:1;14038:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;14021:30;;;;;;;;;;;;;;;;;;;;;;;;;14020:31;13987:64;13984:170;;;14072:66;14087:4;14093:9;;14103:1;14093:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;9335:1;14121:2;:15;;;;:::i;:::-;14107:7;;14115:1;14107:10;;;;;;;:::i;:::-;;;;;;;;:30;;;;:::i;:::-;14072:14;:66::i;:::-;;13984:170;13964:3;;;;;:::i;:::-;;;;13925:240;;;;13798:374;13704:468:::0;;;;:::o;10939:31::-;;;;;;;;;;;;;:::o;9694:44::-;;;;;;;;;;;;;;;;;:::o;24049:386::-;8541:12;:10;:12::i;:::-;8531:22;;:6;;;;;;;;;;:22;;;8523:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24201:13:::1;24186:12;:28;;;;24240:13;24225:12;:28;;;;24291:13;24275;:29;;;;:::i;:::-;24264:8;:40;;;;24326:9;24315:8;:20;;;;24363:15;24346:14;:32;;;;24425:1;24408:14;;:18;;;;:::i;:::-;24397:8;;:29;24389:38;;;::::0;::::1;;24049:386:::0;;;;:::o;12963:105::-;13029:7;13047:9;:18;13057:7;13047:18;;;;;;;;;;;;;;;;13040:25;;12963:105;;;:::o;8616:148::-;8541:12;:10;:12::i;:::-;8531:22;;:6;;;;;;;;;;:22;;;8523:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8723:1:::1;8686:40;;8707:6;::::0;::::1;;;;;;;;8686:40;;;;;;;;;;;;8754:1;8737:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;8616:148::o:0;12551:71::-;12594:7;12612;:5;:7::i;:::-;12605:14;;12551:71;:::o;8406:79::-;8444:7;8471:6;;;;;;;;;;;8464:13;;8406:79;:::o;12393:75::-;12434:13;12458:7;;;;;;;;;;;;;;;;;12451:14;;12393:75;:::o;10642:30::-;;;;:::o;24443:242::-;8541:12;:10;:12::i;:::-;8531:22;;:6;;;;;;;;;;:22;;;8523:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24591:21:::1;24560:20;;:53;;;;;;;;;;;;;;;;;;24655:21;24624:20;;:53;;;;;;;;;;;;;;;;;;24443:242:::0;;:::o;10711:19::-;;;;;;;;;;;;;:::o;16055:156::-;16135:4;16159:44;16173:10;16185:9;16196:6;16159:13;:44::i;:::-;16152:51;;16055:156;;;;:::o;23560:219::-;8541:12;:10;:12::i;:::-;8531:22;;:6;;;;;;;;;;:22;;;8523:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23670:1:::1;23658:9;:13;:28;;;;;23685:1;23675:7;:11;23658:28;:48;;;;;23701:5;23690:7;:16;;23658:48;23650:57;;;::::0;::::1;;23764:7;23751:9;23736:12;;:24;;;;:::i;:::-;23735:36;;;;:::i;:::-;23718:14;:53;;;;23560:219:::0;;:::o;12628:105::-;12677:7;9335:1;12714:2;:15;;;;:::i;:::-;12695;;:35;;;;:::i;:::-;12688:42;;12628:105;:::o;10739:25::-;;;;:::o;10125:97::-;;;;;;;;;;;;;:::o;9745:43::-;;;;;;;;;;;;;;;;;:::o;23073:128::-;8541:12;:10;:12::i;:::-;8531:22;;:6;;;;;;;;;;:22;;;8523:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23155:10:::1;23147:4;:18;;23139:27;;;::::0;::::1;;23189:4;23177:9;:16;;;;23073:128:::0;:::o;15044:235::-;11298:10;:24;11309:12;:10;:12::i;:::-;11298:24;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;11340:7;:5;:7::i;:::-;11326:21;;:10;:21;;;11298:49;11290:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;15138:18:::1;;;;;;;;;;;15137:19;15129:28;;;::::0;::::1;;15188:8;15168:17;;:28;;;;;;;;;;;;;;;;;;15226:6;15215:8;:17;15207:26;;;::::0;::::1;;15263:8;15244:15;;:27;;;;;;;:::i;:::-;;;;;;;;15044:235:::0;;:::o;13074:133::-;13158:7;13176:11;:19;13188:6;13176:19;;;;;;;;;;;;;;;:28;13196:7;13176:28;;;;;;;;;;;;;;;;13169:35;;13074:133;;;;:::o;10229:97::-;;;;;;;;;;;;;:::o;20466:243::-;20522:7;20572:12;20558:10;;20545;;:23;;;;:::i;:::-;:39;20542:73;;20611:1;20594:14;;:18;;;;:::i;:::-;20587:25;;;;20542:73;20629:7;20625:39;;;20656:8;;20645;;:19;;;;:::i;:::-;20638:26;;;;20625:39;20693:8;;20682;;:19;;;;:::i;:::-;20675:26;;20466:243;;;;:::o;8770:244::-;8541:12;:10;:12::i;:::-;8531:22;;:6;;;;;;;;;;:22;;;8523:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8879:1:::1;8859:22;;:8;:22;;;;8851:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8969:8;8940:38;;8961:6;::::0;::::1;;;;;;;;8940:38;;;;;;;;;;;;8998:8;8989:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;8770:244:::0;:::o;23914:127::-;8541:12;:10;:12::i;:::-;8531:22;;:6;;;;;;;;;;:22;;;8523:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24027:6:::1;24001:15;:23;24017:6;24001:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;23914:127:::0;;:::o;11067:49::-;;;;:::o;10335:24::-;;;;;;;;;;;;;:::o;10805:25::-;;;;:::o;6433:107::-;6478:15;6521:10;6506:26;;6433:107;:::o;16568:1734::-;16660:4;16703:1;16685:20;;:6;:20;;;;16677:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;16774:1;16753:23;;:9;:23;;;;16745:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;16831:1;16822:6;:10;16814:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;16898:6;16877:9;:17;16887:6;16877:17;;;;;;;;;;;;;;;;:27;;16869:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;16944:10;:8;:10::i;:::-;16943:11;:40;;;;;16958:14;:25;16973:9;16958:25;;;;;;;;;;;;;;;;;;;;;;;;;16943:40;16940:120;;;16994:16;:24;17011:6;16994:24;;;;;;;;;;;;;;;;;;;;;;;;;16986:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;17049:8;:6;:8::i;:::-;16940:120;17074:12;;;;;;;;;;;17070:111;;17097:16;:24;17114:6;17097:24;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;17125:16;:27;17142:9;17125:27;;;;;;;;;;;;;;;;;;;;;;;;;17097:55;17089:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;17070:111;17193:39;17206:6;17214:9;17225:6;17193:12;:39::i;:::-;17258:14;:25;17273:9;17258:25;;;;;;;;;;;;;;;;;;;;;;;;;17257:26;:47;;;;;17300:4;;;;;;;;;;;17287:17;;:9;:17;;;;17257:47;17253:182;;;17326:15;:26;17342:9;17326:26;;;;;;;;;;;;;;;;;;;;;;;;;17321:103;;17373:35;17390:9;17401:6;17373:16;:35::i;:::-;17321:103;17253:182;17458:17;;;;;;;;;;;:54;;;;;17497:15;17479;;:33;17458:54;17455:351;;;17532:14;:22;17547:6;17532:22;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;;17571:9;17558:22;;:9;:22;;;;17532:48;:77;;;;;17608:1;17584:9;:20;17594:9;17584:20;;;;;;;;;;;;;;;;:25;17532:77;17529:266;;;17653:12;17630:9;:20;17640:9;17630:20;;;;;;;;;;;;;;;:35;;;;17684:15;;:17;;;;;;;;;:::i;:::-;;;;;;17725:54;17741:9;17752;17763:12;17777:1;17725:54;;;;;;;;;:::i;:::-;;;;;;;;17529:266;17455:351;17829:6;;;;;;;;;;;17826:63;;;17845:41;17860:6;17868:9;17879:6;17845:14;:41::i;:::-;17838:48;;;;17826:63;17941:6;17921:9;:17;17931:6;17921:17;;;;;;;;;;;;;;;;:26;;;;:::i;:::-;17901:9;:17;17911:6;17901:17;;;;;;;;;;;;;;;:46;;;;17960:22;17985:21;17999:6;17985:13;:21::i;:::-;:59;;18038:6;17985:59;;;18009:26;18017:9;18028:6;18009:7;:26::i;:::-;17985:59;17960:84;;18068:25;18083:9;18068:14;:25::i;:::-;18065:66;;;18109:1;18100:6;:10;18096:32;;;18112:16;18121:6;18112:8;:16::i;:::-;18096:32;18065:66;18197:14;18174:9;:20;18184:9;18174:20;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;18151:9;:20;18161:9;18151:20;;;;;;;;;;;;;;;:60;;;;18246:9;18229:43;;18238:6;18229:43;;;18257:14;18229:43;;;;;;:::i;:::-;;;;;;;;18290:4;18283:11;;;16568:1734;;;;;;:::o;18561:300::-;18654:4;18711:6;18691:9;:17;18701:6;18691:17;;;;;;;;;;;;;;;;:26;;;;:::i;:::-;18671:9;:17;18681:6;18671:17;;;;;;;;;;;;;;;:46;;;;18774:6;18751:9;:20;18761:9;18751:20;;;;;;;;;;;;;;;;:29;;;;:::i;:::-;18728:9;:20;18738:9;18728:20;;;;;;;;;;;;;;;:52;;;;18813:9;18796:35;;18805:6;18796:35;;;18824:6;18796:35;;;;;;:::i;:::-;;;;;;;;18849:4;18842:11;;18561:300;;;;;:::o;18314:90::-;18357:4;18395:1;18381:10;;:15;;18374:22;;18314:90;:::o;18412:141::-;18463:12;18450:10;:25;;;;18501:15;18486:12;:30;;;;18541:4;18527:11;;:18;;;;;;;;;;;;;;;;;;18412:141::o;19116:1220::-;19217:15;:23;19233:6;19217:23;;;;;;;;;;;;;;;;;;;;;;;;;:98;;;;19255:14;:22;19270:6;19255:22;;;;;;;;;;;;;;;;;;;;;;;;;:59;;19298:16;;19255:59;;;19280:15;;19255:59;19244:6;:71;;19217:98;19209:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;19356:15;:23;19372:6;19356:23;;;;;;;;;;;;;;;;;;;;;;;;;:73;;;;19417:12;19404:9;;19383:7;:18;19391:9;19383:18;;;;;;;;;;;;;;;;:30;;;;:::i;:::-;:46;;19356:73;19348:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;19509:1;19488:9;:17;19498:6;19488:17;;;;;;;;;;;;;;;;:22;19484:261;;9335:1;19563:2;:15;;;;:::i;:::-;19544;;:35;;;;:::i;:::-;19534:6;:45;;:70;;;;;19603:1;19583:8;:16;19592:6;19583:16;;;;;;;;;;;;;;;;:21;19534:70;:107;;;;;19626:15;19608;;:33;19534:107;19526:161;;;;;;;;;;;;:::i;:::-;;;;;;;;;19721:12;19702:8;:16;19711:6;19702:16;;;;;;;;;;;;;;;:31;;;;19484:261;19769:14;:25;19784:9;19769:25;;;;;;;;;;;;;;;;;;;;;;;;;19765:564;;;19830:12;19811:8;:16;19820:6;19811:16;;;;;;;;;;;;;;;:31;;;;19765:564;;;19864:21;19878:6;19864:13;:21::i;:::-;19860:469;;;19906:17;;;;;;;;;;;:54;;;;;19945:15;19927;;:33;19906:54;:92;;;;;19986:12;19964:7;:18;19972:9;19964:18;;;;;;;;;;;;;;;;:34;19906:92;:121;;;;;20026:1;20002:9;:20;20012:9;20002:20;;;;;;;;;;;;;;;;:25;19906:121;19902:275;;;20071:12;20048:9;:20;20058:9;20048:20;;;;;;;;;;;;;;;:35;;;;20107:54;20123:9;20134;20145:12;20159:1;20107:54;;;;;;;;;:::i;:::-;;;;;;;;19902:275;20212:12;20191:7;:18;20199:9;20191:18;;;;;;;;;;;;;;;:33;;;;20256:9;20243:22;;:9;:22;;;20239:78;;20305:12;20284:7;:18;20292:9;20284:18;;;;;;;;;;;;;;;:33;;;;20239:78;19860:469;19765:564;19116:1220;;;:::o;18873:235::-;18959:19;18981:14;;18959:36;;19047:11;19037:6;19014:9;:20;19024:9;19014:20;;;;;;;;;;;;;;;;:29;;;;:::i;:::-;:44;;19006:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;18948:160;18873:235;;:::o;20344:114::-;20406:4;20431:11;:19;20443:6;20431:19;;;;;;;;;;;;;;;;;;;;;;;;;20430:20;20423:27;;20344:114;;;:::o;20717:317::-;20787:7;20807:12;20822:14;:25;20837:9;20822:25;;;;;;;;;;;;;;;;;;;;;;;;;20807:40;;20858:17;20912:14;;20888:20;20900:7;20888:11;:20::i;:::-;20879:6;:29;;;;:::i;:::-;20878:48;;;;:::i;:::-;20858:68;;20975:9;20947;:24;20965:4;20947:24;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;21017:9;21008:6;:18;;;;:::i;:::-;21001:25;;;;20717:317;;;;:::o;21042:259::-;21108:4;21133:14;:26;21148:10;21133:26;;;;;;;;;;;;;;;;;;;;;;;;;21132:27;:47;;;;;21173:6;;;;;;;;;;;21172:7;21132:47;:71;;;;;21192:11;;;;;;;;;;;21132:71;:109;;;;;21216:14;:25;21231:9;21216:25;;;;;;;;;;;;;;;;;;;;;;;;;21132:109;:161;;;;;21282:11;;21254:9;:24;21272:4;21254:24;;;;;;;;;;;;;;;;:39;;21132:161;21125:168;;21042:259;;;:::o;21309:1560::-;11172:4;11163:6;;:13;;;;;;;;;;;;;;;;;;21372:20:::1;21404:13;;21395:6;:22;:47;;21429:13;;21395:47;;;21420:6;21395:47;21372:70;;21484:12;21457:9;:24;21475:4;21457:24;;;;;;;;;;;;;;;;:39;21453:84;;;21513:9;:24;21531:4;21513:24;;;;;;;;;;;;;;;;21498:39;;21453:84;21558:23;21620:8;;21615:1;21600:12;;21585;:27;;;;:::i;:::-;:31;;;;:::i;:::-;21584:44;;;;:::i;:::-;21558:70;;21655:15;21639:31;;;;;:::i;:::-;;;21683:21;21721:1;21707:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21683:40;;21752:4;21734;21739:1;21734:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;21778:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21768:4;21773:1;21768:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;21812:21;21836;21812:45;;21870:6;;;;;;;;;;;:57;;;21942:12;21969:1;21985:4;22012;22032:15;21870:188;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22071:17;22115:13;22091:21;:37;;;;:::i;:::-;22071:57;;22139:19;22188:1;22173:12;;:16;;;;:::i;:::-;22161:8;;:29;;;;:::i;:::-;22139:51;;22203:26;22265:11;22260:1;22245:12;;22233:9;:24;;;;:::i;:::-;:28;;;;:::i;:::-;22232:44;;;;:::i;:::-;22203:73;;22287:26;22328:18;22316:9;:30;;;;:::i;:::-;22287:59;;22392:1;22371:18;:22;22367:90;;;22408:20;;;;;;;;;;;:29;;:49;22438:18;22408:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;22367:90;22499:1;22481:15;:19;22478:293;;;22516:6;;;;;;;;;;;:22;;;22546:18;22592:4;22616:15;22650:1;22670::::0;22690:20:::1;;;;;;;;;;;22729:15;22516:243;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;22478:293;22788:73;22805:18;22825;22845:15;22788:73;;;;;;;;:::i;:::-;;;;;;;;21361:1508;;;;;;;;11190:5:::0;11181:6;;:14;;;;;;;;;;;;;;;;;;21309:1560;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;318:568::-;391:8;401:6;451:3;444:4;436:6;432:17;428:27;418:122;;459:79;;:::i;:::-;418:122;572:6;559:20;549:30;;602:18;594:6;591:30;588:117;;;624:79;;:::i;:::-;588:117;738:4;730:6;726:17;714:29;;792:3;784:4;776:6;772:17;762:8;758:32;755:41;752:128;;;799:79;;:::i;:::-;752:128;318:568;;;;;:::o;909:::-;982:8;992:6;1042:3;1035:4;1027:6;1023:17;1019:27;1009:122;;1050:79;;:::i;:::-;1009:122;1163:6;1150:20;1140:30;;1193:18;1185:6;1182:30;1179:117;;;1215:79;;:::i;:::-;1179:117;1329:4;1321:6;1317:17;1305:29;;1383:3;1375:4;1367:6;1363:17;1353:8;1349:32;1346:41;1343:128;;;1390:79;;:::i;:::-;1343:128;909:568;;;;;:::o;1483:133::-;1526:5;1564:6;1551:20;1542:29;;1580:30;1604:5;1580:30;:::i;:::-;1483:133;;;;:::o;1622:139::-;1668:5;1706:6;1693:20;1684:29;;1722:33;1749:5;1722:33;:::i;:::-;1622:139;;;;:::o;1767:143::-;1824:5;1855:6;1849:13;1840:22;;1871:33;1898:5;1871:33;:::i;:::-;1767:143;;;;:::o;1916:329::-;1975:6;2024:2;2012:9;2003:7;1999:23;1995:32;1992:119;;;2030:79;;:::i;:::-;1992:119;2150:1;2175:53;2220:7;2211:6;2200:9;2196:22;2175:53;:::i;:::-;2165:63;;2121:117;1916:329;;;;:::o;2251:351::-;2321:6;2370:2;2358:9;2349:7;2345:23;2341:32;2338:119;;;2376:79;;:::i;:::-;2338:119;2496:1;2521:64;2577:7;2568:6;2557:9;2553:22;2521:64;:::i;:::-;2511:74;;2467:128;2251:351;;;;:::o;2608:474::-;2676:6;2684;2733:2;2721:9;2712:7;2708:23;2704:32;2701:119;;;2739:79;;:::i;:::-;2701:119;2859:1;2884:53;2929:7;2920:6;2909:9;2905:22;2884:53;:::i;:::-;2874:63;;2830:117;2986:2;3012:53;3057:7;3048:6;3037:9;3033:22;3012:53;:::i;:::-;3002:63;;2957:118;2608:474;;;;;:::o;3088:619::-;3165:6;3173;3181;3230:2;3218:9;3209:7;3205:23;3201:32;3198:119;;;3236:79;;:::i;:::-;3198:119;3356:1;3381:53;3426:7;3417:6;3406:9;3402:22;3381:53;:::i;:::-;3371:63;;3327:117;3483:2;3509:53;3554:7;3545:6;3534:9;3530:22;3509:53;:::i;:::-;3499:63;;3454:118;3611:2;3637:53;3682:7;3673:6;3662:9;3658:22;3637:53;:::i;:::-;3627:63;;3582:118;3088:619;;;;;:::o;3713:468::-;3778:6;3786;3835:2;3823:9;3814:7;3810:23;3806:32;3803:119;;;3841:79;;:::i;:::-;3803:119;3961:1;3986:53;4031:7;4022:6;4011:9;4007:22;3986:53;:::i;:::-;3976:63;;3932:117;4088:2;4114:50;4156:7;4147:6;4136:9;4132:22;4114:50;:::i;:::-;4104:60;;4059:115;3713:468;;;;;:::o;4187:474::-;4255:6;4263;4312:2;4300:9;4291:7;4287:23;4283:32;4280:119;;;4318:79;;:::i;:::-;4280:119;4438:1;4463:53;4508:7;4499:6;4488:9;4484:22;4463:53;:::i;:::-;4453:63;;4409:117;4565:2;4591:53;4636:7;4627:6;4616:9;4612:22;4591:53;:::i;:::-;4581:63;;4536:118;4187:474;;;;;:::o;4667:934::-;4789:6;4797;4805;4813;4862:2;4850:9;4841:7;4837:23;4833:32;4830:119;;;4868:79;;:::i;:::-;4830:119;5016:1;5005:9;5001:17;4988:31;5046:18;5038:6;5035:30;5032:117;;;5068:79;;:::i;:::-;5032:117;5181:80;5253:7;5244:6;5233:9;5229:22;5181:80;:::i;:::-;5163:98;;;;4959:312;5338:2;5327:9;5323:18;5310:32;5369:18;5361:6;5358:30;5355:117;;;5391:79;;:::i;:::-;5355:117;5504:80;5576:7;5567:6;5556:9;5552:22;5504:80;:::i;:::-;5486:98;;;;5281:313;4667:934;;;;;;;:::o;5607:698::-;5699:6;5707;5715;5764:2;5752:9;5743:7;5739:23;5735:32;5732:119;;;5770:79;;:::i;:::-;5732:119;5918:1;5907:9;5903:17;5890:31;5948:18;5940:6;5937:30;5934:117;;;5970:79;;:::i;:::-;5934:117;6083:80;6155:7;6146:6;6135:9;6131:22;6083:80;:::i;:::-;6065:98;;;;5861:312;6212:2;6238:50;6280:7;6271:6;6260:9;6256:22;6238:50;:::i;:::-;6228:60;;6183:115;5607:698;;;;;:::o;6311:323::-;6367:6;6416:2;6404:9;6395:7;6391:23;6387:32;6384:119;;;6422:79;;:::i;:::-;6384:119;6542:1;6567:50;6609:7;6600:6;6589:9;6585:22;6567:50;:::i;:::-;6557:60;;6513:114;6311:323;;;;:::o;6640:753::-;6720:6;6728;6736;6744;6793:3;6781:9;6772:7;6768:23;6764:33;6761:120;;;6800:79;;:::i;:::-;6761:120;6920:1;6945:50;6987:7;6978:6;6967:9;6963:22;6945:50;:::i;:::-;6935:60;;6891:114;7044:2;7070:50;7112:7;7103:6;7092:9;7088:22;7070:50;:::i;:::-;7060:60;;7015:115;7169:2;7195:53;7240:7;7231:6;7220:9;7216:22;7195:53;:::i;:::-;7185:63;;7140:118;7297:2;7323:53;7368:7;7359:6;7348:9;7344:22;7323:53;:::i;:::-;7313:63;;7268:118;6640:753;;;;;;;:::o;7399:468::-;7464:6;7472;7521:2;7509:9;7500:7;7496:23;7492:32;7489:119;;;7527:79;;:::i;:::-;7489:119;7647:1;7672:50;7714:7;7705:6;7694:9;7690:22;7672:50;:::i;:::-;7662:60;;7618:114;7771:2;7797:53;7842:7;7833:6;7822:9;7818:22;7797:53;:::i;:::-;7787:63;;7742:118;7399:468;;;;;:::o;7873:329::-;7932:6;7981:2;7969:9;7960:7;7956:23;7952:32;7949:119;;;7987:79;;:::i;:::-;7949:119;8107:1;8132:53;8177:7;8168:6;8157:9;8153:22;8132:53;:::i;:::-;8122:63;;8078:117;7873:329;;;;:::o;8208:474::-;8276:6;8284;8333:2;8321:9;8312:7;8308:23;8304:32;8301:119;;;8339:79;;:::i;:::-;8301:119;8459:1;8484:53;8529:7;8520:6;8509:9;8505:22;8484:53;:::i;:::-;8474:63;;8430:117;8586:2;8612:53;8657:7;8648:6;8637:9;8633:22;8612:53;:::i;:::-;8602:63;;8557:118;8208:474;;;;;:::o;8688:::-;8756:6;8764;8813:2;8801:9;8792:7;8788:23;8784:32;8781:119;;;8819:79;;:::i;:::-;8781:119;8939:1;8964:53;9009:7;9000:6;8989:9;8985:22;8964:53;:::i;:::-;8954:63;;8910:117;9066:2;9092:53;9137:7;9128:6;9117:9;9113:22;9092:53;:::i;:::-;9082:63;;9037:118;8688:474;;;;;:::o;9168:619::-;9245:6;9253;9261;9310:2;9298:9;9289:7;9285:23;9281:32;9278:119;;;9316:79;;:::i;:::-;9278:119;9436:1;9461:53;9506:7;9497:6;9486:9;9482:22;9461:53;:::i;:::-;9451:63;;9407:117;9563:2;9589:53;9634:7;9625:6;9614:9;9610:22;9589:53;:::i;:::-;9579:63;;9534:118;9691:2;9717:53;9762:7;9753:6;9742:9;9738:22;9717:53;:::i;:::-;9707:63;;9662:118;9168:619;;;;;:::o;9793:663::-;9881:6;9889;9897;9946:2;9934:9;9925:7;9921:23;9917:32;9914:119;;;9952:79;;:::i;:::-;9914:119;10072:1;10097:64;10153:7;10144:6;10133:9;10129:22;10097:64;:::i;:::-;10087:74;;10043:128;10210:2;10236:64;10292:7;10283:6;10272:9;10268:22;10236:64;:::i;:::-;10226:74;;10181:129;10349:2;10375:64;10431:7;10422:6;10411:9;10407:22;10375:64;:::i;:::-;10365:74;;10320:129;9793:663;;;;;:::o;10462:765::-;10548:6;10556;10564;10572;10621:3;10609:9;10600:7;10596:23;10592:33;10589:120;;;10628:79;;:::i;:::-;10589:120;10748:1;10773:53;10818:7;10809:6;10798:9;10794:22;10773:53;:::i;:::-;10763:63;;10719:117;10875:2;10901:53;10946:7;10937:6;10926:9;10922:22;10901:53;:::i;:::-;10891:63;;10846:118;11003:2;11029:53;11074:7;11065:6;11054:9;11050:22;11029:53;:::i;:::-;11019:63;;10974:118;11131:2;11157:53;11202:7;11193:6;11182:9;11178:22;11157:53;:::i;:::-;11147:63;;11102:118;10462:765;;;;;;;:::o;11233:179::-;11302:10;11323:46;11365:3;11357:6;11323:46;:::i;:::-;11401:4;11396:3;11392:14;11378:28;;11233:179;;;;:::o;11418:147::-;11513:45;11552:5;11513:45;:::i;:::-;11508:3;11501:58;11418:147;;:::o;11571:142::-;11674:32;11700:5;11674:32;:::i;:::-;11669:3;11662:45;11571:142;;:::o;11719:108::-;11796:24;11814:5;11796:24;:::i;:::-;11791:3;11784:37;11719:108;;:::o;11833:118::-;11920:24;11938:5;11920:24;:::i;:::-;11915:3;11908:37;11833:118;;:::o;11987:732::-;12106:3;12135:54;12183:5;12135:54;:::i;:::-;12205:86;12284:6;12279:3;12205:86;:::i;:::-;12198:93;;12315:56;12365:5;12315:56;:::i;:::-;12394:7;12425:1;12410:284;12435:6;12432:1;12429:13;12410:284;;;12511:6;12505:13;12538:63;12597:3;12582:13;12538:63;:::i;:::-;12531:70;;12624:60;12677:6;12624:60;:::i;:::-;12614:70;;12470:224;12457:1;12454;12450:9;12445:14;;12410:284;;;12414:14;12710:3;12703:10;;12111:608;;;11987:732;;;;:::o;12725:109::-;12806:21;12821:5;12806:21;:::i;:::-;12801:3;12794:34;12725:109;;:::o;12840:167::-;12945:55;12994:5;12945:55;:::i;:::-;12940:3;12933:68;12840:167;;:::o;13013:147::-;13108:45;13147:5;13108:45;:::i;:::-;13103:3;13096:58;13013:147;;:::o;13166:143::-;13259:43;13296:5;13259:43;:::i;:::-;13254:3;13247:56;13166:143;;:::o;13315:::-;13408:43;13445:5;13408:43;:::i;:::-;13403:3;13396:56;13315:143;;:::o;13464:::-;13557:43;13594:5;13557:43;:::i;:::-;13552:3;13545:56;13464:143;;:::o;13613:364::-;13701:3;13729:39;13762:5;13729:39;:::i;:::-;13784:71;13848:6;13843:3;13784:71;:::i;:::-;13777:78;;13864:52;13909:6;13904:3;13897:4;13890:5;13886:16;13864:52;:::i;:::-;13941:29;13963:6;13941:29;:::i;:::-;13936:3;13932:39;13925:46;;13705:272;13613:364;;;;:::o;13983:366::-;14125:3;14146:67;14210:2;14205:3;14146:67;:::i;:::-;14139:74;;14222:93;14311:3;14222:93;:::i;:::-;14340:2;14335:3;14331:12;14324:19;;13983:366;;;:::o;14355:::-;14497:3;14518:67;14582:2;14577:3;14518:67;:::i;:::-;14511:74;;14594:93;14683:3;14594:93;:::i;:::-;14712:2;14707:3;14703:12;14696:19;;14355:366;;;:::o;14727:::-;14869:3;14890:67;14954:2;14949:3;14890:67;:::i;:::-;14883:74;;14966:93;15055:3;14966:93;:::i;:::-;15084:2;15079:3;15075:12;15068:19;;14727:366;;;:::o;15099:::-;15241:3;15262:67;15326:2;15321:3;15262:67;:::i;:::-;15255:74;;15338:93;15427:3;15338:93;:::i;:::-;15456:2;15451:3;15447:12;15440:19;;15099:366;;;:::o;15471:::-;15613:3;15634:67;15698:2;15693:3;15634:67;:::i;:::-;15627:74;;15710:93;15799:3;15710:93;:::i;:::-;15828:2;15823:3;15819:12;15812:19;;15471:366;;;:::o;15843:::-;15985:3;16006:67;16070:2;16065:3;16006:67;:::i;:::-;15999:74;;16082:93;16171:3;16082:93;:::i;:::-;16200:2;16195:3;16191:12;16184:19;;15843:366;;;:::o;16215:::-;16357:3;16378:67;16442:2;16437:3;16378:67;:::i;:::-;16371:74;;16454:93;16543:3;16454:93;:::i;:::-;16572:2;16567:3;16563:12;16556:19;;16215:366;;;:::o;16587:::-;16729:3;16750:67;16814:2;16809:3;16750:67;:::i;:::-;16743:74;;16826:93;16915:3;16826:93;:::i;:::-;16944:2;16939:3;16935:12;16928:19;;16587:366;;;:::o;16959:::-;17101:3;17122:67;17186:2;17181:3;17122:67;:::i;:::-;17115:74;;17198:93;17287:3;17198:93;:::i;:::-;17316:2;17311:3;17307:12;17300:19;;16959:366;;;:::o;17331:::-;17473:3;17494:67;17558:2;17553:3;17494:67;:::i;:::-;17487:74;;17570:93;17659:3;17570:93;:::i;:::-;17688:2;17683:3;17679:12;17672:19;;17331:366;;;:::o;17703:::-;17845:3;17866:67;17930:2;17925:3;17866:67;:::i;:::-;17859:74;;17942:93;18031:3;17942:93;:::i;:::-;18060:2;18055:3;18051:12;18044:19;;17703:366;;;:::o;18075:::-;18217:3;18238:67;18302:2;18297:3;18238:67;:::i;:::-;18231:74;;18314:93;18403:3;18314:93;:::i;:::-;18432:2;18427:3;18423:12;18416:19;;18075:366;;;:::o;18447:::-;18589:3;18610:67;18674:2;18669:3;18610:67;:::i;:::-;18603:74;;18686:93;18775:3;18686:93;:::i;:::-;18804:2;18799:3;18795:12;18788:19;;18447:366;;;:::o;18819:::-;18961:3;18982:67;19046:2;19041:3;18982:67;:::i;:::-;18975:74;;19058:93;19147:3;19058:93;:::i;:::-;19176:2;19171:3;19167:12;19160:19;;18819:366;;;:::o;19191:118::-;19278:24;19296:5;19278:24;:::i;:::-;19273:3;19266:37;19191:118;;:::o;19315:112::-;19398:22;19414:5;19398:22;:::i;:::-;19393:3;19386:35;19315:112;;:::o;19433:222::-;19526:4;19564:2;19553:9;19549:18;19541:26;;19577:71;19645:1;19634:9;19630:17;19621:6;19577:71;:::i;:::-;19433:222;;;;:::o;19661:254::-;19770:4;19808:2;19797:9;19793:18;19785:26;;19821:87;19905:1;19894:9;19890:17;19881:6;19821:87;:::i;:::-;19661:254;;;;:::o;19921:565::-;20104:4;20142:3;20131:9;20127:19;20119:27;;20156:71;20224:1;20213:9;20209:17;20200:6;20156:71;:::i;:::-;20237:72;20305:2;20294:9;20290:18;20281:6;20237:72;:::i;:::-;20319;20387:2;20376:9;20372:18;20363:6;20319:72;:::i;:::-;20401:78;20475:2;20464:9;20460:18;20451:6;20401:78;:::i;:::-;19921:565;;;;;;;:::o;20492:::-;20675:4;20713:3;20702:9;20698:19;20690:27;;20727:71;20795:1;20784:9;20780:17;20771:6;20727:71;:::i;:::-;20808:72;20876:2;20865:9;20861:18;20852:6;20808:72;:::i;:::-;20890;20958:2;20947:9;20943:18;20934:6;20890:72;:::i;:::-;20972:78;21046:2;21035:9;21031:18;21022:6;20972:78;:::i;:::-;20492:565;;;;;;;:::o;21063:::-;21246:4;21284:3;21273:9;21269:19;21261:27;;21298:71;21366:1;21355:9;21351:17;21342:6;21298:71;:::i;:::-;21379:72;21447:2;21436:9;21432:18;21423:6;21379:72;:::i;:::-;21461;21529:2;21518:9;21514:18;21505:6;21461:72;:::i;:::-;21543:78;21617:2;21606:9;21602:18;21593:6;21543:78;:::i;:::-;21063:565;;;;;;;:::o;21634:823::-;21891:4;21929:3;21918:9;21914:19;21906:27;;21943:71;22011:1;22000:9;21996:17;21987:6;21943:71;:::i;:::-;22024:72;22092:2;22081:9;22077:18;22068:6;22024:72;:::i;:::-;22106:80;22182:2;22171:9;22167:18;22158:6;22106:80;:::i;:::-;22196;22272:2;22261:9;22257:18;22248:6;22196:80;:::i;:::-;22286:81;22362:3;22351:9;22347:19;22338:6;22286:81;:::i;:::-;22377:73;22445:3;22434:9;22430:19;22421:6;22377:73;:::i;:::-;21634:823;;;;;;;;;:::o;22463:210::-;22550:4;22588:2;22577:9;22573:18;22565:26;;22601:65;22663:1;22652:9;22648:17;22639:6;22601:65;:::i;:::-;22463:210;;;;:::o;22679:258::-;22790:4;22828:2;22817:9;22813:18;22805:26;;22841:89;22927:1;22916:9;22912:17;22903:6;22841:89;:::i;:::-;22679:258;;;;:::o;22943:313::-;23056:4;23094:2;23083:9;23079:18;23071:26;;23143:9;23137:4;23133:20;23129:1;23118:9;23114:17;23107:47;23171:78;23244:4;23235:6;23171:78;:::i;:::-;23163:86;;22943:313;;;;:::o;23262:419::-;23428:4;23466:2;23455:9;23451:18;23443:26;;23515:9;23509:4;23505:20;23501:1;23490:9;23486:17;23479:47;23543:131;23669:4;23543:131;:::i;:::-;23535:139;;23262:419;;;:::o;23687:::-;23853:4;23891:2;23880:9;23876:18;23868:26;;23940:9;23934:4;23930:20;23926:1;23915:9;23911:17;23904:47;23968:131;24094:4;23968:131;:::i;:::-;23960:139;;23687:419;;;:::o;24112:::-;24278:4;24316:2;24305:9;24301:18;24293:26;;24365:9;24359:4;24355:20;24351:1;24340:9;24336:17;24329:47;24393:131;24519:4;24393:131;:::i;:::-;24385:139;;24112:419;;;:::o;24537:::-;24703:4;24741:2;24730:9;24726:18;24718:26;;24790:9;24784:4;24780:20;24776:1;24765:9;24761:17;24754:47;24818:131;24944:4;24818:131;:::i;:::-;24810:139;;24537:419;;;:::o;24962:::-;25128:4;25166:2;25155:9;25151:18;25143:26;;25215:9;25209:4;25205:20;25201:1;25190:9;25186:17;25179:47;25243:131;25369:4;25243:131;:::i;:::-;25235:139;;24962:419;;;:::o;25387:::-;25553:4;25591:2;25580:9;25576:18;25568:26;;25640:9;25634:4;25630:20;25626:1;25615:9;25611:17;25604:47;25668:131;25794:4;25668:131;:::i;:::-;25660:139;;25387:419;;;:::o;25812:::-;25978:4;26016:2;26005:9;26001:18;25993:26;;26065:9;26059:4;26055:20;26051:1;26040:9;26036:17;26029:47;26093:131;26219:4;26093:131;:::i;:::-;26085:139;;25812:419;;;:::o;26237:::-;26403:4;26441:2;26430:9;26426:18;26418:26;;26490:9;26484:4;26480:20;26476:1;26465:9;26461:17;26454:47;26518:131;26644:4;26518:131;:::i;:::-;26510:139;;26237:419;;;:::o;26662:::-;26828:4;26866:2;26855:9;26851:18;26843:26;;26915:9;26909:4;26905:20;26901:1;26890:9;26886:17;26879:47;26943:131;27069:4;26943:131;:::i;:::-;26935:139;;26662:419;;;:::o;27087:::-;27253:4;27291:2;27280:9;27276:18;27268:26;;27340:9;27334:4;27330:20;27326:1;27315:9;27311:17;27304:47;27368:131;27494:4;27368:131;:::i;:::-;27360:139;;27087:419;;;:::o;27512:::-;27678:4;27716:2;27705:9;27701:18;27693:26;;27765:9;27759:4;27755:20;27751:1;27740:9;27736:17;27729:47;27793:131;27919:4;27793:131;:::i;:::-;27785:139;;27512:419;;;:::o;27937:::-;28103:4;28141:2;28130:9;28126:18;28118:26;;28190:9;28184:4;28180:20;28176:1;28165:9;28161:17;28154:47;28218:131;28344:4;28218:131;:::i;:::-;28210:139;;27937:419;;;:::o;28362:::-;28528:4;28566:2;28555:9;28551:18;28543:26;;28615:9;28609:4;28605:20;28601:1;28590:9;28586:17;28579:47;28643:131;28769:4;28643:131;:::i;:::-;28635:139;;28362:419;;;:::o;28787:::-;28953:4;28991:2;28980:9;28976:18;28968:26;;29040:9;29034:4;29030:20;29026:1;29015:9;29011:17;29004:47;29068:131;29194:4;29068:131;:::i;:::-;29060:139;;28787:419;;;:::o;29212:222::-;29305:4;29343:2;29332:9;29328:18;29320:26;;29356:71;29424:1;29413:9;29409:17;29400:6;29356:71;:::i;:::-;29212:222;;;;:::o;29440:831::-;29703:4;29741:3;29730:9;29726:19;29718:27;;29755:71;29823:1;29812:9;29808:17;29799:6;29755:71;:::i;:::-;29836:80;29912:2;29901:9;29897:18;29888:6;29836:80;:::i;:::-;29963:9;29957:4;29953:20;29948:2;29937:9;29933:18;29926:48;29991:108;30094:4;30085:6;29991:108;:::i;:::-;29983:116;;30109:72;30177:2;30166:9;30162:18;30153:6;30109:72;:::i;:::-;30191:73;30259:3;30248:9;30244:19;30235:6;30191:73;:::i;:::-;29440:831;;;;;;;;:::o;30277:442::-;30426:4;30464:2;30453:9;30449:18;30441:26;;30477:71;30545:1;30534:9;30530:17;30521:6;30477:71;:::i;:::-;30558:72;30626:2;30615:9;30611:18;30602:6;30558:72;:::i;:::-;30640;30708:2;30697:9;30693:18;30684:6;30640:72;:::i;:::-;30277:442;;;;;;:::o;30725:214::-;30814:4;30852:2;30841:9;30837:18;30829:26;;30865:67;30929:1;30918:9;30914:17;30905:6;30865:67;:::i;:::-;30725:214;;;;:::o;31026:132::-;31093:4;31116:3;31108:11;;31146:4;31141:3;31137:14;31129:22;;31026:132;;;:::o;31164:114::-;31231:6;31265:5;31259:12;31249:22;;31164:114;;;:::o;31284:99::-;31336:6;31370:5;31364:12;31354:22;;31284:99;;;:::o;31389:113::-;31459:4;31491;31486:3;31482:14;31474:22;;31389:113;;;:::o;31508:184::-;31607:11;31641:6;31636:3;31629:19;31681:4;31676:3;31672:14;31657:29;;31508:184;;;;:::o;31698:169::-;31782:11;31816:6;31811:3;31804:19;31856:4;31851:3;31847:14;31832:29;;31698:169;;;;:::o;31873:305::-;31913:3;31932:20;31950:1;31932:20;:::i;:::-;31927:25;;31966:20;31984:1;31966:20;:::i;:::-;31961:25;;32120:1;32052:66;32048:74;32045:1;32042:81;32039:107;;;32126:18;;:::i;:::-;32039:107;32170:1;32167;32163:9;32156:16;;31873:305;;;;:::o;32184:185::-;32224:1;32241:20;32259:1;32241:20;:::i;:::-;32236:25;;32275:20;32293:1;32275:20;:::i;:::-;32270:25;;32314:1;32304:35;;32319:18;;:::i;:::-;32304:35;32361:1;32358;32354:9;32349:14;;32184:185;;;;:::o;32375:848::-;32436:5;32443:4;32467:6;32458:15;;32491:5;32482:14;;32505:712;32526:1;32516:8;32513:15;32505:712;;;32621:4;32616:3;32612:14;32606:4;32603:24;32600:50;;;32630:18;;:::i;:::-;32600:50;32680:1;32670:8;32666:16;32663:451;;;33095:4;33088:5;33084:16;33075:25;;32663:451;33145:4;33139;33135:15;33127:23;;33175:32;33198:8;33175:32;:::i;:::-;33163:44;;32505:712;;;32375:848;;;;;;;:::o;33229:281::-;33287:5;33311:23;33329:4;33311:23;:::i;:::-;33303:31;;33355:25;33371:8;33355:25;:::i;:::-;33343:37;;33399:104;33436:66;33426:8;33420:4;33399:104;:::i;:::-;33390:113;;33229:281;;;;:::o;33516:1073::-;33570:5;33761:8;33751:40;;33782:1;33773:10;;33784:5;;33751:40;33810:4;33800:36;;33827:1;33818:10;;33829:5;;33800:36;33896:4;33944:1;33939:27;;;;33980:1;33975:191;;;;33889:277;;33939:27;33957:1;33948:10;;33959:5;;;33975:191;34020:3;34010:8;34007:17;34004:43;;;34027:18;;:::i;:::-;34004:43;34076:8;34073:1;34069:16;34060:25;;34111:3;34104:5;34101:14;34098:40;;;34118:18;;:::i;:::-;34098:40;34151:5;;;33889:277;;34275:2;34265:8;34262:16;34256:3;34250:4;34247:13;34243:36;34225:2;34215:8;34212:16;34207:2;34201:4;34198:12;34194:35;34178:111;34175:246;;;34331:8;34325:4;34321:19;34312:28;;34366:3;34359:5;34356:14;34353:40;;;34373:18;;:::i;:::-;34353:40;34406:5;;34175:246;34446:42;34484:3;34474:8;34468:4;34465:1;34446:42;:::i;:::-;34431:57;;;;34520:4;34515:3;34511:14;34504:5;34501:25;34498:51;;;34529:18;;:::i;:::-;34498:51;34578:4;34571:5;34567:16;34558:25;;33516:1073;;;;;;:::o;34595:348::-;34635:7;34658:20;34676:1;34658:20;:::i;:::-;34653:25;;34692:20;34710:1;34692:20;:::i;:::-;34687:25;;34880:1;34812:66;34808:74;34805:1;34802:81;34797:1;34790:9;34783:17;34779:105;34776:131;;;34887:18;;:::i;:::-;34776:131;34935:1;34932;34928:9;34917:20;;34595:348;;;;:::o;34949:191::-;34989:4;35009:20;35027:1;35009:20;:::i;:::-;35004:25;;35043:20;35061:1;35043:20;:::i;:::-;35038:25;;35082:1;35079;35076:8;35073:34;;;35087:18;;:::i;:::-;35073:34;35132:1;35129;35125:9;35117:17;;34949:191;;;;:::o;35146:96::-;35183:7;35212:24;35230:5;35212:24;:::i;:::-;35201:35;;35146:96;;;:::o;35248:104::-;35293:7;35322:24;35340:5;35322:24;:::i;:::-;35311:35;;35248:104;;;:::o;35358:90::-;35392:7;35435:5;35428:13;35421:21;35410:32;;35358:90;;;:::o;35454:126::-;35491:7;35531:42;35524:5;35520:54;35509:65;;35454:126;;;:::o;35586:77::-;35623:7;35652:5;35641:16;;35586:77;;;:::o;35669:86::-;35704:7;35744:4;35737:5;35733:16;35722:27;;35669:86;;;:::o;35761:134::-;35819:9;35852:37;35883:5;35852:37;:::i;:::-;35839:50;;35761:134;;;:::o;35901:144::-;35969:9;36002:37;36033:5;36002:37;:::i;:::-;35989:50;;35901:144;;;:::o;36051:121::-;36109:9;36142:24;36160:5;36142:24;:::i;:::-;36129:37;;36051:121;;;:::o;36178:117::-;36234:9;36267:22;36283:5;36267:22;:::i;:::-;36254:35;;36178:117;;;:::o;36301:::-;36357:9;36390:22;36406:5;36390:22;:::i;:::-;36377:35;;36301:117;;;:::o;36424:::-;36480:9;36513:22;36529:5;36513:22;:::i;:::-;36500:35;;36424:117;;;:::o;36547:126::-;36597:9;36630:37;36661:5;36630:37;:::i;:::-;36617:50;;36547:126;;;:::o;36679:113::-;36729:9;36762:24;36780:5;36762:24;:::i;:::-;36749:37;;36679:113;;;:::o;36798:307::-;36866:1;36876:113;36890:6;36887:1;36884:13;36876:113;;;36975:1;36970:3;36966:11;36960:18;36956:1;36951:3;36947:11;36940:39;36912:2;36909:1;36905:10;36900:15;;36876:113;;;37007:6;37004:1;37001:13;36998:101;;;37087:1;37078:6;37073:3;37069:16;37062:27;36998:101;36847:258;36798:307;;;:::o;37111:171::-;37150:3;37173:24;37191:5;37173:24;:::i;:::-;37164:33;;37219:4;37212:5;37209:15;37206:41;;;37227:18;;:::i;:::-;37206:41;37274:1;37267:5;37263:13;37256:20;;37111:171;;;:::o;37288:233::-;37327:3;37350:24;37368:5;37350:24;:::i;:::-;37341:33;;37396:66;37389:5;37386:77;37383:103;;;37466:18;;:::i;:::-;37383:103;37513:1;37506:5;37502:13;37495:20;;37288:233;;;:::o;37527:180::-;37575:77;37572:1;37565:88;37672:4;37669:1;37662:15;37696:4;37693:1;37686:15;37713:180;37761:77;37758:1;37751:88;37858:4;37855:1;37848:15;37882:4;37879:1;37872:15;37899:180;37947:77;37944:1;37937:88;38044:4;38041:1;38034:15;38068:4;38065:1;38058:15;38085:180;38133:77;38130:1;38123:88;38230:4;38227:1;38220:15;38254:4;38251:1;38244:15;38271:117;38380:1;38377;38370:12;38394:117;38503:1;38500;38493:12;38517:117;38626:1;38623;38616:12;38640:117;38749:1;38746;38739:12;38763:117;38872:1;38869;38862:12;38886:102;38927:6;38978:2;38974:7;38969:2;38962:5;38958:14;38954:28;38944:38;;38886:102;;;:::o;38994:::-;39036:8;39083:5;39080:1;39076:13;39055:34;;38994:102;;;:::o;39102:171::-;39242:23;39238:1;39230:6;39226:14;39219:47;39102:171;:::o;39279:224::-;39419:34;39415:1;39407:6;39403:14;39396:58;39488:7;39483:2;39475:6;39471:15;39464:32;39279:224;:::o;39509:167::-;39649:19;39645:1;39637:6;39633:14;39626:43;39509:167;:::o;39682:174::-;39822:26;39818:1;39810:6;39806:14;39799:50;39682:174;:::o;39862:225::-;40002:34;39998:1;39990:6;39986:14;39979:58;40071:8;40066:2;40058:6;40054:15;40047:33;39862:225;:::o;40093:172::-;40233:24;40229:1;40221:6;40217:14;40210:48;40093:172;:::o;40271:170::-;40411:22;40407:1;40399:6;40395:14;40388:46;40271:170;:::o;40447:177::-;40587:29;40583:1;40575:6;40571:14;40564:53;40447:177;:::o;40630:179::-;40770:31;40766:1;40758:6;40754:14;40747:55;40630:179;:::o;40815:174::-;40955:26;40951:1;40943:6;40939:14;40932:50;40815:174;:::o;40995:228::-;41135:34;41131:1;41123:6;41119:14;41112:58;41204:11;41199:2;41191:6;41187:15;41180:36;40995:228;:::o;41229:182::-;41369:34;41365:1;41357:6;41353:14;41346:58;41229:182;:::o;41417:171::-;41557:23;41553:1;41545:6;41541:14;41534:47;41417:171;:::o;41594:221::-;41734:34;41730:1;41722:6;41718:14;41711:58;41803:4;41798:2;41790:6;41786:15;41779:29;41594:221;:::o;41821:122::-;41894:24;41912:5;41894:24;:::i;:::-;41887:5;41884:35;41874:63;;41933:1;41930;41923:12;41874:63;41821:122;:::o;41949:116::-;42019:21;42034:5;42019:21;:::i;:::-;42012:5;42009:32;41999:60;;42055:1;42052;42045:12;41999:60;41949:116;:::o;42071:122::-;42144:24;42162:5;42144:24;:::i;:::-;42137:5;42134:35;42124:63;;42183:1;42180;42173:12;42124:63;42071:122;:::o

Swarm Source

ipfs://97f3143c0d1b6c8c1e57c19e2e2a11eda49eb97de142f94f265bbe38efbaf119
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.