ETH Price: $3,330.51 (-0.38%)

Token

Kaizen Corp (KZN)
 

Overview

Max Total Supply

100,000,000 KZN

Holders

649

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.527296664026819334 KZN

Value
$0.00
0xf245548ea1331332c7faadef3832e4a96a31c44c
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:
KZN

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-06
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.11;

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return payable(msg.sender);
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        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
    );
}

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

        return c;
    }

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

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

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

        return c;
    }

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

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

library Address {
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        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"
        );

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;

    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() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

    function getTime() public view returns (uint256) {
        return block.timestamp;
    }
}


interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);

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

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

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

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

contract KZN is Context, IERC20, Ownable {
    using Address for address;

    address payable public operationsAddress;
    address payable public devAddress;      
        
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    
    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;
    bool public limitsInEffect = true;

    mapping(address => bool) private _isExcludedFromFee;

    mapping(address => bool) private _isExcluded;
    address[] private _excluded;
    
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 100 * 1e6 * 1e18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private constant _name = "Kaizen Corp";
    string private constant _symbol = "KZN";
    uint8 private constant _decimals = 18;

    // these values are pretty much arbitrary since they get overwritten for every txn, but the placeholders make it easier to work with current contract.
    uint256 private _taxFee;
    uint256 private _previousTaxFee = _taxFee;

    uint256 private _operationsFee;
    
    uint256 private _liquidityFee;
    uint256 private _previousLiquidityFee = _liquidityFee;
    
    uint256 private constant BUY = 1;
    uint256 private constant SELL = 2;
    uint256 private constant TRANSFER = 3;
    uint256 private buyOrSellSwitch;

    uint256 public _buyTaxFee = 100;
    uint256 public _buyLiquidityFee = 0;
    uint256 public _buyOperationsFee = 3400;

    uint256 public _sellTaxFee = 100;
    uint256 public _sellLiquidityFee = 0;
    uint256 public _sellOperationsFee = 3400;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public blockForPenaltyEnd;
    mapping (address => bool) public boughtEarly;
    uint256 public botsCaught;
    
    uint256 public _liquidityTokensToSwap;
    uint256 public _operationsTokensToSwap;
    
    uint256 public maxTransactionAmount;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
    uint256 public maxWallet;
    
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    uint256 private minimumTokensBeforeSwap;

    IDexRouter public dexRouter;
    address public lpPair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    bool public tradingActive = false;
    bool public highTaxModeEnabled = true;
    bool public flagBotsEnabled = true;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event SwapETHForTokens(uint256 amountIn, address[] path);

    event SwapTokensForETH(uint256 amountIn, address[] path);
    
    event SetAutomatedMarketMakerPair(address pair, bool value);
    
    event ExcludeFromReward(address excludedAddress);
    
    event IncludeInReward(address includedAddress);
    
    event ExcludeFromFee(address excludedAddress);
    
    event IncludeInFee(address includedAddress);
    
    event SetBuyFee(uint256 operationsFee, uint256 liquidityFee, uint256 reflectFee);
    
    event SetSellFee(uint256 operationsFee, uint256 liquidityFee, uint256 reflectFee);
    
    event TransferForeignToken(address token, uint256 amount);
    
    event UpdatedOperationsAddress(address operations);
    
    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

    event EnabledTrading();

    event RemovedLimits();

    event EnabledLimits();
    
    event TransferDelayDisabled();

    event DisabledHighTaxModeForever();
    event DisabledMarkBotModeForever();

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() payable {
        _rOwned[address(this)] = _rTotal/100*3;
        _rOwned[msg.sender] = _rTotal/100*97;
        
        maxTransactionAmount = _tTotal * 3 / 10000;
        minimumTokensBeforeSwap = _tTotal * 50 / 100000;
        
        operationsAddress = payable(msg.sender); // Operations Address
        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[operationsAddress] = true;
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(operationsAddress, true);
        
        excludeFromReward(msg.sender);
        
        emit Transfer(address(0), address(this), _tTotal/100*3);
        emit Transfer(address(0), address(msg.sender), _tTotal/100*97);
    }

    function name() external pure returns (string memory) {
        return _name;
    }

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

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

    function totalSupply() external pure override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount)
        external
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

    function approve(address spender, uint256 amount)
        public
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function isExcludedFromReward(address account)
        external
        view
        returns (bool)
    {
        return _isExcluded[account];
    }

    function totalFees() external view returns (uint256) {
        return _tFeeTotal;
    }
    
    // remove limits after token is stable - 30-60 minutes
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
        emit RemovedLimits();
    }

    // enableLimits...just in case it will be needed
    function enableLimits() external onlyOwner {
        limitsInEffect = true;    
        emit EnabledLimits();
    }    
    
    // disable Transfer delay
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
        emit TransferDelayDisabled();
    }

    function disableFlagBotsForever() external onlyOwner {
        require(
            flagBotsEnabled,
            "Flag bot functionality already disabled forever!!"
        );

        flagBotsEnabled = false;

        emit DisabledMarkBotModeForever();
    }
    
    function addBoughtEarly(address wallet) external onlyOwner {
        require(
            flagBotsEnabled,
            "Flag bot functionality has been disabled forever!"
        );        
        require(!boughtEarly[wallet], "Wallet is already flagged.");
        boughtEarly[wallet] = true;
    }

    function removeBoughtEarly(address wallet) external onlyOwner {
        require(boughtEarly[wallet], "Wallet is already not flagged.");
        boughtEarly[wallet] = false;
    }    

    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
            
    function minimumTokensBeforeSwapAmount() external view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

     // change the minimum amount of tokens to sell from fees
    function updateMinimumTokensBeforeSwap(uint256 newAmount) external onlyOwner{
  	    require(newAmount >= _tTotal * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= _tTotal * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    minimumTokensBeforeSwap = newAmount;
  	}

    function updateMaxAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (_tTotal * 2 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.2%");
        maxTransactionAmount = newNum * (1e18);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != lpPair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        _isExcludedMaxTransactionAmount[pair] = value;
        if(value){excludeFromReward(pair);}
        if(!value){includeInReward(pair);}
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee)
        external
        view
        returns (uint256)
    {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount, , , , , ) = _getValues(tAmount);
            return rAmount;
        } else {
            (, uint256 rTransferAmount, , , , ) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount)
        public
        view
        returns (uint256)
    {
        require(
            rAmount <= _rTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getRate();
        return rAmount / (currentRate);
    }

    function excludeFromReward(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        require(_excluded.length + 1 <= 50, "Cannot exclude more than 50 accounts.  Include a previously excluded address.");
        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) public onlyOwner {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
 
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        if(!tradingActive){
            require(_isExcludedFromFee[from] || _isExcludedFromFee[to], "Trading is not active yet.");
        }

        if(!earlyBuyPenaltyInEffect()){
            require(!boughtEarly[from] || to == owner() || to == address(0xdead), "Bots cannot transfer tokens in or out except to owner or dead address.");
        }

        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !inSwapAndLiquify
            ){                

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != address(dexRouter) && to != address(lpPair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number && _holderLastTransferTimestamp[to] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }
                
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;

        // swap and liquify
        if (
            !inSwapAndLiquify &&
            swapAndLiquifyEnabled &&
            balanceOf(lpPair) > 0 &&
            !_isExcludedFromFee[to] &&
            !_isExcludedFromFee[from] &&
            automatedMarketMakerPairs[to] &&
            overMinimumTokenBalance
        ) {
            swapBack();
        }

        removeAllFee();
        
        buyOrSellSwitch = TRANSFER;
        
        if (!_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {
            if(earlyBuyPenaltyInEffect() && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to]){
                
                if(!boughtEarly[to]){
                    boughtEarly[to] = true;
                    botsCaught += 1;
                    emit CaughtEarlyBuyer(to);
                }

                _taxFee = _buyTaxFee;
                _liquidityFee = _buyLiquidityFee + _buyOperationsFee;
                if(_liquidityFee > 0){
                    buyOrSellSwitch = BUY;
                }
            }

            // Buy
            if (automatedMarketMakerPairs[from]) {
                _taxFee = _buyTaxFee;
                _liquidityFee = _buyLiquidityFee + _buyOperationsFee;
                if(_liquidityFee > 0){
                    buyOrSellSwitch = BUY;
                }
            } 
            // Sell
            else if (automatedMarketMakerPairs[to]) {
                _taxFee = _sellTaxFee;
                _liquidityFee = _sellLiquidityFee + _sellOperationsFee;
                if(_liquidityFee > 0){
                    buyOrSellSwitch = SELL;
                }
            }
        }
        
        _tokenTransfer(from, to, amount);
        
        restoreAllFee();
        
    }

    function earlyBuyPenaltyInEffect() public view returns (bool){
        return block.number < blockForPenaltyEnd;
    }

    function swapBack() private lockTheSwap {

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _liquidityTokensToSwap + _operationsTokensToSwap;
        bool success;

        // prevent overly large contract sells.
        if(contractBalance >= minimumTokensBeforeSwap * 20){
            contractBalance = minimumTokensBeforeSwap * 20;
        }

        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
        
        // Halve the amount of liquidity tokens
        uint256 tokensForLiquidity = contractBalance * _liquidityTokensToSwap / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance-(tokensForLiquidity);
        
        swapTokensForETH(amountToSwapForETH);
        
        uint256 ethBalance = address(this).balance;
        
        uint256 ethForOperations = ethBalance* (_operationsTokensToSwap) / (totalTokensToSwap - (_liquidityTokensToSwap/2));
        
        uint256 ethForLiquidity = ethBalance - ethForOperations;

        _liquidityTokensToSwap = 0;
        _operationsTokensToSwap = 0;        
        
        if(tokensForLiquidity > 0 && ethForLiquidity > 0){
            addLiquidity(tokensForLiquidity, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        
        // send remainder to operations
        (success,) = address(operationsAddress).call{value: address(this).balance}("");
    }
    
    // force Swap back if slippage above 49% for launch.
    function forceSwapBack() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        require(contractBalance >= minimumTokensBeforeSwap, "Can only swap back if above the threshold.");
        swapBack();
        emit OwnerForcedSwapBack(block.timestamp);
    }
    
    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();
        _approve(address(this), address(dexRouter), tokenAmount);
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(dexRouter), tokenAmount);
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(0xdead),
            block.timestamp
        );
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender] - (rAmount);
        _tOwned[recipient] = _tOwned[recipient] + (tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient] + (rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender]-(tAmount);
        _rOwned[sender] = _rOwned[sender]-(rAmount);
        _rOwned[recipient] = _rOwned[recipient]+(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender]-(tAmount);
        _rOwned[sender] = _rOwned[sender]-(rAmount);
        _tOwned[recipient] = _tOwned[recipient]+(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient]+(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal-(rFee);
        _tFeeTotal = _tFeeTotal+(tFee);
    }

    function _getValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        (
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tLiquidity,
            _getRate()
        );
        return (
            rAmount,
            rTransferAmount,
            rFee,
            tTransferAmount,
            tFee,
            tLiquidity
        );
    }

    function _getTValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount-(tFee)-(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 tLiquidity,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 rAmount = tAmount*(currentRate);
        uint256 rFee = tFee*(currentRate);
        uint256 rLiquidity = tLiquidity*(currentRate);
        uint256 rTransferAmount = rAmount-(rFee)-(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply / (tSupply);
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (
                _rOwned[_excluded[i]] > rSupply ||
                _tOwned[_excluded[i]] > tSupply
            ) return (_rTotal, _tTotal);
            rSupply = rSupply-(_rOwned[_excluded[i]]);
            tSupply = tSupply-(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal / (_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        if(buyOrSellSwitch == BUY){
            _liquidityTokensToSwap += tLiquidity * _buyLiquidityFee / _liquidityFee;
            _operationsTokensToSwap += tLiquidity * _buyOperationsFee / _liquidityFee;
        } else if(buyOrSellSwitch == SELL){
            _liquidityTokensToSwap += tLiquidity * _sellLiquidityFee / _liquidityFee;
            _operationsTokensToSwap += tLiquidity * _sellOperationsFee / _liquidityFee;
        }
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity * (currentRate);
        _rOwned[address(this)] = _rOwned[address(this)] + rLiquidity;
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity;
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount * _taxFee / 10000;
    }

    function calculateLiquidityFee(uint256 _amount)
        private
        view
        returns (uint256)
    {
        return _amount * _liquidityFee / 10000;
    }

    function removeAllFee() private {
        if (_taxFee == 0 && _liquidityFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }

    function isExcludedFromFee(address account) external view returns (bool) {
        return _isExcludedFromFee[account];
    }

    function excludeFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = true;
        emit ExcludeFromFee(account);
    }

    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
        emit IncludeInFee(account);
    }

    function setBuyFee(uint256 buyTaxFee, uint256 buyLiquidityFee, uint256 buyOperationsFee)
        external
        onlyOwner
    {
        _buyTaxFee = buyTaxFee;
        _buyLiquidityFee = buyLiquidityFee;
        _buyOperationsFee = buyOperationsFee;
        require(_buyTaxFee + _buyLiquidityFee + _buyOperationsFee <= 1500, "Must keep buy taxes below 15%");
        emit SetBuyFee(buyOperationsFee, buyLiquidityFee, buyTaxFee);
    }

    function setSellFee(uint256 sellTaxFee, uint256 sellLiquidityFee, uint256 sellOperationsFee)
        external
        onlyOwner
    {
        _sellTaxFee = sellTaxFee;
        _sellLiquidityFee = sellLiquidityFee;
        _sellOperationsFee = sellOperationsFee;
        require(_sellTaxFee + _sellLiquidityFee + _sellOperationsFee <= 2000, "Must keep sell taxes below 20%");
        emit SetSellFee(sellOperationsFee, sellLiquidityFee, sellTaxFee);
    }

    function setBuyAndSellFees(uint256 buyFee, uint256 sellFee)
        external
        onlyOwner
    {
         require(highTaxModeEnabled, "High tax mode disabled for ever!");

        _buyTaxFee = 100;
        _buyLiquidityFee = 0;
        _buyOperationsFee = buyFee;

        _sellTaxFee = 100;
        _sellLiquidityFee = 0;
        _sellOperationsFee = sellFee;
    }
    
    function setOperationsAddress(address _operationsAddress) external onlyOwner {
        require(_operationsAddress != address(0), "_operationsAddress address cannot be 0");
        _isExcludedFromFee[operationsAddress] = false;
        operationsAddress = payable(_operationsAddress);
        _isExcludedFromFee[operationsAddress] = true;
        emit UpdatedOperationsAddress(_operationsAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    // To receive ETH from dexRouter when swapping
    receive() external payable {}

    function transferForeignToken(address _token, address _to)
        external
        onlyOwner
        returns (bool _sent)
    {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    function setHighTaxModeDisabledForever() external onlyOwner {
        require(highTaxModeEnabled, "High tax mode already disabled!!");

        highTaxModeEnabled = false;
        emit DisabledHighTaxModeForever();
    }
    
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function launch(address[] memory wallets, uint256[] memory amountsInTokens, uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");
        require(blocksForPenalty < 10, "Cannot make penalty blocks more than 10");

        removeAllFee();
        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 200, "Can only airdrop 200 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            uint256 amount = amountsInTokens[i];
            _transfer(msg.sender, wallet, amount);
        }

        maxTransactionAmount = _tTotal  * 3 / 10000;

        //standard enable trading
        tradingActive = true;
        swapAndLiquifyEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        emit EnabledTrading();

        // initialize router
        IDexRouter _dexRouter = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        dexRouter = _dexRouter;

        // create pair
        lpPair = IDexFactory(_dexRouter.factory()).createPair(address(this), _dexRouter.WETH());
        excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);
   
        // add the liquidity

        require(address(this).balance > 0, "Must have ETH on contract to launch");

        require(balanceOf(address(this)) > 0, "Must have Tokens on contract to launch");

        _approve(address(this), address(dexRouter), balanceOf(address(this)));
        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            msg.sender,
            block.timestamp
        );
        restoreAllFee();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"DisabledHighTaxModeForever","type":"event"},{"anonymous":false,"inputs":[],"name":"DisabledMarkBotModeForever","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledLimits","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"operationsFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"}],"name":"SetBuyFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"operationsFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"}],"name":"SetSellFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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"},{"anonymous":false,"inputs":[],"name":"TransferDelayDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"operations","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_operationsTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"addBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableFlagBotsForever","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flagBotsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"highTaxModeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"},{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"removeBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"}],"name":"setBuyAndSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTaxFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"buyOperationsFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setHighTaxModeDisabledForever","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellTaxFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellOperationsFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","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"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526008805461ffff19166101011790556200002c6a52b7d2dcc80cd2e40000006000196200081e565b6200003a906000196200084b565b600c55600e54600f556011546012556064601481905560006015819055610d4860168190556017929092556018819055601991909155601a8190556026805463ffffffff60a81b191661010160b81b179055620000943390565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506064600c54620000ef919062000865565b620000fc9060036200087c565b30600090815260046020526040902055600c546200011d9060649062000865565b6200012a9060616200087c565b33600090815260046020526040902055612710620001556a52b7d2dcc80cd2e400000060036200087c565b62000161919062000865565b602055620186a0620001806a52b7d2dcc80cd2e400000060326200087c565b6200018c919062000865565b602455600280546001600160a01b03191633179055600160096000620001ba6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600990935281832080548516600190811790915560025490911683529120805490921617905562000230620002286000546001600160a01b031690565b600162000308565b6200023d30600162000308565b6200024c61dead600162000308565b60025462000265906001600160a01b0316600162000308565b620002703362000382565b306000600080516020620050438339815191526200029b60646a52b7d2dcc80cd2e400000062000865565b620002a89060036200087c565b60405190815260200160405180910390a333600060008051602062005043833981519152620002e460646a52b7d2dcc80cd2e400000062000865565b620002f19060616200087c565b60405190815260200160405180910390a3620008ed565b6000546001600160a01b03163314620003575760405162461bcd60e51b815260206004820181905260248201526000805160206200502383398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314620003cd5760405162461bcd60e51b815260206004820181905260248201526000805160206200502383398151915260448201526064016200034e565b6001600160a01b0381166000908152600a602052604090205460ff1615620004385760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016200034e565b600b546032906200044b9060016200089e565b1115620004d75760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a4016200034e565b6001600160a01b0381166000908152600460205260409020541562000534576001600160a01b0381166000908152600460205260409020546200051a906200059a565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6000600c54821115620006035760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016200034e565b60006200060f62000624565b90506200061d818462000865565b9392505050565b60008080620006326200064a565b909250905062000643818362000865565b9250505090565b600c5460009081906a52b7d2dcc80cd2e4000000825b600b54811015620007c3578260046000600b8481548110620006865762000686620008b9565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180620006f557508160056000600b8481548110620006ce57620006ce620008b9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1562000714575050600c54936a52b7d2dcc80cd2e40000009350915050565b60046000600b83815481106200072e576200072e620008b9565b60009182526020808320909101546001600160a01b031683528201929092526040019020546200075f90846200084b565b925060056000600b83815481106200077b576200077b620008b9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054620007ac90836200084b565b915080620007ba81620008cf565b91505062000660565b506a52b7d2dcc80cd2e4000000600c54620007df919062000865565b821015620007ff575050600c54926a52b7d2dcc80cd2e400000092509050565b90939092509050565b634e487b7160e01b600052601260045260246000fd5b60008262000830576200083062000808565b500690565b634e487b7160e01b600052601160045260246000fd5b60008282101562000860576200086062000835565b500390565b60008262000877576200087762000808565b500490565b600081600019048311821515161562000899576200089962000835565b500290565b60008219821115620008b457620008b462000835565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415620008e657620008e662000835565b5060010190565b61472680620008fd6000396000f3fe60806040526004361061041f5760003560e01c80636902ca611161021e578063a9059cbb11610123578063e884f260116100ab578063ee40166e1161007a578063ee40166e14610c91578063efcc52de14610ca7578063f2fde38b14610cbd578063f5648a4f14610cdd578063f8b45b0514610cf257600080fd5b8063e884f26014610c1c578063ea2f0b3714610c31578063ea4cfe1214610c51578063ead010ae14610c7157600080fd5b8063c876d0b9116100f2578063c876d0b914610b7a578063c8c8ebe414610b94578063dc44b6a014610baa578063dd62ed3e14610bc0578063e82a416d14610c0657600080fd5b8063a9059cbb14610ae9578063b62496f514610b09578063bbc0c74214610b39578063c49b9a8014610b5a57600080fd5b806385ecfd28116101a657806395d89b411161017557806395d89b4114610a525780639a7a23d614610a7e578063a073d37f14610a9e578063a457c2d714610ab3578063a62068ce14610ad357600080fd5b806385ecfd28146109b557806388790a68146109e557806388f82020146109fb5780638da5cb5b14610a3457600080fd5b8063715018a6116101ed578063715018a61461092a578063751039fc1461093f5780637571336a146109545780637c08fcd0146109745780638366e79a1461099557600080fd5b80636902ca61146108ca5780636b0a894c146108df5780636bd62d7d146108f557806370a082311461090a57600080fd5b80633950935111610324578063499b8394116102ac57806352390c021161027b57806352390c02146108275780635342acb414610847578063557ed1ba1461088057806358a6d531146108935780635bb988c9146108aa57600080fd5b8063499b8394146107b25780634a62bb65146107d25780634a74bb02146107f157806351f205e41461081257600080fd5b806340755c79116102f357806340755c791461071c578063416381ea1461073c578063437823ec14610752578063452ed4f1146107725780634549b0391461079257600080fd5b806339509351146106b15780633951e44e146106d15780633ad10ef6146106e65780634047ea3e1461070657600080fd5b80631c68372d116103a757806325519cf21161037657806325519cf2146106145780632a5f43ad146106345780632d83811914610655578063313ce567146106755780633685d4191461069157600080fd5b80631c68372d146105a85780631d865c30146105be578063200a692d146105de57806323b872dd146105f457600080fd5b80630a840713116103ee5780630a840713146104fb578063106b5da11461051b57806310d5de531461053b57806313114a9d1461056b57806318160ddd1461058a57600080fd5b806306fdde031461042b5780630758d9241461047157806308043751146104a9578063095ea7b3146104cb57600080fd5b3661042657005b600080fd5b34801561043757600080fd5b5060408051808201909152600b81526a04b61697a656e20436f72760ac1b60208201525b604051610468919061410b565b60405180910390f35b34801561047d57600080fd5b50602554610491906001600160a01b031681565b6040516001600160a01b039091168152602001610468565b3480156104b557600080fd5b506104c96104c4366004614160565b610d08565b005b3480156104d757600080fd5b506104eb6104e6366004614191565b610e60565b6040519015158152602001610468565b34801561050757600080fd5b506104c96105163660046141bd565b610e77565b34801561052757600080fd5b506104c9610536366004614160565b610f1c565b34801561054757600080fd5b506104eb6105563660046141df565b60216020526000908152604090205460ff1681565b34801561057757600080fd5b50600d545b604051908152602001610468565b34801561059657600080fd5b506a52b7d2dcc80cd2e400000061057c565b3480156105b457600080fd5b5061057c60195481565b3480156105ca57600080fd5b506104c96105d93660046141fc565b610ffb565b3480156105ea57600080fd5b5061057c60175481565b34801561060057600080fd5b506104eb61060f366004614228565b6110e1565b34801561062057600080fd5b506104c961062f3660046141fc565b61118b565b34801561064057600080fd5b506026546104eb90600160b81b900460ff1681565b34801561066157600080fd5b5061057c610670366004614160565b611268565b34801561068157600080fd5b5060405160128152602001610468565b34801561069d57600080fd5b506104c96106ac3660046141df565b6112ec565b3480156106bd57600080fd5b506104eb6106cc366004614191565b6114a3565b3480156106dd57600080fd5b506104c96114df565b3480156106f257600080fd5b50600354610491906001600160a01b031681565b34801561071257600080fd5b5061057c601e5481565b34801561072857600080fd5b506104c96107373660046141df565b6115b4565b34801561074857600080fd5b5061057c601f5481565b34801561075e57600080fd5b506104c961076d3660046141df565b6116de565b34801561077e57600080fd5b50602654610491906001600160a01b031681565b34801561079e57600080fd5b5061057c6107ad366004614277565b611763565b3480156107be57600080fd5b506104c96107cd3660046141df565b6117f9565b3480156107de57600080fd5b506008546104eb90610100900460ff1681565b3480156107fd57600080fd5b506026546104eb90600160a81b900460ff1681565b34801561081e57600080fd5b506104c9611906565b34801561083357600080fd5b506104c96108423660046141df565b6119da565b34801561085357600080fd5b506104eb6108623660046141df565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561088c57600080fd5b504261057c565b34801561089f57600080fd5b50601b5443106104eb565b3480156108b657600080fd5b506104c96108c53660046141df565b611bc8565b3480156108d657600080fd5b506104c9611c7b565b3480156108eb57600080fd5b5061057c601d5481565b34801561090157600080fd5b506104c9611cdf565b34801561091657600080fd5b5061057c6109253660046141df565b611d9a565b34801561093657600080fd5b506104c9611df9565b34801561094b57600080fd5b506104c9611e6d565b34801561096057600080fd5b506104c961096f3660046142a7565b611ecd565b34801561098057600080fd5b506026546104eb90600160c01b900460ff1681565b3480156109a157600080fd5b506104eb6109b03660046142d5565b611f22565b3480156109c157600080fd5b506104eb6109d03660046141df565b601c6020526000908152604090205460ff1681565b3480156109f157600080fd5b5061057c60185481565b348015610a0757600080fd5b506104eb610a163660046141df565b6001600160a01b03166000908152600a602052604090205460ff1690565b348015610a4057600080fd5b506000546001600160a01b0316610491565b348015610a5e57600080fd5b5060408051808201909152600381526225ad2760e91b602082015261045b565b348015610a8a57600080fd5b506104c9610a993660046142a7565b61212a565b348015610aaa57600080fd5b5060245461057c565b348015610abf57600080fd5b506104eb610ace366004614191565b6121e2565b348015610adf57600080fd5b5061057c601b5481565b348015610af557600080fd5b506104eb610b04366004614191565b61227b565b348015610b1557600080fd5b506104eb610b243660046141df565b60236020526000908152604090205460ff1681565b348015610b4557600080fd5b506026546104eb90600160b01b900460ff1681565b348015610b6657600080fd5b506104c9610b75366004614303565b612288565b348015610b8657600080fd5b506008546104eb9060ff1681565b348015610ba057600080fd5b5061057c60205481565b348015610bb657600080fd5b5061057c60155481565b348015610bcc57600080fd5b5061057c610bdb3660046142d5565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610c1257600080fd5b5061057c60165481565b348015610c2857600080fd5b506104c96122ff565b348015610c3d57600080fd5b506104c9610c4c3660046141df565b61235e565b348015610c5d57600080fd5b50600254610491906001600160a01b031681565b348015610c7d57600080fd5b506104c9610c8c3660046143f6565b6123d9565b348015610c9d57600080fd5b5061057c601a5481565b348015610cb357600080fd5b5061057c60145481565b348015610cc957600080fd5b506104c9610cd83660046141df565b6129a4565b348015610ce957600080fd5b506104c9612a8e565b348015610cfe57600080fd5b5061057c60225481565b6000546001600160a01b03163314610d3b5760405162461bcd60e51b8152600401610d32906144c1565b60405180910390fd5b620186a0610d556a52b7d2dcc80cd2e4000000600161450c565b610d5f919061452b565b811015610dcc5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610d32565b6103e8610de56a52b7d2dcc80cd2e4000000600561450c565b610def919061452b565b811115610e5b5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610d32565b602455565b6000610e6d338484612afa565b5060015b92915050565b6000546001600160a01b03163314610ea15760405162461bcd60e51b8152600401610d32906144c1565b602654600160b81b900460ff16610efa5760405162461bcd60e51b815260206004820181905260248201527f4869676820746178206d6f64652064697361626c656420666f722065766572216044820152606401610d32565b6064601481905560006015819055601693909355601755601891909155601955565b6000546001600160a01b03163314610f465760405162461bcd60e51b8152600401610d32906144c1565b670de0b6b3a76400006103e8610f686a52b7d2dcc80cd2e4000000600261450c565b610f72919061452b565b610f7c919061452b565b811015610fe35760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e322560881b6064820152608401610d32565b610ff581670de0b6b3a764000061450c565b60205550565b6000546001600160a01b031633146110255760405162461bcd60e51b8152600401610d32906144c1565b6017839055601882905560198190556107d081611042848661454d565b61104c919061454d565b111561109a5760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772032302500006044820152606401610d32565b60408051828152602081018490529081018490527f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3906060015b60405180910390a1505050565b60006110ee848484612c1e565b6001600160a01b0384166000908152600660209081526040808320338452909152902054828110156111735760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610d32565b6111808533858403612afa565b506001949350505050565b6000546001600160a01b031633146111b55760405162461bcd60e51b8152600401610d32906144c1565b6014839055601582905560168190556105dc816111d2848661454d565b6111dc919061454d565b111561122a5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203135250000006044820152606401610d32565b60408051828152602081018490529081018490527f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a773620906060016110d4565b6000600c548211156112cf5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610d32565b60006112d96134bf565b90506112e5818461452b565b9392505050565b6000546001600160a01b031633146113165760405162461bcd60e51b8152600401610d32906144c1565b6001600160a01b0381166000908152600a602052604090205460ff1661137e5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610d32565b60005b600b5481101561149f57816001600160a01b0316600b82815481106113a8576113a8614565565b6000918252602090912001546001600160a01b0316141561148d57600b80546113d39060019061457b565b815481106113e3576113e3614565565b600091825260209091200154600b80546001600160a01b03909216918390811061140f5761140f614565565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600a90925220805460ff19169055600b80548061146757611467614592565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611497816145a8565b915050611381565b5050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610e6d9185906114da90869061454d565b612afa565b6000546001600160a01b031633146115095760405162461bcd60e51b8152600401610d32906144c1565b602654600160c01b900460ff1661157c5760405162461bcd60e51b815260206004820152603160248201527f466c616720626f742066756e6374696f6e616c69747920616c72656164792064604482015270697361626c656420666f7265766572212160781b6064820152608401610d32565b6026805460ff60c01b191690556040517f22c1cd64208eea310c0d79c89dad2d9d37c7e96e622d0a53669aa46e84572c7b90600090a1565b6000546001600160a01b031633146115de5760405162461bcd60e51b8152600401610d32906144c1565b602654600160c01b900460ff166116515760405162461bcd60e51b815260206004820152603160248201527f466c616720626f742066756e6374696f6e616c69747920686173206265656e2060448201527064697361626c656420666f72657665722160781b6064820152608401610d32565b6001600160a01b0381166000908152601c602052604090205460ff16156116ba5760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610d32565b6001600160a01b03166000908152601c60205260409020805460ff19166001179055565b6000546001600160a01b031633146117085760405162461bcd60e51b8152600401610d32906144c1565b6001600160a01b038116600081815260096020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291015b60405180910390a150565b60006a52b7d2dcc80cd2e40000008311156117c05760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610d32565b816117df5760006117d0846134e2565b50939550610e71945050505050565b60006117ea846134e2565b50929550610e71945050505050565b6000546001600160a01b031633146118235760405162461bcd60e51b8152600401610d32906144c1565b6001600160a01b0381166118885760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610d32565b600280546001600160a01b039081166000908152600960209081526040808320805460ff1990811690915585546001600160a01b031916948716948517909555838352918290208054909416600117909355519081527f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d29829101611758565b6000546001600160a01b031633146119305760405162461bcd60e51b8152600401610d32906144c1565b600061193b30611d9a565b90506024548110156119a25760405162461bcd60e51b815260206004820152602a60248201527f43616e206f6e6c792073776170206261636b2069662061626f766520746865206044820152693a343932b9b437b6321760b11b6064820152608401610d32565b6119aa613531565b6040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb3290602001611758565b6000546001600160a01b03163314611a045760405162461bcd60e51b8152600401610d32906144c1565b6001600160a01b0381166000908152600a602052604090205460ff1615611a6d5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610d32565b600b54603290611a7e90600161454d565b1115611b085760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610d32565b6001600160a01b03811660009081526004602052604090205415611b62576001600160a01b038116600090815260046020526040902054611b4890611268565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6000546001600160a01b03163314611bf25760405162461bcd60e51b8152600401610d32906144c1565b6001600160a01b0381166000908152601c602052604090205460ff16611c5a5760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610d32565b6001600160a01b03166000908152601c60205260409020805460ff19169055565b6000546001600160a01b03163314611ca55760405162461bcd60e51b8152600401610d32906144c1565b6008805461ff0019166101001790556040517f10d778167c503500f2cf7f114521871c5ab9b6ac8e63dfc9284c73e05d94b49690600090a1565b6000546001600160a01b03163314611d095760405162461bcd60e51b8152600401610d32906144c1565b602654600160b81b900460ff16611d625760405162461bcd60e51b815260206004820181905260248201527f4869676820746178206d6f646520616c72656164792064697361626c656421216044820152606401610d32565b6026805460ff60b81b191690556040517fca3625aacc6ff58610754d78cf8e59adacd2752c6d6292edcb6068d395997ba090600090a1565b6001600160a01b0381166000908152600a602052604081205460ff1615611dd757506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610e7190611268565b6000546001600160a01b03163314611e235760405162461bcd60e51b8152600401610d32906144c1565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611e975760405162461bcd60e51b8152600401610d32906144c1565b6008805461ffff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6000546001600160a01b03163314611ef75760405162461bcd60e51b8152600401610d32906144c1565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314611f4d5760405162461bcd60e51b8152600401610d32906144c1565b6001600160a01b038316611fa35760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610d32565b6001600160a01b038316301415611ffc5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610d32565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015612043573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206791906145c3565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156120ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120de91906145dc565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b031633146121545760405162461bcd60e51b8152600401610d32906144c1565b6026546001600160a01b03838116911614156121d85760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610d32565b61149f8282613701565b3360009081526006602090815260408083206001600160a01b0386168452909152812054828110156122645760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d32565b6122713385858403612afa565b5060019392505050565b6000610e6d338484612c1e565b6000546001600160a01b031633146122b25760405162461bcd60e51b8152600401610d32906144c1565b60268054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061175890831515815260200190565b6000546001600160a01b031633146123295760405162461bcd60e51b8152600401610d32906144c1565b6008805460ff191690556040517fa29c2b578a5a679452d146ddd35ea04a2e7c57fe555cc7a3d91b3b8b06e6103d90600090a1565b6000546001600160a01b031633146123885760405162461bcd60e51b8152600401610d32906144c1565b6001600160a01b038116600081815260096020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e9101611758565b6000546001600160a01b031633146124035760405162461bcd60e51b8152600401610d32906144c1565b602654600160b01b900460ff16156124715760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610d32565b600a81106124d15760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610d32565b6124d961375c565b815183511461252a5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610d32565b60c883511061259a5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610d32565b60005b83518110156126025760008482815181106125ba576125ba614565565b6020026020010151905060008483815181106125d8576125d8614565565b602002602001015190506125ed338383612c1e565b505080806125fa906145a8565b91505061259d565b5061271061261c6a52b7d2dcc80cd2e4000000600361450c565b612626919061452b565b6020556026805461ffff60a81b191661010160a81b17905543601a81905561264f90829061454d565b601b556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1602580546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a01559160048083019260209291908290030181865afa1580156126e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061270491906145f9565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612751573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061277591906145f9565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156127c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e691906145f9565b602680546001600160a01b0319166001600160a01b03929092169182179055612810906001611ecd565b602654612827906001600160a01b03166001613701565b600047116128835760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610d32565b600061288e30611d9a565b116128ea5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610d32565b6025546129059030906001600160a01b03166114da82611d9a565b6025546001600160a01b031663f305d719473061292181611d9a565b60008033426040518863ffffffff1660e01b815260040161294796959493929190614616565b60606040518083038185885af1158015612965573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061298a9190614651565b50505061299e600f54600e55601254601155565b50505050565b6000546001600160a01b031633146129ce5760405162461bcd60e51b8152600401610d32906144c1565b6001600160a01b038116612a335760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d32565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314612ab85760405162461bcd60e51b8152600401610d32906144c1565b604051600090339047908381818185875af1925050503d806000811461299e576040519150601f19603f3d011682016040523d82523d6000602084013e61299e565b6001600160a01b038316612b5c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d32565b6001600160a01b038216612bbd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d32565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612c825760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d32565b6001600160a01b038216612ce45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d32565b60008111612d465760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610d32565b602654600160b01b900460ff16612de2576001600160a01b03831660009081526009602052604090205460ff1680612d9657506001600160a01b03821660009081526009602052604090205460ff165b612de25760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610d32565b601b544310612eb6576001600160a01b0383166000908152601c602052604090205460ff161580612e2057506000546001600160a01b038381169116145b80612e3557506001600160a01b03821661dead145b612eb65760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610d32565b600854610100900460ff16156131c4576000546001600160a01b03848116911614801590612ef257506000546001600160a01b03838116911614155b8015612f0657506001600160a01b03821615155b8015612f1d57506001600160a01b03821661dead14155b8015612f335750602654600160a01b900460ff16155b156131c45760085460ff1615613052576025546001600160a01b03838116911614801590612f6f57506026546001600160a01b03838116911614155b15613052573260009081526007602052604090205443118015612fa957506001600160a01b03821660009081526007602052604090205443115b61302d5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610d32565b3260009081526007602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526023602052604090205460ff16801561309357506001600160a01b03821660009081526021602052604090205460ff16155b1561310d576020548111156131085760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610d32565b6131c4565b6001600160a01b03821660009081526023602052604090205460ff16801561314e57506001600160a01b03831660009081526021602052604090205460ff16155b156131c4576020548111156131c45760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610d32565b60006131cf30611d9a565b60245460265491925082101590600160a01b900460ff161580156131fc5750602654600160a81b900460ff165b801561321d575060265460009061321b906001600160a01b0316611d9a565b115b801561324257506001600160a01b03841660009081526009602052604090205460ff16155b801561326757506001600160a01b03851660009081526009602052604090205460ff16155b801561328b57506001600160a01b03841660009081526023602052604090205460ff165b80156132945750805b156132a1576132a1613531565b6132a961375c565b60036013556001600160a01b03851660009081526009602052604090205460ff161580156132f057506001600160a01b03841660009081526009602052604090205460ff16155b1561349c57601b544310801561331e57506001600160a01b03851660009081526023602052604090205460ff165b801561334357506001600160a01b03841660009081526023602052604090205460ff16155b15613409576001600160a01b0384166000908152601c602052604090205460ff166133e3576001600160a01b0384166000908152601c60205260408120805460ff19166001908117909155601d8054919290916133a190849061454d565b90915550506040516001600160a01b03851681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b601454600e556016546015546133f9919061454d565b6011819055156134095760016013555b6001600160a01b03851660009081526023602052604090205460ff161561345557601454600e55601654601554613440919061454d565b6011819055156134505760016013555b61349c565b6001600160a01b03841660009081526023602052604090205460ff161561349c57601754600e5560195460185461348c919061454d565b60118190551561349c5760026013555b6134a785858561378a565b6134b8600f54600e55601254601155565b5050505050565b60008060006134cc61388c565b90925090506134db818361452b565b9250505090565b60008060008060008060008060006134f98a613a31565b92509250925060008060006135178d86866135126134bf565b613a74565b919f909e50909c50959a5093985091965092945050505050565b6026805460ff60a01b1916600160a01b179055600061354f30611d9a565b90506000601f54601e54613563919061454d565b905060006024546014613576919061450c565b831061358d5760245461358a90601461450c565b92505b821580613598575081155b156135a5575050506136f2565b6000600283601e54866135b8919061450c565b6135c2919061452b565b6135cc919061452b565b905060006135da828661457b565b90506135e581613acb565b601e5447906000906135f99060029061452b565b613603908761457b565b601f54613610908461450c565b61361a919061452b565b90506000613628828461457b565b6000601e819055601f55905084158015906136435750600081115b15613694576136528582613c25565b60408051858152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6002546040516001600160a01b03909116904790600081818185875af1925050503d80600081146136e1576040519150601f19603f3d011682016040523d82523d6000602084013e6136e6565b606091505b50505050505050505050505b6026805460ff60a01b19169055565b6001600160a01b038216600090815260236020908152604080832080548515801560ff199283168117909355602190945291909320805490911690921790915561374e5761374e826119da565b8061149f5761149f826112ec565b600e5415801561376c5750601154155b1561377357565b600e8054600f556011805460125560009182905555565b6001600160a01b0383166000908152600a602052604090205460ff1680156137cb57506001600160a01b0382166000908152600a602052604090205460ff16155b156137e0576137db838383613cbf565b505050565b6001600160a01b0383166000908152600a602052604090205460ff1615801561382157506001600160a01b0382166000908152600a602052604090205460ff165b15613831576137db838383613de8565b6001600160a01b0383166000908152600a602052604090205460ff16801561387157506001600160a01b0382166000908152600a602052604090205460ff165b15613881576137db838383613e94565b6137db838383613f09565b600c5460009081906a52b7d2dcc80cd2e4000000825b600b548110156139ef578260046000600b84815481106138c4576138c4614565565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061392f57508160056000600b848154811061390857613908614565565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561394d575050600c54936a52b7d2dcc80cd2e40000009350915050565b60046000600b838154811061396457613964614565565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613993908461457b565b925060056000600b83815481106139ac576139ac614565565b60009182526020808320909101546001600160a01b031683528201929092526040019020546139db908361457b565b9150806139e7816145a8565b9150506138a2565b506a52b7d2dcc80cd2e4000000600c54613a09919061452b565b821015613a28575050600c54926a52b7d2dcc80cd2e400000092509050565b90939092509050565b600080600080613a4085613f4e565b90506000613a4d86613f6b565b9050600081613a5c848961457b565b613a66919061457b565b979296509094509092505050565b6000808080613a83858961450c565b90506000613a91868961450c565b90506000613a9f878961450c565b9050600081613aae848661457b565b613ab8919061457b565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613b0057613b00614565565b6001600160a01b03928316602091820292909201810191909152602554604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613b59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b7d91906145f9565b81600181518110613b9057613b90614565565b6001600160a01b039283166020918202929092010152602554613bb69130911684612afa565b60255460405163791ac94760e01b81526001600160a01b039091169063791ac94790613bef90859060009086903090429060040161467f565b600060405180830381600087803b158015613c0957600080fd5b505af1158015613c1d573d6000803e3d6000fd5b505050505050565b602554613c3d9030906001600160a01b031684612afa565b60255460405163f305d71960e01b81526001600160a01b039091169063f305d719908390613c7c9030908790600090819061dead904290600401614616565b60606040518083038185885af1158015613c9a573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134b89190614651565b600080600080600080613cd1876134e2565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150613d0490889061457b565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054613d3490879061457b565b6001600160a01b03808b1660009081526004602052604080822093909355908a1681522054613d6490869061454d565b6001600160a01b038916600090815260046020526040902055613d8681613f7e565b613d9084836140e5565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613dd591815260200190565b60405180910390a3505050505050505050565b600080600080600080613dfa876134e2565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613e2d90879061457b565b6001600160a01b03808b16600090815260046020908152604080832094909455918b16815260059091522054613e6490849061454d565b6001600160a01b038916600090815260056020908152604080832093909355600490522054613d6490869061454d565b600080600080600080613ea6876134e2565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150613ed990889061457b565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054613e2d90879061457b565b600080600080600080613f1b876134e2565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613d3490879061457b565b6000612710600e5483613f61919061450c565b610e71919061452b565b600061271060115483613f61919061450c565b60016013541415613fef57601154601554613f99908361450c565b613fa3919061452b565b601e6000828254613fb4919061454d565b9091555050601154601654613fc9908361450c565b613fd3919061452b565b601f6000828254613fe4919061454d565b9091555061405b9050565b6002601354141561405b5760115460185461400a908361450c565b614014919061452b565b601e6000828254614025919061454d565b909155505060115460195461403a908361450c565b614044919061452b565b601f6000828254614055919061454d565b90915550505b60006140656134bf565b90506000614073828461450c565b3060009081526004602052604090205490915061409190829061454d565b30600090815260046020908152604080832093909355600a9052205460ff16156137db57306000908152600560205260409020546140d090849061454d565b30600090815260056020526040902055505050565b81600c546140f3919061457b565b600c55600d5461410490829061454d565b600d555050565b600060208083528351808285015260005b818110156141385785810183015185820160400152820161411c565b8181111561414a576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561417257600080fd5b5035919050565b6001600160a01b038116811461418e57600080fd5b50565b600080604083850312156141a457600080fd5b82356141af81614179565b946020939093013593505050565b600080604083850312156141d057600080fd5b50508035926020909101359150565b6000602082840312156141f157600080fd5b81356112e581614179565b60008060006060848603121561421157600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561423d57600080fd5b833561424881614179565b9250602084013561425881614179565b929592945050506040919091013590565b801515811461418e57600080fd5b6000806040838503121561428a57600080fd5b82359150602083013561429c81614269565b809150509250929050565b600080604083850312156142ba57600080fd5b82356142c581614179565b9150602083013561429c81614269565b600080604083850312156142e857600080fd5b82356142f381614179565b9150602083013561429c81614179565b60006020828403121561431557600080fd5b81356112e581614269565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561435f5761435f614320565b604052919050565b600067ffffffffffffffff82111561438157614381614320565b5060051b60200190565b600082601f83011261439c57600080fd5b813560206143b16143ac83614367565b614336565b82815260059290921b840181019181810190868411156143d057600080fd5b8286015b848110156143eb57803583529183019183016143d4565b509695505050505050565b60008060006060848603121561440b57600080fd5b833567ffffffffffffffff8082111561442357600080fd5b818601915086601f83011261443757600080fd5b813560206144476143ac83614367565b82815260059290921b8401810191818101908a84111561446657600080fd5b948201945b8386101561448d57853561447e81614179565b8252948201949082019061446b565b975050870135925050808211156144a357600080fd5b506144b08682870161438b565b925050604084013590509250925092565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615614526576145266144f6565b500290565b60008261454857634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115614560576145606144f6565b500190565b634e487b7160e01b600052603260045260246000fd5b60008282101561458d5761458d6144f6565b500390565b634e487b7160e01b600052603160045260246000fd5b60006000198214156145bc576145bc6144f6565b5060010190565b6000602082840312156145d557600080fd5b5051919050565b6000602082840312156145ee57600080fd5b81516112e581614269565b60006020828403121561460b57600080fd5b81516112e581614179565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561466657600080fd5b8351925060208401519150604084015190509250925092565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156146cf5784516001600160a01b0316835293830193918301916001016146aa565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212209096988282910edfa04a26ea9cfbda1d4a63678a5406c98135580e68c4e2b97164736f6c634300080b00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed Bytecode

0x60806040526004361061041f5760003560e01c80636902ca611161021e578063a9059cbb11610123578063e884f260116100ab578063ee40166e1161007a578063ee40166e14610c91578063efcc52de14610ca7578063f2fde38b14610cbd578063f5648a4f14610cdd578063f8b45b0514610cf257600080fd5b8063e884f26014610c1c578063ea2f0b3714610c31578063ea4cfe1214610c51578063ead010ae14610c7157600080fd5b8063c876d0b9116100f2578063c876d0b914610b7a578063c8c8ebe414610b94578063dc44b6a014610baa578063dd62ed3e14610bc0578063e82a416d14610c0657600080fd5b8063a9059cbb14610ae9578063b62496f514610b09578063bbc0c74214610b39578063c49b9a8014610b5a57600080fd5b806385ecfd28116101a657806395d89b411161017557806395d89b4114610a525780639a7a23d614610a7e578063a073d37f14610a9e578063a457c2d714610ab3578063a62068ce14610ad357600080fd5b806385ecfd28146109b557806388790a68146109e557806388f82020146109fb5780638da5cb5b14610a3457600080fd5b8063715018a6116101ed578063715018a61461092a578063751039fc1461093f5780637571336a146109545780637c08fcd0146109745780638366e79a1461099557600080fd5b80636902ca61146108ca5780636b0a894c146108df5780636bd62d7d146108f557806370a082311461090a57600080fd5b80633950935111610324578063499b8394116102ac57806352390c021161027b57806352390c02146108275780635342acb414610847578063557ed1ba1461088057806358a6d531146108935780635bb988c9146108aa57600080fd5b8063499b8394146107b25780634a62bb65146107d25780634a74bb02146107f157806351f205e41461081257600080fd5b806340755c79116102f357806340755c791461071c578063416381ea1461073c578063437823ec14610752578063452ed4f1146107725780634549b0391461079257600080fd5b806339509351146106b15780633951e44e146106d15780633ad10ef6146106e65780634047ea3e1461070657600080fd5b80631c68372d116103a757806325519cf21161037657806325519cf2146106145780632a5f43ad146106345780632d83811914610655578063313ce567146106755780633685d4191461069157600080fd5b80631c68372d146105a85780631d865c30146105be578063200a692d146105de57806323b872dd146105f457600080fd5b80630a840713116103ee5780630a840713146104fb578063106b5da11461051b57806310d5de531461053b57806313114a9d1461056b57806318160ddd1461058a57600080fd5b806306fdde031461042b5780630758d9241461047157806308043751146104a9578063095ea7b3146104cb57600080fd5b3661042657005b600080fd5b34801561043757600080fd5b5060408051808201909152600b81526a04b61697a656e20436f72760ac1b60208201525b604051610468919061410b565b60405180910390f35b34801561047d57600080fd5b50602554610491906001600160a01b031681565b6040516001600160a01b039091168152602001610468565b3480156104b557600080fd5b506104c96104c4366004614160565b610d08565b005b3480156104d757600080fd5b506104eb6104e6366004614191565b610e60565b6040519015158152602001610468565b34801561050757600080fd5b506104c96105163660046141bd565b610e77565b34801561052757600080fd5b506104c9610536366004614160565b610f1c565b34801561054757600080fd5b506104eb6105563660046141df565b60216020526000908152604090205460ff1681565b34801561057757600080fd5b50600d545b604051908152602001610468565b34801561059657600080fd5b506a52b7d2dcc80cd2e400000061057c565b3480156105b457600080fd5b5061057c60195481565b3480156105ca57600080fd5b506104c96105d93660046141fc565b610ffb565b3480156105ea57600080fd5b5061057c60175481565b34801561060057600080fd5b506104eb61060f366004614228565b6110e1565b34801561062057600080fd5b506104c961062f3660046141fc565b61118b565b34801561064057600080fd5b506026546104eb90600160b81b900460ff1681565b34801561066157600080fd5b5061057c610670366004614160565b611268565b34801561068157600080fd5b5060405160128152602001610468565b34801561069d57600080fd5b506104c96106ac3660046141df565b6112ec565b3480156106bd57600080fd5b506104eb6106cc366004614191565b6114a3565b3480156106dd57600080fd5b506104c96114df565b3480156106f257600080fd5b50600354610491906001600160a01b031681565b34801561071257600080fd5b5061057c601e5481565b34801561072857600080fd5b506104c96107373660046141df565b6115b4565b34801561074857600080fd5b5061057c601f5481565b34801561075e57600080fd5b506104c961076d3660046141df565b6116de565b34801561077e57600080fd5b50602654610491906001600160a01b031681565b34801561079e57600080fd5b5061057c6107ad366004614277565b611763565b3480156107be57600080fd5b506104c96107cd3660046141df565b6117f9565b3480156107de57600080fd5b506008546104eb90610100900460ff1681565b3480156107fd57600080fd5b506026546104eb90600160a81b900460ff1681565b34801561081e57600080fd5b506104c9611906565b34801561083357600080fd5b506104c96108423660046141df565b6119da565b34801561085357600080fd5b506104eb6108623660046141df565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561088c57600080fd5b504261057c565b34801561089f57600080fd5b50601b5443106104eb565b3480156108b657600080fd5b506104c96108c53660046141df565b611bc8565b3480156108d657600080fd5b506104c9611c7b565b3480156108eb57600080fd5b5061057c601d5481565b34801561090157600080fd5b506104c9611cdf565b34801561091657600080fd5b5061057c6109253660046141df565b611d9a565b34801561093657600080fd5b506104c9611df9565b34801561094b57600080fd5b506104c9611e6d565b34801561096057600080fd5b506104c961096f3660046142a7565b611ecd565b34801561098057600080fd5b506026546104eb90600160c01b900460ff1681565b3480156109a157600080fd5b506104eb6109b03660046142d5565b611f22565b3480156109c157600080fd5b506104eb6109d03660046141df565b601c6020526000908152604090205460ff1681565b3480156109f157600080fd5b5061057c60185481565b348015610a0757600080fd5b506104eb610a163660046141df565b6001600160a01b03166000908152600a602052604090205460ff1690565b348015610a4057600080fd5b506000546001600160a01b0316610491565b348015610a5e57600080fd5b5060408051808201909152600381526225ad2760e91b602082015261045b565b348015610a8a57600080fd5b506104c9610a993660046142a7565b61212a565b348015610aaa57600080fd5b5060245461057c565b348015610abf57600080fd5b506104eb610ace366004614191565b6121e2565b348015610adf57600080fd5b5061057c601b5481565b348015610af557600080fd5b506104eb610b04366004614191565b61227b565b348015610b1557600080fd5b506104eb610b243660046141df565b60236020526000908152604090205460ff1681565b348015610b4557600080fd5b506026546104eb90600160b01b900460ff1681565b348015610b6657600080fd5b506104c9610b75366004614303565b612288565b348015610b8657600080fd5b506008546104eb9060ff1681565b348015610ba057600080fd5b5061057c60205481565b348015610bb657600080fd5b5061057c60155481565b348015610bcc57600080fd5b5061057c610bdb3660046142d5565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610c1257600080fd5b5061057c60165481565b348015610c2857600080fd5b506104c96122ff565b348015610c3d57600080fd5b506104c9610c4c3660046141df565b61235e565b348015610c5d57600080fd5b50600254610491906001600160a01b031681565b348015610c7d57600080fd5b506104c9610c8c3660046143f6565b6123d9565b348015610c9d57600080fd5b5061057c601a5481565b348015610cb357600080fd5b5061057c60145481565b348015610cc957600080fd5b506104c9610cd83660046141df565b6129a4565b348015610ce957600080fd5b506104c9612a8e565b348015610cfe57600080fd5b5061057c60225481565b6000546001600160a01b03163314610d3b5760405162461bcd60e51b8152600401610d32906144c1565b60405180910390fd5b620186a0610d556a52b7d2dcc80cd2e4000000600161450c565b610d5f919061452b565b811015610dcc5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610d32565b6103e8610de56a52b7d2dcc80cd2e4000000600561450c565b610def919061452b565b811115610e5b5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610d32565b602455565b6000610e6d338484612afa565b5060015b92915050565b6000546001600160a01b03163314610ea15760405162461bcd60e51b8152600401610d32906144c1565b602654600160b81b900460ff16610efa5760405162461bcd60e51b815260206004820181905260248201527f4869676820746178206d6f64652064697361626c656420666f722065766572216044820152606401610d32565b6064601481905560006015819055601693909355601755601891909155601955565b6000546001600160a01b03163314610f465760405162461bcd60e51b8152600401610d32906144c1565b670de0b6b3a76400006103e8610f686a52b7d2dcc80cd2e4000000600261450c565b610f72919061452b565b610f7c919061452b565b811015610fe35760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e322560881b6064820152608401610d32565b610ff581670de0b6b3a764000061450c565b60205550565b6000546001600160a01b031633146110255760405162461bcd60e51b8152600401610d32906144c1565b6017839055601882905560198190556107d081611042848661454d565b61104c919061454d565b111561109a5760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772032302500006044820152606401610d32565b60408051828152602081018490529081018490527f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3906060015b60405180910390a1505050565b60006110ee848484612c1e565b6001600160a01b0384166000908152600660209081526040808320338452909152902054828110156111735760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610d32565b6111808533858403612afa565b506001949350505050565b6000546001600160a01b031633146111b55760405162461bcd60e51b8152600401610d32906144c1565b6014839055601582905560168190556105dc816111d2848661454d565b6111dc919061454d565b111561122a5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203135250000006044820152606401610d32565b60408051828152602081018490529081018490527f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a773620906060016110d4565b6000600c548211156112cf5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610d32565b60006112d96134bf565b90506112e5818461452b565b9392505050565b6000546001600160a01b031633146113165760405162461bcd60e51b8152600401610d32906144c1565b6001600160a01b0381166000908152600a602052604090205460ff1661137e5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610d32565b60005b600b5481101561149f57816001600160a01b0316600b82815481106113a8576113a8614565565b6000918252602090912001546001600160a01b0316141561148d57600b80546113d39060019061457b565b815481106113e3576113e3614565565b600091825260209091200154600b80546001600160a01b03909216918390811061140f5761140f614565565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600a90925220805460ff19169055600b80548061146757611467614592565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611497816145a8565b915050611381565b5050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610e6d9185906114da90869061454d565b612afa565b6000546001600160a01b031633146115095760405162461bcd60e51b8152600401610d32906144c1565b602654600160c01b900460ff1661157c5760405162461bcd60e51b815260206004820152603160248201527f466c616720626f742066756e6374696f6e616c69747920616c72656164792064604482015270697361626c656420666f7265766572212160781b6064820152608401610d32565b6026805460ff60c01b191690556040517f22c1cd64208eea310c0d79c89dad2d9d37c7e96e622d0a53669aa46e84572c7b90600090a1565b6000546001600160a01b031633146115de5760405162461bcd60e51b8152600401610d32906144c1565b602654600160c01b900460ff166116515760405162461bcd60e51b815260206004820152603160248201527f466c616720626f742066756e6374696f6e616c69747920686173206265656e2060448201527064697361626c656420666f72657665722160781b6064820152608401610d32565b6001600160a01b0381166000908152601c602052604090205460ff16156116ba5760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610d32565b6001600160a01b03166000908152601c60205260409020805460ff19166001179055565b6000546001600160a01b031633146117085760405162461bcd60e51b8152600401610d32906144c1565b6001600160a01b038116600081815260096020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291015b60405180910390a150565b60006a52b7d2dcc80cd2e40000008311156117c05760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610d32565b816117df5760006117d0846134e2565b50939550610e71945050505050565b60006117ea846134e2565b50929550610e71945050505050565b6000546001600160a01b031633146118235760405162461bcd60e51b8152600401610d32906144c1565b6001600160a01b0381166118885760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610d32565b600280546001600160a01b039081166000908152600960209081526040808320805460ff1990811690915585546001600160a01b031916948716948517909555838352918290208054909416600117909355519081527f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d29829101611758565b6000546001600160a01b031633146119305760405162461bcd60e51b8152600401610d32906144c1565b600061193b30611d9a565b90506024548110156119a25760405162461bcd60e51b815260206004820152602a60248201527f43616e206f6e6c792073776170206261636b2069662061626f766520746865206044820152693a343932b9b437b6321760b11b6064820152608401610d32565b6119aa613531565b6040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb3290602001611758565b6000546001600160a01b03163314611a045760405162461bcd60e51b8152600401610d32906144c1565b6001600160a01b0381166000908152600a602052604090205460ff1615611a6d5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610d32565b600b54603290611a7e90600161454d565b1115611b085760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610d32565b6001600160a01b03811660009081526004602052604090205415611b62576001600160a01b038116600090815260046020526040902054611b4890611268565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6000546001600160a01b03163314611bf25760405162461bcd60e51b8152600401610d32906144c1565b6001600160a01b0381166000908152601c602052604090205460ff16611c5a5760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610d32565b6001600160a01b03166000908152601c60205260409020805460ff19169055565b6000546001600160a01b03163314611ca55760405162461bcd60e51b8152600401610d32906144c1565b6008805461ff0019166101001790556040517f10d778167c503500f2cf7f114521871c5ab9b6ac8e63dfc9284c73e05d94b49690600090a1565b6000546001600160a01b03163314611d095760405162461bcd60e51b8152600401610d32906144c1565b602654600160b81b900460ff16611d625760405162461bcd60e51b815260206004820181905260248201527f4869676820746178206d6f646520616c72656164792064697361626c656421216044820152606401610d32565b6026805460ff60b81b191690556040517fca3625aacc6ff58610754d78cf8e59adacd2752c6d6292edcb6068d395997ba090600090a1565b6001600160a01b0381166000908152600a602052604081205460ff1615611dd757506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610e7190611268565b6000546001600160a01b03163314611e235760405162461bcd60e51b8152600401610d32906144c1565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611e975760405162461bcd60e51b8152600401610d32906144c1565b6008805461ffff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6000546001600160a01b03163314611ef75760405162461bcd60e51b8152600401610d32906144c1565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314611f4d5760405162461bcd60e51b8152600401610d32906144c1565b6001600160a01b038316611fa35760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610d32565b6001600160a01b038316301415611ffc5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610d32565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015612043573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206791906145c3565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156120ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120de91906145dc565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b031633146121545760405162461bcd60e51b8152600401610d32906144c1565b6026546001600160a01b03838116911614156121d85760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610d32565b61149f8282613701565b3360009081526006602090815260408083206001600160a01b0386168452909152812054828110156122645760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d32565b6122713385858403612afa565b5060019392505050565b6000610e6d338484612c1e565b6000546001600160a01b031633146122b25760405162461bcd60e51b8152600401610d32906144c1565b60268054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061175890831515815260200190565b6000546001600160a01b031633146123295760405162461bcd60e51b8152600401610d32906144c1565b6008805460ff191690556040517fa29c2b578a5a679452d146ddd35ea04a2e7c57fe555cc7a3d91b3b8b06e6103d90600090a1565b6000546001600160a01b031633146123885760405162461bcd60e51b8152600401610d32906144c1565b6001600160a01b038116600081815260096020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e9101611758565b6000546001600160a01b031633146124035760405162461bcd60e51b8152600401610d32906144c1565b602654600160b01b900460ff16156124715760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610d32565b600a81106124d15760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610d32565b6124d961375c565b815183511461252a5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610d32565b60c883511061259a5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610d32565b60005b83518110156126025760008482815181106125ba576125ba614565565b6020026020010151905060008483815181106125d8576125d8614565565b602002602001015190506125ed338383612c1e565b505080806125fa906145a8565b91505061259d565b5061271061261c6a52b7d2dcc80cd2e4000000600361450c565b612626919061452b565b6020556026805461ffff60a81b191661010160a81b17905543601a81905561264f90829061454d565b601b556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1602580546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a01559160048083019260209291908290030181865afa1580156126e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061270491906145f9565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612751573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061277591906145f9565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156127c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e691906145f9565b602680546001600160a01b0319166001600160a01b03929092169182179055612810906001611ecd565b602654612827906001600160a01b03166001613701565b600047116128835760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610d32565b600061288e30611d9a565b116128ea5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610d32565b6025546129059030906001600160a01b03166114da82611d9a565b6025546001600160a01b031663f305d719473061292181611d9a565b60008033426040518863ffffffff1660e01b815260040161294796959493929190614616565b60606040518083038185885af1158015612965573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061298a9190614651565b50505061299e600f54600e55601254601155565b50505050565b6000546001600160a01b031633146129ce5760405162461bcd60e51b8152600401610d32906144c1565b6001600160a01b038116612a335760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d32565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314612ab85760405162461bcd60e51b8152600401610d32906144c1565b604051600090339047908381818185875af1925050503d806000811461299e576040519150601f19603f3d011682016040523d82523d6000602084013e61299e565b6001600160a01b038316612b5c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d32565b6001600160a01b038216612bbd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d32565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612c825760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d32565b6001600160a01b038216612ce45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d32565b60008111612d465760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610d32565b602654600160b01b900460ff16612de2576001600160a01b03831660009081526009602052604090205460ff1680612d9657506001600160a01b03821660009081526009602052604090205460ff165b612de25760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610d32565b601b544310612eb6576001600160a01b0383166000908152601c602052604090205460ff161580612e2057506000546001600160a01b038381169116145b80612e3557506001600160a01b03821661dead145b612eb65760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610d32565b600854610100900460ff16156131c4576000546001600160a01b03848116911614801590612ef257506000546001600160a01b03838116911614155b8015612f0657506001600160a01b03821615155b8015612f1d57506001600160a01b03821661dead14155b8015612f335750602654600160a01b900460ff16155b156131c45760085460ff1615613052576025546001600160a01b03838116911614801590612f6f57506026546001600160a01b03838116911614155b15613052573260009081526007602052604090205443118015612fa957506001600160a01b03821660009081526007602052604090205443115b61302d5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610d32565b3260009081526007602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526023602052604090205460ff16801561309357506001600160a01b03821660009081526021602052604090205460ff16155b1561310d576020548111156131085760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610d32565b6131c4565b6001600160a01b03821660009081526023602052604090205460ff16801561314e57506001600160a01b03831660009081526021602052604090205460ff16155b156131c4576020548111156131c45760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610d32565b60006131cf30611d9a565b60245460265491925082101590600160a01b900460ff161580156131fc5750602654600160a81b900460ff165b801561321d575060265460009061321b906001600160a01b0316611d9a565b115b801561324257506001600160a01b03841660009081526009602052604090205460ff16155b801561326757506001600160a01b03851660009081526009602052604090205460ff16155b801561328b57506001600160a01b03841660009081526023602052604090205460ff165b80156132945750805b156132a1576132a1613531565b6132a961375c565b60036013556001600160a01b03851660009081526009602052604090205460ff161580156132f057506001600160a01b03841660009081526009602052604090205460ff16155b1561349c57601b544310801561331e57506001600160a01b03851660009081526023602052604090205460ff165b801561334357506001600160a01b03841660009081526023602052604090205460ff16155b15613409576001600160a01b0384166000908152601c602052604090205460ff166133e3576001600160a01b0384166000908152601c60205260408120805460ff19166001908117909155601d8054919290916133a190849061454d565b90915550506040516001600160a01b03851681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b601454600e556016546015546133f9919061454d565b6011819055156134095760016013555b6001600160a01b03851660009081526023602052604090205460ff161561345557601454600e55601654601554613440919061454d565b6011819055156134505760016013555b61349c565b6001600160a01b03841660009081526023602052604090205460ff161561349c57601754600e5560195460185461348c919061454d565b60118190551561349c5760026013555b6134a785858561378a565b6134b8600f54600e55601254601155565b5050505050565b60008060006134cc61388c565b90925090506134db818361452b565b9250505090565b60008060008060008060008060006134f98a613a31565b92509250925060008060006135178d86866135126134bf565b613a74565b919f909e50909c50959a5093985091965092945050505050565b6026805460ff60a01b1916600160a01b179055600061354f30611d9a565b90506000601f54601e54613563919061454d565b905060006024546014613576919061450c565b831061358d5760245461358a90601461450c565b92505b821580613598575081155b156135a5575050506136f2565b6000600283601e54866135b8919061450c565b6135c2919061452b565b6135cc919061452b565b905060006135da828661457b565b90506135e581613acb565b601e5447906000906135f99060029061452b565b613603908761457b565b601f54613610908461450c565b61361a919061452b565b90506000613628828461457b565b6000601e819055601f55905084158015906136435750600081115b15613694576136528582613c25565b60408051858152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6002546040516001600160a01b03909116904790600081818185875af1925050503d80600081146136e1576040519150601f19603f3d011682016040523d82523d6000602084013e6136e6565b606091505b50505050505050505050505b6026805460ff60a01b19169055565b6001600160a01b038216600090815260236020908152604080832080548515801560ff199283168117909355602190945291909320805490911690921790915561374e5761374e826119da565b8061149f5761149f826112ec565b600e5415801561376c5750601154155b1561377357565b600e8054600f556011805460125560009182905555565b6001600160a01b0383166000908152600a602052604090205460ff1680156137cb57506001600160a01b0382166000908152600a602052604090205460ff16155b156137e0576137db838383613cbf565b505050565b6001600160a01b0383166000908152600a602052604090205460ff1615801561382157506001600160a01b0382166000908152600a602052604090205460ff165b15613831576137db838383613de8565b6001600160a01b0383166000908152600a602052604090205460ff16801561387157506001600160a01b0382166000908152600a602052604090205460ff165b15613881576137db838383613e94565b6137db838383613f09565b600c5460009081906a52b7d2dcc80cd2e4000000825b600b548110156139ef578260046000600b84815481106138c4576138c4614565565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061392f57508160056000600b848154811061390857613908614565565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561394d575050600c54936a52b7d2dcc80cd2e40000009350915050565b60046000600b838154811061396457613964614565565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613993908461457b565b925060056000600b83815481106139ac576139ac614565565b60009182526020808320909101546001600160a01b031683528201929092526040019020546139db908361457b565b9150806139e7816145a8565b9150506138a2565b506a52b7d2dcc80cd2e4000000600c54613a09919061452b565b821015613a28575050600c54926a52b7d2dcc80cd2e400000092509050565b90939092509050565b600080600080613a4085613f4e565b90506000613a4d86613f6b565b9050600081613a5c848961457b565b613a66919061457b565b979296509094509092505050565b6000808080613a83858961450c565b90506000613a91868961450c565b90506000613a9f878961450c565b9050600081613aae848661457b565b613ab8919061457b565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613b0057613b00614565565b6001600160a01b03928316602091820292909201810191909152602554604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613b59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b7d91906145f9565b81600181518110613b9057613b90614565565b6001600160a01b039283166020918202929092010152602554613bb69130911684612afa565b60255460405163791ac94760e01b81526001600160a01b039091169063791ac94790613bef90859060009086903090429060040161467f565b600060405180830381600087803b158015613c0957600080fd5b505af1158015613c1d573d6000803e3d6000fd5b505050505050565b602554613c3d9030906001600160a01b031684612afa565b60255460405163f305d71960e01b81526001600160a01b039091169063f305d719908390613c7c9030908790600090819061dead904290600401614616565b60606040518083038185885af1158015613c9a573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134b89190614651565b600080600080600080613cd1876134e2565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150613d0490889061457b565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054613d3490879061457b565b6001600160a01b03808b1660009081526004602052604080822093909355908a1681522054613d6490869061454d565b6001600160a01b038916600090815260046020526040902055613d8681613f7e565b613d9084836140e5565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613dd591815260200190565b60405180910390a3505050505050505050565b600080600080600080613dfa876134e2565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613e2d90879061457b565b6001600160a01b03808b16600090815260046020908152604080832094909455918b16815260059091522054613e6490849061454d565b6001600160a01b038916600090815260056020908152604080832093909355600490522054613d6490869061454d565b600080600080600080613ea6876134e2565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150613ed990889061457b565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054613e2d90879061457b565b600080600080600080613f1b876134e2565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613d3490879061457b565b6000612710600e5483613f61919061450c565b610e71919061452b565b600061271060115483613f61919061450c565b60016013541415613fef57601154601554613f99908361450c565b613fa3919061452b565b601e6000828254613fb4919061454d565b9091555050601154601654613fc9908361450c565b613fd3919061452b565b601f6000828254613fe4919061454d565b9091555061405b9050565b6002601354141561405b5760115460185461400a908361450c565b614014919061452b565b601e6000828254614025919061454d565b909155505060115460195461403a908361450c565b614044919061452b565b601f6000828254614055919061454d565b90915550505b60006140656134bf565b90506000614073828461450c565b3060009081526004602052604090205490915061409190829061454d565b30600090815260046020908152604080832093909355600a9052205460ff16156137db57306000908152600560205260409020546140d090849061454d565b30600090815260056020526040902055505050565b81600c546140f3919061457b565b600c55600d5461410490829061454d565b600d555050565b600060208083528351808285015260005b818110156141385785810183015185820160400152820161411c565b8181111561414a576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561417257600080fd5b5035919050565b6001600160a01b038116811461418e57600080fd5b50565b600080604083850312156141a457600080fd5b82356141af81614179565b946020939093013593505050565b600080604083850312156141d057600080fd5b50508035926020909101359150565b6000602082840312156141f157600080fd5b81356112e581614179565b60008060006060848603121561421157600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561423d57600080fd5b833561424881614179565b9250602084013561425881614179565b929592945050506040919091013590565b801515811461418e57600080fd5b6000806040838503121561428a57600080fd5b82359150602083013561429c81614269565b809150509250929050565b600080604083850312156142ba57600080fd5b82356142c581614179565b9150602083013561429c81614269565b600080604083850312156142e857600080fd5b82356142f381614179565b9150602083013561429c81614179565b60006020828403121561431557600080fd5b81356112e581614269565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561435f5761435f614320565b604052919050565b600067ffffffffffffffff82111561438157614381614320565b5060051b60200190565b600082601f83011261439c57600080fd5b813560206143b16143ac83614367565b614336565b82815260059290921b840181019181810190868411156143d057600080fd5b8286015b848110156143eb57803583529183019183016143d4565b509695505050505050565b60008060006060848603121561440b57600080fd5b833567ffffffffffffffff8082111561442357600080fd5b818601915086601f83011261443757600080fd5b813560206144476143ac83614367565b82815260059290921b8401810191818101908a84111561446657600080fd5b948201945b8386101561448d57853561447e81614179565b8252948201949082019061446b565b975050870135925050808211156144a357600080fd5b506144b08682870161438b565b925050604084013590509250925092565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615614526576145266144f6565b500290565b60008261454857634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115614560576145606144f6565b500190565b634e487b7160e01b600052603260045260246000fd5b60008282101561458d5761458d6144f6565b500390565b634e487b7160e01b600052603160045260246000fd5b60006000198214156145bc576145bc6144f6565b5060010190565b6000602082840312156145d557600080fd5b5051919050565b6000602082840312156145ee57600080fd5b81516112e581614269565b60006020828403121561460b57600080fd5b81516112e581614179565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561466657600080fd5b8351925060208401519150604084015190509250925092565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156146cf5784516001600160a01b0316835293830193918301916001016146aa565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212209096988282910edfa04a26ea9cfbda1d4a63678a5406c98135580e68c4e2b97164736f6c634300080b0033

Deployed Bytecode Sourcemap

8378:32898:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13610:85;;;;;;;;;;-1:-1:-1;13682:5:0;;;;;;;;;;;;-1:-1:-1;;;13682:5:0;;;;13610:85;;;;;;;:::i;:::-;;;;;;;;11020:27;;;;;;;;;;-1:-1:-1;11020:27:0;;;;-1:-1:-1;;;;;11020:27:0;;;;;;-1:-1:-1;;;;;798:32:1;;;780:51;;768:2;753:18;11020:27:0;616:221:1;17929:343:0;;;;;;;;;;-1:-1:-1;17929:343:0;;;;;:::i;:::-;;:::i;:::-;;14607:193;;;;;;;;;;-1:-1:-1;14607:193:0;;;;;:::i;:::-;;:::i;:::-;;;1648:14:1;;1641:22;1623:41;;1611:2;1596:18;14607:193:0;1483:187:1;37160:383:0;;;;;;;;;;-1:-1:-1;37160:383:0;;;;;:::i;:::-;;:::i;18280:223::-;;;;;;;;;;-1:-1:-1;18280:223:0;;;;;:::i;:::-;;:::i;10648:64::-;;;;;;;;;;-1:-1:-1;10648:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16097:89;;;;;;;;;;-1:-1:-1;16168:10:0;;16097:89;;;2326:25:1;;;2314:2;2299:18;16097:89:0;2180:177:1;13893:97:0;;;;;;;;;;-1:-1:-1;9244:16:0;13893:97;;10256:40;;;;;;;;;;;;;;;;36689:463;;;;;;;;;;-1:-1:-1;36689:463:0;;;;;:::i;:::-;;:::i;10174:32::-;;;;;;;;;;;;;;;;14808:475;;;;;;;;;;-1:-1:-1;14808:475:0;;;;;:::i;:::-;;:::i;36236:445::-;;;;;;;;;;-1:-1:-1;36236:445:0;;;;;:::i;:::-;;:::i;11200:37::-;;;;;;;;;;-1:-1:-1;11200:37:0;;;;-1:-1:-1;;;11200:37:0;;;;;;19528:321;;;;;;;;;;-1:-1:-1;19528:321:0;;;;;:::i;:::-;;:::i;13800:85::-;;;;;;;;;;-1:-1:-1;13800:85:0;;9491:2;3286:36:1;;3274:2;3259:18;13800:85:0;3144:184:1;20324:471:0;;;;;;;;;;-1:-1:-1;20324:471:0;;;;;:::i;:::-;;:::i;15291:215::-;;;;;;;;;;-1:-1:-1;15291:215:0;;;;;:::i;:::-;;:::i;16784:268::-;;;;;;;;;;;;;:::i;8507:33::-;;;;;;;;;;-1:-1:-1;8507:33:0;;;;-1:-1:-1;;;;;8507:33:0;;;10511:37;;;;;;;;;;;;;;;;17064:307;;;;;;;;;;-1:-1:-1;17064:307:0;;;;;:::i;:::-;;:::i;10555:38::-;;;;;;;;;;;;;;;;35919:152;;;;;;;;;;-1:-1:-1;35919:152:0;;;;;:::i;:::-;;:::i;11054:21::-;;;;;;;;;;-1:-1:-1;11054:21:0;;;;-1:-1:-1;;;;;11054:21:0;;;19039:481;;;;;;;;;;-1:-1:-1;19039:481:0;;;;;:::i;:::-;;:::i;37555:408::-;;;;;;;;;;-1:-1:-1;37555:408:0;;;;;:::i;:::-;;:::i;8967:33::-;;;;;;;;;;-1:-1:-1;8967:33:0;;;;;;;;;;;11112:41;;;;;;;;;;-1:-1:-1;11112:41:0;;;;-1:-1:-1;;;11112:41:0;;;;;;27068:294;;;;;;;;;;;;;:::i;19857:459::-;;;;;;;;;;-1:-1:-1;19857:459:0;;;;;:::i;:::-;;:::i;35785:126::-;;;;;;;;;;-1:-1:-1;35785:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;35876:27:0;35852:4;35876:27;;;:18;:27;;;;;;;;;35785:126;7081:90;;;;;;;;;;-1:-1:-1;7148:15:0;7081:90;;25360:120;;;;;;;;;;-1:-1:-1;25454:18:0;;25439:12;:33;25360:120;;17379:181;;;;;;;;;;-1:-1:-1;17379:181:0;;;;;:::i;:::-;;:::i;16474:118::-;;;;;;;;;;;;;:::i;10473:25::-;;;;;;;;;;;;;;;;38735:225;;;;;;;;;;;;;:::i;13998:198::-;;;;;;;;;;-1:-1:-1;13998:198:0;;;;;:::i;:::-;;:::i;6632:150::-;;;;;;;;;;;;;:::i;16258:154::-;;;;;;;;;;;;;:::i;17572:144::-;;;;;;;;;;-1:-1:-1;17572:144:0;;;;;:::i;:::-;;:::i;11244:34::-;;;;;;;;;;-1:-1:-1;11244:34:0;;;;-1:-1:-1;;;11244:34:0;;;;;;38239:488;;;;;;;;;;-1:-1:-1;38239:488:0;;;;;:::i;:::-;;:::i;10422:44::-;;;;;;;;;;-1:-1:-1;10422:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10213:36;;;;;;;;;;;;;;;;15935:154;;;;;;;;;;-1:-1:-1;15935:154:0;;;;;:::i;:::-;-1:-1:-1;;;;;16061:20:0;16032:4;16061:20;;;:11;:20;;;;;;;;;15935:154;6418:79;;;;;;;;;;-1:-1:-1;6456:7:0;6483:6;-1:-1:-1;;;;;6483:6:0;6418:79;;13703:89;;;;;;;;;;-1:-1:-1;13777:7:0;;;;;;;;;;;;-1:-1:-1;;;13777:7:0;;;;13703:89;;18511:237;;;;;;;;;;-1:-1:-1;18511:237:0;;;;;:::i;:::-;;:::i;17736:122::-;;;;;;;;;;-1:-1:-1;17827:23:0;;17736:122;;15514:413;;;;;;;;;;-1:-1:-1;15514:413:0;;;;;:::i;:::-;;:::i;10382:33::-;;;;;;;;;;;;;;;;14204:201;;;;;;;;;;-1:-1:-1;14204:201:0;;;;;:::i;:::-;;:::i;10905:58::-;;;;;;;;;;-1:-1:-1;10905:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11160:33;;;;;;;;;;-1:-1:-1;11160:33:0;;;;-1:-1:-1;;;11160:33:0;;;;;;37971:171;;;;;;;;;;-1:-1:-1;37971:171:0;;;;;:::i;:::-;;:::i;8921:39::-;;;;;;;;;;-1:-1:-1;8921:39:0;;;;;;;;10606:35;;;;;;;;;;;;;;;;10084;;;;;;;;;;;;;;;;14413:186;;;;;;;;;;-1:-1:-1;14413:186:0;;;;;:::i;:::-;-1:-1:-1;;;;;14564:18:0;;;14532:7;14564:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;14413:186;10126:39;;;;;;;;;;;;;;;;16639:137;;;;;;;;;;;;;:::i;36079:149::-;;;;;;;;;;-1:-1:-1;36079:149:0;;;;;:::i;:::-;;:::i;8460:40::-;;;;;;;;;;-1:-1:-1;8460:40:0;;;;-1:-1:-1;;;;;8460:40:0;;;39140:2133;;;;;;;;;;-1:-1:-1;39140:2133:0;;;;;:::i;:::-;;:::i;10305:37::-;;;;;;;;;;;;;;;;10046:31;;;;;;;;;;;;;;;;6790:283;;;;;;;;;;-1:-1:-1;6790:283:0;;;;;:::i;:::-;;:::i;38972:160::-;;;;;;;;;;;;;:::i;10719:24::-;;;;;;;;;;;;;;;;17929:343;6545:6;;-1:-1:-1;;;;;6545:6:0;189:10;6545:22;6537:67;;;;-1:-1:-1;;;6537:67:0;;;;;;;:::i;:::-;;;;;;;;;18050:6:::1;18036:11;9244:16;18046:1;18036:11;:::i;:::-;:20;;;;:::i;:::-;18023:9;:33;;18015:99;;;::::0;-1:-1:-1;;;18015:99:0;;8873:2:1;18015:99:0::1;::::0;::::1;8855:21:1::0;8912:2;8892:18;;;8885:30;8951:34;8931:18;;;8924:62;-1:-1:-1;;;9002:18:1;;;8995:51;9063:19;;18015:99:0::1;8671:417:1::0;18015:99:0::1;18159:4;18145:11;9244:16;18155:1;18145:11;:::i;:::-;:18;;;;:::i;:::-;18132:9;:31;;18124:96;;;::::0;-1:-1:-1;;;18124:96:0;;9295:2:1;18124:96:0::1;::::0;::::1;9277:21:1::0;9334:2;9314:18;;;9307:30;9373:34;9353:18;;;9346:62;-1:-1:-1;;;9424:18:1;;;9417:50;9484:19;;18124:96:0::1;9093:416:1::0;18124:96:0::1;18230:23;:35:::0;17929:343::o;14607:193::-;14709:4;14731:39;189:10;14754:7;14763:6;14731:8;:39::i;:::-;-1:-1:-1;14788:4:0;14607:193;;;;;:::o;37160:383::-;6545:6;;-1:-1:-1;;;;;6545:6:0;189:10;6545:22;6537:67;;;;-1:-1:-1;;;6537:67:0;;;;;;;:::i;:::-;37282:18:::1;::::0;-1:-1:-1;;;37282:18:0;::::1;;;37274:63;;;::::0;-1:-1:-1;;;37274:63:0;;9716:2:1;37274:63:0::1;::::0;::::1;9698:21:1::0;;;9735:18;;;9728:30;9794:34;9774:18;;;9767:62;9846:18;;37274:63:0::1;9514:356:1::0;37274:63:0::1;37363:3;37350:10;:16:::0;;;37396:1:::1;37377:16;:20:::0;;;37408:17:::1;:26:::0;;;;37447:11:::1;:17:::0;37475::::1;:21:::0;;;;37507:18:::1;:28:::0;37160:383::o;18280:223::-;6545:6;;-1:-1:-1;;;;;6545:6:0;189:10;6545:22;6537:67;;;;-1:-1:-1;;;6537:67:0;;;;;;;:::i;:::-;18390:4:::1;18384;18370:11;9244:16;18380:1;18370:11;:::i;:::-;:18;;;;:::i;:::-;18369:25;;;;:::i;:::-;18359:6;:35;;18351:95;;;::::0;-1:-1:-1;;;18351:95:0;;10077:2:1;18351:95:0::1;::::0;::::1;10059:21:1::0;10116:2;10096:18;;;10089:30;10155:34;10135:18;;;10128:62;-1:-1:-1;;;10206:18:1;;;10199:45;10261:19;;18351:95:0::1;9875:411:1::0;18351:95:0::1;18480:15;:6:::0;18490:4:::1;18480:15;:::i;:::-;18457:20;:38:::0;-1:-1:-1;18280:223:0:o;36689:463::-;6545:6;;-1:-1:-1;;;;;6545:6:0;189:10;6545:22;6537:67;;;;-1:-1:-1;;;6537:67:0;;;;;;;:::i;:::-;36835:11:::1;:24:::0;;;36870:17:::1;:36:::0;;;36917:18:::1;:38:::0;;;37030:4:::1;36938:17:::0;36974:31:::1;36890:16:::0;36849:10;36974:31:::1;:::i;:::-;:52;;;;:::i;:::-;:60;;36966:103;;;::::0;-1:-1:-1;;;36966:103:0;;10626:2:1;36966:103:0::1;::::0;::::1;10608:21:1::0;10665:2;10645:18;;;10638:30;10704:32;10684:18;;;10677:60;10754:18;;36966:103:0::1;10424:354:1::0;36966:103:0::1;37085:59;::::0;;10985:25:1;;;11041:2;11026:18;;11019:34;;;11069:18;;;11062:34;;;37085:59:0::1;::::0;10973:2:1;10958:18;37085:59:0::1;;;;;;;;36689:463:::0;;;:::o;14808:475::-;14931:4;14948:36;14958:6;14966:9;14977:6;14948:9;:36::i;:::-;-1:-1:-1;;;;;15024:19:0;;14997:24;15024:19;;;:11;:19;;;;;;;;189:10;15024:33;;;;;;;;15076:26;;;;15068:79;;;;-1:-1:-1;;;15068:79:0;;11309:2:1;15068:79:0;;;11291:21:1;11348:2;11328:18;;;11321:30;11387:34;11367:18;;;11360:62;-1:-1:-1;;;11438:18:1;;;11431:38;11486:19;;15068:79:0;11107:404:1;15068:79:0;15183:57;15192:6;189:10;15233:6;15214:16;:25;15183:8;:57::i;:::-;-1:-1:-1;15271:4:0;;14808:475;-1:-1:-1;;;;14808:475:0:o;36236:445::-;6545:6;;-1:-1:-1;;;;;6545:6:0;189:10;6545:22;6537:67;;;;-1:-1:-1;;;6537:67:0;;;;;;;:::i;:::-;36378:10:::1;:22:::0;;;36411:16:::1;:34:::0;;;36456:17:::1;:36:::0;;;36564:4:::1;36476:16:::0;36511:29:::1;36430:15:::0;36391:9;36511:29:::1;:::i;:::-;:49;;;;:::i;:::-;:57;;36503:99;;;::::0;-1:-1:-1;;;36503:99:0;;11718:2:1;36503:99:0::1;::::0;::::1;11700:21:1::0;11757:2;11737:18;;;11730:30;11796:31;11776:18;;;11769:59;11845:18;;36503:99:0::1;11516:353:1::0;36503:99:0::1;36618:55;::::0;;10985:25:1;;;11041:2;11026:18;;11019:34;;;11069:18;;;11062:34;;;36618:55:0::1;::::0;10973:2:1;10958:18;36618:55:0::1;10783:319:1::0;19528:321:0;19622:7;19680;;19669;:18;;19647:110;;;;-1:-1:-1;;;19647:110:0;;12076:2:1;19647:110:0;;;12058:21:1;12115:2;12095:18;;;12088:30;12154:34;12134:18;;;12127:62;-1:-1:-1;;;12205:18:1;;;12198:40;12255:19;;19647:110:0;11874:406:1;19647:110:0;19768:19;19790:10;:8;:10::i;:::-;19768:32;-1:-1:-1;19818:23:0;19768:32;19818:7;:23;:::i;:::-;19811:30;19528:321;-1:-1:-1;;;19528:321:0:o;20324:471::-;6545:6;;-1:-1:-1;;;;;6545:6:0;189:10;6545:22;6537:67;;;;-1:-1:-1;;;6537:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20402:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;20394:56;;;::::0;-1:-1:-1;;;20394:56:0;;12487:2:1;20394:56:0::1;::::0;::::1;12469:21:1::0;12526:2;12506:18;;;12499:30;12565:25;12545:18;;;12538:53;12608:18;;20394:56:0::1;12285:347:1::0;20394:56:0::1;20466:9;20461:327;20485:9;:16:::0;20481:20;::::1;20461:327;;;20543:7;-1:-1:-1::0;;;;;20527:23:0::1;:9;20537:1;20527:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;20527:12:0::1;:23;20523:254;;;20586:9;20596:16:::0;;:20:::1;::::0;20615:1:::1;::::0;20596:20:::1;:::i;:::-;20586:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;20571:9:::1;:12:::0;;-1:-1:-1;;;;;20586:31:0;;::::1;::::0;20581:1;;20571:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;20571:46:0::1;-1:-1:-1::0;;;;;20571:46:0;;::::1;;::::0;;20636:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;20675:11:::1;:20:::0;;;;:28;;-1:-1:-1;;20675:28:0::1;::::0;;20722:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;20722:15:0;;;;;-1:-1:-1;;;;;;20722:15:0::1;::::0;;;;;20461:327:::1;20324:471:::0;:::o;20523:254::-:1;20503:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20461:327;;;;20324:471:::0;:::o;15291:215::-;189:10;15379:4;15428:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15428:34:0;;;;;;;;;;15379:4;;15396:80;;15419:7;;15428:47;;15465:10;;15428:47;:::i;:::-;15396:8;:80::i;16784:268::-;6545:6;;-1:-1:-1;;;;;6545:6:0;189:10;6545:22;6537:67;;;;-1:-1:-1;;;6537:67:0;;;;;;;:::i;:::-;16870:15:::1;::::0;-1:-1:-1;;;16870:15:0;::::1;;;16848:114;;;::::0;-1:-1:-1;;;16848:114:0;;13373:2:1;16848:114:0::1;::::0;::::1;13355:21:1::0;13412:2;13392:18;;;13385:30;13451:34;13431:18;;;13424:62;-1:-1:-1;;;13502:18:1;;;13495:47;13559:19;;16848:114:0::1;13171:413:1::0;16848:114:0::1;16975:15;:23:::0;;-1:-1:-1;;;;16975:23:0::1;::::0;;17016:28:::1;::::0;::::1;::::0;16993:5:::1;::::0;17016:28:::1;16784:268::o:0;17064:307::-;6545:6;;-1:-1:-1;;;;;6545:6:0;189:10;6545:22;6537:67;;;;-1:-1:-1;;;6537:67:0;;;;;;;:::i;:::-;17156:15:::1;::::0;-1:-1:-1;;;17156:15:0;::::1;;;17134:114;;;::::0;-1:-1:-1;;;17134:114:0;;13791:2:1;17134:114:0::1;::::0;::::1;13773:21:1::0;13830:2;13810:18;;;13803:30;13869:34;13849:18;;;13842:62;-1:-1:-1;;;13920:18:1;;;13913:47;13977:19;;17134:114:0::1;13589:413:1::0;17134:114:0::1;-1:-1:-1::0;;;;;17276:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;17275:20;17267:59;;;::::0;-1:-1:-1;;;17267:59:0;;14209:2:1;17267:59:0::1;::::0;::::1;14191:21:1::0;14248:2;14228:18;;;14221:30;14287:28;14267:18;;;14260:56;14333:18;;17267:59:0::1;14007:350:1::0;17267:59:0::1;-1:-1:-1::0;;;;;17337:19:0::1;;::::0;;;:11:::1;:19;::::0;;;;:26;;-1:-1:-1;;17337:26:0::1;17359:4;17337:26;::::0;;17064:307::o;35919:152::-;6545:6;;-1:-1:-1;;;;;6545:6:0;189:10;6545:22;6537:67;;;;-1:-1:-1;;;6537:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35990:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;35990:34:0::1;36020:4;35990:34;::::0;;36040:23;;780:51:1;;;36040:23:0::1;::::0;753:18:1;36040:23:0::1;;;;;;;;35919:152:::0;:::o;19039:481::-;19159:7;9244:16;19192:7;:18;;19184:62;;;;-1:-1:-1;;;19184:62:0;;14564:2:1;19184:62:0;;;14546:21:1;14603:2;14583:18;;;14576:30;14642:33;14622:18;;;14615:61;14693:18;;19184:62:0;14362:355:1;19184:62:0;19262:17;19257:256;;19297:15;19326:19;19337:7;19326:10;:19::i;:::-;-1:-1:-1;19296:49:0;;-1:-1:-1;19360:14:0;;-1:-1:-1;;;;;19360:14:0;19257:256;19410:23;19445:19;19456:7;19445:10;:19::i;:::-;-1:-1:-1;19407:57:0;;-1:-1:-1;19479:22:0;;-1:-1:-1;;;;;19479:22:0;37555:408;6545:6;;-1:-1:-1;;;;;6545:6:0;189:10;6545:22;6537:67;;;;-1:-1:-1;;;6537:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37651:32:0;::::1;37643:83;;;::::0;-1:-1:-1;;;37643:83:0;;14924:2:1;37643:83:0::1;::::0;::::1;14906:21:1::0;14963:2;14943:18;;;14936:30;15002:34;14982:18;;;14975:62;-1:-1:-1;;;15053:18:1;;;15046:36;15099:19;;37643:83:0::1;14722:402:1::0;37643:83:0::1;37756:17;::::0;;-1:-1:-1;;;;;37756:17:0;;::::1;37777:5;37737:37:::0;;;:18:::1;:37;::::0;;;;;;;:45;;-1:-1:-1;;37737:45:0;;::::1;::::0;;;37793:47;;-1:-1:-1;;;;;;37793:47:0::1;::::0;;::::1;::::0;;::::1;::::0;;;37851:37;;;;;;;:44;;;;::::1;-1:-1:-1::0;37851:44:0::1;::::0;;;37911;780:51:1;;;37911:44:0::1;::::0;753:18:1;37911:44:0::1;616:221:1::0;27068:294:0;6545:6;;-1:-1:-1;;;;;6545:6:0;189:10;6545:22;6537:67;;;;-1:-1:-1;;;6537:67:0;;;;;;;:::i;:::-;27123:23:::1;27149:24;27167:4;27149:9;:24::i;:::-;27123:50;;27211:23;;27192:15;:42;;27184:97;;;::::0;-1:-1:-1;;;27184:97:0;;15331:2:1;27184:97:0::1;::::0;::::1;15313:21:1::0;15370:2;15350:18;;;15343:30;15409:34;15389:18;;;15382:62;-1:-1:-1;;;15460:18:1;;;15453:40;15510:19;;27184:97:0::1;15129:406:1::0;27184:97:0::1;27292:10;:8;:10::i;:::-;27318:36;::::0;27338:15:::1;2326:25:1::0;;27318:36:0::1;::::0;2314:2:1;2299:18;27318:36:0::1;2180:177:1::0;19857:459:0;6545:6;;-1:-1:-1;;;;;6545:6:0;189:10;6545:22;6537:67;;;;-1:-1:-1;;;6537:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19938:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;19937:21;19929:61;;;::::0;-1:-1:-1;;;19929:61:0;;15742:2:1;19929:61:0::1;::::0;::::1;15724:21:1::0;15781:2;15761:18;;;15754:30;15820:29;15800:18;;;15793:57;15867:18;;19929:61:0::1;15540:351:1::0;19929:61:0::1;20009:9;:16:::0;20033:2:::1;::::0;20009:20:::1;::::0;20028:1:::1;20009:20;:::i;:::-;:26;;20001:116;;;::::0;-1:-1:-1;;;20001:116:0;;16098:2:1;20001:116:0::1;::::0;::::1;16080:21:1::0;16137:2;16117:18;;;16110:30;16176:34;16156:18;;;16149:62;16247:34;16227:18;;;16220:62;-1:-1:-1;;;16298:19:1;;;16291:44;16352:19;;20001:116:0::1;15896:481:1::0;20001:116:0::1;-1:-1:-1::0;;;;;20132:16:0;::::1;20151:1;20132:16:::0;;;:7:::1;:16;::::0;;;;;:20;20128:109:::1;;-1:-1:-1::0;;;;;20208:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;20188:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;20169:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;20128:109:::1;-1:-1:-1::0;;;;;20247:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;20247:27:0::1;20270:4;20247:27:::0;;::::1;::::0;;;20285:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;20285:23:0::1;::::0;;::::1;::::0;;19857:459::o;17379:181::-;6545:6;;-1:-1:-1;;;;;6545:6:0;189:10;6545:22;6537:67;;;;-1:-1:-1;;;6537:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17460:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;17452:62;;;::::0;-1:-1:-1;;;17452:62:0;;16584:2:1;17452:62:0::1;::::0;::::1;16566:21:1::0;16623:2;16603:18;;;16596:30;16662:32;16642:18;;;16635:60;16712:18;;17452:62:0::1;16382:354:1::0;17452:62:0::1;-1:-1:-1::0;;;;;17525:19:0::1;17547:5;17525:19:::0;;;:11:::1;:19;::::0;;;;:27;;-1:-1:-1;;17525:27:0::1;::::0;;17379:181::o;16474:118::-;6545:6;;-1:-1:-1;;;;;6545:6:0;189:10;6545:22;6537:67;;;;-1:-1:-1;;;6537:67:0;;;;;;;:::i;:::-;16528:14:::1;:21:::0;;-1:-1:-1;;16528:21:0::1;;;::::0;;16569:15:::1;::::0;::::1;::::0;16528:21;;16569:15:::1;16474:118::o:0;38735:225::-;6545:6;;-1:-1:-1;;;;;6545:6:0;189:10;6545:22;6537:67;;;;-1:-1:-1;;;6537:67:0;;;;;;;:::i;:::-;38814:18:::1;::::0;-1:-1:-1;;;38814:18:0;::::1;;;38806:63;;;::::0;-1:-1:-1;;;38806:63:0;;16943:2:1;38806:63:0::1;::::0;::::1;16925:21:1::0;;;16962:18;;;16955:30;17021:34;17001:18;;;16994:62;17073:18;;38806:63:0::1;16741:356:1::0;38806:63:0::1;38882:18;:26:::0;;-1:-1:-1;;;;38882:26:0::1;::::0;;38924:28:::1;::::0;::::1;::::0;38903:5:::1;::::0;38924:28:::1;38735:225::o:0;13998:198::-;-1:-1:-1;;;;;14088:20:0;;14064:7;14088:20;;;:11;:20;;;;;;;;14084:49;;;-1:-1:-1;;;;;;14117:16:0;;;;;:7;:16;;;;;;;13998:198::o;14084:49::-;-1:-1:-1;;;;;14171:16:0;;;;;;:7;:16;;;;;;14151:37;;:19;:37::i;6632:150::-;6545:6;;-1:-1:-1;;;;;6545:6:0;189:10;6545:22;6537:67;;;;-1:-1:-1;;;6537:67:0;;;;;;;:::i;:::-;6741:1:::1;6725:6:::0;;6704:40:::1;::::0;-1:-1:-1;;;;;6725:6:0;;::::1;::::0;6704:40:::1;::::0;6741:1;;6704:40:::1;6772:1;6755:19:::0;;-1:-1:-1;;;;;;6755:19:0::1;::::0;;6632:150::o;16258:154::-;6545:6;;-1:-1:-1;;;;;6545:6:0;189:10;6545:22;6537:67;;;;-1:-1:-1;;;6537:67:0;;;;;;;:::i;:::-;16312:14:::1;:22:::0;;-1:-1:-1;;16345:28:0;;;16389:15:::1;::::0;::::1;::::0;16329:5:::1;::::0;16389:15:::1;16258:154::o:0;17572:144::-;6545:6;;-1:-1:-1;;;;;6545:6:0;189:10;6545:22;6537:67;;;;-1:-1:-1;;;6537:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17662:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;17662:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17572:144::o;38239:488::-;38353:10;6545:6;;-1:-1:-1;;;;;6545:6:0;189:10;6545:22;6537:67;;;;-1:-1:-1;;;6537:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38389:20:0;::::1;38381:59;;;::::0;-1:-1:-1;;;38381:59:0;;17304:2:1;38381:59:0::1;::::0;::::1;17286:21:1::0;17343:2;17323:18;;;17316:30;17382:28;17362:18;;;17355:56;17428:18;;38381:59:0::1;17102:350:1::0;38381:59:0::1;-1:-1:-1::0;;;;;38459:23:0;::::1;38477:4;38459:23;;38451:64;;;::::0;-1:-1:-1;;;38451:64:0;;17659:2:1;38451:64:0::1;::::0;::::1;17641:21:1::0;17698:2;17678:18;;;17671:30;17737;17717:18;;;17710:58;17785:18;;38451:64:0::1;17457:352:1::0;38451:64:0::1;38553:39;::::0;-1:-1:-1;;;38553:39:0;;38586:4:::1;38553:39;::::0;::::1;780:51:1::0;38526:24:0::1;::::0;-1:-1:-1;;;;;38553:24:0;::::1;::::0;::::1;::::0;753:18:1;;38553:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38611:46;::::0;-1:-1:-1;;;38611:46:0;;-1:-1:-1;;;;;18195:32:1;;;38611:46:0::1;::::0;::::1;18177:51:1::0;18244:18;;;18237:34;;;38526:66:0;;-1:-1:-1;38611:23:0;;::::1;::::0;::::1;::::0;18150:18:1;;38611:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38673;::::0;;-1:-1:-1;;;;;18195:32:1;;18177:51;;18259:2;18244:18;;18237:34;;;38603:54:0;;-1:-1:-1;38673:46:0::1;::::0;18150:18:1;38673:46:0::1;;;;;;;38370:357;38239:488:::0;;;;:::o;18511:237::-;6545:6;;-1:-1:-1;;;;;6545:6:0;189:10;6545:22;6537:67;;;;-1:-1:-1;;;6537:67:0;;;;;;;:::i;:::-;18618:6:::1;::::0;-1:-1:-1;;;;;18610:14:0;;::::1;18618:6:::0;::::1;18610:14;;18602:84;;;::::0;-1:-1:-1;;;18602:84:0;;18734:2:1;18602:84:0::1;::::0;::::1;18716:21:1::0;18773:2;18753:18;;;18746:30;18812:34;18792:18;;;18785:62;18883:27;18863:18;;;18856:55;18928:19;;18602:84:0::1;18532:421:1::0;18602:84:0::1;18699:41;18728:4;18734:5;18699:28;:41::i;15514:413::-:0;189:10;15607:4;15651:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15651:34:0;;;;;;;;;;15704:35;;;;15696:85;;;;-1:-1:-1;;;15696:85:0;;19160:2:1;15696:85:0;;;19142:21:1;19199:2;19179:18;;;19172:30;19238:34;19218:18;;;19211:62;-1:-1:-1;;;19289:18:1;;;19282:35;19334:19;;15696:85:0;18958:401:1;15696:85:0;15817:67;189:10;15840:7;15868:15;15849:16;:34;15817:8;:67::i;:::-;-1:-1:-1;15915:4:0;;15514:413;-1:-1:-1;;;15514:413:0:o;14204:201::-;14311:4;14333:42;189:10;14357:9;14368:6;14333:9;:42::i;37971:171::-;6545:6;;-1:-1:-1;;;;;6545:6:0;189:10;6545:22;6537:67;;;;-1:-1:-1;;;6537:67:0;;;;;;;:::i;:::-;38048:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;38048:32:0::1;-1:-1:-1::0;;;;38048:32:0;;::::1;;::::0;;38096:38:::1;::::0;::::1;::::0;::::1;::::0;38072:8;1648:14:1;1641:22;1623:41;;1611:2;1596:18;;1483:187;16639:137:0;6545:6;;-1:-1:-1;;;;;6545:6:0;189:10;6545:22;6537:67;;;;-1:-1:-1;;;6537:67:0;;;;;;;:::i;:::-;16701:20:::1;:28:::0;;-1:-1:-1;;16701:28:0::1;::::0;;16745:23:::1;::::0;::::1;::::0;16724:5:::1;::::0;16745:23:::1;16639:137::o:0;36079:149::-;6545:6;;-1:-1:-1;;;;;6545:6:0;189:10;6545:22;6537:67;;;;-1:-1:-1;;;6537:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36148:27:0;::::1;36178:5;36148:27:::0;;;:18:::1;:27;::::0;;;;;;;;:35;;-1:-1:-1;;36148:35:0::1;::::0;;36199:21;;780:51:1;;;36199:21:0::1;::::0;753:18:1;36199:21:0::1;616:221:1::0;39140:2133:0;6545:6;;-1:-1:-1;;;;;6545:6:0;189:10;6545:22;6537:67;;;;-1:-1:-1;;;6537:67:0;;;;;;;:::i;:::-;39281:13:::1;::::0;-1:-1:-1;;;39281:13:0;::::1;;;39280:14;39272:70;;;::::0;-1:-1:-1;;;39272:70:0;;19566:2:1;39272:70:0::1;::::0;::::1;19548:21:1::0;19605:2;19585:18;;;19578:30;19644:34;19624:18;;;19617:62;-1:-1:-1;;;19695:18:1;;;19688:41;19746:19;;39272:70:0::1;19364:407:1::0;39272:70:0::1;39380:2;39361:16;:21;39353:73;;;::::0;-1:-1:-1;;;39353:73:0;;19978:2:1;39353:73:0::1;::::0;::::1;19960:21:1::0;20017:2;19997:18;;;19990:30;20056:34;20036:18;;;20029:62;-1:-1:-1;;;20107:18:1;;;20100:37;20154:19;;39353:73:0::1;19776:403:1::0;39353:73:0::1;39439:14;:12;:14::i;:::-;39490:15;:22;39472:7;:14;:40;39464:83;;;::::0;-1:-1:-1;;;39464:83:0;;20386:2:1;39464:83:0::1;::::0;::::1;20368:21:1::0;20425:2;20405:18;;;20398:30;20464:32;20444:18;;;20437:60;20514:18;;39464:83:0::1;20184:354:1::0;39464:83:0::1;39583:3;39566:7;:14;:20;39558:87;;;::::0;-1:-1:-1;;;39558:87:0;;20745:2:1;39558:87:0::1;::::0;::::1;20727:21:1::0;20784:2;20764:18;;;20757:30;20823:34;20803:18;;;20796:62;-1:-1:-1;;;20874:18:1;;;20867:52;20936:19;;39558:87:0::1;20543:418:1::0;39558:87:0::1;39758:9;39754:199;39777:7;:14;39773:1;:18;39754:199;;;39812:14;39829:7;39837:1;39829:10;;;;;;;;:::i;:::-;;;;;;;39812:27;;39854:14;39871:15;39887:1;39871:18;;;;;;;;:::i;:::-;;;;;;;39854:35;;39904:37;39914:10;39926:6;39934;39904:9;:37::i;:::-;39797:156;;39793:3;;;;;:::i;:::-;;;;39754:199;;;-1:-1:-1::0;40003:5:0::1;39988:12;9244:16;39999:1;39988:12;:::i;:::-;:20;;;;:::i;:::-;39965;:43:::0;40056:13:::1;:20:::0;;-1:-1:-1;;;;40087:28:0;-1:-1:-1;;;40087:28:0;;;40147:12:::1;40126:18;:33:::0;;;40191:37:::1;::::0;40212:16;;40191:37:::1;:::i;:::-;40170:18;:58:::0;40244:16:::1;::::0;::::1;::::0;;;::::1;40392:9;:22:::0;;-1:-1:-1;;;;;;40392:22:0::1;40338:42;40392:22:::0;;::::1;::::0;;;40472:20:::1;::::0;;-1:-1:-1;;;40472:20:0;;;;40338:42;;40472:18:::1;::::0;:20:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;40338:42;40472:20:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40460:44:0::1;;40513:4;40520:10;-1:-1:-1::0;;;;;40520:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40460:78;::::0;-1:-1:-1;;;;;;40460:78:0::1;::::0;;;;;;-1:-1:-1;;;;;21452:15:1;;;40460:78:0::1;::::0;::::1;21434:34:1::0;21504:15;;21484:18;;;21477:43;21369:18;;40460:78:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40451:6;:87:::0;;-1:-1:-1;;;;;;40451:87:0::1;-1:-1:-1::0;;;;;40451:87:0;;;::::1;::::0;;::::1;::::0;;40549:48:::1;::::0;-1:-1:-1;40549:25:0::1;:48::i;:::-;40645:6;::::0;40608:51:::1;::::0;-1:-1:-1;;;;;40645:6:0::1;::::0;40608:28:::1;:51::i;:::-;40739:1;40715:21;:25;40707:73;;;::::0;-1:-1:-1;;;40707:73:0;;21733:2:1;40707:73:0::1;::::0;::::1;21715:21:1::0;21772:2;21752:18;;;21745:30;21811:34;21791:18;;;21784:62;-1:-1:-1;;;21862:18:1;;;21855:33;21905:19;;40707:73:0::1;21531:399:1::0;40707:73:0::1;40828:1;40801:24;40819:4;40801:9;:24::i;:::-;:28;40793:79;;;::::0;-1:-1:-1;;;40793:79:0;;22137:2:1;40793:79:0::1;::::0;::::1;22119:21:1::0;22176:2;22156:18;;;22149:30;22215:34;22195:18;;;22188:62;-1:-1:-1;;;22266:18:1;;;22259:36;22312:19;;40793:79:0::1;21935:402:1::0;40793:79:0::1;40917:9;::::0;40885:69:::1;::::0;40902:4:::1;::::0;-1:-1:-1;;;;;40917:9:0::1;40929:24;40902:4:::0;40929:9:::1;:24::i;40885:69::-;40965:9;::::0;-1:-1:-1;;;;;40965:9:0::1;:25;40998:21;41043:4;41063:24;41043:4:::0;41063:9:::1;:24::i;:::-;41102:1;41145::::0;41188:10:::1;41213:15;40965:274;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41250:15;35706::::0;;35696:7;:25;35748:21;;35732:13;:37;35652:125;41250:15:::1;39261:2012;39140:2133:::0;;;:::o;6790:283::-;6545:6;;-1:-1:-1;;;;;6545:6:0;189:10;6545:22;6537:67;;;;-1:-1:-1;;;6537:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6895:22:0;::::1;6873:110;;;::::0;-1:-1:-1;;;6873:110:0;;23467:2:1;6873:110:0::1;::::0;::::1;23449:21:1::0;23506:2;23486:18;;;23479:30;23545:34;23525:18;;;23518:62;-1:-1:-1;;;23596:18:1;;;23589:36;23642:19;;6873:110:0::1;23265:402:1::0;6873:110:0::1;7020:6;::::0;;6999:38:::1;::::0;-1:-1:-1;;;;;6999:38:0;;::::1;::::0;7020:6;::::1;::::0;6999:38:::1;::::0;::::1;7048:6;:17:::0;;-1:-1:-1;;;;;;7048:17:0::1;-1:-1:-1::0;;;;;7048:17:0;;;::::1;::::0;;;::::1;::::0;;6790:283::o;38972:160::-;6545:6;;-1:-1:-1;;;;;6545:6:0;189:10;6545:22;6537:67;;;;-1:-1:-1;;;6537:67:0;;;;;;;:::i;:::-;39066:58:::1;::::0;39030:12:::1;::::0;39074:10:::1;::::0;39098:21:::1;::::0;39030:12;39066:58;39030:12;39066:58;39098:21;39074:10;39066:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20804:371:::0;-1:-1:-1;;;;;20931:19:0;;20923:68;;;;-1:-1:-1;;;20923:68:0;;24084:2:1;20923:68:0;;;24066:21:1;24123:2;24103:18;;;24096:30;24162:34;24142:18;;;24135:62;-1:-1:-1;;;24213:18:1;;;24206:34;24257:19;;20923:68:0;23882:400:1;20923:68:0;-1:-1:-1;;;;;21010:21:0;;21002:68;;;;-1:-1:-1;;;21002:68:0;;24489:2:1;21002:68:0;;;24471:21:1;24528:2;24508:18;;;24501:30;24567:34;24547:18;;;24540:62;-1:-1:-1;;;24618:18:1;;;24611:32;24660:19;;21002:68:0;24287:398:1;21002:68:0;-1:-1:-1;;;;;21083:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;21135:32;;2326:25:1;;;21135:32:0;;2299:18:1;21135:32:0;;;;;;;20804:371;;;:::o;21183:4169::-;-1:-1:-1;;;;;21305:18:0;;21297:68;;;;-1:-1:-1;;;21297:68:0;;24892:2:1;21297:68:0;;;24874:21:1;24931:2;24911:18;;;24904:30;24970:34;24950:18;;;24943:62;-1:-1:-1;;;25021:18:1;;;25014:35;25066:19;;21297:68:0;24690:401:1;21297:68:0;-1:-1:-1;;;;;21384:16:0;;21376:64;;;;-1:-1:-1;;;21376:64:0;;25298:2:1;21376:64:0;;;25280:21:1;25337:2;25317:18;;;25310:30;25376:34;25356:18;;;25349:62;-1:-1:-1;;;25427:18:1;;;25420:33;25470:19;;21376:64:0;25096:399:1;21376:64:0;21468:1;21459:6;:10;21451:64;;;;-1:-1:-1;;;21451:64:0;;25702:2:1;21451:64:0;;;25684:21:1;25741:2;25721:18;;;25714:30;25780:34;25760:18;;;25753:62;-1:-1:-1;;;25831:18:1;;;25824:39;25880:19;;21451:64:0;25500:405:1;21451:64:0;21540:13;;-1:-1:-1;;;21540:13:0;;;;21536:134;;-1:-1:-1;;;;;21577:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;21605:22:0;;;;;;:18;:22;;;;;;;;21577:50;21569:89;;;;-1:-1:-1;;;21569:89:0;;26112:2:1;21569:89:0;;;26094:21:1;26151:2;26131:18;;;26124:30;26190:28;26170:18;;;26163:56;26236:18;;21569:89:0;25910:350:1;21569:89:0;25454:18;;25439:12;:33;21682:200;;-1:-1:-1;;;;;21736:17:0;;;;;;:11;:17;;;;;;;;21735:18;;:35;;-1:-1:-1;6456:7:0;6483:6;-1:-1:-1;;;;;21757:13:0;;;6483:6;;21757:13;21735:35;:60;;;-1:-1:-1;;;;;;21774:21:0;;21788:6;21774:21;21735:60;21727:143;;;;-1:-1:-1;;;21727:143:0;;26467:2:1;21727:143:0;;;26449:21:1;26506:2;26486:18;;;26479:30;26545:34;26525:18;;;26518:62;26616:34;26596:18;;;26589:62;-1:-1:-1;;;26667:19:1;;;26660:37;26714:19;;21727:143:0;26265:474:1;21727:143:0;21897:14;;;;;;;21894:1501;;;6456:7;6483:6;-1:-1:-1;;;;;21949:15:0;;;6483:6;;21949:15;;;;:49;;-1:-1:-1;6456:7:0;6483:6;-1:-1:-1;;;;;21985:13:0;;;6483:6;;21985:13;;21949:49;:86;;;;-1:-1:-1;;;;;;22019:16:0;;;;21949:86;:128;;;;-1:-1:-1;;;;;;22056:21:0;;22070:6;22056:21;;21949:128;:166;;;;-1:-1:-1;22099:16:0;;-1:-1:-1;;;22099:16:0;;;;22098:17;21949:166;21927:1457;;;22305:20;;;;22301:518;;;22367:9;;-1:-1:-1;;;;;22353:24:0;;;22367:9;;22353:24;;;;:49;;-1:-1:-1;22395:6:0;;-1:-1:-1;;;;;22381:21:0;;;22395:6;;22381:21;;22353:49;22349:451;;;22467:9;22438:39;;;;:28;:39;;;;;;22480:12;-1:-1:-1;22438:105:0;;;;-1:-1:-1;;;;;;22496:32:0;;;;;;:28;:32;;;;;;22531:12;-1:-1:-1;22438:105:0;22430:191;;;;-1:-1:-1;;;22430:191:0;;26946:2:1;22430:191:0;;;26928:21:1;26985:2;26965:18;;;26958:30;27024:34;27004:18;;;26997:62;27095:34;27075:18;;;27068:62;-1:-1:-1;;;27146:19:1;;;27139:40;27196:19;;22430:191:0;26744:477:1;22430:191:0;22677:9;22648:39;;;;:28;:39;;;;;;22690:12;22648:54;;;;-1:-1:-1;;;;;22729:32:0;;;;;;:47;22349:451;-1:-1:-1;;;;;22887:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;22923:35:0;;;;;;:31;:35;;;;;;;;22922:36;22887:71;22883:486;;;23001:20;;22991:6;:30;;22983:96;;;;-1:-1:-1;;;22983:96:0;;27428:2:1;22983:96:0;;;27410:21:1;27467:2;27447:18;;;27440:30;27506:34;27486:18;;;27479:62;-1:-1:-1;;;27557:18:1;;;27550:51;27618:19;;22983:96:0;27226:417:1;22983:96:0;22883:486;;;-1:-1:-1;;;;;23156:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;23190:37:0;;;;;;:31;:37;;;;;;;;23189:38;23156:71;23152:217;;;23270:20;;23260:6;:30;;23252:97;;;;-1:-1:-1;;;23252:97:0;;27850:2:1;23252:97:0;;;27832:21:1;27889:2;27869:18;;;27862:30;27928:34;27908:18;;;27901:62;-1:-1:-1;;;27979:18:1;;;27972:52;28041:19;;23252:97:0;27648:418:1;23252:97:0;23407:28;23438:24;23456:4;23438:9;:24::i;:::-;23528:23;;23612:16;;23407:55;;-1:-1:-1;23504:47:0;;;;-1:-1:-1;;;23612:16:0;;;;23611:17;:55;;;;-1:-1:-1;23645:21:0;;-1:-1:-1;;;23645:21:0;;;;23611:55;:93;;;;-1:-1:-1;23693:6:0;;23703:1;;23683:17;;-1:-1:-1;;;;;23693:6:0;23683:9;:17::i;:::-;:21;23611:93;:133;;;;-1:-1:-1;;;;;;23722:22:0;;;;;;:18;:22;;;;;;;;23721:23;23611:133;:175;;;;-1:-1:-1;;;;;;23762:24:0;;;;;;:18;:24;;;;;;;;23761:25;23611:175;:221;;;;-1:-1:-1;;;;;;23803:29:0;;;;;;:25;:29;;;;;;;;23611:221;:261;;;;;23849:23;23611:261;23593:328;;;23899:10;:8;:10::i;:::-;23933:14;:12;:14::i;:::-;9998:1;23968:15;:26;-1:-1:-1;;;;;24020:24:0;;;;;;:18;:24;;;;;;;;24019:25;:52;;;;-1:-1:-1;;;;;;24049:22:0;;;;;;:18;:22;;;;;;;;24048:23;24019:52;24015:1231;;;25454:18;;25439:12;:33;24091:60;;;;-1:-1:-1;;;;;;24120:31:0;;;;;;:25;:31;;;;;;;;24091:60;:94;;;;-1:-1:-1;;;;;;24156:29:0;;;;;;:25;:29;;;;;;;;24155:30;24091:94;24088:536;;;-1:-1:-1;;;;;24227:15:0;;;;;;:11;:15;;;;;;;;24223:171;;-1:-1:-1;;;;;24266:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;24266:22:0;24284:4;24266:22;;;;;;24311:10;:15;;24284:4;;24311:10;;:15;;24284:4;;24311:15;:::i;:::-;;;;-1:-1:-1;;24354:20:0;;-1:-1:-1;;;;;798:32:1;;780:51;;24354:20:0;;768:2:1;753:18;24354:20:0;;;;;;;24223:171;24424:10;;24414:7;:20;24488:17;;24469:16;;:36;;24488:17;24469:36;:::i;:::-;24453:13;:52;;;24527:17;24524:85;;9914:1;24568:15;:21;24524:85;-1:-1:-1;;;;;24664:31:0;;;;;;:25;:31;;;;;;;;24660:575;;;24726:10;;24716:7;:20;24790:17;;24771:16;;:36;;24790:17;24771:36;:::i;:::-;24755:13;:52;;;24829:17;24826:85;;9914:1;24870:15;:21;24826:85;24660:575;;;-1:-1:-1;;;;;24971:29:0;;;;;;:25;:29;;;;;;;;24967:268;;;25031:11;;25021:7;:21;25097:18;;25077:17;;:38;;25097:18;25077:38;:::i;:::-;25061:13;:54;;;25137:17;25134:86;;9954:1;25178:15;:22;25134:86;25266:32;25281:4;25287:2;25291:6;25266:14;:32::i;:::-;25319:15;35706;;35696:7;:25;35748:21;;35732:13;:37;35652:125;25319:15;21286:4066;;21183:4169;;;:::o;33525:163::-;33567:7;33588:15;33605;33624:19;:17;:19::i;:::-;33587:56;;-1:-1:-1;33587:56:0;-1:-1:-1;33661:19:0;33587:56;;33661:19;:::i;:::-;33654:26;;;;33525:163;:::o;31814:742::-;31914:7;31936;31958;31980;32002;32024;32074:23;32112:12;32139:18;32171:20;32183:7;32171:11;:20::i;:::-;32059:132;;;;;;32203:15;32220:23;32245:12;32261:113;32287:7;32309:4;32328:10;32353;:8;:10::i;:::-;32261:11;:113::i;:::-;32202:172;;;;-1:-1:-1;32202:172:0;;-1:-1:-1;32478:15:0;;-1:-1:-1;32508:4:0;;-1:-1:-1;32527:10:0;;-1:-1:-1;31814:742:0;;-1:-1:-1;;;;;31814:742:0:o;25488:1510::-;12589:16;:23;;-1:-1:-1;;;;12589:23:0;-1:-1:-1;;;12589:23:0;;;;25567:24:::1;25585:4;25567:9;:24::i;:::-;25541:50;;25602:25;25655:23;;25630:22;;:48;;;;:::i;:::-;25602:76;;25689:12;25785:23;;25811:2;25785:28;;;;:::i;:::-;25766:15;:47;25763:124;;25847:23;::::0;:28:::1;::::0;25873:2:::1;25847:28;:::i;:::-;25829:46;;25763:124;25902:20:::0;;;:46:::1;;-1:-1:-1::0;25926:22:0;;25902:46:::1;25899:60;;;25951:7;;;;;25899:60;26028:26;26120:1;26100:17;26075:22;;26057:15;:40;;;;:::i;:::-;:60;;;;:::i;:::-;:64;;;;:::i;:::-;26028:93:::0;-1:-1:-1;26132:26:0::1;26161:36;26028:93:::0;26161:15;:36:::1;:::i;:::-;26132:65;;26218:36;26235:18;26218:16;:36::i;:::-;26427:22;::::0;26296:21:::1;::::0;26275:18:::1;::::0;26427:24:::1;::::0;26450:1:::1;::::0;26427:24:::1;:::i;:::-;26406:46;::::0;:17;:46:::1;:::i;:::-;26378:23;::::0;26365:37:::1;::::0;:10;:37:::1;:::i;:::-;:88;;;;:::i;:::-;26338:115:::0;-1:-1:-1;26474:23:0::1;26500:29;26338:115:::0;26500:10;:29:::1;:::i;:::-;26567:1;26542:22;:26:::0;;;26579:23:::1;:27:::0;26474:55;-1:-1:-1;26638:22:0;;;;;:45:::1;;;26682:1;26664:15;:19;26638:45;26635:216;;;26699:49;26712:18;26732:15;26699:12;:49::i;:::-;26768:71;::::0;;10985:25:1;;;11041:2;11026:18;;11019:34;;;11069:18;;;11062:34;;;26768:71:0::1;::::0;10973:2:1;10958:18;26768:71:0::1;;;;;;;26635:216;26933:17;::::0;26925:65:::1;::::0;-1:-1:-1;;;;;26933:17:0;;::::1;::::0;26964:21:::1;::::0;26925:65:::1;::::0;;;26964:21;26933:17;26925:65:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;12623:1:0::1;12635:16:::0;:24;;-1:-1:-1;;;;12635:24:0;;;25488:1510::o;18756:275::-;-1:-1:-1;;;;;18839:31:0;;;;;;:25;:31;;;;;;;;:39;;;;;;-1:-1:-1;;18839:39:0;;;;;;;;18889:31;:37;;;;;;;:45;;;;;;;;;;;18945:35;;18955:23;18973:4;18955:17;:23::i;:::-;18994:5;18990:34;;19001:21;19017:4;19001:15;:21::i;35409:235::-;35456:7;;:12;:34;;;;-1:-1:-1;35472:13:0;;:18;35456:34;35452:47;;;35409:235::o;35452:47::-;35529:7;;;35511:15;:25;35571:13;;;35547:21;:37;-1:-1:-1;35597:11:0;;;;35619:17;35409:235::o;28285:604::-;-1:-1:-1;;;;;28419:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;28443:22:0;;;;;;:11;:22;;;;;;;;28442:23;28419:46;28415:467;;;28482:48;28504:6;28512:9;28523:6;28482:21;:48::i;:::-;28285:604;;;:::o;28415:467::-;-1:-1:-1;;;;;28553:19:0;;;;;;:11;:19;;;;;;;;28552:20;:46;;;;-1:-1:-1;;;;;;28576:22:0;;;;;;:11;:22;;;;;;;;28552:46;28548:334;;;28615:46;28635:6;28643:9;28654:6;28615:19;:46::i;28548:334::-;-1:-1:-1;;;;;28683:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;28706:22:0;;;;;;:11;:22;;;;;;;;28683:45;28679:203;;;28745:48;28767:6;28775:9;28786:6;28745:21;:48::i;28679:203::-;28826:44;28844:6;28852:9;28863:6;28826:17;:44::i;33696:598::-;33794:7;;33747;;;;9244:16;33747:7;33848:332;33872:9;:16;33868:20;;33848:332;;;33956:7;33932;:21;33940:9;33950:1;33940:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33940:12:0;33932:21;;;;;;;;;;;;;:31;;:83;;;34008:7;33984;:21;33992:9;34002:1;33992:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33992:12:0;33984:21;;;;;;;;;;;;;:31;33932:83;33910:146;;;-1:-1:-1;;34039:7:0;;;9244:16;;-1:-1:-1;33696:598:0;-1:-1:-1;;33696:598:0:o;33910:146::-;34090:7;:21;34098:9;34108:1;34098:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34098:12:0;34090:21;;;;;;;;;;;;;34081:31;;:7;:31;:::i;:::-;34071:41;;34146:7;:21;34154:9;34164:1;34154:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34154:12:0;34146:21;;;;;;;;;;;;;34137:31;;:7;:31;:::i;:::-;34127:41;-1:-1:-1;33890:3:0;;;;:::i;:::-;;;;33848:332;;;;9244:16;34204:7;;:19;;;;:::i;:::-;34194:7;:29;34190:60;;;-1:-1:-1;;34233:7:0;;;9244:16;;-1:-1:-1;33696:598:0;-1:-1:-1;33696:598:0:o;34190:60::-;34269:7;;34278;;-1:-1:-1;33696:598:0;-1:-1:-1;33696:598:0:o;32564:406::-;32665:7;32687;32709;32744:12;32759:24;32775:7;32759:15;:24::i;:::-;32744:39;;32794:18;32815:30;32837:7;32815:21;:30::i;:::-;32794:51;-1:-1:-1;32856:23:0;32794:51;32882:14;32891:4;32882:7;:14;:::i;:::-;:27;;;;:::i;:::-;32856:53;32945:4;;-1:-1:-1;32951:10:0;;-1:-1:-1;32564:406:0;;-1:-1:-1;;;32564:406:0:o;32978:539::-;33177:7;;;;33274:21;33283:11;33274:7;:21;:::i;:::-;33256:39;-1:-1:-1;33306:12:0;33321:18;33327:11;33321:4;:18;:::i;:::-;33306:33;-1:-1:-1;33350:18:0;33371:24;33383:11;33371:10;:24;:::i;:::-;33350:45;-1:-1:-1;33406:23:0;33350:45;33432:14;33441:4;33432:7;:14;:::i;:::-;:27;;;;:::i;:::-;33478:7;;;;-1:-1:-1;33504:4:0;;-1:-1:-1;32978:539:0;;-1:-1:-1;;;;;;;32978:539:0:o;27374:481::-;27464:16;;;27478:1;27464:16;;;;;;;;27440:21;;27464:16;;;;;;;;;;-1:-1:-1;27464:16:0;27440:40;;27509:4;27491;27496:1;27491:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27491:23:0;;;:7;;;;;;;;;;:23;;;;27535:9;;:16;;;-1:-1:-1;;;27535:16:0;;;;:9;;;;;:14;;:16;;;;;27491:7;;27535:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27525:4;27530:1;27525:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27525:26:0;;;:7;;;;;;;;;:26;27594:9;;27562:56;;27579:4;;27594:9;27606:11;27562:8;:56::i;:::-;27629:9;;:218;;-1:-1:-1;;;27629:218:0;;-1:-1:-1;;;;;27629:9:0;;;;:60;;:218;;27704:11;;27629:9;;27774:4;;27801;;27821:15;;27629:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27429:426;27374:481;:::o;27867:410::-;27980:9;;27948:56;;27965:4;;-1:-1:-1;;;;;27980:9:0;27992:11;27948:8;:56::i;:::-;28015:9;;:254;;-1:-1:-1;;;28015:254:0;;-1:-1:-1;;;;;28015:9:0;;;;:25;;28048:9;;28015:254;;28081:4;;28101:11;;28015:9;;;;28221:6;;28243:15;;28015:254;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30227:677::-;30378:15;30408:23;30446:12;30473:23;30511:12;30538:18;30570:19;30581:7;30570:10;:19::i;:::-;-1:-1:-1;;;;;30618:15:0;;;;;;:7;:15;;;;;;30363:226;;-1:-1:-1;30363:226:0;;-1:-1:-1;30363:226:0;;-1:-1:-1;30363:226:0;-1:-1:-1;30363:226:0;-1:-1:-1;30363:226:0;-1:-1:-1;30618:25:0;;30635:7;;30618:25;:::i;:::-;-1:-1:-1;;;;;30600:15:0;;;;;;:7;:15;;;;;;;;:43;;;;30672:7;:15;;;;:25;;30689:7;;30672:25;:::i;:::-;-1:-1:-1;;;;;30654:15:0;;;;;;;:7;:15;;;;;;:43;;;;30729:18;;;;;;;:36;;30749:15;;30729:36;:::i;:::-;-1:-1:-1;;;;;30708:18:0;;;;;;:7;:18;;;;;:57;30776:26;30791:10;30776:14;:26::i;:::-;30813:23;30825:4;30831;30813:11;:23::i;:::-;30869:9;-1:-1:-1;;;;;30852:44:0;30861:6;-1:-1:-1;;;;;30852:44:0;;30880:15;30852:44;;;;2326:25:1;;2314:2;2299:18;;2180:177;30852:44:0;;;;;;;;30352:552;;;;;;30227:677;;;:::o;29524:695::-;29673:15;29703:23;29741:12;29768:23;29806:12;29833:18;29865:19;29876:7;29865:10;:19::i;:::-;-1:-1:-1;;;;;29913:15:0;;;;;;:7;:15;;;;;;29658:226;;-1:-1:-1;29658:226:0;;-1:-1:-1;29658:226:0;;-1:-1:-1;29658:226:0;-1:-1:-1;29658:226:0;-1:-1:-1;29658:226:0;-1:-1:-1;29913:27:0;;29658:226;;29913:27;:::i;:::-;-1:-1:-1;;;;;29895:15:0;;;;;;;:7;:15;;;;;;;;:45;;;;29972:18;;;;;:7;:18;;;;;:38;;29994:15;;29972:38;:::i;:::-;-1:-1:-1;;;;;29951:18:0;;;;;;:7;:18;;;;;;;;:59;;;;30042:7;:18;;;;:38;;30064:15;;30042:38;:::i;30912:745::-;31063:15;31093:23;31131:12;31158:23;31196:12;31223:18;31255:19;31266:7;31255:10;:19::i;:::-;-1:-1:-1;;;;;31303:15:0;;;;;;:7;:15;;;;;;31048:226;;-1:-1:-1;31048:226:0;;-1:-1:-1;31048:226:0;;-1:-1:-1;31048:226:0;-1:-1:-1;31048:226:0;-1:-1:-1;31048:226:0;-1:-1:-1;31303:25:0;;31320:7;;31303:25;:::i;:::-;-1:-1:-1;;;;;31285:15:0;;;;;;:7;:15;;;;;;;;:43;;;;31357:7;:15;;;;:25;;31374:7;;31357:25;:::i;28897:619::-;29044:15;29074:23;29112:12;29139:23;29177:12;29204:18;29236:19;29247:7;29236:10;:19::i;:::-;-1:-1:-1;;;;;29284:15:0;;;;;;:7;:15;;;;;;29029:226;;-1:-1:-1;29029:226:0;;-1:-1:-1;29029:226:0;;-1:-1:-1;29029:226:0;-1:-1:-1;29029:226:0;-1:-1:-1;29029:226:0;-1:-1:-1;29284:25:0;;29029:226;;29284:25;:::i;35101:124::-;35165:7;35212:5;35202:7;;35192;:17;;;;:::i;:::-;:25;;;;:::i;35233:168::-;35330:7;35388:5;35372:13;;35362:7;:23;;;;:::i;34302:791::-;9914:1;34368:15;;:22;34365:433;;;34464:13;;34445:16;;34432:29;;:10;:29;:::i;:::-;:45;;;;:::i;:::-;34406:22;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;;34552:13:0;;34532:17;;34519:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;34492:23;;:73;;;;;;;:::i;:::-;;;;-1:-1:-1;34365:433:0;;-1:-1:-1;34365:433:0;;9954:1;34586:15;;:23;34583:215;;;34684:13;;34664:17;;34651:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;34625:22;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;;34773:13:0;;34752:18;;34739:31;;:10;:31;:::i;:::-;:47;;;;:::i;:::-;34712:23;;:74;;;;;;;:::i;:::-;;;;-1:-1:-1;;34583:215:0;34808:19;34830:10;:8;:10::i;:::-;34808:32;-1:-1:-1;34851:18:0;34872:26;34808:32;34872:10;:26;:::i;:::-;34950:4;34934:22;;;;:7;:22;;;;;;34851:47;;-1:-1:-1;34934:35:0;;34851:47;;34934:35;:::i;:::-;34925:4;34909:22;;;;:7;:22;;;;;;;;:60;;;;34984:11;:26;;;;;;34980:105;;;35066:4;35050:22;;;;:7;:22;;;;;;:35;;35075:10;;35050:35;:::i;:::-;35041:4;35025:22;;;;:7;:22;;;;;:60;34354:739;;34302:791;:::o;31665:141::-;31752:4;31743:7;;:14;;;;:::i;:::-;31733:7;:24;31781:10;;:17;;31793:4;;31781:17;:::i;:::-;31768:10;:30;-1:-1:-1;;31665:141:0:o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;842:180::-;901:6;954:2;942:9;933:7;929:23;925:32;922:52;;;970:1;967;960:12;922:52;-1:-1:-1;993:23:1;;842:180;-1:-1:-1;842:180:1:o;1027:131::-;-1:-1:-1;;;;;1102:31:1;;1092:42;;1082:70;;1148:1;1145;1138:12;1082:70;1027:131;:::o;1163:315::-;1231:6;1239;1292:2;1280:9;1271:7;1267:23;1263:32;1260:52;;;1308:1;1305;1298:12;1260:52;1347:9;1334:23;1366:31;1391:5;1366:31;:::i;:::-;1416:5;1468:2;1453:18;;;;1440:32;;-1:-1:-1;;;1163:315:1:o;1675:248::-;1743:6;1751;1804:2;1792:9;1783:7;1779:23;1775:32;1772:52;;;1820:1;1817;1810:12;1772:52;-1:-1:-1;;1843:23:1;;;1913:2;1898:18;;;1885:32;;-1:-1:-1;1675:248:1:o;1928:247::-;1987:6;2040:2;2028:9;2019:7;2015:23;2011:32;2008:52;;;2056:1;2053;2046:12;2008:52;2095:9;2082:23;2114:31;2139:5;2114:31;:::i;2362:316::-;2439:6;2447;2455;2508:2;2496:9;2487:7;2483:23;2479:32;2476:52;;;2524:1;2521;2514:12;2476:52;-1:-1:-1;;2547:23:1;;;2617:2;2602:18;;2589:32;;-1:-1:-1;2668:2:1;2653:18;;;2640:32;;2362:316;-1:-1:-1;2362:316:1:o;2683:456::-;2760:6;2768;2776;2829:2;2817:9;2808:7;2804:23;2800:32;2797:52;;;2845:1;2842;2835:12;2797:52;2884:9;2871:23;2903:31;2928:5;2903:31;:::i;:::-;2953:5;-1:-1:-1;3010:2:1;2995:18;;2982:32;3023:33;2982:32;3023:33;:::i;:::-;2683:456;;3075:7;;-1:-1:-1;;;3129:2:1;3114:18;;;;3101:32;;2683:456::o;3765:118::-;3851:5;3844:13;3837:21;3830:5;3827:32;3817:60;;3873:1;3870;3863:12;3888:309;3953:6;3961;4014:2;4002:9;3993:7;3989:23;3985:32;3982:52;;;4030:1;4027;4020:12;3982:52;4066:9;4053:23;4043:33;;4126:2;4115:9;4111:18;4098:32;4139:28;4161:5;4139:28;:::i;:::-;4186:5;4176:15;;;3888:309;;;;;:::o;4202:382::-;4267:6;4275;4328:2;4316:9;4307:7;4303:23;4299:32;4296:52;;;4344:1;4341;4334:12;4296:52;4383:9;4370:23;4402:31;4427:5;4402:31;:::i;:::-;4452:5;-1:-1:-1;4509:2:1;4494:18;;4481:32;4522:30;4481:32;4522:30;:::i;4589:388::-;4657:6;4665;4718:2;4706:9;4697:7;4693:23;4689:32;4686:52;;;4734:1;4731;4724:12;4686:52;4773:9;4760:23;4792:31;4817:5;4792:31;:::i;:::-;4842:5;-1:-1:-1;4899:2:1;4884:18;;4871:32;4912:33;4871:32;4912:33;:::i;4982:241::-;5038:6;5091:2;5079:9;5070:7;5066:23;5062:32;5059:52;;;5107:1;5104;5097:12;5059:52;5146:9;5133:23;5165:28;5187:5;5165:28;:::i;5228:127::-;5289:10;5284:3;5280:20;5277:1;5270:31;5320:4;5317:1;5310:15;5344:4;5341:1;5334:15;5360:275;5431:2;5425:9;5496:2;5477:13;;-1:-1:-1;;5473:27:1;5461:40;;5531:18;5516:34;;5552:22;;;5513:62;5510:88;;;5578:18;;:::i;:::-;5614:2;5607:22;5360:275;;-1:-1:-1;5360:275:1:o;5640:183::-;5700:4;5733:18;5725:6;5722:30;5719:56;;;5755:18;;:::i;:::-;-1:-1:-1;5800:1:1;5796:14;5812:4;5792:25;;5640:183::o;5828:662::-;5882:5;5935:3;5928:4;5920:6;5916:17;5912:27;5902:55;;5953:1;5950;5943:12;5902:55;5989:6;5976:20;6015:4;6039:60;6055:43;6095:2;6055:43;:::i;:::-;6039:60;:::i;:::-;6133:15;;;6219:1;6215:10;;;;6203:23;;6199:32;;;6164:12;;;;6243:15;;;6240:35;;;6271:1;6268;6261:12;6240:35;6307:2;6299:6;6295:15;6319:142;6335:6;6330:3;6327:15;6319:142;;;6401:17;;6389:30;;6439:12;;;;6352;;6319:142;;;-1:-1:-1;6479:5:1;5828:662;-1:-1:-1;;;;;;5828:662:1:o;6495:1283::-;6622:6;6630;6638;6691:2;6679:9;6670:7;6666:23;6662:32;6659:52;;;6707:1;6704;6697:12;6659:52;6747:9;6734:23;6776:18;6817:2;6809:6;6806:14;6803:34;;;6833:1;6830;6823:12;6803:34;6871:6;6860:9;6856:22;6846:32;;6916:7;6909:4;6905:2;6901:13;6897:27;6887:55;;6938:1;6935;6928:12;6887:55;6974:2;6961:16;6996:4;7020:60;7036:43;7076:2;7036:43;:::i;7020:60::-;7114:15;;;7196:1;7192:10;;;;7184:19;;7180:28;;;7145:12;;;;7220:19;;;7217:39;;;7252:1;7249;7242:12;7217:39;7276:11;;;;7296:217;7312:6;7307:3;7304:15;7296:217;;;7392:3;7379:17;7409:31;7434:5;7409:31;:::i;:::-;7453:18;;7329:12;;;;7491;;;;7296:217;;;7532:5;-1:-1:-1;;7575:18:1;;7562:32;;-1:-1:-1;;7606:16:1;;;7603:36;;;7635:1;7632;7625:12;7603:36;;7658:63;7713:7;7702:8;7691:9;7687:24;7658:63;:::i;:::-;7648:73;;;7768:2;7757:9;7753:18;7740:32;7730:42;;6495:1283;;;;;:::o;7783:356::-;7985:2;7967:21;;;8004:18;;;7997:30;8063:34;8058:2;8043:18;;8036:62;8130:2;8115:18;;7783:356::o;8144:127::-;8205:10;8200:3;8196:20;8193:1;8186:31;8236:4;8233:1;8226:15;8260:4;8257:1;8250:15;8276:168;8316:7;8382:1;8378;8374:6;8370:14;8367:1;8364:21;8359:1;8352:9;8345:17;8341:45;8338:71;;;8389:18;;:::i;:::-;-1:-1:-1;8429:9:1;;8276:168::o;8449:217::-;8489:1;8515;8505:132;;8559:10;8554:3;8550:20;8547:1;8540:31;8594:4;8591:1;8584:15;8622:4;8619:1;8612:15;8505:132;-1:-1:-1;8651:9:1;;8449:217::o;10291:128::-;10331:3;10362:1;10358:6;10355:1;10352:13;10349:39;;;10368:18;;:::i;:::-;-1:-1:-1;10404:9:1;;10291:128::o;12637:127::-;12698:10;12693:3;12689:20;12686:1;12679:31;12729:4;12726:1;12719:15;12753:4;12750:1;12743:15;12769:125;12809:4;12837:1;12834;12831:8;12828:34;;;12842:18;;:::i;:::-;-1:-1:-1;12879:9:1;;12769:125::o;12899:127::-;12960:10;12955:3;12951:20;12948:1;12941:31;12991:4;12988:1;12981:15;13015:4;13012:1;13005:15;13031:135;13070:3;-1:-1:-1;;13091:17:1;;13088:43;;;13111:18;;:::i;:::-;-1:-1:-1;13158:1:1;13147:13;;13031:135::o;17814:184::-;17884:6;17937:2;17925:9;17916:7;17912:23;17908:32;17905:52;;;17953:1;17950;17943:12;17905:52;-1:-1:-1;17976:16:1;;17814:184;-1:-1:-1;17814:184:1:o;18282:245::-;18349:6;18402:2;18390:9;18381:7;18377:23;18373:32;18370:52;;;18418:1;18415;18408:12;18370:52;18450:9;18444:16;18469:28;18491:5;18469:28;:::i;20966:251::-;21036:6;21089:2;21077:9;21068:7;21064:23;21060:32;21057:52;;;21105:1;21102;21095:12;21057:52;21137:9;21131:16;21156:31;21181:5;21156:31;:::i;22342:607::-;-1:-1:-1;;;;;22701:15:1;;;22683:34;;22748:2;22733:18;;22726:34;;;;22791:2;22776:18;;22769:34;;;;22834:2;22819:18;;22812:34;;;;22883:15;;;22877:3;22862:19;;22855:44;22663:3;22915:19;;22908:35;;;;22632:3;22617:19;;22342:607::o;22954:306::-;23042:6;23050;23058;23111:2;23099:9;23090:7;23086:23;23082:32;23079:52;;;23127:1;23124;23117:12;23079:52;23156:9;23150:16;23140:26;;23206:2;23195:9;23191:18;23185:25;23175:35;;23250:2;23239:9;23235:18;23229:25;23219:35;;22954:306;;;;;:::o;28071:980::-;28333:4;28381:3;28370:9;28366:19;28412:6;28401:9;28394:25;28438:2;28476:6;28471:2;28460:9;28456:18;28449:34;28519:3;28514:2;28503:9;28499:18;28492:31;28543:6;28578;28572:13;28609:6;28601;28594:22;28647:3;28636:9;28632:19;28625:26;;28686:2;28678:6;28674:15;28660:29;;28707:1;28717:195;28731:6;28728:1;28725:13;28717:195;;;28796:13;;-1:-1:-1;;;;;28792:39:1;28780:52;;28887:15;;;;28852:12;;;;28828:1;28746:9;28717:195;;;-1:-1:-1;;;;;;;28968:32:1;;;;28963:2;28948:18;;28941:60;-1:-1:-1;;;29032:3:1;29017:19;29010:35;28929:3;28071:980;-1:-1:-1;;;28071:980:1:o

Swarm Source

ipfs://9096988282910edfa04a26ea9cfbda1d4a63678a5406c98135580e68c4e2b971
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.