ETH Price: $2,477.90 (-1.55%)

Token

Prospective (Prospective)
 

Overview

Max Total Supply

100,000,000 Prospective

Holders

32

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,878,120 Prospective

Value
$0.00
0xf5ED93A0f130dCa0fd6217A8928C6248c5f54d7d
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:
Prospective

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/**

                          $Prospective

- Dynamic lp to mc tax - Completely automated algorithm.
 Designed to balance the tax distribution equal to market cap/liquidity ratio,
 called when specific thresholds are passed.

- The dynamic liquidity feature automatically gives a higher LP % as MC rises, and lower LP % as MC lowers.

- Pure $Futura fork!

- @ProspectivePortal




/**
*/



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

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

        emit Transfer(sender, recipient, amount);
    }

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

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

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable;
    function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function removeLiquidityETH(address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external returns (uint amountToken, uint amountETH);
}

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

interface IPriceFeed {
    function latestAnswer() external returns (int256);
}

contract Prospective is ERC20, Ownable {

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

    IDexRouter public dexRouter;
    address public lpPair;

    IPriceFeed internal immutable priceFeed;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address public operationsAddress;
    address public devAddress;
    address public futureOwner;

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

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
     // 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 buyOperationsFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

    uint256 public constant FEE_DIVISOR = 10000;

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = false;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;
    
    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

    // floating liquidity settings
    bool public customLiquidityActive = true;
    uint256 public latestEthPrice = 0;
    uint256 public minimumBuyLiqPerc = 50;
    uint256 public minimumSellLiqPerc = 33;
    uint256 public maximumBuyLiqPerc = 80;
    uint256 public maximumSellLiqPerc = 50;
    uint256 public mcapComparisonValue = 10 * 1e6;

    
    /******************/

    // 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 UpdatedOperationsAddress(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);

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

        if(block.chainid == 1){
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
            _priceFeed = 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419;
        } else if(block.chainid == 4){
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // Rinkeby ETH: Uniswap V2
            _priceFeed = 0x8A753747A1Fa494EC906cE90E9f37563A8AF630e;
        } else if(block.chainid == 56){
            _dexRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BNB Chain: PCS V2
            _priceFeed = 0x0567F2323251f0Aab15c8dFb1967E4e8A7D42aeE;
        } else if(block.chainid == 97){
            _dexRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BNB Chain Testnet: PCS V2
            _priceFeed = 0x2514895c72f50D8bd4B4F9b1110F0D6bD2c97526;
        } else if(block.chainid == 42161){
            _dexRouter = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506; // Arbitrum: SushiSwap
            _priceFeed = 0x639Fe6ab55C921f74e7fac1ee960C0B6293ba612;
        } else {
            revert("Chain not configured");
        }

        priceFeed = IPriceFeed(_priceFeed);
        require(priceFeed.latestAnswer() > 0, "wrong price feed");

        // initialize router
        dexRouter = IDexRouter(_dexRouter);

        uint256 totalSupply = 100 * 1e6 * (10 ** decimals());
        
        maxBuyAmount = totalSupply * 5 / 250;
        maxSellAmount = totalSupply * 5 / 250;
        maxWallet = totalSupply * 1 / 50;
        swapTokensAtAmount = totalSupply * 25 / 100000;

        buyOperationsFee = 100;
        buyLiquidityFee = 300;
        buyDevFee = 200;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee;

        sellOperationsFee = 3333;
        sellLiquidityFee = 3333;
        sellDevFee = 3333;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee;

        if(block.chainid == 1){
            operationsAddress = address(0x0990520233267518e95b19a2BaFD9d892020d6ed);
            devAddress = address(0xE40bc15d0DA5fB368Be6A3c0dbfb5d9C1B28FfE1);
            futureOwner = address(0xF449464c27EA5CfE5C700a4596e472d4f773Cb57);
        } else {
            operationsAddress = address(msg.sender);
            devAddress = address(msg.sender);
            futureOwner = address(msg.sender);
        }

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

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

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

    receive() external payable {}

    function setCustomLiquidityActive(bool active) external onlyOwner {
        customLiquidityActive = active;
    }
    
    function enableTrading(uint256 blocksForPenalty, address _lpPair) external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        require(blocksForPenalty <= 10, "Cannot make penalty blocks more than 10");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        
        // set pair
        lpPair = _lpPair;
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);

        emit EnabledTrading();
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner {

        limitsInEffect = false;
        transferDelayEnabled = false;
        maxBuyAmount = totalSupply();
        maxSellAmount = totalSupply();

        emit RemovedLimits();
    }

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

    function massManageRestrictedWallets(address[] calldata accounts, bool restricted) external onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++){
            boughtEarly[accounts[i]] = restricted;
        }
    }

    // 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 updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 100) / (10 ** decimals()), "Cannot set max sell amount lower than 1%");
        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 airdropToWallets(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 300, "Can only airdrop 300 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            uint256 amount = amountsInTokens[i];
            super._transfer(msg.sender, wallet, amount);
        }
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != lpPair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

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

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

    function updateBuyFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 15 * FEE_DIVISOR / 100, "Must keep fees at 15% or less");
    }

    function updateSellFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 20 * FEE_DIVISOR / 100, "Must keep fees at 20% or less");
    }

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

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

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

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

        if(tradingActive){
            require((!boughtEarly[from] && !boughtEarly[to]) || to == owner() || to == address(0xdead), "Bots cannot transfer tokens in or out except to owner or dead address.");
        }
        
        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_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, "Max Wallet Exceeded");
                } 
                //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, "Max Wallet Exceeded");
                }
            }
        }

        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;

        if(customLiquidityActive && tradingActive && !swapping){
            latestEthPrice = uint256(priceFeed.latestAnswer());
            setCustomFees();
        }

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

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

                fees = amount * buyTotalFees / FEE_DIVISOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
            }

            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees / FEE_DIVISOR;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForOperations += fees * sellOperationsFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
            }

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / FEE_DIVISOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

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

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

    function swapTokensForEth(uint256 tokenAmount) private {

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

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

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

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

    function swapBack() private {

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

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

        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 ethForOperations = ethBalance * tokensForOperations / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForDev = ethBalance * tokensForDev / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForOperations + ethForDev;
            
        tokensForLiquidity = 0;
        tokensForOperations = 0;
        tokensForDev = 0;
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        (success,) = address(devAddress).call{value: ethForDev}("");

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

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

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

    function setOperationsAddress(address _operationsAddress) external onlyOwner {
        require(_operationsAddress != address(0), "_operationsAddress address cannot be 0");
        operationsAddress = payable(_operationsAddress);
        emit UpdatedOperationsAddress(_operationsAddress);
    }
    
    function setDevAddress(address _devAddress) external onlyOwner {
        require(_devAddress != address(0), "_operationsAddress address cannot be 0");
        devAddress = payable(_devAddress);
        emit UpdatedDevAddress(_devAddress);
    }

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

    function launch(uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");

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

        latestEthPrice = uint256(priceFeed.latestAnswer());

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

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

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

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

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

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

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

        emit AutoBurnLP(lpAmount);
    }

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

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

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

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

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

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

        emit ManualBurnLP(lpAmount);
    }

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

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

    function getMcap() public view returns (uint256){
        return (IERC20(dexRouter.WETH()).balanceOf(address(lpPair)) * 1e18 * latestEthPrice / balanceOf(address(lpPair)) * (totalSupply()-balanceOf(address(0xdead))) / 1e18 / 1e8); 
    }

    function customLiquiditySettings(bool _customLiquidityActive, uint256 _minimumBuyLiqPerc, uint256 _maximumBuyLiqPerc, uint256 _minimumSellLiqPerc, uint256 _maximumSellLiqPerc, uint256 _mcapComparisonValue) external onlyOwner {
        require(_minimumBuyLiqPerc <= 100 && _maximumBuyLiqPerc <= 100 && _minimumBuyLiqPerc <= _maximumBuyLiqPerc, "Buy settings incorrect");
        require(_minimumSellLiqPerc <= 100 && _maximumSellLiqPerc <= 100 && _minimumSellLiqPerc <= _maximumSellLiqPerc, "Sell settings incorrect");
        customLiquidityActive = _customLiquidityActive;
        minimumBuyLiqPerc = _minimumBuyLiqPerc;
        maximumBuyLiqPerc = _maximumBuyLiqPerc;
        minimumSellLiqPerc = _minimumSellLiqPerc;
        maximumSellLiqPerc = _maximumSellLiqPerc;
        mcapComparisonValue = _mcapComparisonValue;
    }

    function setCustomFees() internal {
        uint256 mcap = getMcap();
        uint256 newLiquidityPercBuy = (mcap / mcapComparisonValue) * maximumBuyLiqPerc / 1e18 + minimumBuyLiqPerc;
        uint256 newLiquidityPercSell = (mcap / mcapComparisonValue) * maximumSellLiqPerc / 1e18 + minimumSellLiqPerc;
        if(newLiquidityPercBuy > maximumBuyLiqPerc){
            newLiquidityPercBuy = maximumBuyLiqPerc;
        }
        if(newLiquidityPercSell > maximumSellLiqPerc){
            newLiquidityPercSell = maximumSellLiqPerc;
        }
        buyLiquidityFee = buyTotalFees * newLiquidityPercBuy / 100;
        buyOperationsFee = (buyTotalFees - buyLiquidityFee) * 33 / 100;
        buyDevFee = buyTotalFees - buyOperationsFee - buyLiquidityFee;
            
        sellLiquidityFee = sellTotalFees * newLiquidityPercSell / 100;
        sellOperationsFee = (sellTotalFees - sellLiquidityFee) * 50 / 100;
        sellDevFee = sellTotalFees - sellOperationsFee - sellLiquidityFee;
    }
}

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":[{"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":[{"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":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","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":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","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":"buyOperationsFee","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":"customLiquidityActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_customLiquidityActive","type":"bool"},{"internalType":"uint256","name":"_minimumBuyLiqPerc","type":"uint256"},{"internalType":"uint256","name":"_maximumBuyLiqPerc","type":"uint256"},{"internalType":"uint256","name":"_minimumSellLiqPerc","type":"uint256"},{"internalType":"uint256","name":"_maximumSellLiqPerc","type":"uint256"},{"internalType":"uint256","name":"_mcapComparisonValue","type":"uint256"}],"name":"customLiquiditySettings","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":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"uint256","name":"blocksForPenalty","type":"uint256"},{"internalType":"address","name":"_lpPair","type":"address"}],"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":"futureOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEarlyBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMcap","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":[],"name":"latestEthPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"massExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"restricted","type":"bool"}],"name":"massManageRestrictedWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","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":"maximumBuyLiqPerc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumSellLiqPerc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mcapComparisonValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumBuyLiqPerc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumSellLiqPerc","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":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","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":"bool","name":"active","type":"bool"}],"name":"setCustomLiquidityActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","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":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","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":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","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":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600f8190556014805462ffffff191660019081179091556016805460ff19908116831790915560196022556023805482169055610e106024556107086026556028805490911690911790556029556032602a8190556021602b556050602c55602d5562989680602e55600b60a08181526a50726f737065637469766560a81b60c081905261012060405260e092835261010052906003620000a38382620009e1565b506004620000b28282620009e1565b5050506000620000c76200064960201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062005f40833981519152908290a3503360008046600103620001445750737a250d5630b4cf539739df2c5dacb4c659f2488d9050735f4ec3df9cbd43714fe2740f5e3616155c5b841962000282565b46600403620001805750737a250d5630b4cf539739df2c5dacb4c659f2488d9050738a753747a1fa494ec906ce90e9f37563a8af630e62000282565b46603803620001bc57507310ed43c718714eb63d5aa57b78b54704e256024e9050730567f2323251f0aab15c8dfb1967e4e8a7d42aee62000282565b46606103620001f8575073d99d1c33f9fc3444f8101754abc46c52416550d19050732514895c72f50d8bd4b4f9b1110f0d6bd2c9752662000282565b4661a4b103620002355750731b02da8cb0d097eb8d57a175b88c7d8b47997506905073639fe6ab55c921f74e7fac1ee960c0b6293ba61262000282565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b0381166080819052604080516350d25bcd60e01b81529051600092916350d25bcd916004808301926020929190829003018187875af1158015620002d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f7919062000aad565b13620003395760405162461bcd60e51b815260206004820152601060248201526f1ddc9bdb99c81c1c9a58d9481999595960821b604482015260640162000279565b600980546001600160a01b0319166001600160a01b03841617905560006200035f601290565b6200036c90600a62000bdc565b6200037c906305f5e10062000bf4565b905060fa6200038d82600562000bf4565b62000399919062000c16565b60065560fa620003ab82600562000bf4565b620003b7919062000c16565b6007556032620003c982600162000bf4565b620003d5919062000c16565b600855620186a0620003e982601962000bf4565b620003f5919062000c16565b600b556064601881905561012c601981905560c8601a819055916200041b919062000c39565b62000427919062000c39565b601755610d05601c819055601d819055601e81905562000448818062000c39565b62000454919062000c39565b601b5546600103620004cc57600c80546001600160a01b0319908116730990520233267518e95b19a2bafd9d892020d6ed17909155600d8054821673e40bc15d0da5fb368be6a3c0dbfb5d9c1b28ffe1179055600e805490911673f449464c27ea5cfe5c700a4596e472d4f773cb57179055620004f9565b600c8054336001600160a01b03199182168117909255600d8054821683179055600e805490911690911790555b620005068460016200064d565b620005133060016200064d565b6200052261dead60016200064d565b600c546200053b906001600160a01b031660016200064d565b60095462000554906001600160a01b031660016200064d565b600e546200056d906001600160a01b031660016200064d565b6200057a846001620006b0565b62000587306001620006b0565b6200059661dead6001620006b0565b600c54620005af906001600160a01b03166001620006b0565b600954620005c8906001600160a01b03166001620006b0565b600e54620005e1906001600160a01b03166001620006b0565b62000606306001620005f4848262000bf4565b62000600919062000c16565b6200075a565b600e543060009081526020819052604090205462000634916001600160a01b03169062000600908462000c54565b6200063f846200083f565b5050505062000c6e565b3390565b6001600160a01b038216600081815260306020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6005546001600160a01b03163314620006fb5760405162461bcd60e51b8152602060048201819052602482015260008051602062005f20833981519152604482015260640162000279565b6001600160a01b0382166000818152602f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620007b25760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000279565b8060026000828254620007c6919062000c39565b90915550506001600160a01b03821660009081526020819052604081208054839290620007f590849062000c39565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b031633146200088a5760405162461bcd60e51b8152602060048201819052602482015260008051602062005f20833981519152604482015260640162000279565b6001600160a01b038116620008f15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000279565b6005546040516001600160a01b0380841692169060008051602062005f4083398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200096757607f821691505b6020821081036200098857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620009dc57600081815260208120601f850160051c81016020861015620009b75750805b601f850160051c820191505b81811015620009d857828155600101620009c3565b5050505b505050565b81516001600160401b03811115620009fd57620009fd6200093c565b62000a158162000a0e845462000952565b846200098e565b602080601f83116001811462000a4d576000841562000a345750858301515b600019600386901b1c1916600185901b178555620009d8565b600085815260208120601f198616915b8281101562000a7e5788860151825594840194600190910190840162000a5d565b508582101562000a9d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000ac057600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000b1e57816000190482111562000b025762000b0262000ac7565b8085161562000b1057918102915b93841c939080029062000ae2565b509250929050565b60008262000b375750600162000bd6565b8162000b465750600062000bd6565b816001811462000b5f576002811462000b6a5762000b8a565b600191505062000bd6565b60ff84111562000b7e5762000b7e62000ac7565b50506001821b62000bd6565b5060208310610133831016604e8410600b841016171562000baf575081810a62000bd6565b62000bbb838362000add565b806000190482111562000bd25762000bd262000ac7565b0290505b92915050565b600062000bed60ff84168362000b26565b9392505050565b600081600019048311821515161562000c115762000c1162000ac7565b500290565b60008262000c3457634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111562000c4f5762000c4f62000ac7565b500190565b60008282101562000c695762000c6962000ac7565b500390565b60805161528f62000c916000396000818161203f0152613b2d015261528f6000f3fe6080604052600436106104c45760003560e01c806388e765ff11610276578063c18bc1951161014f578063ea4cfe12116100c1578063f5648a4f11610085578063f5648a4f14610e0e578063f5f4a97d14610e23578063f637434214610e39578063f8b45b0514610e4f578063fb002c9714610e65578063fe72b27a14610e7b57600080fd5b8063ea4cfe1214610d82578063eb472fc414610da2578063ee40166e14610dc2578063f11a24d314610dd8578063f2fde38b14610dee57600080fd5b8063d85ba06311610113578063d85ba06314610cc5578063dc3f0d0f14610cdb578063dd62ed3e14610cfb578063e1ade1fe14610d41578063e2f4560514610d57578063e884f26014610d6d57600080fd5b8063c18bc19514610c35578063c876d0b914610c55578063d0d41fe114610c6f578063d0e7d33f14610c8f578063d257b34f14610ca557600080fd5b8063a4c82a00116101e8578063b9e9d1aa116101ac578063b9e9d1aa14610b81578063bbc0c74214610ba1578063bd5fb92014610bc0578063c024666814610be0578063c077ab4b14610c00578063c17b5b8c14610c1557600080fd5b8063a4c82a0014610ae5578063a62068ce14610afb578063a9059cbb14610b11578063b3e4c17914610b31578063b62496f514610b5157600080fd5b80639c3b4fdc1161023a5780639c3b4fdc14610a575780639e93ad8e14610a6d5780639ec22c0e14610a835780639fccce3214610a99578063a0d82dc514610aaf578063a457c2d714610ac557600080fd5b806388e765ff146109cc5780638da5cb5b146109e257806395d89b4114610a005780639a5bd2dd14610a155780639a7a23d614610a3757600080fd5b806342088f1e116103a85780636b0a894c1161031a578063751039fc116102de578063751039fc146109075780637571336a1461091c5780638095d5641461093c5780638366e79a1461095c57806385b12c7c1461097c57806385ecfd281461099c57600080fd5b80636b0a894c1461087c5780636ddd17131461089257806370a08231146108b2578063715018a6146108d2578063730c1888146108e757600080fd5b806351f205e41161036c57806351f205e4146107ee578063552fd1481461080357806358a6d531146108235780635a139dd41461083a57806366d602ae146108505780636a486a8e1461086657600080fd5b806342088f1e14610768578063452ed4f11461077e578063499b83941461079e5780634a62bb65146107be5780634f77f6c0146107d857600080fd5b8063199ffc72116104415780632c3e486c116104055780632c3e486c146106bc5780632e82f1a0146106d25780632f1ffebf146106ec578063313ce5671461070c57806339509351146107285780633ad10ef61461074857600080fd5b8063199ffc72146106305780631a8145bb146106465780632307b4411461065c57806323b872dd1461067c5780632be32b611461069c57600080fd5b80630d3cbb22116104885780630d3cbb221461059957806310d5de53146105bb5780631708da75146105eb57806318160ddd14610605578063184c16c51461061a57600080fd5b8063046f9c3f146104d057806306fdde03146104f95780630758d9241461051b578063095ea7b3146105535780630d3141e01461058357600080fd5b366104cb57005b600080fd5b3480156104dc57600080fd5b506104e6602a5481565b6040519081526020015b60405180910390f35b34801561050557600080fd5b5061050e610e9b565b6040516104f0919061493a565b34801561052757600080fd5b5060095461053b906001600160a01b031681565b6040516001600160a01b0390911681526020016104f0565b34801561055f57600080fd5b5061057361056e3660046149a7565b610f2d565b60405190151581526020016104f0565b34801561058f57600080fd5b506104e6602e5481565b3480156105a557600080fd5b506105b96105b43660046149e1565b610f44565b005b3480156105c757600080fd5b506105736105d6366004614a05565b60306020526000908152604090205460ff1681565b3480156105f757600080fd5b506028546105739060ff1681565b34801561061157600080fd5b506002546104e6565b34801561062657600080fd5b506104e660265481565b34801561063c57600080fd5b506104e660225481565b34801561065257600080fd5b506104e660205481565b34801561066857600080fd5b506105b9610677366004614af8565b610f8a565b34801561068857600080fd5b50610573610697366004614bba565b6110e3565b3480156106a857600080fd5b506105b96106b7366004614bfb565b61118d565b3480156106c857600080fd5b506104e660245481565b3480156106de57600080fd5b506023546105739060ff1681565b3480156106f857600080fd5b506105b9610707366004614c14565b6112a1565b34801561071857600080fd5b50604051601281526020016104f0565b34801561073457600080fd5b506105736107433660046149a7565b611416565b34801561075457600080fd5b50600d5461053b906001600160a01b031681565b34801561077457600080fd5b506104e660295481565b34801561078a57600080fd5b50600a5461053b906001600160a01b031681565b3480156107aa57600080fd5b506105b96107b9366004614a05565b611452565b3480156107ca57600080fd5b506014546105739060ff1681565b3480156107e457600080fd5b506104e6601c5481565b3480156107fa57600080fd5b506105b96114ec565b34801561080f57600080fd5b506105b961081e366004614c44565b6115f5565b34801561082f57600080fd5b506010544310610573565b34801561084657600080fd5b506104e660185481565b34801561085c57600080fd5b506104e660075481565b34801561087257600080fd5b506104e6601b5481565b34801561088857600080fd5b506104e660135481565b34801561089e57600080fd5b506014546105739062010000900460ff1681565b3480156108be57600080fd5b506104e66108cd366004614a05565b611696565b3480156108de57600080fd5b506105b96116b1565b3480156108f357600080fd5b506105b9610902366004614cca565b611725565b34801561091357600080fd5b506105b961184e565b34801561092857600080fd5b506105b9610937366004614cf8565b6118c5565b34801561094857600080fd5b506105b9610957366004614d26565b61198d565b34801561096857600080fd5b50610573610977366004614d52565b611a48565b34801561098857600080fd5b506105b9610997366004614bfb565b611c82565b3480156109a857600080fd5b506105736109b7366004614a05565b60116020526000908152604090205460ff1681565b3480156109d857600080fd5b506104e660065481565b3480156109ee57600080fd5b506005546001600160a01b031661053b565b348015610a0c57600080fd5b5061050e612115565b348015610a2157600080fd5b50610a2a612124565b6040516104f09190614dc4565b348015610a4357600080fd5b506105b9610a52366004614cf8565b612185565b348015610a6357600080fd5b506104e6601a5481565b348015610a7957600080fd5b506104e661271081565b348015610a8f57600080fd5b506104e660275481565b348015610aa557600080fd5b506104e660215481565b348015610abb57600080fd5b506104e6601e5481565b348015610ad157600080fd5b50610573610ae03660046149a7565b612279565b348015610af157600080fd5b506104e660255481565b348015610b0757600080fd5b506104e660105481565b348015610b1d57600080fd5b50610573610b2c3660046149a7565b612312565b348015610b3d57600080fd5b506105b9610b4c366004614dd7565b61231f565b348015610b5d57600080fd5b50610573610b6c366004614a05565b60316020526000908152604090205460ff1681565b348015610b8d57600080fd5b50600e5461053b906001600160a01b031681565b348015610bad57600080fd5b5060145461057390610100900460ff1681565b348015610bcc57600080fd5b506105b9610bdb366004614c44565b61243f565b348015610bec57600080fd5b506105b9610bfb366004614cf8565b612545565b348015610c0c57600080fd5b506104e66125ce565b348015610c2157600080fd5b506105b9610c30366004614d26565b61273b565b348015610c4157600080fd5b506105b9610c50366004614bfb565b6127f6565b348015610c6157600080fd5b506016546105739060ff1681565b348015610c7b57600080fd5b506105b9610c8a366004614a05565b612901565b348015610c9b57600080fd5b506104e6602d5481565b348015610cb157600080fd5b506105b9610cc0366004614bfb565b61299b565b348015610cd157600080fd5b506104e660175481565b348015610ce757600080fd5b506105b9610cf6366004614bfb565b612ae6565b348015610d0757600080fd5b506104e6610d16366004614d52565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d4d57600080fd5b506104e6602b5481565b348015610d6357600080fd5b506104e6600b5481565b348015610d7957600080fd5b506105b9612bf4565b348015610d8e57600080fd5b50600c5461053b906001600160a01b031681565b348015610dae57600080fd5b5061053b610dbd366004614bfb565b612c2a565b348015610dce57600080fd5b506104e6600f5481565b348015610de457600080fd5b506104e660195481565b348015610dfa57600080fd5b506105b9610e09366004614a05565b612c54565b348015610e1a57600080fd5b506105b9612d3f565b348015610e2f57600080fd5b506104e6602c5481565b348015610e4557600080fd5b506104e6601d5481565b348015610e5b57600080fd5b506104e660085481565b348015610e7157600080fd5b506104e6601f5481565b348015610e8757600080fd5b506105b9610e96366004614bfb565b612dab565b606060038054610eaa90614e23565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed690614e23565b8015610f235780601f10610ef857610100808354040283529160200191610f23565b820191906000526020600020905b815481529060010190602001808311610f0657829003601f168201915b5050505050905090565b6000610f3a3384846130a5565b5060015b92915050565b6005546001600160a01b03163314610f775760405162461bcd60e51b8152600401610f6e90614e5d565b60405180910390fd5b6028805460ff1916911515919091179055565b6005546001600160a01b03163314610fb45760405162461bcd60e51b8152600401610f6e90614e5d565b80518251146110055760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610f6e565b61012c8251106110765760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203330302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610f6e565b60005b82518110156110de57600083828151811061109657611096614e92565b6020026020010151905060008383815181106110b4576110b4614e92565b602002602001015190506110c93383836131c9565b505080806110d690614ebe565b915050611079565b505050565b60006110f084848461331e565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156111755760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610f6e565b61118285338584036130a5565b506001949350505050565b6005546001600160a01b031633146111b75760405162461bcd60e51b8152600401610f6e90614e5d565b6111c36012600a614fbb565b6103e86111cf60025490565b6111da906001614fca565b6111e49190614fe9565b6111ee9190614fe9565b81101561124f5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610f6e565b61125b6012600a614fbb565b6112659082614fca565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b031633146112cb5760405162461bcd60e51b8152600401610f6e90614e5d565b601454610100900460ff16156113235760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610f6e565b600a8211156113845760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610f6e565b6014805462ffff0019166201010017905543600f8190556113a690839061500b565b601055600a80546001600160a01b0319166001600160a01b0383169081179091556113d2906001613fc9565b600a546113e9906001600160a01b0316600161402c565b6040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a15050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610f3a91859061144d90869061500b565b6130a5565b6005546001600160a01b0316331461147c5760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b0381166114a25760405162461bcd60e51b8152600401610f6e90615023565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b031633146115165760405162461bcd60e51b8152600401610f6e90614e5d565b600b5461152230611696565b1015611598576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610f6e565b600a805460ff60a01b1916600160a01b1790556115b361405a565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461161f5760405162461bcd60e51b8152600401610f6e90614e5d565b60005b8281101561169057816011600086868581811061164157611641614e92565b90506020020160208101906116569190614a05565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061168881614ebe565b915050611622565b50505050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146116db5760405162461bcd60e51b8152600401610f6e90614e5d565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461174f5760405162461bcd60e51b8152600401610f6e90614e5d565b6102588310156117bd5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610f6e565b6103e882111580156117cd575060015b6118325760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610f6e565b6024929092556022556023805460ff1916911515919091179055565b6005546001600160a01b031633146118785760405162461bcd60e51b8152600401610f6e90614e5d565b6014805460ff199081169091556016805490911690556002546006556002546007556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146118ef5760405162461bcd60e51b8152600401610f6e90614e5d565b8061196257600a546001600160a01b03908116908316036119625760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610f6e565b6001600160a01b03919091166000908152603060205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146119b75760405162461bcd60e51b8152600401610f6e90614e5d565b60188390556019829055601a819055806119d1838561500b565b6119db919061500b565b60175560646119ed612710600f614fca565b6119f79190614fe9565b60175411156110de5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610f6e565b6005546000906001600160a01b03163314611a755760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b038316611acb5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610f6e565b6001600160a01b03831630141580611aeb5750601454610100900460ff16155b611b545760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610f6e565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611b9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbf9190615069565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611c12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c369190615082565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b03163314611cac5760405162461bcd60e51b8152600401610f6e90614e5d565b601454610100900460ff1615611d185760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610f6e565b600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8f919061509f565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e15919061509f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611e62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e86919061509f565b600a80546001600160a01b0319166001600160a01b03929092169182179055611eb0906001613fc9565b600a54611ec7906001600160a01b0316600161402c565b60004711611f235760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610f6e565b6000611f2e30611696565b11611f8a5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610f6e565b600954611fa59030906001600160a01b031661144d82611696565b6009546001600160a01b031663f305d7194730611fc181611696565b600e546040516001600160e01b031960e087901b168152611ff793929160009182916001600160a01b03169042906004016150bc565b60606040518083038185885af1158015612015573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061203a91906150f7565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b81526004016020604051808303816000875af115801561209d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c19190615069565b6029556014805462ffff0019166201010017905543600f8190556120e690829061500b565b6010556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b606060048054610eaa90614e23565b60606012805480602002602001604051908101604052809291908181526020018280548015610f2357602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161215e575050505050905090565b6005546001600160a01b031633146121af5760405162461bcd60e51b8152600401610f6e90614e5d565b600a546001600160a01b03908116908316036122335760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610f6e565b61223d828261402c565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156122fb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610f6e565b61230833858584036130a5565b5060019392505050565b6000610f3a33848461331e565b6005546001600160a01b031633146123495760405162461bcd60e51b8152600401610f6e90614e5d565b6064851115801561235b575060648411155b80156123675750838511155b6123ac5760405162461bcd60e51b8152602060048201526016602482015275109d5e481cd95d1d1a5b99dcc81a5b98dbdc9c9958dd60521b6044820152606401610f6e565b606483111580156123be575060648211155b80156123ca5750818311155b6124165760405162461bcd60e51b815260206004820152601760248201527f53656c6c2073657474696e677320696e636f72726563740000000000000000006044820152606401610f6e565b6028805460ff191696151596909617909555602a93909355602c91909155602b55602d55602e55565b6005546001600160a01b031633146124695760405162461bcd60e51b8152600401610f6e90614e5d565b60005b828110156116905781602f600086868581811061248b5761248b614e92565b90506020020160208101906124a09190614a05565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558383828181106124da576124da614e92565b90506020020160208101906124ef9190614a05565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78360405161252b911515815260200190565b60405180910390a28061253d81614ebe565b91505061246c565b6005546001600160a01b0316331461256f5760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b0382166000818152602f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b60006305f5e100670de0b6b3a76400006125e961dead611696565b6002546125f69190615125565b600a5461260b906001600160a01b0316611696565b602954600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612661573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612685919061509f565b600a546040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa1580156126ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f29190615069565b61270490670de0b6b3a7640000614fca565b61270e9190614fca565b6127189190614fe9565b6127229190614fca565b61272c9190614fe9565b6127369190614fe9565b905090565b6005546001600160a01b031633146127655760405162461bcd60e51b8152600401610f6e90614e5d565b601c839055601d829055601e8190558061277f838561500b565b612789919061500b565b601b55606461279b6127106014614fca565b6127a59190614fe9565b601b5411156110de5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610f6e565b6005546001600160a01b031633146128205760405162461bcd60e51b8152600401610f6e90614e5d565b61282c6012600a614fbb565b606461283760025490565b612842906001614fca565b61284c9190614fe9565b6128569190614fe9565b8110156128b65760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015267207468616e20312560c01b6064820152608401610f6e565b6128c26012600a614fbb565b6128cc9082614fca565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001611296565b6005546001600160a01b0316331461292b5760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b0381166129515760405162461bcd60e51b8152600401610f6e90615023565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f804ec39c1aea0b9f2615a34c3fa437b6ddda2c72e6848abf0f23955589a7ad5490600090a250565b6005546001600160a01b031633146129c55760405162461bcd60e51b8152600401610f6e90614e5d565b620186a06129d260025490565b6129dd906001614fca565b6129e79190614fe9565b811015612a545760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610f6e565b6103e8612a6060025490565b612a6b906001614fca565b612a759190614fe9565b811115612ae15760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610f6e565b600b55565b6005546001600160a01b03163314612b105760405162461bcd60e51b8152600401610f6e90614e5d565b612b1c6012600a614fbb565b6103e8612b2860025490565b612b33906001614fca565b612b3d9190614fe9565b612b479190614fe9565b811015612ba95760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610f6e565b612bb56012600a614fbb565b612bbf9082614fca565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001611296565b6005546001600160a01b03163314612c1e5760405162461bcd60e51b8152600401610f6e90614e5d565b6016805460ff19169055565b60128181548110612c3a57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b03163314612c7e5760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b038116612ce35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f6e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314612d695760405162461bcd60e51b8152600401610f6e90614e5d565b604051600090339047908381818185875af1925050503d8060008114611690576040519150601f19603f3d011682016040523d82523d6000602084013e611690565b6005546001600160a01b03163314612dd55760405162461bcd60e51b8152600401610f6e90614e5d565b611388811115612e455760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20353025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401610f6e565b602654612e529042615125565b6027541115612e935760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401610f6e565b42602755600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015612ee0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f049190615069565b90506000612f1130611696565b90506000612710612f228585614fca565b612f2c9190614fe9565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015612f86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612faa9190615082565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec90612fe590309086906001908190849042906004016150bc565b60408051808303816000875af1158015613003573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613027919061513c565b505060008361303530611696565b61303f9190615125565b90508015613054576130543061dead836131c9565b60006130608347615125565b905080156130715761307181614262565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b0383166131075760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f6e565b6001600160a01b0382166131685760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f6e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166131ef5760405162461bcd60e51b8152600401610f6e90615160565b6001600160a01b0382166132155760405162461bcd60e51b8152600401610f6e906151a5565b6001600160a01b0383166000908152602081905260409020548181101561328d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610f6e565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906132c490849061500b565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161331091815260200190565b60405180910390a350505050565b6001600160a01b0383166133445760405162461bcd60e51b8152600401610f6e90615160565b6001600160a01b03821661336a5760405162461bcd60e51b8152600401610f6e906151a5565b600081116133ba5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610f6e565b601454610100900460ff1661344d576001600160a01b0383166000908152602f602052604090205460ff168061340857506001600160a01b0382166000908152602f602052604090205460ff165b61344d5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610f6e565b601454610100900460ff161561354d576001600160a01b03831660009081526011602052604090205460ff1615801561349f57506001600160a01b03821660009081526011602052604090205460ff16155b806134b757506005546001600160a01b038381169116145b806134cc57506001600160a01b03821661dead145b61354d5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610f6e565b60145460ff161561393f576005546001600160a01b0384811691161480159061358457506005546001600160a01b03838116911614155b801561359857506001600160a01b03821615155b80156135af57506001600160a01b03821661dead14155b80156135d457506001600160a01b0383166000908152602f602052604090205460ff16155b80156135f957506001600160a01b0382166000908152602f602052604090205460ff16155b1561393f5760165460ff1615613712576009546001600160a01b038381169116148015906136355750600a546001600160a01b03838116911614155b1561371257613645600243615125565b326000908152601560205260409020541080156136835750613668600243615125565b6001600160a01b038316600090815260156020526040902054105b6136ed5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610f6e565b3260009081526015602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526031602052604090205460ff16801561375357506001600160a01b03821660009081526030602052604090205460ff16155b1561381a576006548111156137bb5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610f6e565b6008546137c783611696565b6137d1908361500b565b11156138155760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610f6e565b61393f565b6001600160a01b03821660009081526031602052604090205460ff16801561385b57506001600160a01b03831660009081526030602052604090205460ff16155b156138c5576007548111156138155760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610f6e565b6001600160a01b03821660009081526030602052604090205460ff1661393f576008546138f183611696565b6138fb908361500b565b111561393f5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610f6e565b600061394a30611696565b600b5490915081108015908190613969575060145462010000900460ff165b801561397f5750600a54600160a01b900460ff16155b80156139a457506001600160a01b03851660009081526031602052604090205460ff16155b80156139c957506001600160a01b0385166000908152602f602052604090205460ff16155b80156139ee57506001600160a01b0384166000908152602f602052604090205460ff16155b15613a1c57600a805460ff60a01b1916600160a01b179055613a0e61405a565b600a805460ff60a01b191690555b600a54600160a01b900460ff16158015613a4e57506001600160a01b03841660009081526031602052604090205460ff165b8015613a5c575060235460ff165b8015613a775750602454602554613a73919061500b565b4210155b8015613a9c57506001600160a01b0385166000908152602f602052604090205460ff16155b15613aa957613aa96143ac565b6001600160a01b0385166000908152602f602052604090205460019060ff1680613aeb57506001600160a01b0385166000908152602f602052604090205460ff165b15613af4575060005b60285460009060ff168015613b105750601454610100900460ff165b8015613b265750600a54600160a01b900460ff16155b15613bba577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015613b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613baf9190615069565b602955613bba6145c6565b8115613fb55760105443108015613be957506001600160a01b03871660009081526031602052604090205460ff165b8015613c0e57506001600160a01b03861660009081526031602052604090205460ff16155b8015613c3357506001600160a01b0386166000908152602f602052604090205460ff16155b8015613c4157506000601754115b15613dfc576010544310613c6857600160066000828254613c629190615125565b90915550505b6001600160a01b03861660009081526011602052604090205460ff16613d48576001600160a01b0386166000908152601160205260408120805460ff191660019081179091556013805491929091613cc190849061500b565b9091555050601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b61271060175486613d599190614fca565b613d639190614fe9565b905060175460195482613d769190614fca565b613d809190614fe9565b60206000828254613d91919061500b565b9091555050601754601854613da69083614fca565b613db09190614fe9565b601f6000828254613dc1919061500b565b9091555050601754601a54613dd69083614fca565b613de09190614fe9565b60216000828254613df1919061500b565b90915550613f979050565b6001600160a01b03861660009081526031602052604090205460ff168015613e2657506000601b54115b15613eb957612710601b5486613e3c9190614fca565b613e469190614fe9565b9050601b54601d5482613e599190614fca565b613e639190614fe9565b60206000828254613e74919061500b565b9091555050601b54601c54613e899083614fca565b613e939190614fe9565b601f6000828254613ea4919061500b565b9091555050601b54601e54613dd69083614fca565b6001600160a01b03871660009081526031602052604090205460ff168015613ee357506000601754115b15613f975761271060175486613ef99190614fca565b613f039190614fe9565b905060175460195482613f169190614fca565b613f209190614fe9565b60206000828254613f31919061500b565b9091555050601754601854613f469083614fca565b613f509190614fe9565b601f6000828254613f61919061500b565b9091555050601754601a54613f769083614fca565b613f809190614fe9565b60216000828254613f91919061500b565b90915550505b8015613fa857613fa88730836131c9565b613fb28186615125565b94505b613fc08787876131c9565b50505050505050565b6001600160a01b038216600081815260306020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152603160205260409020805460ff191682151517905561223d8282613fc9565b600061406530611696565b90506000602154601f5460205461407c919061500b565b614086919061500b565b9050811580614093575080155b1561409c575050565b600b546140aa906014614fca565b8211156140c257600b546140bf906014614fca565b91505b600080600283602054866140d69190614fca565b6140e09190614fe9565b6140ea9190614fe9565b90506140fe6140f98286615125565b614741565b6020544790819060009061411490600290614fe9565b61411e9087615125565b601f5461412b9085614fca565b6141359190614fe9565b9050600060026020546141489190614fe9565b6141529088615125565b60215461415f9086614fca565b6141699190614fe9565b9050614175818361500b565b61417f9084615125565b60006020819055601f8190556021559250841580159061419f5750600083115b156141ae576141ae858461489b565b600d546040516001600160a01b03909116908290600081818185875af1925050503d80600081146141fb576040519150601f19603f3d011682016040523d82523d6000602084013e614200565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114614250576040519150601f19603f3d011682016040523d82523d6000602084013e614255565b606091505b5050505050505050505050565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156142cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f0919061509f565b8160008151811061430357614303614e92565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061433757614337614e92565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de9590849061437f90600090869061dead9042906004016151e8565b6000604051808303818588803b15801561439857600080fd5b505af1158015613fc0573d6000803e3d6000fd5b426025819055602755600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156143fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144229190615069565b9050600061442f30611696565b90506000612710602254846144449190614fca565b61444e9190614fe9565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af11580156144a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144cc9190615082565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec9061450790309086906001908190849042906004016150bc565b60408051808303816000875af1158015614525573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614549919061513c565b505060008361455730611696565b6145619190615125565b90508015614576576145763061dead836131c9565b60006145828347615125565b905080156145935761459381614262565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b60006145d06125ce565b90506000602a54670de0b6b3a7640000602c54602e54856145f19190614fe9565b6145fb9190614fca565b6146059190614fe9565b61460f919061500b565b90506000602b54670de0b6b3a7640000602d54602e54866146309190614fe9565b61463a9190614fca565b6146449190614fe9565b61464e919061500b565b9050602c5482111561466057602c5491505b602d5481111561466f5750602d545b60648260175461467f9190614fca565b6146899190614fe9565b601981905560175460649161469d91615125565b6146a8906021614fca565b6146b29190614fe9565b601881905560195460175490916146c891615125565b6146d29190615125565b601a55601b546064906146e6908390614fca565b6146f09190614fe9565b601d819055601b5460649161470491615125565b61470f906032614fca565b6147199190614fe9565b601c819055601d54601b54909161472f91615125565b6147399190615125565b601e55505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061477657614776614e92565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156147cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147f3919061509f565b8160018151811061480657614806614e92565b6001600160a01b03928316602091820292909201015260095461482c91309116846130a5565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac9479061486590859060009086903090429060040161521d565b600060405180830381600087803b15801561487f57600080fd5b505af1158015614893573d6000803e3d6000fd5b505050505050565b6009546148b39030906001600160a01b0316846130a5565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906148f090309087906000908190849042906004016150bc565b60606040518083038185885af115801561490e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061493391906150f7565b5050505050565b600060208083528351808285015260005b818110156149675785810183015185820160400152820161494b565b81811115614979576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146149a457600080fd5b50565b600080604083850312156149ba57600080fd5b82356149c58161498f565b946020939093013593505050565b80151581146149a457600080fd5b6000602082840312156149f357600080fd5b81356149fe816149d3565b9392505050565b600060208284031215614a1757600080fd5b81356149fe8161498f565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614a6157614a61614a22565b604052919050565b600067ffffffffffffffff821115614a8357614a83614a22565b5060051b60200190565b600082601f830112614a9e57600080fd5b81356020614ab3614aae83614a69565b614a38565b82815260059290921b84018101918181019086841115614ad257600080fd5b8286015b84811015614aed5780358352918301918301614ad6565b509695505050505050565b60008060408385031215614b0b57600080fd5b823567ffffffffffffffff80821115614b2357600080fd5b818501915085601f830112614b3757600080fd5b81356020614b47614aae83614a69565b82815260059290921b84018101918181019089841115614b6657600080fd5b948201945b83861015614b8d578535614b7e8161498f565b82529482019490820190614b6b565b96505086013592505080821115614ba357600080fd5b50614bb085828601614a8d565b9150509250929050565b600080600060608486031215614bcf57600080fd5b8335614bda8161498f565b92506020840135614bea8161498f565b929592945050506040919091013590565b600060208284031215614c0d57600080fd5b5035919050565b60008060408385031215614c2757600080fd5b823591506020830135614c398161498f565b809150509250929050565b600080600060408486031215614c5957600080fd5b833567ffffffffffffffff80821115614c7157600080fd5b818601915086601f830112614c8557600080fd5b813581811115614c9457600080fd5b8760208260051b8501011115614ca957600080fd5b60209283019550935050840135614cbf816149d3565b809150509250925092565b600080600060608486031215614cdf57600080fd5b83359250602084013591506040840135614cbf816149d3565b60008060408385031215614d0b57600080fd5b8235614d168161498f565b91506020830135614c39816149d3565b600080600060608486031215614d3b57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215614d6557600080fd5b8235614d708161498f565b91506020830135614c398161498f565b600081518084526020808501945080840160005b83811015614db95781516001600160a01b031687529582019590820190600101614d94565b509495945050505050565b6020815260006149fe6020830184614d80565b60008060008060008060c08789031215614df057600080fd5b8635614dfb816149d3565b9860208801359850604088013597606081013597506080810135965060a00135945092505050565b600181811c90821680614e3757607f821691505b602082108103614e5757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614ed057614ed0614ea8565b5060010190565b600181815b80851115614f12578160001904821115614ef857614ef8614ea8565b80851615614f0557918102915b93841c9390800290614edc565b509250929050565b600082614f2957506001610f3e565b81614f3657506000610f3e565b8160018114614f4c5760028114614f5657614f72565b6001915050610f3e565b60ff841115614f6757614f67614ea8565b50506001821b610f3e565b5060208310610133831016604e8410600b8410161715614f95575081810a610f3e565b614f9f8383614ed7565b8060001904821115614fb357614fb3614ea8565b029392505050565b60006149fe60ff841683614f1a565b6000816000190483118215151615614fe457614fe4614ea8565b500290565b60008261500657634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561501e5761501e614ea8565b500190565b60208082526026908201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60408201526507420626520360d41b606082015260800190565b60006020828403121561507b57600080fd5b5051919050565b60006020828403121561509457600080fd5b81516149fe816149d3565b6000602082840312156150b157600080fd5b81516149fe8161498f565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561510c57600080fd5b8351925060208401519150604084015190509250925092565b60008282101561513757615137614ea8565b500390565b6000806040838503121561514f57600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8481526080602082015260006152016080830186614d80565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061523c60a0830186614d80565b6001600160a01b039490941660608301525060800152939250505056fea264697066735822122089e51f24334e9ff85c8ddba61907e42cde36fe5bf5d0adf6c9cdf1dbc83e2ae764736f6c634300080f00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106104c45760003560e01c806388e765ff11610276578063c18bc1951161014f578063ea4cfe12116100c1578063f5648a4f11610085578063f5648a4f14610e0e578063f5f4a97d14610e23578063f637434214610e39578063f8b45b0514610e4f578063fb002c9714610e65578063fe72b27a14610e7b57600080fd5b8063ea4cfe1214610d82578063eb472fc414610da2578063ee40166e14610dc2578063f11a24d314610dd8578063f2fde38b14610dee57600080fd5b8063d85ba06311610113578063d85ba06314610cc5578063dc3f0d0f14610cdb578063dd62ed3e14610cfb578063e1ade1fe14610d41578063e2f4560514610d57578063e884f26014610d6d57600080fd5b8063c18bc19514610c35578063c876d0b914610c55578063d0d41fe114610c6f578063d0e7d33f14610c8f578063d257b34f14610ca557600080fd5b8063a4c82a00116101e8578063b9e9d1aa116101ac578063b9e9d1aa14610b81578063bbc0c74214610ba1578063bd5fb92014610bc0578063c024666814610be0578063c077ab4b14610c00578063c17b5b8c14610c1557600080fd5b8063a4c82a0014610ae5578063a62068ce14610afb578063a9059cbb14610b11578063b3e4c17914610b31578063b62496f514610b5157600080fd5b80639c3b4fdc1161023a5780639c3b4fdc14610a575780639e93ad8e14610a6d5780639ec22c0e14610a835780639fccce3214610a99578063a0d82dc514610aaf578063a457c2d714610ac557600080fd5b806388e765ff146109cc5780638da5cb5b146109e257806395d89b4114610a005780639a5bd2dd14610a155780639a7a23d614610a3757600080fd5b806342088f1e116103a85780636b0a894c1161031a578063751039fc116102de578063751039fc146109075780637571336a1461091c5780638095d5641461093c5780638366e79a1461095c57806385b12c7c1461097c57806385ecfd281461099c57600080fd5b80636b0a894c1461087c5780636ddd17131461089257806370a08231146108b2578063715018a6146108d2578063730c1888146108e757600080fd5b806351f205e41161036c57806351f205e4146107ee578063552fd1481461080357806358a6d531146108235780635a139dd41461083a57806366d602ae146108505780636a486a8e1461086657600080fd5b806342088f1e14610768578063452ed4f11461077e578063499b83941461079e5780634a62bb65146107be5780634f77f6c0146107d857600080fd5b8063199ffc72116104415780632c3e486c116104055780632c3e486c146106bc5780632e82f1a0146106d25780632f1ffebf146106ec578063313ce5671461070c57806339509351146107285780633ad10ef61461074857600080fd5b8063199ffc72146106305780631a8145bb146106465780632307b4411461065c57806323b872dd1461067c5780632be32b611461069c57600080fd5b80630d3cbb22116104885780630d3cbb221461059957806310d5de53146105bb5780631708da75146105eb57806318160ddd14610605578063184c16c51461061a57600080fd5b8063046f9c3f146104d057806306fdde03146104f95780630758d9241461051b578063095ea7b3146105535780630d3141e01461058357600080fd5b366104cb57005b600080fd5b3480156104dc57600080fd5b506104e6602a5481565b6040519081526020015b60405180910390f35b34801561050557600080fd5b5061050e610e9b565b6040516104f0919061493a565b34801561052757600080fd5b5060095461053b906001600160a01b031681565b6040516001600160a01b0390911681526020016104f0565b34801561055f57600080fd5b5061057361056e3660046149a7565b610f2d565b60405190151581526020016104f0565b34801561058f57600080fd5b506104e6602e5481565b3480156105a557600080fd5b506105b96105b43660046149e1565b610f44565b005b3480156105c757600080fd5b506105736105d6366004614a05565b60306020526000908152604090205460ff1681565b3480156105f757600080fd5b506028546105739060ff1681565b34801561061157600080fd5b506002546104e6565b34801561062657600080fd5b506104e660265481565b34801561063c57600080fd5b506104e660225481565b34801561065257600080fd5b506104e660205481565b34801561066857600080fd5b506105b9610677366004614af8565b610f8a565b34801561068857600080fd5b50610573610697366004614bba565b6110e3565b3480156106a857600080fd5b506105b96106b7366004614bfb565b61118d565b3480156106c857600080fd5b506104e660245481565b3480156106de57600080fd5b506023546105739060ff1681565b3480156106f857600080fd5b506105b9610707366004614c14565b6112a1565b34801561071857600080fd5b50604051601281526020016104f0565b34801561073457600080fd5b506105736107433660046149a7565b611416565b34801561075457600080fd5b50600d5461053b906001600160a01b031681565b34801561077457600080fd5b506104e660295481565b34801561078a57600080fd5b50600a5461053b906001600160a01b031681565b3480156107aa57600080fd5b506105b96107b9366004614a05565b611452565b3480156107ca57600080fd5b506014546105739060ff1681565b3480156107e457600080fd5b506104e6601c5481565b3480156107fa57600080fd5b506105b96114ec565b34801561080f57600080fd5b506105b961081e366004614c44565b6115f5565b34801561082f57600080fd5b506010544310610573565b34801561084657600080fd5b506104e660185481565b34801561085c57600080fd5b506104e660075481565b34801561087257600080fd5b506104e6601b5481565b34801561088857600080fd5b506104e660135481565b34801561089e57600080fd5b506014546105739062010000900460ff1681565b3480156108be57600080fd5b506104e66108cd366004614a05565b611696565b3480156108de57600080fd5b506105b96116b1565b3480156108f357600080fd5b506105b9610902366004614cca565b611725565b34801561091357600080fd5b506105b961184e565b34801561092857600080fd5b506105b9610937366004614cf8565b6118c5565b34801561094857600080fd5b506105b9610957366004614d26565b61198d565b34801561096857600080fd5b50610573610977366004614d52565b611a48565b34801561098857600080fd5b506105b9610997366004614bfb565b611c82565b3480156109a857600080fd5b506105736109b7366004614a05565b60116020526000908152604090205460ff1681565b3480156109d857600080fd5b506104e660065481565b3480156109ee57600080fd5b506005546001600160a01b031661053b565b348015610a0c57600080fd5b5061050e612115565b348015610a2157600080fd5b50610a2a612124565b6040516104f09190614dc4565b348015610a4357600080fd5b506105b9610a52366004614cf8565b612185565b348015610a6357600080fd5b506104e6601a5481565b348015610a7957600080fd5b506104e661271081565b348015610a8f57600080fd5b506104e660275481565b348015610aa557600080fd5b506104e660215481565b348015610abb57600080fd5b506104e6601e5481565b348015610ad157600080fd5b50610573610ae03660046149a7565b612279565b348015610af157600080fd5b506104e660255481565b348015610b0757600080fd5b506104e660105481565b348015610b1d57600080fd5b50610573610b2c3660046149a7565b612312565b348015610b3d57600080fd5b506105b9610b4c366004614dd7565b61231f565b348015610b5d57600080fd5b50610573610b6c366004614a05565b60316020526000908152604090205460ff1681565b348015610b8d57600080fd5b50600e5461053b906001600160a01b031681565b348015610bad57600080fd5b5060145461057390610100900460ff1681565b348015610bcc57600080fd5b506105b9610bdb366004614c44565b61243f565b348015610bec57600080fd5b506105b9610bfb366004614cf8565b612545565b348015610c0c57600080fd5b506104e66125ce565b348015610c2157600080fd5b506105b9610c30366004614d26565b61273b565b348015610c4157600080fd5b506105b9610c50366004614bfb565b6127f6565b348015610c6157600080fd5b506016546105739060ff1681565b348015610c7b57600080fd5b506105b9610c8a366004614a05565b612901565b348015610c9b57600080fd5b506104e6602d5481565b348015610cb157600080fd5b506105b9610cc0366004614bfb565b61299b565b348015610cd157600080fd5b506104e660175481565b348015610ce757600080fd5b506105b9610cf6366004614bfb565b612ae6565b348015610d0757600080fd5b506104e6610d16366004614d52565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d4d57600080fd5b506104e6602b5481565b348015610d6357600080fd5b506104e6600b5481565b348015610d7957600080fd5b506105b9612bf4565b348015610d8e57600080fd5b50600c5461053b906001600160a01b031681565b348015610dae57600080fd5b5061053b610dbd366004614bfb565b612c2a565b348015610dce57600080fd5b506104e6600f5481565b348015610de457600080fd5b506104e660195481565b348015610dfa57600080fd5b506105b9610e09366004614a05565b612c54565b348015610e1a57600080fd5b506105b9612d3f565b348015610e2f57600080fd5b506104e6602c5481565b348015610e4557600080fd5b506104e6601d5481565b348015610e5b57600080fd5b506104e660085481565b348015610e7157600080fd5b506104e6601f5481565b348015610e8757600080fd5b506105b9610e96366004614bfb565b612dab565b606060038054610eaa90614e23565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed690614e23565b8015610f235780601f10610ef857610100808354040283529160200191610f23565b820191906000526020600020905b815481529060010190602001808311610f0657829003601f168201915b5050505050905090565b6000610f3a3384846130a5565b5060015b92915050565b6005546001600160a01b03163314610f775760405162461bcd60e51b8152600401610f6e90614e5d565b60405180910390fd5b6028805460ff1916911515919091179055565b6005546001600160a01b03163314610fb45760405162461bcd60e51b8152600401610f6e90614e5d565b80518251146110055760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610f6e565b61012c8251106110765760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203330302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610f6e565b60005b82518110156110de57600083828151811061109657611096614e92565b6020026020010151905060008383815181106110b4576110b4614e92565b602002602001015190506110c93383836131c9565b505080806110d690614ebe565b915050611079565b505050565b60006110f084848461331e565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156111755760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610f6e565b61118285338584036130a5565b506001949350505050565b6005546001600160a01b031633146111b75760405162461bcd60e51b8152600401610f6e90614e5d565b6111c36012600a614fbb565b6103e86111cf60025490565b6111da906001614fca565b6111e49190614fe9565b6111ee9190614fe9565b81101561124f5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610f6e565b61125b6012600a614fbb565b6112659082614fca565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b031633146112cb5760405162461bcd60e51b8152600401610f6e90614e5d565b601454610100900460ff16156113235760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610f6e565b600a8211156113845760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610f6e565b6014805462ffff0019166201010017905543600f8190556113a690839061500b565b601055600a80546001600160a01b0319166001600160a01b0383169081179091556113d2906001613fc9565b600a546113e9906001600160a01b0316600161402c565b6040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a15050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610f3a91859061144d90869061500b565b6130a5565b6005546001600160a01b0316331461147c5760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b0381166114a25760405162461bcd60e51b8152600401610f6e90615023565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b031633146115165760405162461bcd60e51b8152600401610f6e90614e5d565b600b5461152230611696565b1015611598576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610f6e565b600a805460ff60a01b1916600160a01b1790556115b361405a565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461161f5760405162461bcd60e51b8152600401610f6e90614e5d565b60005b8281101561169057816011600086868581811061164157611641614e92565b90506020020160208101906116569190614a05565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061168881614ebe565b915050611622565b50505050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146116db5760405162461bcd60e51b8152600401610f6e90614e5d565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461174f5760405162461bcd60e51b8152600401610f6e90614e5d565b6102588310156117bd5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610f6e565b6103e882111580156117cd575060015b6118325760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610f6e565b6024929092556022556023805460ff1916911515919091179055565b6005546001600160a01b031633146118785760405162461bcd60e51b8152600401610f6e90614e5d565b6014805460ff199081169091556016805490911690556002546006556002546007556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146118ef5760405162461bcd60e51b8152600401610f6e90614e5d565b8061196257600a546001600160a01b03908116908316036119625760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610f6e565b6001600160a01b03919091166000908152603060205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146119b75760405162461bcd60e51b8152600401610f6e90614e5d565b60188390556019829055601a819055806119d1838561500b565b6119db919061500b565b60175560646119ed612710600f614fca565b6119f79190614fe9565b60175411156110de5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610f6e565b6005546000906001600160a01b03163314611a755760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b038316611acb5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610f6e565b6001600160a01b03831630141580611aeb5750601454610100900460ff16155b611b545760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610f6e565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611b9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbf9190615069565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611c12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c369190615082565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b03163314611cac5760405162461bcd60e51b8152600401610f6e90614e5d565b601454610100900460ff1615611d185760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610f6e565b600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8f919061509f565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e15919061509f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611e62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e86919061509f565b600a80546001600160a01b0319166001600160a01b03929092169182179055611eb0906001613fc9565b600a54611ec7906001600160a01b0316600161402c565b60004711611f235760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610f6e565b6000611f2e30611696565b11611f8a5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610f6e565b600954611fa59030906001600160a01b031661144d82611696565b6009546001600160a01b031663f305d7194730611fc181611696565b600e546040516001600160e01b031960e087901b168152611ff793929160009182916001600160a01b03169042906004016150bc565b60606040518083038185885af1158015612015573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061203a91906150f7565b5050507f0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b84196001600160a01b03166350d25bcd6040518163ffffffff1660e01b81526004016020604051808303816000875af115801561209d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c19190615069565b6029556014805462ffff0019166201010017905543600f8190556120e690829061500b565b6010556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b606060048054610eaa90614e23565b60606012805480602002602001604051908101604052809291908181526020018280548015610f2357602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161215e575050505050905090565b6005546001600160a01b031633146121af5760405162461bcd60e51b8152600401610f6e90614e5d565b600a546001600160a01b03908116908316036122335760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610f6e565b61223d828261402c565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156122fb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610f6e565b61230833858584036130a5565b5060019392505050565b6000610f3a33848461331e565b6005546001600160a01b031633146123495760405162461bcd60e51b8152600401610f6e90614e5d565b6064851115801561235b575060648411155b80156123675750838511155b6123ac5760405162461bcd60e51b8152602060048201526016602482015275109d5e481cd95d1d1a5b99dcc81a5b98dbdc9c9958dd60521b6044820152606401610f6e565b606483111580156123be575060648211155b80156123ca5750818311155b6124165760405162461bcd60e51b815260206004820152601760248201527f53656c6c2073657474696e677320696e636f72726563740000000000000000006044820152606401610f6e565b6028805460ff191696151596909617909555602a93909355602c91909155602b55602d55602e55565b6005546001600160a01b031633146124695760405162461bcd60e51b8152600401610f6e90614e5d565b60005b828110156116905781602f600086868581811061248b5761248b614e92565b90506020020160208101906124a09190614a05565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558383828181106124da576124da614e92565b90506020020160208101906124ef9190614a05565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78360405161252b911515815260200190565b60405180910390a28061253d81614ebe565b91505061246c565b6005546001600160a01b0316331461256f5760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b0382166000818152602f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b60006305f5e100670de0b6b3a76400006125e961dead611696565b6002546125f69190615125565b600a5461260b906001600160a01b0316611696565b602954600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612661573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612685919061509f565b600a546040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa1580156126ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f29190615069565b61270490670de0b6b3a7640000614fca565b61270e9190614fca565b6127189190614fe9565b6127229190614fca565b61272c9190614fe9565b6127369190614fe9565b905090565b6005546001600160a01b031633146127655760405162461bcd60e51b8152600401610f6e90614e5d565b601c839055601d829055601e8190558061277f838561500b565b612789919061500b565b601b55606461279b6127106014614fca565b6127a59190614fe9565b601b5411156110de5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610f6e565b6005546001600160a01b031633146128205760405162461bcd60e51b8152600401610f6e90614e5d565b61282c6012600a614fbb565b606461283760025490565b612842906001614fca565b61284c9190614fe9565b6128569190614fe9565b8110156128b65760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015267207468616e20312560c01b6064820152608401610f6e565b6128c26012600a614fbb565b6128cc9082614fca565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001611296565b6005546001600160a01b0316331461292b5760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b0381166129515760405162461bcd60e51b8152600401610f6e90615023565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f804ec39c1aea0b9f2615a34c3fa437b6ddda2c72e6848abf0f23955589a7ad5490600090a250565b6005546001600160a01b031633146129c55760405162461bcd60e51b8152600401610f6e90614e5d565b620186a06129d260025490565b6129dd906001614fca565b6129e79190614fe9565b811015612a545760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610f6e565b6103e8612a6060025490565b612a6b906001614fca565b612a759190614fe9565b811115612ae15760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610f6e565b600b55565b6005546001600160a01b03163314612b105760405162461bcd60e51b8152600401610f6e90614e5d565b612b1c6012600a614fbb565b6103e8612b2860025490565b612b33906001614fca565b612b3d9190614fe9565b612b479190614fe9565b811015612ba95760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610f6e565b612bb56012600a614fbb565b612bbf9082614fca565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001611296565b6005546001600160a01b03163314612c1e5760405162461bcd60e51b8152600401610f6e90614e5d565b6016805460ff19169055565b60128181548110612c3a57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b03163314612c7e5760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b038116612ce35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f6e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314612d695760405162461bcd60e51b8152600401610f6e90614e5d565b604051600090339047908381818185875af1925050503d8060008114611690576040519150601f19603f3d011682016040523d82523d6000602084013e611690565b6005546001600160a01b03163314612dd55760405162461bcd60e51b8152600401610f6e90614e5d565b611388811115612e455760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20353025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401610f6e565b602654612e529042615125565b6027541115612e935760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401610f6e565b42602755600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015612ee0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f049190615069565b90506000612f1130611696565b90506000612710612f228585614fca565b612f2c9190614fe9565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015612f86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612faa9190615082565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec90612fe590309086906001908190849042906004016150bc565b60408051808303816000875af1158015613003573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613027919061513c565b505060008361303530611696565b61303f9190615125565b90508015613054576130543061dead836131c9565b60006130608347615125565b905080156130715761307181614262565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b0383166131075760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f6e565b6001600160a01b0382166131685760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f6e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166131ef5760405162461bcd60e51b8152600401610f6e90615160565b6001600160a01b0382166132155760405162461bcd60e51b8152600401610f6e906151a5565b6001600160a01b0383166000908152602081905260409020548181101561328d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610f6e565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906132c490849061500b565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161331091815260200190565b60405180910390a350505050565b6001600160a01b0383166133445760405162461bcd60e51b8152600401610f6e90615160565b6001600160a01b03821661336a5760405162461bcd60e51b8152600401610f6e906151a5565b600081116133ba5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610f6e565b601454610100900460ff1661344d576001600160a01b0383166000908152602f602052604090205460ff168061340857506001600160a01b0382166000908152602f602052604090205460ff165b61344d5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610f6e565b601454610100900460ff161561354d576001600160a01b03831660009081526011602052604090205460ff1615801561349f57506001600160a01b03821660009081526011602052604090205460ff16155b806134b757506005546001600160a01b038381169116145b806134cc57506001600160a01b03821661dead145b61354d5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610f6e565b60145460ff161561393f576005546001600160a01b0384811691161480159061358457506005546001600160a01b03838116911614155b801561359857506001600160a01b03821615155b80156135af57506001600160a01b03821661dead14155b80156135d457506001600160a01b0383166000908152602f602052604090205460ff16155b80156135f957506001600160a01b0382166000908152602f602052604090205460ff16155b1561393f5760165460ff1615613712576009546001600160a01b038381169116148015906136355750600a546001600160a01b03838116911614155b1561371257613645600243615125565b326000908152601560205260409020541080156136835750613668600243615125565b6001600160a01b038316600090815260156020526040902054105b6136ed5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610f6e565b3260009081526015602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526031602052604090205460ff16801561375357506001600160a01b03821660009081526030602052604090205460ff16155b1561381a576006548111156137bb5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610f6e565b6008546137c783611696565b6137d1908361500b565b11156138155760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610f6e565b61393f565b6001600160a01b03821660009081526031602052604090205460ff16801561385b57506001600160a01b03831660009081526030602052604090205460ff16155b156138c5576007548111156138155760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610f6e565b6001600160a01b03821660009081526030602052604090205460ff1661393f576008546138f183611696565b6138fb908361500b565b111561393f5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610f6e565b600061394a30611696565b600b5490915081108015908190613969575060145462010000900460ff165b801561397f5750600a54600160a01b900460ff16155b80156139a457506001600160a01b03851660009081526031602052604090205460ff16155b80156139c957506001600160a01b0385166000908152602f602052604090205460ff16155b80156139ee57506001600160a01b0384166000908152602f602052604090205460ff16155b15613a1c57600a805460ff60a01b1916600160a01b179055613a0e61405a565b600a805460ff60a01b191690555b600a54600160a01b900460ff16158015613a4e57506001600160a01b03841660009081526031602052604090205460ff165b8015613a5c575060235460ff165b8015613a775750602454602554613a73919061500b565b4210155b8015613a9c57506001600160a01b0385166000908152602f602052604090205460ff16155b15613aa957613aa96143ac565b6001600160a01b0385166000908152602f602052604090205460019060ff1680613aeb57506001600160a01b0385166000908152602f602052604090205460ff165b15613af4575060005b60285460009060ff168015613b105750601454610100900460ff165b8015613b265750600a54600160a01b900460ff16155b15613bba577f0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b84196001600160a01b03166350d25bcd6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015613b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613baf9190615069565b602955613bba6145c6565b8115613fb55760105443108015613be957506001600160a01b03871660009081526031602052604090205460ff165b8015613c0e57506001600160a01b03861660009081526031602052604090205460ff16155b8015613c3357506001600160a01b0386166000908152602f602052604090205460ff16155b8015613c4157506000601754115b15613dfc576010544310613c6857600160066000828254613c629190615125565b90915550505b6001600160a01b03861660009081526011602052604090205460ff16613d48576001600160a01b0386166000908152601160205260408120805460ff191660019081179091556013805491929091613cc190849061500b565b9091555050601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b61271060175486613d599190614fca565b613d639190614fe9565b905060175460195482613d769190614fca565b613d809190614fe9565b60206000828254613d91919061500b565b9091555050601754601854613da69083614fca565b613db09190614fe9565b601f6000828254613dc1919061500b565b9091555050601754601a54613dd69083614fca565b613de09190614fe9565b60216000828254613df1919061500b565b90915550613f979050565b6001600160a01b03861660009081526031602052604090205460ff168015613e2657506000601b54115b15613eb957612710601b5486613e3c9190614fca565b613e469190614fe9565b9050601b54601d5482613e599190614fca565b613e639190614fe9565b60206000828254613e74919061500b565b9091555050601b54601c54613e899083614fca565b613e939190614fe9565b601f6000828254613ea4919061500b565b9091555050601b54601e54613dd69083614fca565b6001600160a01b03871660009081526031602052604090205460ff168015613ee357506000601754115b15613f975761271060175486613ef99190614fca565b613f039190614fe9565b905060175460195482613f169190614fca565b613f209190614fe9565b60206000828254613f31919061500b565b9091555050601754601854613f469083614fca565b613f509190614fe9565b601f6000828254613f61919061500b565b9091555050601754601a54613f769083614fca565b613f809190614fe9565b60216000828254613f91919061500b565b90915550505b8015613fa857613fa88730836131c9565b613fb28186615125565b94505b613fc08787876131c9565b50505050505050565b6001600160a01b038216600081815260306020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152603160205260409020805460ff191682151517905561223d8282613fc9565b600061406530611696565b90506000602154601f5460205461407c919061500b565b614086919061500b565b9050811580614093575080155b1561409c575050565b600b546140aa906014614fca565b8211156140c257600b546140bf906014614fca565b91505b600080600283602054866140d69190614fca565b6140e09190614fe9565b6140ea9190614fe9565b90506140fe6140f98286615125565b614741565b6020544790819060009061411490600290614fe9565b61411e9087615125565b601f5461412b9085614fca565b6141359190614fe9565b9050600060026020546141489190614fe9565b6141529088615125565b60215461415f9086614fca565b6141699190614fe9565b9050614175818361500b565b61417f9084615125565b60006020819055601f8190556021559250841580159061419f5750600083115b156141ae576141ae858461489b565b600d546040516001600160a01b03909116908290600081818185875af1925050503d80600081146141fb576040519150601f19603f3d011682016040523d82523d6000602084013e614200565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114614250576040519150601f19603f3d011682016040523d82523d6000602084013e614255565b606091505b5050505050505050505050565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156142cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f0919061509f565b8160008151811061430357614303614e92565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061433757614337614e92565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de9590849061437f90600090869061dead9042906004016151e8565b6000604051808303818588803b15801561439857600080fd5b505af1158015613fc0573d6000803e3d6000fd5b426025819055602755600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156143fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144229190615069565b9050600061442f30611696565b90506000612710602254846144449190614fca565b61444e9190614fe9565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af11580156144a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144cc9190615082565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec9061450790309086906001908190849042906004016150bc565b60408051808303816000875af1158015614525573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614549919061513c565b505060008361455730611696565b6145619190615125565b90508015614576576145763061dead836131c9565b60006145828347615125565b905080156145935761459381614262565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b60006145d06125ce565b90506000602a54670de0b6b3a7640000602c54602e54856145f19190614fe9565b6145fb9190614fca565b6146059190614fe9565b61460f919061500b565b90506000602b54670de0b6b3a7640000602d54602e54866146309190614fe9565b61463a9190614fca565b6146449190614fe9565b61464e919061500b565b9050602c5482111561466057602c5491505b602d5481111561466f5750602d545b60648260175461467f9190614fca565b6146899190614fe9565b601981905560175460649161469d91615125565b6146a8906021614fca565b6146b29190614fe9565b601881905560195460175490916146c891615125565b6146d29190615125565b601a55601b546064906146e6908390614fca565b6146f09190614fe9565b601d819055601b5460649161470491615125565b61470f906032614fca565b6147199190614fe9565b601c819055601d54601b54909161472f91615125565b6147399190615125565b601e55505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061477657614776614e92565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156147cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147f3919061509f565b8160018151811061480657614806614e92565b6001600160a01b03928316602091820292909201015260095461482c91309116846130a5565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac9479061486590859060009086903090429060040161521d565b600060405180830381600087803b15801561487f57600080fd5b505af1158015614893573d6000803e3d6000fd5b505050505050565b6009546148b39030906001600160a01b0316846130a5565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906148f090309087906000908190849042906004016150bc565b60606040518083038185885af115801561490e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061493391906150f7565b5050505050565b600060208083528351808285015260005b818110156149675785810183015185820160400152820161494b565b81811115614979576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146149a457600080fd5b50565b600080604083850312156149ba57600080fd5b82356149c58161498f565b946020939093013593505050565b80151581146149a457600080fd5b6000602082840312156149f357600080fd5b81356149fe816149d3565b9392505050565b600060208284031215614a1757600080fd5b81356149fe8161498f565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614a6157614a61614a22565b604052919050565b600067ffffffffffffffff821115614a8357614a83614a22565b5060051b60200190565b600082601f830112614a9e57600080fd5b81356020614ab3614aae83614a69565b614a38565b82815260059290921b84018101918181019086841115614ad257600080fd5b8286015b84811015614aed5780358352918301918301614ad6565b509695505050505050565b60008060408385031215614b0b57600080fd5b823567ffffffffffffffff80821115614b2357600080fd5b818501915085601f830112614b3757600080fd5b81356020614b47614aae83614a69565b82815260059290921b84018101918181019089841115614b6657600080fd5b948201945b83861015614b8d578535614b7e8161498f565b82529482019490820190614b6b565b96505086013592505080821115614ba357600080fd5b50614bb085828601614a8d565b9150509250929050565b600080600060608486031215614bcf57600080fd5b8335614bda8161498f565b92506020840135614bea8161498f565b929592945050506040919091013590565b600060208284031215614c0d57600080fd5b5035919050565b60008060408385031215614c2757600080fd5b823591506020830135614c398161498f565b809150509250929050565b600080600060408486031215614c5957600080fd5b833567ffffffffffffffff80821115614c7157600080fd5b818601915086601f830112614c8557600080fd5b813581811115614c9457600080fd5b8760208260051b8501011115614ca957600080fd5b60209283019550935050840135614cbf816149d3565b809150509250925092565b600080600060608486031215614cdf57600080fd5b83359250602084013591506040840135614cbf816149d3565b60008060408385031215614d0b57600080fd5b8235614d168161498f565b91506020830135614c39816149d3565b600080600060608486031215614d3b57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215614d6557600080fd5b8235614d708161498f565b91506020830135614c398161498f565b600081518084526020808501945080840160005b83811015614db95781516001600160a01b031687529582019590820190600101614d94565b509495945050505050565b6020815260006149fe6020830184614d80565b60008060008060008060c08789031215614df057600080fd5b8635614dfb816149d3565b9860208801359850604088013597606081013597506080810135965060a00135945092505050565b600181811c90821680614e3757607f821691505b602082108103614e5757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614ed057614ed0614ea8565b5060010190565b600181815b80851115614f12578160001904821115614ef857614ef8614ea8565b80851615614f0557918102915b93841c9390800290614edc565b509250929050565b600082614f2957506001610f3e565b81614f3657506000610f3e565b8160018114614f4c5760028114614f5657614f72565b6001915050610f3e565b60ff841115614f6757614f67614ea8565b50506001821b610f3e565b5060208310610133831016604e8410600b8410161715614f95575081810a610f3e565b614f9f8383614ed7565b8060001904821115614fb357614fb3614ea8565b029392505050565b60006149fe60ff841683614f1a565b6000816000190483118215151615614fe457614fe4614ea8565b500290565b60008261500657634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561501e5761501e614ea8565b500190565b60208082526026908201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60408201526507420626520360d41b606082015260800190565b60006020828403121561507b57600080fd5b5051919050565b60006020828403121561509457600080fd5b81516149fe816149d3565b6000602082840312156150b157600080fd5b81516149fe8161498f565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561510c57600080fd5b8351925060208401519150604084015190509250925092565b60008282101561513757615137614ea8565b500390565b6000806040838503121561514f57600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8481526080602082015260006152016080830186614d80565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061523c60a0830186614d80565b6001600160a01b039490941660608301525060800152939250505056fea264697066735822122089e51f24334e9ff85c8ddba61907e42cde36fe5bf5d0adf6c9cdf1dbc83e2ae764736f6c634300080f0033

