ETH Price: $3,410.44 (-1.52%)
Gas: 9 Gwei

Token

SHANGHAI (HAI)
 

Overview

Max Total Supply

100,000,000 HAI

Holders

243

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
38,734.143841297658220101 HAI

Value
$0.00
0x9bf8fae6b3a5eb044a92d0d4dd270c1c76b7dcef
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:
SHANGHAI

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT                                                                               


pragma solidity 0.8.15;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override 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 _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function _createInitialSupply(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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);
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

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

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    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);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function removeLiquidityETH(address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external returns (uint amountToken, uint amountETH);
}

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

contract SHANGHAI is ERC20, Ownable {

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWallet;

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address public treasuryAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public blockForPenaltyEnd;
    mapping (address => bool) public boughtEarly;
    address[] public earlyBuyers;
    uint256 public botsCaught;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    mapping (address => bool) public privateSaleWallets;
    mapping (address => uint256) public nextPrivateWalletSellDate;
    uint256 public maxPrivSaleSell = 1 ether;
    
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyTreasuryFee;
    uint256 public buyLiquidityFee;
    uint256 public buyBurnFee;

    uint256 public sellTotalFees;
    uint256 public sellTreasuryFee;
    uint256 public sellLiquidityFee;
    uint256 public sellBurnFee;

    uint256 public constant FEE_DIVISOR = 10000;

    uint256 public tokensForTreasury;
    uint256 public tokensForLiquidity;

    uint256 public lpWithdrawRequestTimestamp;
    uint256 public lpWithdrawRequestDuration = 1 seconds;
    bool public lpWithdrawRequestPending;
    uint256 public lpPercToWithDraw;

    uint256 public percentForLPBurn = 5; // 5 = .05%
    bool public lpBurnEnabled = false;
    uint256 public lpBurnFrequency = 1800 seconds;
    uint256 public lastLpBurnTime;
    
    uint256 public manualBurnFrequency = 30 seconds;
    uint256 public lastManualLpBurnTime;
    
    /******************/

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    // 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;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event EnabledTrading();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedTreasuryAddress(address indexed newWallet);

    event UpdatedDevAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event AutoBurnLP(uint256 indexed tokensBurned);

    event ManualBurnLP(uint256 indexed tokensBurned);

    event TransferForeignToken(address token, uint256 amount);

    event UpdatedPrivateMaxSell(uint256 amount);

    event RequestedLPWithdraw();
    
    event WithdrewLPForMigration();

    event CanceledLpWithdrawRequest();

    constructor() ERC20("SHANGHAI", "HAI") payable {
        
        address newOwner = msg.sender; // can leave alone if owner is deployer.
        address _dexRouter;

        if(block.chainid == 1){
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
        } else if(block.chainid == 5){
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
        } else if(block.chainid == 56){
            _dexRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BNB Chain: PCS V2
        } else if(block.chainid == 97){
            _dexRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BNB Chain: PCS V2
        } else if(block.chainid == 42161){
            _dexRouter = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506; // Arbitrum: SushiSwap
        } else {
            revert("Chain not configured");
        }

        // initialize router
        dexRouter = IDexRouter(_dexRouter);

        uint256 totalSupply = 1 * 1e8 * (10 ** decimals());
        
        maxBuyAmount = totalSupply * 1 / 100;
        maxSellAmount = totalSupply * 1 / 100;
        maxWallet = totalSupply * 1 / 100;
        swapTokensAtAmount = totalSupply * 25 / 100000;

        buyTreasuryFee = 400;
        buyLiquidityFee = 100;
        buyBurnFee = 0;
        buyTotalFees = buyTreasuryFee + buyLiquidityFee + buyBurnFee;

        sellTreasuryFee = 1900;
        sellLiquidityFee = 600;
        sellBurnFee = 0;
        sellTotalFees = sellTreasuryFee + sellLiquidityFee + sellBurnFee;

        treasuryAddress = address(msg.sender);

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(address(treasuryAddress), true);
        _excludeFromMaxTransaction(address(dexRouter), true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(treasuryAddress), true);
        excludeFromFees(address(dexRouter), true);

        
        _createInitialSupply(address(this), totalSupply * 99 / 100);  // update with % for LP
        _createInitialSupply(newOwner, totalSupply - balanceOf(address(this)));
        transferOwnership(newOwner);
    }

    receive() external payable {}
    
    function enableTrading(uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        require(blocksForPenalty <= 50, "Cannot make penalty blocks more than 50");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        emit EnabledTrading();
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
        maxBuyAmount = totalSupply();
        maxSellAmount = totalSupply();
        emit RemovedLimits();
    }

    function getEarlyBuyers() external view returns (address[] memory){
        return earlyBuyers;
    }

    function massRemoveBoughtEarly(address[] calldata accounts) external onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++){
            boughtEarly[accounts[i]] = false;
        }
    }

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

    function emergencyUpdateRouter(address router) external onlyOwner {
        require(!tradingActive, "Cannot update after trading is functional");
        dexRouter = IDexRouter(router);
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }
    
    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / (10 ** decimals()), "Cannot set max buy amount lower than 0.1%");
        maxBuyAmount = newNum * (10 ** decimals());
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }
    
    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / (10 ** decimals()), "Cannot set max sell amount lower than 0.1%");
        maxSellAmount = newNum * (10 ** decimals());
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxWallet(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 100) / (10 ** decimals()), "Cannot set max wallet amount lower than %");
        maxWallet = newNum * (10 ** decimals());
        emit UpdatedMaxWalletAmount(maxWallet);
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 1 / 1000, "Swap amount cannot be higher than 0.1% total supply.");
  	    swapTokensAtAmount = newAmount;
  	}
    
    function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }
     
    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != lpPair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != lpPair, "The pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        _excludeFromMaxTransaction(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(uint256 _treasuryFee, uint256 _liquidityFee, uint256 _burnFee) external onlyOwner {
        buyTreasuryFee = _treasuryFee;
        buyLiquidityFee = _liquidityFee;
        buyBurnFee = _burnFee;
        buyTotalFees = buyTreasuryFee + buyLiquidityFee + buyBurnFee;
        require(buyTotalFees <= 30 * FEE_DIVISOR / 100, "Must keep fees at 10% or less");
    }

    function updateSellFees(uint256 _treasuryFee, uint256 _liquidityFee,uint256 _burnFee) external onlyOwner {
        sellTreasuryFee = _treasuryFee;
        sellLiquidityFee = _liquidityFee;
        sellBurnFee = _burnFee;
        sellTotalFees = sellTreasuryFee + sellLiquidityFee + sellBurnFee;
        require(sellTotalFees <= 30 * FEE_DIVISOR / 100, "Must keep fees at 20% or less");
    }

    function massExcludeFromFees(address[] calldata accounts, bool excluded) external onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++){
            _isExcludedFromFees[accounts[i]] = excluded;
            emit ExcludeFromFees(accounts[i], excluded);
        }
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function _transfer(address from, address to, uint256 amount) internal override {

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

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

        if(privateSaleWallets[from]){
            if(automatedMarketMakerPairs[to]){
                //enforce max sell restrictions.
                require(nextPrivateWalletSellDate[from] <= block.timestamp, "Cannot sell yet");
                require(amount <= getPrivateSaleMaxSell(), "Attempting to sell over max sell amount.  Check max.");
                nextPrivateWalletSellDate[from] = block.timestamp + 24 hours;
            } else if(!_isExcludedFromFees[to]){
                revert("Private sale cannot transfer and must sell only or transfer to a whitelisted address.");
            }
        }
        
        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){
                
                // 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 - 2 && _holderLastTransferTimestamp[to] < block.number - 2, "_transfer:: Transfer Delay enabled.  Try again later.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy.");
                    require(amount + balanceOf(to) <= maxWallet, "Cannot exceed max wallet");
                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxSellAmount, "Sell transfer amount exceeds the max sell.");
                }
                else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(amount + balanceOf(to) <= maxWallet, "Cannot exceed max wallet");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if(canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        if(!swapping && automatedMarketMakerPairs[to] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !_isExcludedFromFees[from]){
            autoBurnLiquidityPairTokens();
        }

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        uint256 tokensToBurn = 0;

        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // bot/sniper penalty.
            if(earlyBuyPenaltyInEffect() && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] && !_isExcludedFromFees[to] && buyTotalFees > 0){
                
                if(!earlyBuyPenaltyInEffect()){
                    // reduce by 1 wei per max buy over what Uniswap will allow to revert bots as best as possible to limit erroneously blacklisted wallets. First bot will get in and be blacklisted, rest will be reverted (*cross fingers*)
                    maxBuyAmount -= 1;
                }

                if(!boughtEarly[to]){
                    boughtEarly[to] = true;
                    botsCaught += 1;
                    earlyBuyers.push(to);
                    emit CaughtEarlyBuyer(to);
                }

                fees = amount * buyTotalFees / FEE_DIVISOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForTreasury += fees * buyTreasuryFee / buyTotalFees;
                tokensToBurn = fees * buyBurnFee / buyTotalFees;
            }

            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees / FEE_DIVISOR;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForTreasury += fees * sellTreasuryFee / sellTotalFees;
                tokensToBurn = fees * sellBurnFee / buyTotalFees;
            }

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / FEE_DIVISOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForTreasury += fees * buyTreasuryFee / buyTotalFees;
                tokensToBurn = fees * buyBurnFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
                if(tokensToBurn > 0){
                    super._transfer(address(this), address(0xdead), tokensToBurn);
                }
            }
        	
        	amount -= fees;
        }

        super._transfer(from, to, amount);
    }

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

    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        _approve(address(this), address(dexRouter), tokenAmount);

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(dexRouter), tokenAmount);

        // add the liquidity
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }

    function swapBack() private {

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForTreasury;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 10){
            contractBalance = swapTokensAtAmount * 10;
        }

        bool success;
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        
        swapTokensForEth(contractBalance - liquidityTokens); 
        
        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForTreasury = ethBalance * tokensForTreasury / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForTreasury;
            
        tokensForLiquidity = 0;
        tokensForTreasury = 0;
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        (success,) = address(treasuryAddress).call{value: address(this).balance}("");
    }

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

    // withdraw ETH if stuck or someone sends to the address
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function setTreasuryAddress(address _treasuryAddress) external onlyOwner {
        require(_treasuryAddress != address(0), "_treasuryAddress address cannot be 0");
        treasuryAddress = payable(_treasuryAddress);
        emit UpdatedTreasuryAddress(_treasuryAddress);
    }

    // force Swap back if slippage issues.
    function forceSwapBack() external onlyOwner {
        require(balanceOf(address(this)) >= swapTokensAtAmount, "Can only swap when token amount is at or higher than restriction");
        swapping = true;
        swapBack();
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    }

    function getPrivateSaleMaxSell() public view returns (uint256){
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);
        
        uint256[] memory amounts = new uint256[](2);
        amounts = dexRouter.getAmountsOut(maxPrivSaleSell, path);
        return amounts[1] + (amounts[1] * (sellLiquidityFee + sellTreasuryFee))/100;
    }

    function setPrivateSaleMaxSell(uint256 amount) external onlyOwner{
        require(amount >= 10 && amount <= 50000, "Must set between 0.1 and 500 BNB");
        maxPrivSaleSell = amount * 1e16;
        emit UpdatedPrivateMaxSell(amount);
    }

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

        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 300, "Can only airdrop 300 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];
            privateSaleWallets[wallet] = true;
            nextPrivateWalletSellDate[wallet] = block.timestamp + 24 hours;
            uint256 amount = amountsInTokens[i] * (10 ** decimals());
            super._transfer(msg.sender, wallet, amount);
        }

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

        // 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
            address(this),
            block.timestamp
        );
    }

    function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner {
        require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes");
        require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%");
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }
    
    function autoBurnLiquidityPairTokens() internal {
        
        lastLpBurnTime = block.timestamp;
        
        lastManualLpBurnTime = block.timestamp;
        uint256 lpBalance = IERC20(lpPair).balanceOf(address(this));
        uint256 tokenBalance = balanceOf(address(this));
        uint256 lpAmount = lpBalance * percentForLPBurn / 10000;
        uint256 initialEthBalance = address(this).balance;

        // approve token transfer to cover all possible scenarios
        IERC20(lpPair).approve(address(dexRouter), lpAmount);

        // remove the liquidity
        dexRouter.removeLiquidityETH(
            address(this),
            lpAmount,
            1, // slippage is unavoidable
            1, // slippage is unavoidable
            address(this),
            block.timestamp
        );

        uint256 deltaTokenBalance = balanceOf(address(this)) - tokenBalance;
        if(deltaTokenBalance > 0){
            super._transfer(address(this), address(0xdead), deltaTokenBalance);
        }

        uint256 deltaEthBalance = address(this).balance - initialEthBalance;

        if(deltaEthBalance > 0){
            buyBackTokens(deltaEthBalance);
        }

        emit AutoBurnLP(lpAmount);
    }

    function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner {
        require(percent <=2000, "May not burn more than 20% of contract's LP at a time");
        require(lastManualLpBurnTime <= block.timestamp - manualBurnFrequency, "Burn too soon");
        lastManualLpBurnTime = block.timestamp;
        uint256 lpBalance = IERC20(lpPair).balanceOf(address(this));
        uint256 tokenBalance = balanceOf(address(this));
        uint256 lpAmount = lpBalance * percent / 10000;
        uint256 initialEthBalance = address(this).balance;

        // approve token transfer to cover all possible scenarios
        IERC20(lpPair).approve(address(dexRouter), lpAmount);

        // remove the liquidity
        dexRouter.removeLiquidityETH(
            address(this),
            lpAmount,
            1, // slippage is unavoidable
            1, // slippage is unavoidable
            address(this),
            block.timestamp
        );

        uint256 deltaTokenBalance = balanceOf(address(this)) - tokenBalance;
        if(deltaTokenBalance > 0){
            super._transfer(address(this), address(0xdead), deltaTokenBalance);
        }

        uint256 deltaEthBalance = address(this).balance - initialEthBalance;

        if(deltaEthBalance > 0){
            buyBackTokens(deltaEthBalance);
        }

        emit ManualBurnLP(lpAmount);
    }

    function buyBackTokens(uint256 amountInWei) internal {
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);

        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountInWei}(
            0,
            path,
            address(0xdead),
            block.timestamp
        );
    }

    function requestToWithdrawLP(uint256 percToWithdraw) external onlyOwner {
        require(!lpWithdrawRequestPending, "Cannot request again until first request is over.");
        require(percToWithdraw <= 100 && percToWithdraw > 0, "Need to set between 1-100%");
        lpWithdrawRequestTimestamp = block.timestamp;
        lpWithdrawRequestPending = true;
        lpPercToWithDraw = percToWithdraw;
        emit RequestedLPWithdraw();
    }

    function nextAvailableLpWithdrawDate() public view returns (uint256){
        if(lpWithdrawRequestPending){
            return lpWithdrawRequestTimestamp + lpWithdrawRequestDuration;
        }
        else {
            return 0;  // 0 means no open requests
        }
    }

    function withdrawRequestedLP() external onlyOwner {
        require(block.timestamp >= nextAvailableLpWithdrawDate() && nextAvailableLpWithdrawDate() > 0, "Must request and wait.");
        lpWithdrawRequestTimestamp = 0;
        lpWithdrawRequestPending = false;

        uint256 amtToWithdraw = IERC20(address(lpPair)).balanceOf(address(this)) * lpPercToWithDraw / 100;
        
        lpPercToWithDraw = 0;

        IERC20(lpPair).transfer(msg.sender, amtToWithdraw);
    }

    function cancelLPWithdrawRequest() external onlyOwner {
        lpWithdrawRequestPending = false;
        lpPercToWithDraw = 0;
        lpWithdrawRequestTimestamp = 0;
        emit CanceledLpWithdrawRequest();
    }
}

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":true,"internalType":"uint256","name":"tokensBurned","type":"uint256"}],"name":"AutoBurnLP","type":"event"},{"anonymous":false,"inputs":[],"name":"CanceledLpWithdrawRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokensBurned","type":"uint256"}],"name":"ManualBurnLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","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":[],"name":"RequestedLPWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":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":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedDevAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UpdatedPrivateMaxSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedTreasuryAddress","type":"event"},{"anonymous":false,"inputs":[],"name":"WithdrewLPForMigration","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","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":[{"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":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cancelLPWithdrawRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earlyBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"emergencyUpdateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","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":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getEarlyBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrivateSaleMaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPercToWithDraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWithdrawRequestDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWithdrawRequestPending","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWithdrawRequestTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"massExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"massRemoveBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPrivSaleSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextAvailableLpWithdrawDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nextPrivateWalletSellDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"privateSaleWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uint256","name":"percToWithdraw","type":"uint256"}],"name":"requestToWithdrawLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","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":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","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":"amount","type":"uint256"}],"name":"setPrivateSaleMaxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryAddress","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawRequestedLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600d556012805462ffffff19166001908117909155670de0b6b3a76400006015556017805460ff1990811683179091556023919091556005602655602780549091169055610708602855601e602a5560086080908152675348414e4748414960c01b60a052610100604052600360c08181526248414960e81b60e052906200008a8382620007d6565b506004620000998282620007d6565b5050506000620000ae6200043e60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000906000805160206200604c833981519152908290a35033600046600103620001135750737a250d5630b4cf539739df2c5dacb4c659f2488d620001f5565b46600503620001385750737a250d5630b4cf539739df2c5dacb4c659f2488d620001f5565b466038036200015d57507310ed43c718714eb63d5aa57b78b54704e256024e620001f5565b4660610362000182575073d99d1c33f9fc3444f8101754abc46c52416550d1620001f5565b4661a4b103620001a85750731b02da8cb0d097eb8d57a175b88c7d8b47997506620001f5565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b600980546001600160a01b0319166001600160a01b03831617905560006200021b601290565b6200022890600a620009b7565b62000238906305f5e100620009cf565b9050606462000249826001620009cf565b620002559190620009f1565b600655606462000267826001620009cf565b620002739190620009f1565b600755606462000285826001620009cf565b620002919190620009f1565b600855620186a0620002a5826019620009cf565b620002b19190620009f1565b600b5561019060198190556064601a8190556000601b81905591620002d7919062000a14565b620002e3919062000a14565b60185561076c601d819055610258601e8190556000601f819055916200030a919062000a14565b62000316919062000a14565b601c55600c80546001600160a01b031916331790556200033883600162000442565b6200034530600162000442565b6200035461dead600162000442565b600c546200036d906001600160a01b0316600162000442565b60095462000386906001600160a01b0316600162000442565b62000393836001620004a5565b620003a0306001620004a5565b620003af61dead6001620004a5565b600c54620003c8906001600160a01b03166001620004a5565b600954620003e1906001600160a01b03166001620004a5565b62000407306064620003f5846063620009cf565b620004019190620009f1565b6200054f565b306000908152602081905260409020546200042a90849062000401908462000a2f565b620004358362000634565b50505062000a49565b3390565b6001600160a01b0382166000818152602d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6005546001600160a01b03163314620004f05760405162461bcd60e51b815260206004820181905260248201526000805160206200602c8339815191526044820152606401620001ec565b6001600160a01b0382166000818152602c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005a75760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620001ec565b8060026000828254620005bb919062000a14565b90915550506001600160a01b03821660009081526020819052604081208054839290620005ea90849062000a14565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b031633146200067f5760405162461bcd60e51b815260206004820181905260248201526000805160206200602c8339815191526044820152606401620001ec565b6001600160a01b038116620006e65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620001ec565b6005546040516001600160a01b038084169216906000805160206200604c83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200075c57607f821691505b6020821081036200077d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620007d157600081815260208120601f850160051c81016020861015620007ac5750805b601f850160051c820191505b81811015620007cd57828155600101620007b8565b5050505b505050565b81516001600160401b03811115620007f257620007f262000731565b6200080a8162000803845462000747565b8462000783565b602080601f831160018114620008425760008415620008295750858301515b600019600386901b1c1916600185901b178555620007cd565b600085815260208120601f198616915b82811015620008735788860151825594840194600190910190840162000852565b5085821015620008925787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620008f9578160001904821115620008dd57620008dd620008a2565b80851615620008eb57918102915b93841c9390800290620008bd565b509250929050565b6000826200091257506001620009b1565b816200092157506000620009b1565b81600181146200093a5760028114620009455762000965565b6001915050620009b1565b60ff841115620009595762000959620008a2565b50506001821b620009b1565b5060208310610133831016604e8410600b84101617156200098a575081810a620009b1565b620009968383620008b8565b8060001904821115620009ad57620009ad620008a2565b0290505b92915050565b6000620009c860ff84168362000901565b9392505050565b6000816000190483118215151615620009ec57620009ec620008a2565b500290565b60008262000a0f57634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111562000a2a5762000a2a620008a2565b500190565b60008282101562000a445762000a44620008a2565b500390565b6155d38062000a596000396000f3fe6080604052600436106104c45760003560e01c80638366e79a11610276578063c5f956af1161014f578063ead010ae116100c1578063f2fde38b11610085578063f2fde38b14610e1a578063f5648a4f14610e3a578063f637434214610e4f578063f8b45b0514610e65578063fd361d0e14610e7b578063fe72b27a14610e9557600080fd5b8063ead010ae14610d98578063eb472fc414610db8578063ee40166e14610dd8578063ee44b44e14610dee578063f11a24d314610e0457600080fd5b8063d85ba06311610113578063d85ba06314610cdb578063dc3f0d0f14610cf1578063dd62ed3e14610d11578063e2f4560514610d57578063e71dc3f514610d6d578063e884f26014610d8357600080fd5b8063c5f956af14610c56578063c7c61e2c14610c76578063c876d0b914610c8b578063cc2ffe7c14610ca5578063d257b34f14610cbb57600080fd5b8063a62068ce116101e8578063b62496f5116101ac578063b62496f514610b87578063bbc0c74214610bb7578063bd5fb92014610bd6578063befd2fac14610bf6578063c024666814610c16578063c17b5b8c14610c3657600080fd5b8063a62068ce14610af5578063a9059cbb14610b0b578063acee28d114610b2b578063adb873bd14610b41578063afd6ce6114610b5757600080fd5b80639a5bd2dd1161023a5780639a5bd2dd14610a515780639a7a23d614610a735780639e93ad8e14610a935780639ec22c0e14610aa9578063a457c2d714610abf578063a4c82a0014610adf57600080fd5b80638366e79a146109b857806385ecfd28146109d857806388e765ff14610a085780638da5cb5b14610a1e57806395d89b4114610a3c57600080fd5b806354b85746116103a857806370a082311161031a578063751039fc116102de578063751039fc146109185780637571336a1461092d578063763cef491461094d578063783102eb146109625780638095d5641461097857806382aa7c681461099857600080fd5b806370a0823114610899578063712c2985146108b9578063713d0974146108ce578063715018a6146108e3578063730c1888146108f857600080fd5b80636605bfda1161036c5780636605bfda1461080157806366d602ae146108215780636a486a8e146108375780636b0a894c1461084d5780636b2fb124146108635780636ddd17131461087957600080fd5b806354b857461461076757806358a6d531146107875780635bb988c91461079e5780635c068a8c146107be5780635c3352d3146107d457600080fd5b80631a8145bb116104415780632e82f1a0116104055780632e82f1a0146106c2578063313ce567146106dc57806339509351146106f8578063452ed4f1146107185780634a62bb651461073857806351f205e41461075257600080fd5b80631a8145bb146106365780631c499ab01461064c57806323b872dd1461066c5780632be32b611461068c5780632c3e486c146106ac57600080fd5b80631805805b116104885780631805805b146105b357806318160ddd146105d5578063184c16c5146105ea57806318e1c12314610600578063199ffc721461062057600080fd5b8063058054c9146104d057806306fdde03146104f95780630758d9241461051b578063095ea7b31461055357806310d5de531461058357600080fd5b366104cb57005b600080fd5b3480156104dc57600080fd5b506104e660225481565b6040519081526020015b60405180910390f35b34801561050557600080fd5b5061050e610eb5565b6040516104f09190614bf1565b34801561052757600080fd5b5060095461053b906001600160a01b031681565b6040516001600160a01b0390911681526020016104f0565b34801561055f57600080fd5b5061057361056e366004614c5e565b610f47565b60405190151581526020016104f0565b34801561058f57600080fd5b5061057361059e366004614c8a565b602d6020526000908152604090205460ff1681565b3480156105bf57600080fd5b506105d36105ce366004614c8a565b610f5e565b005b3480156105e157600080fd5b506002546104e6565b3480156105f657600080fd5b506104e6602a5481565b34801561060c57600080fd5b506105d361061b366004614cae565b61101d565b34801561062c57600080fd5b506104e660265481565b34801561064257600080fd5b506104e660215481565b34801561065857600080fd5b506105d3610667366004614cae565b6110f1565b34801561067857600080fd5b50610573610687366004614cc7565b6111fd565b34801561069857600080fd5b506105d36106a7366004614cae565b6112a7565b3480156106b857600080fd5b506104e660285481565b3480156106ce57600080fd5b506027546105739060ff1681565b3480156106e857600080fd5b50604051601281526020016104f0565b34801561070457600080fd5b50610573610713366004614c5e565b6113b4565b34801561072457600080fd5b50600a5461053b906001600160a01b031681565b34801561074457600080fd5b506012546105739060ff1681565b34801561075e57600080fd5b506105d36113f0565b34801561077357600080fd5b506105d3610782366004614d54565b6114f9565b34801561079357600080fd5b50600e544310610573565b3480156107aa57600080fd5b506105d36107b9366004614c8a565b61159a565b3480156107ca57600080fd5b506104e660195481565b3480156107e057600080fd5b506104e66107ef366004614c8a565b60146020526000908152604090205481565b34801561080d57600080fd5b506105d361081c366004614c8a565b61164d565b34801561082d57600080fd5b506104e660075481565b34801561084357600080fd5b506104e6601c5481565b34801561085957600080fd5b506104e660115481565b34801561086f57600080fd5b506104e6601d5481565b34801561088557600080fd5b506012546105739062010000900460ff1681565b3480156108a557600080fd5b506104e66108b4366004614c8a565b611723565b3480156108c557600080fd5b506104e661173e565b3480156108da57600080fd5b506104e6611767565b3480156108ef57600080fd5b506105d3611963565b34801561090457600080fd5b506105d3610913366004614da4565b6119d7565b34801561092457600080fd5b506105d3611b00565b34801561093957600080fd5b506105d3610948366004614ddd565b611b77565b34801561095957600080fd5b506105d3611c3f565b34801561096e57600080fd5b506104e660255481565b34801561098457600080fd5b506105d3610993366004614e16565b611de0565b3480156109a457600080fd5b506105d36109b3366004614cae565b611e9b565b3480156109c457600080fd5b506105736109d3366004614e42565b611f8f565b3480156109e457600080fd5b506105736109f3366004614c8a565b600f6020526000908152604090205460ff1681565b348015610a1457600080fd5b506104e660065481565b348015610a2a57600080fd5b506005546001600160a01b031661053b565b348015610a4857600080fd5b5061050e6121c9565b348015610a5d57600080fd5b50610a666121d8565b6040516104f09190614eb4565b348015610a7f57600080fd5b506105d3610a8e366004614ddd565b612239565b348015610a9f57600080fd5b506104e661271081565b348015610ab557600080fd5b506104e6602b5481565b348015610acb57600080fd5b50610573610ada366004614c5e565b61232d565b348015610aeb57600080fd5b506104e660295481565b348015610b0157600080fd5b506104e6600e5481565b348015610b1757600080fd5b50610573610b26366004614c5e565b6123c6565b348015610b3757600080fd5b506104e660155481565b348015610b4d57600080fd5b506104e6601f5481565b348015610b6357600080fd5b50610573610b72366004614c8a565b60136020526000908152604090205460ff1681565b348015610b9357600080fd5b50610573610ba2366004614c8a565b602e6020526000908152604090205460ff1681565b348015610bc357600080fd5b5060125461057390610100900460ff1681565b348015610be257600080fd5b506105d3610bf1366004614ec7565b6123d3565b348015610c0257600080fd5b506105d3610c11366004614cae565b6124df565b348015610c2257600080fd5b506105d3610c31366004614ddd565b612615565b348015610c4257600080fd5b506105d3610c51366004614e16565b61269e565b348015610c6257600080fd5b50600c5461053b906001600160a01b031681565b348015610c8257600080fd5b506105d3612759565b348015610c9757600080fd5b506017546105739060ff1681565b348015610cb157600080fd5b506104e660205481565b348015610cc757600080fd5b506105d3610cd6366004614cae565b6127c2565b348015610ce757600080fd5b506104e660185481565b348015610cfd57600080fd5b506105d3610d0c366004614cae565b61290d565b348015610d1d57600080fd5b506104e6610d2c366004614e42565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d6357600080fd5b506104e6600b5481565b348015610d7957600080fd5b506104e6601b5481565b348015610d8f57600080fd5b506105d3612a1b565b348015610da457600080fd5b506105d3610db3366004614fe9565b612a51565b348015610dc457600080fd5b5061053b610dd3366004614cae565b612fff565b348015610de457600080fd5b506104e6600d5481565b348015610dfa57600080fd5b506104e660235481565b348015610e1057600080fd5b506104e6601a5481565b348015610e2657600080fd5b506105d3610e35366004614c8a565b613029565b348015610e4657600080fd5b506105d3613114565b348015610e5b57600080fd5b506104e6601e5481565b348015610e7157600080fd5b506104e660085481565b348015610e8757600080fd5b506024546105739060ff1681565b348015610ea157600080fd5b506105d3610eb0366004614cae565b613180565b606060038054610ec4906150b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef0906150b4565b8015610f3d5780601f10610f1257610100808354040283529160200191610f3d565b820191906000526020600020905b815481529060010190602001808311610f2057829003601f168201915b5050505050905090565b6000610f5433848461347a565b5060015b92915050565b6005546001600160a01b03163314610f915760405162461bcd60e51b8152600401610f88906150ee565b60405180910390fd5b601254610100900460ff1615610ffb5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610f88565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146110475760405162461bcd60e51b8152600401610f88906150ee565b600a811015801561105a575061c3508111155b6110a65760405162461bcd60e51b815260206004820181905260248201527f4d75737420736574206265747765656e20302e3120616e642035303020424e426044820152606401610f88565b6110b781662386f26fc10000615139565b6015556040518181527f0320a651094de4f5fc35c0f1c336811904e8f465b6599a93eb0dec4919b8fec5906020015b60405180910390a150565b6005546001600160a01b0316331461111b5760405162461bcd60e51b8152600401610f88906150ee565b6111276012600a61523c565b606461113260025490565b61113d906001615139565b611147919061524b565b611151919061524b565b8110156111b25760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f776044820152686572207468616e202560b81b6064820152608401610f88565b6111be6012600a61523c565b6111c89082615139565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020016110e6565b600061120a84848461359e565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561128f5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610f88565b61129c853385840361347a565b506001949350505050565b6005546001600160a01b031633146112d15760405162461bcd60e51b8152600401610f88906150ee565b6112dd6012600a61523c565b6103e86112e960025490565b6112f4906001615139565b6112fe919061524b565b611308919061524b565b8110156113695760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610f88565b6113756012600a61523c565b61137f9082615139565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020016110e6565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610f549185906113eb90869061526d565b61347a565b6005546001600160a01b0316331461141a5760405162461bcd60e51b8152600401610f88906150ee565b600b5461142630611723565b101561149c576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610f88565b600a805460ff60a01b1916600160a01b1790556114b761434b565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146115235760405162461bcd60e51b8152600401610f88906150ee565b60005b81811015611595576000600f600085858581811061154657611546615285565b905060200201602081019061155b9190614c8a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061158d8161529b565b915050611526565b505050565b6005546001600160a01b031633146115c45760405162461bcd60e51b8152600401610f88906150ee565b6001600160a01b0381166000908152600f602052604090205460ff1661162c5760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610f88565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6005546001600160a01b031633146116775760405162461bcd60e51b8152600401610f88906150ee565b6001600160a01b0381166116d95760405162461bcd60e51b8152602060048201526024808201527f5f74726561737572794164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610f88565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6001600160a01b031660009081526020819052604090205490565b60245460009060ff16156117615760235460225461175c919061526d565b905090565b50600090565b604080516002808252606082018352600092839291906020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156117d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f991906152b4565b8160008151811061180c5761180c615285565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061184057611840615285565b6001600160a01b039290921660209283029190910182015260408051600280825260608201835260009391929091830190803683370190505060095460155460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f916118af9186906004016152d1565b600060405180830381865afa1580156118cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118f491908101906152f2565b90506064601d54601e54611908919061526d565b8260018151811061191b5761191b615285565b602002602001015161192d9190615139565b611937919061524b565b8160018151811061194a5761194a615285565b602002602001015161195c919061526d565b9250505090565b6005546001600160a01b0316331461198d5760405162461bcd60e51b8152600401610f88906150ee565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314611a015760405162461bcd60e51b8152600401610f88906150ee565b610258831015611a6f5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610f88565b6103e88211158015611a7f575060015b611ae45760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610f88565b6028929092556026556027805460ff1916911515919091179055565b6005546001600160a01b03163314611b2a5760405162461bcd60e51b8152600401610f88906150ee565b6012805460ff199081169091556017805490911690556002546006556002546007556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b03163314611ba15760405162461bcd60e51b8152600401610f88906150ee565b80611c1457600a546001600160a01b0390811690831603611c145760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610f88565b6001600160a01b03919091166000908152602d60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611c695760405162461bcd60e51b8152600401610f88906150ee565b611c7161173e565b4210158015611c8757506000611c8561173e565b115b611ccc5760405162461bcd60e51b815260206004820152601660248201527526bab9ba103932b8bab2b9ba1030b732103bb0b4ba1760511b6044820152606401610f88565b600060228190556024805460ff19168155602554600a546040516370a0823160e01b81523060048201526064936001600160a01b03909216916370a082319101602060405180830381865afa158015611d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4d9190615383565b611d579190615139565b611d61919061524b565b6000602555600a5460405163a9059cbb60e01b8152336004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611db8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddc919061539c565b5050565b6005546001600160a01b03163314611e0a5760405162461bcd60e51b8152600401610f88906150ee565b6019839055601a829055601b81905580611e24838561526d565b611e2e919061526d565b6018556064611e40612710601e615139565b611e4a919061524b565b60185411156115955760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610f88565b6005546001600160a01b03163314611ec55760405162461bcd60e51b8152600401610f88906150ee565b601254610100900460ff1615611f1d5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610f88565b6032811115611f3e5760405162461bcd60e51b8152600401610f88906153b9565b6012805462ffff0019166201010017905543600d819055611f6090829061526d565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b03163314611fbc5760405162461bcd60e51b8152600401610f88906150ee565b6001600160a01b0383166120125760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610f88565b6001600160a01b038316301415806120325750601254610100900460ff16155b61209b5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610f88565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156120e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121069190615383565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015612159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217d919061539c565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610ec4906150b4565b60606010805480602002602001604051908101604052809291908181526020018280548015610f3d57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612212575050505050905090565b6005546001600160a01b031633146122635760405162461bcd60e51b8152600401610f88906150ee565b600a546001600160a01b03908116908316036122e75760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610f88565b6122f182826144ad565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156123af5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610f88565b6123bc338585840361347a565b5060019392505050565b6000610f5433848461359e565b6005546001600160a01b031633146123fd5760405162461bcd60e51b8152600401610f88906150ee565b60005b828110156124d95781602c600086868581811061241f5761241f615285565b90506020020160208101906124349190614c8a565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905583838281811061246e5761246e615285565b90506020020160208101906124839190614c8a565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7836040516124bf911515815260200190565b60405180910390a2806124d18161529b565b915050612400565b50505050565b6005546001600160a01b031633146125095760405162461bcd60e51b8152600401610f88906150ee565b60245460ff16156125765760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f74207265717565737420616761696e20756e74696c206669727374604482015270103932b8bab2b9ba1034b99037bb32b91760791b6064820152608401610f88565b606481111580156125875750600081115b6125d35760405162461bcd60e51b815260206004820152601a60248201527f4e65656420746f20736574206265747765656e20312d313030250000000000006044820152606401610f88565b426022556024805460ff1916600117905560258190556040517fd99a77b2f3951cd076e75814e44db497e6abc203dd251329da0b62c288f9f48b90600090a150565b6005546001600160a01b0316331461263f5760405162461bcd60e51b8152600401610f88906150ee565b6001600160a01b0382166000818152602c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146126c85760405162461bcd60e51b8152600401610f88906150ee565b601d839055601e829055601f819055806126e2838561526d565b6126ec919061526d565b601c5560646126fe612710601e615139565b612708919061524b565b601c5411156115955760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610f88565b6005546001600160a01b031633146127835760405162461bcd60e51b8152600401610f88906150ee565b6024805460ff191690556000602581905560228190556040517ffbcc1c208c9c4d1d9f557267b55c5ae316e74ce676a0db72ef18c6d5f5767c619190a1565b6005546001600160a01b031633146127ec5760405162461bcd60e51b8152600401610f88906150ee565b620186a06127f960025490565b612804906001615139565b61280e919061524b565b81101561287b5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610f88565b6103e861288760025490565b612892906001615139565b61289c919061524b565b8111156129085760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610f88565b600b55565b6005546001600160a01b031633146129375760405162461bcd60e51b8152600401610f88906150ee565b6129436012600a61523c565b6103e861294f60025490565b61295a906001615139565b612964919061524b565b61296e919061524b565b8110156129d05760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610f88565b6129dc6012600a61523c565b6129e69082615139565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e906020016110e6565b6005546001600160a01b03163314612a455760405162461bcd60e51b8152600401610f88906150ee565b6017805460ff19169055565b6005546001600160a01b03163314612a7b5760405162461bcd60e51b8152600401610f88906150ee565b601254610100900460ff1615612ae75760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610f88565b60328110612b075760405162461bcd60e51b8152600401610f88906153b9565b8151835114612b585760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610f88565b61012c835110612bc95760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203330302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610f88565b60005b8351811015612c96576000848281518110612be957612be9615285565b6020908102919091018101516001600160a01b038116600090815260139092526040909120805460ff191660011790559050612c28426201518061526d565b6001600160a01b038216600090815260146020526040812091909155612c506012600a61523c565b858481518110612c6257612c62615285565b6020026020010151612c749190615139565b9050612c813383836144db565b50508080612c8e9061529b565b915050612bcc565b506012805462ffff0019166201010017905543600d819055612cb990829061526d565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d5c91906152b4565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de291906152b4565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612e2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e5391906152b4565b600a80546001600160a01b0319166001600160a01b03929092169182179055612e7d906001614630565b600a54612e94906001600160a01b031660016144ad565b60004711612ef05760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610f88565b6000612efb30611723565b11612f575760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610f88565b600954612f729030906001600160a01b03166113eb82611723565b6009546001600160a01b031663f305d7194730612f8e81611723565b60008030426040518863ffffffff1660e01b8152600401612fb496959493929190615400565b60606040518083038185885af1158015612fd2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ff7919061543b565b505050505050565b6010818154811061300f57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146130535760405162461bcd60e51b8152600401610f88906150ee565b6001600160a01b0381166130b85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f88565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461313e5760405162461bcd60e51b8152600401610f88906150ee565b604051600090339047908381818185875af1925050503d80600081146124d9576040519150601f19603f3d011682016040523d82523d6000602084013e6124d9565b6005546001600160a01b031633146131aa5760405162461bcd60e51b8152600401610f88906150ee565b6107d081111561321a5760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20323025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401610f88565b602a546132279042615469565b602b5411156132685760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401610f88565b42602b55600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156132b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d99190615383565b905060006132e630611723565b905060006127106132f78585615139565b613301919061524b565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af115801561335b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061337f919061539c565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec906133ba9030908690600190819084904290600401615400565b60408051808303816000875af11580156133d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133fc9190615480565b505060008361340a30611723565b6134149190615469565b90508015613429576134293061dead836144db565b60006134358347615469565b905080156134465761344681614693565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b0383166134dc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f88565b6001600160a01b03821661353d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f88565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166135c45760405162461bcd60e51b8152600401610f88906154a4565b6001600160a01b0382166135ea5760405162461bcd60e51b8152600401610f88906154e9565b6000811161363a5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610f88565b601254610100900460ff166136cd576001600160a01b0383166000908152602c602052604090205460ff168061368857506001600160a01b0382166000908152602c602052604090205460ff165b6136cd5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610f88565b600e5443101580156136e65750601254610100900460ff165b156137b6576001600160a01b0383166000908152600f602052604090205460ff16158061372057506005546001600160a01b038381169116145b8061373557506001600160a01b03821661dead145b6137b65760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610f88565b6001600160a01b03831660009081526013602052604090205460ff161561399d576001600160a01b0382166000908152602e602052604090205460ff16156138f1576001600160a01b0383166000908152601460205260409020544210156138525760405162461bcd60e51b815260206004820152600f60248201526e10d85b9b9bdd081cd95b1b081e595d608a1b6044820152606401610f88565b61385a611767565b8111156138c65760405162461bcd60e51b815260206004820152603460248201527f417474656d7074696e6720746f2073656c6c206f766572206d61782073656c6c6044820152731030b6b7bab73a17101021b432b1b59036b0bc1760611b6064820152608401610f88565b6138d3426201518061526d565b6001600160a01b03841660009081526014602052604090205561399d565b6001600160a01b0382166000908152602c602052604090205460ff1661399d5760405162461bcd60e51b815260206004820152605560248201527f507269766174652073616c652063616e6e6f74207472616e7366657220616e6460448201527f206d7573742073656c6c206f6e6c79206f72207472616e7366657220746f2061606482015274103bb434ba32b634b9ba32b21030b2323932b9b99760591b608482015260a401610f88565b60125460ff1615613d99576005546001600160a01b038481169116148015906139d457506005546001600160a01b03838116911614155b80156139e857506001600160a01b03821615155b80156139ff57506001600160a01b03821661dead14155b8015613a2457506001600160a01b0383166000908152602c602052604090205460ff16155b8015613a4957506001600160a01b0382166000908152602c602052604090205460ff16155b15613d995760175460ff1615613b62576009546001600160a01b03838116911614801590613a855750600a546001600160a01b03838116911614155b15613b6257613a95600243615469565b32600090815260166020526040902054108015613ad35750613ab8600243615469565b6001600160a01b038316600090815260166020526040902054105b613b3d5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610f88565b3260009081526016602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152602e602052604090205460ff168015613ba357506001600160a01b0382166000908152602d602052604090205460ff16155b15613c6f57600654811115613c0b5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610f88565b600854613c1783611723565b613c21908361526d565b1115613c6a5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401610f88565b613d99565b6001600160a01b0382166000908152602e602052604090205460ff168015613cb057506001600160a01b0383166000908152602d602052604090205460ff16155b15613d1a57600754811115613c6a5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610f88565b6001600160a01b0382166000908152602d602052604090205460ff16613d9957600854613d4683611723565b613d50908361526d565b1115613d995760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401610f88565b6000613da430611723565b600b5490915081108015908190613dc3575060125462010000900460ff165b8015613dd95750600a54600160a01b900460ff16155b8015613dfe57506001600160a01b0385166000908152602e602052604090205460ff16155b8015613e2357506001600160a01b0385166000908152602c602052604090205460ff16155b8015613e4857506001600160a01b0384166000908152602c602052604090205460ff16155b15613e7657600a805460ff60a01b1916600160a01b179055613e6861434b565b600a805460ff60a01b191690555b600a54600160a01b900460ff16158015613ea857506001600160a01b0384166000908152602e602052604090205460ff165b8015613eb6575060275460ff165b8015613ed15750602854602954613ecd919061526d565b4210155b8015613ef657506001600160a01b0385166000908152602c602052604090205460ff16155b15613f0357613f036147e6565b6001600160a01b0385166000908152602c602052604090205460019060ff1680613f4557506001600160a01b0385166000908152602c602052604090205460ff165b15613f4e575060005b600080821561433657600e5443108015613f8057506001600160a01b0388166000908152602e602052604090205460ff165b8015613fa557506001600160a01b0387166000908152602e602052604090205460ff16155b8015613fca57506001600160a01b0387166000908152602c602052604090205460ff16155b8015613fd857506000601854115b1561417e57600e544310613fff57600160066000828254613ff99190615469565b90915550505b6001600160a01b0387166000908152600f602052604090205460ff166140df576001600160a01b0387166000908152600f60205260408120805460ff19166001908117909155601180549192909161405890849061526d565b9091555050601080546001810182556000919091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b0389169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b612710601854876140f09190615139565b6140fa919061524b565b9150601854601a548361410d9190615139565b614117919061524b565b60216000828254614128919061526d565b909155505060185460195461413d9084615139565b614147919061524b565b60206000828254614158919061526d565b9091555050601854601b5461416d9084615139565b614177919061524b565b9050614305565b6001600160a01b0387166000908152602e602052604090205460ff1680156141a857506000601c54115b1561423b57612710601c54876141be9190615139565b6141c8919061524b565b9150601c54601e54836141db9190615139565b6141e5919061524b565b602160008282546141f6919061526d565b9091555050601c54601d5461420b9084615139565b614215919061524b565b60206000828254614226919061526d565b9091555050601854601f5461416d9084615139565b6001600160a01b0388166000908152602e602052604090205460ff16801561426557506000601854115b15614305576127106018548761427b9190615139565b614285919061524b565b9150601854601a54836142989190615139565b6142a2919061524b565b602160008282546142b3919061526d565b90915550506018546019546142c89084615139565b6142d2919061524b565b602060008282546142e3919061526d565b9091555050601854601b546142f89084615139565b614302919061524b565b90505b8115614329576143168830846144db565b8015614329576143293061dead836144db565b6143338287615469565b95505b6143418888886144db565b5050505050505050565b600061435630611723565b9050600060205460215461436a919061526d565b9050811580614377575080155b15614380575050565b600b5461438e90600a615139565b8211156143a657600b546143a390600a615139565b91505b600080600283602154866143ba9190615139565b6143c4919061524b565b6143ce919061524b565b90506143e26143dd8286615469565b614a00565b602154479081906000906143f89060029061524b565b6144029087615469565b60205461440f9085615139565b614419919061524b565b90506144258183615469565b60006021819055602055915083158015906144405750600082115b1561444f5761444f8483614b52565b600c546040516001600160a01b03909116904790600081818185875af1925050503d806000811461449c576040519150601f19603f3d011682016040523d82523d6000602084013e6144a1565b606091505b50505050505050505050565b6001600160a01b0382166000908152602e60205260409020805460ff19168215151790556122f18282614630565b6001600160a01b0383166145015760405162461bcd60e51b8152600401610f88906154a4565b6001600160a01b0382166145275760405162461bcd60e51b8152600401610f88906154e9565b6001600160a01b0383166000908152602081905260409020548181101561459f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610f88565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906145d690849061526d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161462291815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152602d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156146fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061472191906152b4565b8160008151811061473457614734615285565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061476857614768615285565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de959084906147b090600090869061dead90429060040161552c565b6000604051808303818588803b1580156147c957600080fd5b505af11580156147dd573d6000803e3d6000fd5b50505050505050565b426029819055602b55600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015614838573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061485c9190615383565b9050600061486930611723565b905060006127106026548461487e9190615139565b614888919061524b565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af11580156148e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614906919061539c565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec906149419030908690600190819084904290600401615400565b60408051808303816000875af115801561495f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149839190615480565b505060008361499130611723565b61499b9190615469565b905080156149b0576149b03061dead836144db565b60006149bc8347615469565b905080156149cd576149cd81614693565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110614a3557614a35615285565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015614a8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ab291906152b4565b81600181518110614ac557614ac5615285565b6001600160a01b039283166020918202929092010152600954614aeb913091168461347a565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790614b24908590600090869030904290600401615561565b600060405180830381600087803b158015614b3e57600080fd5b505af1158015612ff7573d6000803e3d6000fd5b600954614b6a9030906001600160a01b03168461347a565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d719908390614ba79030908790600090819084904290600401615400565b60606040518083038185885af1158015614bc5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614bea919061543b565b5050505050565b600060208083528351808285015260005b81811015614c1e57858101830151858201604001528201614c02565b81811115614c30576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114614c5b57600080fd5b50565b60008060408385031215614c7157600080fd5b8235614c7c81614c46565b946020939093013593505050565b600060208284031215614c9c57600080fd5b8135614ca781614c46565b9392505050565b600060208284031215614cc057600080fd5b5035919050565b600080600060608486031215614cdc57600080fd5b8335614ce781614c46565b92506020840135614cf781614c46565b929592945050506040919091013590565b60008083601f840112614d1a57600080fd5b50813567ffffffffffffffff811115614d3257600080fd5b6020830191508360208260051b8501011115614d4d57600080fd5b9250929050565b60008060208385031215614d6757600080fd5b823567ffffffffffffffff811115614d7e57600080fd5b614d8a85828601614d08565b90969095509350505050565b8015158114614c5b57600080fd5b600080600060608486031215614db957600080fd5b83359250602084013591506040840135614dd281614d96565b809150509250925092565b60008060408385031215614df057600080fd5b8235614dfb81614c46565b91506020830135614e0b81614d96565b809150509250929050565b600080600060608486031215614e2b57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215614e5557600080fd5b8235614e6081614c46565b91506020830135614e0b81614c46565b600081518084526020808501945080840160005b83811015614ea95781516001600160a01b031687529582019590820190600101614e84565b509495945050505050565b602081526000614ca76020830184614e70565b600080600060408486031215614edc57600080fd5b833567ffffffffffffffff811115614ef357600080fd5b614eff86828701614d08565b9094509250506020840135614dd281614d96565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614f5257614f52614f13565b604052919050565b600067ffffffffffffffff821115614f7457614f74614f13565b5060051b60200190565b600082601f830112614f8f57600080fd5b81356020614fa4614f9f83614f5a565b614f29565b82815260059290921b84018101918181019086841115614fc357600080fd5b8286015b84811015614fde5780358352918301918301614fc7565b509695505050505050565b600080600060608486031215614ffe57600080fd5b833567ffffffffffffffff8082111561501657600080fd5b818601915086601f83011261502a57600080fd5b8135602061503a614f9f83614f5a565b82815260059290921b8401810191818101908a84111561505957600080fd5b948201945b8386101561508057853561507181614c46565b8252948201949082019061505e565b9750508701359250508082111561509657600080fd5b506150a386828701614f7e565b925050604084013590509250925092565b600181811c908216806150c857607f821691505b6020821081036150e857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561515357615153615123565b500290565b600181815b8085111561519357816000190482111561517957615179615123565b8085161561518657918102915b93841c939080029061515d565b509250929050565b6000826151aa57506001610f58565b816151b757506000610f58565b81600181146151cd57600281146151d7576151f3565b6001915050610f58565b60ff8411156151e8576151e8615123565b50506001821b610f58565b5060208310610133831016604e8410600b8410161715615216575081810a610f58565b6152208383615158565b806000190482111561523457615234615123565b029392505050565b6000614ca760ff84168361519b565b60008261526857634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561528057615280615123565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600182016152ad576152ad615123565b5060010190565b6000602082840312156152c657600080fd5b8151614ca781614c46565b8281526040602082015260006152ea6040830184614e70565b949350505050565b6000602080838503121561530557600080fd5b825167ffffffffffffffff81111561531c57600080fd5b8301601f8101851361532d57600080fd5b805161533b614f9f82614f5a565b81815260059190911b8201830190838101908783111561535a57600080fd5b928401925b828410156153785783518252928401929084019061535f565b979650505050505050565b60006020828403121561539557600080fd5b5051919050565b6000602082840312156153ae57600080fd5b8151614ca781614d96565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2035360cc1b606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561545057600080fd5b8351925060208401519150604084015190509250925092565b60008282101561547b5761547b615123565b500390565b6000806040838503121561549357600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8481526080602082015260006155456080830186614e70565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061558060a0830186614e70565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220f1262636fbf42f504307e4ec8060ab38e77ece3aed0f6d703a68b253fe2a4c9864736f6c634300080f00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106104c45760003560e01c80638366e79a11610276578063c5f956af1161014f578063ead010ae116100c1578063f2fde38b11610085578063f2fde38b14610e1a578063f5648a4f14610e3a578063f637434214610e4f578063f8b45b0514610e65578063fd361d0e14610e7b578063fe72b27a14610e9557600080fd5b8063ead010ae14610d98578063eb472fc414610db8578063ee40166e14610dd8578063ee44b44e14610dee578063f11a24d314610e0457600080fd5b8063d85ba06311610113578063d85ba06314610cdb578063dc3f0d0f14610cf1578063dd62ed3e14610d11578063e2f4560514610d57578063e71dc3f514610d6d578063e884f26014610d8357600080fd5b8063c5f956af14610c56578063c7c61e2c14610c76578063c876d0b914610c8b578063cc2ffe7c14610ca5578063d257b34f14610cbb57600080fd5b8063a62068ce116101e8578063b62496f5116101ac578063b62496f514610b87578063bbc0c74214610bb7578063bd5fb92014610bd6578063befd2fac14610bf6578063c024666814610c16578063c17b5b8c14610c3657600080fd5b8063a62068ce14610af5578063a9059cbb14610b0b578063acee28d114610b2b578063adb873bd14610b41578063afd6ce6114610b5757600080fd5b80639a5bd2dd1161023a5780639a5bd2dd14610a515780639a7a23d614610a735780639e93ad8e14610a935780639ec22c0e14610aa9578063a457c2d714610abf578063a4c82a0014610adf57600080fd5b80638366e79a146109b857806385ecfd28146109d857806388e765ff14610a085780638da5cb5b14610a1e57806395d89b4114610a3c57600080fd5b806354b85746116103a857806370a082311161031a578063751039fc116102de578063751039fc146109185780637571336a1461092d578063763cef491461094d578063783102eb146109625780638095d5641461097857806382aa7c681461099857600080fd5b806370a0823114610899578063712c2985146108b9578063713d0974146108ce578063715018a6146108e3578063730c1888146108f857600080fd5b80636605bfda1161036c5780636605bfda1461080157806366d602ae146108215780636a486a8e146108375780636b0a894c1461084d5780636b2fb124146108635780636ddd17131461087957600080fd5b806354b857461461076757806358a6d531146107875780635bb988c91461079e5780635c068a8c146107be5780635c3352d3146107d457600080fd5b80631a8145bb116104415780632e82f1a0116104055780632e82f1a0146106c2578063313ce567146106dc57806339509351146106f8578063452ed4f1146107185780634a62bb651461073857806351f205e41461075257600080fd5b80631a8145bb146106365780631c499ab01461064c57806323b872dd1461066c5780632be32b611461068c5780632c3e486c146106ac57600080fd5b80631805805b116104885780631805805b146105b357806318160ddd146105d5578063184c16c5146105ea57806318e1c12314610600578063199ffc721461062057600080fd5b8063058054c9146104d057806306fdde03146104f95780630758d9241461051b578063095ea7b31461055357806310d5de531461058357600080fd5b366104cb57005b600080fd5b3480156104dc57600080fd5b506104e660225481565b6040519081526020015b60405180910390f35b34801561050557600080fd5b5061050e610eb5565b6040516104f09190614bf1565b34801561052757600080fd5b5060095461053b906001600160a01b031681565b6040516001600160a01b0390911681526020016104f0565b34801561055f57600080fd5b5061057361056e366004614c5e565b610f47565b60405190151581526020016104f0565b34801561058f57600080fd5b5061057361059e366004614c8a565b602d6020526000908152604090205460ff1681565b3480156105bf57600080fd5b506105d36105ce366004614c8a565b610f5e565b005b3480156105e157600080fd5b506002546104e6565b3480156105f657600080fd5b506104e6602a5481565b34801561060c57600080fd5b506105d361061b366004614cae565b61101d565b34801561062c57600080fd5b506104e660265481565b34801561064257600080fd5b506104e660215481565b34801561065857600080fd5b506105d3610667366004614cae565b6110f1565b34801561067857600080fd5b50610573610687366004614cc7565b6111fd565b34801561069857600080fd5b506105d36106a7366004614cae565b6112a7565b3480156106b857600080fd5b506104e660285481565b3480156106ce57600080fd5b506027546105739060ff1681565b3480156106e857600080fd5b50604051601281526020016104f0565b34801561070457600080fd5b50610573610713366004614c5e565b6113b4565b34801561072457600080fd5b50600a5461053b906001600160a01b031681565b34801561074457600080fd5b506012546105739060ff1681565b34801561075e57600080fd5b506105d36113f0565b34801561077357600080fd5b506105d3610782366004614d54565b6114f9565b34801561079357600080fd5b50600e544310610573565b3480156107aa57600080fd5b506105d36107b9366004614c8a565b61159a565b3480156107ca57600080fd5b506104e660195481565b3480156107e057600080fd5b506104e66107ef366004614c8a565b60146020526000908152604090205481565b34801561080d57600080fd5b506105d361081c366004614c8a565b61164d565b34801561082d57600080fd5b506104e660075481565b34801561084357600080fd5b506104e6601c5481565b34801561085957600080fd5b506104e660115481565b34801561086f57600080fd5b506104e6601d5481565b34801561088557600080fd5b506012546105739062010000900460ff1681565b3480156108a557600080fd5b506104e66108b4366004614c8a565b611723565b3480156108c557600080fd5b506104e661173e565b3480156108da57600080fd5b506104e6611767565b3480156108ef57600080fd5b506105d3611963565b34801561090457600080fd5b506105d3610913366004614da4565b6119d7565b34801561092457600080fd5b506105d3611b00565b34801561093957600080fd5b506105d3610948366004614ddd565b611b77565b34801561095957600080fd5b506105d3611c3f565b34801561096e57600080fd5b506104e660255481565b34801561098457600080fd5b506105d3610993366004614e16565b611de0565b3480156109a457600080fd5b506105d36109b3366004614cae565b611e9b565b3480156109c457600080fd5b506105736109d3366004614e42565b611f8f565b3480156109e457600080fd5b506105736109f3366004614c8a565b600f6020526000908152604090205460ff1681565b348015610a1457600080fd5b506104e660065481565b348015610a2a57600080fd5b506005546001600160a01b031661053b565b348015610a4857600080fd5b5061050e6121c9565b348015610a5d57600080fd5b50610a666121d8565b6040516104f09190614eb4565b348015610a7f57600080fd5b506105d3610a8e366004614ddd565b612239565b348015610a9f57600080fd5b506104e661271081565b348015610ab557600080fd5b506104e6602b5481565b348015610acb57600080fd5b50610573610ada366004614c5e565b61232d565b348015610aeb57600080fd5b506104e660295481565b348015610b0157600080fd5b506104e6600e5481565b348015610b1757600080fd5b50610573610b26366004614c5e565b6123c6565b348015610b3757600080fd5b506104e660155481565b348015610b4d57600080fd5b506104e6601f5481565b348015610b6357600080fd5b50610573610b72366004614c8a565b60136020526000908152604090205460ff1681565b348015610b9357600080fd5b50610573610ba2366004614c8a565b602e6020526000908152604090205460ff1681565b348015610bc357600080fd5b5060125461057390610100900460ff1681565b348015610be257600080fd5b506105d3610bf1366004614ec7565b6123d3565b348015610c0257600080fd5b506105d3610c11366004614cae565b6124df565b348015610c2257600080fd5b506105d3610c31366004614ddd565b612615565b348015610c4257600080fd5b506105d3610c51366004614e16565b61269e565b348015610c6257600080fd5b50600c5461053b906001600160a01b031681565b348015610c8257600080fd5b506105d3612759565b348015610c9757600080fd5b506017546105739060ff1681565b348015610cb157600080fd5b506104e660205481565b348015610cc757600080fd5b506105d3610cd6366004614cae565b6127c2565b348015610ce757600080fd5b506104e660185481565b348015610cfd57600080fd5b506105d3610d0c366004614cae565b61290d565b348015610d1d57600080fd5b506104e6610d2c366004614e42565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d6357600080fd5b506104e6600b5481565b348015610d7957600080fd5b506104e6601b5481565b348015610d8f57600080fd5b506105d3612a1b565b348015610da457600080fd5b506105d3610db3366004614fe9565b612a51565b348015610dc457600080fd5b5061053b610dd3366004614cae565b612fff565b348015610de457600080fd5b506104e6600d5481565b348015610dfa57600080fd5b506104e660235481565b348015610e1057600080fd5b506104e6601a5481565b348015610e2657600080fd5b506105d3610e35366004614c8a565b613029565b348015610e4657600080fd5b506105d3613114565b348015610e5b57600080fd5b506104e6601e5481565b348015610e7157600080fd5b506104e660085481565b348015610e8757600080fd5b506024546105739060ff1681565b348015610ea157600080fd5b506105d3610eb0366004614cae565b613180565b606060038054610ec4906150b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef0906150b4565b8015610f3d5780601f10610f1257610100808354040283529160200191610f3d565b820191906000526020600020905b815481529060010190602001808311610f2057829003601f168201915b5050505050905090565b6000610f5433848461347a565b5060015b92915050565b6005546001600160a01b03163314610f915760405162461bcd60e51b8152600401610f88906150ee565b60405180910390fd5b601254610100900460ff1615610ffb5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610f88565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146110475760405162461bcd60e51b8152600401610f88906150ee565b600a811015801561105a575061c3508111155b6110a65760405162461bcd60e51b815260206004820181905260248201527f4d75737420736574206265747765656e20302e3120616e642035303020424e426044820152606401610f88565b6110b781662386f26fc10000615139565b6015556040518181527f0320a651094de4f5fc35c0f1c336811904e8f465b6599a93eb0dec4919b8fec5906020015b60405180910390a150565b6005546001600160a01b0316331461111b5760405162461bcd60e51b8152600401610f88906150ee565b6111276012600a61523c565b606461113260025490565b61113d906001615139565b611147919061524b565b611151919061524b565b8110156111b25760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f776044820152686572207468616e202560b81b6064820152608401610f88565b6111be6012600a61523c565b6111c89082615139565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020016110e6565b600061120a84848461359e565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561128f5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610f88565b61129c853385840361347a565b506001949350505050565b6005546001600160a01b031633146112d15760405162461bcd60e51b8152600401610f88906150ee565b6112dd6012600a61523c565b6103e86112e960025490565b6112f4906001615139565b6112fe919061524b565b611308919061524b565b8110156113695760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610f88565b6113756012600a61523c565b61137f9082615139565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020016110e6565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610f549185906113eb90869061526d565b61347a565b6005546001600160a01b0316331461141a5760405162461bcd60e51b8152600401610f88906150ee565b600b5461142630611723565b101561149c576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610f88565b600a805460ff60a01b1916600160a01b1790556114b761434b565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146115235760405162461bcd60e51b8152600401610f88906150ee565b60005b81811015611595576000600f600085858581811061154657611546615285565b905060200201602081019061155b9190614c8a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061158d8161529b565b915050611526565b505050565b6005546001600160a01b031633146115c45760405162461bcd60e51b8152600401610f88906150ee565b6001600160a01b0381166000908152600f602052604090205460ff1661162c5760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610f88565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6005546001600160a01b031633146116775760405162461bcd60e51b8152600401610f88906150ee565b6001600160a01b0381166116d95760405162461bcd60e51b8152602060048201526024808201527f5f74726561737572794164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610f88565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6001600160a01b031660009081526020819052604090205490565b60245460009060ff16156117615760235460225461175c919061526d565b905090565b50600090565b604080516002808252606082018352600092839291906020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156117d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f991906152b4565b8160008151811061180c5761180c615285565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061184057611840615285565b6001600160a01b039290921660209283029190910182015260408051600280825260608201835260009391929091830190803683370190505060095460155460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f916118af9186906004016152d1565b600060405180830381865afa1580156118cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118f491908101906152f2565b90506064601d54601e54611908919061526d565b8260018151811061191b5761191b615285565b602002602001015161192d9190615139565b611937919061524b565b8160018151811061194a5761194a615285565b602002602001015161195c919061526d565b9250505090565b6005546001600160a01b0316331461198d5760405162461bcd60e51b8152600401610f88906150ee565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314611a015760405162461bcd60e51b8152600401610f88906150ee565b610258831015611a6f5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610f88565b6103e88211158015611a7f575060015b611ae45760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610f88565b6028929092556026556027805460ff1916911515919091179055565b6005546001600160a01b03163314611b2a5760405162461bcd60e51b8152600401610f88906150ee565b6012805460ff199081169091556017805490911690556002546006556002546007556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b03163314611ba15760405162461bcd60e51b8152600401610f88906150ee565b80611c1457600a546001600160a01b0390811690831603611c145760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610f88565b6001600160a01b03919091166000908152602d60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611c695760405162461bcd60e51b8152600401610f88906150ee565b611c7161173e565b4210158015611c8757506000611c8561173e565b115b611ccc5760405162461bcd60e51b815260206004820152601660248201527526bab9ba103932b8bab2b9ba1030b732103bb0b4ba1760511b6044820152606401610f88565b600060228190556024805460ff19168155602554600a546040516370a0823160e01b81523060048201526064936001600160a01b03909216916370a082319101602060405180830381865afa158015611d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4d9190615383565b611d579190615139565b611d61919061524b565b6000602555600a5460405163a9059cbb60e01b8152336004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611db8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddc919061539c565b5050565b6005546001600160a01b03163314611e0a5760405162461bcd60e51b8152600401610f88906150ee565b6019839055601a829055601b81905580611e24838561526d565b611e2e919061526d565b6018556064611e40612710601e615139565b611e4a919061524b565b60185411156115955760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610f88565b6005546001600160a01b03163314611ec55760405162461bcd60e51b8152600401610f88906150ee565b601254610100900460ff1615611f1d5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610f88565b6032811115611f3e5760405162461bcd60e51b8152600401610f88906153b9565b6012805462ffff0019166201010017905543600d819055611f6090829061526d565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b03163314611fbc5760405162461bcd60e51b8152600401610f88906150ee565b6001600160a01b0383166120125760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610f88565b6001600160a01b038316301415806120325750601254610100900460ff16155b61209b5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610f88565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156120e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121069190615383565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015612159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217d919061539c565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610ec4906150b4565b60606010805480602002602001604051908101604052809291908181526020018280548015610f3d57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612212575050505050905090565b6005546001600160a01b031633146122635760405162461bcd60e51b8152600401610f88906150ee565b600a546001600160a01b03908116908316036122e75760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610f88565b6122f182826144ad565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156123af5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610f88565b6123bc338585840361347a565b5060019392505050565b6000610f5433848461359e565b6005546001600160a01b031633146123fd5760405162461bcd60e51b8152600401610f88906150ee565b60005b828110156124d95781602c600086868581811061241f5761241f615285565b90506020020160208101906124349190614c8a565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905583838281811061246e5761246e615285565b90506020020160208101906124839190614c8a565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7836040516124bf911515815260200190565b60405180910390a2806124d18161529b565b915050612400565b50505050565b6005546001600160a01b031633146125095760405162461bcd60e51b8152600401610f88906150ee565b60245460ff16156125765760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f74207265717565737420616761696e20756e74696c206669727374604482015270103932b8bab2b9ba1034b99037bb32b91760791b6064820152608401610f88565b606481111580156125875750600081115b6125d35760405162461bcd60e51b815260206004820152601a60248201527f4e65656420746f20736574206265747765656e20312d313030250000000000006044820152606401610f88565b426022556024805460ff1916600117905560258190556040517fd99a77b2f3951cd076e75814e44db497e6abc203dd251329da0b62c288f9f48b90600090a150565b6005546001600160a01b0316331461263f5760405162461bcd60e51b8152600401610f88906150ee565b6001600160a01b0382166000818152602c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146126c85760405162461bcd60e51b8152600401610f88906150ee565b601d839055601e829055601f819055806126e2838561526d565b6126ec919061526d565b601c5560646126fe612710601e615139565b612708919061524b565b601c5411156115955760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610f88565b6005546001600160a01b031633146127835760405162461bcd60e51b8152600401610f88906150ee565b6024805460ff191690556000602581905560228190556040517ffbcc1c208c9c4d1d9f557267b55c5ae316e74ce676a0db72ef18c6d5f5767c619190a1565b6005546001600160a01b031633146127ec5760405162461bcd60e51b8152600401610f88906150ee565b620186a06127f960025490565b612804906001615139565b61280e919061524b565b81101561287b5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610f88565b6103e861288760025490565b612892906001615139565b61289c919061524b565b8111156129085760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610f88565b600b55565b6005546001600160a01b031633146129375760405162461bcd60e51b8152600401610f88906150ee565b6129436012600a61523c565b6103e861294f60025490565b61295a906001615139565b612964919061524b565b61296e919061524b565b8110156129d05760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610f88565b6129dc6012600a61523c565b6129e69082615139565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e906020016110e6565b6005546001600160a01b03163314612a455760405162461bcd60e51b8152600401610f88906150ee565b6017805460ff19169055565b6005546001600160a01b03163314612a7b5760405162461bcd60e51b8152600401610f88906150ee565b601254610100900460ff1615612ae75760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610f88565b60328110612b075760405162461bcd60e51b8152600401610f88906153b9565b8151835114612b585760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610f88565b61012c835110612bc95760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203330302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610f88565b60005b8351811015612c96576000848281518110612be957612be9615285565b6020908102919091018101516001600160a01b038116600090815260139092526040909120805460ff191660011790559050612c28426201518061526d565b6001600160a01b038216600090815260146020526040812091909155612c506012600a61523c565b858481518110612c6257612c62615285565b6020026020010151612c749190615139565b9050612c813383836144db565b50508080612c8e9061529b565b915050612bcc565b506012805462ffff0019166201010017905543600d819055612cb990829061526d565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d5c91906152b4565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de291906152b4565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612e2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e5391906152b4565b600a80546001600160a01b0319166001600160a01b03929092169182179055612e7d906001614630565b600a54612e94906001600160a01b031660016144ad565b60004711612ef05760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610f88565b6000612efb30611723565b11612f575760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610f88565b600954612f729030906001600160a01b03166113eb82611723565b6009546001600160a01b031663f305d7194730612f8e81611723565b60008030426040518863ffffffff1660e01b8152600401612fb496959493929190615400565b60606040518083038185885af1158015612fd2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ff7919061543b565b505050505050565b6010818154811061300f57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146130535760405162461bcd60e51b8152600401610f88906150ee565b6001600160a01b0381166130b85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f88565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461313e5760405162461bcd60e51b8152600401610f88906150ee565b604051600090339047908381818185875af1925050503d80600081146124d9576040519150601f19603f3d011682016040523d82523d6000602084013e6124d9565b6005546001600160a01b031633146131aa5760405162461bcd60e51b8152600401610f88906150ee565b6107d081111561321a5760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20323025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401610f88565b602a546132279042615469565b602b5411156132685760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401610f88565b42602b55600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156132b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d99190615383565b905060006132e630611723565b905060006127106132f78585615139565b613301919061524b565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af115801561335b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061337f919061539c565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec906133ba9030908690600190819084904290600401615400565b60408051808303816000875af11580156133d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133fc9190615480565b505060008361340a30611723565b6134149190615469565b90508015613429576134293061dead836144db565b60006134358347615469565b905080156134465761344681614693565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b0383166134dc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f88565b6001600160a01b03821661353d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f88565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166135c45760405162461bcd60e51b8152600401610f88906154a4565b6001600160a01b0382166135ea5760405162461bcd60e51b8152600401610f88906154e9565b6000811161363a5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610f88565b601254610100900460ff166136cd576001600160a01b0383166000908152602c602052604090205460ff168061368857506001600160a01b0382166000908152602c602052604090205460ff165b6136cd5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610f88565b600e5443101580156136e65750601254610100900460ff165b156137b6576001600160a01b0383166000908152600f602052604090205460ff16158061372057506005546001600160a01b038381169116145b8061373557506001600160a01b03821661dead145b6137b65760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610f88565b6001600160a01b03831660009081526013602052604090205460ff161561399d576001600160a01b0382166000908152602e602052604090205460ff16156138f1576001600160a01b0383166000908152601460205260409020544210156138525760405162461bcd60e51b815260206004820152600f60248201526e10d85b9b9bdd081cd95b1b081e595d608a1b6044820152606401610f88565b61385a611767565b8111156138c65760405162461bcd60e51b815260206004820152603460248201527f417474656d7074696e6720746f2073656c6c206f766572206d61782073656c6c6044820152731030b6b7bab73a17101021b432b1b59036b0bc1760611b6064820152608401610f88565b6138d3426201518061526d565b6001600160a01b03841660009081526014602052604090205561399d565b6001600160a01b0382166000908152602c602052604090205460ff1661399d5760405162461bcd60e51b815260206004820152605560248201527f507269766174652073616c652063616e6e6f74207472616e7366657220616e6460448201527f206d7573742073656c6c206f6e6c79206f72207472616e7366657220746f2061606482015274103bb434ba32b634b9ba32b21030b2323932b9b99760591b608482015260a401610f88565b60125460ff1615613d99576005546001600160a01b038481169116148015906139d457506005546001600160a01b03838116911614155b80156139e857506001600160a01b03821615155b80156139ff57506001600160a01b03821661dead14155b8015613a2457506001600160a01b0383166000908152602c602052604090205460ff16155b8015613a4957506001600160a01b0382166000908152602c602052604090205460ff16155b15613d995760175460ff1615613b62576009546001600160a01b03838116911614801590613a855750600a546001600160a01b03838116911614155b15613b6257613a95600243615469565b32600090815260166020526040902054108015613ad35750613ab8600243615469565b6001600160a01b038316600090815260166020526040902054105b613b3d5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610f88565b3260009081526016602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152602e602052604090205460ff168015613ba357506001600160a01b0382166000908152602d602052604090205460ff16155b15613c6f57600654811115613c0b5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610f88565b600854613c1783611723565b613c21908361526d565b1115613c6a5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401610f88565b613d99565b6001600160a01b0382166000908152602e602052604090205460ff168015613cb057506001600160a01b0383166000908152602d602052604090205460ff16155b15613d1a57600754811115613c6a5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610f88565b6001600160a01b0382166000908152602d602052604090205460ff16613d9957600854613d4683611723565b613d50908361526d565b1115613d995760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401610f88565b6000613da430611723565b600b5490915081108015908190613dc3575060125462010000900460ff165b8015613dd95750600a54600160a01b900460ff16155b8015613dfe57506001600160a01b0385166000908152602e602052604090205460ff16155b8015613e2357506001600160a01b0385166000908152602c602052604090205460ff16155b8015613e4857506001600160a01b0384166000908152602c602052604090205460ff16155b15613e7657600a805460ff60a01b1916600160a01b179055613e6861434b565b600a805460ff60a01b191690555b600a54600160a01b900460ff16158015613ea857506001600160a01b0384166000908152602e602052604090205460ff165b8015613eb6575060275460ff165b8015613ed15750602854602954613ecd919061526d565b4210155b8015613ef657506001600160a01b0385166000908152602c602052604090205460ff16155b15613f0357613f036147e6565b6001600160a01b0385166000908152602c602052604090205460019060ff1680613f4557506001600160a01b0385166000908152602c602052604090205460ff165b15613f4e575060005b600080821561433657600e5443108015613f8057506001600160a01b0388166000908152602e602052604090205460ff165b8015613fa557506001600160a01b0387166000908152602e602052604090205460ff16155b8015613fca57506001600160a01b0387166000908152602c602052604090205460ff16155b8015613fd857506000601854115b1561417e57600e544310613fff57600160066000828254613ff99190615469565b90915550505b6001600160a01b0387166000908152600f602052604090205460ff166140df576001600160a01b0387166000908152600f60205260408120805460ff19166001908117909155601180549192909161405890849061526d565b9091555050601080546001810182556000919091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b0389169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b612710601854876140f09190615139565b6140fa919061524b565b9150601854601a548361410d9190615139565b614117919061524b565b60216000828254614128919061526d565b909155505060185460195461413d9084615139565b614147919061524b565b60206000828254614158919061526d565b9091555050601854601b5461416d9084615139565b614177919061524b565b9050614305565b6001600160a01b0387166000908152602e602052604090205460ff1680156141a857506000601c54115b1561423b57612710601c54876141be9190615139565b6141c8919061524b565b9150601c54601e54836141db9190615139565b6141e5919061524b565b602160008282546141f6919061526d565b9091555050601c54601d5461420b9084615139565b614215919061524b565b60206000828254614226919061526d565b9091555050601854601f5461416d9084615139565b6001600160a01b0388166000908152602e602052604090205460ff16801561426557506000601854115b15614305576127106018548761427b9190615139565b614285919061524b565b9150601854601a54836142989190615139565b6142a2919061524b565b602160008282546142b3919061526d565b90915550506018546019546142c89084615139565b6142d2919061524b565b602060008282546142e3919061526d565b9091555050601854601b546142f89084615139565b614302919061524b565b90505b8115614329576143168830846144db565b8015614329576143293061dead836144db565b6143338287615469565b95505b6143418888886144db565b5050505050505050565b600061435630611723565b9050600060205460215461436a919061526d565b9050811580614377575080155b15614380575050565b600b5461438e90600a615139565b8211156143a657600b546143a390600a615139565b91505b600080600283602154866143ba9190615139565b6143c4919061524b565b6143ce919061524b565b90506143e26143dd8286615469565b614a00565b602154479081906000906143f89060029061524b565b6144029087615469565b60205461440f9085615139565b614419919061524b565b90506144258183615469565b60006021819055602055915083158015906144405750600082115b1561444f5761444f8483614b52565b600c546040516001600160a01b03909116904790600081818185875af1925050503d806000811461449c576040519150601f19603f3d011682016040523d82523d6000602084013e6144a1565b606091505b50505050505050505050565b6001600160a01b0382166000908152602e60205260409020805460ff19168215151790556122f18282614630565b6001600160a01b0383166145015760405162461bcd60e51b8152600401610f88906154a4565b6001600160a01b0382166145275760405162461bcd60e51b8152600401610f88906154e9565b6001600160a01b0383166000908152602081905260409020548181101561459f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610f88565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906145d690849061526d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161462291815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152602d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156146fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061472191906152b4565b8160008151811061473457614734615285565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061476857614768615285565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de959084906147b090600090869061dead90429060040161552c565b6000604051808303818588803b1580156147c957600080fd5b505af11580156147dd573d6000803e3d6000fd5b50505050505050565b426029819055602b55600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015614838573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061485c9190615383565b9050600061486930611723565b905060006127106026548461487e9190615139565b614888919061524b565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af11580156148e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614906919061539c565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec906149419030908690600190819084904290600401615400565b60408051808303816000875af115801561495f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149839190615480565b505060008361499130611723565b61499b9190615469565b905080156149b0576149b03061dead836144db565b60006149bc8347615469565b905080156149cd576149cd81614693565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110614a3557614a35615285565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015614a8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ab291906152b4565b81600181518110614ac557614ac5615285565b6001600160a01b039283166020918202929092010152600954614aeb913091168461347a565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790614b24908590600090869030904290600401615561565b600060405180830381600087803b158015614b3e57600080fd5b505af1158015612ff7573d6000803e3d6000fd5b600954614b6a9030906001600160a01b03168461347a565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d719908390614ba79030908790600090819084904290600401615400565b60606040518083038185885af1158015614bc5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614bea919061543b565b5050505050565b600060208083528351808285015260005b81811015614c1e57858101830151858201604001528201614c02565b81811115614c30576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114614c5b57600080fd5b50565b60008060408385031215614c7157600080fd5b8235614c7c81614c46565b946020939093013593505050565b600060208284031215614c9c57600080fd5b8135614ca781614c46565b9392505050565b600060208284031215614cc057600080fd5b5035919050565b600080600060608486031215614cdc57600080fd5b8335614ce781614c46565b92506020840135614cf781614c46565b929592945050506040919091013590565b60008083601f840112614d1a57600080fd5b50813567ffffffffffffffff811115614d3257600080fd5b6020830191508360208260051b8501011115614d4d57600080fd5b9250929050565b60008060208385031215614d6757600080fd5b823567ffffffffffffffff811115614d7e57600080fd5b614d8a85828601614d08565b90969095509350505050565b8015158114614c5b57600080fd5b600080600060608486031215614db957600080fd5b83359250602084013591506040840135614dd281614d96565b809150509250925092565b60008060408385031215614df057600080fd5b8235614dfb81614c46565b91506020830135614e0b81614d96565b809150509250929050565b600080600060608486031215614e2b57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215614e5557600080fd5b8235614e6081614c46565b91506020830135614e0b81614c46565b600081518084526020808501945080840160005b83811015614ea95781516001600160a01b031687529582019590820190600101614e84565b509495945050505050565b602081526000614ca76020830184614e70565b600080600060408486031215614edc57600080fd5b833567ffffffffffffffff811115614ef357600080fd5b614eff86828701614d08565b9094509250506020840135614dd281614d96565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614f5257614f52614f13565b604052919050565b600067ffffffffffffffff821115614f7457614f74614f13565b5060051b60200190565b600082601f830112614f8f57600080fd5b81356020614fa4614f9f83614f5a565b614f29565b82815260059290921b84018101918181019086841115614fc357600080fd5b8286015b84811015614fde5780358352918301918301614fc7565b509695505050505050565b600080600060608486031215614ffe57600080fd5b833567ffffffffffffffff8082111561501657600080fd5b818601915086601f83011261502a57600080fd5b8135602061503a614f9f83614f5a565b82815260059290921b8401810191818101908a84111561505957600080fd5b948201945b8386101561508057853561507181614c46565b8252948201949082019061505e565b9750508701359250508082111561509657600080fd5b506150a386828701614f7e565b925050604084013590509250925092565b600181811c908216806150c857607f821691505b6020821081036150e857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561515357615153615123565b500290565b600181815b8085111561519357816000190482111561517957615179615123565b8085161561518657918102915b93841c939080029061515d565b509250929050565b6000826151aa57506001610f58565b816151b757506000610f58565b81600181146151cd57600281146151d7576151f3565b6001915050610f58565b60ff8411156151e8576151e8615123565b50506001821b610f58565b5060208310610133831016604e8410600b8410161715615216575081810a610f58565b6152208383615158565b806000190482111561523457615234615123565b029392505050565b6000614ca760ff84168361519b565b60008261526857634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561528057615280615123565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600182016152ad576152ad615123565b5060010190565b6000602082840312156152c657600080fd5b8151614ca781614c46565b8281526040602082015260006152ea6040830184614e70565b949350505050565b6000602080838503121561530557600080fd5b825167ffffffffffffffff81111561531c57600080fd5b8301601f8101851361532d57600080fd5b805161533b614f9f82614f5a565b81815260059190911b8201830190838101908783111561535a57600080fd5b928401925b828410156153785783518252928401929084019061535f565b979650505050505050565b60006020828403121561539557600080fd5b5051919050565b6000602082840312156153ae57600080fd5b8151614ca781614d96565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2035360cc1b606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561545057600080fd5b8351925060208401519150604084015190509250925092565b60008282101561547b5761547b615123565b500390565b6000806040838503121561549357600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8481526080602082015260006155456080830186614e70565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061558060a0830186614e70565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220f1262636fbf42f504307e4ec8060ab38e77ece3aed0f6d703a68b253fe2a4c9864736f6c634300080f0033

