Token Buu Inu

 

Overview [ERC-20]

Max Total Supply:
100,000,000,000 BUU

Holders:
593

Transfers:
-

Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
BuuInu

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-15
*/

// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;

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

    function _msgData() internal view returns (bytes memory) {
        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 token decimals.
   */
  function decimals() external view returns (uint8);

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

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

  /**
   * @dev Returns the bep token owner.
   */
  function getOwner() external view returns (address);

  /**
   * @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/b/u/u/in/u/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 IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}

interface IUniswapV2Pair {
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
    function skim(address to) external;
    function sync() external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        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 swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface AntiSnipe {
    function checkUser(address from, address to, uint256 amt) external returns (bool);
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp) external;
    function setLpPair(address pair, bool enabled) external;
    function setProtections(bool _as, bool _ag, bool _ab, bool _algo) external;
    function setGasPriceLimit(uint256 gas) external;
    function removeSniper(address account) external;
    function getSniperAmt() external view returns (uint256);
    function isBlacklisted(address account) external view returns (bool);
    function setBlacklistEnabled(address account, bool enabled) external;
}

contract BuuInu is Context, IERC20 {
    // Ownership moved to in-contract for customizability.
    address private _owner;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    mapping (address => bool) private _liquidityHolders;
   
    uint256 private startingSupply;
    string private _name;
    string private _symbol;

    struct FeesStruct {
        uint16 reflect;
        uint16 marketing;
    }

    struct StaticValuesStruct {
        uint16 maxReflect;
        uint16 maxMarketing;
        uint16 masterTaxDivisor;
    }

    FeesStruct private currentTaxes = FeesStruct({
        reflect: 0,
        marketing: 0
        });

    FeesStruct public _buyTaxes = FeesStruct({
        reflect: 100,
        marketing: 600
        });

    FeesStruct public _sellTaxes = FeesStruct({
        reflect: 100,
        marketing: 600
        });

    FeesStruct public _transferTaxes = FeesStruct({
        reflect: 100,
        marketing: 600
        });

    StaticValuesStruct public staticVals = StaticValuesStruct({
        maxReflect: 800,
        maxMarketing: 800,
        masterTaxDivisor: 10000
        });

    uint256 private constant MAX = ~uint256(0);
    uint8 private _decimals;
    uint256 private _tTotal;
    uint256 private _rTotal;
    uint256 private _tFeeTotal;

    IUniswapV2Router02 public dexRouter;
    address public lpPair;

    // UNI ROUTER
    address private _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;
    address payable private _marketingWallet = payable(0x550380c2328FE523E4bc4DEf51e50a2A03524405);
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    
    uint256 private _maxTxAmount;
    uint256 public maxTxAmountUI;
    uint256 private _maxWalletSize;
    uint256 public maxWalletSizeUI;

    uint256 private swapThreshold;
    uint256 private swapAmount;

    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    AntiSnipe antiSnipe;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event ContractSwapEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event SniperCaught(address sniperAddress);
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Caller =/= owner.");
        _;
    }
    
    constructor () payable {
        // Set the owner.
        _owner = msg.sender;

        _approve(msg.sender, _routerAddress, type(uint256).max);
        _approve(address(this), _routerAddress, type(uint256).max);

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _liquidityHolders[owner()] = true;
    }

    receive() external payable {}

    bool contractInitialized = false;

    function intializeContract(address[] memory accounts, uint256[] memory amounts) external onlyOwner {
        require(!contractInitialized);
        require(accounts.length < 50);
        require(accounts.length == amounts.length);
        _name = "Buu Inu";
        _symbol = "BUU";
        startingSupply = 100_000_000_000;
        if (startingSupply < 10_000_000_000) {
            _decimals = 18;
        } else {
            _decimals = 9;
        }
        _tTotal = startingSupply * (10**_decimals);
        _rTotal = (MAX - (MAX % _tTotal));

        dexRouter = IUniswapV2Router02(_routerAddress);
        lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;

        maxTxAmountUI = (startingSupply * 3) / 1000;
        maxWalletSizeUI = (startingSupply * 3) / 100;
        _maxTxAmount = maxTxAmountUI * (10**_decimals);
        _maxWalletSize = maxWalletSizeUI * (10**_decimals);
        swapThreshold = (_tTotal * 5) / 10000;
        swapAmount = (_tTotal * 5) / 1000;
        if(address(antiSnipe) == address(0)){
            antiSnipe = AntiSnipe(address(this));
        }
        contractInitialized = true;     
        _rOwned[owner()] = _rTotal;
        emit Transfer(address(0), owner(), _tTotal);

        _approve(address(this), address(dexRouter), type(uint256).max);

        for(uint256 i = 0; i < accounts.length; i++){
            address wallet = accounts[i];
            uint256 amount = amounts[i]*10**_decimals;
            _transfer(owner(), wallet, amount);
        }

        _transfer(owner(), address(this), balanceOf(owner()));

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

        enableTrading();
    }

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and renouncements.
    // This allows for removal of ownership privileges from the owner once renounced or transferred.
    function owner() public view returns (address) {
        return _owner;
    }

    function transferOwner(address newOwner) external onlyOwner() {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        setExcludedFromFees(_owner, false);
        setExcludedFromFees(newOwner, true);
        
        if (_marketingWallet == payable(_owner))
            _marketingWallet = payable(newOwner);
        
        if(balanceOf(_owner) > 0) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

    function renounceOwnership() public virtual onlyOwner() {
        setExcludedFromFees(_owner, false);
        _owner = address(0);
        emit OwnershipTransferred(_owner, address(0));
    }
//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

    function totalSupply() external view override returns (uint256) { return _tTotal; }
    function decimals() external view override returns (uint8) { return _decimals; }
    function symbol() external view override returns (string memory) { return _symbol; }
    function name() external view override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner(); }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

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

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

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

    function _approve(address sender, address spender, uint256 amount) private {
        require(sender != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");

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

    function approveContractContingency() public onlyOwner returns (bool) {
        _approve(address(this), address(dexRouter), type(uint256).max);
        return true;
    }

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

        return _transfer(sender, recipient, amount);
    }

    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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

    function setNewRouter(address newRouter) public onlyOwner() {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (enabled == false) {
            lpPairs[pair] = false;
            antiSnipe.setLpPair(pair, false);
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 3 days, "3 Day Cooldown");
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
            antiSnipe.setLpPair(pair, true);
        }
    }

    function changeRouterContingency(address router) external onlyOwner {
        require(!_hasLiqBeenAdded);
        _routerAddress = router;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return (_tTotal - (balanceOf(DEAD) + balanceOf(address(0))));
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function setExcludedFromFees(address account, bool enabled) public onlyOwner {
        _isExcludedFromFees[account] = enabled;
    }

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

    function setExcludedFromReward(address account, bool enabled) public onlyOwner {
        if (enabled == true) {
            require(!_isExcluded[account], "Account is already excluded.");
            if(_rOwned[account] > 0) {
                _tOwned[account] = tokenFromReflection(_rOwned[account]);
            }
            _isExcluded[account] = true;
            _excluded.push(account);
        } else if (enabled == false) {
            require(_isExcluded[account], "Account is already included.");
            if(_excluded.length == 1){
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
            } else {
                for (uint256 i = 0; i < _excluded.length; i++) {
                    if (_excluded[i] == account) {
                        _excluded[i] = _excluded[_excluded.length - 1];
                        _tOwned[account] = 0;
                        _isExcluded[account] = false;
                        _excluded.pop();
                        break;
                    }
                }
            }
        }
    }

    function setInitializer(address initializer) external onlyOwner {
        require(!_hasLiqBeenAdded, "Liquidity is already in.");
        require(initializer != address(this), "Can't be self.");
        antiSnipe = AntiSnipe(initializer);
    }

    function setBlacklistEnabled(address account, bool enabled) external onlyOwner {
        antiSnipe.setBlacklistEnabled(account, enabled);
    }

    function isBlacklisted(address account) public view returns (bool) {
        return antiSnipe.isBlacklisted(account);
    }

    function getSniperAmt() public view returns (uint256) {
        return antiSnipe.getSniperAmt();
    }

    function removeSniper(address account) external onlyOwner {
        antiSnipe.removeSniper(account);
    }

    function setProtectionSettings(bool _antiSnipe, bool _antiGas, bool _antiBlock, bool _algo) external onlyOwner {
        antiSnipe.setProtections(_antiSnipe, _antiGas, _antiBlock, _algo);
    }

    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 75, "Too low.");
        antiSnipe.setGasPriceLimit(gas);
    }

    function setTaxesBuy(uint16 reflect, uint16 marketing) external onlyOwner {
        require(reflect <= staticVals.maxReflect
                && marketing <= staticVals.maxMarketing);
        require(reflect + marketing <= 3450);
        _buyTaxes.reflect = reflect;
        _buyTaxes.marketing = marketing;
    }

    function setTaxesSell(uint16 reflect, uint16 marketing) external onlyOwner {
        require(reflect <= staticVals.maxReflect
                && marketing <= staticVals.maxMarketing);
        require(reflect + marketing <= 3450);
        _sellTaxes.reflect = reflect;
        _sellTaxes.marketing = marketing;
    }

    function setTaxesTransfer(uint16 reflect, uint16 marketing) external onlyOwner {
        require(reflect <= staticVals.maxReflect
                && marketing <= staticVals.maxMarketing);
        require(reflect + marketing <= 3450);
        _transferTaxes.reflect = reflect;
        _transferTaxes.marketing = marketing;
    }

    function setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 1000), "Max Transaction amt must be above 0.1% of total supply.");
        _maxTxAmount = check;
        maxTxAmountUI = (startingSupply * percent) / divisor;
    }

    function setMaxWalletSize(uint256 percent, uint256 divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 1000), "Max Wallet amt must be above 0.1% of total supply.");
        _maxWalletSize = check;
        maxWalletSizeUI = (startingSupply * percent) / divisor;
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
    }

    function setWallets(address payable marketingWallet) external onlyOwner {
        _marketingWallet = payable(marketingWallet);
    }

    function setContractSwapEnabled(bool _enabled) public onlyOwner {
        contractSwapEnabled = _enabled;
        emit ContractSwapEnabledUpdated(_enabled);
    }

    function _hasLimits(address from, address to) private view returns (bool) {
        return from != owner()
            && to != owner()
            && !_liquidityHolders[to]
            && !_liquidityHolders[from]
            && to != DEAD
            && to != address(0)
            && from != address(this);
    }

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

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if(lpPairs[from] || lpPairs[to]){
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }
            if(to != _routerAddress && !lpPairs[to]) {
                require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
            }
        }

        bool takeFee = true;
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }

        if (lpPairs[to]) {
            if (!inSwap
                && contractSwapEnabled
            ) {
                uint256 contractTokenBalance = balanceOf(address(this));
                if (contractTokenBalance >= swapThreshold) {
                    if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                    contractSwap(contractTokenBalance);
                }
            }      
        } 
        return _finalizeTransfer(from, to, amount, takeFee);
    }

    function contractSwap(uint256 contractTokenBalance) private lockTheSwap {
        if(_allowances[address(this)][address(dexRouter)] != type(uint256).max) {
            _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        }
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            contractTokenBalance,
            0, // accept any amount of ETH
            path,
            _marketingWallet,
            block.timestamp
        );
    }

    function _checkLiquidityAdd(address from, address to) private {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[from] = true;
            _hasLiqBeenAdded = true;
            if(address(antiSnipe) == address(0)){
                antiSnipe = AntiSnipe(address(this));
            }
            contractSwapEnabled = true;
            emit ContractSwapEnabledUpdated(true);
        }
    }

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        setExcludedFromReward(address(this), true);
        setExcludedFromReward(lpPair, true);
        if(address(antiSnipe) == address(0)){
            antiSnipe = AntiSnipe(address(this));
        }
        try antiSnipe.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp)) {} catch {}
        tradingEnabled = true;
    }

    function sweepContingency() external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot call after liquidity.");
        payable(owner()).transfer(address(this).balance);
    }


    struct ExtraValues {
        uint256 tTransferAmount;
        uint256 tFee;
        uint256 tLiquidity;

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;
    }

    function _finalizeTransfer(address from, address to, uint256 tAmount, bool takeFee) private returns (bool) {
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                revert("Only owner can transfer at this time.");
            }
        }

        ExtraValues memory values = _getValues(from, to, tAmount, takeFee);

        _rOwned[from] = _rOwned[from] - values.rAmount;
        _rOwned[to] = _rOwned[to] + values.rTransferAmount;

        if (_isExcluded[from] && !_isExcluded[to]) {
            _tOwned[from] = _tOwned[from] - tAmount;
        } else if (!_isExcluded[from] && _isExcluded[to]) {
            _tOwned[to] = _tOwned[to] + values.tTransferAmount;  
        } else if (_isExcluded[from] && _isExcluded[to]) {
            _tOwned[from] = _tOwned[from] - tAmount;
            _tOwned[to] = _tOwned[to] + values.tTransferAmount;
        }

        if (values.tLiquidity > 0)
            _takeLiquidity(from, values.tLiquidity);
        if (values.rFee > 0 || values.tFee > 0)
            _rTotal -= values.rFee;
            _tFeeTotal += values.tFee;

        emit Transfer(from, to, values.tTransferAmount);
        return true;
    }

    function _getValues(address from, address to, uint256 tAmount, bool takeFee) private returns (ExtraValues memory) {
        ExtraValues memory values;
        uint256 currentRate = _getRate();

        values.rAmount = tAmount * currentRate;

        if (_hasLimits(from, to)) {
            bool checked;
            try antiSnipe.checkUser(from, to, tAmount) returns (bool check) {
                checked = check;
            } catch {
                revert();
            }

            if(!checked) {
                revert();
            }
        }

        if(takeFee) {
            if (lpPairs[to]) {
                currentTaxes.reflect = _sellTaxes.reflect;
                currentTaxes.marketing = _sellTaxes.marketing;
            } else if (lpPairs[from]) {
                currentTaxes.reflect = _buyTaxes.reflect;
                currentTaxes.marketing = _buyTaxes.marketing;
            } else {
                currentTaxes.reflect = _transferTaxes.reflect;
                currentTaxes.marketing = _transferTaxes.marketing;
            }

            values.tFee = (tAmount * currentTaxes.reflect) / staticVals.masterTaxDivisor;
            values.tLiquidity = (tAmount * (currentTaxes.marketing)) / staticVals.masterTaxDivisor;
            values.tTransferAmount = tAmount - (values.tFee + values.tLiquidity);

            values.rFee = values.tFee * currentRate;
        } else {
            values.tFee = 0;
            values.tLiquidity = 0;
            values.tTransferAmount = tAmount;

            values.rFee = 0;
        }
        values.rTransferAmount = values.rAmount - (values.rFee + (values.tLiquidity * currentRate));
        return values;
    }

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

    function _takeLiquidity(address sender, uint256 tLiquidity) private {
        _rOwned[address(this)] = _rOwned[address(this)] + (tLiquidity * _getRate());
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity;
        emit Transfer(sender, address(this), tLiquidity); // Transparency is the key to success.
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","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":"tokensIntoLiqudity","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"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"changeRouterContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSniperAmt","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":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"intializeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSizeUI","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initializer","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiGas","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"},{"internalType":"bool","name":"_algo","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setTaxesTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staticVals","outputs":[{"internalType":"uint16","name":"maxReflect","type":"uint16"},{"internalType":"uint16","name":"maxMarketing","type":"uint16"},{"internalType":"uint16","name":"masterTaxDivisor","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","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":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60006004819055608081905260a0819052600d805463ffffffff19908116909155606460c081905261025860e0819052600e805484166302580064908117909155610100839052610120829052600f80548516821790556101409290925261016052601080549092161790556101e06040526103206101808190526101a0526127106101c0526011805465ffffffffffff19166527100320032017905560188054737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031991821681179092556019805473550380c2328fe523e4bc4def51e50a2a03524405600161ff0160a01b03199091161790556020805461ffff60ff60b01b01191690558254339116811790925562000119919060001962000204565b601854620001359030906001600160a01b031660001962000204565b6001600660006200014e6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252812080548316600190811790915561dead82527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280549093168117909255600990620001d66000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905562000305565b6001600160a01b038316620002565760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620002a45760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064016200024d565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b614df780620003156000396000f3fe6080604052600436106103645760003560e01c80635c24b074116101c6578063a9059cbb116100f7578063eb50e70e11610095578063f6540ec71161006f578063f6540ec714610a30578063fb78680d14610a46578063fdb78c0e14610a66578063fe575a8714610a9957600080fd5b8063eb50e70e146109db578063ee5d9c2d146109fb578063eec2744e14610a1057600080fd5b8063cab5ebea116100d1578063cab5ebea14610935578063ce9a6a2a14610955578063dd62ed3e14610975578063eafb5a3c146109bb57600080fd5b8063a9059cbb146108cb578063c2fa418f146108eb578063c6831cd81461091057600080fd5b806388f82020116101645780638a8c523c1161013e5780638a8c523c146108815780638da5cb5b1461084e57806395d89b4114610896578063a457c2d7146108ab57600080fd5b806388f8202014610815578063893d20e81461084e5780638a63bd9b1461086c57600080fd5b8063715018a6116101a0578063715018a6146107805780637b45d43114610795578063804234f7146107d557806380c581d1146107f557600080fd5b80635c24b0741461072a578063640384091461074a57806370a082311461076057600080fd5b8063313ce567116102a0578063452ed4f11161023e5780634fbee193116102185780634fbee1931461069d57806350a8e016146106d657806355dbc369146106f5578063590ffdce1461070a57600080fd5b8063452ed4f1146106435780634ada218b146106635780634fb2e45d1461067d57600080fd5b8063395093511161027a57806339509351146105c35780633e1058a6146105e35780633f3cf56c14610603578063413c760b1461062357600080fd5b8063313ce5671461056157806333251a0b14610583578063384f36b6146105a357600080fd5b806318160ddd1161030d57806326003957116102e757806326003957146104ec57806329dd87981461050c5780632b112e491461052c5780632d8381191461054157600080fd5b806318160ddd146104575780631b6afa2d1461047657806323b872dd146104cc57600080fd5b8063092316021161033e57806309231602146103e5578063095ea7b31461040757806313e461921461043757600080fd5b806303fd2a451461037057806306fdde03146103a35780630758d924146103c557600080fd5b3661036b57005b600080fd5b34801561037c57600080fd5b5061038661dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103af57600080fd5b506103b8610ab9565b60405161039a91906145cb565b3480156103d157600080fd5b50601654610386906001600160a01b031681565b3480156103f157600080fd5b50610405610400366004614620565b610b4b565b005b34801561041357600080fd5b5061042761042236600461464e565b610c6f565b604051901515815260200161039a565b34801561044357600080fd5b50610405610452366004614688565b610c86565b34801561046357600080fd5b506013545b60405190815260200161039a565b34801561048257600080fd5b506011546104a79061ffff808216916201000081048216916401000000009091041683565b6040805161ffff9485168152928416602084015292169181019190915260600161039a565b3480156104d857600080fd5b506104276104e73660046146c1565b611041565b3480156104f857600080fd5b50610405610507366004614702565b6110b9565b34801561051857600080fd5b50610405610527366004614724565b6111d0565b34801561053857600080fd5b506104686112b9565b34801561054d57600080fd5b5061046861055c366004614620565b6112ec565b34801561056d57600080fd5b5060125460405160ff909116815260200161039a565b34801561058f57600080fd5b5061040561059e366004614780565b611383565b3480156105af57600080fd5b506104056105be366004614780565b611423565b3480156105cf57600080fd5b506104276105de36600461464e565b6114b5565b3480156105ef57600080fd5b506104056105fe3660046147b4565b6114f1565b34801561060f57600080fd5b5061040561061e366004614702565b6115b6565b34801561062f57600080fd5b5061040561063e3660046147b4565b6116cd565b34801561064f57600080fd5b50601754610386906001600160a01b031681565b34801561066f57600080fd5b506020546104279060ff1681565b34801561068957600080fd5b50610405610698366004614780565b611792565b3480156106a957600080fd5b506104276106b8366004614780565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106e257600080fd5b5060205461042790610100900460ff1681565b34801561070157600080fd5b506104686119d8565b34801561071657600080fd5b50610405610725366004614688565b611a60565b34801561073657600080fd5b50610405610745366004614780565b611ad9565b34801561075657600080fd5b50610468601b5481565b34801561076c57600080fd5b5061046861077b366004614780565b611c18565b34801561078c57600080fd5b50610405611c77565b3480156107a157600080fd5b50600e546107ba9061ffff808216916201000090041682565b6040805161ffff93841681529290911660208301520161039a565b3480156107e157600080fd5b506104056107f03660046147b4565b611d27565b34801561080157600080fd5b50610405610810366004614688565b611dec565b34801561082157600080fd5b50610427610830366004614780565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561085a57600080fd5b506000546001600160a01b0316610386565b34801561087857600080fd5b50610427611fdf565b34801561088d57600080fd5b5061040561204e565b3480156108a257600080fd5b506103b8612253565b3480156108b757600080fd5b506104276108c636600461464e565b612262565b3480156108d757600080fd5b506104276108e636600461464e565b612299565b3480156108f757600080fd5b506010546107ba9061ffff808216916201000090041682565b34801561091c57600080fd5b50600f546107ba9061ffff808216916201000090041682565b34801561094157600080fd5b506104056109503660046147e7565b6122b0565b34801561096157600080fd5b506104056109703660046148f3565b612383565b34801561098157600080fd5b506104686109903660046149b5565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156109c757600080fd5b506104056109d6366004614780565b612ac5565b3480156109e757600080fd5b506104056109f6366004614780565b612ece565b348015610a0757600080fd5b50610405612f4b565b348015610a1c57600080fd5b50610405610a2b366004614688565b61302e565b348015610a3c57600080fd5b50610468601d5481565b348015610a5257600080fd5b50610405610a613660046149e3565b6130d6565b348015610a7257600080fd5b50601954610427907501000000000000000000000000000000000000000000900460ff1681565b348015610aa557600080fd5b50610427610ab4366004614780565b613163565b6060600b8054610ac890614a15565b80601f0160208091040260200160405190810160405280929190818152602001828054610af490614a15565b8015610b415780601f10610b1657610100808354040283529160200191610b41565b820191906000526020600020905b815481529060010190602001808311610b2457829003601f168201915b5050505050905090565b6000546001600160a01b03163314610b9e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b604b811015610bef5760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610b95565b6020546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610c5457600080fd5b505af1158015610c68573d6000803e3d6000fd5b5050505050565b6000610c7c338484613200565b5060015b92915050565b6000546001600160a01b03163314610cd45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b60018115151415610e16576001600160a01b03821660009081526007602052604090205460ff1615610d485760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610b95565b6001600160a01b03821660009081526001602052604090205415610da2576001600160a01b038216600090815260016020526040902054610d88906112ec565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee301805473ffffffffffffffffffffffffffffffffffffffff19169091179055565b8061103d576001600160a01b03821660009081526007602052604090205460ff16610e835760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610b95565b60085460011415610eff576001600160a01b038216600090815260026020908152604080832083905560079091529020805460ff191690556008805480610ecc57610ecc614a69565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b60085481101561103b57826001600160a01b031660088281548110610f2957610f29614a98565b6000918252602090912001546001600160a01b031614156110295760088054610f5490600190614af6565b81548110610f6457610f64614a98565b600091825260209091200154600880546001600160a01b039092169183908110610f9057610f90614a98565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff191690556008805480610ff557610ff5614a69565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff1916905501905561103b565b8061103381614b0d565b915050610f02565b505b5050565b6001600160a01b0383166000908152600560209081526040808320338452909152812054600019146110a6576001600160a01b0384166000908152600560209081526040808320338452909152812080548492906110a0908490614af6565b90915550505b6110b184848461330d565b949350505050565b6000546001600160a01b031633146111075760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b600081836013546111189190614b28565b6111229190614b76565b90506103e86013546111349190614b76565b8110156111a95760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610b95565b601c819055600a5482906111be908590614b28565b6111c89190614b76565b601d55505050565b6000546001600160a01b0316331461121e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b6020546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b15801561129b57600080fd5b505af11580156112af573d6000803e3d6000fd5b5050505050505050565b60006112c56000611c18565b6112d061dead611c18565b6112da9190614b8a565b6013546112e79190614af6565b905090565b60006014548211156113665760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610b95565b600061137061375c565b905061137c8184614b76565b9392505050565b6000546001600160a01b031633146113d15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b6020546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610c3a565b6000546001600160a01b031633146114715760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b602054610100900460ff161561148657600080fd5b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610c7c9185906114ec908690614b8a565b613200565b6000546001600160a01b0316331461153f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b60115461ffff90811690831611801590611569575060115461ffff62010000909104811690821611155b61157257600080fd5b610d7a61157f8284614ba2565b61ffff16111561158e57600080fd5b600f805461ffff928316620100000263ffffffff199091169290931691909117919091179055565b6000546001600160a01b031633146116045760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b600081836013546116159190614b28565b61161f9190614b76565b90506103e86013546116319190614b76565b8110156116a65760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610b95565b601a819055600a5482906116bb908590614b28565b6116c59190614b76565b601b55505050565b6000546001600160a01b0316331461171b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b60115461ffff90811690831611801590611745575060115461ffff62010000909104811690821611155b61174e57600080fd5b610d7a61175b8284614ba2565b61ffff16111561176a57600080fd5b6010805461ffff928316620100000263ffffffff199091169290931691909117919091179055565b6000546001600160a01b031633146117e05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b6001600160a01b03811661185c5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610b95565b6001600160a01b03811661dead14156118dd5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610b95565b600080546118f6916001600160a01b0390911690611a60565b611901816001611a60565b6000546019546001600160a01b0390811691161415611943576019805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b60008054611959906001600160a01b0316611c18565b11156119805760005461197e906001600160a01b03168261197982611c18565b61330d565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000602060029054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b815260040160206040518083038186803b158015611a2857600080fd5b505afa158015611a3c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e79190614bc8565b6000546001600160a01b03163314611aae5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611b275760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b602054610100900460ff1615611b7f5760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610b95565b6001600160a01b038116301415611bd85760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610b95565b602080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6001600160a01b03811660009081526007602052604081205460ff1615611c5557506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610c80906112ec565b6000546001600160a01b03163314611cc55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b60008054611cde916001600160a01b0390911690611a60565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611d755760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b60115461ffff90811690831611801590611d9f575060115461ffff62010000909104811690821611155b611da857600080fd5b610d7a611db58284614ba2565b61ffff161115611dc457600080fd5b600e805461ffff928316620100000263ffffffff199091169290931691909117919091179055565b6000546001600160a01b03163314611e3a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b80611ee4576001600160a01b038281166000818152600360209081526040808320805460ff19169055905490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d1906044015b600060405180830381600087803b158015611ec857600080fd5b505af1158015611edc573d6000803e3d6000fd5b505050505050565b60045415611f4b576203f48060045442611efe9190614af6565b11611f4b5760405162461bcd60e51b815260206004820152600e60248201527f332044617920436f6f6c646f776e0000000000000000000000000000000000006044820152606401610b95565b6001600160a01b03828116600081815260036020908152604091829020805460ff19166001908117909155426004908155915492517f80c581d1000000000000000000000000000000000000000000000000000000008152918201939093526024810192909252620100009004909116906380c581d190604401600060405180830381600087803b158015611ec857600080fd5b600080546001600160a01b0316331461202e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b6016546120489030906001600160a01b0316600019613200565b50600190565b6000546001600160a01b0316331461209c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b60205460ff16156120ef5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610b95565b602054610100900460ff166121465760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610b95565b612151306001610c86565b601754612168906001600160a01b03166001610c86565b6020546201000090046001600160a01b03166121ae57602080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6020546017546040517f4b38f1d40000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff42166044820152620100009092041690634b38f1d490606401600060405180830381600087803b15801561223257600080fd5b505af1925050508015612243575060015b506020805460ff19166001179055565b6060600c8054610ac890614a15565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610c7c9185906114ec908690614af6565b60006122a633848461330d565b5060019392505050565b6000546001600160a01b031633146122fe5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b601980548215157501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579061237890831515815260200190565b60405180910390a150565b6000546001600160a01b031633146123d15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b602054760100000000000000000000000000000000000000000000900460ff16156123fb57600080fd5b603282511061240957600080fd5b805182511461241757600080fd5b6040805180820190915260078082527f42757520496e7500000000000000000000000000000000000000000000000000602090920191825261245b91600b91614532565b506040805180820190915260038082527f425555000000000000000000000000000000000000000000000000000000000060209092019182526124a091600c91614532565b5064174876e800600a556012805460ff191660091790556012546124c89060ff16600a614cc5565b600a546124d59190614b28565b60138190556124e690600019614cd4565b6124f290600019614af6565b6014556018546016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169182179055604080517fc45a0155000000000000000000000000000000000000000000000000000000008152905163c45a015591600480820192602092909190829003018186803b15801561257257600080fd5b505afa158015612586573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125aa9190614ce8565b6001600160a01b031663c9c65396601660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561260657600080fd5b505afa15801561261a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263e9190614ce8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b15801561269d57600080fd5b505af11580156126b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d59190614ce8565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556000908152600360208190526040909120805460ff19166001179055600a546103e89161272e9190614b28565b6127389190614b76565b601b55600a5460649061274c906003614b28565b6127569190614b76565b601d5560125461276a9060ff16600a614cc5565b601b546127779190614b28565b601a5560125461278b9060ff16600a614cc5565b601d546127989190614b28565b601c55601354612710906127ad906005614b28565b6127b79190614b76565b601e556013546103e8906127cc906005614b28565b6127d69190614b76565b601f556020546201000090046001600160a01b031661281f57602080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b602080547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000179055601454600160006128796000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556128a56000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6013546040516128ec91815260200190565b60405180910390a360165461290e9030906001600160a01b0316600019613200565b60005b82518110156129a857600083828151811061292e5761292e614a98565b60209081029190910101516012549091506000906129509060ff16600a614cc5565b84848151811061296257612962614a98565b60200260200101516129749190614b28565b905061299261298b6000546001600160a01b031690565b838361330d565b50505080806129a090614b0d565b915050612911565b506129d46129be6000546001600160a01b031690565b3061197961077b6000546001600160a01b031690565b506016546001600160a01b031663f305d71947306129f181611c18565b600080612a066000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612a8157600080fd5b505af1158015612a95573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612aba9190614d05565b50505061103d61204e565b6000546001600160a01b03163314612b135760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015612b5357600080fd5b505afa158015612b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b8b9190614ce8565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612bd357600080fd5b505afa158015612be7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c0b9190614ce8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015612c6957600080fd5b505afa158015612c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ca19190614ce8565b90506001600160a01b038116612e6c57816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015612cea57600080fd5b505afa158015612cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d229190614ce8565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612d6a57600080fd5b505afa158015612d7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612da29190614ce8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015612e0257600080fd5b505af1158015612e16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e3a9190614ce8565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612e95565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03841690811790915561103b903090600019613200565b6000546001600160a01b03163314612f1c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b6019805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b03163314612f995760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b602054610100900460ff1615612ff15760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610b95565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f1935050505015801561302b573d6000803e3d6000fd5b50565b6000546001600160a01b0316331461307c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b6020546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401611eae565b6000546001600160a01b031633146131245760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b95565b82846013546131339190614b28565b61313d9190614b76565b601e556013548190613150908490614b28565b61315a9190614b76565b601f5550505050565b6020546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a879060240160206040518083038186803b1580156131c857600080fd5b505afa1580156131dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c809190614d33565b6001600160a01b0383166132565760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610b95565b6001600160a01b0382166132ac5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610b95565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b03841661338b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610b95565b6001600160a01b0383166134075760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610b95565b6000821161347d5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610b95565b61348784846138ed565b156136615760205460ff166134de5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610b95565b6001600160a01b03841660009081526003602052604090205460ff168061351d57506001600160a01b03831660009081526003602052604090205460ff165b1561359a57601a5482111561359a5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610b95565b6018546001600160a01b038481169116148015906135d157506001600160a01b03831660009081526003602052604090205460ff16155b1561366157601c54826135e385611c18565b6135ed9190614b8a565b11156136615760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610b95565b6001600160a01b03841660009081526006602052604090205460019060ff16806136a357506001600160a01b03841660009081526006602052604090205460ff165b156136ac575060005b6001600160a01b03841660009081526003602052604090205460ff16156137475760195474010000000000000000000000000000000000000000900460ff1615801561371357506019547501000000000000000000000000000000000000000000900460ff165b1561374757600061372330611c18565b9050601e54811061374557601f54811061373c5750601f545b613745816139aa565b505b61375385858584613bf2565b95945050505050565b60145460135460009190825b6008548110156138b45782600160006008848154811061378a5761378a614a98565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806137f557508160026000600884815481106137ce576137ce614a98565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156138125760135460145461380a9190614b76565b935050505090565b600160006008838154811061382957613829614a98565b60009182526020808320909101546001600160a01b031683528201929092526040019020546138589084614af6565b9250600260006008838154811061387157613871614a98565b60009182526020808320909101546001600160a01b031683528201929092526040019020546138a09083614af6565b9150806138ac81614b0d565b915050613768565b506013546014546138c59190614b76565b8210156138e3576013546014546138dc9190614b76565b9250505090565b6138dc8183614b76565b600080546001600160a01b0384811691161480159061391a57506000546001600160a01b03838116911614155b801561393f57506001600160a01b03821660009081526009602052604090205460ff16155b801561396457506001600160a01b03831660009081526009602052604090205460ff16155b801561397b57506001600160a01b03821661dead14155b801561398f57506001600160a01b03821615155b801561137c57506001600160a01b0383163014159392505050565b601980547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790553060009081526005602090815260408083206016546001600160a01b0316845290915290205460001914613a42573060009081526005602090815260408083206016546001600160a01b03168452909152902060001990555b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613a7757613a77614a98565b6001600160a01b03928316602091820292909201810191909152601654604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b158015613ae457600080fd5b505afa158015613af8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1c9190614ce8565b81600181518110613b2f57613b2f614a98565b6001600160a01b0392831660209182029290920101526016546019546040517f791ac9470000000000000000000000000000000000000000000000000000000081529183169263791ac94792613b949287926000928892909116904290600401614d50565b600060405180830381600087803b158015613bae57600080fd5b505af1158015613bc2573d6000803e3d6000fd5b5050601980547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16905550505050565b602054600090610100900460ff16613c9e57613c0e8585613fa4565b602054610100900460ff16158015613c2b5750613c2b85856138ed565b15613c9e5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610b95565b6000613cac86868686614151565b60808101516001600160a01b038816600090815260016020526040902054919250613cd691614af6565b6001600160a01b0380881660009081526001602052604080822093909355606084015191881681529190912054613d0d9190614b8a565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff168015613d6157506001600160a01b03851660009081526007602052604090205460ff16155b15613da8576001600160a01b038616600090815260026020526040902054613d8a908590614af6565b6001600160a01b038716600090815260026020526040902055613ee8565b6001600160a01b03861660009081526007602052604090205460ff16158015613de957506001600160a01b03851660009081526007602052604090205460ff165b15613e315780516001600160a01b038616600090815260026020526040902054613e139190614b8a565b6001600160a01b038616600090815260026020526040902055613ee8565b6001600160a01b03861660009081526007602052604090205460ff168015613e7157506001600160a01b03851660009081526007602052604090205460ff165b15613ee8576001600160a01b038616600090815260026020526040902054613e9a908590614af6565b6001600160a01b0380881660009081526002602052604080822093909355835191881681529190912054613ece9190614b8a565b6001600160a01b0386166000908152600260205260409020555b604081015115613f0057613f00868260400151614472565b60008160a001511180613f17575060008160200151115b15613f38578060a0015160146000828254613f329190614af6565b90915550505b806020015160156000828254613f4e9190614b8a565b909155505080516040519081526001600160a01b0386811691908816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600195945050505050565b602054610100900460ff16156140225760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610b95565b61402c82826138ed565b15801561404657506017546001600160a01b038281169116145b1561103d576001600160a01b038083166000908152600960209081526040909120805460ff1916600117905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790819055620100009004166140d957602080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601980547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b61418a6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6141c36040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006141cd61375c565b90506141d98186614b28565b60808301526141e887876138ed565b156142aa576020546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a5390606401602060405180830381600087803b15801561426357600080fd5b505af1925050508015614293575060408051601f3d908101601f1916820190925261429091810190614d33565b60015b61429c57600080fd5b9050806142a857600080fd5b505b831561441c576001600160a01b03861660009081526003602052604090205460ff161561430257600f54600d80546201000080840461ffff90811690910263ffffffff19909216931692909217919091179055614381565b6001600160a01b03871660009081526003602052604090205460ff161561435457600e54600d80546201000080840461ffff90811690910263ffffffff19909216931692909217919091179055614381565b601054600d80546201000080840461ffff90811690910263ffffffff199092169316929092179190911790555b601154600d5461ffff6401000000009092048216916143a1911687614b28565b6143ab9190614b76565b6020830152601154600d5461ffff6401000000009092048216916143d6916201000090041687614b28565b6143e09190614b76565b6040830181905260208301516143f69190614b8a565b6144009086614af6565b82526020820151614412908290614b28565b60a0830152614435565b6000602083018190526040830181905285835260a08301525b8082604001516144459190614b28565b8260a001516144549190614b8a565b82608001516144639190614af6565b60608301525095945050505050565b61447a61375c565b6144849082614b28565b3060009081526001602052604090205461449e9190614b8a565b3060009081526001602090815260408083209390935560079052205460ff16156144ee57306000908152600260205260409020546144dd908290614b8a565b306000908152600260205260409020555b60405181815230906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b82805461453e90614a15565b90600052602060002090601f01602090048101928261456057600085556145a6565b82601f1061457957805160ff19168380011785556145a6565b828001600101855582156145a6579182015b828111156145a657825182559160200191906001019061458b565b506145b29291506145b6565b5090565b5b808211156145b257600081556001016145b7565b600060208083528351808285015260005b818110156145f8578581018301518582016040015282016145dc565b8181111561460a576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561463257600080fd5b5035919050565b6001600160a01b038116811461302b57600080fd5b6000806040838503121561466157600080fd5b823561466c81614639565b946020939093013593505050565b801515811461302b57600080fd5b6000806040838503121561469b57600080fd5b82356146a681614639565b915060208301356146b68161467a565b809150509250929050565b6000806000606084860312156146d657600080fd5b83356146e181614639565b925060208401356146f181614639565b929592945050506040919091013590565b6000806040838503121561471557600080fd5b50508035926020909101359150565b6000806000806080858703121561473a57600080fd5b84356147458161467a565b935060208501356147558161467a565b925060408501356147658161467a565b915060608501356147758161467a565b939692955090935050565b60006020828403121561479257600080fd5b813561137c81614639565b803561ffff811681146147af57600080fd5b919050565b600080604083850312156147c757600080fd5b6147d08361479d565b91506147de6020840161479d565b90509250929050565b6000602082840312156147f957600080fd5b813561137c8161467a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561485c5761485c614804565b604052919050565b600067ffffffffffffffff82111561487e5761487e614804565b5060051b60200190565b600082601f83011261489957600080fd5b813560206148ae6148a983614864565b614833565b82815260059290921b840181019181810190868411156148cd57600080fd5b8286015b848110156148e857803583529183019183016148d1565b509695505050505050565b6000806040838503121561490657600080fd5b823567ffffffffffffffff8082111561491e57600080fd5b818501915085601f83011261493257600080fd5b813560206149426148a983614864565b82815260059290921b8401810191818101908984111561496157600080fd5b948201945b8386101561498857853561497981614639565b82529482019490820190614966565b9650508601359250508082111561499e57600080fd5b506149ab85828601614888565b9150509250929050565b600080604083850312156149c857600080fd5b82356149d381614639565b915060208301356146b681614639565b600080600080608085870312156149f957600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c90821680614a2957607f821691505b60208210811415614a63577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015614b0857614b08614ac7565b500390565b6000600019821415614b2157614b21614ac7565b5060010190565b6000816000190483118215151615614b4257614b42614ac7565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614b8557614b85614b47565b500490565b60008219821115614b9d57614b9d614ac7565b500190565b600061ffff808316818516808303821115614bbf57614bbf614ac7565b01949350505050565b600060208284031215614bda57600080fd5b5051919050565b600181815b80851115614c1c578160001904821115614c0257614c02614ac7565b80851615614c0f57918102915b93841c9390800290614be6565b509250929050565b600082614c3357506001610c80565b81614c4057506000610c80565b8160018114614c565760028114614c6057614c7c565b6001915050610c80565b60ff841115614c7157614c71614ac7565b50506001821b610c80565b5060208310610133831016604e8410600b8410161715614c9f575081810a610c80565b614ca98383614be1565b8060001904821115614cbd57614cbd614ac7565b029392505050565b600061137c60ff841683614c24565b600082614ce357614ce3614b47565b500690565b600060208284031215614cfa57600080fd5b815161137c81614639565b600080600060608486031215614d1a57600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215614d4557600080fd5b815161137c8161467a565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015614da05784516001600160a01b031683529383019391830191600101614d7b565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212202a0632cde5289457a372931a33da0a6fcfd82dd475e3dc0dd9e14085887ab04064736f6c63430008090033

Deployed ByteCode Sourcemap

7645:24315:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9530:73;;;;;;;;;;;;9561:42;9530:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;9530:73:0;;;;;;;;15381:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9355:35::-;;;;;;;;;;-1:-1:-1;9355:35:0;;;;-1:-1:-1;;;;;9355:35:0;;;21427:149;;;;;;;;;;-1:-1:-1;21427:149:0;;;;;:::i;:::-;;:::i;:::-;;16075:161;;;;;;;;;;-1:-1:-1;16075:161:0;;;;;:::i;:::-;;:::i;:::-;;;1992:14:1;;1985:22;1967:41;;1955:2;1940:18;16075:161:0;1827:187:1;19307:1139:0;;;;;;;;;;-1:-1:-1;19307:1139:0;;;;;:::i;:::-;;:::i;15116:83::-;;;;;;;;;;-1:-1:-1;15189:7:0;;15116:83;;;2675:25:1;;;2663:2;2648:18;15116:83:0;2529:177:1;9014:158:0;;;;;;;;;;-1:-1:-1;9014:158:0;;;;;;;;;;;;;;;;;;;;;;;;;;2917:6:1;2950:15;;;2932:34;;3002:15;;;2997:2;2982:18;;2975:43;3054:15;;3034:18;;;3027:43;;;;2895:2;2880:18;9014:158:0;2711:365:1;16742:306:0;;;;;;;;;;-1:-1:-1;16742:306:0;;;;;:::i;:::-;;:::i;22928:340::-;;;;;;;;;;-1:-1:-1;22928:340:0;;;;;:::i;:::-;;:::i;21224:195::-;;;;;;;;;;-1:-1:-1;21224:195:0;;;;;:::i;:::-;;:::i;18755:141::-;;;;;;;;;;;;;:::i;24219:250::-;;;;;;;;;;-1:-1:-1;24219:250:0;;;;;:::i;:::-;;:::i;15205:80::-;;;;;;;;;;-1:-1:-1;15273:9:0;;15205:80;;15273:9;;;;4589:36:1;;4577:2;4562:18;15205:80:0;4447:184:1;21108:108:0;;;;;;;;;;-1:-1:-1;21108:108:0;;;;;:::i;:::-;;:::i;18600:147::-;;;;;;;;;;-1:-1:-1;18600:147:0;;;;;:::i;:::-;;:::i;17056:215::-;;;;;;;;;;-1:-1:-1;17056:215:0;;;;;:::i;:::-;;:::i;21910:321::-;;;;;;;;;;-1:-1:-1;21910:321:0;;;;;:::i;:::-;;:::i;22580:340::-;;;;;;;;;;-1:-1:-1;22580:340:0;;;;;:::i;:::-;;:::i;22239:333::-;;;;;;;;;;-1:-1:-1;22239:333:0;;;;;:::i;:::-;;:::i;9397:21::-;;;;;;;;;;-1:-1:-1;9397:21:0;;;;-1:-1:-1;;;;;9397:21:0;;;10004:34;;;;;;;;;;-1:-1:-1;10004:34:0;;;;;;;;13859:701;;;;;;;;;;-1:-1:-1;13859:701:0;;;;;:::i;:::-;;:::i;18904:125::-;;;;;;;;;;-1:-1:-1;18904:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;18993:28:0;18969:4;18993:28;;;:19;:28;;;;;;;;;18904:125;10045:36;;;;;;;;;;-1:-1:-1;10045:36:0;;;;;;;;;;;20996:104;;;;;;;;;;;;;:::i;19037:134::-;;;;;;;;;;-1:-1:-1;19037:134:0;;;;;:::i;:::-;;:::i;20454:248::-;;;;;;;;;;-1:-1:-1;20454:248:0;;;;;:::i;:::-;;:::i;9822:28::-;;;;;;;;;;;;;;;;15694:198;;;;;;;;;;-1:-1:-1;15694:198:0;;;;;:::i;:::-;;:::i;14568:195::-;;;;;;;;;;;;;:::i;8678:101::-;;;;;;;;;;-1:-1:-1;8678:101:0;;;;;;;;;;;;;;;;;;;5493:6:1;5526:15;;;5508:34;;5578:15;;;;5573:2;5558:18;;5551:43;5456:18;8678:101:0;5313:287:1;21584:318:0;;;;;;;;;;-1:-1:-1;21584:318:0;;;;;:::i;:::-;;:::i;18094:498::-;;;;;;;;;;-1:-1:-1;18094:498:0;;;;;:::i;:::-;;:::i;19179:120::-;;;;;;;;;;-1:-1:-1;19179:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;19271:20:0;19247:4;19271:20;;;:11;:20;;;;;;;;;19179:120;15467:80;;;;;;;;;;-1:-1:-1;15519:7:0;13837:6;-1:-1:-1;;;;;13837:6:0;15467:80;18755:141;16561:173;;;;;;;;;;;;;:::i;27110:517::-;;;;;;;;;;;;;:::i;15291:84::-;;;;;;;;;;;;;:::i;17279:225::-;;;;;;;;;;-1:-1:-1;17279:225:0;;;;;:::i;:::-;;:::i;15900:167::-;;;;;;;;;;-1:-1:-1;15900:167:0;;;;;:::i;:::-;;:::i;8899:106::-;;;;;;;;;;-1:-1:-1;8899:106:0;;;;;;;;;;;;;;;8788:102;;;;;;;;;;-1:-1:-1;8788:102:0;;;;;;;;;;;;;;;23715:165;;;;;;;;;;-1:-1:-1;23715:165:0;;;;;:::i;:::-;;:::i;11226:1994::-;;;;;;;;;;-1:-1:-1;11226:1994:0;;;;;:::i;:::-;;:::i;15553:133::-;;;;;;;;;;-1:-1:-1;15553:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;15655:19:0;;;15637:7;15655:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;15553:133;17512:574;;;;;;;;;;-1:-1:-1;17512:574:0;;;;;:::i;:::-;;:::i;23573:134::-;;;;;;;;;;-1:-1:-1;23573:134:0;;;;;:::i;:::-;;:::i;27635:183::-;;;;;;;;;;;;;:::i;20710:145::-;;;;;;;;;;-1:-1:-1;20710:145:0;;;;;:::i;:::-;;:::i;9894:30::-;;;;;;;;;;;;;;;;23276:289;;;;;;;;;;-1:-1:-1;23276:289:0;;;;;:::i;:::-;;:::i;9735:39::-;;;;;;;;;;-1:-1:-1;9735:39:0;;;;;;;;;;;20863:125;;;;;;;;;;-1:-1:-1;20863:125:0;;;;;:::i;:::-;;:::i;15381:80::-;15429:13;15453:5;15446:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15381:80;:::o;21427:149::-;10652:6;;-1:-1:-1;;;;;10652:6:0;189:10;10652:22;10644:52;;;;-1:-1:-1;;;10644:52:0;;10141:2:1;10644:52:0;;;10123:21:1;10180:2;10160:18;;;10153:30;-1:-1:-1;;;10199:18:1;;;10192:47;10256:18;;10644:52:0;;;;;;;;;21511:2:::1;21504:3;:9;;21496:30;;;::::0;-1:-1:-1;;;21496:30:0;;10487:2:1;21496:30:0::1;::::0;::::1;10469:21:1::0;10526:1;10506:18;;;10499:29;10564:10;10544:18;;;10537:38;10592:18;;21496:30:0::1;10285:331:1::0;21496:30:0::1;21537:9;::::0;:31:::1;::::0;;;;::::1;::::0;::::1;2675:25:1::0;;;21537:9:0;;;::::1;-1:-1:-1::0;;;;;21537:9:0::1;::::0;:26:::1;::::0;2648:18:1;;21537:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21427:149:::0;:::o;16075:161::-;16150:4;16167:39;189:10;16190:7;16199:6;16167:8;:39::i;:::-;-1:-1:-1;16224:4:0;16075:161;;;;;:::o;19307:1139::-;10652:6;;-1:-1:-1;;;;;10652:6:0;189:10;10652:22;10644:52;;;;-1:-1:-1;;;10644:52:0;;10141:2:1;10644:52:0;;;10123:21:1;10180:2;10160:18;;;10153:30;-1:-1:-1;;;10199:18:1;;;10192:47;10256:18;;10644:52:0;9939:341:1;10644:52:0;19412:4:::1;19401:15:::0;::::1;;;19397:1042;;;-1:-1:-1::0;;;;;19442:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;19441:21;19433:62;;;::::0;-1:-1:-1;;;19433:62:0;;10823:2:1;19433:62:0::1;::::0;::::1;10805:21:1::0;10862:2;10842:18;;;10835:30;10901;10881:18;;;10874:58;10949:18;;19433:62:0::1;10621:352:1::0;19433:62:0::1;-1:-1:-1::0;;;;;19513:16:0;::::1;19532:1;19513:16:::0;;;:7:::1;:16;::::0;;;;;:20;19510:116:::1;;-1:-1:-1::0;;;;;19593:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;19573:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;19554:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;19510:116:::1;-1:-1:-1::0;;;;;;19640:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;19640:27:0::1;19663:4;19640:27:::0;;::::1;::::0;;;19682:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;19682:23:0::1;::::0;;::::1;::::0;;19307:1139::o;19397:1042::-:1;19727:16:::0;19723:716:::1;;-1:-1:-1::0;;;;;19768:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;19760:61;;;::::0;-1:-1:-1;;;19760:61:0;;11180:2:1;19760:61:0::1;::::0;::::1;11162:21:1::0;11219:2;11199:18;;;11192:30;11258;11238:18;;;11231:58;11306:18;;19760:61:0::1;10978:352:1::0;19760:61:0::1;19839:9;:16:::0;19859:1:::1;19839:21;19836:592;;;-1:-1:-1::0;;;;;19880:16:0;::::1;19899:1;19880:16:::0;;;:7:::1;:16;::::0;;;;;;;:20;;;19919:11:::1;:20:::0;;;;;:28;;-1:-1:-1;;19919:28:0::1;::::0;;19966:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;19966:15:0;;;;;-1:-1:-1;;19966:15:0::1;::::0;;;;;19307:1139;;:::o;19836:592::-:1;20027:9;20022:391;20046:9;:16:::0;20042:20;::::1;20022:391;;;20112:7;-1:-1:-1::0;;;;;20096:23:0::1;:9;20106:1;20096:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;20096:12:0::1;:23;20092:302;;;20163:9;20173:16:::0;;:20:::1;::::0;20192:1:::1;::::0;20173:20:::1;:::i;:::-;20163:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;20148:9:::1;:12:::0;;-1:-1:-1;;;;;20163:31:0;;::::1;::::0;20158:1;;20148:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;20148:46:0::1;-1:-1:-1::0;;;;;20148:46:0;;::::1;;::::0;;20221:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;20268:11:::1;:20:::0;;;;:28;;-1:-1:-1;;20268:28:0::1;::::0;;20323:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;20323:15:0;;;;;-1:-1:-1;;20323:15:0::1;::::0;;;;;20365:5:::1;;20092:302;20064:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20022:391;;;;19836:592;19307:1139:::0;;:::o;16742:306::-;-1:-1:-1;;;;;16863:19:0;;16842:4;16863:19;;;:11;:19;;;;;;;;16883:10;16863:31;;;;;;;;-1:-1:-1;;16863:52:0;16859:126;;-1:-1:-1;;;;;16932:19:0;;;;;;:11;:19;;;;;;;;16952:10;16932:31;;;;;;;:41;;16967:6;;16932:19;:41;;16967:6;;16932:41;:::i;:::-;;;;-1:-1:-1;;16859:126:0;17004:36;17014:6;17022:9;17033:6;17004:9;:36::i;:::-;16997:43;16742:306;-1:-1:-1;;;;16742:306:0:o;22928:340::-;10652:6;;-1:-1:-1;;;;;10652:6:0;189:10;10652:22;10644:52;;;;-1:-1:-1;;;10644:52:0;;10141:2:1;10644:52:0;;;10123:21:1;10180:2;10160:18;;;10153:30;-1:-1:-1;;;10199:18:1;;;10192:47;10256:18;;10644:52:0;9939:341:1;10644:52:0;23018:13:::1;23056:7;23045;23035;;:17;;;;:::i;:::-;23034:29;;;;:::i;:::-;23018:45;;23102:4;23092:7;;:14;;;;:::i;:::-;23082:5;:25;;23074:88;;;::::0;-1:-1:-1;;;23074:88:0;;12981:2:1;23074:88:0::1;::::0;::::1;12963:21:1::0;13020:2;13000:18;;;12993:30;13059:34;13039:18;;;13032:62;13130:20;13110:18;;;13103:48;13168:19;;23074:88:0::1;12779:414:1::0;23074:88:0::1;23173:14;:22:::0;;;23225:14:::1;::::0;23253:7;;23225:24:::1;::::0;23242:7;;23225:24:::1;:::i;:::-;23224:36;;;;:::i;:::-;23206:15;:54:::0;-1:-1:-1;;;22928:340:0:o;21224:195::-;10652:6;;-1:-1:-1;;;;;10652:6:0;189:10;10652:22;10644:52;;;;-1:-1:-1;;;10644:52:0;;10141:2:1;10644:52:0;;;10123:21:1;10180:2;10160:18;;;10153:30;-1:-1:-1;;;10199:18:1;;;10192:47;10256:18;;10644:52:0;9939:341:1;10644:52:0;21346:9:::1;::::0;:65:::1;::::0;;;;13430:14:1;;13423:22;21346:65:0::1;::::0;::::1;13405:41:1::0;13489:14;;13482:22;13462:18;;;13455:50;13548:14;;13541:22;13521:18;;;13514:50;13607:14;;13600:22;13580:18;;;13573:50;21346:9:0;;;::::1;-1:-1:-1::0;;;;;21346:9:0::1;::::0;:24:::1;::::0;13377:19:1;;21346:65:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21224:195:::0;;;;:::o;18755:141::-;18808:7;18865:21;18883:1;18865:9;:21::i;:::-;18847:15;9561:42;18847:9;:15::i;:::-;:39;;;;:::i;:::-;18836:7;;:51;;;;:::i;:::-;18828:60;;18755:141;:::o;24219:250::-;24285:7;24324;;24313;:18;;24305:73;;;;-1:-1:-1;;;24305:73:0;;13969:2:1;24305:73:0;;;13951:21:1;14008:2;13988:18;;;13981:30;14047:34;14027:18;;;14020:62;14118:12;14098:18;;;14091:40;14148:19;;24305:73:0;13767:406:1;24305:73:0;24389:19;24412:10;:8;:10::i;:::-;24389:33;-1:-1:-1;24440:21:0;24389:33;24440:7;:21;:::i;:::-;24433:28;24219:250;-1:-1:-1;;;24219:250:0:o;21108:108::-;10652:6;;-1:-1:-1;;;;;10652:6:0;189:10;10652:22;10644:52;;;;-1:-1:-1;;;10644:52:0;;10141:2:1;10644:52:0;;;10123:21:1;10180:2;10160:18;;;10153:30;-1:-1:-1;;;10199:18:1;;;10192:47;10256:18;;10644:52:0;9939:341:1;10644:52:0;21177:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;21177:31:0::1;::::0;::::1;160:74:1::0;21177:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;21177:31:0::1;14:226:1::0;18600:147:0;10652:6;;-1:-1:-1;;;;;10652:6:0;189:10;10652:22;10644:52;;;;-1:-1:-1;;;10644:52:0;;10141:2:1;10644:52:0;;;10123:21:1;10180:2;10160:18;;;10153:30;-1:-1:-1;;;10199:18:1;;;10192:47;10256:18;;10644:52:0;9939:341:1;10644:52:0;18688:16:::1;::::0;::::1;::::0;::::1;;;18687:17;18679:26;;;::::0;::::1;;18716:14;:23:::0;;-1:-1:-1;;18716:23:0::1;-1:-1:-1::0;;;;;18716:23:0;;;::::1;::::0;;;::::1;::::0;;18600:147::o;17056:215::-;189:10;17144:4;17193:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17193:34:0;;;;;;;;;;17144:4;;17161:80;;17184:7;;17193:47;;17230:10;;17193:47;:::i;:::-;17161:8;:80::i;21910:321::-;10652:6;;-1:-1:-1;;;;;10652:6:0;189:10;10652:22;10644:52;;;;-1:-1:-1;;;10644:52:0;;10141:2:1;10644:52:0;;;10123:21:1;10180:2;10160:18;;;10153:30;-1:-1:-1;;;10199:18:1;;;10192:47;10256:18;;10644:52:0;9939:341:1;10644:52:0;22015:10:::1;:21:::0;::::1;::::0;;::::1;22004:32:::0;;::::1;;::::0;::::1;::::0;:89:::1;;-1:-1:-1::0;22070:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;22057:36:::0;;::::1;;;22004:89;21996:98;;;::::0;::::1;;22136:4;22113:19;22123:9:::0;22113:7;:19:::1;:::i;:::-;:27;;;;22105:36;;;::::0;::::1;;22152:10;:28:::0;;::::1;22191:32:::0;;::::1;::::0;::::1;-1:-1:-1::0;;22191:32:0;;;22152:28;;;::::1;22191:32:::0;;;;;;;::::1;::::0;;21910:321::o;22580:340::-;10652:6;;-1:-1:-1;;;;;10652:6:0;189:10;10652:22;10644:52;;;;-1:-1:-1;;;10644:52:0;;10141:2:1;10644:52:0;;;10123:21:1;10180:2;10160:18;;;10153:30;-1:-1:-1;;;10199:18:1;;;10192:47;10256:18;;10644:52:0;9939:341:1;10644:52:0;22669:13:::1;22707:7;22696;22686;;:17;;;;:::i;:::-;22685:29;;;;:::i;:::-;22669:45;;22753:4;22743:7;;:14;;;;:::i;:::-;22733:5;:25;;22725:93;;;::::0;-1:-1:-1;;;22725:93:0;;14609:2:1;22725:93:0::1;::::0;::::1;14591:21:1::0;14648:2;14628:18;;;14621:30;14687:34;14667:18;;;14660:62;14758:25;14738:18;;;14731:53;14801:19;;22725:93:0::1;14407:419:1::0;22725:93:0::1;22829:12;:20:::0;;;22877:14:::1;::::0;22905:7;;22877:24:::1;::::0;22894:7;;22877:24:::1;:::i;:::-;22876:36;;;;:::i;:::-;22860:13;:52:::0;-1:-1:-1;;;22580:340:0:o;22239:333::-;10652:6;;-1:-1:-1;;;;;10652:6:0;189:10;10652:22;10644:52;;;;-1:-1:-1;;;10644:52:0;;10141:2:1;10644:52:0;;;10123:21:1;10180:2;10160:18;;;10153:30;-1:-1:-1;;;10199:18:1;;;10192:47;10256:18;;10644:52:0;9939:341:1;10644:52:0;22348:10:::1;:21:::0;::::1;::::0;;::::1;22337:32:::0;;::::1;;::::0;::::1;::::0;:89:::1;;-1:-1:-1::0;22403:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;22390:36:::0;;::::1;;;22337:89;22329:98;;;::::0;::::1;;22469:4;22446:19;22456:9:::0;22446:7;:19:::1;:::i;:::-;:27;;;;22438:36;;;::::0;::::1;;22485:14;:32:::0;;::::1;22528:36:::0;;::::1;::::0;::::1;-1:-1:-1::0;;22528:36:0;;;22485:32;;;::::1;22528:36:::0;;;;;;;::::1;::::0;;22239:333::o;13859:701::-;10652:6;;-1:-1:-1;;;;;10652:6:0;189:10;10652:22;10644:52;;;;-1:-1:-1;;;10644:52:0;;10141:2:1;10644:52:0;;;10123:21:1;10180:2;10160:18;;;10153:30;-1:-1:-1;;;10199:18:1;;;10192:47;10256:18;;10644:52:0;9939:341:1;10644:52:0;-1:-1:-1;;;;;13940:22:0;::::1;13932:96;;;::::0;-1:-1:-1;;;13932:96:0;;15033:2:1;13932:96:0::1;::::0;::::1;15015:21:1::0;15072:2;15052:18;;;15045:30;15111:34;15091:18;;;15084:62;15182:31;15162:18;;;15155:59;15231:19;;13932:96:0::1;14831:425:1::0;13932:96:0::1;-1:-1:-1::0;;;;;14047:16:0;::::1;9561:42;14047:16;;14039:90;;;::::0;-1:-1:-1;;;14039:90:0;;15033:2:1;14039:90:0::1;::::0;::::1;15015:21:1::0;15072:2;15052:18;;;15045:30;15111:34;15091:18;;;15084:62;15182:31;15162:18;;;15155:59;15231:19;;14039:90:0::1;14831:425:1::0;14039:90:0::1;14160:6;::::0;;14140:34:::1;::::0;-1:-1:-1;;;;;14160:6:0;;::::1;::::0;14140:19:::1;:34::i;:::-;14185:35;14205:8;14215:4;14185:19;:35::i;:::-;14273:6;::::0;14245:16:::1;::::0;-1:-1:-1;;;;;14245:16:0;;::::1;14273:6:::0;::::1;14245:35;14241:90;;;14295:16;:36:::0;;-1:-1:-1;;14295:36:0::1;-1:-1:-1::0;;;;;14295:36:0;::::1;;::::0;;14241:90:::1;14375:1;14365:6:::0;;14355:17:::1;::::0;-1:-1:-1;;;;;14365:6:0::1;14355:9;:17::i;:::-;:21;14352:99;;;14403:6;::::0;14393:46:::1;::::0;-1:-1:-1;;;;;14403:6:0::1;14411:8:::0;14421:17:::1;14403:6:::0;14421:9:::1;:17::i;:::-;14393:9;:46::i;:::-;;14352:99;14471:6;:17:::0;;-1:-1:-1;;14471:17:0::1;-1:-1:-1::0;;;;;14471:17:0;::::1;::::0;;::::1;::::0;;14504:38:::1;::::0;14471:17;;;;14504:38:::1;::::0;14471:6;14504:38:::1;13859:701:::0;:::o;20996:104::-;21041:7;21068:9;;;;;;;;;-1:-1:-1;;;;;21068:9:0;-1:-1:-1;;;;;21068:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19037:134::-;10652:6;;-1:-1:-1;;;;;10652:6:0;189:10;10652:22;10644:52;;;;-1:-1:-1;;;10644:52:0;;10141:2:1;10644:52:0;;;10123:21:1;10180:2;10160:18;;;10153:30;-1:-1:-1;;;10199:18:1;;;10192:47;10256:18;;10644:52:0;9939:341:1;10644:52:0;-1:-1:-1;;;;;19125:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;19125:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19037:134::o;20454:248::-;10652:6;;-1:-1:-1;;;;;10652:6:0;189:10;10652:22;10644:52;;;;-1:-1:-1;;;10644:52:0;;10141:2:1;10644:52:0;;;10123:21:1;10180:2;10160:18;;;10153:30;-1:-1:-1;;;10199:18:1;;;10192:47;10256:18;;10644:52:0;9939:341:1;10644:52:0;20538:16:::1;::::0;::::1;::::0;::::1;;;20537:17;20529:54;;;::::0;-1:-1:-1;;;20529:54:0;;15652:2:1;20529:54:0::1;::::0;::::1;15634:21:1::0;15691:2;15671:18;;;15664:30;15730:26;15710:18;;;15703:54;15774:18;;20529:54:0::1;15450:348:1::0;20529:54:0::1;-1:-1:-1::0;;;;;20602:28:0;::::1;20625:4;20602:28;;20594:55;;;::::0;-1:-1:-1;;;20594:55:0;;16005:2:1;20594:55:0::1;::::0;::::1;15987:21:1::0;16044:2;16024:18;;;16017:30;16083:16;16063:18;;;16056:44;16117:18;;20594:55:0::1;15803:338:1::0;20594:55:0::1;20660:9;:34:::0;;-1:-1:-1;;;;;20660:34:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;20454:248::o;15694:198::-;-1:-1:-1;;;;;15784:20:0;;15760:7;15784:20;;;:11;:20;;;;;;;;15780:49;;;-1:-1:-1;;;;;;15813:16:0;;;;;:7;:16;;;;;;;15694:198::o;15780:49::-;-1:-1:-1;;;;;15867:16:0;;;;;;:7;:16;;;;;;15847:37;;:19;:37::i;14568:195::-;10652:6;;-1:-1:-1;;;;;10652:6:0;189:10;10652:22;10644:52;;;;-1:-1:-1;;;10644:52:0;;10141:2:1;10644:52:0;;;10123:21:1;10180:2;10160:18;;;10153:30;-1:-1:-1;;;10199:18:1;;;10192:47;10256:18;;10644:52:0;9939:341:1;10644:52:0;14655:6:::1;::::0;;14635:34:::1;::::0;-1:-1:-1;;;;;14655:6:0;;::::1;::::0;14635:19:::1;:34::i;:::-;14697:1;14680:19:::0;;-1:-1:-1;;14680:19:0::1;::::0;;14715:40:::1;::::0;14697:1;;14715:40:::1;::::0;14697:1;;14715:40:::1;14568:195::o:0;21584:318::-;10652:6;;-1:-1:-1;;;;;10652:6:0;189:10;10652:22;10644:52;;;;-1:-1:-1;;;10644:52:0;;10141:2:1;10644:52:0;;;10123:21:1;10180:2;10160:18;;;10153:30;-1:-1:-1;;;10199:18:1;;;10192:47;10256:18;;10644:52:0;9939:341:1;10644:52:0;21688:10:::1;:21:::0;::::1;::::0;;::::1;21677:32:::0;;::::1;;::::0;::::1;::::0;:89:::1;;-1:-1:-1::0;21743:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;21730:36:::0;;::::1;;;21677:89;21669:98;;;::::0;::::1;;21809:4;21786:19;21796:9:::0;21786:7;:19:::1;:::i;:::-;:27;;;;21778:36;;;::::0;::::1;;21825:9;:27:::0;;::::1;21863:31:::0;;::::1;::::0;::::1;-1:-1:-1::0;;21863:31:0;;;21825:27;;;::::1;21863:31:::0;;;;;;;::::1;::::0;;21584:318::o;18094:498::-;10652:6;;-1:-1:-1;;;;;10652:6:0;189:10;10652:22;10644:52;;;;-1:-1:-1;;;10644:52:0;;10141:2:1;10644:52:0;;;10123:21:1;10180:2;10160:18;;;10153:30;-1:-1:-1;;;10199:18:1;;;10192:47;10256:18;;10644:52:0;9939:341:1;10644:52:0;18175:16;18171:414:::1;;-1:-1:-1::0;;;;;18208:13:0;;::::1;18224:5;18208:13:::0;;;:7:::1;:13;::::0;;;;;;;:21;;-1:-1:-1;;18208:21:0::1;::::0;;18244:9;;:32;;;;;::::1;::::0;::::1;16314:74:1::0;;;;16404:18;;;16397:50;;;;18244:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;16287:18:1;;18244:32:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19307:1139:::0;;:::o;18171:414::-:1;18313:17;::::0;:22;18309:134:::1;;18402:6;18382:17;;18364:15;:35;;;;:::i;:::-;:44;18356:71;;;::::0;-1:-1:-1;;;18356:71:0;;16660:2:1;18356:71:0::1;::::0;::::1;16642:21:1::0;16699:2;16679:18;;;16672:30;16738:16;16718:18;;;16711:44;16772:18;;18356:71:0::1;16458:338:1::0;18356:71:0::1;-1:-1:-1::0;;;;;18457:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;;;:20;;-1:-1:-1;;18457:20:0::1;18473:4;18457:20:::0;;::::1;::::0;;;18512:15:::1;18492:17;:35:::0;;;18542:9;;:31;;;;;;;::::1;16314:74:1::0;;;;16404:18;;;16397:50;;;;18542:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;16287:18:1;;18542:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;16561:173:::0;16625:4;10652:6;;-1:-1:-1;;;;;10652:6:0;189:10;10652:22;10644:52;;;;-1:-1:-1;;;10644:52:0;;10141:2:1;10644:52:0;;;10123:21:1;10180:2;10160:18;;;10153:30;-1:-1:-1;;;10199:18:1;;;10192:47;10256:18;;10644:52:0;9939:341:1;10644:52:0;16674:9:::1;::::0;16642:62:::1;::::0;16659:4:::1;::::0;-1:-1:-1;;;;;16674:9:0::1;-1:-1:-1::0;;16642:8:0::1;:62::i;:::-;-1:-1:-1::0;16722:4:0::1;16561:173:::0;:::o;27110:517::-;10652:6;;-1:-1:-1;;;;;10652:6:0;189:10;10652:22;10644:52;;;;-1:-1:-1;;;10644:52:0;;10141:2:1;10644:52:0;;;10123:21:1;10180:2;10160:18;;;10153:30;-1:-1:-1;;;10199:18:1;;;10192:47;10256:18;;10644:52:0;9939:341:1;10644:52:0;27172:14:::1;::::0;::::1;;27171:15;27163:52;;;::::0;-1:-1:-1;;;27163:52:0;;17003:2:1;27163:52:0::1;::::0;::::1;16985:21:1::0;17042:2;17022:18;;;17015:30;17081:26;17061:18;;;17054:54;17125:18;;27163:52:0::1;16801:348:1::0;27163:52:0::1;27234:16;::::0;::::1;::::0;::::1;;;27226:53;;;::::0;-1:-1:-1;;;27226:53:0;;17356:2:1;27226:53:0::1;::::0;::::1;17338:21:1::0;17395:2;17375:18;;;17368:30;17434:26;17414:18;;;17407:54;17478:18;;27226:53:0::1;17154:348:1::0;27226:53:0::1;27290:42;27320:4;27327;27290:21;:42::i;:::-;27365:6;::::0;27343:35:::1;::::0;-1:-1:-1;;;;;27365:6:0::1;::::0;27343:21:::1;:35::i;:::-;27400:9;::::0;;;::::1;-1:-1:-1::0;;;;;27400:9:0::1;27389:99;;27440:9;:36:::0;;;::::1;27470:4;27440:36:::0;::::1;;::::0;;27389:99:::1;27502:9;::::0;27522:6:::1;::::0;27502:74:::1;::::0;;;;-1:-1:-1;;;;;27522:6:0;;::::1;27502:74;::::0;::::1;17705::1::0;17827:10;27537:12:0::1;17815:23:1::0;17795:18;;;17788:51;17887:18;27559:15:0::1;17875:31:1::0;17855:18;;;17848:59;27502:9:0;;;::::1;;::::0;:19:::1;::::0;17678:18:1;;27502:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;27498:90:::0;27598:14:::1;:21:::0;;-1:-1:-1;;27598:21:0::1;27615:4;27598:21;::::0;;27110:517::o;15291:84::-;15341:13;15365:7;15358:14;;;;;:::i;17279:225::-;189:10;17372:4;17421:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17421:34:0;;;;;;;;;;17372:4;;17389:85;;17412:7;;17421:52;;17458:15;;17421:52;:::i;15900:167::-;15978:4;15995:42;189:10;16019:9;16030:6;15995:9;:42::i;:::-;-1:-1:-1;16055:4:0;;15900:167;-1:-1:-1;;;15900:167:0:o;23715:165::-;10652:6;;-1:-1:-1;;;;;10652:6:0;189:10;10652:22;10644:52;;;;-1:-1:-1;;;10644:52:0;;10141:2:1;10644:52:0;;;10123:21:1;10180:2;10160:18;;;10153:30;-1:-1:-1;;;10199:18:1;;;10192:47;10256:18;;10644:52:0;9939:341:1;10644:52:0;23790:19:::1;:30:::0;;;::::1;;::::0;::::1;::::0;;;::::1;;::::0;;23836:36:::1;::::0;::::1;::::0;::::1;::::0;23812:8;1992:14:1;1985:22;1967:41;;1955:2;1940:18;;1827:187;23836:36:0::1;;;;;;;;23715:165:::0;:::o;11226:1994::-;10652:6;;-1:-1:-1;;;;;10652:6:0;189:10;10652:22;10644:52;;;;-1:-1:-1;;;10644:52:0;;10141:2:1;10644:52:0;;;10123:21:1;10180:2;10160:18;;;10153:30;-1:-1:-1;;;10199:18:1;;;10192:47;10256:18;;10644:52:0;9939:341:1;10644:52:0;11345:19:::1;::::0;;;::::1;;;11344:20;11336:29;;;::::0;::::1;;11402:2;11384:8;:15;:20;11376:29;;;::::0;::::1;;11443:7;:14;11424:8;:15;:33;11416:42;;;::::0;::::1;;11469:17;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;:5:::1;::::0;:17:::1;:::i;:::-;-1:-1:-1::0;11497:15:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;:7:::1;::::0;:15:::1;:::i;:::-;-1:-1:-1::0;11540:15:0::1;11523:14;:32:::0;11665:9:::1;:13:::0;;-1:-1:-1;;11665:13:0::1;11677:1;11665:13;::::0;;11732:9:::1;::::0;11728:13:::1;::::0;11732:9:::1;;11728:2;:13;:::i;:::-;11710:14;;:32;;;;:::i;:::-;11700:7;:42:::0;;;11771:13:::1;::::0;-1:-1:-1;;11771:13:0::1;:::i;:::-;11764:21;::::0;-1:-1:-1;;11764:21:0::1;:::i;:::-;11753:7;:33:::0;11830:14:::1;::::0;11799:9:::1;:46:::0;;-1:-1:-1;;11799:46:0::1;-1:-1:-1::0;;;;;11830:14:0;;::::1;11799:46:::0;;::::1;::::0;;11883:19:::1;::::0;;;;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;11830:14;11883:19;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11865:49:0::1;;11915:9;;;;;;;;;-1:-1:-1::0;;;;;11915:9:0::1;-1:-1:-1::0;;;;;11915:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11865:82;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;20047:15:1;;;11865:82:0::1;::::0;::::1;20029:34:1::0;11941:4:0::1;20079:18:1::0;;;20072:43;19941:18;;11865:82:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11856:6;:91:::0;;-1:-1:-1;;11856:91:0::1;-1:-1:-1::0;;;;;11856:91:0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;11958:15:0;;;:7:::1;:15;::::0;;;;;;;:22;;-1:-1:-1;;11958:22:0::1;-1:-1:-1::0;11958:22:0::1;::::0;;12010:14:::1;::::0;12032:4:::1;::::0;12010:18:::1;::::0;:14;:18:::1;:::i;:::-;12009:27;;;;:::i;:::-;11993:13;:43:::0;12066:14:::1;::::0;12088:3:::1;::::0;12066:18:::1;::::0;12083:1:::1;12066:18;:::i;:::-;12065:26;;;;:::i;:::-;12047:15;:44:::0;12138:9:::1;::::0;12134:13:::1;::::0;12138:9:::1;;12134:2;:13;:::i;:::-;12117;;:31;;;;:::i;:::-;12102:12;:46:::0;12199:9:::1;::::0;12195:13:::1;::::0;12199:9:::1;;12195:2;:13;:::i;:::-;12176:15;;:33;;;;:::i;:::-;12159:14;:50:::0;12237:7:::1;::::0;12252:5:::1;::::0;12237:11:::1;::::0;12247:1:::1;12237:11;:::i;:::-;12236:21;;;;:::i;:::-;12220:13;:37:::0;12282:7:::1;::::0;12297:4:::1;::::0;12282:11:::1;::::0;12292:1:::1;12282:11;:::i;:::-;12281:20;;;;:::i;:::-;12268:10;:33:::0;12323:9:::1;::::0;;;::::1;-1:-1:-1::0;;;;;12323:9:0::1;12312:99;;12363:9;:36:::0;;;::::1;12393:4;12363:36:::0;::::1;;::::0;;12312:99:::1;12421:19;:26:::0;;;::::1;::::0;::::1;::::0;;12482:7:::1;::::0;12443:4:::1;12421:26:::0;12471:7:::1;13810::::0;13837:6;-1:-1:-1;;;;;13837:6:0;;13772:79;12471:7:::1;-1:-1:-1::0;;;;;12463:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;12463:16:0;:26;12526:7:::1;13810::::0;13837:6;-1:-1:-1;;;;;13837:6:0;;13772:79;12526:7:::1;-1:-1:-1::0;;;;;12505:38:0::1;12522:1;-1:-1:-1::0;;;;;12505:38:0::1;;12535:7;;12505:38;;;;2675:25:1::0;;2663:2;2648:18;;2529:177;12505:38:0::1;;;;;;;;12588:9;::::0;12556:62:::1;::::0;12573:4:::1;::::0;-1:-1:-1;;;;;12588:9:0::1;-1:-1:-1::0;;12556:8:0::1;:62::i;:::-;12635:9;12631:204;12654:8;:15;12650:1;:19;12631:204;;;12690:14;12707:8;12716:1;12707:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;12765:9:::1;::::0;12707:11;;-1:-1:-1;12733:14:0::1;::::0;12761:13:::1;::::0;12765:9:::1;;12761:2;:13;:::i;:::-;12750:7;12758:1;12750:10;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;12733:41;;12789:34;12799:7;13810::::0;13837:6;-1:-1:-1;;;;;13837:6:0;;13772:79;12799:7:::1;12808:6;12816;12789:9;:34::i;:::-;;12675:160;;12671:3;;;;;:::i;:::-;;;;12631:204;;;;12847:53;12857:7;13810::::0;13837:6;-1:-1:-1;;;;;13837:6:0;;13772:79;12857:7:::1;12874:4;12881:18;12891:7;13810::::0;13837:6;-1:-1:-1;;;;;13837:6:0;;13772:79;12847:53:::1;-1:-1:-1::0;12913:9:0::1;::::0;-1:-1:-1;;;;;12913:9:0::1;:25;12946:21;12991:4;13011:24;12991:4:::0;13011:9:::1;:24::i;:::-;13050:1;13093::::0;13136:7:::1;13810::::0;13837:6;-1:-1:-1;;;;;13837:6:0;;13772:79;13136:7:::1;12913:271;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;20508:15:1;;;12913:271:0::1;::::0;::::1;20490:34:1::0;20540:18;;;20533:34;;;;20583:18;;;20576:34;;;;20626:18;;;20619:34;20690:15;;;20669:19;;;20662:44;13158:15:0::1;20722:19:1::0;;;20715:35;20401:19;;12913:271:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;13197:15;:13;:15::i;17512:574::-:0;10652:6;;-1:-1:-1;;;;;10652:6:0;189:10;10652:22;10644:52;;;;-1:-1:-1;;;10644:52:0;;10141:2:1;10644:52:0;;;10123:21:1;10180:2;10160:18;;;10153:30;-1:-1:-1;;;10199:18:1;;;10192:47;10256:18;;10644:52:0;9939:341:1;10644:52:0;17583:29:::1;17634:9;17583:61;;17655:16;17692:10;-1:-1:-1::0;;;;;17692:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17674:47:0::1;;17730:4;17737:10;-1:-1:-1::0;;;;;17737:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17674:81;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;20047:15:1;;;17674:81:0::1;::::0;::::1;20029:34:1::0;20099:15;;20079:18;;;20072:43;19941:18;;17674:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17655:100:::0;-1:-1:-1;;;;;;17770:22:0;::::1;17766:207;;17836:10;-1:-1:-1::0;;;;;17836:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17818:50:0::1;;17877:4;17884:10;-1:-1:-1::0;;;;;17884:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17818:84;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;20047:15:1;;;17818:84:0::1;::::0;::::1;20029:34:1::0;20099:15;;20079:18;;;20072:43;19941:18;;17818:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17809:6;:93:::0;;-1:-1:-1;;17809:93:0::1;-1:-1:-1::0;;;;;17809:93:0;;;::::1;::::0;;;::::1;::::0;;17766:207:::1;;;17944:6;:17:::0;;-1:-1:-1;;17944:17:0::1;-1:-1:-1::0;;;;;17944:17:0;::::1;;::::0;;17766:207:::1;17983:9;:22:::0;;-1:-1:-1;;17983:22:0::1;-1:-1:-1::0;;;;;17983:22:0;::::1;::::0;;::::1;::::0;;;18016:62:::1;::::0;18033:4:::1;::::0;-1:-1:-1;;18016:8:0::1;:62::i;23573:134::-:0;10652:6;;-1:-1:-1;;;;;10652:6:0;189:10;10652:22;10644:52;;;;-1:-1:-1;;;10644:52:0;;10141:2:1;10644:52:0;;;10123:21:1;10180:2;10160:18;;;10153:30;-1:-1:-1;;;10199:18:1;;;10192:47;10256:18;;10644:52:0;9939:341:1;10644:52:0;23656:16:::1;:43:::0;;-1:-1:-1;;23656:43:0::1;-1:-1:-1::0;;;;;23656:43:0;;;::::1;::::0;;;::::1;::::0;;23573:134::o;27635:183::-;10652:6;;-1:-1:-1;;;;;10652:6:0;189:10;10652:22;10644:52;;;;-1:-1:-1;;;10644:52:0;;10141:2:1;10644:52:0;;;10123:21:1;10180:2;10160:18;;;10153:30;-1:-1:-1;;;10199:18:1;;;10192:47;10256:18;;10644:52:0;9939:341:1;10644:52:0;27702:16:::1;::::0;::::1;::::0;::::1;;;27701:17;27693:58;;;::::0;-1:-1:-1;;;27693:58:0;;21274:2:1;27693:58:0::1;::::0;::::1;21256:21:1::0;21313:2;21293:18;;;21286:30;21352;21332:18;;;21325:58;21400:18;;27693:58:0::1;21072:352:1::0;27693:58:0::1;13810:7:::0;13837:6;;27762:48:::1;::::0;-1:-1:-1;;;;;13837:6:0;;;;27788:21:::1;27762:48:::0;::::1;;;::::0;27788:21;;27762:48;13810:7;27762:48;27788:21;13837:6;27762:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27635:183::o:0;20710:145::-;10652:6;;-1:-1:-1;;;;;10652:6:0;189:10;10652:22;10644:52;;;;-1:-1:-1;;;10644:52:0;;10141:2:1;10644:52:0;;;10123:21:1;10180:2;10160:18;;;10153:30;-1:-1:-1;;;10199:18:1;;;10192:47;10256:18;;10644:52:0;9939:341:1;10644:52:0;20800:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;16332:55:1;;;20800:47:0::1;::::0;::::1;16314:74:1::0;16431:14;;16424:22;16404:18;;;16397:50;20800:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;16287:18:1;;20800:47:0::1;16146:307:1::0;23276:289:0;10652:6;;-1:-1:-1;;;;;10652:6:0;189:10;10652:22;10644:52;;;;-1:-1:-1;;;10644:52:0;;10141:2:1;10644:52:0;;;10123:21:1;10180:2;10160:18;;;10153:30;-1:-1:-1;;;10199:18:1;;;10192:47;10256:18;;10644:52:0;9939:341:1;10644:52:0;23476:16:::1;23456;23446:7;;:26;;;;:::i;:::-;23445:47;;;;:::i;:::-;23429:13;:63:::0;23517:7:::1;::::0;23544:13;;23517:23:::1;::::0;23527:13;;23517:23:::1;:::i;:::-;23516:41;;;;:::i;:::-;23503:10;:54:::0;-1:-1:-1;;;;23276:289:0:o;20863:125::-;20948:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;20948:32:0;;;160:74:1;20924:4:0;;20948:9;;;;;:23;;133:18:1;;20948:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16244:309::-;-1:-1:-1;;;;;16338:20:0;;16330:52;;;;-1:-1:-1;;;16330:52:0;;21881:2:1;16330:52:0;;;21863:21:1;21920:2;21900:18;;;21893:30;21959:21;21939:18;;;21932:49;21998:18;;16330:52:0;21679:343:1;16330:52:0;-1:-1:-1;;;;;16401:21:0;;16393:53;;;;-1:-1:-1;;;16393:53:0;;21881:2:1;16393:53:0;;;21863:21:1;21920:2;21900:18;;;21893:30;21959:21;21939:18;;;21932:49;21998:18;;16393:53:0;21679:343:1;16393:53:0;-1:-1:-1;;;;;16459:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;16512:33;;2675:25:1;;;16512:33:0;;2648:18:1;16512:33:0;;;;;;;16244:309;;;:::o;24477:1471::-;24556:4;-1:-1:-1;;;;;24581:18:0;;24573:68;;;;-1:-1:-1;;;24573:68:0;;22229:2:1;24573:68:0;;;22211:21:1;22268:2;22248:18;;;22241:30;22307:34;22287:18;;;22280:62;22378:7;22358:18;;;22351:35;22403:19;;24573:68:0;22027:401:1;24573:68:0;-1:-1:-1;;;;;24660:16:0;;24652:64;;;;-1:-1:-1;;;24652:64:0;;22635:2:1;24652:64:0;;;22617:21:1;22674:2;22654:18;;;22647:30;22713:34;22693:18;;;22686:62;22784:5;22764:18;;;22757:33;22807:19;;24652:64:0;22433:399:1;24652:64:0;24744:1;24735:6;:10;24727:64;;;;-1:-1:-1;;;24727:64:0;;23039:2:1;24727:64:0;;;23021:21:1;23078:2;23058:18;;;23051:30;23117:34;23097:18;;;23090:62;23188:11;23168:18;;;23161:39;23217:19;;24727:64:0;22837:405:1;24727:64:0;24805:20;24816:4;24822:2;24805:10;:20::i;:::-;24802:481;;;24846:14;;;;24842:89;;24881:34;;-1:-1:-1;;;24881:34:0;;23449:2:1;24881:34:0;;;23431:21:1;23488:2;23468:18;;;23461:30;23527:26;23507:18;;;23500:54;23571:18;;24881:34:0;23247:348:1;24842:89:0;-1:-1:-1;;;;;24948:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;24965:11:0;;;;;;:7;:11;;;;;;;;24948:28;24945:142;;;25014:12;;25004:6;:22;;24996:75;;;;-1:-1:-1;;;24996:75:0;;23802:2:1;24996:75:0;;;23784:21:1;23841:2;23821:18;;;23814:30;23880:34;23860:18;;;23853:62;23951:10;23931:18;;;23924:38;23979:19;;24996:75:0;23600:404:1;24996:75:0;25110:14;;-1:-1:-1;;;;;25104:20:0;;;25110:14;;25104:20;;;;:36;;-1:-1:-1;;;;;;25129:11:0;;;;;;:7;:11;;;;;;;;25128:12;25104:36;25101:171;;;25195:14;;25185:6;25169:13;25179:2;25169:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;25161:95;;;;-1:-1:-1;;;25161:95:0;;24211:2:1;25161:95:0;;;24193:21:1;24250:2;24230:18;;;24223:30;24289:34;24269:18;;;24262:62;24360:12;24340:18;;;24333:40;24390:19;;25161:95:0;24009:406:1;25161:95:0;-1:-1:-1;;;;;25328:25:0;;25295:12;25328:25;;;:19;:25;;;;;;25310:4;;25328:25;;;:52;;-1:-1:-1;;;;;;25357:23:0;;;;;;:19;:23;;;;;;;;25328:52;25325:98;;;-1:-1:-1;25406:5:0;25325:98;-1:-1:-1;;;;;25439:11:0;;;;;;:7;:11;;;;;;;;25435:443;;;25472:6;;;;;;;25471:7;:47;;;;-1:-1:-1;25499:19:0;;;;;;;25471:47;25467:394;;;25553:28;25584:24;25602:4;25584:9;:24::i;:::-;25553:55;;25655:13;;25631:20;:37;25627:219;;25720:10;;25696:20;:34;25693:77;;-1:-1:-1;25757:10:0;;25693:77;25792:34;25805:20;25792:12;:34::i;:::-;25534:327;25467:394;25896:44;25914:4;25920:2;25924:6;25932:7;25896:17;:44::i;:::-;25889:51;24477:1471;-1:-1:-1;;;;;24477:1471:0:o;31048:526::-;31128:7;;31164;;31090;;31128;31090;31182:282;31206:9;:16;31202:20;;31182:282;;;31272:7;31248;:21;31256:9;31266:1;31256:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31256:12:0;31248:21;;;;;;;;;;;;;:31;;:66;;;31307:7;31283;:21;31291:9;31301:1;31291:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31291:12:0;31283:21;;;;;;;;;;;;;:31;31248:66;31244:96;;;31333:7;;31323;;:17;;;;:::i;:::-;31316:24;;;;;31048:526;:::o;31244:96::-;31375:7;:21;31383:9;31393:1;31383:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31383:12:0;31375:21;;;;;;;;;;;;;31365:31;;:7;:31;:::i;:::-;31355:41;;31431:7;:21;31439:9;31449:1;31439:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31439:12:0;31431:21;;;;;;;;;;;;;31421:31;;:7;:31;:::i;:::-;31411:41;-1:-1:-1;31224:3:0;;;;:::i;:::-;;;;31182:282;;;;31498:7;;31488;;:17;;;;:::i;:::-;31478:7;:27;31474:57;;;31524:7;;31514;;:17;;;;:::i;:::-;31507:24;;;;31048:526;:::o;31474:57::-;31549:17;31559:7;31549;:17;:::i;23888:323::-;23956:4;13837:6;;-1:-1:-1;;;;;23980:15:0;;;13837:6;;23980:15;;;;:45;;-1:-1:-1;13810:7:0;13837:6;-1:-1:-1;;;;;24012:13:0;;;13837:6;;24012:13;;23980:45;:84;;;;-1:-1:-1;;;;;;24043:21:0;;;;;;:17;:21;;;;;;;;24042:22;23980:84;:125;;;;-1:-1:-1;;;;;;24082:23:0;;;;;;:17;:23;;;;;;;;24081:24;23980:125;:152;;;;-1:-1:-1;;;;;;24122:10:0;;9561:42;24122:10;;23980:152;:185;;;;-1:-1:-1;;;;;;24149:16:0;;;;23980:185;:223;;;;-1:-1:-1;;;;;;24182:21:0;;24198:4;24182:21;;23973:230;23888:323;-1:-1:-1;;;23888:323:0:o;25956:630::-;10546:6;:13;;;;;;;;26062:4:::1;10546:13:::0;26042:26;;;:11:::1;:26;::::0;;;;;;;26077:9:::1;::::0;-1:-1:-1;;;;;26077:9:0::1;26042:46:::0;;;;;;;;-1:-1:-1;;26042:67:0::1;26039:165;;26146:4;26126:26;::::0;;;:11:::1;:26;::::0;;;;;;;26161:9:::1;::::0;-1:-1:-1;;;;;26161:9:0::1;26126:46:::0;;;;;;;-1:-1:-1;;26126:66:0;;26039:165:::1;26248:16;::::0;;26262:1:::1;26248:16:::0;;;;;::::1;::::0;;26224:21:::1;::::0;26248:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;26248:16:0::1;26224:40;;26293:4;26275;26280:1;26275:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26275:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;26319:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;26275:7;;26319:16;;;;;:9;:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26309:4;26314:1;26309:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26309:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;26348:9:::1;::::0;26521:16:::1;::::0;26348:230:::1;::::0;;;;:9;;::::1;::::0;:60:::1;::::0;:230:::1;::::0;26423:20;;26348:9:::1;::::0;26502:4;;26521:16;;::::1;::::0;26552:15:::1;::::0;26348:230:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;10582:6:0;:14;;;;;;-1:-1:-1;;;;25956:630:0:o;28034:1273::-;28157:16;;28135:4;;28157:16;;;;;28152:221;;28190:28;28209:4;28215:2;28190:18;:28::i;:::-;28238:16;;;;;;;28237:17;:41;;;;;28258:20;28269:4;28275:2;28258:10;:20::i;:::-;28233:129;;;28299:47;;-1:-1:-1;;;28299:47:0;;25661:2:1;28299:47:0;;;25643:21:1;25700:2;25680:18;;;25673:30;25739:34;25719:18;;;25712:62;25810:7;25790:18;;;25783:35;25835:19;;28299:47:0;25459:401:1;28233:129:0;28385:25;28413:38;28424:4;28430:2;28434:7;28443;28413:10;:38::i;:::-;28496:14;;;;-1:-1:-1;;;;;28480:13:0;;;;;;:7;:13;;;;;;28385:66;;-1:-1:-1;28480:30:0;;;:::i;:::-;-1:-1:-1;;;;;28464:13:0;;;;;;;:7;:13;;;;;;:46;;;;28549:22;;;;28535:11;;;;;;;;;;:36;;28549:22;28535:36;:::i;:::-;-1:-1:-1;;;;;28521:11:0;;;;;;;:7;:11;;;;;;;;:50;;;;28588:17;;;;;:11;:17;;;;;;;:37;;;;-1:-1:-1;;;;;;28610:15:0;;;;;;:11;:15;;;;;;;;28609:16;28588:37;28584:416;;;-1:-1:-1;;;;;28658:13:0;;;;;;:7;:13;;;;;;:23;;28674:7;;28658:23;:::i;:::-;-1:-1:-1;;;;;28642:13:0;;;;;;:7;:13;;;;;:39;28584:416;;;-1:-1:-1;;;;;28704:17:0;;;;;;:11;:17;;;;;;;;28703:18;:37;;;;-1:-1:-1;;;;;;28725:15:0;;;;;;:11;:15;;;;;;;;28703:37;28699:301;;;28785:22;;-1:-1:-1;;;;;28771:11:0;;28785:22;28771:11;;;:7;:11;;;;;;:36;;28785:22;28771:36;:::i;:::-;-1:-1:-1;;;;;28757:11:0;;;;;;:7;:11;;;;;:50;28699:301;;;-1:-1:-1;;;;;28831:17:0;;;;;;:11;:17;;;;;;;;:36;;;;-1:-1:-1;;;;;;28852:15:0;;;;;;:11;:15;;;;;;;;28831:36;28827:173;;;-1:-1:-1;;;;;28900:13:0;;;;;;:7;:13;;;;;;:23;;28916:7;;28900:23;:::i;:::-;-1:-1:-1;;;;;28884:13:0;;;;;;;:7;:13;;;;;;:39;;;;28966:22;;28952:11;;;;;;;;;;:36;;28966:22;28952:36;:::i;:::-;-1:-1:-1;;;;;28938:11:0;;;;;;:7;:11;;;;;:50;28827:173;29016:17;;;;:21;29012:79;;29052:39;29067:4;29073:6;:17;;;29052:14;:39::i;:::-;29120:1;29106:6;:11;;;:15;:34;;;;29139:1;29125:6;:11;;;:15;29106:34;29102:75;;;29166:6;:11;;;29155:7;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;29102:75:0;29206:6;:11;;;29192:10;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;;29254:22:0;;29235:42;;2675:25:1;;;-1:-1:-1;;;;;29235:42:0;;;;;;;;;;2663:2:1;2648:18;29235:42:0;;;;;;;-1:-1:-1;29295:4:0;;28034:1273;-1:-1:-1;;;;;28034:1273:0:o;26594:508::-;26676:16;;;;;;;26675:17;26667:65;;;;-1:-1:-1;;;26667:65:0;;26067:2:1;26667:65:0;;;26049:21:1;26106:2;26086:18;;;26079:30;26145:34;26125:18;;;26118:62;26216:5;26196:18;;;26189:33;26239:19;;26667:65:0;25865:399:1;26667:65:0;26748:20;26759:4;26765:2;26748:10;:20::i;:::-;26747:21;:37;;;;-1:-1:-1;26778:6:0;;-1:-1:-1;;;;;26772:12:0;;;26778:6;;26772:12;26747:37;26743:352;;;-1:-1:-1;;;;;26801:23:0;;;;;;;:17;:23;;;;;;;;:30;;-1:-1:-1;;26801:30:0;26827:4;26801:30;;;26846:23;;;;26801:30;26846:23;;;;;26895:9;;;;26884:107;;26939:9;:36;;;;26969:4;26939:36;;;;;26884:107;27005:19;:26;;;;;;;;27051:32;;-1:-1:-1;1967:41:1;;27051:32:0;;1955:2:1;1940:18;27051:32:0;;;;;;;26594:508;;:::o;29315:1725::-;29409:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29409:18:0;29440:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29440:25:0;29476:19;29498:10;:8;:10::i;:::-;29476:32;-1:-1:-1;29538:21:0;29476:32;29538:7;:21;:::i;:::-;29521:14;;;:38;29576:20;29587:4;29593:2;29576:10;:20::i;:::-;29572:315;;;29644:9;;:38;;;;;-1:-1:-1;;;;;26550:15:1;;;29644:38:0;;;26532:34:1;26602:15;;;26582:18;;;26575:43;26634:18;;;26627:34;;;29613:12:0;;29644:9;;;;;:19;;26444:18:1;;29644:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29644:38:0;;;;;;;;-1:-1:-1;;29644:38:0;;;;;;;;;;;;:::i;:::-;;;29640:164;;29780:8;;;29640:164;29733:5;-1:-1:-1;29824:7:0;29820:56;;29852:8;;;29820:56;29598:289;29572:315;29902:7;29899:1008;;;-1:-1:-1;;;;;29930:11:0;;;;;;:7;:11;;;;;;;;29926:474;;;29985:10;:18;29962:12;:41;;30047:20;;;;29985:18;30047:20;;;30022:45;;;-1:-1:-1;;30022:45:0;;;29985:18;;30022:45;;;;;;;;;;29926:474;;;-1:-1:-1;;;;;30093:13:0;;;;;;:7;:13;;;;;;;;30089:311;;;30150:9;:17;30127:12;:40;;30211:19;;;;30150:17;30211:19;;;30186:44;;;-1:-1:-1;;30186:44:0;;;30150:17;;30186:44;;;;;;;;;;30089:311;;;30294:14;:22;30271:12;:45;;30360:24;;;;30294:22;30360:24;;;30335:49;;;-1:-1:-1;;30335:49:0;;;30294:22;;30335:49;;;;;;;;;;30089:311;30465:10;:27;30441:12;:20;30465:27;;;;;;;;30431:30;;30441:20;30431:7;:30;:::i;:::-;30430:62;;;;:::i;:::-;30416:11;;;:76;30566:10;:27;30539:12;:22;30566:27;;;;;;;;30528:34;;30539:22;;;;30528:7;:34;:::i;:::-;30527:66;;;;:::i;:::-;30507:17;;;:86;;;30644:11;;;;:31;;30507:86;30644:31;:::i;:::-;30633:43;;:7;:43;:::i;:::-;30608:68;;30707:11;;;;:25;;30721:11;;30707:25;:::i;:::-;30693:11;;;:39;29899:1008;;;30779:1;30765:11;;;:15;;;30795:17;;;:21;;;30831:32;;;30880:11;;;:15;29899:1008;30995:11;30975:6;:17;;;:31;;;;:::i;:::-;30960:6;:11;;;:47;;;;:::i;:::-;30942:6;:14;;;:66;;;;:::i;:::-;30917:22;;;:91;-1:-1:-1;30917:22:0;29315:1725;-1:-1:-1;;;;;29315:1725:0:o;31582:375::-;31725:10;:8;:10::i;:::-;31712:23;;:10;:23;:::i;:::-;31702:4;31686:22;;;;:7;:22;;;;;;:50;;;;:::i;:::-;31677:4;31661:22;;;;:7;:22;;;;;;;;:75;;;;31750:11;:26;;;;;;31747:104;;;31832:4;31816:22;;;;:7;:22;;;;;;:35;;31841:10;;31816:35;:::i;:::-;31807:4;31791:22;;;;:7;:22;;;;;:60;31747:104;31867:43;;2675:25:1;;;31892:4:0;;-1:-1:-1;;;;;31867:43:0;;;;;2663:2:1;2648:18;31867:43:0;;;;;;;31582:375;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;245:656:1;357:4;386:2;415;404:9;397:21;447:6;441:13;490:6;485:2;474:9;470:18;463:34;515:1;525:140;539:6;536:1;533:13;525:140;;;634:14;;;630:23;;624:30;600:17;;;619:2;596:26;589:66;554:10;;525:140;;;683:6;680:1;677:13;674:91;;;753:1;748:2;739:6;728:9;724:22;720:31;713:42;674:91;-1:-1:-1;817:2:1;805:15;-1:-1:-1;;801:88:1;786:104;;;;892:2;782:113;;245:656;-1:-1:-1;;;245:656:1:o;1163:180::-;1222:6;1275:2;1263:9;1254:7;1250:23;1246:32;1243:52;;;1291:1;1288;1281:12;1243:52;-1:-1:-1;1314:23:1;;1163:180;-1:-1:-1;1163:180:1:o;1348:154::-;-1:-1:-1;;;;;1427:5:1;1423:54;1416:5;1413:65;1403:93;;1492:1;1489;1482:12;1507:315;1575:6;1583;1636:2;1624:9;1615:7;1611:23;1607:32;1604:52;;;1652:1;1649;1642:12;1604:52;1691:9;1678:23;1710:31;1735:5;1710:31;:::i;:::-;1760:5;1812:2;1797:18;;;;1784:32;;-1:-1:-1;;;1507:315:1:o;2019:118::-;2105:5;2098:13;2091:21;2084:5;2081:32;2071:60;;2127:1;2124;2117:12;2142:382;2207:6;2215;2268:2;2256:9;2247:7;2243:23;2239:32;2236:52;;;2284:1;2281;2274:12;2236:52;2323:9;2310:23;2342:31;2367:5;2342:31;:::i;:::-;2392:5;-1:-1:-1;2449:2:1;2434:18;;2421:32;2462:30;2421:32;2462:30;:::i;:::-;2511:7;2501:17;;;2142:382;;;;;:::o;3081:456::-;3158:6;3166;3174;3227:2;3215:9;3206:7;3202:23;3198:32;3195:52;;;3243:1;3240;3233:12;3195:52;3282:9;3269:23;3301:31;3326:5;3301:31;:::i;:::-;3351:5;-1:-1:-1;3408:2:1;3393:18;;3380:32;3421:33;3380:32;3421:33;:::i;:::-;3081:456;;3473:7;;-1:-1:-1;;;3527:2:1;3512:18;;;;3499:32;;3081:456::o;3542:248::-;3610:6;3618;3671:2;3659:9;3650:7;3646:23;3642:32;3639:52;;;3687:1;3684;3677:12;3639:52;-1:-1:-1;;3710:23:1;;;3780:2;3765:18;;;3752:32;;-1:-1:-1;3542:248:1:o;3795:647::-;3869:6;3877;3885;3893;3946:3;3934:9;3925:7;3921:23;3917:33;3914:53;;;3963:1;3960;3953:12;3914:53;4002:9;3989:23;4021:28;4043:5;4021:28;:::i;:::-;4068:5;-1:-1:-1;4125:2:1;4110:18;;4097:32;4138:30;4097:32;4138:30;:::i;:::-;4187:7;-1:-1:-1;4246:2:1;4231:18;;4218:32;4259:30;4218:32;4259:30;:::i;:::-;4308:7;-1:-1:-1;4367:2:1;4352:18;;4339:32;4380:30;4339:32;4380:30;:::i;:::-;3795:647;;;;-1:-1:-1;3795:647:1;;-1:-1:-1;;3795:647:1:o;4636:247::-;4695:6;4748:2;4736:9;4727:7;4723:23;4719:32;4716:52;;;4764:1;4761;4754:12;4716:52;4803:9;4790:23;4822:31;4847:5;4822:31;:::i;4888:159::-;4955:20;;5015:6;5004:18;;4994:29;;4984:57;;5037:1;5034;5027:12;4984:57;4888:159;;;:::o;5052:256::-;5118:6;5126;5179:2;5167:9;5158:7;5154:23;5150:32;5147:52;;;5195:1;5192;5185:12;5147:52;5218:28;5236:9;5218:28;:::i;:::-;5208:38;;5265:37;5298:2;5287:9;5283:18;5265:37;:::i;:::-;5255:47;;5052:256;;;;;:::o;5605:241::-;5661:6;5714:2;5702:9;5693:7;5689:23;5685:32;5682:52;;;5730:1;5727;5720:12;5682:52;5769:9;5756:23;5788:28;5810:5;5788:28;:::i;5851:184::-;5903:77;5900:1;5893:88;6000:4;5997:1;5990:15;6024:4;6021:1;6014:15;6040:334;6111:2;6105:9;6167:2;6157:13;;-1:-1:-1;;6153:86:1;6141:99;;6270:18;6255:34;;6291:22;;;6252:62;6249:88;;;6317:18;;:::i;:::-;6353:2;6346:22;6040:334;;-1:-1:-1;6040:334:1:o;6379:183::-;6439:4;6472:18;6464:6;6461:30;6458:56;;;6494:18;;:::i;:::-;-1:-1:-1;6539:1:1;6535:14;6551:4;6531:25;;6379:183::o;6567:662::-;6621:5;6674:3;6667:4;6659:6;6655:17;6651:27;6641:55;;6692:1;6689;6682:12;6641:55;6728:6;6715:20;6754:4;6778:60;6794:43;6834:2;6794:43;:::i;:::-;6778:60;:::i;:::-;6872:15;;;6958:1;6954:10;;;;6942:23;;6938:32;;;6903:12;;;;6982:15;;;6979:35;;;7010:1;7007;7000:12;6979:35;7046:2;7038:6;7034:15;7058:142;7074:6;7069:3;7066:15;7058:142;;;7140:17;;7128:30;;7178:12;;;;7091;;7058:142;;;-1:-1:-1;7218:5:1;6567:662;-1:-1:-1;;;;;;6567:662:1:o;7234:1215::-;7352:6;7360;7413:2;7401:9;7392:7;7388:23;7384:32;7381:52;;;7429:1;7426;7419:12;7381:52;7469:9;7456:23;7498:18;7539:2;7531:6;7528:14;7525:34;;;7555:1;7552;7545:12;7525:34;7593:6;7582:9;7578:22;7568:32;;7638:7;7631:4;7627:2;7623:13;7619:27;7609:55;;7660:1;7657;7650:12;7609:55;7696:2;7683:16;7718:4;7742:60;7758:43;7798:2;7758:43;:::i;7742:60::-;7836:15;;;7918:1;7914:10;;;;7906:19;;7902:28;;;7867:12;;;;7942:19;;;7939:39;;;7974:1;7971;7964:12;7939:39;7998:11;;;;8018:217;8034:6;8029:3;8026:15;8018:217;;;8114:3;8101:17;8131:31;8156:5;8131:31;:::i;:::-;8175:18;;8051:12;;;;8213;;;;8018:217;;;8254:5;-1:-1:-1;;8297:18:1;;8284:32;;-1:-1:-1;;8328:16:1;;;8325:36;;;8357:1;8354;8347:12;8325:36;;8380:63;8435:7;8424:8;8413:9;8409:24;8380:63;:::i;:::-;8370:73;;;7234:1215;;;;;:::o;8454:388::-;8522:6;8530;8583:2;8571:9;8562:7;8558:23;8554:32;8551:52;;;8599:1;8596;8589:12;8551:52;8638:9;8625:23;8657:31;8682:5;8657:31;:::i;:::-;8707:5;-1:-1:-1;8764:2:1;8749:18;;8736:32;8777:33;8736:32;8777:33;:::i;9107:385::-;9193:6;9201;9209;9217;9270:3;9258:9;9249:7;9245:23;9241:33;9238:53;;;9287:1;9284;9277:12;9238:53;-1:-1:-1;;9310:23:1;;;9380:2;9365:18;;9352:32;;-1:-1:-1;9431:2:1;9416:18;;9403:32;;9482:2;9467:18;9454:32;;-1:-1:-1;9107:385:1;-1:-1:-1;9107:385:1:o;9497:437::-;9576:1;9572:12;;;;9619;;;9640:61;;9694:4;9686:6;9682:17;9672:27;;9640:61;9747:2;9739:6;9736:14;9716:18;9713:38;9710:218;;;9784:77;9781:1;9774:88;9885:4;9882:1;9875:15;9913:4;9910:1;9903:15;9710:218;;9497:437;;;:::o;11335:184::-;11387:77;11384:1;11377:88;11484:4;11481:1;11474:15;11508:4;11505:1;11498:15;11524:184;11576:77;11573:1;11566:88;11673:4;11670:1;11663:15;11697:4;11694:1;11687:15;11713:184;11765:77;11762:1;11755:88;11862:4;11859:1;11852:15;11886:4;11883:1;11876:15;11902:125;11942:4;11970:1;11967;11964:8;11961:34;;;11975:18;;:::i;:::-;-1:-1:-1;12012:9:1;;11902:125::o;12032:195::-;12071:3;-1:-1:-1;;12095:5:1;12092:77;12089:103;;;12172:18;;:::i;:::-;-1:-1:-1;12219:1:1;12208:13;;12032:195::o;12232:228::-;12272:7;12398:1;-1:-1:-1;;12326:74:1;12323:1;12320:81;12315:1;12308:9;12301:17;12297:105;12294:131;;;12405:18;;:::i;:::-;-1:-1:-1;12445:9:1;;12232:228::o;12465:184::-;12517:77;12514:1;12507:88;12614:4;12611:1;12604:15;12638:4;12635:1;12628:15;12654:120;12694:1;12720;12710:35;;12725:18;;:::i;:::-;-1:-1:-1;12759:9:1;;12654:120::o;13634:128::-;13674:3;13705:1;13701:6;13698:1;13695:13;13692:39;;;13711:18;;:::i;:::-;-1:-1:-1;13747:9:1;;13634:128::o;14178:224::-;14217:3;14245:6;14278:2;14275:1;14271:10;14308:2;14305:1;14301:10;14339:3;14335:2;14331:12;14326:3;14323:21;14320:47;;;14347:18;;:::i;:::-;14383:13;;14178:224;-1:-1:-1;;;;14178:224:1:o;15261:184::-;15331:6;15384:2;15372:9;15363:7;15359:23;15355:32;15352:52;;;15400:1;15397;15390:12;15352:52;-1:-1:-1;15423:16:1;;15261:184;-1:-1:-1;15261:184:1:o;17918:482::-;18007:1;18050:5;18007:1;18064:330;18085:7;18075:8;18072:21;18064:330;;;18204:4;-1:-1:-1;;18132:77:1;18126:4;18123:87;18120:113;;;18213:18;;:::i;:::-;18263:7;18253:8;18249:22;18246:55;;;18283:16;;;;18246:55;18362:22;;;;18322:15;;;;18064:330;;;18068:3;17918:482;;;;;:::o;18405:866::-;18454:5;18484:8;18474:80;;-1:-1:-1;18525:1:1;18539:5;;18474:80;18573:4;18563:76;;-1:-1:-1;18610:1:1;18624:5;;18563:76;18655:4;18673:1;18668:59;;;;18741:1;18736:130;;;;18648:218;;18668:59;18698:1;18689:10;;18712:5;;;18736:130;18773:3;18763:8;18760:17;18757:43;;;18780:18;;:::i;:::-;-1:-1:-1;;18836:1:1;18822:16;;18851:5;;18648:218;;18950:2;18940:8;18937:16;18931:3;18925:4;18922:13;18918:36;18912:2;18902:8;18899:16;18894:2;18888:4;18885:12;18881:35;18878:77;18875:159;;;-1:-1:-1;18987:19:1;;;19019:5;;18875:159;19066:34;19091:8;19085:4;19066:34;:::i;:::-;19196:6;-1:-1:-1;;19124:79:1;19115:7;19112:92;19109:118;;;19207:18;;:::i;:::-;19245:20;;18405:866;-1:-1:-1;;;18405:866:1:o;19276:140::-;19334:5;19363:47;19404:4;19394:8;19390:19;19384:4;19363:47;:::i;19421:112::-;19453:1;19479;19469:35;;19484:18;;:::i;:::-;-1:-1:-1;19518:9:1;;19421:112::o;19538:251::-;19608:6;19661:2;19649:9;19640:7;19636:23;19632:32;19629:52;;;19677:1;19674;19667:12;19629:52;19709:9;19703:16;19728:31;19753:5;19728:31;:::i;20761:306::-;20849:6;20857;20865;20918:2;20906:9;20897:7;20893:23;20889:32;20886:52;;;20934:1;20931;20924:12;20886:52;20963:9;20957:16;20947:26;;21013:2;21002:9;20998:18;20992:25;20982:35;;21057:2;21046:9;21042:18;21036:25;21026:35;;20761:306;;;;;:::o;21429:245::-;21496:6;21549:2;21537:9;21528:7;21524:23;21520:32;21517:52;;;21565:1;21562;21555:12;21517:52;21597:9;21591:16;21616:28;21638:5;21616:28;:::i;24420:1034::-;24690:4;24738:3;24727:9;24723:19;24769:6;24758:9;24751:25;24795:2;24833:6;24828:2;24817:9;24813:18;24806:34;24876:3;24871:2;24860:9;24856:18;24849:31;24900:6;24935;24929:13;24966:6;24958;24951:22;25004:3;24993:9;24989:19;24982:26;;25043:2;25035:6;25031:15;25017:29;;25064:1;25074:218;25088:6;25085:1;25082:13;25074:218;;;25153:13;;-1:-1:-1;;;;;25149:62:1;25137:75;;25267:15;;;;25232:12;;;;25110:1;25103:9;25074:218;;;-1:-1:-1;;;;;;;25348:55:1;;;;25343:2;25328:18;;25321:83;-1:-1:-1;;;25435:3:1;25420:19;25413:35;25309:3;24420:1034;-1:-1:-1;;;24420:1034:1:o

Swarm Source

ipfs://2a0632cde5289457a372931a33da0a6fcfd82dd475e3dc0dd9e14085887ab040

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.