Deployed Bytecode Sourcemap

10176:29783:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12070:37;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;12070:37:0;;;;;;;;4492:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10326:27::-;;;;;;;;;;-1:-1:-1;10326:27:0;;;;-1:-1:-1;;;;;10326:27:0;;;;;;-1:-1:-1;;;;;980:32:1;;;962:51;;950:2;935:18;10326:27:0;798:221:1;5406:169:0;;;;;;;;;;-1:-1:-1;5406:169:0;;;;;:::i;:::-;;:::i;:::-;;;1645:14:1;;1638:22;1620:41;;1608:2;1593:18;5406:169:0;1480:187:1;12248:45:0;;;;;;;;;;;;;;;;17246:115;;;;;;;;;;-1:-1:-1;17246:115:0;;;;;:::i;:::-;;:::i;:::-;;12449:64;;;;;;;;;;-1:-1:-1;12449:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11983:40;;;;;;;;;;-1:-1:-1;11983:40:0;;;;;;;;4813:108;;;;;;;;;;-1:-1:-1;4901:12:0;;4813:108;;11849:47;;;;;;;;;;;;;;;;11659:36;;;;;;;;;;;;;;;;11583:33;;;;;;;;;;;;;;;;20361:618;;;;;;;;;;-1:-1:-1;20361:618:0;;;;;:::i;:::-;;:::i;5583:492::-;;;;;;;;;;-1:-1:-1;5583:492:0;;;;;:::i;:::-;;:::i;18810:295::-;;;;;;;;;;-1:-1:-1;18810:295:0;;;;;:::i;:::-;;:::i;11755:45::-;;;;;;;;;;;;;;;;11715:33;;;;;;;;;;-1:-1:-1;11715:33:0;;;;;;;;17373:626;;;;;;;;;;-1:-1:-1;17373:626:0;;;;;:::i;:::-;;:::i;4712:93::-;;;;;;;;;;-1:-1:-1;4712:93:0;;4795:2;5888:36:1;;5876:2;5861:18;4712:93:0;5746:184:1;6083:215:0;;;;;;;;;;-1:-1:-1;6083:215:0;;;;;:::i;:::-;;:::i;10547:25::-;;;;;;;;;;-1:-1:-1;10547:25:0;;;;-1:-1:-1;;;;;10547:25:0;;;12030:33;;;;;;;;;;;;;;;;10360:21;;;;;;;;;;-1:-1:-1;10360:21:0;;;;-1:-1:-1;;;;;10360:21:0;;;32117:297;;;;;;;;;;-1:-1:-1;32117:297:0;;;;;:::i;:::-;;:::i;10851:33::-;;;;;;;;;;-1:-1:-1;10851:33:0;;;;;;;;11379:32;;;;;;;;;;;;;;;;32726:312;;;;;;;;;;;;;:::i;18411:228::-;;;;;;;;;;-1:-1:-1;18411:228:0;;;;;:::i;:::-;;:::i;28691:120::-;;;;;;;;;;-1:-1:-1;28785:18:0;;28770:12;:33;28691:120;;11236:31;;;;;;;;;;;;;;;;10258:28;;;;;;;;;;;;;;;;11344;;;;;;;;;;;;;;;;10817:25;;;;;;;;;;;;;;;;10931:31;;;;;;;;;;-1:-1:-1;10931:31:0;;;;;;;;;;;4929:127;;;;;;;;;;-1:-1:-1;4929:127:0;;;;;:::i;:::-;;:::i;8573:150::-;;;;;;;;;;;;;:::i;34343:447::-;;;;;;;;;;-1:-1:-1;34343:447:0;;;;;:::i;:::-;;:::i;18055:237::-;;;;;;;;;;;;;:::i;20991:260::-;;;;;;;;;;-1:-1:-1;20991:260:0;;;;;:::i;:::-;;:::i;21804:393::-;;;;;;;;;;-1:-1:-1;21804:393:0;;;;;:::i;:::-;;:::i;31381:498::-;;;;;;;;;;-1:-1:-1;31381:498:0;;;;;:::i;:::-;;:::i;33046:1289::-;;;;;;;;;;-1:-1:-1;33046:1289:0;;;;;:::i;:::-;;:::i;10731:44::-;;;;;;;;;;-1:-1:-1;10731:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10224:27;;;;;;;;;;;;;;;;8359:79;;;;;;;;;;-1:-1:-1;8424:6:0;;-1:-1:-1;;;;;8424:6:0;8359:79;;4600:104;;;;;;;;;;;;;:::i;18300:103::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;21259:293::-;;;;;;;;;;-1:-1:-1;21259:293:0;;;;;:::i;:::-;;:::i;11311:24::-;;;;;;;;;;;;;;;;11490:43;;;;;;;;;;;;11528:5;11490:43;;11903:35;;;;;;;;;;;;;;;;11623:27;;;;;;;;;;;;;;;;11456:25;;;;;;;;;;;;;;;;6306:413;;;;;;;;;;-1:-1:-1;6306:413:0;;;;;:::i;:::-;;:::i;11807:29::-;;;;;;;;;;;;;;;;10691:33;;;;;;;;;;;;;;;;5064:175;;;;;;;;;;-1:-1:-1;5064:175:0;;;;;:::i;:::-;;:::i;38106:836::-;;;;;;;;;;-1:-1:-1;38106:836:0;;;;;:::i;:::-;;:::i;12671:58::-;;;;;;;;;;-1:-1:-1;12671:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10579:26;;;;;;;;;;-1:-1:-1;10579:26:0;;;;-1:-1:-1;;;;;10579:26:0;;;10891:33;;;;;;;;;;-1:-1:-1;10891:33:0;;;;;;;;;;;22615:282;;;;;;;;;;-1:-1:-1;22615:282:0;;;;;:::i;:::-;;:::i;22905:182::-;;;;;;;;;;-1:-1:-1;22905:182:0;;;;;:::i;:::-;;:::i;37859:239::-;;;;;;;;;;;;;:::i;22205:402::-;;;;;;;;;;-1:-1:-1;22205:402:0;;;;;:::i;:::-;;:::i;19425:293::-;;;;;;;;;;-1:-1:-1;19425:293:0;;;;;:::i;:::-;;:::i;11154:39::-;;;;;;;;;;-1:-1:-1;11154:39:0;;;;;;;;32426:248;;;;;;;;;;-1:-1:-1;32426:248:0;;;;;:::i;:::-;;:::i;12203:38::-;;;;;;;;;;;;;;;;19788:346;;;;;;;;;;-1:-1:-1;19788:346:0;;;;;:::i;:::-;;:::i;11202:27::-;;;;;;;;;;;;;;;;19117:300;;;;;;;;;;-1:-1:-1;19117:300:0;;;;;:::i;:::-;;:::i;5247:151::-;;;;;;;;;;-1:-1:-1;5247:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;5363:18:0;;;5336:7;5363:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5247:151;12114:38;;;;;;;;;;;;;;;;10466:33;;;;;;;;;;;;;;;;18700:98;;;;;;;;;;;;;:::i;10508:32::-;;;;;;;;;;-1:-1:-1;10508:32:0;;;;-1:-1:-1;;;;;10508:32:0;;;10782:28;;;;;;;;;;-1:-1:-1;10782:28:0;;;;;:::i;:::-;;:::i;10614:37::-;;;;;;;;;;;;;;;;11274:30;;;;;;;;;;;;;;;;8731:244;;;;;;;;;;-1:-1:-1;8731:244:0;;;;;:::i;:::-;;:::i;31949:160::-;;;;;;;;;;;;;:::i;12159:37::-;;;;;;;;;;;;;;;;11418:31;;;;;;;;;;;;;;;;10293:24;;;;;;;;;;;;;;;;11542:34;;;;;;;;;;;;;;;;36062:1399;;;;;;;;;;-1:-1:-1;36062:1399:0;;;;;:::i;:::-;;:::i;4492:100::-;4546:13;4579:5;4572:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4492:100;:::o;5406:169::-;5489:4;5506:39;721:10;5529:7;5538:6;5506:8;:39::i;:::-;-1:-1:-1;5563:4:0;5406:169;;;;;:::o;17246:115::-;8486:6;;-1:-1:-1;;;;;8486:6:0;721:10;8486:22;8478:67;;;;-1:-1:-1;;;8478:67:0;;;;;;;:::i;:::-;;;;;;;;;17323:21:::1;:30:::0;;-1:-1:-1;;17323:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17246:115::o;20361:618::-;8486:6;;-1:-1:-1;;;;;8486:6:0;721:10;8486:22;8478:67;;;;-1:-1:-1;;;8478:67:0;;;;;;;:::i;:::-;20503:15:::1;:22;20485:7;:14;:40;20477:83;;;::::0;-1:-1:-1;;;20477:83:0;;10650:2:1;20477:83:0::1;::::0;::::1;10632:21:1::0;10689:2;10669:18;;;10662:30;10728:32;10708:18;;;10701:60;10778:18;;20477:83:0::1;10448:354:1::0;20477:83:0::1;20596:3;20579:7;:14;:20;20571:87;;;::::0;-1:-1:-1;;;20571:87:0;;11009:2:1;20571:87:0::1;::::0;::::1;10991:21:1::0;11048:2;11028:18;;;11021:30;11087:34;11067:18;;;11060:62;-1:-1:-1;;;11138:18:1;;;11131:52;11200:19;;20571:87:0::1;10807:418:1::0;20571:87:0::1;20771:9;20767:205;20790:7;:14;20786:1;:18;20767:205;;;20825:14;20842:7;20850:1;20842:10;;;;;;;;:::i;:::-;;;;;;;20825:27;;20867:14;20884:15;20900:1;20884:18;;;;;;;;:::i;:::-;;;;;;;20867:35;;20917:43;20933:10;20945:6;20953;20917:15;:43::i;:::-;20810:162;;20806:3;;;;;:::i;:::-;;;;20767:205;;;;20361:618:::0;;:::o;5583:492::-;5723:4;5740:36;5750:6;5758:9;5769:6;5740:9;:36::i;:::-;-1:-1:-1;;;;;5816:19:0;;5789:24;5816:19;;;:11;:19;;;;;;;;721:10;5816:33;;;;;;;;5868:26;;;;5860:79;;;;-1:-1:-1;;;5860:79:0;;11836:2:1;5860:79:0;;;11818:21:1;11875:2;11855:18;;;11848:30;11914:34;11894:18;;;11887:62;-1:-1:-1;;;11965:18:1;;;11958:38;12013:19;;5860:79:0;11634:404:1;5860:79:0;5975:57;5984:6;721:10;6025:6;6006:16;:25;5975:8;:57::i;:::-;-1:-1:-1;6063:4:0;;5583:492;-1:-1:-1;;;;5583:492:0:o;18810:295::-;8486:6;;-1:-1:-1;;;;;8486:6:0;721:10;8486:22;8478:67;;;;-1:-1:-1;;;8478:67:0;;;;;;;:::i;:::-;18932:16:::1;4795:2:::0;18932::::1;:16;:::i;:::-;18923:4;18903:13;4901:12:::0;;;4813:108;18903:13:::1;:17;::::0;18919:1:::1;18903:17;:::i;:::-;:24;;;;:::i;:::-;18902:47;;;;:::i;:::-;18892:6;:57;;18884:111;;;::::0;-1:-1:-1;;;18884:111:0;;14023:2:1;18884:111:0::1;::::0;::::1;14005:21:1::0;14062:2;14042:18;;;14035:30;14101:34;14081:18;;;14074:62;-1:-1:-1;;;14152:18:1;;;14145:39;14201:19;;18884:111:0::1;13821:405:1::0;18884:111:0::1;19031:16;4795:2:::0;19031::::1;:16;:::i;:::-;19021:27;::::0;:6;:27:::1;:::i;:::-;19006:12;:42:::0;;;19064:33:::1;::::0;160:25:1;;;19064:33:0::1;::::0;148:2:1;133:18;19064:33:0::1;;;;;;;;18810:295:::0;:::o;17373:626::-;8486:6;;-1:-1:-1;;;;;8486:6:0;721:10;8486:22;8478:67;;;;-1:-1:-1;;;8478:67:0;;;;;;;:::i;:::-;17478:13:::1;::::0;::::1;::::0;::::1;;;17477:14;17469:50;;;::::0;-1:-1:-1;;;17469:50:0;;14433:2:1;17469:50:0::1;::::0;::::1;14415:21:1::0;14472:2;14452:18;;;14445:30;14511:25;14491:18;;;14484:53;14554:18;;17469:50:0::1;14231:347:1::0;17469:50:0::1;17558:2;17538:16;:22;;17530:74;;;::::0;-1:-1:-1;;;17530:74:0;;14785:2:1;17530:74:0::1;::::0;::::1;14767:21:1::0;14824:2;14804:18;;;14797:30;14863:34;14843:18;;;14836:62;-1:-1:-1;;;14914:18:1;;;14907:37;14961:19;;17530:74:0::1;14583:403:1::0;17530:74:0::1;17615:13;:20:::0;;-1:-1:-1;;17646:18:0;;;;;17696:12:::1;17675:18;:33:::0;;;17740:37:::1;::::0;17761:16;;17740:37:::1;:::i;:::-;17719:18;:58:::0;17819:6:::1;:16:::0;;-1:-1:-1;;;;;;17819:16:0::1;-1:-1:-1::0;;;;;17819:16:0;::::1;::::0;;::::1;::::0;;;17846:49:::1;::::0;-1:-1:-1;17846:26:0::1;:49::i;:::-;17943:6;::::0;17906:51:::1;::::0;-1:-1:-1;;;;;17943:6:0::1;::::0;17906:28:::1;:51::i;:::-;17975:16;::::0;::::1;::::0;;;::::1;17373:626:::0;;:::o;6083:215::-;721:10;6171:4;6220:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6220:34:0;;;;;;;;;;6171:4;;6188:80;;6211:7;;6220:47;;6257:10;;6220:47;:::i;:::-;6188:8;:80::i;32117:297::-;8486:6;;-1:-1:-1;;;;;8486:6:0;721:10;8486:22;8478:67;;;;-1:-1:-1;;;8478:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32213:32:0;::::1;32205:83;;;;-1:-1:-1::0;;;32205:83:0::1;;;;;;;:::i;:::-;32299:17;:47:::0;;-1:-1:-1;;;;;;32299:47:0::1;-1:-1:-1::0;;;;;32299:47:0;::::1;::::0;;::::1;::::0;;;32362:44:::1;::::0;::::1;::::0;-1:-1:-1;;32362:44:0::1;32117:297:::0;:::o;32726:312::-;8486:6;;-1:-1:-1;;;;;8486:6:0;721:10;8486:22;8478:67;;;;-1:-1:-1;;;8478:67:0;;;;;;;:::i;:::-;32817:18:::1;;32789:24;32807:4;32789:9;:24::i;:::-;:46;;32781:123;;;::::0;;-1:-1:-1;;;32781:123:0;;15733:2:1;32781:123:0::1;::::0;::::1;15715:21:1::0;15752:18;;;15745:30;;;;15811:34;15791:18;;;15784:62;15882:34;15862:18;;;15855:62;15934:19;;32781:123:0::1;15531:428:1::0;32781:123:0::1;32915:8;:15:::0;;-1:-1:-1;;;;32915:15:0::1;-1:-1:-1::0;;;32915:15:0::1;::::0;;32941:10:::1;:8;:10::i;:::-;32962:8;:16:::0;;-1:-1:-1;;;;32962:16:0::1;::::0;;32994:36:::1;::::0;33014:15:::1;160:25:1::0;;32994:36:0::1;::::0;148:2:1;133:18;32994:36:0::1;;;;;;;32726:312::o:0;18411:228::-;8486:6;;-1:-1:-1;;;;;8486:6:0;721:10;8486:22;8478:67;;;;-1:-1:-1;;;8478:67:0;;;;;;;:::i;:::-;18528:9:::1;18524:108;18543:19:::0;;::::1;18524:108;;;18610:10;18583:11;:24;18595:8;;18604:1;18595:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18583:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;18583:24:0;:37;;-1:-1:-1;;18583:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18564:3;::::1;::::0;::::1;:::i;:::-;;;;18524:108;;;;18411:228:::0;;;:::o;4929:127::-;-1:-1:-1;;;;;5030:18:0;5003:7;5030:18;;;;;;;;;;;;4929:127::o;8573:150::-;8486:6;;-1:-1:-1;;;;;8486:6:0;721:10;8486:22;8478:67;;;;-1:-1:-1;;;8478:67:0;;;;;;;:::i;:::-;8666:6:::1;::::0;8645:40:::1;::::0;8682:1:::1;::::0;-1:-1:-1;;;;;8666:6:0::1;::::0;8645:40:::1;::::0;8682:1;;8645:40:::1;8696:6;:19:::0;;-1:-1:-1;;;;;;8696:19:0::1;::::0;;8573:150::o;34343:447::-;8486:6;;-1:-1:-1;;;;;8486:6:0;721:10;8486:22;8478:67;;;;-1:-1:-1;;;8478:67:0;;;;;;;:::i;:::-;34497:3:::1;34474:19;:26;;34466:90;;;::::0;-1:-1:-1;;;34466:90:0;;16166:2:1;34466:90:0::1;::::0;::::1;16148:21:1::0;16205:2;16185:18;;;16178:30;16244:34;16224:18;;;16217:62;-1:-1:-1;;;16295:18:1;;;16288:49;16354:19;;34466:90:0::1;15964:415:1::0;34466:90:0::1;34587:4;34575:8;:16;;:33;;;;-1:-1:-1::0;34595:13:0;34575:33:::1;34567:94;;;::::0;-1:-1:-1;;;34567:94:0;;16586:2:1;34567:94:0::1;::::0;::::1;16568:21:1::0;16625:2;16605:18;;;16598:30;16664:34;16644:18;;;16637:62;-1:-1:-1;;;16715:18:1;;;16708:46;16771:19;;34567:94:0::1;16384:412:1::0;34567:94:0::1;34672:15;:37:::0;;;;34720:16:::1;:27:::0;34758:13:::1;:24:::0;;-1:-1:-1;;34758:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34343:447::o;18055:237::-;8486:6;;-1:-1:-1;;;;;8486:6:0;721:10;8486:22;8478:67;;;;-1:-1:-1;;;8478:67:0;;;;;;;:::i;:::-;18111:14:::1;:22:::0;;-1:-1:-1;;18111:22:0;;::::1;::::0;;;18144:20:::1;:28:::0;;;;::::1;::::0;;4901:12;;18183::::1;:28:::0;4901:12;;18222:13:::1;:29:::0;18269:15:::1;::::0;::::1;::::0;;;::::1;18055:237::o:0;20991:260::-;8486:6;;-1:-1:-1;;;;;8486:6:0;721:10;8486:22;8478:67;;;;-1:-1:-1;;;8478:67:0;;;;;;;:::i;:::-;21087:4:::1;21083:104;;21125:6;::::0;-1:-1:-1;;;;;21125:6:0;;::::1;21115:16:::0;;::::1;::::0;21107:68:::1;;;::::0;-1:-1:-1;;;21107:68:0;;17003:2:1;21107:68:0::1;::::0;::::1;16985:21:1::0;17042:2;17022:18;;;17015:30;17081:34;17061:18;;;17054:62;-1:-1:-1;;;17132:18:1;;;17125:37;17179:19;;21107:68:0::1;16801:403:1::0;21107:68:0::1;-1:-1:-1::0;;;;;21197:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;21197:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20991:260::o;21804:393::-;8486:6;;-1:-1:-1;;;;;8486:6:0;721:10;8486:22;8478:67;;;;-1:-1:-1;;;8478:67:0;;;;;;;:::i;:::-;21921:16:::1;:33:::0;;;21965:15:::1;:31:::0;;;22007:9:::1;:19:::0;;;22019:7;22052:34:::1;21983:13:::0;21940:14;22052:34:::1;:::i;:::-;:46;;;;:::i;:::-;22037:12;:61:::0;22152:3:::1;22133:16;11528:5;22133:2;:16;:::i;:::-;:22;;;;:::i;:::-;22117:12;;:38;;22109:80;;;::::0;-1:-1:-1;;;22109:80:0;;17411:2:1;22109:80:0::1;::::0;::::1;17393:21:1::0;17450:2;17430:18;;;17423:30;17489:31;17469:18;;;17462:59;17538:18;;22109:80:0::1;17209:353:1::0;31381:498:0;8486:6;;31468:10;;-1:-1:-1;;;;;8486:6:0;721:10;8486:22;8478:67;;;;-1:-1:-1;;;8478:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31499:20:0;::::1;31491:59;;;::::0;-1:-1:-1;;;31491:59:0;;17769:2:1;31491:59:0::1;::::0;::::1;17751:21:1::0;17808:2;17788:18;;;17781:30;17847:28;17827:18;;;17820:56;17893:18;;31491:59:0::1;17567:350:1::0;31491:59:0::1;-1:-1:-1::0;;;;;31569:23:0;::::1;31587:4;31569:23;;::::0;:41:::1;;-1:-1:-1::0;31597:13:0::1;::::0;::::1;::::0;::::1;;;31596:14;31569:41;31561:106;;;::::0;-1:-1:-1;;;31561:106:0;;18124:2:1;31561:106:0::1;::::0;::::1;18106:21:1::0;18163:2;18143:18;;;18136:30;18202:34;18182:18;;;18175:62;-1:-1:-1;;;18253:18:1;;;18246:50;18313:19;;31561:106:0::1;17922:416:1::0;31561:106:0::1;31705:39;::::0;-1:-1:-1;;;31705:39:0;;31738:4:::1;31705:39;::::0;::::1;962:51:1::0;31678:24:0::1;::::0;-1:-1:-1;;;;;31705:24:0;::::1;::::0;::::1;::::0;935:18:1;;31705:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31763:46;::::0;-1:-1:-1;;;31763:46:0;;-1:-1:-1;;;;;18724:32:1;;;31763:46:0::1;::::0;::::1;18706:51:1::0;18773:18;;;18766:34;;;31678:66:0;;-1:-1:-1;31763:23:0;;::::1;::::0;::::1;::::0;18679:18:1;;31763:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31825;::::0;;-1:-1:-1;;;;;18724:32:1;;18706:51;;18788:2;18773:18;;18766:34;;;31755:54:0;;-1:-1:-1;31825:46:0::1;::::0;18679:18:1;31825:46:0::1;;;;;;;31480:399;31381:498:::0;;;;:::o;33046:1289::-;8486:6;;-1:-1:-1;;;;;8486:6:0;721:10;8486:22;8478:67;;;;-1:-1:-1;;;8478:67:0;;;;;;;:::i;:::-;33127:13:::1;::::0;::::1;::::0;::::1;;;33126:14;33118:70;;;::::0;-1:-1:-1;;;33118:70:0;;19263:2:1;33118:70:0::1;::::0;::::1;19245:21:1::0;19302:2;19282:18;;;19275:30;19341:34;19321:18;;;19314:62;-1:-1:-1;;;19392:18:1;;;19385:41;19443:19;;33118:70:0::1;19061:407:1::0;33118:70:0::1;33246:9;;;;;;;;;-1:-1:-1::0;;;;;33246:9:0::1;-1:-1:-1::0;;;;;33246:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33234:43:0::1;;33286:4;33293:9;;;;;;;;;-1:-1:-1::0;;;;;33293:9:0::1;-1:-1:-1::0;;;;;33293:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33234:76;::::0;-1:-1:-1;;;;;;33234:76:0::1;::::0;;;;;;-1:-1:-1;;;;;19959:15:1;;;33234:76:0::1;::::0;::::1;19941:34:1::0;20011:15;;19991:18;;;19984:43;19876:18;;33234:76:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33225:6;:85:::0;;-1:-1:-1;;;;;;33225:85:0::1;-1:-1:-1::0;;;;;33225:85:0;;;::::1;::::0;;::::1;::::0;;33321:49:::1;::::0;-1:-1:-1;33321:26:0::1;:49::i;:::-;33418:6;::::0;33381:51:::1;::::0;-1:-1:-1;;;;;33418:6:0::1;::::0;33381:28:::1;:51::i;:::-;33512:1;33488:21;:25;33480:73;;;::::0;-1:-1:-1;;;33480:73:0;;20240:2:1;33480:73:0::1;::::0;::::1;20222:21:1::0;20279:2;20259:18;;;20252:30;20318:34;20298:18;;;20291:62;-1:-1:-1;;;20369:18:1;;;20362:33;20412:19;;33480:73:0::1;20038:399:1::0;33480:73:0::1;33601:1;33574:24;33592:4;33574:9;:24::i;:::-;:28;33566:79;;;::::0;-1:-1:-1;;;33566:79:0;;20644:2:1;33566:79:0::1;::::0;::::1;20626:21:1::0;20683:2;20663:18;;;20656:30;20722:34;20702:18;;;20695:62;-1:-1:-1;;;20773:18:1;;;20766:36;20819:19;;33566:79:0::1;20442:402:1::0;33566:79:0::1;33690:9;::::0;33658:69:::1;::::0;33675:4:::1;::::0;-1:-1:-1;;;;;33690:9:0::1;33702:24;33675:4:::0;33702:9:::1;:24::i;33658:69::-;33738:9;::::0;-1:-1:-1;;;;;33738:9:0::1;:25;33771:21;33816:4;33836:24;33816:4:::0;33836:9:::1;:24::i;:::-;33969:11;::::0;33738:284:::1;::::0;-1:-1:-1;;;;;;33738:284:0::1;::::0;;;;;;::::1;::::0;;;33875:1:::1;::::0;;;-1:-1:-1;;;;;33969:11:0::1;::::0;33996:15:::1;::::0;33738:284:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;34060:9;-1:-1:-1::0;;;;;34060:22:0::1;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34035:14;:50:::0;34133:13:::1;:20:::0;;-1:-1:-1;;34164:18:0;;;;;34214:12:::1;34193:18;:33:::0;;;34258:37:::1;::::0;34279:16;;34258:37:::1;:::i;:::-;34237:18;:58:::0;34311:16:::1;::::0;::::1;::::0;;;::::1;33046:1289:::0;:::o;4600:104::-;4656:13;4689:7;4682:14;;;;;:::i;18300:103::-;18349:16;18384:11;18377:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18377:18:0;;;;;;;;;;;;;;;;;;;;;;18300:103;:::o;21259:293::-;8486:6;;-1:-1:-1;;;;;8486:6:0;721:10;8486:22;8478:67;;;;-1:-1:-1;;;8478:67:0;;;;;;;:::i;:::-;21368:6:::1;::::0;-1:-1:-1;;;;;21368:6:0;;::::1;21360:14:::0;;::::1;::::0;21352:84:::1;;;::::0;-1:-1:-1;;;21352:84:0;;22162:2:1;21352:84:0::1;::::0;::::1;22144:21:1::0;22201:2;22181:18;;;22174:30;22240:34;22220:18;;;22213:62;22311:27;22291:18;;;22284:55;22356:19;;21352:84:0::1;21960:421:1::0;21352:84:0::1;21447:41;21476:4;21482:5;21447:28;:41::i;:::-;21504:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;21504:40:0;::::1;::::0;::::1;::::0;;;::::1;21259:293:::0;;:::o;6306:413::-;721:10;6399:4;6443:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6443:34:0;;;;;;;;;;6496:35;;;;6488:85;;;;-1:-1:-1;;;6488:85:0;;22588:2:1;6488:85:0;;;22570:21:1;22627:2;22607:18;;;22600:30;22666:34;22646:18;;;22639:62;-1:-1:-1;;;22717:18:1;;;22710:35;22762:19;;6488:85:0;22386:401:1;6488:85:0;6609:67;721:10;6632:7;6660:15;6641:16;:34;6609:8;:67::i;:::-;-1:-1:-1;6707:4:0;;6306:413;-1:-1:-1;;;6306:413:0:o;5064:175::-;5150:4;5167:42;721:10;5191:9;5202:6;5167:9;:42::i;38106:836::-;8486:6;;-1:-1:-1;;;;;8486:6:0;721:10;8486:22;8478:67;;;;-1:-1:-1;;;8478:67:0;;;;;;;:::i;:::-;38372:3:::1;38350:18;:25;;:54;;;;;38401:3;38379:18;:25;;38350:54;:98;;;;;38430:18;38408;:40;;38350:98;38342:133;;;::::0;-1:-1:-1;;;38342:133:0;;22994:2:1;38342:133:0::1;::::0;::::1;22976:21:1::0;23033:2;23013:18;;;23006:30;-1:-1:-1;;;23052:18:1;;;23045:52;23114:18;;38342:133:0::1;22792:346:1::0;38342:133:0::1;38517:3;38494:19;:26;;:56;;;;;38547:3;38524:19;:26;;38494:56;:102;;;;;38577:19;38554;:42;;38494:102;38486:138;;;::::0;-1:-1:-1;;;38486:138:0;;23345:2:1;38486:138:0::1;::::0;::::1;23327:21:1::0;23384:2;23364:18;;;23357:30;23423:25;23403:18;;;23396:53;23466:18;;38486:138:0::1;23143:347:1::0;38486:138:0::1;38635:21;:46:::0;;-1:-1:-1;;38635:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;38692:17:::1;:38:::0;;;;38741:17:::1;:38:::0;;;;38790:18:::1;:40:::0;38841:18:::1;:40:::0;38892:19:::1;:42:::0;38106:836::o;22615:282::-;8486:6;;-1:-1:-1;;;;;8486:6:0;721:10;8486:22;8478:67;;;;-1:-1:-1;;;8478:67:0;;;;;;;:::i;:::-;22722:9:::1;22718:172;22737:19:::0;;::::1;22718:172;;;22812:8;22777:19;:32;22797:8;;22806:1;22797:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22777:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;22777:32:0;:43;;-1:-1:-1;;22777:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22856:8;;22865:1;22856:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22840:38:0::1;;22869:8;22840:38;;;;1645:14:1::0;1638:22;1620:41;;1608:2;1593:18;;1480:187;22840:38:0::1;;;;;;;;22758:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22718:172;;22905:182:::0;8486:6;;-1:-1:-1;;;;;8486:6:0;721:10;8486:22;8478:67;;;;-1:-1:-1;;;8478:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22990:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;22990:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23045:34;;1620:41:1;;;23045:34:0::1;::::0;1593:18:1;23045:34:0::1;;;;;;;22905:182:::0;;:::o;37859:239::-;37899:7;38085:3;38078:4;38048:26;38066:6;38048:9;:26::i;:::-;4901:12;;38034:40;;;;:::i;:::-;38022:6;;38004:26;;-1:-1:-1;;;;;38022:6:0;38004:9;:26::i;:::-;37987:14;;37933:9;;;;;;;;;-1:-1:-1;;;;;37933:9:0;-1:-1:-1;;;;;37933:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37969:6;;37926:51;;-1:-1:-1;;;37926:51:0;;-1:-1:-1;;;;;37969:6:0;;;37926:51;;;962::1;37926:34:0;;;;;935:18:1;;37926:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;37980:4;37926:58;:::i;:::-;:75;;;;:::i;:::-;:104;;;;:::i;:::-;:149;;;;:::i;:::-;:156;;;;:::i;:::-;:162;;;;:::i;:::-;37918:171;;37859:239;:::o;22205:402::-;8486:6;;-1:-1:-1;;;;;8486:6:0;721:10;8486:22;8478:67;;;;-1:-1:-1;;;8478:67:0;;;;;;;:::i;:::-;22323:17:::1;:34:::0;;;22368:16:::1;:32:::0;;;22411:10:::1;:20:::0;;;22424:7;22458:36:::1;22387:13:::0;22343:14;22458:36:::1;:::i;:::-;:49;;;;:::i;:::-;22442:13;:65:::0;22562:3:::1;22543:16;11528:5;22543:2;:16;:::i;:::-;:22;;;;:::i;:::-;22526:13;;:39;;22518:81;;;::::0;-1:-1:-1;;;22518:81:0;;23827:2:1;22518:81:0::1;::::0;::::1;23809:21:1::0;23866:2;23846:18;;;23839:30;23905:31;23885:18;;;23878:59;23954:18;;22518:81:0::1;23625:353:1::0;19425:293:0;8486:6;;-1:-1:-1;;;;;8486:6:0;721:10;8486:22;8478:67;;;;-1:-1:-1;;;8478:67:0;;;;;;;:::i;:::-;19549:16:::1;4795:2:::0;19549::::1;:16;:::i;:::-;19541:3;19521:13;4901:12:::0;;;4813:108;19521:13:::1;:17;::::0;19537:1:::1;19521:17;:::i;:::-;:23;;;;:::i;:::-;19520:46;;;;:::i;:::-;19510:6;:56;;19502:109;;;::::0;-1:-1:-1;;;19502:109:0;;24185:2:1;19502:109:0::1;::::0;::::1;24167:21:1::0;24224:2;24204:18;;;24197:30;24263:34;24243:18;;;24236:62;-1:-1:-1;;;24314:18:1;;;24307:38;24362:19;;19502:109:0::1;23983:404:1::0;19502:109:0::1;19644:16;4795:2:::0;19644::::1;:16;:::i;:::-;19634:27;::::0;:6;:27:::1;:::i;:::-;19622:9;:39:::0;;;19677:33:::1;::::0;160:25:1;;;19677:33:0::1;::::0;148:2:1;133:18;19677:33:0::1;14:177:1::0;32426:248:0;8486:6;;-1:-1:-1;;;;;8486:6:0;721:10;8486:22;8478:67;;;;-1:-1:-1;;;8478:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32508:25:0;::::1;32500:76;;;;-1:-1:-1::0;;;32500:76:0::1;;;;;;;:::i;:::-;32587:10;:33:::0;;-1:-1:-1;;;;;;32587:33:0::1;-1:-1:-1::0;;;;;32587:33:0;::::1;::::0;;::::1;::::0;;;32636:30:::1;::::0;::::1;::::0;-1:-1:-1;;32636:30:0::1;32426:248:::0;:::o;19788:346::-;8486:6;;-1:-1:-1;;;;;8486:6:0;721:10;8486:22;8478:67;;;;-1:-1:-1;;;8478:67:0;;;;;;;:::i;:::-;19911:6:::1;19891:13;4901:12:::0;;;4813:108;19891:13:::1;:17;::::0;19907:1:::1;19891:17;:::i;:::-;:26;;;;:::i;:::-;19878:9;:39;;19870:105;;;::::0;-1:-1:-1;;;19870:105:0;;24594:2:1;19870:105:0::1;::::0;::::1;24576:21:1::0;24633:2;24613:18;;;24606:30;24672:34;24652:18;;;24645:62;-1:-1:-1;;;24723:18:1;;;24716:51;24784:19;;19870:105:0::1;24392:417:1::0;19870:105:0::1;20026:4;20006:13;4901:12:::0;;;4813:108;20006:13:::1;:17;::::0;20022:1:::1;20006:17;:::i;:::-;:24;;;;:::i;:::-;19993:9;:37;;19985:102;;;::::0;-1:-1:-1;;;19985:102:0;;25016:2:1;19985:102:0::1;::::0;::::1;24998:21:1::0;25055:2;25035:18;;;25028:30;25094:34;25074:18;;;25067:62;-1:-1:-1;;;25145:18:1;;;25138:50;25205:19;;19985:102:0::1;24814:416:1::0;19985:102:0::1;20097:18;:30:::0;19788:346::o;19117:300::-;8486:6;;-1:-1:-1;;;;;8486:6:0;721:10;8486:22;8478:67;;;;-1:-1:-1;;;8478:67:0;;;;;;;:::i;:::-;19240:16:::1;4795:2:::0;19240::::1;:16;:::i;:::-;19231:4;19211:13;4901:12:::0;;;4813:108;19211:13:::1;:17;::::0;19227:1:::1;19211:17;:::i;:::-;:24;;;;:::i;:::-;19210:47;;;;:::i;:::-;19200:6;:57;;19192:112;;;::::0;-1:-1:-1;;;19192:112:0;;25437:2:1;19192:112:0::1;::::0;::::1;25419:21:1::0;25476:2;25456:18;;;25449:30;25515:34;25495:18;;;25488:62;-1:-1:-1;;;25566:18:1;;;25559:40;25616:19;;19192:112:0::1;25235:406:1::0;19192:112:0::1;19341:16;4795:2:::0;19341::::1;:16;:::i;:::-;19331:27;::::0;:6;:27:::1;:::i;:::-;19315:13;:43:::0;;;19374:35:::1;::::0;160:25:1;;;19374:35:0::1;::::0;148:2:1;133:18;19374:35:0::1;14:177:1::0;18700:98:0;8486:6;;-1:-1:-1;;;;;8486:6:0;721:10;8486:22;8478:67;;;;-1:-1:-1;;;8478:67:0;;;;;;;:::i;:::-;18762:20:::1;:28:::0;;-1:-1:-1;;18762:28:0::1;::::0;;18700:98::o;10782:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10782:28:0;;-1:-1:-1;10782:28:0;:::o;8731:244::-;8486:6;;-1:-1:-1;;;;;8486:6:0;721:10;8486:22;8478:67;;;;-1:-1:-1;;;8478:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8820:22:0;::::1;8812:73;;;::::0;-1:-1:-1;;;8812:73:0;;25848:2:1;8812:73:0::1;::::0;::::1;25830:21:1::0;25887:2;25867:18;;;25860:30;25926:34;25906:18;;;25899:62;-1:-1:-1;;;25977:18:1;;;25970:36;26023:19;;8812:73:0::1;25646:402:1::0;8812:73:0::1;8922:6;::::0;8901:38:::1;::::0;-1:-1:-1;;;;;8901:38:0;;::::1;::::0;8922:6:::1;::::0;8901:38:::1;::::0;8922:6:::1;::::0;8901:38:::1;8950:6;:17:::0;;-1:-1:-1;;;;;;8950:17:0::1;-1:-1:-1::0;;;;;8950:17:0;;;::::1;::::0;;;::::1;::::0;;8731:244::o;31949:160::-;8486:6;;-1:-1:-1;;;;;8486:6:0;721:10;8486:22;8478:67;;;;-1:-1:-1;;;8478:67:0;;;;;;;:::i;:::-;32043:58:::1;::::0;32007:12:::1;::::0;32051:10:::1;::::0;32075:21:::1;::::0;32007:12;32043:58;32007:12;32043:58;32075:21;32051:10;32043:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36062:1399:::0;8486:6;;-1:-1:-1;;;;;8486:6:0;721:10;8486:22;8478:67;;;;-1:-1:-1;;;8478:67:0;;;;;;;:::i;:::-;36167:4:::1;36156:7;:15;;36148:81;;;::::0;-1:-1:-1;;;36148:81:0;;26465:2:1;36148:81:0::1;::::0;::::1;26447:21:1::0;26504:2;26484:18;;;26477:30;26543:34;26523:18;;;26516:62;-1:-1:-1;;;26594:18:1;;;26587:51;26655:19;;36148:81:0::1;26263:417:1::0;36148:81:0::1;36290:19;::::0;36272:37:::1;::::0;:15:::1;:37;:::i;:::-;36248:20;;:61;;36240:87;;;::::0;-1:-1:-1;;;36240:87:0;;26887:2:1;36240:87:0::1;::::0;::::1;26869:21:1::0;26926:2;26906:18;;;26899:30;-1:-1:-1;;;26945:18:1;;;26938:43;26998:18;;36240:87:0::1;26685:337:1::0;36240:87:0::1;36361:15;36338:20;:38:::0;36414:6:::1;::::0;36407:39:::1;::::0;-1:-1:-1;;;36407:39:0;;36440:4:::1;36407:39;::::0;::::1;962:51:1::0;36387:17:0::1;::::0;-1:-1:-1;;;;;36414:6:0::1;::::0;36407:24:::1;::::0;935:18:1;;36407:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36387:59;;36457:20;36480:24;36498:4;36480:9;:24::i;:::-;36457:47:::0;-1:-1:-1;36515:16:0::1;36556:5;36534:19;36546:7:::0;36534:9;:19:::1;:::i;:::-;:27;;;;:::i;:::-;36708:6;::::0;36732:9:::1;::::0;36701:52:::1;::::0;-1:-1:-1;;;36701:52:0;;-1:-1:-1;;;;;36732:9:0;;::::1;36701:52;::::0;::::1;18706:51:1::0;18773:18;;;18766:34;;;36515:46:0;;-1:-1:-1;36600:21:0::1;::::0;36708:6;::::1;::::0;36701:22:::1;::::0;18679:18:1;;36701:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;36799:9:0::1;::::0;:234:::1;::::0;-1:-1:-1;;;36799:234:0;;-1:-1:-1;;;;;36799:9:0;;::::1;::::0;:28:::1;::::0;:234:::1;::::0;36850:4:::1;::::0;36870:8;;36799:9;;;;36850:4;;37007:15:::1;::::0;36799:234:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37046:25;37101:12;37074:24;37092:4;37074:9;:24::i;:::-;:39;;;;:::i;:::-;37046:67:::0;-1:-1:-1;37127:21:0;;37124:118:::1;;37164:66;37188:4;37203:6;37212:17;37164:15;:66::i;:::-;37254:23;37280:41;37304:17:::0;37280:21:::1;:41;:::i;:::-;37254:67:::0;-1:-1:-1;37337:19:0;;37334:80:::1;;37372:30;37386:15;37372:13;:30::i;:::-;37431:22;::::0;37444:8;;37431:22:::1;::::0;;;::::1;36137:1324;;;;;;36062:1399:::0;:::o;7648:380::-;-1:-1:-1;;;;;7784:19:0;;7776:68;;;;-1:-1:-1;;;7776:68:0;;28091:2:1;7776:68:0;;;28073:21:1;28130:2;28110:18;;;28103:30;28169:34;28149:18;;;28142:62;-1:-1:-1;;;28220:18:1;;;28213:34;28264:19;;7776:68:0;27889:400:1;7776:68:0;-1:-1:-1;;;;;7863:21:0;;7855:68;;;;-1:-1:-1;;;7855:68:0;;28496:2:1;7855:68:0;;;28478:21:1;28535:2;28515:18;;;28508:30;28574:34;28554:18;;;28547:62;-1:-1:-1;;;28625:18:1;;;28618:32;28667:19;;7855:68:0;28294:398:1;7855:68:0;-1:-1:-1;;;;;7936:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7988:32;;160:25:1;;;7988:32:0;;133:18:1;7988:32:0;;;;;;;7648:380;;;:::o;6727:614::-;-1:-1:-1;;;;;6867:20:0;;6859:70;;;;-1:-1:-1;;;6859:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6948:23:0;;6940:71;;;;-1:-1:-1;;;6940:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7048:17:0;;7024:21;7048:17;;;;;;;;;;;7084:23;;;;7076:74;;;;-1:-1:-1;;;7076:74:0;;29709:2:1;7076:74:0;;;29691:21:1;29748:2;29728:18;;;29721:30;29787:34;29767:18;;;29760:62;-1:-1:-1;;;29838:18:1;;;29831:36;29884:19;;7076:74:0;29507:402:1;7076:74:0;-1:-1:-1;;;;;7186:17:0;;;:9;:17;;;;;;;;;;;7206:22;;;7186:42;;7250:20;;;;;;;;:30;;7222:6;;7186:9;7250:30;;7222:6;;7250:30;:::i;:::-;;;;;;;;7315:9;-1:-1:-1;;;;;7298:35:0;7307:6;-1:-1:-1;;;;;7298:35:0;;7326:6;7298:35;;;;160:25:1;;148:2;133:18;;14:177;7298:35:0;;;;;;;;6848:493;6727:614;;;:::o;23095:5588::-;-1:-1:-1;;;;;23195:18:0;;23187:68;;;;-1:-1:-1;;;23187:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23274:16:0;;23266:64;;;;-1:-1:-1;;;23266:64:0;;;;;;;:::i;:::-;23358:1;23349:6;:10;23341:52;;;;-1:-1:-1;;;23341:52:0;;30116:2:1;23341:52:0;;;30098:21:1;30155:2;30135:18;;;30128:30;30194:31;30174:18;;;30167:59;30243:18;;23341:52:0;29914:353:1;23341:52:0;23418:13;;;;;;;23414:132;;-1:-1:-1;;;;;23455:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;23484:23:0;;;;;;:19;:23;;;;;;;;23455:52;23447:87;;;;-1:-1:-1;;;23447:87:0;;30474:2:1;23447:87:0;;;30456:21:1;30513:2;30493:18;;;30486:30;-1:-1:-1;;;30532:18:1;;;30525:52;30594:18;;23447:87:0;30272:346:1;23447:87:0;23561:13;;;;;;;23558:209;;;-1:-1:-1;;;;;23600:17:0;;;;;;:11;:17;;;;;;;;23599:18;:38;;;;-1:-1:-1;;;;;;23622:15:0;;;;;;:11;:15;;;;;;;;23621:16;23599:38;23598:57;;;-1:-1:-1;8424:6:0;;-1:-1:-1;;;;;23642:13:0;;;8424:6;;23642:13;23598:57;:82;;;-1:-1:-1;;;;;;23659:21:0;;23673:6;23659:21;23598:82;23590:165;;;;-1:-1:-1;;;23590:165:0;;30825:2:1;23590:165:0;;;30807:21:1;30864:2;30844:18;;;30837:30;30903:34;30883:18;;;30876:62;30974:34;30954:18;;;30947:62;-1:-1:-1;;;31025:19:1;;;31018:37;31072:19;;23590:165:0;30623:474:1;23590:165:0;23790:14;;;;23787:1634;;;8424:6;;-1:-1:-1;;;;;23824:15:0;;;8424:6;;23824:15;;;;:32;;-1:-1:-1;8424:6:0;;-1:-1:-1;;;;;23843:13:0;;;8424:6;;23843:13;;23824:32;:52;;;;-1:-1:-1;;;;;;23860:16:0;;;;23824:52;:77;;;;-1:-1:-1;;;;;;23880:21:0;;23894:6;23880:21;;23824:77;:107;;;;-1:-1:-1;;;;;;23906:25:0;;;;;;:19;:25;;;;;;;;23905:26;23824:107;:135;;;;-1:-1:-1;;;;;;23936:23:0;;;;;;:19;:23;;;;;;;;23935:24;23824:135;23820:1590;;;24135:20;;;;24131:506;;;24197:9;;-1:-1:-1;;;;;24183:24:0;;;24197:9;;24183:24;;;;:49;;-1:-1:-1;24225:6:0;;-1:-1:-1;;;;;24211:21:0;;;24225:6;;24211:21;;24183:49;24179:439;;;24310:16;24325:1;24310:12;:16;:::i;:::-;24297:9;24268:39;;;;:28;:39;;;;;;:58;:113;;;;-1:-1:-1;24365:16:0;24380:1;24365:12;:16;:::i;:::-;-1:-1:-1;;;;;24330:32:0;;;;;;:28;:32;;;;;;:51;24268:113;24260:179;;;;-1:-1:-1;;;24260:179:0;;31304:2:1;24260:179:0;;;31286:21:1;31343:2;31323:18;;;31316:30;31382:34;31362:18;;;31355:62;-1:-1:-1;;;31433:18:1;;;31426:51;31494:19;;24260:179:0;31102:417:1;24260:179:0;24495:9;24466:39;;;;:28;:39;;;;;;24508:12;24466:54;;;;-1:-1:-1;;;;;24547:32:0;;;;;;:47;24179:439;-1:-1:-1;;;;;24706:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;24742:35:0;;;;;;:31;:35;;;;;;;;24741:36;24706:71;24702:693;;;24820:12;;24810:6;:22;;24802:75;;;;-1:-1:-1;;;24802:75:0;;31726:2:1;24802:75:0;;;31708:21:1;31765:2;31745:18;;;31738:30;31804:34;31784:18;;;31777:62;-1:-1:-1;;;31855:18:1;;;31848:38;31903:19;;24802:75:0;31524:404:1;24802:75:0;24934:9;;24917:13;24927:2;24917:9;:13::i;:::-;24908:22;;:6;:22;:::i;:::-;:35;;24900:67;;;;-1:-1:-1;;;24900:67:0;;32135:2:1;24900:67:0;;;32117:21:1;32174:2;32154:18;;;32147:30;-1:-1:-1;;;32193:18:1;;;32186:49;32252:18;;24900:67:0;31933:343:1;24900:67:0;24702:693;;;-1:-1:-1;;;;;25044:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;25078:37:0;;;;;;:31;:37;;;;;;;;25077:38;25044:71;25040:355;;;25158:13;;25148:6;:23;;25140:78;;;;-1:-1:-1;;;25140:78:0;;32483:2:1;25140:78:0;;;32465:21:1;32522:2;32502:18;;;32495:30;32561:34;32541:18;;;32534:62;-1:-1:-1;;;32612:18:1;;;32605:40;32662:19;;25140:78:0;32281:406:1;25040:355:0;-1:-1:-1;;;;;25249:35:0;;;;;;:31;:35;;;;;;;;25244:151;;25342:9;;25325:13;25335:2;25325:9;:13::i;:::-;25316:22;;:6;:22;:::i;:::-;:35;;25308:67;;;;-1:-1:-1;;;25308:67:0;;32135:2:1;25308:67:0;;;32117:21:1;32174:2;32154:18;;;32147:30;-1:-1:-1;;;32193:18:1;;;32186:49;32252:18;;25308:67:0;31933:343:1;25308:67:0;25433:28;25464:24;25482:4;25464:9;:24::i;:::-;25548:18;;25433:55;;-1:-1:-1;25524:42:0;;;;;;;25582:22;;-1:-1:-1;25593:11:0;;;;;;;25582:22;:35;;;;-1:-1:-1;25609:8:0;;-1:-1:-1;;;25609:8:0;;;;25608:9;25582:35;:71;;;;-1:-1:-1;;;;;;25622:31:0;;;;;;:25;:31;;;;;;;;25621:32;25582:71;:101;;;;-1:-1:-1;;;;;;25658:25:0;;;;;;:19;:25;;;;;;;;25657:26;25582:101;:129;;;;-1:-1:-1;;;;;;25688:23:0;;;;;;:19;:23;;;;;;;;25687:24;25582:129;25579:232;;;25728:8;:15;;-1:-1:-1;;;;25728:15:0;-1:-1:-1;;;25728:15:0;;;25758:10;:8;:10::i;:::-;25783:8;:16;;-1:-1:-1;;;;25783:16:0;;;25579:232;25827:8;;-1:-1:-1;;;25827:8:0;;;;25826:9;:42;;;;-1:-1:-1;;;;;;25839:29:0;;;;;;:25;:29;;;;;;;;25826:42;:59;;;;-1:-1:-1;25872:13:0;;;;25826:59;:114;;;;;25925:15;;25908:14;;:32;;;;:::i;:::-;25889:15;:51;;25826:114;:144;;;;-1:-1:-1;;;;;;25945:25:0;;;;;;:19;:25;;;;;;;;25944:26;25826:144;25823:204;;;25986:29;:27;:29::i;:::-;-1:-1:-1;;;;;26157:25:0;;26039:12;26157:25;;;:19;:25;;;;;;26054:4;;26157:25;;;:52;;-1:-1:-1;;;;;;26186:23:0;;;;;;:19;:23;;;;;;;;26157:52;26154:99;;;-1:-1:-1;26236:5:0;26154:99;26305:21;;26273:12;;26305:21;;:38;;;;-1:-1:-1;26330:13:0;;;;;;;26305:38;:51;;;;-1:-1:-1;26348:8:0;;-1:-1:-1;;;26348:8:0;;;;26347:9;26305:51;26302:162;;;26397:9;-1:-1:-1;;;;;26397:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26372:14;:50;26437:15;:13;:15::i;:::-;26553:7;26550:2080;;;28785:18;;28770:12;:33;26615:60;;;;-1:-1:-1;;;;;;26644:31:0;;;;;;:25;:31;;;;;;;;26615:60;:94;;;;-1:-1:-1;;;;;;26680:29:0;;;;;;:25;:29;;;;;;;;26679:30;26615:94;:122;;;;-1:-1:-1;;;;;;26714:23:0;;;;;;:19;:23;;;;;;;;26713:24;26615:122;:142;;;;;26756:1;26741:12;;:16;26615:142;26612:1849;;;28785:18;;28770:12;:33;26795:330;;27104:1;27088:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;26795:330:0;-1:-1:-1;;;;;27149:15:0;;;;;;:11;:15;;;;;;;;27145:214;;-1:-1:-1;;;;;27188:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;27188:22:0;27206:4;27188:22;;;;;;27233:10;:15;;27206:4;;27233:10;;:15;;27206:4;;27233:15;:::i;:::-;;;;-1:-1:-1;;27271:11:0;:20;;;;;;;-1:-1:-1;27271:20:0;;;;;;;;-1:-1:-1;;;;;;27271:20:0;-1:-1:-1;;;;;27271:20:0;;;;;;;;27319;;962:51:1;;;27319:20:0;;950:2:1;935:18;27319:20:0;;;;;;;27145:214;11528:5;27395:12;;27386:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;27379:42;;27484:12;;27466:15;;27459:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;27437:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;27564:12:0;;27545:16;;27538:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;27515:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;27630:12:0;;27618:9;;27611:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;27595:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;26612:1849:0;;-1:-1:-1;26612:1849:0;;-1:-1:-1;;;;;27707:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;27756:1;27740:13;;:17;27707:50;27703:758;;;11528:5;27793:13;;27784:6;:22;;;;:::i;:::-;:36;;;;:::i;:::-;27777:43;;27887:13;;27868:16;;27861:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;27839:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;27969:13:0;;27949:17;;27942:24;;:4;:24;:::i;:::-;:40;;;;:::i;:::-;27919:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;28037:13:0;;28024:10;;28017:17;;:4;:17;:::i;27703:758::-;-1:-1:-1;;;;;28113:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;28163:1;28148:12;;:16;28113:51;28110:351;;;11528:5;28198:12;;28189:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;28182:42;;28287:12;;28269:15;;28262:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;28240:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;28367:12:0;;28348:16;;28341:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;28318:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;28433:12:0;;28421:9;;28414:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;28398:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;28110:351:0;28492:8;;28489:93;;28524:42;28540:4;28554;28561;28524:15;:42::i;:::-;28604:14;28614:4;28604:14;;:::i;:::-;;;26550:2080;28642:33;28658:4;28664:2;28668:6;28642:15;:33::i;:::-;23174:5509;;;;23095:5588;;;:::o;20146:207::-;-1:-1:-1;;;;;20234:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;20234:52:0;;;;;;;;;;20302:43;;32860:51:1;;;32927:18;;;32920:50;20302:43:0;;32833:18:1;20302:43:0;;;;;;;20146:207;;:::o;21560:236::-;-1:-1:-1;;;;;21643:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;21643:39:0;;;;;;;21693;21643:31;:39;21693:26;:39::i;29919:1454::-;29960:23;29986:24;30004:4;29986:9;:24::i;:::-;29960:50;;30021:25;30092:12;;30070:19;;30049:18;;:40;;;;:::i;:::-;:55;;;;:::i;:::-;30021:83;-1:-1:-1;30128:20:0;;;:46;;-1:-1:-1;30152:22:0;;30128:46;30125:60;;;30177:7;;29919:1454::o;30125:60::-;30218:18;;:23;;30239:2;30218:23;:::i;:::-;30200:15;:41;30197:113;;;30275:18;;:23;;30296:2;30275:23;:::i;:::-;30257:41;;30197:113;30322:12;30404:23;30489:1;30469:17;30448:18;;30430:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;30404:86;-1:-1:-1;30511:51:0;30528:33;30404:86;30528:15;:33;:::i;:::-;30511:16;:51::i;:::-;30770:18;;30605:21;;;;30584:18;;30770:20;;30789:1;;30770:20;:::i;:::-;30749:42;;:17;:42;:::i;:::-;30726:19;;30713:32;;:10;:32;:::i;:::-;:79;;;;:::i;:::-;30686:106;;30803:17;30892:1;30873:18;;:20;;;;:::i;:::-;30852:42;;:17;:42;:::i;:::-;30836:12;;30823:25;;:10;:25;:::i;:::-;:72;;;;:::i;:::-;30803:92;-1:-1:-1;30927:28:0;30803:92;30927:16;:28;:::i;:::-;30908:47;;;;:::i;:::-;31001:1;30980:18;:22;;;31013:19;:23;;;31047:12;:16;30908:47;-1:-1:-1;31087:19:0;;;;;:42;;;31128:1;31110:15;:19;31087:42;31084:119;;;31145:46;31158:15;31175;31145:12;:46::i;:::-;31236:10;;31228:46;;-1:-1:-1;;;;;31236:10:0;;;;31260:9;;31228:46;;;;31260:9;31236:10;31228:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31308:17:0;;31300:65;;31215:59;;-1:-1:-1;;;;;;31308:17:0;;31339:21;;31300:65;;;;31339:21;31308:17;31300:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;29919:1454:0:o;37469:382::-;37557:16;;;37571:1;37557:16;;;;;;;;37533:21;;37557:16;;;;;;;;-1:-1:-1;;37594:9:0;;:16;;;-1:-1:-1;;;37594:16:0;;;;37533:40;;-1:-1:-1;;;;;;37594:9:0;;;;:14;;-1:-1:-1;37594:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37584:4;37589:1;37584:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;37584:26:0;;;-1:-1:-1;;;;;37584:26:0;;;;;37639:4;37621;37626:1;37621:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37621:23:0;;;:7;;;;;;;;;:23;37657:9;;:186;;-1:-1:-1;;;37657:186:0;;:9;;;:60;;37725:11;;37657:186;;:9;;37768:4;;37795:6;;37817:15;;37657:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34802:1252;34888:15;34871:14;:32;;;34924:20;:38;35000:6;;34993:39;;-1:-1:-1;;;34993:39:0;;35026:4;34993:39;;;962:51:1;-1:-1:-1;;;;;;;35000:6:0;;34993:24;;935:18:1;;34993:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34973:59;;35043:20;35066:24;35084:4;35066:9;:24::i;:::-;35043:47;;35101:16;35151:5;35132:16;;35120:9;:28;;;;:::i;:::-;:36;;;;:::i;:::-;35303:6;;35327:9;;35296:52;;-1:-1:-1;;;35296:52:0;;-1:-1:-1;;;;;35327:9:0;;;35296:52;;;18706:51:1;18773:18;;;18766:34;;;35101:55:0;;-1:-1:-1;35195:21:0;;35303:6;;;35296:22;;18679:18:1;;35296:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;35394:9:0;;:234;;-1:-1:-1;;;35394:234:0;;-1:-1:-1;;;;;35394:9:0;;;;:28;;:234;;35445:4;;35465:8;;35394:9;;;;35445:4;;35602:15;;35394:234;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35641:25;35696:12;35669:24;35687:4;35669:9;:24::i;:::-;:39;;;;:::i;:::-;35641:67;-1:-1:-1;35722:21:0;;35719:118;;35759:66;35783:4;35798:6;35807:17;35759:15;:66::i;:::-;35849:23;35875:41;35899:17;35875:21;:41;:::i;:::-;35849:67;-1:-1:-1;35932:19:0;;35929:80;;35967:30;35981:15;35967:13;:30::i;:::-;36026:20;;36037:8;;36026:20;;;;;34850:1204;;;;;;34802:1252::o;38950:1006::-;38995:12;39010:9;:7;:9::i;:::-;38995:24;;39030:27;39118:17;;39111:4;39091:17;;39068:19;;39061:4;:26;;;;:::i;:::-;39060:48;;;;:::i;:::-;:55;;;;:::i;:::-;:75;;;;:::i;:::-;39030:105;;39146:28;39236:18;;39229:4;39208:18;;39185:19;;39178:4;:26;;;;:::i;:::-;39177:49;;;;:::i;:::-;:56;;;;:::i;:::-;:77;;;;:::i;:::-;39146:108;;39290:17;;39268:19;:39;39265:109;;;39345:17;;39323:39;;39265:109;39410:18;;39387:20;:41;39384:113;;;-1:-1:-1;39467:18:0;;39384:113;39562:3;39540:19;39525:12;;:34;;;;:::i;:::-;:40;;;;:::i;:::-;39507:15;:58;;;39596:12;;39635:3;;39596:30;;;:::i;:::-;39595:37;;39630:2;39595:37;:::i;:::-;:43;;;;:::i;:::-;39576:16;:62;;;39695:15;;39661:12;;39695:15;;39661:31;;;:::i;:::-;:49;;;;:::i;:::-;39649:9;:61;39754:13;;39793:3;;39754:36;;39770:20;;39754:36;:::i;:::-;:42;;;;:::i;:::-;39735:16;:61;;;39828:13;;39869:3;;39828:32;;;:::i;:::-;39827:39;;39864:2;39827:39;:::i;:::-;:45;;;;:::i;:::-;39807:17;:65;;;39932:16;;39896:13;;39932:16;;39896:33;;;:::i;:::-;:52;;;;:::i;:::-;39883:10;:65;-1:-1:-1;;;38950:1006:0:o;28819:573::-;28971:16;;;28985:1;28971:16;;;;;;;;28947:21;;28971:16;;;;;;;;;;-1:-1:-1;28971:16:0;28947:40;;29016:4;28998;29003:1;28998:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28998:23:0;;;:7;;;;;;;;;;:23;;;;29042:9;;:16;;;-1:-1:-1;;;29042:16:0;;;;:9;;;;;:14;;:16;;;;;28998:7;;29042:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29032:4;29037:1;29032:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29032:26:0;;;:7;;;;;;;;;:26;29103:9;;29071:56;;29088:4;;29103:9;29115:11;29071:8;:56::i;:::-;29166:9;;:218;;-1:-1:-1;;;29166:218:0;;-1:-1:-1;;;;;29166:9:0;;;;:60;;:218;;29241:11;;29166:9;;29311:4;;29338;;29358:15;;29166:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28874:518;28819:573;:::o;29404:507::-;29584:9;;29552:56;;29569:4;;-1:-1:-1;;;;;29584:9:0;29596:11;29552:8;:56::i;:::-;29651:9;;:252;;-1:-1:-1;;;29651:252:0;;-1:-1:-1;;;;;29651:9:0;;;;:25;;29684:9;;29651:252;;29717:4;;29737:11;;29651:9;;;;29717:4;;29877:15;;29651:252;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29404:507;;:::o;196:597:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;634:6;631:1;628:13;625:91;;;704:1;699:2;690:6;679:9;675:22;671:31;664:42;625:91;-1:-1:-1;777:2:1;756:15;-1:-1:-1;;752:29:1;737:45;;;;784:2;733:54;;196:597;-1:-1:-1;;;196:597:1:o;1024:131::-;-1:-1:-1;;;;;1099:31:1;;1089:42;;1079:70;;1145:1;1142;1135:12;1079:70;1024:131;:::o;1160:315::-;1228:6;1236;1289:2;1277:9;1268:7;1264:23;1260:32;1257:52;;;1305:1;1302;1295:12;1257:52;1344:9;1331:23;1363:31;1388:5;1363:31;:::i;:::-;1413:5;1465:2;1450:18;;;;1437:32;;-1:-1:-1;;;1160:315:1:o;1672:118::-;1758:5;1751:13;1744:21;1737:5;1734:32;1724:60;;1780:1;1777;1770:12;1795:241;1851:6;1904:2;1892:9;1883:7;1879:23;1875:32;1872:52;;;1920:1;1917;1910:12;1872:52;1959:9;1946:23;1978:28;2000:5;1978:28;:::i;:::-;2025:5;1795:241;-1:-1:-1;;;1795:241:1:o;2041:247::-;2100:6;2153:2;2141:9;2132:7;2128:23;2124:32;2121:52;;;2169:1;2166;2159:12;2121:52;2208:9;2195:23;2227:31;2252:5;2227:31;:::i;2293:127::-;2354:10;2349:3;2345:20;2342:1;2335:31;2385:4;2382:1;2375:15;2409:4;2406:1;2399:15;2425:275;2496:2;2490:9;2561:2;2542:13;;-1:-1:-1;;2538:27:1;2526:40;;2596:18;2581:34;;2617:22;;;2578:62;2575:88;;;2643:18;;:::i;:::-;2679:2;2672:22;2425:275;;-1:-1:-1;2425:275:1:o;2705:183::-;2765:4;2798:18;2790:6;2787:30;2784:56;;;2820:18;;:::i;:::-;-1:-1:-1;2865:1:1;2861:14;2877:4;2857:25;;2705:183::o;2893:662::-;2947:5;3000:3;2993:4;2985:6;2981:17;2977:27;2967:55;;3018:1;3015;3008:12;2967:55;3054:6;3041:20;3080:4;3104:60;3120:43;3160:2;3120:43;:::i;:::-;3104:60;:::i;:::-;3198:15;;;3284:1;3280:10;;;;3268:23;;3264:32;;;3229:12;;;;3308:15;;;3305:35;;;3336:1;3333;3326:12;3305:35;3372:2;3364:6;3360:15;3384:142;3400:6;3395:3;3392:15;3384:142;;;3466:17;;3454:30;;3504:12;;;;3417;;3384:142;;;-1:-1:-1;3544:5:1;2893:662;-1:-1:-1;;;;;;2893:662:1:o;3560:1215::-;3678:6;3686;3739:2;3727:9;3718:7;3714:23;3710:32;3707:52;;;3755:1;3752;3745:12;3707:52;3795:9;3782:23;3824:18;3865:2;3857:6;3854:14;3851:34;;;3881:1;3878;3871:12;3851:34;3919:6;3908:9;3904:22;3894:32;;3964:7;3957:4;3953:2;3949:13;3945:27;3935:55;;3986:1;3983;3976:12;3935:55;4022:2;4009:16;4044:4;4068:60;4084:43;4124:2;4084:43;:::i;4068:60::-;4162:15;;;4244:1;4240:10;;;;4232:19;;4228:28;;;4193:12;;;;4268:19;;;4265:39;;;4300:1;4297;4290:12;4265:39;4324:11;;;;4344:217;4360:6;4355:3;4352:15;4344:217;;;4440:3;4427:17;4457:31;4482:5;4457:31;:::i;:::-;4501:18;;4377:12;;;;4539;;;;4344:217;;;4580:5;-1:-1:-1;;4623:18:1;;4610:32;;-1:-1:-1;;4654:16:1;;;4651:36;;;4683:1;4680;4673:12;4651:36;;4706:63;4761:7;4750:8;4739:9;4735:24;4706:63;:::i;:::-;4696:73;;;3560:1215;;;;;:::o;4780:456::-;4857:6;4865;4873;4926:2;4914:9;4905:7;4901:23;4897:32;4894:52;;;4942:1;4939;4932:12;4894:52;4981:9;4968:23;5000:31;5025:5;5000:31;:::i;:::-;5050:5;-1:-1:-1;5107:2:1;5092:18;;5079:32;5120:33;5079:32;5120:33;:::i;:::-;4780:456;;5172:7;;-1:-1:-1;;;5226:2:1;5211:18;;;;5198:32;;4780:456::o;5241:180::-;5300:6;5353:2;5341:9;5332:7;5328:23;5324:32;5321:52;;;5369:1;5366;5359:12;5321:52;-1:-1:-1;5392:23:1;;5241:180;-1:-1:-1;5241:180:1:o;5426:315::-;5494:6;5502;5555:2;5543:9;5534:7;5530:23;5526:32;5523:52;;;5571:1;5568;5561:12;5523:52;5607:9;5594:23;5584:33;;5667:2;5656:9;5652:18;5639:32;5680:31;5705:5;5680:31;:::i;:::-;5730:5;5720:15;;;5426:315;;;;;:::o;6143:750::-;6235:6;6243;6251;6304:2;6292:9;6283:7;6279:23;6275:32;6272:52;;;6320:1;6317;6310:12;6272:52;6360:9;6347:23;6389:18;6430:2;6422:6;6419:14;6416:34;;;6446:1;6443;6436:12;6416:34;6484:6;6473:9;6469:22;6459:32;;6529:7;6522:4;6518:2;6514:13;6510:27;6500:55;;6551:1;6548;6541:12;6500:55;6591:2;6578:16;6617:2;6609:6;6606:14;6603:34;;;6633:1;6630;6623:12;6603:34;6688:7;6681:4;6671:6;6668:1;6664:14;6660:2;6656:23;6652:34;6649:47;6646:67;;;6709:1;6706;6699:12;6646:67;6740:4;6732:13;;;;-1:-1:-1;6764:6:1;-1:-1:-1;;6805:20:1;;6792:34;6835:28;6792:34;6835:28;:::i;:::-;6882:5;6872:15;;;6143:750;;;;;:::o;6898:377::-;6972:6;6980;6988;7041:2;7029:9;7020:7;7016:23;7012:32;7009:52;;;7057:1;7054;7047:12;7009:52;7093:9;7080:23;7070:33;;7150:2;7139:9;7135:18;7122:32;7112:42;;7204:2;7193:9;7189:18;7176:32;7217:28;7239:5;7217:28;:::i;7280:382::-;7345:6;7353;7406:2;7394:9;7385:7;7381:23;7377:32;7374:52;;;7422:1;7419;7412:12;7374:52;7461:9;7448:23;7480:31;7505:5;7480:31;:::i;:::-;7530:5;-1:-1:-1;7587:2:1;7572:18;;7559:32;7600:30;7559:32;7600:30;:::i;7667:316::-;7744:6;7752;7760;7813:2;7801:9;7792:7;7788:23;7784:32;7781:52;;;7829:1;7826;7819:12;7781:52;-1:-1:-1;;7852:23:1;;;7922:2;7907:18;;7894:32;;-1:-1:-1;7973:2:1;7958:18;;;7945:32;;7667:316;-1:-1:-1;7667:316:1:o;7988:388::-;8056:6;8064;8117:2;8105:9;8096:7;8092:23;8088:32;8085:52;;;8133:1;8130;8123:12;8085:52;8172:9;8159:23;8191:31;8216:5;8191:31;:::i;:::-;8241:5;-1:-1:-1;8298:2:1;8283:18;;8270:32;8311:33;8270:32;8311:33;:::i;8381:461::-;8434:3;8472:5;8466:12;8499:6;8494:3;8487:19;8525:4;8554:2;8549:3;8545:12;8538:19;;8591:2;8584:5;8580:14;8612:1;8622:195;8636:6;8633:1;8630:13;8622:195;;;8701:13;;-1:-1:-1;;;;;8697:39:1;8685:52;;8757:12;;;;8792:15;;;;8733:1;8651:9;8622:195;;;-1:-1:-1;8833:3:1;;8381:461;-1:-1:-1;;;;;8381:461:1:o;8847:261::-;9026:2;9015:9;9008:21;8989:4;9046:56;9098:2;9087:9;9083:18;9075:6;9046:56;:::i;9113:584::-;9214:6;9222;9230;9238;9246;9254;9307:3;9295:9;9286:7;9282:23;9278:33;9275:53;;;9324:1;9321;9314:12;9275:53;9363:9;9350:23;9382:28;9404:5;9382:28;:::i;:::-;9429:5;9481:2;9466:18;;9453:32;;-1:-1:-1;9532:2:1;9517:18;;9504:32;;9583:2;9568:18;;9555:32;;-1:-1:-1;9634:3:1;9619:19;;9606:33;;-1:-1:-1;9686:3:1;9671:19;9658:33;;-1:-1:-1;9113:584:1;-1:-1:-1;;;9113:584:1:o;9702:380::-;9781:1;9777:12;;;;9824;;;9845:61;;9899:4;9891:6;9887:17;9877:27;;9845:61;9952:2;9944:6;9941:14;9921:18;9918:38;9915:161;;9998:10;9993:3;9989:20;9986:1;9979:31;10033:4;10030:1;10023:15;10061:4;10058:1;10051:15;9915:161;;9702:380;;;:::o;10087:356::-;10289:2;10271:21;;;10308:18;;;10301:30;10367:34;10362:2;10347:18;;10340:62;10434:2;10419:18;;10087:356::o;11230:127::-;11291:10;11286:3;11282:20;11279:1;11272:31;11322:4;11319:1;11312:15;11346:4;11343:1;11336:15;11362:127;11423:10;11418:3;11414:20;11411:1;11404:31;11454:4;11451:1;11444:15;11478:4;11475:1;11468:15;11494:135;11533:3;11554:17;;;11551:43;;11574:18;;:::i;:::-;-1:-1:-1;11621:1:1;11610:13;;11494:135::o;12043:422::-;12132:1;12175:5;12132:1;12189:270;12210:7;12200:8;12197:21;12189:270;;;12269:4;12265:1;12261:6;12257:17;12251:4;12248:27;12245:53;;;12278:18;;:::i;:::-;12328:7;12318:8;12314:22;12311:55;;;12348:16;;;;12311:55;12427:22;;;;12387:15;;;;12189:270;;;12193:3;12043:422;;;;;:::o;12470:806::-;12519:5;12549:8;12539:80;;-1:-1:-1;12590:1:1;12604:5;;12539:80;12638:4;12628:76;;-1:-1:-1;12675:1:1;12689:5;;12628:76;12720:4;12738:1;12733:59;;;;12806:1;12801:130;;;;12713:218;;12733:59;12763:1;12754:10;;12777:5;;;12801:130;12838:3;12828:8;12825:17;12822:43;;;12845:18;;:::i;:::-;-1:-1:-1;;12901:1:1;12887:16;;12916:5;;12713:218;;13015:2;13005:8;13002:16;12996:3;12990:4;12987:13;12983:36;12977:2;12967:8;12964:16;12959:2;12953:4;12950:12;12946:35;12943:77;12940:159;;;-1:-1:-1;13052:19:1;;;13084:5;;12940:159;13131:34;13156:8;13150:4;13131:34;:::i;:::-;13201:6;13197:1;13193:6;13189:19;13180:7;13177:32;13174:58;;;13212:18;;:::i;:::-;13250:20;;12470:806;-1:-1:-1;;;12470:806:1:o;13281:140::-;13339:5;13368:47;13409:4;13399:8;13395:19;13389:4;13368:47;:::i;13426:168::-;13466:7;13532:1;13528;13524:6;13520:14;13517:1;13514:21;13509:1;13502:9;13495:17;13491:45;13488:71;;;13539:18;;:::i;:::-;-1:-1:-1;13579:9:1;;13426:168::o;13599:217::-;13639:1;13665;13655:132;;13709:10;13704:3;13700:20;13697:1;13690:31;13744:4;13741:1;13734:15;13772:4;13769:1;13762:15;13655:132;-1:-1:-1;13801:9:1;;13599:217::o;14991:128::-;15031:3;15062:1;15058:6;15055:1;15052:13;15049:39;;;15068:18;;:::i;:::-;-1:-1:-1;15104:9:1;;14991:128::o;15124:402::-;15326:2;15308:21;;;15365:2;15345:18;;;15338:30;15404:34;15399:2;15384:18;;15377:62;-1:-1:-1;;;15470:2:1;15455:18;;15448:36;15516:3;15501:19;;15124:402::o;18343:184::-;18413:6;18466:2;18454:9;18445:7;18441:23;18437:32;18434:52;;;18482:1;18479;18472:12;18434:52;-1:-1:-1;18505:16:1;;18343:184;-1:-1:-1;18343:184:1:o;18811:245::-;18878:6;18931:2;18919:9;18910:7;18906:23;18902:32;18899:52;;;18947:1;18944;18937:12;18899:52;18979:9;18973:16;18998:28;19020:5;18998:28;:::i;19473:251::-;19543:6;19596:2;19584:9;19575:7;19571:23;19567:32;19564:52;;;19612:1;19609;19602:12;19564:52;19644:9;19638:16;19663:31;19688:5;19663:31;:::i;20849:607::-;-1:-1:-1;;;;;21208:15:1;;;21190:34;;21255:2;21240:18;;21233:34;;;;21298:2;21283:18;;21276:34;;;;21341:2;21326:18;;21319:34;;;;21390:15;;;21384:3;21369:19;;21362:44;21170:3;21422:19;;21415:35;;;;21139:3;21124:19;;20849:607::o;21461:306::-;21549:6;21557;21565;21618:2;21606:9;21597:7;21593:23;21589:32;21586:52;;;21634:1;21631;21624:12;21586:52;21663:9;21657:16;21647:26;;21713:2;21702:9;21698:18;21692:25;21682:35;;21757:2;21746:9;21742:18;21736:25;21726:35;;21461:306;;;;;:::o;23495:125::-;23535:4;23563:1;23560;23557:8;23554:34;;;23568:18;;:::i;:::-;-1:-1:-1;23605:9:1;;23495:125::o;27639:245::-;27718:6;27726;27779:2;27767:9;27758:7;27754:23;27750:32;27747:52;;;27795:1;27792;27785:12;27747:52;-1:-1:-1;;27818:16:1;;27874:2;27859:18;;;27853:25;27818:16;;27853:25;;-1:-1:-1;27639:245:1:o;28697:401::-;28899:2;28881:21;;;28938:2;28918:18;;;28911:30;28977:34;28972:2;28957:18;;28950:62;-1:-1:-1;;;29043:2:1;29028:18;;29021:35;29088:3;29073:19;;28697:401::o;29103:399::-;29305:2;29287:21;;;29344:2;29324:18;;;29317:30;29383:34;29378:2;29363:18;;29356:62;-1:-1:-1;;;29449:2:1;29434:18;;29427:33;29492:3;29477:19;;29103:399::o;32981:510::-;33252:6;33241:9;33234:25;33295:3;33290:2;33279:9;33275:18;33268:31;33215:4;33316:57;33368:3;33357:9;33353:19;33345:6;33316:57;:::i;:::-;-1:-1:-1;;;;;33409:32:1;;;;33404:2;33389:18;;33382:60;-1:-1:-1;33473:2:1;33458:18;33451:34;33308:65;32981:510;-1:-1:-1;;32981:510:1:o;33496:582::-;33795:6;33784:9;33777:25;33838:6;33833:2;33822:9;33818:18;33811:34;33881:3;33876:2;33865:9;33861:18;33854:31;33758:4;33902:57;33954:3;33943:9;33939:19;33931:6;33902:57;:::i;:::-;-1:-1:-1;;;;;33995:32:1;;;;33990:2;33975:18;;33968:60;-1:-1:-1;34059:3:1;34044:19;34037:35;33894:65;33496:582;-1:-1:-1;;;33496:582:1:o

Swarm Source

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