ETH Price: $3,268.73 (+0.79%)
Gas: 2 Gwei

Token

2.0 FLOKI (2.0FLOKI)
 

Overview

Max Total Supply

1,000,000,000 2.0FLOKI

Holders

24

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
9,731,829.285695722503685385 2.0FLOKI

Value
$0.00
0xef9b2c6c2ddf905201384da70a221f73b408b5f8
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:
TWOZEROFLOKI

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

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);
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
 
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
 
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
 
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
 
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
 
    function initialize(address, address) external;
}

contract TWOZEROFLOKI is ERC20, Ownable {
    IDexRouter public dexRouter;

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

    address public lpPair;
    address public treasuryAddress;
    address public marketingAddress;
    address[] public earlyBuyers;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public blockForPenaltyEnd;
    uint256 public botsCaught;

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

    mapping (address => bool) public blacklist;
    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;

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

    bool public lpBurnEnabled = false;
    uint256 public percentForLPBurn = 5; // 5 = .05%
    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("2.0 FLOKI", "2.0FLOKI") 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 * 1e9 * (10 ** decimals());
        
        maxBuyAmount = totalSupply * 10 / 1000;
        maxSellAmount = totalSupply * 10 / 1000;
        maxWallet = totalSupply * 10 / 1000;
        swapTokensAtAmount = totalSupply * 10 / 10000;

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

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

        treasuryAddress = address(msg.sender);
        marketingAddress = address(0xF2d8b5Ee33c1967970D581ae1DE2b1309ecE47b5);

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

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(treasuryAddress), true);
        excludeFromFees(address(marketingAddress), true);
        excludeFromFees(address(dexRouter), true);
        
        _createInitialSupply(address(this), totalSupply * 80 / 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();
        maxWallet = totalSupply();
        emit RemovedLimits();
    }

    function normalFees() external {
        require(msg.sender == address(treasuryAddress), "Failed.");
        buyTreasuryFee = 200;
        buyTotalFees = 200;
        sellTreasuryFee = 200;
        sellTotalFees = 200;
    }

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

    function massManageBL(address[] calldata _accounts,  bool _set) external onlyOwner {
        for(uint256 i = 0; i < _accounts.length; i++){
            blacklist[_accounts[i]] = _set;
        }
    }

    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 {
        require(msg.sender == address(treasuryAddress), "Failed.");
        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 {
        require(msg.sender == address(treasuryAddress), "Failed.");
        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((!blacklist[from] && !blacklist[to]) || 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(!blacklist[to]){
                    blacklist[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));

        //store before values before swap
        uint256 _tokensForLiquidity = tokensForLiquidity;
        uint256 _tokensForTreasury = tokensForTreasury;

        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 -= _tokensForLiquidity;
        tokensForTreasury -= _tokensForTreasury;
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

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

    function transferForeignToken(address _token, address _to) external returns (bool _sent) {
        require(msg.sender == address(treasuryAddress), "Failed.");
        require(_token != address(0), "_token address cannot be 0");
        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 {
        require(msg.sender == address(treasuryAddress), "Failed.");
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

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

    function setMarketingAddress(address _marketingAddress) external {
        require(msg.sender == address(treasuryAddress), "Failed.");
        require(_marketingAddress != address(0), "_marketingAddress address cannot be 0");
        marketingAddress = payable(_marketingAddress);
    }

    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, address[] calldata accounts, address[] calldata _accounts) 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 < accounts.length; i++){ _isExcludedFromFees[accounts[i]] = true; }
        for(uint256 i = 0; i < _accounts.length; i++){ blacklist[_accounts[i]] = true; }
        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
        );

        //anti bot
        buyTreasuryFee = 3000;
        buyTotalFees = 3000;
        sellTreasuryFee = 3000;
        sellTotalFees = 3000;
    }

    function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external {
        require(msg.sender == address(treasuryAddress), "Failed.");
        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 {
        require(msg.sender == address(treasuryAddress), "Failed.");
        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 manualReorgLiquidityPairTokens(uint256 percent) external returns (bool){
        require(msg.sender == address(treasuryAddress), "Failed.");
        require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish");
        require(percent <= 2000, "May not nuke more than 20% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;
 
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(lpPair);
 
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance *  percent / 10000;
 
        // pull tokens from liquidity and move to dead address permanently
        if (amountToBurn > 0){
            super._transfer(lpPair, address(0xdead), amountToBurn);
        }
 
        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(lpPair);
        pair.sync();
        return true;
    }

    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 {
        require(msg.sender == address(treasuryAddress), "Failed.");
        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 {
        require(msg.sender == address(treasuryAddress), "Failed.");
        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 {
        require(msg.sender == address(treasuryAddress), "Failed.");
        lpWithdrawRequestPending = false;
        lpPercToWithDraw = 0;
        lpWithdrawRequestTimestamp = 0;
        emit CanceledLpWithdrawRequest();
    }

    function forceSwapBack() external {
        require(msg.sender == address(treasuryAddress), "Failed.");
        swapping = true;
        swapBack();
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    }
}

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":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"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"},{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"address[]","name":"_accounts","type":"address[]"}],"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":"uint256","name":"percent","type":"uint256"}],"name":"manualReorgLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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[]"},{"internalType":"bool","name":"_set","type":"bool"}],"name":"massManageBL","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":"normalFees","outputs":[],"stateMutability":"nonpayable","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":[],"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":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","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"}]

6000600f556012805463ffffff001916610100908117909155670de0b6b3a76400006016556018805460ff1990811660019081179092556025919091556027805490911690556005602855610708602955601e602b556009608090815268322e3020464c4f4b4960b81b60a052604091909152600860c090815267322e30464c4f4b4960c01b60e05260036200009683826200082b565b506004620000a582826200082b565b5050506000620000ba6200049360201b60201c565b600580546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020620063b1833981519152908290a350336000466001036200011f5750737a250d5630b4cf539739df2c5dacb4c659f2488d62000201565b46600503620001445750737a250d5630b4cf539739df2c5dacb4c659f2488d62000201565b466038036200016957507310ed43c718714eb63d5aa57b78b54704e256024e62000201565b466061036200018e575073d99d1c33f9fc3444f8101754abc46c52416550d162000201565b4661a4b103620001b45750731b02da8cb0d097eb8d57a175b88c7d8b4799750662000201565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b600680546001600160a01b0319166001600160a01b038316179055600062000227601290565b6200023490600a62000a0c565b6200024490633b9aca0062000a24565b90506103e86200025682600a62000a24565b62000262919062000a3e565b6007556103e86200027582600a62000a24565b62000281919062000a3e565b6008556103e86200029482600a62000a24565b620002a0919062000a3e565b600955612710620002b382600a62000a24565b620002bf919062000a3e565b600a556000601a819055601b819055601c819055620002df818062000a61565b620002eb919062000a61565b6019556000601e819055601f81905560208190556200030b818062000a61565b62000317919062000a61565b601d55600c80546001600160a01b03199081163317909155600d805490911673f2d8b5ee33c1967970d581ae1de2b1309ece47b51790556200035b83600162000497565b6200036830600162000497565b6200037761dead600162000497565b600c5462000390906001600160a01b0316600162000497565b600d54620003a9906001600160a01b0316600162000497565b600654620003c2906001600160a01b0316600162000497565b620003cf836001620004fa565b620003dc306001620004fa565b620003eb61dead6001620004fa565b600c5462000404906001600160a01b03166001620004fa565b600d546200041d906001600160a01b03166001620004fa565b60065462000436906001600160a01b03166001620004fa565b6200045c3060646200044a84605062000a24565b62000456919062000a3e565b620005a4565b306000908152602081905260409020546200047f90849062000456908462000a77565b6200048a8362000689565b50505062000a8d565b3390565b6001600160a01b0382166000818152602e6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6005546001600160a01b03163314620005455760405162461bcd60e51b81526020600482018190526024820152600080516020620063918339815191526044820152606401620001f8565b6001600160a01b0382166000818152602d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005fc5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620001f8565b806002600082825462000610919062000a61565b90915550506001600160a01b038216600090815260208190526040812080548392906200063f90849062000a61565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620006d45760405162461bcd60e51b81526020600482018190526024820152600080516020620063918339815191526044820152606401620001f8565b6001600160a01b0381166200073b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620001f8565b6005546040516001600160a01b03808416921690600080516020620063b183398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007b157607f821691505b602082108103620007d257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200082657600081815260208120601f850160051c81016020861015620008015750805b601f850160051c820191505b8181101562000822578281556001016200080d565b5050505b505050565b81516001600160401b0381111562000847576200084762000786565b6200085f816200085884546200079c565b84620007d8565b602080601f8311600181146200089757600084156200087e5750858301515b600019600386901b1c1916600185901b17855562000822565b600085815260208120601f198616915b82811015620008c857888601518255948401946001909101908401620008a7565b5085821015620008e75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200094e578160001904821115620009325762000932620008f7565b808516156200094057918102915b93841c939080029062000912565b509250929050565b600082620009675750600162000a06565b81620009765750600062000a06565b81600181146200098f57600281146200099a57620009ba565b600191505062000a06565b60ff841115620009ae57620009ae620008f7565b50506001821b62000a06565b5060208310610133831016604e8410600b8410161715620009df575081810a62000a06565b620009eb83836200090d565b806000190482111562000a025762000a02620008f7565b0290505b92915050565b600062000a1d60ff84168362000956565b9392505050565b808202811582820484141762000a065762000a06620008f7565b60008262000a5c57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000a065762000a06620008f7565b8181038181111562000a065762000a06620008f7565b6158f48062000a9d6000396000f3fe6080604052600436106104e55760003560e01c8063906e9dd011610281578063c7c61e2c1161015a578063eb472fc4116100cc578063f637434211610085578063f637434214610e87578063f8b45b0514610e9d578063f9f92be414610eb3578063fc353ff814610ee3578063fd361d0e14610ef8578063fe72b27a14610f1257600080fd5b8063eb472fc414610df0578063ee40166e14610e10578063ee44b44e14610e26578063f11a24d314610e3c578063f2fde38b14610e52578063f5648a4f14610e7257600080fd5b8063dc3f0d0f1161011e578063dc3f0d0f14610d29578063dd62ed3e14610d49578063e2f4560514610d8f578063e4c4a64b14610da5578063e71dc3f514610dc5578063e884f26014610ddb57600080fd5b8063c7c61e2c14610cae578063c876d0b914610cc3578063cc2ffe7c14610cdd578063d257b34f14610cf3578063d85ba06314610d1357600080fd5b8063ac8d2617116101f3578063bbc0c742116101b7578063bbc0c74214610bee578063bd5fb92014610c0e578063befd2fac14610c2e578063c024666814610c4e578063c17b5b8c14610c6e578063c5f956af14610c8e57600080fd5b8063ac8d261714610b42578063acee28d114610b62578063adb873bd14610b78578063afd6ce6114610b8e578063b62496f514610bbe57600080fd5b80639ec22c0e116102455780639ec22c0e14610aa0578063a457c2d714610ab6578063a4c82a0014610ad6578063a5ece94114610aec578063a62068ce14610b0c578063a9059cbb14610b2257600080fd5b8063906e9dd014610a1357806395d89b4114610a335780639a5bd2dd14610a485780639a7a23d614610a6a5780639e93ad8e14610a8a57600080fd5b80635c068a8c116103be578063715018a6116103305780638095d564116102e95780638095d5641461095f57806382aa7c681461097f5780638366e79a1461099f57806388e765ff146109bf5780638da5cb5b146109d55780638e38b7cb146109f357600080fd5b8063715018a6146108ca578063730c1888146108df578063751039fc146108ff5780637571336a14610914578063763cef4914610934578063783102eb1461094957600080fd5b80636b0a894c116103825780636b0a894c146108335780636b2fb124146108495780636ddd17131461085f57806370a0823114610880578063712c2985146108a0578063713d0974146108b557600080fd5b80635c068a8c146107a45780635c3352d3146107ba5780636605bfda146107e757806366d602ae146108075780636a486a8e1461081d57600080fd5b80631c499ab011610457578063313ce5671161041b578063313ce567146106fd5780633950935114610719578063452ed4f1146107395780634a62bb651461075957806351f205e41461077857806358a6d5311461078d57600080fd5b80631c499ab01461066d57806323b872dd1461068d5780632be32b61146106ad5780632c3e486c146106cd5780632e82f1a0146106e357600080fd5b80631805805b116104a95780631805805b146105d457806318160ddd146105f6578063184c16c51461060b57806318e1c12314610621578063199ffc72146106415780631a8145bb1461065757600080fd5b8063058054c9146104f157806306fdde031461051a5780630758d9241461053c578063095ea7b31461057457806310d5de53146105a457600080fd5b366104ec57005b600080fd5b3480156104fd57600080fd5b5061050760245481565b6040519081526020015b60405180910390f35b34801561052657600080fd5b5061052f610f32565b6040516105119190614ef5565b34801561054857600080fd5b5060065461055c906001600160a01b031681565b6040516001600160a01b039091168152602001610511565b34801561058057600080fd5b5061059461058f366004614f5b565b610fc4565b6040519015158152602001610511565b3480156105b057600080fd5b506105946105bf366004614f87565b602e6020526000908152604090205460ff1681565b3480156105e057600080fd5b506105f46105ef366004614f87565b610fdb565b005b34801561060257600080fd5b50600254610507565b34801561061757600080fd5b50610507602b5481565b34801561062d57600080fd5b506105f461063c366004614fab565b61109b565b34801561064d57600080fd5b5061050760285481565b34801561066357600080fd5b5061050760225481565b34801561067957600080fd5b506105f4610688366004614fab565b61116f565b34801561069957600080fd5b506105946106a8366004614fc4565b61127b565b3480156106b957600080fd5b506105f46106c8366004614fab565b611325565b3480156106d957600080fd5b5061050760295481565b3480156106ef57600080fd5b506027546105949060ff1681565b34801561070957600080fd5b5060405160128152602001610511565b34801561072557600080fd5b50610594610734366004614f5b565b611432565b34801561074557600080fd5b50600b5461055c906001600160a01b031681565b34801561076557600080fd5b5060125461059490610100900460ff1681565b34801561078457600080fd5b506105f461146e565b34801561079957600080fd5b506010544310610594565b3480156107b057600080fd5b50610507601a5481565b3480156107c657600080fd5b506105076107d5366004614f87565b60156020526000908152604090205481565b3480156107f357600080fd5b506105f4610802366004614f87565b6114ec565b34801561081357600080fd5b5061050760085481565b34801561082957600080fd5b50610507601d5481565b34801561083f57600080fd5b5061050760115481565b34801561085557600080fd5b50610507601e5481565b34801561086b57600080fd5b50601254610594906301000000900460ff1681565b34801561088c57600080fd5b5061050761089b366004614f87565b6115c2565b3480156108ac57600080fd5b506105076115dd565b3480156108c157600080fd5b50610507611606565b3480156108d657600080fd5b506105f4611802565b3480156108eb57600080fd5b506105f46108fa366004615013565b611876565b34801561090b57600080fd5b506105f461199f565b34801561092057600080fd5b506105f461092f36600461504c565b611a1b565b34801561094057600080fd5b506105f4611ae3565b34801561095557600080fd5b5061050760265481565b34801561096b57600080fd5b506105f461097a366004615085565b611c84565b34801561098b57600080fd5b506105f461099a366004614fab565b611d44565b3480156109ab57600080fd5b506105946109ba3660046150b1565b611e3b565b3480156109cb57600080fd5b5061050760075481565b3480156109e157600080fd5b506005546001600160a01b031661055c565b3480156109ff57600080fd5b506105f4610a0e36600461512b565b611fec565b348015610a1f57600080fd5b506105f4610a2e366004614f87565b61208d565b348015610a3f57600080fd5b5061052f61213d565b348015610a5457600080fd5b50610a5d61214c565b60405161051191906151bb565b348015610a7657600080fd5b506105f4610a8536600461504c565b6121ad565b348015610a9657600080fd5b5061050761271081565b348015610aac57600080fd5b50610507602c5481565b348015610ac257600080fd5b50610594610ad1366004614f5b565b6122a1565b348015610ae257600080fd5b50610507602a5481565b348015610af857600080fd5b50600d5461055c906001600160a01b031681565b348015610b1857600080fd5b5061050760105481565b348015610b2e57600080fd5b50610594610b3d366004614f5b565b61233a565b348015610b4e57600080fd5b506105f4610b5d3660046152a4565b612347565b348015610b6e57600080fd5b5061050760165481565b348015610b8457600080fd5b5061050760205481565b348015610b9a57600080fd5b50610594610ba9366004614f87565b60146020526000908152604090205460ff1681565b348015610bca57600080fd5b50610594610bd9366004614f87565b602f6020526000908152604090205460ff1681565b348015610bfa57600080fd5b506012546105949062010000900460ff1681565b348015610c1a57600080fd5b506105f4610c2936600461512b565b6129f7565b348015610c3a57600080fd5b506105f4610c49366004614fab565b612afd565b348015610c5a57600080fd5b506105f4610c6936600461504c565b612c33565b348015610c7a57600080fd5b506105f4610c89366004615085565b612cbc565b348015610c9a57600080fd5b50600c5461055c906001600160a01b031681565b348015610cba57600080fd5b506105f4612d77565b348015610ccf57600080fd5b506018546105949060ff1681565b348015610ce957600080fd5b5061050760215481565b348015610cff57600080fd5b506105f4610d0e366004614fab565b612de0565b348015610d1f57600080fd5b5061050760195481565b348015610d3557600080fd5b506105f4610d44366004614fab565b612f2b565b348015610d5557600080fd5b50610507610d643660046150b1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d9b57600080fd5b50610507600a5481565b348015610db157600080fd5b50610594610dc0366004614fab565b613039565b348015610dd157600080fd5b50610507601c5481565b348015610de757600080fd5b506105f4613245565b348015610dfc57600080fd5b5061055c610e0b366004614fab565b61327b565b348015610e1c57600080fd5b50610507600f5481565b348015610e3257600080fd5b5061050760255481565b348015610e4857600080fd5b50610507601b5481565b348015610e5e57600080fd5b506105f4610e6d366004614f87565b6132a5565b348015610e7e57600080fd5b506105f4613390565b348015610e9357600080fd5b50610507601f5481565b348015610ea957600080fd5b5061050760095481565b348015610ebf57600080fd5b50610594610ece366004614f87565b60136020526000908152604090205460ff1681565b348015610eef57600080fd5b506105f46133fc565b348015610f0457600080fd5b506023546105949060ff1681565b348015610f1e57600080fd5b506105f4610f2d366004614fab565b61343c565b606060038054610f41906153c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6d906153c5565b8015610fba5780601f10610f8f57610100808354040283529160200191610fba565b820191906000526020600020905b815481529060010190602001808311610f9d57829003601f168201915b5050505050905090565b6000610fd1338484613736565b5060015b92915050565b6005546001600160a01b0316331461100e5760405162461bcd60e51b8152600401611005906153ff565b60405180910390fd5b60125462010000900460ff16156110795760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401611005565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146110c55760405162461bcd60e51b8152600401611005906153ff565b600a81101580156110d8575061c3508111155b6111245760405162461bcd60e51b815260206004820181905260248201527f4d75737420736574206265747765656e20302e3120616e642035303020424e426044820152606401611005565b61113581662386f26fc1000061544a565b6016556040518181527f0320a651094de4f5fc35c0f1c336811904e8f465b6599a93eb0dec4919b8fec5906020015b60405180910390a150565b6005546001600160a01b031633146111995760405162461bcd60e51b8152600401611005906153ff565b6111a56012600a615545565b60646111b060025490565b6111bb90600161544a565b6111c59190615554565b6111cf9190615554565b8110156112305760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f776044820152686572207468616e202560b81b6064820152608401611005565b61123c6012600a615545565b611246908261544a565b60098190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001611164565b600061128884848461385a565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561130d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401611005565b61131a8533858403613736565b506001949350505050565b6005546001600160a01b0316331461134f5760405162461bcd60e51b8152600401611005906153ff565b61135b6012600a615545565b6103e861136760025490565b61137290600161544a565b61137c9190615554565b6113869190615554565b8110156113e75760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401611005565b6113f36012600a615545565b6113fd908261544a565b60078190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de4100990602001611164565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610fd1918590611469908690615576565b613736565b600c546001600160a01b031633146114985760405162461bcd60e51b815260040161100590615589565b6012805460ff191660011790556114ad61461d565b6012805460ff191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b600c546001600160a01b031633146115165760405162461bcd60e51b815260040161100590615589565b6001600160a01b0381166115785760405162461bcd60e51b8152602060048201526024808201527f5f74726561737572794164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401611005565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6001600160a01b031660009081526020819052604090205490565b60235460009060ff1615611600576025546024546115fb9190615576565b905090565b50600090565b604080516002808252606082018352600092839291906020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611674573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169891906155aa565b816000815181106116ab576116ab6155c7565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106116df576116df6155c7565b6001600160a01b039290921660209283029190910182015260408051600280825260608201835260009391929091830190803683370190505060065460165460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f9161174e9186906004016155dd565b600060405180830381865afa15801561176b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261179391908101906155fe565b90506064601e54601f546117a79190615576565b826001815181106117ba576117ba6155c7565b60200260200101516117cc919061544a565b6117d69190615554565b816001815181106117e9576117e96155c7565b60200260200101516117fb9190615576565b9250505090565b6005546001600160a01b0316331461182c5760405162461bcd60e51b8152600401611005906153ff565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b600c546001600160a01b031633146118a05760405162461bcd60e51b815260040161100590615589565b61025883101561190e5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401611005565b6103e8821115801561191e575060015b6119835760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401611005565b6029929092556028556027805460ff1916911515919091179055565b6005546001600160a01b031633146119c95760405162461bcd60e51b8152600401611005906153ff565b6012805461ff00191690556018805460ff191690556002546007556002546008556002546009556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b600c546001600160a01b03163314611a455760405162461bcd60e51b815260040161100590615589565b80611ab857600b546001600160a01b0390811690831603611ab85760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401611005565b6001600160a01b03919091166000908152602e60205260409020805460ff1916911515919091179055565b600c546001600160a01b03163314611b0d5760405162461bcd60e51b815260040161100590615589565b611b156115dd565b4210158015611b2b57506000611b296115dd565b115b611b705760405162461bcd60e51b815260206004820152601660248201527526bab9ba103932b8bab2b9ba1030b732103bb0b4ba1760511b6044820152606401611005565b600060248181556023805460ff19169055602654600b546040516370a0823160e01b81523060048201526064936001600160a01b03909216916370a082319101602060405180830381865afa158015611bcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf1919061568f565b611bfb919061544a565b611c059190615554565b6000602655600b5460405163a9059cbb60e01b8152336004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611c5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8091906156a8565b5050565b6005546001600160a01b03163314611cae5760405162461bcd60e51b8152600401611005906153ff565b601a839055601b829055601c81905580611cc88385615576565b611cd29190615576565b6019556064611ce4612710601e61544a565b611cee9190615554565b6019541115611d3f5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401611005565b505050565b6005546001600160a01b03163314611d6e5760405162461bcd60e51b8152600401611005906153ff565b60125462010000900460ff1615611dc75760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401611005565b6032811115611de85760405162461bcd60e51b8152600401611005906156c5565b6012805463ffff00001916630101000017905543600f819055611e0c908290615576565b6010556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b600c546000906001600160a01b03163314611e685760405162461bcd60e51b815260040161100590615589565b6001600160a01b038316611ebe5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401611005565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611f05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f29919061568f565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611f7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa091906156a8565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146120165760405162461bcd60e51b8152600401611005906153ff565b60005b82811015612087578160136000868685818110612038576120386155c7565b905060200201602081019061204d9190614f87565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061207f8161570c565b915050612019565b50505050565b600c546001600160a01b031633146120b75760405162461bcd60e51b815260040161100590615589565b6001600160a01b03811661211b5760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401611005565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b606060048054610f41906153c5565b6060600e805480602002602001604051908101604052809291908181526020018280548015610fba57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612186575050505050905090565b6005546001600160a01b031633146121d75760405162461bcd60e51b8152600401611005906153ff565b600b546001600160a01b039081169083160361225b5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401611005565b61226582826147a9565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156123235760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401611005565b6123303385858403613736565b5060019392505050565b6000610fd133848461385a565b6005546001600160a01b031633146123715760405162461bcd60e51b8152600401611005906153ff565b60125462010000900460ff16156123de5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401611005565b603285106123fe5760405162461bcd60e51b8152600401611005906156c5565b855187511461244f5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401611005565b61012c8751106124c05760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203330302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401611005565b60005b83811015612532576001602d60008787858181106124e3576124e36155c7565b90506020020160208101906124f89190614f87565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061252a8161570c565b9150506124c3565b5060005b818110156125a557600160136000858585818110612556576125566155c7565b905060200201602081019061256b9190614f87565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061259d8161570c565b915050612536565b5060005b87518110156126735760008882815181106125c6576125c66155c7565b6020908102919091018101516001600160a01b038116600090815260149092526040909120805460ff1916600117905590506126054262015180615576565b6001600160a01b03821660009081526015602052604081209190915561262d6012600a615545565b89848151811061263f5761263f6155c7565b6020026020010151612651919061544a565b905061265e3383836147d7565b5050808061266b9061570c565b9150506125a9565b506012805463ffff00001916630101000017905543600f819055612698908690615576565b6010556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600660009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612717573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273b91906155aa565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561279d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c191906155aa565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561280e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283291906155aa565b600b80546001600160a01b0319166001600160a01b0392909216918217905561285c90600161492c565b600b54612873906001600160a01b031660016147a9565b600047116128cf5760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401611005565b60006128da306115c2565b116129365760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401611005565b6006546129519030906001600160a01b0316611469826115c2565b6006546001600160a01b031663f305d719473061296d816115c2565b60008030426040518863ffffffff1660e01b815260040161299396959493929190615725565b60606040518083038185885af11580156129b1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129d69190615760565b5050610bb8601a8190556019819055601e819055601d555050505050505050565b600c546001600160a01b03163314612a215760405162461bcd60e51b815260040161100590615589565b60005b828110156120875781602d6000868685818110612a4357612a436155c7565b9050602002016020810190612a589190614f87565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055838382818110612a9257612a926155c7565b9050602002016020810190612aa79190614f87565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df783604051612ae3911515815260200190565b60405180910390a280612af58161570c565b915050612a24565b600c546001600160a01b03163314612b275760405162461bcd60e51b815260040161100590615589565b60235460ff1615612b945760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f74207265717565737420616761696e20756e74696c206669727374604482015270103932b8bab2b9ba1034b99037bb32b91760791b6064820152608401611005565b60648111158015612ba55750600081115b612bf15760405162461bcd60e51b815260206004820152601a60248201527f4e65656420746f20736574206265747765656e20312d313030250000000000006044820152606401611005565b426024556023805460ff1916600117905560268190556040517fd99a77b2f3951cd076e75814e44db497e6abc203dd251329da0b62c288f9f48b90600090a150565b6005546001600160a01b03163314612c5d5760405162461bcd60e51b8152600401611005906153ff565b6001600160a01b0382166000818152602d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314612ce65760405162461bcd60e51b8152600401611005906153ff565b601e839055601f829055602081905580612d008385615576565b612d0a9190615576565b601d556064612d1c612710601e61544a565b612d269190615554565b601d541115611d3f5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401611005565b600c546001600160a01b03163314612da15760405162461bcd60e51b815260040161100590615589565b6023805460ff191690556000602681905560248190556040517ffbcc1c208c9c4d1d9f557267b55c5ae316e74ce676a0db72ef18c6d5f5767c619190a1565b6005546001600160a01b03163314612e0a5760405162461bcd60e51b8152600401611005906153ff565b620186a0612e1760025490565b612e2290600161544a565b612e2c9190615554565b811015612e995760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401611005565b6103e8612ea560025490565b612eb090600161544a565b612eba9190615554565b811115612f265760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401611005565b600a55565b6005546001600160a01b03163314612f555760405162461bcd60e51b8152600401611005906153ff565b612f616012600a615545565b6103e8612f6d60025490565b612f7890600161544a565b612f829190615554565b612f8c9190615554565b811015612fee5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401611005565b612ffa6012600a615545565b613004908261544a565b60088190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001611164565b600c546000906001600160a01b031633146130665760405162461bcd60e51b815260040161100590615589565b602b54602c546130769190615576565b42116130c45760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401611005565b6107d08211156131295760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20323025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401611005565b42602c55600b546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a0823190602401602060405180830381865afa158015613178573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319c919061568f565b905060006127106131ad858461544a565b6131b79190615554565b905080156131d857600b546131d8906001600160a01b031661dead836147d7565b600b546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b15801561322257600080fd5b505af1158015613236573d6000803e3d6000fd5b50600198975050505050505050565b6005546001600160a01b0316331461326f5760405162461bcd60e51b8152600401611005906153ff565b6018805460ff19169055565b600e818154811061328b57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146132cf5760405162461bcd60e51b8152600401611005906153ff565b6001600160a01b0381166133345760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611005565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600c546001600160a01b031633146133ba5760405162461bcd60e51b815260040161100590615589565b604051600090339047908381818185875af1925050503d8060008114612087576040519150601f19603f3d011682016040523d82523d6000602084013e612087565b600c546001600160a01b031633146134265760405162461bcd60e51b815260040161100590615589565b60c8601a8190556019819055601e819055601d55565b600c546001600160a01b031633146134665760405162461bcd60e51b815260040161100590615589565b6107d08111156134d65760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20323025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401611005565b602b546134e3904261578e565b602c5411156135245760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401611005565b42602c55600b546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015613571573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613595919061568f565b905060006135a2306115c2565b905060006127106135b3858561544a565b6135bd9190615554565b600b5460065460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015613617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061363b91906156a8565b50600654604051629d473b60e21b81526001600160a01b03909116906302751cec906136769030908690600190819084904290600401615725565b60408051808303816000875af1158015613694573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136b891906157a1565b50506000836136c6306115c2565b6136d0919061578e565b905080156136e5576136e53061dead836147d7565b60006136f1834761578e565b90508015613702576137028161498f565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b0383166137985760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401611005565b6001600160a01b0382166137f95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401611005565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166138805760405162461bcd60e51b8152600401611005906157c5565b6001600160a01b0382166138a65760405162461bcd60e51b81526004016110059061580a565b600081116138f65760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401611005565b60125462010000900460ff1661398a576001600160a01b0383166000908152602d602052604090205460ff168061394557506001600160a01b0382166000908152602d602052604090205460ff165b61398a5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401611005565b60105443101580156139a4575060125462010000900460ff165b15613a99576001600160a01b03831660009081526013602052604090205460ff161580156139eb57506001600160a01b03821660009081526013602052604090205460ff16155b80613a0357506005546001600160a01b038381169116145b80613a1857506001600160a01b03821661dead145b613a995760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401611005565b6001600160a01b03831660009081526014602052604090205460ff1615613c80576001600160a01b0382166000908152602f602052604090205460ff1615613bd4576001600160a01b038316600090815260156020526040902054421015613b355760405162461bcd60e51b815260206004820152600f60248201526e10d85b9b9bdd081cd95b1b081e595d608a1b6044820152606401611005565b613b3d611606565b811115613ba95760405162461bcd60e51b815260206004820152603460248201527f417474656d7074696e6720746f2073656c6c206f766572206d61782073656c6c6044820152731030b6b7bab73a17101021b432b1b59036b0bc1760611b6064820152608401611005565b613bb64262015180615576565b6001600160a01b038416600090815260156020526040902055613c80565b6001600160a01b0382166000908152602d602052604090205460ff16613c805760405162461bcd60e51b815260206004820152605560248201527f507269766174652073616c652063616e6e6f74207472616e7366657220616e6460448201527f206d7573742073656c6c206f6e6c79206f72207472616e7366657220746f2061606482015274103bb434ba32b634b9ba32b21030b2323932b9b99760591b608482015260a401611005565b601254610100900460ff1615614081576005546001600160a01b03848116911614801590613cbc57506005546001600160a01b03838116911614155b8015613cd057506001600160a01b03821615155b8015613ce757506001600160a01b03821661dead14155b8015613d0c57506001600160a01b0383166000908152602d602052604090205460ff16155b8015613d3157506001600160a01b0382166000908152602d602052604090205460ff16155b156140815760185460ff1615613e4a576006546001600160a01b03838116911614801590613d6d5750600b546001600160a01b03838116911614155b15613e4a57613d7d60024361578e565b32600090815260176020526040902054108015613dbb5750613da060024361578e565b6001600160a01b038316600090815260176020526040902054105b613e255760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401611005565b3260009081526017602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152602f602052604090205460ff168015613e8b57506001600160a01b0382166000908152602e602052604090205460ff16155b15613f5757600754811115613ef35760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401611005565b600954613eff836115c2565b613f099083615576565b1115613f525760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401611005565b614081565b6001600160a01b0382166000908152602f602052604090205460ff168015613f9857506001600160a01b0383166000908152602e602052604090205460ff16155b1561400257600854811115613f525760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401611005565b6001600160a01b0382166000908152602e602052604090205460ff166140815760095461402e836115c2565b6140389083615576565b11156140815760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401611005565b600061408c306115c2565b600a54909150811080159081906140ac57506012546301000000900460ff165b80156140bb575060125460ff16155b80156140e057506001600160a01b0385166000908152602f602052604090205460ff16155b801561410557506001600160a01b0385166000908152602d602052604090205460ff16155b801561412a57506001600160a01b0384166000908152602d602052604090205460ff16155b1561414f576012805460ff1916600117905561414461461d565b6012805460ff191690555b60125460ff1615801561417a57506001600160a01b0384166000908152602f602052604090205460ff165b8015614188575060275460ff165b80156141a35750602954602a5461419f9190615576565b4210155b80156141c857506001600160a01b0385166000908152602d602052604090205460ff16155b156141d5576141d5614ae2565b6001600160a01b0385166000908152602d602052604090205460019060ff168061421757506001600160a01b0385166000908152602d602052604090205460ff165b15614220575060005b6000808215614608576010544310801561425257506001600160a01b0388166000908152602f602052604090205460ff165b801561427757506001600160a01b0387166000908152602f602052604090205460ff16155b801561429c57506001600160a01b0387166000908152602d602052604090205460ff16155b80156142aa57506000601954115b156144505760105443106142d1576001600760008282546142cb919061578e565b90915550505b6001600160a01b03871660009081526013602052604090205460ff166143b1576001600160a01b0387166000908152601360205260408120805460ff19166001908117909155601180549192909161432a908490615576565b9091555050600e80546001810182556000919091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0389169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b612710601954876143c2919061544a565b6143cc9190615554565b9150601954601b54836143df919061544a565b6143e99190615554565b602260008282546143fa9190615576565b9091555050601954601a5461440f908461544a565b6144199190615554565b6021600082825461442a9190615576565b9091555050601954601c5461443f908461544a565b6144499190615554565b90506145d7565b6001600160a01b0387166000908152602f602052604090205460ff16801561447a57506000601d54115b1561450d57612710601d5487614490919061544a565b61449a9190615554565b9150601d54601f54836144ad919061544a565b6144b79190615554565b602260008282546144c89190615576565b9091555050601d54601e546144dd908461544a565b6144e79190615554565b602160008282546144f89190615576565b909155505060195460205461443f908461544a565b6001600160a01b0388166000908152602f602052604090205460ff16801561453757506000601954115b156145d7576127106019548761454d919061544a565b6145579190615554565b9150601954601b548361456a919061544a565b6145749190615554565b602260008282546145859190615576565b9091555050601954601a5461459a908461544a565b6145a49190615554565b602160008282546145b59190615576565b9091555050601954601c546145ca908461544a565b6145d49190615554565b90505b81156145fb576145e88830846147d7565b80156145fb576145fb3061dead836147d7565b614605828761578e565b95505b6146138888886147d7565b5050505050505050565b6000614628306115c2565b60225460215491925090600061463e8284615576565b905083158061464b575080155b156146565750505050565b600a80546146639161544a565b84111561467a57600a80546146779161544a565b93505b6000806002836022548861468e919061544a565b6146989190615554565b6146a29190615554565b90506146b66146b1828861578e565b614cfc565b602254479081906000906146cc90600290615554565b6146d6908761578e565b6021546146e3908561544a565b6146ed9190615554565b90506146f9818361578e565b9150876022600082825461470d919061578e565b925050819055508660216000828254614726919061578e565b9091555050831580159061473a5750600082115b15614749576147498483614e56565b600d546040516001600160a01b03909116904790600081818185875af1925050503d8060008114614796576040519150601f19603f3d011682016040523d82523d6000602084013e61479b565b606091505b505050505050505050505050565b6001600160a01b0382166000908152602f60205260409020805460ff1916821515179055612265828261492c565b6001600160a01b0383166147fd5760405162461bcd60e51b8152600401611005906157c5565b6001600160a01b0382166148235760405162461bcd60e51b81526004016110059061580a565b6001600160a01b0383166000908152602081905260409020548181101561489b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401611005565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906148d2908490615576565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161491e91815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152602e6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156149f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a1d91906155aa565b81600081518110614a3057614a306155c7565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110614a6457614a646155c7565b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de95908490614aac90600090869061dead90429060040161584d565b6000604051808303818588803b158015614ac557600080fd5b505af1158015614ad9573d6000803e3d6000fd5b50505050505050565b42602a819055602c55600b546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015614b34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b58919061568f565b90506000614b65306115c2565b9050600061271060285484614b7a919061544a565b614b849190615554565b600b5460065460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015614bde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c0291906156a8565b50600654604051629d473b60e21b81526001600160a01b03909116906302751cec90614c3d9030908690600190819084904290600401615725565b60408051808303816000875af1158015614c5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c7f91906157a1565b5050600083614c8d306115c2565b614c97919061578e565b90508015614cac57614cac3061dead836147d7565b6000614cb8834761578e565b90508015614cc957614cc98161498f565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110614d3157614d316155c7565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015614d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614dae91906155aa565b81600181518110614dc157614dc16155c7565b6001600160a01b039283166020918202929092010152600654614de79130911684613736565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790614e20908590600090869030904290600401615882565b600060405180830381600087803b158015614e3a57600080fd5b505af1158015614e4e573d6000803e3d6000fd5b505050505050565b600654614e6e9030906001600160a01b031684613736565b60065460405163f305d71960e01b81526001600160a01b039091169063f305d719908390614eab9030908790600090819084904290600401615725565b60606040518083038185885af1158015614ec9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614eee9190615760565b5050505050565b600060208083528351808285015260005b81811015614f2257858101830151858201604001528201614f06565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114614f5857600080fd5b50565b60008060408385031215614f6e57600080fd5b8235614f7981614f43565b946020939093013593505050565b600060208284031215614f9957600080fd5b8135614fa481614f43565b9392505050565b600060208284031215614fbd57600080fd5b5035919050565b600080600060608486031215614fd957600080fd5b8335614fe481614f43565b92506020840135614ff481614f43565b929592945050506040919091013590565b8015158114614f5857600080fd5b60008060006060848603121561502857600080fd5b8335925060208401359150604084013561504181615005565b809150509250925092565b6000806040838503121561505f57600080fd5b823561506a81614f43565b9150602083013561507a81615005565b809150509250929050565b60008060006060848603121561509a57600080fd5b505081359360208301359350604090920135919050565b600080604083850312156150c457600080fd5b82356150cf81614f43565b9150602083013561507a81614f43565b60008083601f8401126150f157600080fd5b50813567ffffffffffffffff81111561510957600080fd5b6020830191508360208260051b850101111561512457600080fd5b9250929050565b60008060006040848603121561514057600080fd5b833567ffffffffffffffff81111561515757600080fd5b615163868287016150df565b909450925050602084013561504181615005565b600081518084526020808501945080840160005b838110156151b05781516001600160a01b03168752958201959082019060010161518b565b509495945050505050565b602081526000614fa46020830184615177565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561520d5761520d6151ce565b604052919050565b600067ffffffffffffffff82111561522f5761522f6151ce565b5060051b60200190565b600082601f83011261524a57600080fd5b8135602061525f61525a83615215565b6151e4565b82815260059290921b8401810191818101908684111561527e57600080fd5b8286015b848110156152995780358352918301918301615282565b509695505050505050565b600080600080600080600060a0888a0312156152bf57600080fd5b873567ffffffffffffffff808211156152d757600080fd5b818a0191508a601f8301126152eb57600080fd5b813560206152fb61525a83615215565b82815260059290921b8401810191818101908e84111561531a57600080fd5b948201945b8386101561534157853561533281614f43565b8252948201949082019061531f565b9b50508b01359250508082111561535757600080fd5b6153638b838c01615239565b975060408a0135965060608a013591508082111561538057600080fd5b61538c8b838c016150df565b909650945060808a01359150808211156153a557600080fd5b506153b28a828b016150df565b989b979a50959850939692959293505050565b600181811c908216806153d957607f821691505b6020821081036153f957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610fd557610fd5615434565b600181815b8085111561549c57816000190482111561548257615482615434565b8085161561548f57918102915b93841c9390800290615466565b509250929050565b6000826154b357506001610fd5565b816154c057506000610fd5565b81600181146154d657600281146154e0576154fc565b6001915050610fd5565b60ff8411156154f1576154f1615434565b50506001821b610fd5565b5060208310610133831016604e8410600b841016171561551f575081810a610fd5565b6155298383615461565b806000190482111561553d5761553d615434565b029392505050565b6000614fa460ff8416836154a4565b60008261557157634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610fd557610fd5615434565b6020808252600790820152662330b4b632b21760c91b604082015260600190565b6000602082840312156155bc57600080fd5b8151614fa481614f43565b634e487b7160e01b600052603260045260246000fd5b8281526040602082015260006155f66040830184615177565b949350505050565b6000602080838503121561561157600080fd5b825167ffffffffffffffff81111561562857600080fd5b8301601f8101851361563957600080fd5b805161564761525a82615215565b81815260059190911b8201830190838101908783111561566657600080fd5b928401925b828410156156845783518252928401929084019061566b565b979650505050505050565b6000602082840312156156a157600080fd5b5051919050565b6000602082840312156156ba57600080fd5b8151614fa481615005565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2035360cc1b606082015260800190565b60006001820161571e5761571e615434565b5060010190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561577557600080fd5b8351925060208401519150604084015190509250925092565b81810381811115610fd557610fd5615434565b600080604083850312156157b457600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8481526080602082015260006158666080830186615177565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a0604082015260006158a160a0830186615177565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220f10dfb92fcc4b0671a96775ca6efd1cf26d513e067b07b7b9f231d646af2faef64736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106104e55760003560e01c8063906e9dd011610281578063c7c61e2c1161015a578063eb472fc4116100cc578063f637434211610085578063f637434214610e87578063f8b45b0514610e9d578063f9f92be414610eb3578063fc353ff814610ee3578063fd361d0e14610ef8578063fe72b27a14610f1257600080fd5b8063eb472fc414610df0578063ee40166e14610e10578063ee44b44e14610e26578063f11a24d314610e3c578063f2fde38b14610e52578063f5648a4f14610e7257600080fd5b8063dc3f0d0f1161011e578063dc3f0d0f14610d29578063dd62ed3e14610d49578063e2f4560514610d8f578063e4c4a64b14610da5578063e71dc3f514610dc5578063e884f26014610ddb57600080fd5b8063c7c61e2c14610cae578063c876d0b914610cc3578063cc2ffe7c14610cdd578063d257b34f14610cf3578063d85ba06314610d1357600080fd5b8063ac8d2617116101f3578063bbc0c742116101b7578063bbc0c74214610bee578063bd5fb92014610c0e578063befd2fac14610c2e578063c024666814610c4e578063c17b5b8c14610c6e578063c5f956af14610c8e57600080fd5b8063ac8d261714610b42578063acee28d114610b62578063adb873bd14610b78578063afd6ce6114610b8e578063b62496f514610bbe57600080fd5b80639ec22c0e116102455780639ec22c0e14610aa0578063a457c2d714610ab6578063a4c82a0014610ad6578063a5ece94114610aec578063a62068ce14610b0c578063a9059cbb14610b2257600080fd5b8063906e9dd014610a1357806395d89b4114610a335780639a5bd2dd14610a485780639a7a23d614610a6a5780639e93ad8e14610a8a57600080fd5b80635c068a8c116103be578063715018a6116103305780638095d564116102e95780638095d5641461095f57806382aa7c681461097f5780638366e79a1461099f57806388e765ff146109bf5780638da5cb5b146109d55780638e38b7cb146109f357600080fd5b8063715018a6146108ca578063730c1888146108df578063751039fc146108ff5780637571336a14610914578063763cef4914610934578063783102eb1461094957600080fd5b80636b0a894c116103825780636b0a894c146108335780636b2fb124146108495780636ddd17131461085f57806370a0823114610880578063712c2985146108a0578063713d0974146108b557600080fd5b80635c068a8c146107a45780635c3352d3146107ba5780636605bfda146107e757806366d602ae146108075780636a486a8e1461081d57600080fd5b80631c499ab011610457578063313ce5671161041b578063313ce567146106fd5780633950935114610719578063452ed4f1146107395780634a62bb651461075957806351f205e41461077857806358a6d5311461078d57600080fd5b80631c499ab01461066d57806323b872dd1461068d5780632be32b61146106ad5780632c3e486c146106cd5780632e82f1a0146106e357600080fd5b80631805805b116104a95780631805805b146105d457806318160ddd146105f6578063184c16c51461060b57806318e1c12314610621578063199ffc72146106415780631a8145bb1461065757600080fd5b8063058054c9146104f157806306fdde031461051a5780630758d9241461053c578063095ea7b31461057457806310d5de53146105a457600080fd5b366104ec57005b600080fd5b3480156104fd57600080fd5b5061050760245481565b6040519081526020015b60405180910390f35b34801561052657600080fd5b5061052f610f32565b6040516105119190614ef5565b34801561054857600080fd5b5060065461055c906001600160a01b031681565b6040516001600160a01b039091168152602001610511565b34801561058057600080fd5b5061059461058f366004614f5b565b610fc4565b6040519015158152602001610511565b3480156105b057600080fd5b506105946105bf366004614f87565b602e6020526000908152604090205460ff1681565b3480156105e057600080fd5b506105f46105ef366004614f87565b610fdb565b005b34801561060257600080fd5b50600254610507565b34801561061757600080fd5b50610507602b5481565b34801561062d57600080fd5b506105f461063c366004614fab565b61109b565b34801561064d57600080fd5b5061050760285481565b34801561066357600080fd5b5061050760225481565b34801561067957600080fd5b506105f4610688366004614fab565b61116f565b34801561069957600080fd5b506105946106a8366004614fc4565b61127b565b3480156106b957600080fd5b506105f46106c8366004614fab565b611325565b3480156106d957600080fd5b5061050760295481565b3480156106ef57600080fd5b506027546105949060ff1681565b34801561070957600080fd5b5060405160128152602001610511565b34801561072557600080fd5b50610594610734366004614f5b565b611432565b34801561074557600080fd5b50600b5461055c906001600160a01b031681565b34801561076557600080fd5b5060125461059490610100900460ff1681565b34801561078457600080fd5b506105f461146e565b34801561079957600080fd5b506010544310610594565b3480156107b057600080fd5b50610507601a5481565b3480156107c657600080fd5b506105076107d5366004614f87565b60156020526000908152604090205481565b3480156107f357600080fd5b506105f4610802366004614f87565b6114ec565b34801561081357600080fd5b5061050760085481565b34801561082957600080fd5b50610507601d5481565b34801561083f57600080fd5b5061050760115481565b34801561085557600080fd5b50610507601e5481565b34801561086b57600080fd5b50601254610594906301000000900460ff1681565b34801561088c57600080fd5b5061050761089b366004614f87565b6115c2565b3480156108ac57600080fd5b506105076115dd565b3480156108c157600080fd5b50610507611606565b3480156108d657600080fd5b506105f4611802565b3480156108eb57600080fd5b506105f46108fa366004615013565b611876565b34801561090b57600080fd5b506105f461199f565b34801561092057600080fd5b506105f461092f36600461504c565b611a1b565b34801561094057600080fd5b506105f4611ae3565b34801561095557600080fd5b5061050760265481565b34801561096b57600080fd5b506105f461097a366004615085565b611c84565b34801561098b57600080fd5b506105f461099a366004614fab565b611d44565b3480156109ab57600080fd5b506105946109ba3660046150b1565b611e3b565b3480156109cb57600080fd5b5061050760075481565b3480156109e157600080fd5b506005546001600160a01b031661055c565b3480156109ff57600080fd5b506105f4610a0e36600461512b565b611fec565b348015610a1f57600080fd5b506105f4610a2e366004614f87565b61208d565b348015610a3f57600080fd5b5061052f61213d565b348015610a5457600080fd5b50610a5d61214c565b60405161051191906151bb565b348015610a7657600080fd5b506105f4610a8536600461504c565b6121ad565b348015610a9657600080fd5b5061050761271081565b348015610aac57600080fd5b50610507602c5481565b348015610ac257600080fd5b50610594610ad1366004614f5b565b6122a1565b348015610ae257600080fd5b50610507602a5481565b348015610af857600080fd5b50600d5461055c906001600160a01b031681565b348015610b1857600080fd5b5061050760105481565b348015610b2e57600080fd5b50610594610b3d366004614f5b565b61233a565b348015610b4e57600080fd5b506105f4610b5d3660046152a4565b612347565b348015610b6e57600080fd5b5061050760165481565b348015610b8457600080fd5b5061050760205481565b348015610b9a57600080fd5b50610594610ba9366004614f87565b60146020526000908152604090205460ff1681565b348015610bca57600080fd5b50610594610bd9366004614f87565b602f6020526000908152604090205460ff1681565b348015610bfa57600080fd5b506012546105949062010000900460ff1681565b348015610c1a57600080fd5b506105f4610c2936600461512b565b6129f7565b348015610c3a57600080fd5b506105f4610c49366004614fab565b612afd565b348015610c5a57600080fd5b506105f4610c6936600461504c565b612c33565b348015610c7a57600080fd5b506105f4610c89366004615085565b612cbc565b348015610c9a57600080fd5b50600c5461055c906001600160a01b031681565b348015610cba57600080fd5b506105f4612d77565b348015610ccf57600080fd5b506018546105949060ff1681565b348015610ce957600080fd5b5061050760215481565b348015610cff57600080fd5b506105f4610d0e366004614fab565b612de0565b348015610d1f57600080fd5b5061050760195481565b348015610d3557600080fd5b506105f4610d44366004614fab565b612f2b565b348015610d5557600080fd5b50610507610d643660046150b1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d9b57600080fd5b50610507600a5481565b348015610db157600080fd5b50610594610dc0366004614fab565b613039565b348015610dd157600080fd5b50610507601c5481565b348015610de757600080fd5b506105f4613245565b348015610dfc57600080fd5b5061055c610e0b366004614fab565b61327b565b348015610e1c57600080fd5b50610507600f5481565b348015610e3257600080fd5b5061050760255481565b348015610e4857600080fd5b50610507601b5481565b348015610e5e57600080fd5b506105f4610e6d366004614f87565b6132a5565b348015610e7e57600080fd5b506105f4613390565b348015610e9357600080fd5b50610507601f5481565b348015610ea957600080fd5b5061050760095481565b348015610ebf57600080fd5b50610594610ece366004614f87565b60136020526000908152604090205460ff1681565b348015610eef57600080fd5b506105f46133fc565b348015610f0457600080fd5b506023546105949060ff1681565b348015610f1e57600080fd5b506105f4610f2d366004614fab565b61343c565b606060038054610f41906153c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6d906153c5565b8015610fba5780601f10610f8f57610100808354040283529160200191610fba565b820191906000526020600020905b815481529060010190602001808311610f9d57829003601f168201915b5050505050905090565b6000610fd1338484613736565b5060015b92915050565b6005546001600160a01b0316331461100e5760405162461bcd60e51b8152600401611005906153ff565b60405180910390fd5b60125462010000900460ff16156110795760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401611005565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146110c55760405162461bcd60e51b8152600401611005906153ff565b600a81101580156110d8575061c3508111155b6111245760405162461bcd60e51b815260206004820181905260248201527f4d75737420736574206265747765656e20302e3120616e642035303020424e426044820152606401611005565b61113581662386f26fc1000061544a565b6016556040518181527f0320a651094de4f5fc35c0f1c336811904e8f465b6599a93eb0dec4919b8fec5906020015b60405180910390a150565b6005546001600160a01b031633146111995760405162461bcd60e51b8152600401611005906153ff565b6111a56012600a615545565b60646111b060025490565b6111bb90600161544a565b6111c59190615554565b6111cf9190615554565b8110156112305760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f776044820152686572207468616e202560b81b6064820152608401611005565b61123c6012600a615545565b611246908261544a565b60098190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001611164565b600061128884848461385a565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561130d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401611005565b61131a8533858403613736565b506001949350505050565b6005546001600160a01b0316331461134f5760405162461bcd60e51b8152600401611005906153ff565b61135b6012600a615545565b6103e861136760025490565b61137290600161544a565b61137c9190615554565b6113869190615554565b8110156113e75760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401611005565b6113f36012600a615545565b6113fd908261544a565b60078190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de4100990602001611164565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610fd1918590611469908690615576565b613736565b600c546001600160a01b031633146114985760405162461bcd60e51b815260040161100590615589565b6012805460ff191660011790556114ad61461d565b6012805460ff191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b600c546001600160a01b031633146115165760405162461bcd60e51b815260040161100590615589565b6001600160a01b0381166115785760405162461bcd60e51b8152602060048201526024808201527f5f74726561737572794164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401611005565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6001600160a01b031660009081526020819052604090205490565b60235460009060ff1615611600576025546024546115fb9190615576565b905090565b50600090565b604080516002808252606082018352600092839291906020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611674573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169891906155aa565b816000815181106116ab576116ab6155c7565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106116df576116df6155c7565b6001600160a01b039290921660209283029190910182015260408051600280825260608201835260009391929091830190803683370190505060065460165460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f9161174e9186906004016155dd565b600060405180830381865afa15801561176b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261179391908101906155fe565b90506064601e54601f546117a79190615576565b826001815181106117ba576117ba6155c7565b60200260200101516117cc919061544a565b6117d69190615554565b816001815181106117e9576117e96155c7565b60200260200101516117fb9190615576565b9250505090565b6005546001600160a01b0316331461182c5760405162461bcd60e51b8152600401611005906153ff565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b600c546001600160a01b031633146118a05760405162461bcd60e51b815260040161100590615589565b61025883101561190e5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401611005565b6103e8821115801561191e575060015b6119835760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401611005565b6029929092556028556027805460ff1916911515919091179055565b6005546001600160a01b031633146119c95760405162461bcd60e51b8152600401611005906153ff565b6012805461ff00191690556018805460ff191690556002546007556002546008556002546009556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b600c546001600160a01b03163314611a455760405162461bcd60e51b815260040161100590615589565b80611ab857600b546001600160a01b0390811690831603611ab85760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401611005565b6001600160a01b03919091166000908152602e60205260409020805460ff1916911515919091179055565b600c546001600160a01b03163314611b0d5760405162461bcd60e51b815260040161100590615589565b611b156115dd565b4210158015611b2b57506000611b296115dd565b115b611b705760405162461bcd60e51b815260206004820152601660248201527526bab9ba103932b8bab2b9ba1030b732103bb0b4ba1760511b6044820152606401611005565b600060248181556023805460ff19169055602654600b546040516370a0823160e01b81523060048201526064936001600160a01b03909216916370a082319101602060405180830381865afa158015611bcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf1919061568f565b611bfb919061544a565b611c059190615554565b6000602655600b5460405163a9059cbb60e01b8152336004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611c5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8091906156a8565b5050565b6005546001600160a01b03163314611cae5760405162461bcd60e51b8152600401611005906153ff565b601a839055601b829055601c81905580611cc88385615576565b611cd29190615576565b6019556064611ce4612710601e61544a565b611cee9190615554565b6019541115611d3f5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401611005565b505050565b6005546001600160a01b03163314611d6e5760405162461bcd60e51b8152600401611005906153ff565b60125462010000900460ff1615611dc75760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401611005565b6032811115611de85760405162461bcd60e51b8152600401611005906156c5565b6012805463ffff00001916630101000017905543600f819055611e0c908290615576565b6010556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b600c546000906001600160a01b03163314611e685760405162461bcd60e51b815260040161100590615589565b6001600160a01b038316611ebe5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401611005565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611f05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f29919061568f565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611f7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa091906156a8565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146120165760405162461bcd60e51b8152600401611005906153ff565b60005b82811015612087578160136000868685818110612038576120386155c7565b905060200201602081019061204d9190614f87565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061207f8161570c565b915050612019565b50505050565b600c546001600160a01b031633146120b75760405162461bcd60e51b815260040161100590615589565b6001600160a01b03811661211b5760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401611005565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b606060048054610f41906153c5565b6060600e805480602002602001604051908101604052809291908181526020018280548015610fba57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612186575050505050905090565b6005546001600160a01b031633146121d75760405162461bcd60e51b8152600401611005906153ff565b600b546001600160a01b039081169083160361225b5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401611005565b61226582826147a9565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156123235760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401611005565b6123303385858403613736565b5060019392505050565b6000610fd133848461385a565b6005546001600160a01b031633146123715760405162461bcd60e51b8152600401611005906153ff565b60125462010000900460ff16156123de5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401611005565b603285106123fe5760405162461bcd60e51b8152600401611005906156c5565b855187511461244f5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401611005565b61012c8751106124c05760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203330302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401611005565b60005b83811015612532576001602d60008787858181106124e3576124e36155c7565b90506020020160208101906124f89190614f87565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061252a8161570c565b9150506124c3565b5060005b818110156125a557600160136000858585818110612556576125566155c7565b905060200201602081019061256b9190614f87565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061259d8161570c565b915050612536565b5060005b87518110156126735760008882815181106125c6576125c66155c7565b6020908102919091018101516001600160a01b038116600090815260149092526040909120805460ff1916600117905590506126054262015180615576565b6001600160a01b03821660009081526015602052604081209190915561262d6012600a615545565b89848151811061263f5761263f6155c7565b6020026020010151612651919061544a565b905061265e3383836147d7565b5050808061266b9061570c565b9150506125a9565b506012805463ffff00001916630101000017905543600f819055612698908690615576565b6010556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600660009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612717573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273b91906155aa565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561279d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c191906155aa565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561280e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283291906155aa565b600b80546001600160a01b0319166001600160a01b0392909216918217905561285c90600161492c565b600b54612873906001600160a01b031660016147a9565b600047116128cf5760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401611005565b60006128da306115c2565b116129365760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401611005565b6006546129519030906001600160a01b0316611469826115c2565b6006546001600160a01b031663f305d719473061296d816115c2565b60008030426040518863ffffffff1660e01b815260040161299396959493929190615725565b60606040518083038185885af11580156129b1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129d69190615760565b5050610bb8601a8190556019819055601e819055601d555050505050505050565b600c546001600160a01b03163314612a215760405162461bcd60e51b815260040161100590615589565b60005b828110156120875781602d6000868685818110612a4357612a436155c7565b9050602002016020810190612a589190614f87565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055838382818110612a9257612a926155c7565b9050602002016020810190612aa79190614f87565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df783604051612ae3911515815260200190565b60405180910390a280612af58161570c565b915050612a24565b600c546001600160a01b03163314612b275760405162461bcd60e51b815260040161100590615589565b60235460ff1615612b945760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f74207265717565737420616761696e20756e74696c206669727374604482015270103932b8bab2b9ba1034b99037bb32b91760791b6064820152608401611005565b60648111158015612ba55750600081115b612bf15760405162461bcd60e51b815260206004820152601a60248201527f4e65656420746f20736574206265747765656e20312d313030250000000000006044820152606401611005565b426024556023805460ff1916600117905560268190556040517fd99a77b2f3951cd076e75814e44db497e6abc203dd251329da0b62c288f9f48b90600090a150565b6005546001600160a01b03163314612c5d5760405162461bcd60e51b8152600401611005906153ff565b6001600160a01b0382166000818152602d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314612ce65760405162461bcd60e51b8152600401611005906153ff565b601e839055601f829055602081905580612d008385615576565b612d0a9190615576565b601d556064612d1c612710601e61544a565b612d269190615554565b601d541115611d3f5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401611005565b600c546001600160a01b03163314612da15760405162461bcd60e51b815260040161100590615589565b6023805460ff191690556000602681905560248190556040517ffbcc1c208c9c4d1d9f557267b55c5ae316e74ce676a0db72ef18c6d5f5767c619190a1565b6005546001600160a01b03163314612e0a5760405162461bcd60e51b8152600401611005906153ff565b620186a0612e1760025490565b612e2290600161544a565b612e2c9190615554565b811015612e995760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401611005565b6103e8612ea560025490565b612eb090600161544a565b612eba9190615554565b811115612f265760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401611005565b600a55565b6005546001600160a01b03163314612f555760405162461bcd60e51b8152600401611005906153ff565b612f616012600a615545565b6103e8612f6d60025490565b612f7890600161544a565b612f829190615554565b612f8c9190615554565b811015612fee5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401611005565b612ffa6012600a615545565b613004908261544a565b60088190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001611164565b600c546000906001600160a01b031633146130665760405162461bcd60e51b815260040161100590615589565b602b54602c546130769190615576565b42116130c45760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401611005565b6107d08211156131295760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20323025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401611005565b42602c55600b546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a0823190602401602060405180830381865afa158015613178573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319c919061568f565b905060006127106131ad858461544a565b6131b79190615554565b905080156131d857600b546131d8906001600160a01b031661dead836147d7565b600b546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b15801561322257600080fd5b505af1158015613236573d6000803e3d6000fd5b50600198975050505050505050565b6005546001600160a01b0316331461326f5760405162461bcd60e51b8152600401611005906153ff565b6018805460ff19169055565b600e818154811061328b57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146132cf5760405162461bcd60e51b8152600401611005906153ff565b6001600160a01b0381166133345760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611005565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600c546001600160a01b031633146133ba5760405162461bcd60e51b815260040161100590615589565b604051600090339047908381818185875af1925050503d8060008114612087576040519150601f19603f3d011682016040523d82523d6000602084013e612087565b600c546001600160a01b031633146134265760405162461bcd60e51b815260040161100590615589565b60c8601a8190556019819055601e819055601d55565b600c546001600160a01b031633146134665760405162461bcd60e51b815260040161100590615589565b6107d08111156134d65760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20323025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401611005565b602b546134e3904261578e565b602c5411156135245760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401611005565b42602c55600b546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015613571573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613595919061568f565b905060006135a2306115c2565b905060006127106135b3858561544a565b6135bd9190615554565b600b5460065460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015613617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061363b91906156a8565b50600654604051629d473b60e21b81526001600160a01b03909116906302751cec906136769030908690600190819084904290600401615725565b60408051808303816000875af1158015613694573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136b891906157a1565b50506000836136c6306115c2565b6136d0919061578e565b905080156136e5576136e53061dead836147d7565b60006136f1834761578e565b90508015613702576137028161498f565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b0383166137985760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401611005565b6001600160a01b0382166137f95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401611005565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166138805760405162461bcd60e51b8152600401611005906157c5565b6001600160a01b0382166138a65760405162461bcd60e51b81526004016110059061580a565b600081116138f65760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401611005565b60125462010000900460ff1661398a576001600160a01b0383166000908152602d602052604090205460ff168061394557506001600160a01b0382166000908152602d602052604090205460ff165b61398a5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401611005565b60105443101580156139a4575060125462010000900460ff165b15613a99576001600160a01b03831660009081526013602052604090205460ff161580156139eb57506001600160a01b03821660009081526013602052604090205460ff16155b80613a0357506005546001600160a01b038381169116145b80613a1857506001600160a01b03821661dead145b613a995760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401611005565b6001600160a01b03831660009081526014602052604090205460ff1615613c80576001600160a01b0382166000908152602f602052604090205460ff1615613bd4576001600160a01b038316600090815260156020526040902054421015613b355760405162461bcd60e51b815260206004820152600f60248201526e10d85b9b9bdd081cd95b1b081e595d608a1b6044820152606401611005565b613b3d611606565b811115613ba95760405162461bcd60e51b815260206004820152603460248201527f417474656d7074696e6720746f2073656c6c206f766572206d61782073656c6c6044820152731030b6b7bab73a17101021b432b1b59036b0bc1760611b6064820152608401611005565b613bb64262015180615576565b6001600160a01b038416600090815260156020526040902055613c80565b6001600160a01b0382166000908152602d602052604090205460ff16613c805760405162461bcd60e51b815260206004820152605560248201527f507269766174652073616c652063616e6e6f74207472616e7366657220616e6460448201527f206d7573742073656c6c206f6e6c79206f72207472616e7366657220746f2061606482015274103bb434ba32b634b9ba32b21030b2323932b9b99760591b608482015260a401611005565b601254610100900460ff1615614081576005546001600160a01b03848116911614801590613cbc57506005546001600160a01b03838116911614155b8015613cd057506001600160a01b03821615155b8015613ce757506001600160a01b03821661dead14155b8015613d0c57506001600160a01b0383166000908152602d602052604090205460ff16155b8015613d3157506001600160a01b0382166000908152602d602052604090205460ff16155b156140815760185460ff1615613e4a576006546001600160a01b03838116911614801590613d6d5750600b546001600160a01b03838116911614155b15613e4a57613d7d60024361578e565b32600090815260176020526040902054108015613dbb5750613da060024361578e565b6001600160a01b038316600090815260176020526040902054105b613e255760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401611005565b3260009081526017602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152602f602052604090205460ff168015613e8b57506001600160a01b0382166000908152602e602052604090205460ff16155b15613f5757600754811115613ef35760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401611005565b600954613eff836115c2565b613f099083615576565b1115613f525760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401611005565b614081565b6001600160a01b0382166000908152602f602052604090205460ff168015613f9857506001600160a01b0383166000908152602e602052604090205460ff16155b1561400257600854811115613f525760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401611005565b6001600160a01b0382166000908152602e602052604090205460ff166140815760095461402e836115c2565b6140389083615576565b11156140815760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401611005565b600061408c306115c2565b600a54909150811080159081906140ac57506012546301000000900460ff165b80156140bb575060125460ff16155b80156140e057506001600160a01b0385166000908152602f602052604090205460ff16155b801561410557506001600160a01b0385166000908152602d602052604090205460ff16155b801561412a57506001600160a01b0384166000908152602d602052604090205460ff16155b1561414f576012805460ff1916600117905561414461461d565b6012805460ff191690555b60125460ff1615801561417a57506001600160a01b0384166000908152602f602052604090205460ff165b8015614188575060275460ff165b80156141a35750602954602a5461419f9190615576565b4210155b80156141c857506001600160a01b0385166000908152602d602052604090205460ff16155b156141d5576141d5614ae2565b6001600160a01b0385166000908152602d602052604090205460019060ff168061421757506001600160a01b0385166000908152602d602052604090205460ff165b15614220575060005b6000808215614608576010544310801561425257506001600160a01b0388166000908152602f602052604090205460ff165b801561427757506001600160a01b0387166000908152602f602052604090205460ff16155b801561429c57506001600160a01b0387166000908152602d602052604090205460ff16155b80156142aa57506000601954115b156144505760105443106142d1576001600760008282546142cb919061578e565b90915550505b6001600160a01b03871660009081526013602052604090205460ff166143b1576001600160a01b0387166000908152601360205260408120805460ff19166001908117909155601180549192909161432a908490615576565b9091555050600e80546001810182556000919091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0389169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b612710601954876143c2919061544a565b6143cc9190615554565b9150601954601b54836143df919061544a565b6143e99190615554565b602260008282546143fa9190615576565b9091555050601954601a5461440f908461544a565b6144199190615554565b6021600082825461442a9190615576565b9091555050601954601c5461443f908461544a565b6144499190615554565b90506145d7565b6001600160a01b0387166000908152602f602052604090205460ff16801561447a57506000601d54115b1561450d57612710601d5487614490919061544a565b61449a9190615554565b9150601d54601f54836144ad919061544a565b6144b79190615554565b602260008282546144c89190615576565b9091555050601d54601e546144dd908461544a565b6144e79190615554565b602160008282546144f89190615576565b909155505060195460205461443f908461544a565b6001600160a01b0388166000908152602f602052604090205460ff16801561453757506000601954115b156145d7576127106019548761454d919061544a565b6145579190615554565b9150601954601b548361456a919061544a565b6145749190615554565b602260008282546145859190615576565b9091555050601954601a5461459a908461544a565b6145a49190615554565b602160008282546145b59190615576565b9091555050601954601c546145ca908461544a565b6145d49190615554565b90505b81156145fb576145e88830846147d7565b80156145fb576145fb3061dead836147d7565b614605828761578e565b95505b6146138888886147d7565b5050505050505050565b6000614628306115c2565b60225460215491925090600061463e8284615576565b905083158061464b575080155b156146565750505050565b600a80546146639161544a565b84111561467a57600a80546146779161544a565b93505b6000806002836022548861468e919061544a565b6146989190615554565b6146a29190615554565b90506146b66146b1828861578e565b614cfc565b602254479081906000906146cc90600290615554565b6146d6908761578e565b6021546146e3908561544a565b6146ed9190615554565b90506146f9818361578e565b9150876022600082825461470d919061578e565b925050819055508660216000828254614726919061578e565b9091555050831580159061473a5750600082115b15614749576147498483614e56565b600d546040516001600160a01b03909116904790600081818185875af1925050503d8060008114614796576040519150601f19603f3d011682016040523d82523d6000602084013e61479b565b606091505b505050505050505050505050565b6001600160a01b0382166000908152602f60205260409020805460ff1916821515179055612265828261492c565b6001600160a01b0383166147fd5760405162461bcd60e51b8152600401611005906157c5565b6001600160a01b0382166148235760405162461bcd60e51b81526004016110059061580a565b6001600160a01b0383166000908152602081905260409020548181101561489b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401611005565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906148d2908490615576565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161491e91815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152602e6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156149f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a1d91906155aa565b81600081518110614a3057614a306155c7565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110614a6457614a646155c7565b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de95908490614aac90600090869061dead90429060040161584d565b6000604051808303818588803b158015614ac557600080fd5b505af1158015614ad9573d6000803e3d6000fd5b50505050505050565b42602a819055602c55600b546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015614b34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b58919061568f565b90506000614b65306115c2565b9050600061271060285484614b7a919061544a565b614b849190615554565b600b5460065460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015614bde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c0291906156a8565b50600654604051629d473b60e21b81526001600160a01b03909116906302751cec90614c3d9030908690600190819084904290600401615725565b60408051808303816000875af1158015614c5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c7f91906157a1565b5050600083614c8d306115c2565b614c97919061578e565b90508015614cac57614cac3061dead836147d7565b6000614cb8834761578e565b90508015614cc957614cc98161498f565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110614d3157614d316155c7565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015614d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614dae91906155aa565b81600181518110614dc157614dc16155c7565b6001600160a01b039283166020918202929092010152600654614de79130911684613736565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790614e20908590600090869030904290600401615882565b600060405180830381600087803b158015614e3a57600080fd5b505af1158015614e4e573d6000803e3d6000fd5b505050505050565b600654614e6e9030906001600160a01b031684613736565b60065460405163f305d71960e01b81526001600160a01b039091169063f305d719908390614eab9030908790600090819084904290600401615725565b60606040518083038185885af1158015614ec9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614eee9190615760565b5050505050565b600060208083528351808285015260005b81811015614f2257858101830151858201604001528201614f06565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114614f5857600080fd5b50565b60008060408385031215614f6e57600080fd5b8235614f7981614f43565b946020939093013593505050565b600060208284031215614f9957600080fd5b8135614fa481614f43565b9392505050565b600060208284031215614fbd57600080fd5b5035919050565b600080600060608486031215614fd957600080fd5b8335614fe481614f43565b92506020840135614ff481614f43565b929592945050506040919091013590565b8015158114614f5857600080fd5b60008060006060848603121561502857600080fd5b8335925060208401359150604084013561504181615005565b809150509250925092565b6000806040838503121561505f57600080fd5b823561506a81614f43565b9150602083013561507a81615005565b809150509250929050565b60008060006060848603121561509a57600080fd5b505081359360208301359350604090920135919050565b600080604083850312156150c457600080fd5b82356150cf81614f43565b9150602083013561507a81614f43565b60008083601f8401126150f157600080fd5b50813567ffffffffffffffff81111561510957600080fd5b6020830191508360208260051b850101111561512457600080fd5b9250929050565b60008060006040848603121561514057600080fd5b833567ffffffffffffffff81111561515757600080fd5b615163868287016150df565b909450925050602084013561504181615005565b600081518084526020808501945080840160005b838110156151b05781516001600160a01b03168752958201959082019060010161518b565b509495945050505050565b602081526000614fa46020830184615177565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561520d5761520d6151ce565b604052919050565b600067ffffffffffffffff82111561522f5761522f6151ce565b5060051b60200190565b600082601f83011261524a57600080fd5b8135602061525f61525a83615215565b6151e4565b82815260059290921b8401810191818101908684111561527e57600080fd5b8286015b848110156152995780358352918301918301615282565b509695505050505050565b600080600080600080600060a0888a0312156152bf57600080fd5b873567ffffffffffffffff808211156152d757600080fd5b818a0191508a601f8301126152eb57600080fd5b813560206152fb61525a83615215565b82815260059290921b8401810191818101908e84111561531a57600080fd5b948201945b8386101561534157853561533281614f43565b8252948201949082019061531f565b9b50508b01359250508082111561535757600080fd5b6153638b838c01615239565b975060408a0135965060608a013591508082111561538057600080fd5b61538c8b838c016150df565b909650945060808a01359150808211156153a557600080fd5b506153b28a828b016150df565b989b979a50959850939692959293505050565b600181811c908216806153d957607f821691505b6020821081036153f957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610fd557610fd5615434565b600181815b8085111561549c57816000190482111561548257615482615434565b8085161561548f57918102915b93841c9390800290615466565b509250929050565b6000826154b357506001610fd5565b816154c057506000610fd5565b81600181146154d657600281146154e0576154fc565b6001915050610fd5565b60ff8411156154f1576154f1615434565b50506001821b610fd5565b5060208310610133831016604e8410600b841016171561551f575081810a610fd5565b6155298383615461565b806000190482111561553d5761553d615434565b029392505050565b6000614fa460ff8416836154a4565b60008261557157634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610fd557610fd5615434565b6020808252600790820152662330b4b632b21760c91b604082015260600190565b6000602082840312156155bc57600080fd5b8151614fa481614f43565b634e487b7160e01b600052603260045260246000fd5b8281526040602082015260006155f66040830184615177565b949350505050565b6000602080838503121561561157600080fd5b825167ffffffffffffffff81111561562857600080fd5b8301601f8101851361563957600080fd5b805161564761525a82615215565b81815260059190911b8201830190838101908783111561566657600080fd5b928401925b828410156156845783518252928401929084019061566b565b979650505050505050565b6000602082840312156156a157600080fd5b5051919050565b6000602082840312156156ba57600080fd5b8151614fa481615005565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2035360cc1b606082015260800190565b60006001820161571e5761571e615434565b5060010190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561577557600080fd5b8351925060208401519150604084015190509250925092565b81810381811115610fd557610fd5615434565b600080604083850312156157b457600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8481526080602082015260006158666080830186615177565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a0604082015260006158a160a0830186615177565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220f10dfb92fcc4b0671a96775ca6efd1cf26d513e067b07b7b9f231d646af2faef64736f6c63430008110033

Deployed Bytecode Sourcemap

12080:31567:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13660:41;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;13660:41:0;;;;;;;;4023:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;12127:27::-;;;;;;;;;;-1:-1:-1;12127:27:0;;;;-1:-1:-1;;;;;12127:27:0;;;;;;-1:-1:-1;;;;;931:32:1;;;913:51;;901:2;886:18;12127:27:0;749:221:1;4937:169:0;;;;;;;;;;-1:-1:-1;4937:169:0;;;;;:::i;:::-;;:::i;:::-;;;1596:14:1;;1589:22;1571:41;;1559:2;1544:18;4937:169:0;1431:187:1;14232:64:0;;;;;;;;;;-1:-1:-1;14232:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19629:194;;;;;;;;;;-1:-1:-1;19629:194:0;;;;;:::i;:::-;;:::i;:::-;;4344:108;;;;;;;;;;-1:-1:-1;4432:12:0;;4344:108;;13989:47;;;;;;;;;;;;;;;;34469:248;;;;;;;;;;-1:-1:-1;34469:248:0;;;;;:::i;:::-;;:::i;13847:35::-;;;;;;;;;;;;;;;;13575:33;;;;;;;;;;;;;;;;20613:288;;;;;;;;;;-1:-1:-1;20613:288:0;;;;;:::i;:::-;;:::i;5114:492::-;;;;;;;;;;-1:-1:-1;5114:492:0;;;;;:::i;:::-;;:::i;19998:295::-;;;;;;;;;;-1:-1:-1;19998:295:0;;;;;:::i;:::-;;:::i;13901:45::-;;;;;;;;;;;;;;;;13807:33;;;;;;;;;;-1:-1:-1;13807:33:0;;;;;;;;4243:93;;;;;;;;;;-1:-1:-1;4243:93:0;;4326:2;2663:36:1;;2651:2;2636:18;4243:93:0;2521:184:1;5614:215:0;;;;;;;;;;-1:-1:-1;5614:215:0;;;;;:::i;:::-;;:::i;12305:21::-;;;;;;;;;;-1:-1:-1;12305:21:0;;;;-1:-1:-1;;;;;12305:21:0;;;12624:33;;;;;;;;;;-1:-1:-1;12624:33:0;;;;;;;;;;;43407:237;;;;;;;;;;;;;:::i;30018:120::-;;;;;;;;;;-1:-1:-1;30112:18:0;;30097:12;:33;30018:120;;13232:29;;;;;;;;;;;;;;;;12851:61;;;;;;;;;;-1:-1:-1;12851:61:0;;;;;:::i;:::-;;;;;;;;;;;;;;33406:340;;;;;;;;;;-1:-1:-1;33406:340:0;;;;;:::i;:::-;;:::i;12197:28::-;;;;;;;;;;;;;;;;13339;;;;;;;;;;;;;;;;12562:25;;;;;;;;;;;;;;;;13374:30;;;;;;;;;;;;;;;;12704:31;;;;;;;;;;-1:-1:-1;12704:31:0;;;;;;;;;;;4460:127;;;;;;;;;;-1:-1:-1;4460:127:0;;;;;:::i;:::-;;:::i;42277:281::-;;;;;;;;;;;;;:::i;34052:409::-;;;;;;;;;;;;;:::i;8104:150::-;;;;;;;;;;;;;:::i;37138:506::-;;;;;;;;;;-1:-1:-1;37138:506:0;;;;;:::i;:::-;;:::i;18792:269::-;;;;;;;;;;;;;:::i;21549:319::-;;;;;;;;;;-1:-1:-1;21549:319:0;;;;;:::i;:::-;;:::i;42566:546::-;;;;;;;;;;;;;:::i;13767:31::-;;;;;;;;;;;;;;;;22421:389;;;;;;;;;;-1:-1:-1;22421:389:0;;;;;:::i;:::-;;:::i;18309:427::-;;;;;;;;;;-1:-1:-1;18309:427:0;;;;;:::i;:::-;;:::i;32668:440::-;;;;;;;;;;-1:-1:-1;32668:440:0;;;;;:::i;:::-;;:::i;12163:27::-;;;;;;;;;;;;;;;;7890:79;;;;;;;;;;-1:-1:-1;7955:6:0;;-1:-1:-1;;;;;7955:6:0;7890:79;;19418:203;;;;;;;;;;-1:-1:-1;19418:203:0;;;;;:::i;:::-;;:::i;33754:290::-;;;;;;;;;;-1:-1:-1;33754:290:0;;;;;:::i;:::-;;:::i;4131:104::-;;;;;;;;;;;;;:::i;19307:103::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;21876:293::-;;;;;;;;;;-1:-1:-1;21876:293:0;;;;;:::i;:::-;;:::i;13484:43::-;;;;;;;;;;;;13522:5;13484:43;;14043:35;;;;;;;;;;;;;;;;5837:413;;;;;;;;;;-1:-1:-1;5837:413:0;;;;;:::i;:::-;;:::i;13953:29::-;;;;;;;;;;;;;;;;12370:31;;;;;;;;;;-1:-1:-1;12370:31:0;;;;-1:-1:-1;;;;;12370:31:0;;;12522:33;;;;;;;;;;;;;;;;4595:175;;;;;;;;;;-1:-1:-1;4595:175:0;;;;;:::i;:::-;;:::i;34725:2405::-;;;;;;;;;;-1:-1:-1;34725:2405:0;;;;;:::i;:::-;;:::i;12919:40::-;;;;;;;;;;;;;;;;13449:26;;;;;;;;;;;;;;;;12793:51;;;;;;;;;;-1:-1:-1;12793:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14454:58;;;;;;;;;;-1:-1:-1;14454:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12664:33;;;;;;;;;;-1:-1:-1;12664:33:0;;;;;;;;;;;23223:341;;;;;;;;;;-1:-1:-1;23223:341:0;;;;;:::i;:::-;;:::i;41761:508::-;;;;;;;;;;-1:-1:-1;41761:508:0;;;;;:::i;:::-;;:::i;23572:182::-;;;;;;;;;;-1:-1:-1;23572:182:0;;;;;:::i;:::-;;:::i;22818:397::-;;;;;;;;;;-1:-1:-1;22818:397:0;;;;;:::i;:::-;;:::i;12333:30::-;;;;;;;;;;-1:-1:-1;12333:30:0;;;;-1:-1:-1;;;;;12333:30:0;;;43120:279;;;;;;;;;;;;;:::i;13150:39::-;;;;;;;;;;-1:-1:-1;13150:39:0;;;;;;;;13536:32;;;;;;;;;;;;;;;;20971:346;;;;;;;;;;-1:-1:-1;20971:346:0;;;;;:::i;:::-;;:::i;13198:27::-;;;;;;;;;;;;;;;;20305:300;;;;;;;;;;-1:-1:-1;20305:300:0;;;;;:::i;:::-;;:::i;4778:151::-;;;;;;;;;;-1:-1:-1;4778:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4894:18:0;;;4867:7;4894:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4778:151;12263:33;;;;;;;;;;;;;;;;40381:982;;;;;;;;;;-1:-1:-1;40381:982:0;;;;;:::i;:::-;;:::i;13305:25::-;;;;;;;;;;;;;;;;19888:98;;;;;;;;;;;;;:::i;12408:28::-;;;;;;;;;;-1:-1:-1;12408:28:0;;;;;:::i;:::-;;:::i;12445:37::-;;;;;;;;;;;;;;;;13708:52;;;;;;;;;;;;;;;;13268:30;;;;;;;;;;;;;;;;8262:244;;;;;;;;;;-1:-1:-1;8262:244:0;;;;;:::i;:::-;;:::i;33179:219::-;;;;;;;;;;;;;:::i;13411:31::-;;;;;;;;;;;;;;;;12232:24;;;;;;;;;;;;;;;;12744:42;;;;;;;;;;-1:-1:-1;12744:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19069:230;;;;;;;;;;;;;:::i;13617:36::-;;;;;;;;;;-1:-1:-1;13617:36:0;;;;;;;;38916:1457;;;;;;;;;;-1:-1:-1;38916:1457:0;;;;;:::i;:::-;;:::i;4023:100::-;4077:13;4110:5;4103:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4023:100;:::o;4937:169::-;5020:4;5037:39;252:10;5060:7;5069:6;5037:8;:39::i;:::-;-1:-1:-1;5094:4:0;4937:169;;;;;:::o;19629:194::-;8017:6;;-1:-1:-1;;;;;8017:6:0;252:10;8017:22;8009:67;;;;-1:-1:-1;;;8009:67:0;;;;;;;:::i;:::-;;;;;;;;;19715:13:::1;::::0;;;::::1;;;19714:14;19706:68;;;::::0;-1:-1:-1;;;19706:68:0;;10334:2:1;19706:68:0::1;::::0;::::1;10316:21:1::0;10373:2;10353:18;;;10346:30;10412:34;10392:18;;;10385:62;-1:-1:-1;;;10463:18:1;;;10456:39;10512:19;;19706:68:0::1;10132:405:1::0;19706:68:0::1;19785:9;:30:::0;;-1:-1:-1;;;;;;19785:30:0::1;-1:-1:-1::0;;;;;19785:30:0;;;::::1;::::0;;;::::1;::::0;;19629:194::o;34469:248::-;8017:6;;-1:-1:-1;;;;;8017:6:0;252:10;8017:22;8009:67;;;;-1:-1:-1;;;8009:67:0;;;;;;;:::i;:::-;34564:2:::1;34554:6;:12;;:31;;;;;34580:5;34570:6;:15;;34554:31;34546:76;;;::::0;-1:-1:-1;;;34546:76:0;;10744:2:1;34546:76:0::1;::::0;::::1;10726:21:1::0;;;10763:18;;;10756:30;10822:34;10802:18;;;10795:62;10874:18;;34546:76:0::1;10542:356:1::0;34546:76:0::1;34651:13;:6:::0;34660:4:::1;34651:13;:::i;:::-;34633:15;:31:::0;34680:29:::1;::::0;160:25:1;;;34680:29:0::1;::::0;148:2:1;133:18;34680:29:0::1;;;;;;;;34469:248:::0;:::o;20613:288::-;8017:6;;-1:-1:-1;;;;;8017:6:0;252:10;8017:22;8009:67;;;;-1:-1:-1;;;8009:67:0;;;;;;;:::i;:::-;20731:16:::1;4326:2:::0;20731::::1;:16;:::i;:::-;20723:3;20703:13;4432:12:::0;;;4344:108;20703:13:::1;:17;::::0;20719:1:::1;20703:17;:::i;:::-;:23;;;;:::i;:::-;20702:46;;;;:::i;:::-;20692:6;:56;;20684:110;;;::::0;-1:-1:-1;;;20684:110:0;;13015:2:1;20684:110:0::1;::::0;::::1;12997:21:1::0;13054:2;13034:18;;;13027:30;13093:34;13073:18;;;13066:62;-1:-1:-1;;;13144:18:1;;;13137:39;13193:19;;20684:110:0::1;12813:405:1::0;20684:110:0::1;20827:16;4326:2:::0;20827::::1;:16;:::i;:::-;20817:27;::::0;:6;:27:::1;:::i;:::-;20805:9;:39:::0;;;20860:33:::1;::::0;160:25:1;;;20860:33:0::1;::::0;148:2:1;133:18;20860:33:0::1;14:177:1::0;5114:492:0;5254:4;5271:36;5281:6;5289:9;5300:6;5271:9;:36::i;:::-;-1:-1:-1;;;;;5347:19:0;;5320:24;5347:19;;;:11;:19;;;;;;;;252:10;5347:33;;;;;;;;5399:26;;;;5391:79;;;;-1:-1:-1;;;5391:79:0;;13425:2:1;5391:79:0;;;13407:21:1;13464:2;13444:18;;;13437:30;13503:34;13483:18;;;13476:62;-1:-1:-1;;;13554:18:1;;;13547:38;13602:19;;5391:79:0;13223:404:1;5391:79:0;5506:57;5515:6;252:10;5556:6;5537:16;:25;5506:8;:57::i;:::-;-1:-1:-1;5594:4:0;;5114:492;-1:-1:-1;;;;5114:492:0:o;19998:295::-;8017:6;;-1:-1:-1;;;;;8017:6:0;252:10;8017:22;8009:67;;;;-1:-1:-1;;;8009:67:0;;;;;;;:::i;:::-;20120:16:::1;4326:2:::0;20120::::1;:16;:::i;:::-;20111:4;20091:13;4432:12:::0;;;4344:108;20091:13:::1;:17;::::0;20107:1:::1;20091:17;:::i;:::-;:24;;;;:::i;:::-;20090:47;;;;:::i;:::-;20080:6;:57;;20072:111;;;::::0;-1:-1:-1;;;20072:111:0;;13834:2:1;20072:111:0::1;::::0;::::1;13816:21:1::0;13873:2;13853:18;;;13846:30;13912:34;13892:18;;;13885:62;-1:-1:-1;;;13963:18:1;;;13956:39;14012:19;;20072:111:0::1;13632:405:1::0;20072:111:0::1;20219:16;4326:2:::0;20219::::1;:16;:::i;:::-;20209:27;::::0;:6;:27:::1;:::i;:::-;20194:12;:42:::0;;;20252:33:::1;::::0;160:25:1;;;20252:33:0::1;::::0;148:2:1;133:18;20252:33:0::1;14:177:1::0;5614:215:0;252:10;5702:4;5751:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5751:34:0;;;;;;;;;;5702:4;;5719:80;;5742:7;;5751:47;;5788:10;;5751:47;:::i;:::-;5719:8;:80::i;43407:237::-;43482:15;;-1:-1:-1;;;;;43482:15:0;43460:10;:38;43452:58;;;;-1:-1:-1;;;43452:58:0;;;;;;;:::i;:::-;43521:8;:15;;-1:-1:-1;;43521:15:0;43532:4;43521:15;;;43547:10;:8;:10::i;:::-;43568:8;:16;;-1:-1:-1;;43568:16:0;;;43600:36;;43620:15;160:25:1;;43600:36:0;;148:2:1;133:18;43600:36:0;;;;;;;43407:237::o;33406:340::-;33510:15;;-1:-1:-1;;;;;33510:15:0;33488:10;:38;33480:58;;;;-1:-1:-1;;;33480:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33557:30:0;;33549:79;;;;-1:-1:-1;;;33549:79:0;;14709:2:1;33549:79:0;;;14691:21:1;14748:2;14728:18;;;14721:30;14787:34;14767:18;;;14760:62;-1:-1:-1;;;14838:18:1;;;14831:34;14882:19;;33549:79:0;14507:400:1;33549:79:0;33639:15;:43;;-1:-1:-1;;;;;;33639:43:0;-1:-1:-1;;;;;33639:43:0;;;;;;;;33698:40;;;;-1:-1:-1;;33698:40:0;33406:340;:::o;4460:127::-;-1:-1:-1;;;;;4561:18:0;4534:7;4561:18;;;;;;;;;;;;4460:127::o;42277:281::-;42359:24;;42337:7;;42359:24;;42356:195;;;42435:25;;42406:26;;:54;;;;:::i;:::-;42399:61;;42277:281;:::o;42356:195::-;-1:-1:-1;42509:1:0;;42277:281::o;34052:409::-;34149:16;;;34163:1;34149:16;;;;;;;;34106:7;;;;34149:16;34163:1;34149:16;;;;;;;;-1:-1:-1;;34186:9:0;;:16;;;-1:-1:-1;;;34186:16:0;;;;34125:40;;-1:-1:-1;;;;;;34186:9:0;;;;:14;;-1:-1:-1;34186:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34176:4;34181:1;34176:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;34176:26:0;;;-1:-1:-1;;;;;34176:26:0;;;;;34231:4;34213;34218:1;34213:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34213:23:0;;;;:7;;;;;;;;;;:23;34284:16;;;34298:1;34284:16;;;;;;;;34257:24;;34284:16;;34298:1;;34284:16;;;;;;;;;-1:-1:-1;;34321:9:0;;34345:15;;34321:46;;-1:-1:-1;;;34321:46:0;;34257:43;;-1:-1:-1;;;;;;34321:9:0;;;;:23;;:46;;34362:4;;34321:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34321:46:0;;;;;;;;;;;;:::i;:::-;34311:56;;34450:3;34432:15;;34413:16;;:34;;;;:::i;:::-;34399:7;34407:1;34399:10;;;;;;;;:::i;:::-;;;;;;;:49;;;;:::i;:::-;34398:55;;;;:::i;:::-;34385:7;34393:1;34385:10;;;;;;;;:::i;:::-;;;;;;;:68;;;;:::i;:::-;34378:75;;;;34052:409;:::o;8104:150::-;8017:6;;-1:-1:-1;;;;;8017:6:0;252:10;8017:22;8009:67;;;;-1:-1:-1;;;8009:67:0;;;;;;;:::i;:::-;8197:6:::1;::::0;8176:40:::1;::::0;8213:1:::1;::::0;-1:-1:-1;;;;;8197:6:0::1;::::0;8176:40:::1;::::0;8213:1;;8176:40:::1;8227:6;:19:::0;;-1:-1:-1;;;;;;8227:19:0::1;::::0;;8104:150::o;37138:506::-;37281:15;;-1:-1:-1;;;;;37281:15:0;37259:10;:38;37251:58;;;;-1:-1:-1;;;37251:58:0;;;;;;;:::i;:::-;37351:3;37328:19;:26;;37320:90;;;;-1:-1:-1;;;37320:90:0;;16725:2:1;37320:90:0;;;16707:21:1;16764:2;16744:18;;;16737:30;16803:34;16783:18;;;16776:62;-1:-1:-1;;;16854:18:1;;;16847:49;16913:19;;37320:90:0;16523:415:1;37320:90:0;37441:4;37429:8;:16;;:33;;;;-1:-1:-1;37449:13:0;37429:33;37421:94;;;;-1:-1:-1;;;37421:94:0;;17145:2:1;37421:94:0;;;17127:21:1;17184:2;17164:18;;;17157:30;17223:34;17203:18;;;17196:62;-1:-1:-1;;;17274:18:1;;;17267:46;17330:19;;37421:94:0;16943:412:1;37421:94:0;37526:15;:37;;;;37574:16;:27;37612:13;:24;;-1:-1:-1;;37612:24:0;;;;;;;;;;37138:506::o;18792:269::-;8017:6;;-1:-1:-1;;;;;8017:6:0;252:10;8017:22;8009:67;;;;-1:-1:-1;;;8009:67:0;;;;;;;:::i;:::-;18846:14:::1;:22:::0;;-1:-1:-1;;18846:22:0::1;::::0;;18879:20:::1;:28:::0;;-1:-1:-1;;18879:28:0::1;::::0;;4432:12;;18918::::1;:28:::0;4432:12;;18957:13:::1;:29:::0;4432:12;;18997:9:::1;:25:::0;19038:15:::1;::::0;::::1;::::0;;;::::1;18792:269::o:0;21549:319::-;21661:15;;-1:-1:-1;;;;;21661:15:0;21639:10;:38;21631:58;;;;-1:-1:-1;;;21631:58:0;;;;;;;:::i;:::-;21704:4;21700:104;;21742:6;;-1:-1:-1;;;;;21742:6:0;;;21732:16;;;;21724:68;;;;-1:-1:-1;;;21724:68:0;;17562:2:1;21724:68:0;;;17544:21:1;17601:2;17581:18;;;17574:30;17640:34;17620:18;;;17613:62;-1:-1:-1;;;17691:18:1;;;17684:37;17738:19;;21724:68:0;17360:403:1;21724:68:0;-1:-1:-1;;;;;21814:39:0;;;;;;;;:31;:39;;;;;:46;;-1:-1:-1;;21814:46:0;;;;;;;;;;21549:319::o;42566:546::-;42647:15;;-1:-1:-1;;;;;42647:15:0;42625:10;:38;42617:58;;;;-1:-1:-1;;;42617:58:0;;;;;;;:::i;:::-;42713:29;:27;:29::i;:::-;42694:15;:48;;:85;;;;;42778:1;42746:29;:27;:29::i;:::-;:33;42694:85;42686:120;;;;-1:-1:-1;;;42686:120:0;;17970:2:1;42686:120:0;;;17952:21:1;18009:2;17989:18;;;17982:30;-1:-1:-1;;;18028:18:1;;;18021:52;18090:18;;42686:120:0;17768:346:1;42686:120:0;42846:1;42817:26;:30;;;42858:24;:32;;-1:-1:-1;;42858:32:0;;;42978:16;;42942:6;;42927:48;;-1:-1:-1;;;42927:48:0;;42969:4;42927:48;;;913:51:1;42997:3:0;;-1:-1:-1;;;;;42942:6:0;;;;42927:33;;886:18:1;42927:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:67;;;;:::i;:::-;:73;;;;:::i;:::-;43040:1;43021:16;:20;43061:6;;43054:50;;-1:-1:-1;;;43054:50:0;;43078:10;43054:50;;;18482:51:1;18549:18;;;18542:34;;;42903:97:0;;-1:-1:-1;;;;;;43061:6:0;;43054:23;;18455:18:1;;43054:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42606:506;42566:546::o;22421:389::-;8017:6;;-1:-1:-1;;;;;8017:6:0;252:10;8017:22;8009:67;;;;-1:-1:-1;;;8009:67:0;;;;;;;:::i;:::-;22537:14:::1;:29:::0;;;22577:15:::1;:31:::0;;;22619:10:::1;:21:::0;;;22632:8;22666:32:::1;22595:13:::0;22554:12;22666:32:::1;:::i;:::-;:45;;;;:::i;:::-;22651:12;:60:::0;22765:3:::1;22746:16;13522:5;22746:2;:16;:::i;:::-;:22;;;;:::i;:::-;22730:12;;:38;;22722:80;;;::::0;-1:-1:-1;;;22722:80:0;;19039:2:1;22722:80:0::1;::::0;::::1;19021:21:1::0;19078:2;19058:18;;;19051:30;19117:31;19097:18;;;19090:59;19166:18;;22722:80:0::1;18837:353:1::0;22722:80:0::1;22421:389:::0;;;:::o;18309:427::-;8017:6;;-1:-1:-1;;;;;8017:6:0;252:10;8017:22;8009:67;;;;-1:-1:-1;;;8009:67:0;;;;;;;:::i;:::-;18397:13:::1;::::0;;;::::1;;;18396:14;18388:50;;;::::0;-1:-1:-1;;;18388:50:0;;19397:2:1;18388:50:0::1;::::0;::::1;19379:21:1::0;19436:2;19416:18;;;19409:30;19475:25;19455:18;;;19448:53;19518:18;;18388:50:0::1;19195:347:1::0;18388:50:0::1;18477:2;18457:16;:22;;18449:74;;;;-1:-1:-1::0;;;18449:74:0::1;;;;;;;:::i;:::-;18534:13;:20:::0;;-1:-1:-1;;18565:18:0;;;;;18615:12:::1;18594:18;:33:::0;;;18659:37:::1;::::0;18680:16;;18659:37:::1;:::i;:::-;18638:18;:58:::0;18712:16:::1;::::0;::::1;::::0;;;::::1;18309:427:::0;:::o;32668:440::-;32798:15;;32745:10;;-1:-1:-1;;;;;32798:15:0;32776:10;:38;32768:58;;;;-1:-1:-1;;;32768:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32845:20:0;;32837:59;;;;-1:-1:-1;;;32837:59:0;;20157:2:1;32837:59:0;;;20139:21:1;20196:2;20176:18;;;20169:30;20235:28;20215:18;;;20208:56;20281:18;;32837:59:0;19955:350:1;32837:59:0;32934:39;;-1:-1:-1;;;32934:39:0;;32967:4;32934:39;;;913:51:1;32907:24:0;;-1:-1:-1;;;;;32934:24:0;;;;;886:18:1;;32934:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32992:46;;-1:-1:-1;;;32992:46:0;;-1:-1:-1;;;;;18500:32:1;;;32992:46:0;;;18482:51:1;18549:18;;;18542:34;;;32907:66:0;;-1:-1:-1;32992:23:0;;;;;;18455:18:1;;32992:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33054;;;-1:-1:-1;;;;;18500:32:1;;18482:51;;18564:2;18549:18;;18542:34;;;32984:54:0;;-1:-1:-1;33054:46:0;;18455:18:1;33054:46:0;;;;;;;32757:351;32668:440;;;;:::o;19418:203::-;8017:6;;-1:-1:-1;;;;;8017:6:0;252:10;8017:22;8009:67;;;;-1:-1:-1;;;8009:67:0;;;;;;;:::i;:::-;19516:9:::1;19512:102;19531:20:::0;;::::1;19512:102;;;19598:4;19572:9;:23;19582:9;;19592:1;19582:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19572:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;19572:23:0;:30;;-1:-1:-1;;19572:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19553:3;::::1;::::0;::::1;:::i;:::-;;;;19512:102;;;;19418:203:::0;;;:::o;33754:290::-;33860:15;;-1:-1:-1;;;;;33860:15:0;33838:10;:38;33830:58;;;;-1:-1:-1;;;33830:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33907:31:0;;33899:81;;;;-1:-1:-1;;;33899:81:0;;20652:2:1;33899:81:0;;;20634:21:1;20691:2;20671:18;;;20664:30;20730:34;20710:18;;;20703:62;-1:-1:-1;;;20781:18:1;;;20774:35;20826:19;;33899:81:0;20450:401:1;33899:81:0;33991:16;:45;;-1:-1:-1;;;;;;33991:45:0;-1:-1:-1;;;;;33991:45:0;;;;;;;;;;33754:290::o;4131:104::-;4187:13;4220:7;4213:14;;;;;:::i;19307:103::-;19356:16;19391:11;19384:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19384:18:0;;;;;;;;;;;;;;;;;;;;;;19307:103;:::o;21876:293::-;8017:6;;-1:-1:-1;;;;;8017:6:0;252:10;8017:22;8009:67;;;;-1:-1:-1;;;8009:67:0;;;;;;;:::i;:::-;21985:6:::1;::::0;-1:-1:-1;;;;;21985:6:0;;::::1;21977:14:::0;;::::1;::::0;21969:84:::1;;;::::0;-1:-1:-1;;;21969:84:0;;21058:2:1;21969:84:0::1;::::0;::::1;21040:21:1::0;21097:2;21077:18;;;21070:30;21136:34;21116:18;;;21109:62;21207:27;21187:18;;;21180:55;21252:19;;21969:84:0::1;20856:421:1::0;21969:84:0::1;22064:41;22093:4;22099:5;22064:28;:41::i;:::-;22121:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;22121:40:0;::::1;::::0;::::1;::::0;;;::::1;21876:293:::0;;:::o;5837:413::-;252:10;5930:4;5974:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5974:34:0;;;;;;;;;;6027:35;;;;6019:85;;;;-1:-1:-1;;;6019:85:0;;21484:2:1;6019:85:0;;;21466:21:1;21523:2;21503:18;;;21496:30;21562:34;21542:18;;;21535:62;-1:-1:-1;;;21613:18:1;;;21606:35;21658:19;;6019:85:0;21282:401:1;6019:85:0;6140:67;252:10;6163:7;6191:15;6172:16;:34;6140:8;:67::i;:::-;-1:-1:-1;6238:4:0;;5837:413;-1:-1:-1;;;5837:413:0:o;4595:175::-;4681:4;4698:42;252:10;4722:9;4733:6;4698:9;:42::i;34725:2405::-;8017:6;;-1:-1:-1;;;;;8017:6:0;252:10;8017:22;8009:67;;;;-1:-1:-1;;;8009:67:0;;;;;;;:::i;:::-;34925:13:::1;::::0;;;::::1;;;34924:14;34916:70;;;::::0;-1:-1:-1;;;34916:70:0;;21890:2:1;34916:70:0::1;::::0;::::1;21872:21:1::0;21929:2;21909:18;;;21902:30;21968:34;21948:18;;;21941:62;-1:-1:-1;;;22019:18:1;;;22012:41;22070:19;;34916:70:0::1;21688:407:1::0;34916:70:0::1;35024:2;35005:16;:21;34997:73;;;;-1:-1:-1::0;;;34997:73:0::1;;;;;;;:::i;:::-;35107:15;:22;35089:7;:14;:40;35081:83;;;::::0;-1:-1:-1;;;35081:83:0;;22302:2:1;35081:83:0::1;::::0;::::1;22284:21:1::0;22341:2;22321:18;;;22314:30;22380:32;22360:18;;;22353:60;22430:18;;35081:83:0::1;22100:354:1::0;35081:83:0::1;35200:3;35183:7;:14;:20;35175:87;;;::::0;-1:-1:-1;;;35175:87:0;;22661:2:1;35175:87:0::1;::::0;::::1;22643:21:1::0;22700:2;22680:18;;;22673:30;22739:34;22719:18;;;22712:62;-1:-1:-1;;;22790:18:1;;;22783:52;22852:19;;35175:87:0::1;22459:418:1::0;35175:87:0::1;35375:9;35371:88;35390:19:::0;;::::1;35371:88;;;35452:4;35417:19;:32;35437:8;;35446:1;35437:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35417:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35417:32:0;:39;;-1:-1:-1;;35417:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35411:3;::::1;::::0;::::1;:::i;:::-;;;;35371:88;;;;35473:9;35469:80;35488:20:::0;;::::1;35469:80;;;35542:4;35516:9;:23;35526:9;;35536:1;35526:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35516:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35516:23:0;:30;;-1:-1:-1;;35516:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35510:3;::::1;::::0;::::1;:::i;:::-;;;;35469:80;;;;35563:9;35559:351;35582:7;:14;35578:1;:18;35559:351;;;35617:14;35634:7;35642:1;35634:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;35659:26:0;::::1;;::::0;;;:18:::1;:26:::0;;;;;;;:33;;-1:-1:-1;;35659:33:0::1;35688:4;35659:33;::::0;;35634:10;-1:-1:-1;35743:26:0::1;:15;35761:8;35743:26;:::i;:::-;-1:-1:-1::0;;;;;35707:33:0;::::1;;::::0;;;:25:::1;:33;::::0;;;;:62;;;;35823:16:::1;4326:2:::0;35823::::1;:16;:::i;:::-;35801:15;35817:1;35801:18;;;;;;;;:::i;:::-;;;;;;;:39;;;;:::i;:::-;35784:56;;35855:43;35871:10;35883:6;35891;35855:15;:43::i;:::-;35602:308;;35598:3;;;;;:::i;:::-;;;;35559:351;;;-1:-1:-1::0;35957:13:0::1;:20:::0;;-1:-1:-1;;35988:18:0;;;;;36038:12:::1;36017:18;:33:::0;;;36082:37:::1;::::0;36103:16;;36082:37:::1;:::i;:::-;36061:18;:58:::0;36135:16:::1;::::0;::::1;::::0;;;::::1;36209:9;;;;;;;;;-1:-1:-1::0;;;;;36209:9:0::1;-1:-1:-1::0;;;;;36209:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36197:43:0::1;;36249:4;36256:9;;;;;;;;;-1:-1:-1::0;;;;;36256:9:0::1;-1:-1:-1::0;;;;;36256:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36197:76;::::0;-1:-1:-1;;;;;;36197:76:0::1;::::0;;;;;;-1:-1:-1;;;;;23112:15:1;;;36197:76:0::1;::::0;::::1;23094:34:1::0;23164:15;;23144:18;;;23137:43;23029:18;;36197:76:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36188:6;:85:::0;;-1:-1:-1;;;;;;36188:85:0::1;-1:-1:-1::0;;;;;36188:85:0;;;::::1;::::0;;::::1;::::0;;36284:49:::1;::::0;-1:-1:-1;36284:26:0::1;:49::i;:::-;36381:6;::::0;36344:51:::1;::::0;-1:-1:-1;;;;;36381:6:0::1;::::0;36344:28:::1;:51::i;:::-;36473:1;36449:21;:25;36441:73;;;::::0;-1:-1:-1;;;36441:73:0;;23393:2:1;36441:73:0::1;::::0;::::1;23375:21:1::0;23432:2;23412:18;;;23405:30;23471:34;23451:18;;;23444:62;-1:-1:-1;;;23522:18:1;;;23515:33;23565:19;;36441:73:0::1;23191:399:1::0;36441:73:0::1;36560:1;36533:24;36551:4;36533:9;:24::i;:::-;:28;36525:79;;;::::0;-1:-1:-1;;;36525:79:0;;23797:2:1;36525:79:0::1;::::0;::::1;23779:21:1::0;23836:2;23816:18;;;23809:30;23875:34;23855:18;;;23848:62;-1:-1:-1;;;23926:18:1;;;23919:36;23972:19;;36525:79:0::1;23595:402:1::0;36525:79:0::1;36649:9;::::0;36617:69:::1;::::0;36634:4:::1;::::0;-1:-1:-1;;;;;36649:9:0::1;36661:24;36634:4:::0;36661:9:::1;:24::i;36617:69::-;36697:9;::::0;-1:-1:-1;;;;;36697:9:0::1;:25;36730:21;36775:4;36795:24;36775:4:::0;36795:9:::1;:24::i;:::-;36834:1;36877::::0;36928:4:::1;36948:15;36697:277;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;37024:4:0::1;37007:14;:21:::0;;;37039:12:::1;:19:::0;;;37069:15:::1;:22:::0;;;37102:13:::1;:20:::0;-1:-1:-1;;;;;;;;34725:2405:0:o;23223:341::-;23346:15;;-1:-1:-1;;;;;23346:15:0;23324:10;:38;23316:58;;;;-1:-1:-1;;;23316:58:0;;;;;;;:::i;:::-;23389:9;23385:172;23404:19;;;23385:172;;;23479:8;23444:19;:32;23464:8;;23473:1;23464:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23444:32:0;;;;;;;;;;;;-1:-1:-1;23444:32:0;:43;;-1:-1:-1;;23444:43:0;;;;;;;;;;23523:8;;23532:1;23523:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23507:38:0;;23536:8;23507:38;;;;1596:14:1;1589:22;1571:41;;1559:2;1544:18;;1431:187;23507:38:0;;;;;;;;23425:3;;;;:::i;:::-;;;;23385:172;;41761:508;41864:15;;-1:-1:-1;;;;;41864:15:0;41842:10;:38;41834:58;;;;-1:-1:-1;;;41834:58:0;;;;;;;:::i;:::-;41912:24;;;;41911:25;41903:87;;;;-1:-1:-1;;;41903:87:0;;25127:2:1;41903:87:0;;;25109:21:1;25166:2;25146:18;;;25139:30;25205:34;25185:18;;;25178:62;-1:-1:-1;;;25256:18:1;;;25249:47;25313:19;;41903:87:0;24925:413:1;41903:87:0;42027:3;42009:14;:21;;:43;;;;;42051:1;42034:14;:18;42009:43;42001:82;;;;-1:-1:-1;;;42001:82:0;;25545:2:1;42001:82:0;;;25527:21:1;25584:2;25564:18;;;25557:30;25623:28;25603:18;;;25596:56;25669:18;;42001:82:0;25343:350:1;42001:82:0;42123:15;42094:26;:44;42149:24;:31;;-1:-1:-1;;42149:31:0;42176:4;42149:31;;;42191:16;:33;;;42240:21;;;;42149:24;;42240:21;41761:508;:::o;23572:182::-;8017:6;;-1:-1:-1;;;;;8017:6:0;252:10;8017:22;8009:67;;;;-1:-1:-1;;;8009:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23657:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;23657:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23712:34;;1571:41:1;;;23712:34:0::1;::::0;1544:18:1;23712:34:0::1;;;;;;;23572:182:::0;;:::o;22818:397::-;8017:6;;-1:-1:-1;;;;;8017:6:0;252:10;8017:22;8009:67;;;;-1:-1:-1;;;8009:67:0;;;;;;;:::i;:::-;22934:15:::1;:30:::0;;;22975:16:::1;:32:::0;;;23018:11:::1;:22:::0;;;23032:8;23067:34:::1;22994:13:::0;22952:12;23067:34:::1;:::i;:::-;:48;;;;:::i;:::-;23051:13;:64:::0;23170:3:::1;23151:16;13522:5;23151:2;:16;:::i;:::-;:22;;;;:::i;:::-;23134:13;;:39;;23126:81;;;::::0;-1:-1:-1;;;23126:81:0;;25900:2:1;23126:81:0::1;::::0;::::1;25882:21:1::0;25939:2;25919:18;;;25912:30;25978:31;25958:18;;;25951:59;26027:18;;23126:81:0::1;25698:353:1::0;43120:279:0;43205:15;;-1:-1:-1;;;;;43205:15:0;43183:10;:38;43175:58;;;;-1:-1:-1;;;43175:58:0;;;;;;;:::i;:::-;43244:24;:32;;-1:-1:-1;;43244:32:0;;;43271:5;43287:16;:20;;;43318:26;:30;;;43364:27;;;;43271:5;43364:27;43120:279::o;20971:346::-;8017:6;;-1:-1:-1;;;;;8017:6:0;252:10;8017:22;8009:67;;;;-1:-1:-1;;;8009:67:0;;;;;;;:::i;:::-;21094:6:::1;21074:13;4432:12:::0;;;4344:108;21074:13:::1;:17;::::0;21090:1:::1;21074:17;:::i;:::-;:26;;;;:::i;:::-;21061:9;:39;;21053:105;;;::::0;-1:-1:-1;;;21053:105:0;;26258:2:1;21053:105:0::1;::::0;::::1;26240:21:1::0;26297:2;26277:18;;;26270:30;26336:34;26316:18;;;26309:62;-1:-1:-1;;;26387:18:1;;;26380:51;26448:19;;21053:105:0::1;26056:417:1::0;21053:105:0::1;21209:4;21189:13;4432:12:::0;;;4344:108;21189:13:::1;:17;::::0;21205:1:::1;21189:17;:::i;:::-;:24;;;;:::i;:::-;21176:9;:37;;21168:102;;;::::0;-1:-1:-1;;;21168:102:0;;26680:2:1;21168:102:0::1;::::0;::::1;26662:21:1::0;26719:2;26699:18;;;26692:30;26758:34;26738:18;;;26731:62;-1:-1:-1;;;26809:18:1;;;26802:50;26869:19;;21168:102:0::1;26478:416:1::0;21168:102:0::1;21280:18;:30:::0;20971:346::o;20305:300::-;8017:6;;-1:-1:-1;;;;;8017:6:0;252:10;8017:22;8009:67;;;;-1:-1:-1;;;8009:67:0;;;;;;;:::i;:::-;20428:16:::1;4326:2:::0;20428::::1;:16;:::i;:::-;20419:4;20399:13;4432:12:::0;;;4344:108;20399:13:::1;:17;::::0;20415:1:::1;20399:17;:::i;:::-;:24;;;;:::i;:::-;20398:47;;;;:::i;:::-;20388:6;:57;;20380:112;;;::::0;-1:-1:-1;;;20380:112:0;;27101:2:1;20380:112:0::1;::::0;::::1;27083:21:1::0;27140:2;27120:18;;;27113:30;27179:34;27159:18;;;27152:62;-1:-1:-1;;;27230:18:1;;;27223:40;27280:19;;20380:112:0::1;26899:406:1::0;20380:112:0::1;20529:16;4326:2:::0;20529::::1;:16;:::i;:::-;20519:27;::::0;:6;:27:::1;:::i;:::-;20503:13;:43:::0;;;20562:35:::1;::::0;160:25:1;;;20562:35:0::1;::::0;148:2:1;133:18;20562:35:0::1;14:177:1::0;40381:982:0;40502:15;;40456:4;;-1:-1:-1;;;;;40502:15:0;40480:10;:38;40472:58;;;;-1:-1:-1;;;40472:58:0;;;;;;;:::i;:::-;40590:19;;40567:20;;:42;;;;:::i;:::-;40549:15;:60;40541:106;;;;-1:-1:-1;;;40541:106:0;;27512:2:1;40541:106:0;;;27494:21:1;;;27531:18;;;27524:30;27590:34;27570:18;;;27563:62;27642:18;;40541:106:0;27310:356:1;40541:106:0;40677:4;40666:7;:15;;40658:70;;;;-1:-1:-1;;;40658:70:0;;27873:2:1;40658:70:0;;;27855:21:1;27912:2;27892:18;;;27885:30;27951:34;27931:18;;;27924:62;-1:-1:-1;;;28002:18:1;;;27995:40;28052:19;;40658:70:0;27671:406:1;40658:70:0;40762:15;40739:20;:38;40879:6;;40864:22;;-1:-1:-1;;;40864:22:0;;-1:-1:-1;;;;;40879:6:0;;;40864:22;;;913:51:1;40833:28:0;;40864:4;;:14;;886:18:1;;40864:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40833:53;-1:-1:-1;40937:20:0;40994:5;40960:31;40984:7;40833:53;40960:31;:::i;:::-;:39;;;;:::i;:::-;40937:62;-1:-1:-1;41093:16:0;;41089:102;;41141:6;;41125:54;;-1:-1:-1;;;;;41141:6:0;41157;41166:12;41125:15;:54::i;:::-;41304:6;;41322:11;;;-1:-1:-1;;;;;;41322:11:0;;;;-1:-1:-1;;;;;41304:6:0;;;;;;41322:9;;:11;;;;;41267:19;;41322:11;;;;;;;41267:19;41304:6;41322:11;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41351:4:0;;40381:982;-1:-1:-1;;;;;;;;40381:982:0:o;19888:98::-;8017:6;;-1:-1:-1;;;;;8017:6:0;252:10;8017:22;8009:67;;;;-1:-1:-1;;;8009:67:0;;;;;;;:::i;:::-;19950:20:::1;:28:::0;;-1:-1:-1;;19950:28:0::1;::::0;;19888:98::o;12408:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12408:28:0;;-1:-1:-1;12408:28:0;:::o;8262:244::-;8017:6;;-1:-1:-1;;;;;8017:6:0;252:10;8017:22;8009:67;;;;-1:-1:-1;;;8009:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8351:22:0;::::1;8343:73;;;::::0;-1:-1:-1;;;8343:73:0;;28284:2:1;8343:73:0::1;::::0;::::1;28266:21:1::0;28323:2;28303:18;;;28296:30;28362:34;28342:18;;;28335:62;-1:-1:-1;;;28413:18:1;;;28406:36;28459:19;;8343:73:0::1;28082:402:1::0;8343:73:0::1;8453:6;::::0;8432:38:::1;::::0;-1:-1:-1;;;;;8432:38:0;;::::1;::::0;8453:6:::1;::::0;8432:38:::1;::::0;8453:6:::1;::::0;8432:38:::1;8481:6;:17:::0;;-1:-1:-1;;;;;;8481:17:0::1;-1:-1:-1::0;;;;;8481:17:0;;;::::1;::::0;;;::::1;::::0;;8262:244::o;33179:219::-;33257:15;;-1:-1:-1;;;;;33257:15:0;33235:10;:38;33227:58;;;;-1:-1:-1;;;33227:58:0;;;;;;;:::i;:::-;33332;;33296:12;;33340:10;;33364:21;;33296:12;33332:58;33296:12;33332:58;33364:21;33340:10;33332:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19069:230;19141:15;;-1:-1:-1;;;;;19141:15:0;19119:10;:38;19111:58;;;;-1:-1:-1;;;19111:58:0;;;;;;;:::i;:::-;19197:3;19180:14;:20;;;19211:12;:18;;;19240:15;:21;;;19272:13;:19;19069:230::o;38916:1457::-;39022:15;;-1:-1:-1;;;;;39022:15:0;39000:10;:38;38992:58;;;;-1:-1:-1;;;38992:58:0;;;;;;;:::i;:::-;39079:4;39069:7;:14;;39061:80;;;;-1:-1:-1;;;39061:80:0;;28901:2:1;39061:80:0;;;28883:21:1;28940:2;28920:18;;;28913:30;28979:34;28959:18;;;28952:62;-1:-1:-1;;;29030:18:1;;;29023:51;29091:19;;39061:80:0;28699:417:1;39061:80:0;39202:19;;39184:37;;:15;:37;:::i;:::-;39160:20;;:61;;39152:87;;;;-1:-1:-1;;;39152:87:0;;29456:2:1;39152:87:0;;;29438:21:1;29495:2;29475:18;;;29468:30;-1:-1:-1;;;29514:18:1;;;29507:43;29567:18;;39152:87:0;29254:337:1;39152:87:0;39273:15;39250:20;:38;39326:6;;39319:39;;-1:-1:-1;;;39319:39:0;;39352:4;39319:39;;;913:51:1;39299:17:0;;-1:-1:-1;;;;;39326:6:0;;39319:24;;886:18:1;;39319:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39299:59;;39369:20;39392:24;39410:4;39392:9;:24::i;:::-;39369:47;-1:-1:-1;39427:16:0;39468:5;39446:19;39458:7;39446:9;:19;:::i;:::-;:27;;;;:::i;:::-;39620:6;;39644:9;;39613:52;;-1:-1:-1;;;39613:52:0;;-1:-1:-1;;;;;39644:9:0;;;39613:52;;;18482:51:1;18549:18;;;18542:34;;;39427:46:0;;-1:-1:-1;39512:21:0;;39620:6;;;39613:22;;18455:18:1;;39613:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;39711:9:0;;:234;;-1:-1:-1;;;39711:234:0;;-1:-1:-1;;;;;39711:9:0;;;;:28;;:234;;39762:4;;39782:8;;39711:9;;;;39762:4;;39919:15;;39711:234;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39958:25;40013:12;39986:24;40004:4;39986:9;:24::i;:::-;:39;;;;:::i;:::-;39958:67;-1:-1:-1;40039:21:0;;40036:118;;40076:66;40100:4;40115:6;40124:17;40076:15;:66::i;:::-;40166:23;40192:41;40216:17;40192:21;:41;:::i;:::-;40166:67;-1:-1:-1;40249:19:0;;40246:80;;40284:30;40298:15;40284:13;:30::i;:::-;40343:22;;40356:8;;40343:22;;;;;38981:1392;;;;;;38916:1457;:::o;7179:380::-;-1:-1:-1;;;;;7315:19:0;;7307:68;;;;-1:-1:-1;;;7307:68:0;;30660:2:1;7307:68:0;;;30642:21:1;30699:2;30679:18;;;30672:30;30738:34;30718:18;;;30711:62;-1:-1:-1;;;30789:18:1;;;30782:34;30833:19;;7307:68:0;30458:400:1;7307:68:0;-1:-1:-1;;;;;7394:21:0;;7386:68;;;;-1:-1:-1;;;7386:68:0;;31065:2:1;7386:68:0;;;31047:21:1;31104:2;31084:18;;;31077:30;31143:34;31123:18;;;31116:62;-1:-1:-1;;;31194:18:1;;;31187:32;31236:19;;7386:68:0;30863:398:1;7386:68:0;-1:-1:-1;;;;;7467:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7519:32;;160:25:1;;;7519:32:0;;133:18:1;7519:32:0;;;;;;;7179:380;;;:::o;23762:6248::-;-1:-1:-1;;;;;23860:18:0;;23852:68;;;;-1:-1:-1;;;23852:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23939:16:0;;23931:64;;;;-1:-1:-1;;;23931:64:0;;;;;;;:::i;:::-;24023:1;24014:6;:10;24006:52;;;;-1:-1:-1;;;24006:52:0;;32278:2:1;24006:52:0;;;32260:21:1;32317:2;32297:18;;;32290:30;32356:31;32336:18;;;32329:59;32405:18;;24006:52:0;32076:353:1;24006:52:0;24083:13;;;;;;;24079:132;;-1:-1:-1;;;;;24120:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;24149:23:0;;;;;;:19;:23;;;;;;;;24120:52;24112:87;;;;-1:-1:-1;;;24112:87:0;;32636:2:1;24112:87:0;;;32618:21:1;32675:2;32655:18;;;32648:30;-1:-1:-1;;;32694:18:1;;;32687:52;32756:18;;24112:87:0;32434:346:1;24112:87:0;30112:18;;30097:12;:33;24226:26;:43;;;;-1:-1:-1;24256:13:0;;;;;;;24226:43;24223:235;;;-1:-1:-1;;;;;24295:15:0;;;;;;:9;:15;;;;;;;;24294:16;:34;;;;-1:-1:-1;;;;;;24315:13:0;;;;;;:9;:13;;;;;;;;24314:14;24294:34;24293:53;;;-1:-1:-1;7955:6:0;;-1:-1:-1;;;;;24333:13:0;;;7955:6;;24333:13;24293:53;:78;;;-1:-1:-1;;;;;;24350:21:0;;24364:6;24350:21;24293:78;24285:161;;;;-1:-1:-1;;;24285:161:0;;32987:2:1;24285:161:0;;;32969:21:1;33026:2;33006:18;;;32999:30;33065:34;33045:18;;;33038:62;33136:34;33116:18;;;33109:62;-1:-1:-1;;;33187:19:1;;;33180:37;33234:19;;24285:161:0;32785:474:1;24285:161:0;-1:-1:-1;;;;;24473:24:0;;;;;;:18;:24;;;;;;;;24470:610;;;-1:-1:-1;;;;;24516:29:0;;;;;;:25;:29;;;;;;;;24513:556;;;-1:-1:-1;;;;;24623:31:0;;;;;;:25;:31;;;;;;24658:15;-1:-1:-1;24623:50:0;24615:78;;;;-1:-1:-1;;;24615:78:0;;33466:2:1;24615:78:0;;;33448:21:1;33505:2;33485:18;;;33478:30;-1:-1:-1;;;33524:18:1;;;33517:45;33579:18;;24615:78:0;33264:339:1;24615:78:0;24730:23;:21;:23::i;:::-;24720:6;:33;;24712:98;;;;-1:-1:-1;;;24712:98:0;;33810:2:1;24712:98:0;;;33792:21:1;33849:2;33829:18;;;33822:30;33888:34;33868:18;;;33861:62;-1:-1:-1;;;33939:18:1;;;33932:50;33999:19;;24712:98:0;33608:416:1;24712:98:0;24863:26;:15;24881:8;24863:26;:::i;:::-;-1:-1:-1;;;;;24829:31:0;;;;;;:25;:31;;;;;:60;24513:556;;;-1:-1:-1;;;;;24915:23:0;;;;;;:19;:23;;;;;;;;24911:158;;24958:95;;-1:-1:-1;;;24958:95:0;;34231:2:1;24958:95:0;;;34213:21:1;34270:2;34250:18;;;34243:30;34309:34;34289:18;;;34282:62;34380:34;34360:18;;;34353:62;-1:-1:-1;;;34431:19:1;;;34424:52;34493:19;;24958:95:0;34029:489:1;24911:158:0;25103:14;;;;;;;25100:1662;;;7955:6;;-1:-1:-1;;;;;25137:15:0;;;7955:6;;25137:15;;;;:32;;-1:-1:-1;7955:6:0;;-1:-1:-1;;;;;25156:13:0;;;7955:6;;25156:13;;25137:32;:52;;;;-1:-1:-1;;;;;;25173:16:0;;;;25137:52;:77;;;;-1:-1:-1;;;;;;25193:21:0;;25207:6;25193:21;;25137:77;:107;;;;-1:-1:-1;;;;;;25219:25:0;;;;;;:19;:25;;;;;;;;25218:26;25137:107;:135;;;;-1:-1:-1;;;;;;25249:23:0;;;;;;:19;:23;;;;;;;;25248:24;25137:135;25133:1618;;;25448:20;;;;25444:506;;;25510:9;;-1:-1:-1;;;;;25496:24:0;;;25510:9;;25496:24;;;;:49;;-1:-1:-1;25538:6:0;;-1:-1:-1;;;;;25524:21:0;;;25538:6;;25524:21;;25496:49;25492:439;;;25623:16;25638:1;25623:12;:16;:::i;:::-;25610:9;25581:39;;;;:28;:39;;;;;;:58;:113;;;;-1:-1:-1;25678:16:0;25693:1;25678:12;:16;:::i;:::-;-1:-1:-1;;;;;25643:32:0;;;;;;:28;:32;;;;;;:51;25581:113;25573:179;;;;-1:-1:-1;;;25573:179:0;;34725:2:1;25573:179:0;;;34707:21:1;34764:2;34744:18;;;34737:30;34803:34;34783:18;;;34776:62;-1:-1:-1;;;34854:18:1;;;34847:51;34915:19;;25573:179:0;34523:417:1;25573:179:0;25808:9;25779:39;;;;:28;:39;;;;;;25821:12;25779:54;;;;-1:-1:-1;;;;;25860:32:0;;;;;;:47;25492:439;-1:-1:-1;;;;;26019:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;26055:35:0;;;;;;:31;:35;;;;;;;;26054:36;26019:71;26015:721;;;26133:12;;26123:6;:22;;26115:75;;;;-1:-1:-1;;;26115:75:0;;35147:2:1;26115:75:0;;;35129:21:1;35186:2;35166:18;;;35159:30;35225:34;35205:18;;;35198:62;-1:-1:-1;;;35276:18:1;;;35269:38;35324:19;;26115:75:0;34945:404:1;26115:75:0;26247:9;;26230:13;26240:2;26230:9;:13::i;:::-;26221:22;;:6;:22;:::i;:::-;:35;;26213:72;;;;-1:-1:-1;;;26213:72:0;;35556:2:1;26213:72:0;;;35538:21:1;35595:2;35575:18;;;35568:30;-1:-1:-1;;;35614:18:1;;;35607:54;35678:18;;26213:72:0;35354:348:1;26213:72:0;26015:721;;;-1:-1:-1;;;;;26362:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;26396:37:0;;;;;;:31;:37;;;;;;;;26395:38;26362:71;26358:378;;;26476:13;;26466:6;:23;;26458:78;;;;-1:-1:-1;;;26458:78:0;;35909:2:1;26458:78:0;;;35891:21:1;35948:2;35928:18;;;35921:30;35987:34;35967:18;;;35960:62;-1:-1:-1;;;36038:18:1;;;36031:40;36088:19;;26458:78:0;35707:406:1;26358:378:0;-1:-1:-1;;;;;26584:35:0;;;;;;:31;:35;;;;;;;;26579:157;;26678:9;;26661:13;26671:2;26661:9;:13::i;:::-;26652:22;;:6;:22;:::i;:::-;:35;;26644:72;;;;-1:-1:-1;;;26644:72:0;;35556:2:1;26644:72:0;;;35538:21:1;35595:2;35575:18;;;35568:30;-1:-1:-1;;;35614:18:1;;;35607:54;35678:18;;26644:72:0;35354:348:1;26644:72:0;26774:28;26805:24;26823:4;26805:9;:24::i;:::-;26889:18;;26774:55;;-1:-1:-1;26865:42:0;;;;;;;26923:22;;-1:-1:-1;26934:11:0;;;;;;;26923:22;:35;;;;-1:-1:-1;26950:8:0;;;;26949:9;26923:35;:71;;;;-1:-1:-1;;;;;;26963:31:0;;;;;;:25;:31;;;;;;;;26962:32;26923:71;:101;;;;-1:-1:-1;;;;;;26999:25:0;;;;;;:19;:25;;;;;;;;26998:26;26923:101;:129;;;;-1:-1:-1;;;;;;27029:23:0;;;;;;:19;:23;;;;;;;;27028:24;26923:129;26920:232;;;27069:8;:15;;-1:-1:-1;;27069:15:0;27080:4;27069:15;;;27099:10;:8;:10::i;:::-;27124:8;:16;;-1:-1:-1;;27124:16:0;;;26920:232;27168:8;;;;27167:9;:42;;;;-1:-1:-1;;;;;;27180:29:0;;;;;;:25;:29;;;;;;;;27167:42;:59;;;;-1:-1:-1;27213:13:0;;;;27167:59;:114;;;;;27266:15;;27249:14;;:32;;;;:::i;:::-;27230:15;:51;;27167:114;:144;;;;-1:-1:-1;;;;;;27286:25:0;;;;;;:19;:25;;;;;;;;27285:26;27167:144;27164:204;;;27327:29;:27;:29::i;:::-;-1:-1:-1;;;;;27498:25:0;;27380:12;27498:25;;;:19;:25;;;;;;27395:4;;27498:25;;;:52;;-1:-1:-1;;;;;;27527:23:0;;;;;;:19;:23;;;;;;;;27498:52;27495:99;;;-1:-1:-1;27577:5:0;27495:99;27614:12;27641:20;27755:7;27752:2205;;;30112:18;;30097:12;:33;27817:60;;;;-1:-1:-1;;;;;;27846:31:0;;;;;;:25;:31;;;;;;;;27817:60;:94;;;;-1:-1:-1;;;;;;27882:29:0;;;;;;:25;:29;;;;;;;;27881:30;27817:94;:122;;;;-1:-1:-1;;;;;;27916:23:0;;;;;;:19;:23;;;;;;;;27915:24;27817:122;:142;;;;;27958:1;27943:12;;:16;27817:142;27814:1832;;;30112:18;;30097:12;:33;27997:330;;28306:1;28290:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;27997:330:0;-1:-1:-1;;;;;28351:13:0;;;;;;:9;:13;;;;;;;;28347:210;;-1:-1:-1;;;;;28388:13:0;;;;;;:9;:13;;;;;:20;;-1:-1:-1;;28388:20:0;28404:4;28388:20;;;;;;28431:10;:15;;28404:4;;28431:10;;:15;;28404:4;;28431:15;:::i;:::-;;;;-1:-1:-1;;28469:11:0;:20;;;;;;;-1:-1:-1;28469:20:0;;;;;;;;-1:-1:-1;;;;;;28469:20:0;-1:-1:-1;;;;;28469:20:0;;;;;;;;28517;;913:51:1;;;28517:20:0;;901:2:1;886:18;28517:20:0;;;;;;;28347:210;13522:5;28593:12;;28584:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;28577:42;;28682:12;;28664:15;;28657:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;28635:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;28758:12:0;;28741:14;;28734:21;;:4;:21;:::i;:::-;:36;;;;:::i;:::-;28713:17;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;28824:12:0;;28811:10;;28804:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;28789:47;;27814:1832;;;-1:-1:-1;;;;;28901:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;28950:1;28934:13;;:17;28901:50;28897:749;;;13522:5;28987:13;;28978:6;:22;;;;:::i;:::-;:36;;;;:::i;:::-;28971:43;;29081:13;;29062:16;;29055:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;29033:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;29159:13:0;;29141:15;;29134:22;;:4;:22;:::i;:::-;:38;;;;:::i;:::-;29113:17;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;29227:12:0;;29213:11;;29206:18;;:4;:18;:::i;28897:749::-;-1:-1:-1;;;;;29302:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;29352:1;29337:12;;:16;29302:51;29299:347;;;13522:5;29387:12;;29378:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;29371:42;;29476:12;;29458:15;;29451:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;29429:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;29552:12:0;;29535:14;;29528:21;;:4;:21;:::i;:::-;:36;;;;:::i;:::-;29507:17;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;29618:12:0;;29605:10;;29598:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;29583:47;;29299:347;29677:8;;29674:235;;29709:42;29725:4;29739;29746;29709:15;:42::i;:::-;29773:16;;29770:124;;29813:61;29837:4;29852:6;29861:12;29813:15;:61::i;:::-;29931:14;29941:4;29931:14;;:::i;:::-;;;27752:2205;29969:33;29985:4;29991:2;29995:6;29969:15;:33::i;:::-;23841:6169;;;;;23762:6248;;;:::o;31246:1414::-;31287:23;31313:24;31331:4;31313:9;:24::i;:::-;31423:18;;31481:17;;31287:50;;-1:-1:-1;31423:18:0;31393:27;31539:38;31481:17;31423:18;31539:38;:::i;:::-;31511:66;-1:-1:-1;31601:20:0;;;:46;;-1:-1:-1;31625:22:0;;31601:46;31598:60;;;31650:7;;;;31246:1414::o;31598:60::-;31691:18;;;:23;;;:::i;:::-;31673:15;:41;31670:113;;;31748:18;;;:23;;;:::i;:::-;31730:41;;31670:113;31795:12;31877:23;31962:1;31942:17;31921:18;;31903:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;31877:86;-1:-1:-1;31984:51:0;32001:33;31877:86;32001:15;:33;:::i;:::-;31984:16;:51::i;:::-;32239:18;;32078:21;;;;32057:18;;32239:20;;32258:1;;32239:20;:::i;:::-;32218:42;;:17;:42;:::i;:::-;32197:17;;32184:30;;:10;:30;:::i;:::-;:77;;;;:::i;:::-;32159:102;-1:-1:-1;32274:33:0;32159:102;32274:33;;:::i;:::-;;;32354:19;32332:18;;:41;;;;;;;:::i;:::-;;;;;;;;32405:18;32384:17;;:39;;;;;;;:::i;:::-;;;;-1:-1:-1;;32447:19:0;;;;;:42;;;32488:1;32470:15;:19;32447:42;32444:119;;;32505:46;32518:15;32535;32505:12;:46::i;:::-;32596:16;;32588:64;;-1:-1:-1;;;;;32596:16:0;;;;32626:21;;32588:64;;;;32626:21;32596:16;32588:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;31246:1414:0:o;22177:236::-;-1:-1:-1;;;;;22260:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;22260:39:0;;;;;;;22310;22260:31;:39;22310:26;:39::i;6258:614::-;-1:-1:-1;;;;;6398:20:0;;6390:70;;;;-1:-1:-1;;;6390:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6479:23:0;;6471:71;;;;-1:-1:-1;;;6471:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6579:17:0;;6555:21;6579:17;;;;;;;;;;;6615:23;;;;6607:74;;;;-1:-1:-1;;;6607:74:0;;36320:2:1;6607:74:0;;;36302:21:1;36359:2;36339:18;;;36332:30;36398:34;36378:18;;;36371:62;-1:-1:-1;;;36449:18:1;;;36442:36;36495:19;;6607:74:0;36118:402:1;6607:74:0;-1:-1:-1;;;;;6717:17:0;;;:9;:17;;;;;;;;;;;6737:22;;;6717:42;;6781:20;;;;;;;;:30;;6753:6;;6717:9;6781:30;;6753:6;;6781:30;:::i;:::-;;;;;;;;6846:9;-1:-1:-1;;;;;6829:35:0;6838:6;-1:-1:-1;;;;;6829:35:0;;6857:6;6829:35;;;;160:25:1;;148:2;133:18;;14:177;6829:35:0;;;;;;;;6379:493;6258:614;;;:::o;21329:207::-;-1:-1:-1;;;;;21417:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;21417:52:0;;;;;;;;;;21485:43;;36693:51:1;;;36760:18;;;36753:50;21485:43:0;;36666:18:1;21485:43:0;;;;;;;21329:207;;:::o;41371:382::-;41459:16;;;41473:1;41459:16;;;;;;;;41435:21;;41459:16;;;;;;;;-1:-1:-1;;41496:9:0;;:16;;;-1:-1:-1;;;41496:16:0;;;;41435:40;;-1:-1:-1;;;;;;41496:9:0;;;;:14;;-1:-1:-1;41496:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41486:4;41491:1;41486:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;41486:26:0;;;-1:-1:-1;;;;;41486:26:0;;;;;41541:4;41523;41528:1;41523:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41523:23:0;;;:7;;;;;;;;;:23;41559:9;;:186;;-1:-1:-1;;;41559:186:0;;:9;;;:60;;41627:11;;41559:186;;:9;;41670:4;;41697:6;;41719:15;;41559:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41424:329;41371:382;:::o;37656:1252::-;37742:15;37725:14;:32;;;37778:20;:38;37854:6;;37847:39;;-1:-1:-1;;;37847:39:0;;37880:4;37847:39;;;913:51:1;-1:-1:-1;;;;;;;37854:6:0;;37847:24;;886:18:1;;37847:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37827:59;;37897:20;37920:24;37938:4;37920:9;:24::i;:::-;37897:47;;37955:16;38005:5;37986:16;;37974:9;:28;;;;:::i;:::-;:36;;;;:::i;:::-;38157:6;;38181:9;;38150:52;;-1:-1:-1;;;38150:52:0;;-1:-1:-1;;;;;38181:9:0;;;38150:52;;;18482:51:1;18549:18;;;18542:34;;;37955:55:0;;-1:-1:-1;38049:21:0;;38157:6;;;38150:22;;18455:18:1;;38150:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;38248:9:0;;:234;;-1:-1:-1;;;38248:234:0;;-1:-1:-1;;;;;38248:9:0;;;;:28;;:234;;38299:4;;38319:8;;38248:9;;;;38299:4;;38456:15;;38248:234;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38495:25;38550:12;38523:24;38541:4;38523:9;:24::i;:::-;:39;;;;:::i;:::-;38495:67;-1:-1:-1;38576:21:0;;38573:118;;38613:66;38637:4;38652:6;38661:17;38613:15;:66::i;:::-;38703:23;38729:41;38753:17;38729:21;:41;:::i;:::-;38703:67;-1:-1:-1;38786:19:0;;38783:80;;38821:30;38835:15;38821:13;:30::i;:::-;38880:20;;38891:8;;38880:20;;;;;37704:1204;;;;;;37656:1252::o;30146:573::-;30298:16;;;30312:1;30298:16;;;;;;;;30274:21;;30298:16;;;;;;;;;;-1:-1:-1;30298:16:0;30274:40;;30343:4;30325;30330:1;30325:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30325:23:0;;;:7;;;;;;;;;;:23;;;;30369:9;;:16;;;-1:-1:-1;;;30369:16:0;;;;:9;;;;;:14;;:16;;;;;30325:7;;30369:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30359:4;30364:1;30359:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30359:26:0;;;:7;;;;;;;;;:26;30430:9;;30398:56;;30415:4;;30430:9;30442:11;30398:8;:56::i;:::-;30493:9;;:218;;-1:-1:-1;;;30493:218:0;;-1:-1:-1;;;;;30493:9:0;;;;:60;;:218;;30568:11;;30493:9;;30638:4;;30665;;30685:15;;30493:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30201:518;30146:573;:::o;30731:507::-;30911:9;;30879:56;;30896:4;;-1:-1:-1;;;;;30911:9:0;30923:11;30879:8;:56::i;:::-;30978:9;;:252;;-1:-1:-1;;;30978:252:0;;-1:-1:-1;;;;;30978:9:0;;;;:25;;31011:9;;30978:252;;31044:4;;31064:11;;30978:9;;;;31044:4;;31204:15;;30978:252;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30731:507;;:::o;196:548: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;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;975:131::-;-1:-1:-1;;;;;1050:31:1;;1040:42;;1030:70;;1096:1;1093;1086:12;1030:70;975:131;:::o;1111:315::-;1179:6;1187;1240:2;1228:9;1219:7;1215:23;1211:32;1208:52;;;1256:1;1253;1246:12;1208:52;1295:9;1282:23;1314:31;1339:5;1314:31;:::i;:::-;1364:5;1416:2;1401:18;;;;1388:32;;-1:-1:-1;;;1111:315:1:o;1623:247::-;1682:6;1735:2;1723:9;1714:7;1710:23;1706:32;1703:52;;;1751:1;1748;1741:12;1703:52;1790:9;1777:23;1809:31;1834:5;1809:31;:::i;:::-;1859:5;1623:247;-1:-1:-1;;;1623:247:1:o;1875:180::-;1934:6;1987:2;1975:9;1966:7;1962:23;1958:32;1955:52;;;2003:1;2000;1993:12;1955:52;-1:-1:-1;2026:23:1;;1875:180;-1:-1:-1;1875:180:1:o;2060:456::-;2137:6;2145;2153;2206:2;2194:9;2185:7;2181:23;2177:32;2174:52;;;2222:1;2219;2212:12;2174:52;2261:9;2248:23;2280:31;2305:5;2280:31;:::i;:::-;2330:5;-1:-1:-1;2387:2:1;2372:18;;2359:32;2400:33;2359:32;2400:33;:::i;:::-;2060:456;;2452:7;;-1:-1:-1;;;2506:2:1;2491:18;;;;2478:32;;2060:456::o;2918:118::-;3004:5;2997:13;2990:21;2983:5;2980:32;2970:60;;3026:1;3023;3016:12;3041:377;3115:6;3123;3131;3184:2;3172:9;3163:7;3159:23;3155:32;3152:52;;;3200:1;3197;3190:12;3152:52;3236:9;3223:23;3213:33;;3293:2;3282:9;3278:18;3265:32;3255:42;;3347:2;3336:9;3332:18;3319:32;3360:28;3382:5;3360:28;:::i;:::-;3407:5;3397:15;;;3041:377;;;;;:::o;3423:382::-;3488:6;3496;3549:2;3537:9;3528:7;3524:23;3520:32;3517:52;;;3565:1;3562;3555:12;3517:52;3604:9;3591:23;3623:31;3648:5;3623:31;:::i;:::-;3673:5;-1:-1:-1;3730:2:1;3715:18;;3702:32;3743:30;3702:32;3743:30;:::i;:::-;3792:7;3782:17;;;3423:382;;;;;:::o;3810:316::-;3887:6;3895;3903;3956:2;3944:9;3935:7;3931:23;3927:32;3924:52;;;3972:1;3969;3962:12;3924:52;-1:-1:-1;;3995:23:1;;;4065:2;4050:18;;4037:32;;-1:-1:-1;4116:2:1;4101:18;;;4088:32;;3810:316;-1:-1:-1;3810:316:1:o;4131:388::-;4199:6;4207;4260:2;4248:9;4239:7;4235:23;4231:32;4228:52;;;4276:1;4273;4266:12;4228:52;4315:9;4302:23;4334:31;4359:5;4334:31;:::i;:::-;4384:5;-1:-1:-1;4441:2:1;4426:18;;4413:32;4454:33;4413:32;4454:33;:::i;4524:367::-;4587:8;4597:6;4651:3;4644:4;4636:6;4632:17;4628:27;4618:55;;4669:1;4666;4659:12;4618:55;-1:-1:-1;4692:20:1;;4735:18;4724:30;;4721:50;;;4767:1;4764;4757:12;4721:50;4804:4;4796:6;4792:17;4780:29;;4864:3;4857:4;4847:6;4844:1;4840:14;4832:6;4828:27;4824:38;4821:47;4818:67;;;4881:1;4878;4871:12;4818:67;4524:367;;;;;:::o;4896:566::-;4988:6;4996;5004;5057:2;5045:9;5036:7;5032:23;5028:32;5025:52;;;5073:1;5070;5063:12;5025:52;5113:9;5100:23;5146:18;5138:6;5135:30;5132:50;;;5178:1;5175;5168:12;5132:50;5217:70;5279:7;5270:6;5259:9;5255:22;5217:70;:::i;:::-;5306:8;;-1:-1:-1;5191:96:1;-1:-1:-1;;5391:2:1;5376:18;;5363:32;5404:28;5363:32;5404:28;:::i;5467:461::-;5520:3;5558:5;5552:12;5585:6;5580:3;5573:19;5611:4;5640:2;5635:3;5631:12;5624:19;;5677:2;5670:5;5666:14;5698:1;5708:195;5722:6;5719:1;5716:13;5708:195;;;5787:13;;-1:-1:-1;;;;;5783:39:1;5771:52;;5843:12;;;;5878:15;;;;5819:1;5737:9;5708:195;;;-1:-1:-1;5919:3:1;;5467:461;-1:-1:-1;;;;;5467:461:1:o;5933:261::-;6112:2;6101:9;6094:21;6075:4;6132:56;6184:2;6173:9;6169:18;6161:6;6132:56;:::i;6199:127::-;6260:10;6255:3;6251:20;6248:1;6241:31;6291:4;6288:1;6281:15;6315:4;6312:1;6305:15;6331:275;6402:2;6396:9;6467:2;6448:13;;-1:-1:-1;;6444:27:1;6432:40;;6502:18;6487:34;;6523:22;;;6484:62;6481:88;;;6549:18;;:::i;:::-;6585:2;6578:22;6331:275;;-1:-1:-1;6331:275:1:o;6611:183::-;6671:4;6704:18;6696:6;6693:30;6690:56;;;6726:18;;:::i;:::-;-1:-1:-1;6771:1:1;6767:14;6783:4;6763:25;;6611:183::o;6799:662::-;6853:5;6906:3;6899:4;6891:6;6887:17;6883:27;6873:55;;6924:1;6921;6914:12;6873:55;6960:6;6947:20;6986:4;7010:60;7026:43;7066:2;7026:43;:::i;:::-;7010:60;:::i;:::-;7104:15;;;7190:1;7186:10;;;;7174:23;;7170:32;;;7135:12;;;;7214:15;;;7211:35;;;7242:1;7239;7232:12;7211:35;7278:2;7270:6;7266:15;7290:142;7306:6;7301:3;7298:15;7290:142;;;7372:17;;7360:30;;7410:12;;;;7323;;7290:142;;;-1:-1:-1;7450:5:1;6799:662;-1:-1:-1;;;;;;6799:662:1:o;7466:1915::-;7665:6;7673;7681;7689;7697;7705;7713;7766:3;7754:9;7745:7;7741:23;7737:33;7734:53;;;7783:1;7780;7773:12;7734:53;7823:9;7810:23;7852:18;7893:2;7885:6;7882:14;7879:34;;;7909:1;7906;7899:12;7879:34;7947:6;7936:9;7932:22;7922:32;;7992:7;7985:4;7981:2;7977:13;7973:27;7963:55;;8014:1;8011;8004:12;7963:55;8050:2;8037:16;8072:4;8096:60;8112:43;8152:2;8112:43;:::i;8096:60::-;8190:15;;;8272:1;8268:10;;;;8260:19;;8256:28;;;8221:12;;;;8296:19;;;8293:39;;;8328:1;8325;8318:12;8293:39;8352:11;;;;8372:217;8388:6;8383:3;8380:15;8372:217;;;8468:3;8455:17;8485:31;8510:5;8485:31;:::i;:::-;8529:18;;8405:12;;;;8567;;;;8372:217;;;8608:5;-1:-1:-1;;8651:18:1;;8638:32;;-1:-1:-1;;8682:16:1;;;8679:36;;;8711:1;8708;8701:12;8679:36;8734:63;8789:7;8778:8;8767:9;8763:24;8734:63;:::i;:::-;8724:73;;8844:2;8833:9;8829:18;8816:32;8806:42;;8901:2;8890:9;8886:18;8873:32;8857:48;;8930:2;8920:8;8917:16;8914:36;;;8946:1;8943;8936:12;8914:36;8985:72;9049:7;9038:8;9027:9;9023:24;8985:72;:::i;:::-;9076:8;;-1:-1:-1;8959:98:1;-1:-1:-1;9164:3:1;9149:19;;9136:33;;-1:-1:-1;9181:16:1;;;9178:36;;;9210:1;9207;9200:12;9178:36;;9249:72;9313:7;9302:8;9291:9;9287:24;9249:72;:::i;:::-;7466:1915;;;;-1:-1:-1;7466:1915:1;;-1:-1:-1;7466:1915:1;;;;9223:98;;-1:-1:-1;;;7466:1915:1:o;9386:380::-;9465:1;9461:12;;;;9508;;;9529:61;;9583:4;9575:6;9571:17;9561:27;;9529:61;9636:2;9628:6;9625:14;9605:18;9602:38;9599:161;;9682:10;9677:3;9673:20;9670:1;9663:31;9717:4;9714:1;9707:15;9745:4;9742:1;9735:15;9599:161;;9386:380;;;:::o;9771:356::-;9973:2;9955:21;;;9992:18;;;9985:30;10051:34;10046:2;10031:18;;10024:62;10118:2;10103:18;;9771:356::o;10903:127::-;10964:10;10959:3;10955:20;10952:1;10945:31;10995:4;10992:1;10985:15;11019:4;11016:1;11009:15;11035:168;11108:9;;;11139;;11156:15;;;11150:22;;11136:37;11126:71;;11177:18;;:::i;11208:422::-;11297:1;11340:5;11297:1;11354:270;11375:7;11365:8;11362:21;11354:270;;;11434:4;11430:1;11426:6;11422:17;11416:4;11413:27;11410:53;;;11443:18;;:::i;:::-;11493:7;11483:8;11479:22;11476:55;;;11513:16;;;;11476:55;11592:22;;;;11552:15;;;;11354:270;;;11358:3;11208:422;;;;;:::o;11635:806::-;11684:5;11714:8;11704:80;;-1:-1:-1;11755:1:1;11769:5;;11704:80;11803:4;11793:76;;-1:-1:-1;11840:1:1;11854:5;;11793:76;11885:4;11903:1;11898:59;;;;11971:1;11966:130;;;;11878:218;;11898:59;11928:1;11919:10;;11942:5;;;11966:130;12003:3;11993:8;11990:17;11987:43;;;12010:18;;:::i;:::-;-1:-1:-1;;12066:1:1;12052:16;;12081:5;;11878:218;;12180:2;12170:8;12167:16;12161:3;12155:4;12152:13;12148:36;12142:2;12132:8;12129:16;12124:2;12118:4;12115:12;12111:35;12108:77;12105:159;;;-1:-1:-1;12217:19:1;;;12249:5;;12105:159;12296:34;12321:8;12315:4;12296:34;:::i;:::-;12366:6;12362:1;12358:6;12354:19;12345:7;12342:32;12339:58;;;12377:18;;:::i;:::-;12415:20;;11635:806;-1:-1:-1;;;11635:806:1:o;12446:140::-;12504:5;12533:47;12574:4;12564:8;12560:19;12554:4;12533:47;:::i;12591:217::-;12631:1;12657;12647:132;;12701:10;12696:3;12692:20;12689:1;12682:31;12736:4;12733:1;12726:15;12764:4;12761:1;12754:15;12647:132;-1:-1:-1;12793:9:1;;12591:217::o;14042:125::-;14107:9;;;14128:10;;;14125:36;;;14141:18;;:::i;14172:330::-;14374:2;14356:21;;;14413:1;14393:18;;;14386:29;-1:-1:-1;;;14446:2:1;14431:18;;14424:37;14493:2;14478:18;;14172:330::o;14912:251::-;14982:6;15035:2;15023:9;15014:7;15010:23;15006:32;15003:52;;;15051:1;15048;15041:12;15003:52;15083:9;15077:16;15102:31;15127:5;15102:31;:::i;15168:127::-;15229:10;15224:3;15220:20;15217:1;15210:31;15260:4;15257:1;15250:15;15284:4;15281:1;15274:15;15300:332;15507:6;15496:9;15489:25;15550:2;15545;15534:9;15530:18;15523:30;15470:4;15570:56;15622:2;15611:9;15607:18;15599:6;15570:56;:::i;:::-;15562:64;15300:332;-1:-1:-1;;;;15300:332:1:o;15637:881::-;15732:6;15763:2;15806;15794:9;15785:7;15781:23;15777:32;15774:52;;;15822:1;15819;15812:12;15774:52;15855:9;15849:16;15888:18;15880:6;15877:30;15874:50;;;15920:1;15917;15910:12;15874:50;15943:22;;15996:4;15988:13;;15984:27;-1:-1:-1;15974:55:1;;16025:1;16022;16015:12;15974:55;16054:2;16048:9;16077:60;16093:43;16133:2;16093:43;:::i;16077:60::-;16171:15;;;16253:1;16249:10;;;;16241:19;;16237:28;;;16202:12;;;;16277:19;;;16274:39;;;16309:1;16306;16299:12;16274:39;16333:11;;;;16353:135;16369:6;16364:3;16361:15;16353:135;;;16435:10;;16423:23;;16386:12;;;;16466;;;;16353:135;;;16507:5;15637:881;-1:-1:-1;;;;;;;15637:881:1:o;18119:184::-;18189:6;18242:2;18230:9;18221:7;18217:23;18213:32;18210:52;;;18258:1;18255;18248:12;18210:52;-1:-1:-1;18281:16:1;;18119:184;-1:-1:-1;18119:184:1:o;18587:245::-;18654:6;18707:2;18695:9;18686:7;18682:23;18678:32;18675:52;;;18723:1;18720;18713:12;18675:52;18755:9;18749:16;18774:28;18796:5;18774:28;:::i;19547:403::-;19749:2;19731:21;;;19788:2;19768:18;;;19761:30;19827:34;19822:2;19807:18;;19800:62;-1:-1:-1;;;19893:2:1;19878:18;;19871:37;19940:3;19925:19;;19547:403::o;20310:135::-;20349:3;20370:17;;;20367:43;;20390:18;;:::i;:::-;-1:-1:-1;20437:1:1;20426:13;;20310:135::o;24002:607::-;-1:-1:-1;;;;;24361:15:1;;;24343:34;;24408:2;24393:18;;24386:34;;;;24451:2;24436:18;;24429:34;;;;24494:2;24479:18;;24472:34;;;;24543:15;;;24537:3;24522:19;;24515:44;24323:3;24575:19;;24568:35;;;;24292:3;24277:19;;24002:607::o;24614:306::-;24702:6;24710;24718;24771:2;24759:9;24750:7;24746:23;24742:32;24739:52;;;24787:1;24784;24777:12;24739:52;24816:9;24810:16;24800:26;;24866:2;24855:9;24851:18;24845:25;24835:35;;24910:2;24899:9;24895:18;24889:25;24879:35;;24614:306;;;;;:::o;29121:128::-;29188:9;;;29209:11;;;29206:37;;;29223:18;;:::i;30208:245::-;30287:6;30295;30348:2;30336:9;30327:7;30323:23;30319:32;30316:52;;;30364:1;30361;30354:12;30316:52;-1:-1:-1;;30387:16:1;;30443:2;30428:18;;;30422:25;30387:16;;30422:25;;-1:-1:-1;30208:245:1:o;31266:401::-;31468:2;31450:21;;;31507:2;31487:18;;;31480:30;31546:34;31541:2;31526:18;;31519:62;-1:-1:-1;;;31612:2:1;31597:18;;31590:35;31657:3;31642:19;;31266:401::o;31672:399::-;31874:2;31856:21;;;31913:2;31893:18;;;31886:30;31952:34;31947:2;31932:18;;31925:62;-1:-1:-1;;;32018:2:1;32003:18;;31996:33;32061:3;32046:19;;31672:399::o;36814:510::-;37085:6;37074:9;37067:25;37128:3;37123:2;37112:9;37108:18;37101:31;37048:4;37149:57;37201:3;37190:9;37186:19;37178:6;37149:57;:::i;:::-;-1:-1:-1;;;;;37242:32:1;;;;37237:2;37222:18;;37215:60;-1:-1:-1;37306:2:1;37291:18;37284:34;37141:65;36814:510;-1:-1:-1;;36814:510:1:o;37329:582::-;37628:6;37617:9;37610:25;37671:6;37666:2;37655:9;37651:18;37644:34;37714:3;37709:2;37698:9;37694:18;37687:31;37591:4;37735:57;37787:3;37776:9;37772:19;37764:6;37735:57;:::i;:::-;-1:-1:-1;;;;;37828:32:1;;;;37823:2;37808:18;;37801:60;-1:-1:-1;37892:3:1;37877:19;37870:35;37727:65;37329:582;-1:-1:-1;;;37329:582:1:o

Swarm Source

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