Deployed Bytecode Sourcemap

9626:29036:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11128:41;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;11128:41:0;;;;;;;;4027:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9773:27::-;;;;;;;;;;-1:-1:-1;9773:27:0;;;;-1:-1:-1;;;;;9773:27:0;;;;;;-1:-1:-1;;;;;980:32:1;;;962:51;;950:2;935:18;9773:27:0;798:221:1;4941:169:0;;;;;;;;;;-1:-1:-1;4941:169:0;;;;;:::i;:::-;;:::i;:::-;;;1645:14:1;;1638:22;1620:41;;1608:2;1593:18;4941:169:0;1480:187:1;11749:64:0;;;;;;;;;;-1:-1:-1;11749:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16890:194;;;;;;;;;;-1:-1:-1;16890:194:0;;;;;:::i;:::-;;:::i;:::-;;4348:108;;;;;;;;;;-1:-1:-1;4436:12:0;;4348:108;;11506:47;;;;;;;;;;;;;;;;31404:247;;;;;;;;;;-1:-1:-1;31404:247:0;;;;;:::i;:::-;;:::i;11318:35::-;;;;;;;;;;;;;;;;11086:33;;;;;;;;;;;;;;;;17874:288;;;;;;;;;;-1:-1:-1;17874:288:0;;;;;:::i;:::-;;:::i;5118:492::-;;;;;;;;;;-1:-1:-1;5118:492:0;;;;;:::i;:::-;;:::i;17259:295::-;;;;;;;;;;-1:-1:-1;17259:295:0;;;;;:::i;:::-;;:::i;11412:45::-;;;;;;;;;;;;;;;;11372:33;;;;;;;;;;-1:-1:-1;11372:33:0;;;;;;;;4247:93;;;;;;;;;;-1:-1:-1;4247:93:0;;4330:2;2712:36:1;;2700:2;2685:18;4247:93:0;2570:184:1;5618:215:0;;;;;;;;;;-1:-1:-1;5618:215:0;;;;;:::i;:::-;;:::i;9807:21::-;;;;;;;;;;-1:-1:-1;9807:21:0;;;;-1:-1:-1;;;;;9807:21:0;;;10183:33;;;;;;;;;;-1:-1:-1;10183:33:0;;;;;;;;30667:312;;;;;;;;;;;;;:::i;16493:200::-;;;;;;;;;;-1:-1:-1;16493:200:0;;;;;:::i;:::-;;:::i;27149:120::-;;;;;;;;;;-1:-1:-1;27243:18:0;;27228:12;:33;27149:120;;16701:181;;;;;;;;;;-1:-1:-1;16701:181:0;;;;;:::i;:::-;;:::i;10743:29::-;;;;;;;;;;;;;;;;10361:61;;;;;;;;;;-1:-1:-1;10361:61:0;;;;;:::i;:::-;;;;;;;;;;;;;;30334:281;;;;;;;;;;-1:-1:-1;30334:281:0;;;;;:::i;:::-;;:::i;9705:28::-;;;;;;;;;;;;;;;;10850;;;;;;;;;;;;;;;;10149:25;;;;;;;;;;;;;;;;10885:30;;;;;;;;;;;;;;;;10263:31;;;;;;;;;;-1:-1:-1;10263:31:0;;;;;;;;;;;4464:127;;;;;;;;;;-1:-1:-1;4464:127:0;;;;;:::i;:::-;;:::i;37655:281::-;;;;;;;;;;;;;:::i;30987:409::-;;;;;;;;;;;;;:::i;8108:150::-;;;;;;;;;;;;;:::i;33683:447::-;;;;;;;;;;-1:-1:-1;33683:447:0;;;;;:::i;:::-;;:::i;16141:233::-;;;;;;;;;;;;;:::i;18810:260::-;;;;;;;;;;-1:-1:-1;18810:260:0;;;;;:::i;:::-;;:::i;37944:487::-;;;;;;;;;;;;;:::i;11278:31::-;;;;;;;;;;;;;;;;19623:389;;;;;;;;;;-1:-1:-1;19623:389:0;;;;;:::i;:::-;;:::i;15658:427::-;;;;;;;;;;-1:-1:-1;15658:427:0;;;;;:::i;:::-;;:::i;29598:498::-;;;;;;;;;;-1:-1:-1;29598:498:0;;;;;:::i;:::-;;:::i;10063:44::-;;;;;;;;;;-1:-1:-1;10063:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9671:27;;;;;;;;;;;;;;;;7894:79;;;;;;;;;;-1:-1:-1;7959:6:0;;-1:-1:-1;;;;;7959:6:0;7894:79;;4135:104;;;;;;;;;;;;;:::i;16382:103::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;19078:293::-;;;;;;;;;;-1:-1:-1;19078:293:0;;;;;:::i;:::-;;:::i;10995:43::-;;;;;;;;;;;;11033:5;10995:43;;11560:35;;;;;;;;;;;;;;;;5841:413;;;;;;;;;;-1:-1:-1;5841:413:0;;;;;:::i;:::-;;:::i;11464:29::-;;;;;;;;;;;;;;;;10023:33;;;;;;;;;;;;;;;;4599:175;;;;;;;;;;-1:-1:-1;4599:175:0;;;;;:::i;:::-;;:::i;10429:40::-;;;;;;;;;;;;;;;;10960:26;;;;;;;;;;;;;;;;10303:51;;;;;;;;;;-1:-1:-1;10303:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11971:58;;;;;;;;;;-1:-1:-1;11971:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10223:33;;;;;;;;;;-1:-1:-1;10223:33:0;;;;;;;;;;;20425:282;;;;;;;;;;-1:-1:-1;20425:282:0;;;;;:::i;:::-;;:::i;37198:449::-;;;;;;;;;;-1:-1:-1;37198:449:0;;;;;:::i;:::-;;:::i;20715:182::-;;;;;;;;;;-1:-1:-1;20715:182:0;;;;;:::i;:::-;;:::i;20020:397::-;;;;;;;;;;-1:-1:-1;20020:397:0;;;;;:::i;:::-;;:::i;9907:30::-;;;;;;;;;;-1:-1:-1;9907:30:0;;;;-1:-1:-1;;;;;9907:30:0;;;38439:220;;;;;;;;;;;;;:::i;10661:39::-;;;;;;;;;;-1:-1:-1;10661:39:0;;;;;;;;11047:32;;;;;;;;;;;;;;;;18232:346;;;;;;;;;;-1:-1:-1;18232:346:0;;;;;:::i;:::-;;:::i;10709:27::-;;;;;;;;;;;;;;;;17566:300;;;;;;;;;;-1:-1:-1;17566:300:0;;;;;:::i;:::-;;:::i;4782:151::-;;;;;;;;;;-1:-1:-1;4782:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4898:18:0;;;4871:7;4898:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4782:151;9865:33;;;;;;;;;;;;;;;;10816:25;;;;;;;;;;;;;;;;17149:98;;;;;;;;;;;;;:::i;31659:2016::-;;;;;;;;;;-1:-1:-1;31659:2016:0;;;;;:::i;:::-;;:::i;10114:28::-;;;;;;;;;;-1:-1:-1;10114:28:0;;;;;:::i;:::-;;:::i;9946:37::-;;;;;;;;;;;;;;;;11176:52;;;;;;;;;;;;;;;;10779:30;;;;;;;;;;;;;;;;8266:244;;;;;;;;;;-1:-1:-1;8266:244:0;;;;;:::i;:::-;;:::i;30166:160::-;;;;;;;;;;;;;:::i;10922:31::-;;;;;;;;;;;;;;;;9740:24;;;;;;;;;;;;;;;;11235:36;;;;;;;;;;-1:-1:-1;11235:36:0;;;;;;;;35402:1398;;;;;;;;;;-1:-1:-1;35402:1398:0;;;;;:::i;:::-;;:::i;4027:100::-;4081:13;4114:5;4107:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4027:100;:::o;4941:169::-;5024:4;5041:39;256:10;5064:7;5073:6;5041:8;:39::i;:::-;-1:-1:-1;5098:4:0;4941:169;;;;;:::o;16890:194::-;8021:6;;-1:-1:-1;;;;;8021:6:0;256:10;8021:22;8013:67;;;;-1:-1:-1;;;8013:67:0;;;;;;;:::i;:::-;;;;;;;;;16976:13:::1;::::0;::::1;::::0;::::1;;;16975:14;16967:68;;;::::0;-1:-1:-1;;;16967:68:0;;10193:2:1;16967:68:0::1;::::0;::::1;10175:21:1::0;10232:2;10212:18;;;10205:30;10271:34;10251:18;;;10244:62;-1:-1:-1;;;10322:18:1;;;10315:39;10371:19;;16967:68:0::1;9991:405:1::0;16967:68:0::1;17046:9;:30:::0;;-1:-1:-1;;;;;;17046:30:0::1;-1:-1:-1::0;;;;;17046:30:0;;;::::1;::::0;;;::::1;::::0;;16890:194::o;31404:247::-;8021:6;;-1:-1:-1;;;;;8021:6:0;256:10;8021:22;8013:67;;;;-1:-1:-1;;;8013:67:0;;;;;;;:::i;:::-;31498:2:::1;31488:6;:12;;:31;;;;;31514:5;31504:6;:15;;31488:31;31480:76;;;::::0;-1:-1:-1;;;31480:76:0;;10603:2:1;31480:76:0::1;::::0;::::1;10585:21:1::0;;;10622:18;;;10615:30;10681:34;10661:18;;;10654:62;10733:18;;31480:76:0::1;10401:356:1::0;31480:76:0::1;31585:13;:6:::0;31594:4:::1;31585:13;:::i;:::-;31567:15;:31:::0;31614:29:::1;::::0;160:25:1;;;31614:29:0::1;::::0;148:2:1;133:18;31614:29:0::1;;;;;;;;31404:247:::0;:::o;17874:288::-;8021:6;;-1:-1:-1;;;;;8021:6:0;256:10;8021:22;8013:67;;;;-1:-1:-1;;;8013:67:0;;;;;;;:::i;:::-;17992:16:::1;4330:2:::0;17992::::1;:16;:::i;:::-;17984:3;17964:13;4436:12:::0;;;4348:108;17964:13:::1;:17;::::0;17980:1:::1;17964:17;:::i;:::-;:23;;;;:::i;:::-;17963:46;;;;:::i;:::-;17953:6;:56;;17945:110;;;::::0;-1:-1:-1;;;17945:110:0;;12874:2:1;17945:110:0::1;::::0;::::1;12856:21:1::0;12913:2;12893:18;;;12886:30;12952:34;12932:18;;;12925:62;-1:-1:-1;;;13003:18:1;;;12996:39;13052:19;;17945:110:0::1;12672:405:1::0;17945:110:0::1;18088:16;4330:2:::0;18088::::1;:16;:::i;:::-;18078:27;::::0;:6;:27:::1;:::i;:::-;18066:9;:39:::0;;;18121:33:::1;::::0;160:25:1;;;18121:33:0::1;::::0;148:2:1;133:18;18121:33:0::1;14:177:1::0;5118:492:0;5258:4;5275:36;5285:6;5293:9;5304:6;5275:9;:36::i;:::-;-1:-1:-1;;;;;5351:19:0;;5324:24;5351:19;;;:11;:19;;;;;;;;256:10;5351:33;;;;;;;;5403:26;;;;5395:79;;;;-1:-1:-1;;;5395:79:0;;13284:2:1;5395:79:0;;;13266:21:1;13323:2;13303:18;;;13296:30;13362:34;13342:18;;;13335:62;-1:-1:-1;;;13413:18:1;;;13406:38;13461:19;;5395:79:0;13082:404:1;5395:79:0;5510:57;5519:6;256:10;5560:6;5541:16;:25;5510:8;:57::i;:::-;-1:-1:-1;5598:4:0;;5118:492;-1:-1:-1;;;;5118:492:0:o;17259:295::-;8021:6;;-1:-1:-1;;;;;8021:6:0;256:10;8021:22;8013:67;;;;-1:-1:-1;;;8013:67:0;;;;;;;:::i;:::-;17381:16:::1;4330:2:::0;17381::::1;:16;:::i;:::-;17372:4;17352:13;4436:12:::0;;;4348:108;17352:13:::1;:17;::::0;17368:1:::1;17352:17;:::i;:::-;:24;;;;:::i;:::-;17351:47;;;;:::i;:::-;17341:6;:57;;17333:111;;;::::0;-1:-1:-1;;;17333:111:0;;13693:2:1;17333:111:0::1;::::0;::::1;13675:21:1::0;13732:2;13712:18;;;13705:30;13771:34;13751:18;;;13744:62;-1:-1:-1;;;13822:18:1;;;13815:39;13871:19;;17333:111:0::1;13491:405:1::0;17333:111:0::1;17480:16;4330:2:::0;17480::::1;:16;:::i;:::-;17470:27;::::0;:6;:27:::1;:::i;:::-;17455:12;:42:::0;;;17513:33:::1;::::0;160:25:1;;;17513:33:0::1;::::0;148:2:1;133:18;17513:33:0::1;14:177:1::0;5618:215:0;256:10;5706:4;5755:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5755:34:0;;;;;;;;;;5706:4;;5723:80;;5746:7;;5755:47;;5792:10;;5755:47;:::i;:::-;5723:8;:80::i;30667:312::-;8021:6;;-1:-1:-1;;;;;8021:6:0;256:10;8021:22;8013:67;;;;-1:-1:-1;;;8013:67:0;;;;;;;:::i;:::-;30758:18:::1;;30730:24;30748:4;30730:9;:24::i;:::-;:46;;30722:123;;;::::0;;-1:-1:-1;;;30722:123:0;;14236:2:1;30722:123:0::1;::::0;::::1;14218:21:1::0;14255:18;;;14248:30;;;;14314:34;14294:18;;;14287:62;14385:34;14365:18;;;14358:62;14437:19;;30722:123:0::1;14034:428:1::0;30722:123:0::1;30856:8;:15:::0;;-1:-1:-1;;;;30856:15:0::1;-1:-1:-1::0;;;30856:15:0::1;::::0;;30882:10:::1;:8;:10::i;:::-;30903:8;:16:::0;;-1:-1:-1;;;;30903:16:0::1;::::0;;30935:36:::1;::::0;30955:15:::1;160:25:1::0;;30935:36:0::1;::::0;148:2:1;133:18;30935:36:0::1;;;;;;;30667:312::o:0;16493:200::-;8021:6;;-1:-1:-1;;;;;8021:6:0;256:10;8021:22;8013:67;;;;-1:-1:-1;;;8013:67:0;;;;;;;:::i;:::-;16587:9:::1;16583:103;16602:19:::0;;::::1;16583:103;;;16669:5;16642:11;:24;16654:8;;16663:1;16654:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16642:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;16642:24:0;:32;;-1:-1:-1;;16642:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16623:3;::::1;::::0;::::1;:::i;:::-;;;;16583:103;;;;16493:200:::0;;:::o;16701:181::-;8021:6;;-1:-1:-1;;;;;8021:6:0;256:10;8021:22;8013:67;;;;-1:-1:-1;;;8013:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16782:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;16774:62;;;::::0;-1:-1:-1;;;16774:62:0;;14941:2:1;16774:62:0::1;::::0;::::1;14923:21:1::0;14980:2;14960:18;;;14953:30;15019:32;14999:18;;;14992:60;15069:18;;16774:62:0::1;14739:354:1::0;16774:62:0::1;-1:-1:-1::0;;;;;16847:19:0::1;16869:5;16847:19:::0;;;:11:::1;:19;::::0;;;;:27;;-1:-1:-1;;16847:27:0::1;::::0;;16701:181::o;30334:281::-;8021:6;;-1:-1:-1;;;;;8021:6:0;256:10;8021:22;8013:67;;;;-1:-1:-1;;;8013:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30426:30:0;::::1;30418:79;;;::::0;-1:-1:-1;;;30418:79:0;;15300:2:1;30418:79:0::1;::::0;::::1;15282:21:1::0;15339:2;15319:18;;;15312:30;15378:34;15358:18;;;15351:62;-1:-1:-1;;;15429:18:1;;;15422:34;15473:19;;30418:79:0::1;15098:400:1::0;30418:79:0::1;30508:15;:43:::0;;-1:-1:-1;;;;;;30508:43:0::1;-1:-1:-1::0;;;;;30508:43:0;::::1;::::0;;::::1;::::0;;;30567:40:::1;::::0;::::1;::::0;-1:-1:-1;;30567:40:0::1;30334:281:::0;:::o;4464:127::-;-1:-1:-1;;;;;4565:18:0;4538:7;4565:18;;;;;;;;;;;;4464:127::o;37655:281::-;37737:24;;37715:7;;37737:24;;37734:195;;;37813:25;;37784:26;;:54;;;;:::i;:::-;37777:61;;37655:281;:::o;37734:195::-;-1:-1:-1;37887:1:0;;37655:281::o;30987:409::-;31084:16;;;31098:1;31084:16;;;;;;;;31041:7;;;;31084:16;31098:1;31084:16;;;;;;;;-1:-1:-1;;31121:9:0;;:16;;;-1:-1:-1;;;31121:16:0;;;;31060:40;;-1:-1:-1;;;;;;31121:9:0;;;;:14;;-1:-1:-1;31121:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31111:4;31116:1;31111:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;31111:26:0;;;-1:-1:-1;;;;;31111:26:0;;;;;31166:4;31148;31153:1;31148:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31148:23:0;;;;:7;;;;;;;;;;:23;31219:16;;;31233:1;31219:16;;;;;;;;31192:24;;31219:16;;31233:1;;31219:16;;;;;;;;;-1:-1:-1;;31256:9:0;;31280:15;;31256:46;;-1:-1:-1;;;31256:46:0;;31192:43;;-1:-1:-1;;;;;;31256:9:0;;;;:23;;:46;;31297:4;;31256:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31256:46:0;;;;;;;;;;;;:::i;:::-;31246:56;;31385:3;31367:15;;31348:16;;:34;;;;:::i;:::-;31334:7;31342:1;31334:10;;;;;;;;:::i;:::-;;;;;;;:49;;;;:::i;:::-;31333:55;;;;:::i;:::-;31320:7;31328:1;31320:10;;;;;;;;:::i;:::-;;;;;;;:68;;;;:::i;:::-;31313:75;;;;30987:409;:::o;8108:150::-;8021:6;;-1:-1:-1;;;;;8021:6:0;256:10;8021:22;8013:67;;;;-1:-1:-1;;;8013:67:0;;;;;;;:::i;:::-;8201:6:::1;::::0;8180:40:::1;::::0;8217:1:::1;::::0;-1:-1:-1;;;;;8201:6:0::1;::::0;8180:40:::1;::::0;8217:1;;8180:40:::1;8231:6;:19:::0;;-1:-1:-1;;;;;;8231:19:0::1;::::0;;8108:150::o;33683:447::-;8021:6;;-1:-1:-1;;;;;8021:6:0;256:10;8021:22;8013:67;;;;-1:-1:-1;;;8013:67:0;;;;;;;:::i;:::-;33837:3:::1;33814:19;:26;;33806:90;;;::::0;-1:-1:-1;;;33806:90:0;;17184:2:1;33806:90:0::1;::::0;::::1;17166:21:1::0;17223:2;17203:18;;;17196:30;17262:34;17242:18;;;17235:62;-1:-1:-1;;;17313:18:1;;;17306:49;17372:19;;33806:90:0::1;16982:415:1::0;33806:90:0::1;33927:4;33915:8;:16;;:33;;;;-1:-1:-1::0;33935:13:0;33915:33:::1;33907:94;;;::::0;-1:-1:-1;;;33907:94:0;;17604:2:1;33907:94:0::1;::::0;::::1;17586:21:1::0;17643:2;17623:18;;;17616:30;17682:34;17662:18;;;17655:62;-1:-1:-1;;;17733:18:1;;;17726:46;17789:19;;33907:94:0::1;17402:412:1::0;33907:94:0::1;34012:15;:37:::0;;;;34060:16:::1;:27:::0;34098:13:::1;:24:::0;;-1:-1:-1;;34098:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33683:447::o;16141:233::-;8021:6;;-1:-1:-1;;;;;8021:6:0;256:10;8021:22;8013:67;;;;-1:-1:-1;;;8013:67:0;;;;;;;:::i;:::-;16195:14:::1;:22:::0;;-1:-1:-1;;16195:22:0;;::::1;::::0;;;16228:20:::1;:28:::0;;;;::::1;::::0;;4436:12;;16267::::1;:28:::0;4436:12;;16306:13:::1;:29:::0;16351:15:::1;::::0;::::1;::::0;;;::::1;16141:233::o:0;18810:260::-;8021:6;;-1:-1:-1;;;;;8021:6:0;256:10;8021:22;8013:67;;;;-1:-1:-1;;;8013:67:0;;;;;;;:::i;:::-;18906:4:::1;18902:104;;18944:6;::::0;-1:-1:-1;;;;;18944:6:0;;::::1;18934:16:::0;;::::1;::::0;18926:68:::1;;;::::0;-1:-1:-1;;;18926:68:0;;18021:2:1;18926:68:0::1;::::0;::::1;18003:21:1::0;18060:2;18040:18;;;18033:30;18099:34;18079:18;;;18072:62;-1:-1:-1;;;18150:18:1;;;18143:37;18197:19;;18926:68:0::1;17819:403:1::0;18926:68:0::1;-1:-1:-1::0;;;;;19016:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;19016:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18810:260::o;37944:487::-;8021:6;;-1:-1:-1;;;;;8021:6:0;256:10;8021:22;8013:67;;;;-1:-1:-1;;;8013:67:0;;;;;;;:::i;:::-;38032:29:::1;:27;:29::i;:::-;38013:15;:48;;:85;;;;;38097:1;38065:29;:27;:29::i;:::-;:33;38013:85;38005:120;;;::::0;-1:-1:-1;;;38005:120:0;;18429:2:1;38005:120:0::1;::::0;::::1;18411:21:1::0;18468:2;18448:18;;;18441:30;-1:-1:-1;;;18487:18:1;;;18480:52;18549:18;;38005:120:0::1;18227:346:1::0;38005:120:0::1;38165:1;38136:26;:30:::0;;;38177:24:::1;:32:::0;;-1:-1:-1;;38177:32:0::1;::::0;;38297:16:::1;::::0;38261:6:::1;::::0;38246:48:::1;::::0;-1:-1:-1;;;38246:48:0;;38288:4:::1;38246:48;::::0;::::1;962:51:1::0;38316:3:0::1;::::0;-1:-1:-1;;;;;38261:6:0;;::::1;::::0;38246:33:::1;::::0;935:18:1;38246:48:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:67;;;;:::i;:::-;:73;;;;:::i;:::-;38359:1;38340:16;:20:::0;38380:6:::1;::::0;38373:50:::1;::::0;-1:-1:-1;;;38373:50:0;;38397:10:::1;38373:50;::::0;::::1;18941:51:1::0;19008:18;;;19001:34;;;38222:97:0;;-1:-1:-1;;;;;;38380:6:0::1;::::0;38373:23:::1;::::0;18914:18:1;;38373:50:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37994:437;37944:487::o:0;19623:389::-;8021:6;;-1:-1:-1;;;;;8021:6:0;256:10;8021:22;8013:67;;;;-1:-1:-1;;;8013:67:0;;;;;;;:::i;:::-;19739:14:::1;:29:::0;;;19779:15:::1;:31:::0;;;19821:10:::1;:21:::0;;;19834:8;19868:32:::1;19797:13:::0;19756:12;19868:32:::1;:::i;:::-;:45;;;;:::i;:::-;19853:12;:60:::0;19967:3:::1;19948:16;11033:5;19948:2;:16;:::i;:::-;:22;;;;:::i;:::-;19932:12;;:38;;19924:80;;;::::0;-1:-1:-1;;;19924:80:0;;19498:2:1;19924:80:0::1;::::0;::::1;19480:21:1::0;19537:2;19517:18;;;19510:30;19576:31;19556:18;;;19549:59;19625:18;;19924:80:0::1;19296:353:1::0;15658:427:0;8021:6;;-1:-1:-1;;;;;8021:6:0;256:10;8021:22;8013:67;;;;-1:-1:-1;;;8013:67:0;;;;;;;:::i;:::-;15746:13:::1;::::0;::::1;::::0;::::1;;;15745:14;15737:50;;;::::0;-1:-1:-1;;;15737:50:0;;19856:2:1;15737:50:0::1;::::0;::::1;19838:21:1::0;19895:2;19875:18;;;19868:30;19934:25;19914:18;;;19907:53;19977:18;;15737:50:0::1;19654:347:1::0;15737:50:0::1;15826:2;15806:16;:22;;15798:74;;;;-1:-1:-1::0;;;15798:74:0::1;;;;;;;:::i;:::-;15883:13;:20:::0;;-1:-1:-1;;15914:18:0;;;;;15964:12:::1;15943:18;:33:::0;;;16008:37:::1;::::0;16029:16;;16008:37:::1;:::i;:::-;15987:18;:58:::0;16061:16:::1;::::0;::::1;::::0;;;::::1;15658:427:::0;:::o;29598:498::-;8021:6;;29685:10;;-1:-1:-1;;;;;8021:6:0;256:10;8021:22;8013:67;;;;-1:-1:-1;;;8013:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29716:20:0;::::1;29708:59;;;::::0;-1:-1:-1;;;29708:59:0;;20616:2:1;29708:59:0::1;::::0;::::1;20598:21:1::0;20655:2;20635:18;;;20628:30;20694:28;20674:18;;;20667:56;20740:18;;29708:59:0::1;20414:350:1::0;29708:59:0::1;-1:-1:-1::0;;;;;29786:23:0;::::1;29804:4;29786:23;;::::0;:41:::1;;-1:-1:-1::0;29814:13:0::1;::::0;::::1;::::0;::::1;;;29813:14;29786:41;29778:106;;;::::0;-1:-1:-1;;;29778:106:0;;20971:2:1;29778:106:0::1;::::0;::::1;20953:21:1::0;21010:2;20990:18;;;20983:30;21049:34;21029:18;;;21022:62;-1:-1:-1;;;21100:18:1;;;21093:50;21160:19;;29778:106:0::1;20769:416:1::0;29778:106:0::1;29922:39;::::0;-1:-1:-1;;;29922:39:0;;29955:4:::1;29922:39;::::0;::::1;962:51:1::0;29895:24:0::1;::::0;-1:-1:-1;;;;;29922:24:0;::::1;::::0;::::1;::::0;935:18:1;;29922:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29980:46;::::0;-1:-1:-1;;;29980:46:0;;-1:-1:-1;;;;;18959:32:1;;;29980:46:0::1;::::0;::::1;18941:51:1::0;19008:18;;;19001:34;;;29895:66:0;;-1:-1:-1;29980:23:0;;::::1;::::0;::::1;::::0;18914:18:1;;29980:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30042;::::0;;-1:-1:-1;;;;;18959:32:1;;18941:51;;19023:2;19008:18;;19001:34;;;29972:54:0;;-1:-1:-1;30042:46:0::1;::::0;18914:18:1;30042:46:0::1;;;;;;;29697:399;29598:498:::0;;;;:::o;4135:104::-;4191:13;4224:7;4217:14;;;;;:::i;16382:103::-;16431:16;16466:11;16459:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16459:18:0;;;;;;;;;;;;;;;;;;;;;;16382:103;:::o;19078:293::-;8021:6;;-1:-1:-1;;;;;8021:6:0;256:10;8021:22;8013:67;;;;-1:-1:-1;;;8013:67:0;;;;;;;:::i;:::-;19187:6:::1;::::0;-1:-1:-1;;;;;19187:6:0;;::::1;19179:14:::0;;::::1;::::0;19171:84:::1;;;::::0;-1:-1:-1;;;19171:84:0;;21392:2:1;19171:84:0::1;::::0;::::1;21374:21:1::0;21431:2;21411:18;;;21404:30;21470:34;21450:18;;;21443:62;21541:27;21521:18;;;21514:55;21586:19;;19171:84:0::1;21190:421:1::0;19171:84:0::1;19266:41;19295:4;19301:5;19266:28;:41::i;:::-;19323:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;19323:40:0;::::1;::::0;::::1;::::0;;;::::1;19078:293:::0;;:::o;5841:413::-;256:10;5934:4;5978:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5978:34:0;;;;;;;;;;6031:35;;;;6023:85;;;;-1:-1:-1;;;6023:85:0;;21818:2:1;6023:85:0;;;21800:21:1;21857:2;21837:18;;;21830:30;21896:34;21876:18;;;21869:62;-1:-1:-1;;;21947:18:1;;;21940:35;21992:19;;6023:85:0;21616:401:1;6023:85:0;6144:67;256:10;6167:7;6195:15;6176:16;:34;6144:8;:67::i;:::-;-1:-1:-1;6242:4:0;;5841:413;-1:-1:-1;;;5841:413:0:o;4599:175::-;4685:4;4702:42;256:10;4726:9;4737:6;4702:9;:42::i;20425:282::-;8021:6;;-1:-1:-1;;;;;8021:6:0;256:10;8021:22;8013:67;;;;-1:-1:-1;;;8013:67:0;;;;;;;:::i;:::-;20532:9:::1;20528:172;20547:19:::0;;::::1;20528:172;;;20622:8;20587:19;:32;20607:8;;20616:1;20607:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20587:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;20587:32:0;:43;;-1:-1:-1;;20587:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20666:8;;20675:1;20666:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20650:38:0::1;;20679:8;20650:38;;;;1645:14:1::0;1638:22;1620:41;;1608:2;1593:18;;1480:187;20650:38:0::1;;;;;;;;20568:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20528:172;;;;20425:282:::0;;;:::o;37198:449::-;8021:6;;-1:-1:-1;;;;;8021:6:0;256:10;8021:22;8013:67;;;;-1:-1:-1;;;8013:67:0;;;;;;;:::i;:::-;37290:24:::1;::::0;::::1;;37289:25;37281:87;;;::::0;-1:-1:-1;;;37281:87:0;;22224:2:1;37281:87:0::1;::::0;::::1;22206:21:1::0;22263:2;22243:18;;;22236:30;22302:34;22282:18;;;22275:62;-1:-1:-1;;;22353:18:1;;;22346:47;22410:19;;37281:87:0::1;22022:413:1::0;37281:87:0::1;37405:3;37387:14;:21;;:43;;;;;37429:1;37412:14;:18;37387:43;37379:82;;;::::0;-1:-1:-1;;;37379:82:0;;22642:2:1;37379:82:0::1;::::0;::::1;22624:21:1::0;22681:2;22661:18;;;22654:30;22720:28;22700:18;;;22693:56;22766:18;;37379:82:0::1;22440:350:1::0;37379:82:0::1;37501:15;37472:26;:44:::0;37527:24:::1;:31:::0;;-1:-1:-1;;37527:31:0::1;37554:4;37527:31;::::0;;37569:16:::1;:33:::0;;;37618:21:::1;::::0;::::1;::::0;37527:24:::1;::::0;37618:21:::1;37198:449:::0;:::o;20715:182::-;8021:6;;-1:-1:-1;;;;;8021:6:0;256:10;8021:22;8013:67;;;;-1:-1:-1;;;8013:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20800:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20800:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20855:34;;1620:41:1;;;20855:34:0::1;::::0;1593:18:1;20855:34:0::1;;;;;;;20715:182:::0;;:::o;20020:397::-;8021:6;;-1:-1:-1;;;;;8021:6:0;256:10;8021:22;8013:67;;;;-1:-1:-1;;;8013:67:0;;;;;;;:::i;:::-;20136:15:::1;:30:::0;;;20177:16:::1;:32:::0;;;20220:11:::1;:22:::0;;;20234:8;20269:34:::1;20196:13:::0;20154:12;20269:34:::1;:::i;:::-;:48;;;;:::i;:::-;20253:13;:64:::0;20372:3:::1;20353:16;11033:5;20353:2;:16;:::i;:::-;:22;;;;:::i;:::-;20336:13;;:39;;20328:81;;;::::0;-1:-1:-1;;;20328:81:0;;22997:2:1;20328:81:0::1;::::0;::::1;22979:21:1::0;23036:2;23016:18;;;23009:30;23075:31;23055:18;;;23048:59;23124:18;;20328:81:0::1;22795:353:1::0;38439:220:0;8021:6;;-1:-1:-1;;;;;8021:6:0;256:10;8021:22;8013:67;;;;-1:-1:-1;;;8013:67:0;;;;;;;:::i;:::-;38504:24:::1;:32:::0;;-1:-1:-1;;38504:32:0::1;::::0;;38531:5:::1;38547:16;:20:::0;;;38578:26:::1;:30:::0;;;38624:27:::1;::::0;::::1;::::0;38531:5;38624:27:::1;38439:220::o:0;18232:346::-;8021:6;;-1:-1:-1;;;;;8021:6:0;256:10;8021:22;8013:67;;;;-1:-1:-1;;;8013:67:0;;;;;;;:::i;:::-;18355:6:::1;18335:13;4436:12:::0;;;4348:108;18335:13:::1;:17;::::0;18351:1:::1;18335:17;:::i;:::-;:26;;;;:::i;:::-;18322:9;:39;;18314:105;;;::::0;-1:-1:-1;;;18314:105:0;;23355:2:1;18314:105:0::1;::::0;::::1;23337:21:1::0;23394:2;23374:18;;;23367:30;23433:34;23413:18;;;23406:62;-1:-1:-1;;;23484:18:1;;;23477:51;23545:19;;18314:105:0::1;23153:417:1::0;18314:105:0::1;18470:4;18450:13;4436:12:::0;;;4348:108;18450:13:::1;:17;::::0;18466:1:::1;18450:17;:::i;:::-;:24;;;;:::i;:::-;18437:9;:37;;18429:102;;;::::0;-1:-1:-1;;;18429:102:0;;23777:2:1;18429:102:0::1;::::0;::::1;23759:21:1::0;23816:2;23796:18;;;23789:30;23855:34;23835:18;;;23828:62;-1:-1:-1;;;23906:18:1;;;23899:50;23966:19;;18429:102:0::1;23575:416:1::0;18429:102:0::1;18541:18;:30:::0;18232:346::o;17566:300::-;8021:6;;-1:-1:-1;;;;;8021:6:0;256:10;8021:22;8013:67;;;;-1:-1:-1;;;8013:67:0;;;;;;;:::i;:::-;17689:16:::1;4330:2:::0;17689::::1;:16;:::i;:::-;17680:4;17660:13;4436:12:::0;;;4348:108;17660:13:::1;:17;::::0;17676:1:::1;17660:17;:::i;:::-;:24;;;;:::i;:::-;17659:47;;;;:::i;:::-;17649:6;:57;;17641:112;;;::::0;-1:-1:-1;;;17641:112:0;;24198:2:1;17641:112:0::1;::::0;::::1;24180:21:1::0;24237:2;24217:18;;;24210:30;24276:34;24256:18;;;24249:62;-1:-1:-1;;;24327:18:1;;;24320:40;24377:19;;17641:112:0::1;23996:406:1::0;17641:112:0::1;17790:16;4330:2:::0;17790::::1;:16;:::i;:::-;17780:27;::::0;:6;:27:::1;:::i;:::-;17764:13;:43:::0;;;17823:35:::1;::::0;160:25:1;;;17823:35:0::1;::::0;148:2:1;133:18;17823:35:0::1;14:177:1::0;17149:98:0;8021:6;;-1:-1:-1;;;;;8021:6:0;256:10;8021:22;8013:67;;;;-1:-1:-1;;;8013:67:0;;;;;;;:::i;:::-;17211:20:::1;:28:::0;;-1:-1:-1;;17211:28:0::1;::::0;;17149:98::o;31659:2016::-;8021:6;;-1:-1:-1;;;;;8021:6:0;256:10;8021:22;8013:67;;;;-1:-1:-1;;;8013:67:0;;;;;;;:::i;:::-;31800:13:::1;::::0;::::1;::::0;::::1;;;31799:14;31791:70;;;::::0;-1:-1:-1;;;31791:70:0;;24609:2:1;31791:70:0::1;::::0;::::1;24591:21:1::0;24648:2;24628:18;;;24621:30;24687:34;24667:18;;;24660:62;-1:-1:-1;;;24738:18:1;;;24731:41;24789:19;;31791:70:0::1;24407:407:1::0;31791:70:0::1;31899:2;31880:16;:21;31872:73;;;;-1:-1:-1::0;;;31872:73:0::1;;;;;;;:::i;:::-;31984:15;:22;31966:7;:14;:40;31958:83;;;::::0;-1:-1:-1;;;31958:83:0;;25021:2:1;31958:83:0::1;::::0;::::1;25003:21:1::0;25060:2;25040:18;;;25033:30;25099:32;25079:18;;;25072:60;25149:18;;31958:83:0::1;24819:354:1::0;31958:83:0::1;32077:3;32060:7;:14;:20;32052:87;;;::::0;-1:-1:-1;;;32052:87:0;;25380:2:1;32052:87:0::1;::::0;::::1;25362:21:1::0;25419:2;25399:18;;;25392:30;25458:34;25438:18;;;25431:62;-1:-1:-1;;;25509:18:1;;;25502:52;25571:19;;32052:87:0::1;25178:418:1::0;32052:87:0::1;32252:9;32248:351;32271:7;:14;32267:1;:18;32248:351;;;32306:14;32323:7;32331:1;32323:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;32348:26:0;::::1;;::::0;;;:18:::1;:26:::0;;;;;;;:33;;-1:-1:-1;;32348:33:0::1;32377:4;32348:33;::::0;;32323:10;-1:-1:-1;32432:26:0::1;:15;32450:8;32432:26;:::i;:::-;-1:-1:-1::0;;;;;32396:33:0;::::1;;::::0;;;:25:::1;:33;::::0;;;;:62;;;;32512:16:::1;4330:2:::0;32512::::1;:16;:::i;:::-;32490:15;32506:1;32490:18;;;;;;;;:::i;:::-;;;;;;;:39;;;;:::i;:::-;32473:56;;32544:43;32560:10;32572:6;32580;32544:15;:43::i;:::-;32291:308;;32287:3;;;;;:::i;:::-;;;;32248:351;;;-1:-1:-1::0;32646:13:0::1;:20:::0;;-1:-1:-1;;32677:18:0;;;;;32727:12:::1;32706:18;:33:::0;;;32771:37:::1;::::0;32792:16;;32771:37:::1;:::i;:::-;32750:18;:58:::0;32824:16:::1;::::0;::::1;::::0;;;::::1;32898:9;;;;;;;;;-1:-1:-1::0;;;;;32898:9:0::1;-1:-1:-1::0;;;;;32898:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32886:43:0::1;;32938:4;32945:9;;;;;;;;;-1:-1:-1::0;;;;;32945:9:0::1;-1:-1:-1::0;;;;;32945:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32886:76;::::0;-1:-1:-1;;;;;;32886:76:0::1;::::0;;;;;;-1:-1:-1;;;;;25831:15:1;;;32886:76:0::1;::::0;::::1;25813:34:1::0;25883:15;;25863:18;;;25856:43;25748:18;;32886:76:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32877:6;:85:::0;;-1:-1:-1;;;;;;32877:85:0::1;-1:-1:-1::0;;;;;32877:85:0;;;::::1;::::0;;::::1;::::0;;32973:49:::1;::::0;-1:-1:-1;32973:26:0::1;:49::i;:::-;33070:6;::::0;33033:51:::1;::::0;-1:-1:-1;;;;;33070:6:0::1;::::0;33033:28:::1;:51::i;:::-;33164:1;33140:21;:25;33132:73;;;::::0;-1:-1:-1;;;33132:73:0;;26112:2:1;33132:73:0::1;::::0;::::1;26094:21:1::0;26151:2;26131:18;;;26124:30;26190:34;26170:18;;;26163:62;-1:-1:-1;;;26241:18:1;;;26234:33;26284:19;;33132:73:0::1;25910:399:1::0;33132:73:0::1;33253:1;33226:24;33244:4;33226:9;:24::i;:::-;:28;33218:79;;;::::0;-1:-1:-1;;;33218:79:0;;26516:2:1;33218:79:0::1;::::0;::::1;26498:21:1::0;26555:2;26535:18;;;26528:30;26594:34;26574:18;;;26567:62;-1:-1:-1;;;26645:18:1;;;26638:36;26691:19;;33218:79:0::1;26314:402:1::0;33218:79:0::1;33342:9;::::0;33310:69:::1;::::0;33327:4:::1;::::0;-1:-1:-1;;;;;33342:9:0::1;33354:24;33327:4:::0;33354:9:::1;:24::i;33310:69::-;33390:9;::::0;-1:-1:-1;;;;;33390:9:0::1;:25;33423:21;33468:4;33488:24;33468:4:::0;33488:9:::1;:24::i;:::-;33527:1;33570::::0;33621:4:::1;33641:15;33390:277;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31659:2016:::0;;;:::o;10114:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10114:28:0;;-1:-1:-1;10114:28:0;:::o;8266:244::-;8021:6;;-1:-1:-1;;;;;8021:6:0;256:10;8021:22;8013:67;;;;-1:-1:-1;;;8013:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8355:22:0;::::1;8347:73;;;::::0;-1:-1:-1;;;8347:73:0;;27846:2:1;8347:73:0::1;::::0;::::1;27828:21:1::0;27885:2;27865:18;;;27858:30;27924:34;27904:18;;;27897:62;-1:-1:-1;;;27975:18:1;;;27968:36;28021:19;;8347:73:0::1;27644:402:1::0;8347:73:0::1;8457:6;::::0;8436:38:::1;::::0;-1:-1:-1;;;;;8436:38:0;;::::1;::::0;8457:6:::1;::::0;8436:38:::1;::::0;8457:6:::1;::::0;8436:38:::1;8485:6;:17:::0;;-1:-1:-1;;;;;;8485:17:0::1;-1:-1:-1::0;;;;;8485:17:0;;;::::1;::::0;;;::::1;::::0;;8266:244::o;30166:160::-;8021:6;;-1:-1:-1;;;;;8021:6:0;256:10;8021:22;8013:67;;;;-1:-1:-1;;;8013:67:0;;;;;;;:::i;:::-;30260:58:::1;::::0;30224:12:::1;::::0;30268:10:::1;::::0;30292:21:::1;::::0;30224:12;30260:58;30224:12;30260:58;30292:21;30268:10;30260:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35402:1398:::0;8021:6;;-1:-1:-1;;;;;8021:6:0;256:10;8021:22;8013:67;;;;-1:-1:-1;;;8013:67:0;;;;;;;:::i;:::-;35506:4:::1;35496:7;:14;;35488:80;;;::::0;-1:-1:-1;;;35488:80:0;;28463:2:1;35488:80:0::1;::::0;::::1;28445:21:1::0;28502:2;28482:18;;;28475:30;28541:34;28521:18;;;28514:62;-1:-1:-1;;;28592:18:1;;;28585:51;28653:19;;35488:80:0::1;28261:417:1::0;35488:80:0::1;35629:19;::::0;35611:37:::1;::::0;:15:::1;:37;:::i;:::-;35587:20;;:61;;35579:87;;;::::0;-1:-1:-1;;;35579:87:0;;29015:2:1;35579:87:0::1;::::0;::::1;28997:21:1::0;29054:2;29034:18;;;29027:30;-1:-1:-1;;;29073:18:1;;;29066:43;29126:18;;35579:87:0::1;28813:337:1::0;35579:87:0::1;35700:15;35677:20;:38:::0;35753:6:::1;::::0;35746:39:::1;::::0;-1:-1:-1;;;35746:39:0;;35779:4:::1;35746:39;::::0;::::1;962:51:1::0;35726:17:0::1;::::0;-1:-1:-1;;;;;35753:6:0::1;::::0;35746:24:::1;::::0;935:18:1;;35746:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35726:59;;35796:20;35819:24;35837:4;35819:9;:24::i;:::-;35796:47:::0;-1:-1:-1;35854:16:0::1;35895:5;35873:19;35885:7:::0;35873:9;:19:::1;:::i;:::-;:27;;;;:::i;:::-;36047:6;::::0;36071:9:::1;::::0;36040:52:::1;::::0;-1:-1:-1;;;36040:52:0;;-1:-1:-1;;;;;36071:9:0;;::::1;36040:52;::::0;::::1;18941:51:1::0;19008:18;;;19001:34;;;35854:46:0;;-1:-1:-1;35939:21:0::1;::::0;36047:6;::::1;::::0;36040:22:::1;::::0;18914:18:1;;36040:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;36138:9:0::1;::::0;:234:::1;::::0;-1:-1:-1;;;36138:234:0;;-1:-1:-1;;;;;36138:9:0;;::::1;::::0;:28:::1;::::0;:234:::1;::::0;36189:4:::1;::::0;36209:8;;36138:9;;;;36189:4;;36346:15:::1;::::0;36138:234:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36385:25;36440:12;36413:24;36431:4;36413:9;:24::i;:::-;:39;;;;:::i;:::-;36385:67:::0;-1:-1:-1;36466:21:0;;36463:118:::1;;36503:66;36527:4;36542:6;36551:17;36503:15;:66::i;:::-;36593:23;36619:41;36643:17:::0;36619:21:::1;:41;:::i;:::-;36593:67:::0;-1:-1:-1;36676:19:0;;36673:80:::1;;36711:30;36725:15;36711:13;:30::i;:::-;36770:22;::::0;36783:8;;36770:22:::1;::::0;;;::::1;35477:1323;;;;;;35402:1398:::0;:::o;7183:380::-;-1:-1:-1;;;;;7319:19:0;;7311:68;;;;-1:-1:-1;;;7311:68:0;;30219:2:1;7311:68:0;;;30201:21:1;30258:2;30238:18;;;30231:30;30297:34;30277:18;;;30270:62;-1:-1:-1;;;30348:18:1;;;30341:34;30392:19;;7311:68:0;30017:400:1;7311:68:0;-1:-1:-1;;;;;7398:21:0;;7390:68;;;;-1:-1:-1;;;7390:68:0;;30624:2:1;7390:68:0;;;30606:21:1;30663:2;30643:18;;;30636:30;30702:34;30682:18;;;30675:62;-1:-1:-1;;;30753:18:1;;;30746:32;30795:19;;7390:68:0;30422:398:1;7390:68:0;-1:-1:-1;;;;;7471:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7523:32;;160:25:1;;;7523:32:0;;133:18:1;7523:32:0;;;;;;;7183:380;;;:::o;20905:6236::-;-1:-1:-1;;;;;21005:18:0;;20997:68;;;;-1:-1:-1;;;20997:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21084:16:0;;21076:64;;;;-1:-1:-1;;;21076:64:0;;;;;;;:::i;:::-;21168:1;21159:6;:10;21151:52;;;;-1:-1:-1;;;21151:52:0;;31837:2:1;21151:52:0;;;31819:21:1;31876:2;31856:18;;;31849:30;31915:31;31895:18;;;31888:59;31964:18;;21151:52:0;31635:353:1;21151:52:0;21228:13;;;;;;;21224:132;;-1:-1:-1;;;;;21265:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;21294:23:0;;;;;;:19;:23;;;;;;;;21265:52;21257:87;;;;-1:-1:-1;;;21257:87:0;;32195:2:1;21257:87:0;;;32177:21:1;32234:2;32214:18;;;32207:30;-1:-1:-1;;;32253:18:1;;;32246:52;32315:18;;21257:87:0;31993:346:1;21257:87:0;27243:18;;27228:12;:33;21371:26;:43;;;;-1:-1:-1;21401:13:0;;;;;;;21371:43;21368:217;;;-1:-1:-1;;;;;21439:17:0;;;;;;:11;:17;;;;;;;;21438:18;;:35;;-1:-1:-1;7959:6:0;;-1:-1:-1;;;;;21460:13:0;;;7959:6;;21460:13;21438:35;:60;;;-1:-1:-1;;;;;;21477:21:0;;21491:6;21477:21;21438:60;21430:143;;;;-1:-1:-1;;;21430:143:0;;32546:2:1;21430:143:0;;;32528:21:1;32585:2;32565:18;;;32558:30;32624:34;32604:18;;;32597:62;32695:34;32675:18;;;32668:62;-1:-1:-1;;;32746:19:1;;;32739:37;32793:19;;21430:143:0;32344:474:1;21430:143:0;-1:-1:-1;;;;;21600:24:0;;;;;;:18;:24;;;;;;;;21597:610;;;-1:-1:-1;;;;;21643:29:0;;;;;;:25;:29;;;;;;;;21640:556;;;-1:-1:-1;;;;;21750:31:0;;;;;;:25;:31;;;;;;21785:15;-1:-1:-1;21750:50:0;21742:78;;;;-1:-1:-1;;;21742:78:0;;33025:2:1;21742:78:0;;;33007:21:1;33064:2;33044:18;;;33037:30;-1:-1:-1;;;33083:18:1;;;33076:45;33138:18;;21742:78:0;32823:339:1;21742:78:0;21857:23;:21;:23::i;:::-;21847:6;:33;;21839:98;;;;-1:-1:-1;;;21839:98:0;;33369:2:1;21839:98:0;;;33351:21:1;33408:2;33388:18;;;33381:30;33447:34;33427:18;;;33420:62;-1:-1:-1;;;33498:18:1;;;33491:50;33558:19;;21839:98:0;33167:416:1;21839:98:0;21990:26;:15;22008:8;21990:26;:::i;:::-;-1:-1:-1;;;;;21956:31:0;;;;;;:25;:31;;;;;:60;21640:556;;;-1:-1:-1;;;;;22042:23:0;;;;;;:19;:23;;;;;;;;22038:158;;22085:95;;-1:-1:-1;;;22085:95:0;;33790:2:1;22085:95:0;;;33772:21:1;33829:2;33809:18;;;33802:30;33868:34;33848:18;;;33841:62;33939:34;33919:18;;;33912:62;-1:-1:-1;;;33990:19:1;;;33983:52;34052:19;;22085:95:0;33588:489:1;22038:158:0;22230:14;;;;22227:1662;;;7959:6;;-1:-1:-1;;;;;22264:15:0;;;7959:6;;22264:15;;;;:32;;-1:-1:-1;7959:6:0;;-1:-1:-1;;;;;22283:13:0;;;7959:6;;22283:13;;22264:32;:52;;;;-1:-1:-1;;;;;;22300:16:0;;;;22264:52;:77;;;;-1:-1:-1;;;;;;22320:21:0;;22334:6;22320:21;;22264:77;:107;;;;-1:-1:-1;;;;;;22346:25:0;;;;;;:19;:25;;;;;;;;22345:26;22264:107;:135;;;;-1:-1:-1;;;;;;22376:23:0;;;;;;:19;:23;;;;;;;;22375:24;22264:135;22260:1618;;;22575:20;;;;22571:506;;;22637:9;;-1:-1:-1;;;;;22623:24:0;;;22637:9;;22623:24;;;;:49;;-1:-1:-1;22665:6:0;;-1:-1:-1;;;;;22651:21:0;;;22665:6;;22651:21;;22623:49;22619:439;;;22750:16;22765:1;22750:12;:16;:::i;:::-;22737:9;22708:39;;;;:28;:39;;;;;;:58;:113;;;;-1:-1:-1;22805:16:0;22820:1;22805:12;:16;:::i;:::-;-1:-1:-1;;;;;22770:32:0;;;;;;:28;:32;;;;;;:51;22708:113;22700:179;;;;-1:-1:-1;;;22700:179:0;;34284:2:1;22700:179:0;;;34266:21:1;34323:2;34303:18;;;34296:30;34362:34;34342:18;;;34335:62;-1:-1:-1;;;34413:18:1;;;34406:51;34474:19;;22700:179:0;34082:417:1;22700:179:0;22935:9;22906:39;;;;:28;:39;;;;;;22948:12;22906:54;;;;-1:-1:-1;;;;;22987:32:0;;;;;;:47;22619:439;-1:-1:-1;;;;;23146:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;23182:35:0;;;;;;:31;:35;;;;;;;;23181:36;23146:71;23142:721;;;23260:12;;23250:6;:22;;23242:75;;;;-1:-1:-1;;;23242:75:0;;34706:2:1;23242:75:0;;;34688:21:1;34745:2;34725:18;;;34718:30;34784:34;34764:18;;;34757:62;-1:-1:-1;;;34835:18:1;;;34828:38;34883:19;;23242:75:0;34504:404:1;23242:75:0;23374:9;;23357:13;23367:2;23357:9;:13::i;:::-;23348:22;;:6;:22;:::i;:::-;:35;;23340:72;;;;-1:-1:-1;;;23340:72:0;;35115:2:1;23340:72:0;;;35097:21:1;35154:2;35134:18;;;35127:30;-1:-1:-1;;;35173:18:1;;;35166:54;35237:18;;23340:72:0;34913:348:1;23340:72:0;23142:721;;;-1:-1:-1;;;;;23489:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;23523:37:0;;;;;;:31;:37;;;;;;;;23522:38;23489:71;23485:378;;;23603:13;;23593:6;:23;;23585:78;;;;-1:-1:-1;;;23585:78:0;;35468:2:1;23585:78:0;;;35450:21:1;35507:2;35487:18;;;35480:30;35546:34;35526:18;;;35519:62;-1:-1:-1;;;35597:18:1;;;35590:40;35647:19;;23585:78:0;35266:406:1;23485:378:0;-1:-1:-1;;;;;23711:35:0;;;;;;:31;:35;;;;;;;;23706:157;;23805:9;;23788:13;23798:2;23788:9;:13::i;:::-;23779:22;;:6;:22;:::i;:::-;:35;;23771:72;;;;-1:-1:-1;;;23771:72:0;;35115:2:1;23771:72:0;;;35097:21:1;35154:2;35134:18;;;35127:30;-1:-1:-1;;;35173:18:1;;;35166:54;35237:18;;23771:72:0;34913:348:1;23771:72:0;23901:28;23932:24;23950:4;23932:9;:24::i;:::-;24016:18;;23901:55;;-1:-1:-1;23992:42:0;;;;;;;24050:22;;-1:-1:-1;24061:11:0;;;;;;;24050:22;:35;;;;-1:-1:-1;24077:8:0;;-1:-1:-1;;;24077:8:0;;;;24076:9;24050:35;:71;;;;-1:-1:-1;;;;;;24090:31:0;;;;;;:25;:31;;;;;;;;24089:32;24050:71;:101;;;;-1:-1:-1;;;;;;24126:25:0;;;;;;:19;:25;;;;;;;;24125:26;24050:101;:129;;;;-1:-1:-1;;;;;;24156:23:0;;;;;;:19;:23;;;;;;;;24155:24;24050:129;24047:232;;;24196:8;:15;;-1:-1:-1;;;;24196:15:0;-1:-1:-1;;;24196:15:0;;;24226:10;:8;:10::i;:::-;24251:8;:16;;-1:-1:-1;;;;24251:16:0;;;24047:232;24295:8;;-1:-1:-1;;;24295:8:0;;;;24294:9;:42;;;;-1:-1:-1;;;;;;24307:29:0;;;;;;:25;:29;;;;;;;;24294:42;:59;;;;-1:-1:-1;24340:13:0;;;;24294:59;:114;;;;;24393:15;;24376:14;;:32;;;;:::i;:::-;24357:15;:51;;24294:114;:144;;;;-1:-1:-1;;;;;;24413:25:0;;;;;;:19;:25;;;;;;;;24412:26;24294:144;24291:204;;;24454:29;:27;:29::i;:::-;-1:-1:-1;;;;;24625:25:0;;24507:12;24625:25;;;:19;:25;;;;;;24522:4;;24625:25;;;:52;;-1:-1:-1;;;;;;24654:23:0;;;;;;:19;:23;;;;;;;;24625:52;24622:99;;;-1:-1:-1;24704:5:0;24622:99;24741:12;24768:20;24882:7;24879:2209;;;27243:18;;27228:12;:33;24944:60;;;;-1:-1:-1;;;;;;24973:31:0;;;;;;:25;:31;;;;;;;;24944:60;:94;;;;-1:-1:-1;;;;;;25009:29:0;;;;;;:25;:29;;;;;;;;25008:30;24944:94;:122;;;;-1:-1:-1;;;;;;25043:23:0;;;;;;:19;:23;;;;;;;;25042:24;24944:122;:142;;;;;25085:1;25070:12;;:16;24944:142;24941:1836;;;27243:18;;27228:12;:33;25124:330;;25433:1;25417:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;25124:330:0;-1:-1:-1;;;;;25478:15:0;;;;;;:11;:15;;;;;;;;25474:214;;-1:-1:-1;;;;;25517:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;25517:22:0;25535:4;25517:22;;;;;;25562:10;:15;;25535:4;;25562:10;;:15;;25535:4;;25562:15;:::i;:::-;;;;-1:-1:-1;;25600:11:0;:20;;;;;;;-1:-1:-1;25600:20:0;;;;;;;;-1:-1:-1;;;;;;25600:20:0;-1:-1:-1;;;;;25600:20:0;;;;;;;;25648;;962:51:1;;;25648:20:0;;950:2:1;935:18;25648:20:0;;;;;;;25474:214;11033:5;25724:12;;25715:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;25708:42;;25813:12;;25795:15;;25788:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;25766:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;25889:12:0;;25872:14;;25865:21;;:4;:21;:::i;:::-;:36;;;;:::i;:::-;25844:17;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;25955:12:0;;25942:10;;25935:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;25920:47;;24941:1836;;;-1:-1:-1;;;;;26032:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;26081:1;26065:13;;:17;26032:50;26028:749;;;11033:5;26118:13;;26109:6;:22;;;;:::i;:::-;:36;;;;:::i;:::-;26102:43;;26212:13;;26193:16;;26186:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;26164:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;26290:13:0;;26272:15;;26265:22;;:4;:22;:::i;:::-;:38;;;;:::i;:::-;26244:17;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;26358:12:0;;26344:11;;26337:18;;:4;:18;:::i;26028:749::-;-1:-1:-1;;;;;26433:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;26483:1;26468:12;;:16;26433:51;26430:347;;;11033:5;26518:12;;26509:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;26502:42;;26607:12;;26589:15;;26582:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;26560:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;26683:12:0;;26666:14;;26659:21;;:4;:21;:::i;:::-;:36;;;;:::i;:::-;26638:17;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;26749:12:0;;26736:10;;26729:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;26714:47;;26430:347;26808:8;;26805:235;;26840:42;26856:4;26870;26877;26840:15;:42::i;:::-;26904:16;;26901:124;;26944:61;26968:4;26983:6;26992:12;26944:15;:61::i;:::-;27062:14;27072:4;27062:14;;:::i;:::-;;;24879:2209;27100:33;27116:4;27122:2;27126:6;27100:15;:33::i;:::-;20984:6157;;;;;20905:6236;;;:::o;28377:1213::-;28418:23;28444:24;28462:4;28444:9;:24::i;:::-;28418:50;;28479:25;28528:17;;28507:18;;:38;;;;:::i;:::-;28479:66;-1:-1:-1;28569:20:0;;;:46;;-1:-1:-1;28593:22:0;;28569:46;28566:60;;;28618:7;;28377:1213::o;28566:60::-;28659:18;;:23;;28680:2;28659:23;:::i;:::-;28641:15;:41;28638:113;;;28716:18;;:23;;28737:2;28716:23;:::i;:::-;28698:41;;28638:113;28763:12;28845:23;28930:1;28910:17;28889:18;;28871:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;28845:86;-1:-1:-1;28952:51:0;28969:33;28845:86;28969:15;:33;:::i;:::-;28952:16;:51::i;:::-;29207:18;;29046:21;;;;29025:18;;29207:20;;29226:1;;29207:20;:::i;:::-;29186:42;;:17;:42;:::i;:::-;29165:17;;29152:30;;:10;:30;:::i;:::-;:77;;;;:::i;:::-;29127:102;-1:-1:-1;29242:33:0;29127:102;29242:33;;:::i;:::-;29321:1;29300:18;:22;;;29333:17;:21;29242:33;-1:-1:-1;29378:19:0;;;;;:42;;;29419:1;29401:15;:19;29378:42;29375:119;;;29436:46;29449:15;29466;29436:12;:46::i;:::-;29527:15;;29519:63;;-1:-1:-1;;;;;29527:15:0;;;;29556:21;;29519:63;;;;29556:21;29527:15;29519:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;28377:1213:0:o;19379:236::-;-1:-1:-1;;;;;19462:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;19462:39:0;;;;;;;19512;19462:31;:39;19512:26;:39::i;6262:614::-;-1:-1:-1;;;;;6402:20:0;;6394:70;;;;-1:-1:-1;;;6394:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6483:23:0;;6475:71;;;;-1:-1:-1;;;6475:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6583:17:0;;6559:21;6583:17;;;;;;;;;;;6619:23;;;;6611:74;;;;-1:-1:-1;;;6611:74:0;;35879:2:1;6611:74:0;;;35861:21:1;35918:2;35898:18;;;35891:30;35957:34;35937:18;;;35930:62;-1:-1:-1;;;36008:18:1;;;36001:36;36054:19;;6611:74:0;35677:402:1;6611:74:0;-1:-1:-1;;;;;6721:17:0;;;:9;:17;;;;;;;;;;;6741:22;;;6721:42;;6785:20;;;;;;;;:30;;6757:6;;6721:9;6785:30;;6757:6;;6785:30;:::i;:::-;;;;;;;;6850:9;-1:-1:-1;;;;;6833:35:0;6842:6;-1:-1:-1;;;;;6833:35:0;;6861:6;6833:35;;;;160:25:1;;148:2;133:18;;14:177;6833:35:0;;;;;;;;6383:493;6262:614;;;:::o;18590:207::-;-1:-1:-1;;;;;18678:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;18678:52:0;;;;;;;;;;18746:43;;36252:51:1;;;36319:18;;;36312:50;18746:43:0;;36225:18:1;18746:43:0;;;;;;;18590:207;;:::o;36808:382::-;36896:16;;;36910:1;36896:16;;;;;;;;36872:21;;36896:16;;;;;;;;-1:-1:-1;;36933:9:0;;:16;;;-1:-1:-1;;;36933:16:0;;;;36872:40;;-1:-1:-1;;;;;;36933:9:0;;;;:14;;-1:-1:-1;36933:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36923:4;36928:1;36923:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;36923:26:0;;;-1:-1:-1;;;;;36923:26:0;;;;;36978:4;36960;36965:1;36960:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;36960:23:0;;;:7;;;;;;;;;:23;36996:9;;:186;;-1:-1:-1;;;36996:186:0;;:9;;;:60;;37064:11;;36996:186;;:9;;37107:4;;37134:6;;37156:15;;36996:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36861:329;36808:382;:::o;34142:1252::-;34228:15;34211:14;:32;;;34264:20;:38;34340:6;;34333:39;;-1:-1:-1;;;34333:39:0;;34366:4;34333:39;;;962:51:1;-1:-1:-1;;;;;;;34340:6:0;;34333:24;;935:18:1;;34333:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34313:59;;34383:20;34406:24;34424:4;34406:9;:24::i;:::-;34383:47;;34441:16;34491:5;34472:16;;34460:9;:28;;;;:::i;:::-;:36;;;;:::i;:::-;34643:6;;34667:9;;34636:52;;-1:-1:-1;;;34636:52:0;;-1:-1:-1;;;;;34667:9:0;;;34636:52;;;18941:51:1;19008:18;;;19001:34;;;34441:55:0;;-1:-1:-1;34535:21:0;;34643:6;;;34636:22;;18914:18:1;;34636:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;34734:9:0;;:234;;-1:-1:-1;;;34734:234:0;;-1:-1:-1;;;;;34734:9:0;;;;:28;;:234;;34785:4;;34805:8;;34734:9;;;;34785:4;;34942:15;;34734:234;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34981:25;35036:12;35009:24;35027:4;35009:9;:24::i;:::-;:39;;;;:::i;:::-;34981:67;-1:-1:-1;35062:21:0;;35059:118;;35099:66;35123:4;35138:6;35147:17;35099:15;:66::i;:::-;35189:23;35215:41;35239:17;35215:21;:41;:::i;:::-;35189:67;-1:-1:-1;35272:19:0;;35269:80;;35307:30;35321:15;35307:13;:30::i;:::-;35366:20;;35377:8;;35366:20;;;;;34190:1204;;;;;;34142:1252::o;27277:573::-;27429:16;;;27443:1;27429:16;;;;;;;;27405:21;;27429:16;;;;;;;;;;-1:-1:-1;27429:16:0;27405:40;;27474:4;27456;27461:1;27456:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27456:23:0;;;:7;;;;;;;;;;:23;;;;27500:9;;:16;;;-1:-1:-1;;;27500:16:0;;;;:9;;;;;:14;;:16;;;;;27456:7;;27500:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27490:4;27495:1;27490:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27490:26:0;;;:7;;;;;;;;;:26;27561:9;;27529:56;;27546:4;;27561:9;27573:11;27529:8;:56::i;:::-;27624:9;;:218;;-1:-1:-1;;;27624:218:0;;-1:-1:-1;;;;;27624:9:0;;;;:60;;:218;;27699:11;;27624:9;;27769:4;;27796;;27816:15;;27624:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27862:507;28042:9;;28010:56;;28027:4;;-1:-1:-1;;;;;28042:9:0;28054:11;28010:8;:56::i;:::-;28109:9;;:252;;-1:-1:-1;;;28109:252:0;;-1:-1:-1;;;;;28109:9:0;;;;:25;;28142:9;;28109:252;;28175:4;;28195:11;;28109:9;;;;28175:4;;28335:15;;28109:252;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27862:507;;:::o;196:597:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;634:6;631:1;628:13;625:91;;;704:1;699:2;690:6;679:9;675:22;671:31;664:42;625:91;-1:-1:-1;777:2:1;756:15;-1:-1:-1;;752:29:1;737:45;;;;784:2;733:54;;196:597;-1:-1:-1;;;196:597:1:o;1024:131::-;-1:-1:-1;;;;;1099:31:1;;1089:42;;1079:70;;1145:1;1142;1135:12;1079:70;1024:131;:::o;1160:315::-;1228:6;1236;1289:2;1277:9;1268:7;1264:23;1260:32;1257:52;;;1305:1;1302;1295:12;1257:52;1344:9;1331:23;1363:31;1388:5;1363:31;:::i;:::-;1413:5;1465:2;1450:18;;;;1437:32;;-1:-1:-1;;;1160:315:1:o;1672:247::-;1731:6;1784:2;1772:9;1763:7;1759:23;1755:32;1752:52;;;1800:1;1797;1790:12;1752:52;1839:9;1826:23;1858:31;1883:5;1858:31;:::i;:::-;1908:5;1672:247;-1:-1:-1;;;1672:247:1:o;1924:180::-;1983:6;2036:2;2024:9;2015:7;2011:23;2007:32;2004:52;;;2052:1;2049;2042:12;2004:52;-1:-1:-1;2075:23:1;;1924:180;-1:-1:-1;1924:180:1:o;2109:456::-;2186:6;2194;2202;2255:2;2243:9;2234:7;2230:23;2226:32;2223:52;;;2271:1;2268;2261:12;2223:52;2310:9;2297:23;2329:31;2354:5;2329:31;:::i;:::-;2379:5;-1:-1:-1;2436:2:1;2421:18;;2408:32;2449:33;2408:32;2449:33;:::i;:::-;2109:456;;2501:7;;-1:-1:-1;;;2555:2:1;2540:18;;;;2527:32;;2109:456::o;2967:367::-;3030:8;3040:6;3094:3;3087:4;3079:6;3075:17;3071:27;3061:55;;3112:1;3109;3102:12;3061:55;-1:-1:-1;3135:20:1;;3178:18;3167:30;;3164:50;;;3210:1;3207;3200:12;3164:50;3247:4;3239:6;3235:17;3223:29;;3307:3;3300:4;3290:6;3287:1;3283:14;3275:6;3271:27;3267:38;3264:47;3261:67;;;3324:1;3321;3314:12;3261:67;2967:367;;;;;:::o;3339:437::-;3425:6;3433;3486:2;3474:9;3465:7;3461:23;3457:32;3454:52;;;3502:1;3499;3492:12;3454:52;3542:9;3529:23;3575:18;3567:6;3564:30;3561:50;;;3607:1;3604;3597:12;3561:50;3646:70;3708:7;3699:6;3688:9;3684:22;3646:70;:::i;:::-;3735:8;;3620:96;;-1:-1:-1;3339:437:1;-1:-1:-1;;;;3339:437:1:o;3781:118::-;3867:5;3860:13;3853:21;3846:5;3843:32;3833:60;;3889:1;3886;3879:12;3904:377;3978:6;3986;3994;4047:2;4035:9;4026:7;4022:23;4018:32;4015:52;;;4063:1;4060;4053:12;4015:52;4099:9;4086:23;4076:33;;4156:2;4145:9;4141:18;4128:32;4118:42;;4210:2;4199:9;4195:18;4182:32;4223:28;4245:5;4223:28;:::i;:::-;4270:5;4260:15;;;3904:377;;;;;:::o;4286:382::-;4351:6;4359;4412:2;4400:9;4391:7;4387:23;4383:32;4380:52;;;4428:1;4425;4418:12;4380:52;4467:9;4454:23;4486:31;4511:5;4486:31;:::i;:::-;4536:5;-1:-1:-1;4593:2:1;4578:18;;4565:32;4606:30;4565:32;4606:30;:::i;:::-;4655:7;4645:17;;;4286:382;;;;;:::o;4673:316::-;4750:6;4758;4766;4819:2;4807:9;4798:7;4794:23;4790:32;4787:52;;;4835:1;4832;4825:12;4787:52;-1:-1:-1;;4858:23:1;;;4928:2;4913:18;;4900:32;;-1:-1:-1;4979:2:1;4964:18;;;4951:32;;4673:316;-1:-1:-1;4673:316:1:o;4994:388::-;5062:6;5070;5123:2;5111:9;5102:7;5098:23;5094:32;5091:52;;;5139:1;5136;5129:12;5091:52;5178:9;5165:23;5197:31;5222:5;5197:31;:::i;:::-;5247:5;-1:-1:-1;5304:2:1;5289:18;;5276:32;5317:33;5276:32;5317:33;:::i;5387:461::-;5440:3;5478:5;5472:12;5505:6;5500:3;5493:19;5531:4;5560:2;5555:3;5551:12;5544:19;;5597:2;5590:5;5586:14;5618:1;5628:195;5642:6;5639:1;5636:13;5628:195;;;5707:13;;-1:-1:-1;;;;;5703:39:1;5691:52;;5763:12;;;;5798:15;;;;5739:1;5657:9;5628:195;;;-1:-1:-1;5839:3:1;;5387:461;-1:-1:-1;;;;;5387:461:1:o;5853:261::-;6032:2;6021:9;6014:21;5995:4;6052:56;6104:2;6093:9;6089:18;6081:6;6052:56;:::i;6119:566::-;6211:6;6219;6227;6280:2;6268:9;6259:7;6255:23;6251:32;6248:52;;;6296:1;6293;6286:12;6248:52;6336:9;6323:23;6369:18;6361:6;6358:30;6355:50;;;6401:1;6398;6391:12;6355:50;6440:70;6502:7;6493:6;6482:9;6478:22;6440:70;:::i;:::-;6529:8;;-1:-1:-1;6414:96:1;-1:-1:-1;;6614:2:1;6599:18;;6586:32;6627:28;6586:32;6627:28;:::i;6690:127::-;6751:10;6746:3;6742:20;6739:1;6732:31;6782:4;6779:1;6772:15;6806:4;6803:1;6796:15;6822:275;6893:2;6887:9;6958:2;6939:13;;-1:-1:-1;;6935:27:1;6923:40;;6993:18;6978:34;;7014:22;;;6975:62;6972:88;;;7040:18;;:::i;:::-;7076:2;7069:22;6822:275;;-1:-1:-1;6822:275:1:o;7102:183::-;7162:4;7195:18;7187:6;7184:30;7181:56;;;7217:18;;:::i;:::-;-1:-1:-1;7262:1:1;7258:14;7274:4;7254:25;;7102:183::o;7290:662::-;7344:5;7397:3;7390:4;7382:6;7378:17;7374:27;7364:55;;7415:1;7412;7405:12;7364:55;7451:6;7438:20;7477:4;7501:60;7517:43;7557:2;7517:43;:::i;:::-;7501:60;:::i;:::-;7595:15;;;7681:1;7677:10;;;;7665:23;;7661:32;;;7626:12;;;;7705:15;;;7702:35;;;7733:1;7730;7723:12;7702:35;7769:2;7761:6;7757:15;7781:142;7797:6;7792:3;7789:15;7781:142;;;7863:17;;7851:30;;7901:12;;;;7814;;7781:142;;;-1:-1:-1;7941:5:1;7290:662;-1:-1:-1;;;;;;7290:662:1:o;7957:1283::-;8084:6;8092;8100;8153:2;8141:9;8132:7;8128:23;8124:32;8121:52;;;8169:1;8166;8159:12;8121:52;8209:9;8196:23;8238:18;8279:2;8271:6;8268:14;8265:34;;;8295:1;8292;8285:12;8265:34;8333:6;8322:9;8318:22;8308:32;;8378:7;8371:4;8367:2;8363:13;8359:27;8349:55;;8400:1;8397;8390:12;8349:55;8436:2;8423:16;8458:4;8482:60;8498:43;8538:2;8498:43;:::i;8482:60::-;8576:15;;;8658:1;8654:10;;;;8646:19;;8642:28;;;8607:12;;;;8682:19;;;8679:39;;;8714:1;8711;8704:12;8679:39;8738:11;;;;8758:217;8774:6;8769:3;8766:15;8758:217;;;8854:3;8841:17;8871:31;8896:5;8871:31;:::i;:::-;8915:18;;8791:12;;;;8953;;;;8758:217;;;8994:5;-1:-1:-1;;9037:18:1;;9024:32;;-1:-1:-1;;9068:16:1;;;9065:36;;;9097:1;9094;9087:12;9065:36;;9120:63;9175:7;9164:8;9153:9;9149:24;9120:63;:::i;:::-;9110:73;;;9230:2;9219:9;9215:18;9202:32;9192:42;;7957:1283;;;;;:::o;9245:380::-;9324:1;9320:12;;;;9367;;;9388:61;;9442:4;9434:6;9430:17;9420:27;;9388:61;9495:2;9487:6;9484:14;9464:18;9461:38;9458:161;;9541:10;9536:3;9532:20;9529:1;9522:31;9576:4;9573:1;9566:15;9604:4;9601:1;9594:15;9458:161;;9245:380;;;:::o;9630:356::-;9832:2;9814:21;;;9851:18;;;9844:30;9910:34;9905:2;9890:18;;9883:62;9977:2;9962:18;;9630:356::o;10762:127::-;10823:10;10818:3;10814:20;10811:1;10804:31;10854:4;10851:1;10844:15;10878:4;10875:1;10868:15;10894:168;10934:7;11000:1;10996;10992:6;10988:14;10985:1;10982:21;10977:1;10970:9;10963:17;10959:45;10956:71;;;11007:18;;:::i;:::-;-1:-1:-1;11047:9:1;;10894:168::o;11067:422::-;11156:1;11199:5;11156:1;11213:270;11234:7;11224:8;11221:21;11213:270;;;11293:4;11289:1;11285:6;11281:17;11275:4;11272:27;11269:53;;;11302:18;;:::i;:::-;11352:7;11342:8;11338:22;11335:55;;;11372:16;;;;11335:55;11451:22;;;;11411:15;;;;11213:270;;;11217:3;11067:422;;;;;:::o;11494:806::-;11543:5;11573:8;11563:80;;-1:-1:-1;11614:1:1;11628:5;;11563:80;11662:4;11652:76;;-1:-1:-1;11699:1:1;11713:5;;11652:76;11744:4;11762:1;11757:59;;;;11830:1;11825:130;;;;11737:218;;11757:59;11787:1;11778:10;;11801:5;;;11825:130;11862:3;11852:8;11849:17;11846:43;;;11869:18;;:::i;:::-;-1:-1:-1;;11925:1:1;11911:16;;11940:5;;11737:218;;12039:2;12029:8;12026:16;12020:3;12014:4;12011:13;12007:36;12001:2;11991:8;11988:16;11983:2;11977:4;11974:12;11970:35;11967:77;11964:159;;;-1:-1:-1;12076:19:1;;;12108:5;;11964:159;12155:34;12180:8;12174:4;12155:34;:::i;:::-;12225:6;12221:1;12217:6;12213:19;12204:7;12201:32;12198:58;;;12236:18;;:::i;:::-;12274:20;;11494:806;-1:-1:-1;;;11494:806:1:o;12305:140::-;12363:5;12392:47;12433:4;12423:8;12419:19;12413:4;12392:47;:::i;12450:217::-;12490:1;12516;12506:132;;12560:10;12555:3;12551:20;12548:1;12541:31;12595:4;12592:1;12585:15;12623:4;12620:1;12613:15;12506:132;-1:-1:-1;12652:9:1;;12450:217::o;13901:128::-;13941:3;13972:1;13968:6;13965:1;13962:13;13959:39;;;13978:18;;:::i;:::-;-1:-1:-1;14014:9:1;;13901:128::o;14467:127::-;14528:10;14523:3;14519:20;14516:1;14509:31;14559:4;14556:1;14549:15;14583:4;14580:1;14573:15;14599:135;14638:3;14659:17;;;14656:43;;14679:18;;:::i;:::-;-1:-1:-1;14726:1:1;14715:13;;14599:135::o;15503:251::-;15573:6;15626:2;15614:9;15605:7;15601:23;15597:32;15594:52;;;15642:1;15639;15632:12;15594:52;15674:9;15668:16;15693:31;15718:5;15693:31;:::i;15759:332::-;15966:6;15955:9;15948:25;16009:2;16004;15993:9;15989:18;15982:30;15929:4;16029:56;16081:2;16070:9;16066:18;16058:6;16029:56;:::i;:::-;16021:64;15759:332;-1:-1:-1;;;;15759:332:1:o;16096:881::-;16191:6;16222:2;16265;16253:9;16244:7;16240:23;16236:32;16233:52;;;16281:1;16278;16271:12;16233:52;16314:9;16308:16;16347:18;16339:6;16336:30;16333:50;;;16379:1;16376;16369:12;16333:50;16402:22;;16455:4;16447:13;;16443:27;-1:-1:-1;16433:55:1;;16484:1;16481;16474:12;16433:55;16513:2;16507:9;16536:60;16552:43;16592:2;16552:43;:::i;16536:60::-;16630:15;;;16712:1;16708:10;;;;16700:19;;16696:28;;;16661:12;;;;16736:19;;;16733:39;;;16768:1;16765;16758:12;16733:39;16792:11;;;;16812:135;16828:6;16823:3;16820:15;16812:135;;;16894:10;;16882:23;;16845:12;;;;16925;;;;16812:135;;;16966:5;16096:881;-1:-1:-1;;;;;;;16096:881:1:o;18578:184::-;18648:6;18701:2;18689:9;18680:7;18676:23;18672:32;18669:52;;;18717:1;18714;18707:12;18669:52;-1:-1:-1;18740:16:1;;18578:184;-1:-1:-1;18578:184:1:o;19046:245::-;19113:6;19166:2;19154:9;19145:7;19141:23;19137:32;19134:52;;;19182:1;19179;19172:12;19134:52;19214:9;19208:16;19233:28;19255:5;19233:28;:::i;20006:403::-;20208:2;20190:21;;;20247:2;20227:18;;;20220:30;20286:34;20281:2;20266:18;;20259:62;-1:-1:-1;;;20352:2:1;20337:18;;20330:37;20399:3;20384:19;;20006:403::o;26721:607::-;-1:-1:-1;;;;;27080:15:1;;;27062:34;;27127:2;27112:18;;27105:34;;;;27170:2;27155:18;;27148:34;;;;27213:2;27198:18;;27191:34;;;;27262:15;;;27256:3;27241:19;;27234:44;27042:3;27294:19;;27287:35;;;;27011:3;26996:19;;26721:607::o;27333:306::-;27421:6;27429;27437;27490:2;27478:9;27469:7;27465:23;27461:32;27458:52;;;27506:1;27503;27496:12;27458:52;27535:9;27529:16;27519:26;;27585:2;27574:9;27570:18;27564:25;27554:35;;27629:2;27618:9;27614:18;27608:25;27598:35;;27333:306;;;;;:::o;28683:125::-;28723:4;28751:1;28748;28745:8;28742:34;;;28756:18;;:::i;:::-;-1:-1:-1;28793:9:1;;28683:125::o;29767:245::-;29846:6;29854;29907:2;29895:9;29886:7;29882:23;29878:32;29875:52;;;29923:1;29920;29913:12;29875:52;-1:-1:-1;;29946:16:1;;30002:2;29987:18;;;29981:25;29946:16;;29981:25;;-1:-1:-1;29767:245:1:o;30825:401::-;31027:2;31009:21;;;31066:2;31046:18;;;31039:30;31105:34;31100:2;31085:18;;31078:62;-1:-1:-1;;;31171:2:1;31156:18;;31149:35;31216:3;31201:19;;30825:401::o;31231:399::-;31433:2;31415:21;;;31472:2;31452:18;;;31445:30;31511:34;31506:2;31491:18;;31484:62;-1:-1:-1;;;31577:2:1;31562:18;;31555:33;31620:3;31605:19;;31231:399::o;36373:510::-;36644:6;36633:9;36626:25;36687:3;36682:2;36671:9;36667:18;36660:31;36607:4;36708:57;36760:3;36749:9;36745:19;36737:6;36708:57;:::i;:::-;-1:-1:-1;;;;;36801:32:1;;;;36796:2;36781:18;;36774:60;-1:-1:-1;36865:2:1;36850:18;36843:34;36700:65;36373:510;-1:-1:-1;;36373:510:1:o;36888:582::-;37187:6;37176:9;37169:25;37230:6;37225:2;37214:9;37210:18;37203:34;37273:3;37268:2;37257:9;37253:18;37246:31;37150:4;37294:57;37346:3;37335:9;37331:19;37323:6;37294:57;:::i;:::-;-1:-1:-1;;;;;37387:32:1;;;;37382:2;37367:18;;37360:60;-1:-1:-1;37451:3:1;37436:19;37429:35;37286:65;36888:582;-1:-1:-1;;;36888:582:1:o

Swarm Source

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