ETH Price: $3,253.67 (+2.22%)
Gas: 2 Gwei

Token

Archbel (ABEL)
 

Overview

Max Total Supply

1,000,000,000 ABEL

Holders

129

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
565,587.805859357189267124 ABEL

Value
$0.00
0xf2516bddd95f8edec5dbce36665d47100f3aec66
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Archbel

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

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

        emit Transfer(sender, recipient, amount);
    }

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

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

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

interface ILpPair {
    function sync() external;
}

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

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

contract Archbel is ERC20, Ownable {

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

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address public operationsAddress;
    address public charityAddress;
    address public treasuryAddress;
    address public futureOwnerAddress;

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

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

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

    bool private gasLimitActive = true;
    uint256 private gasPriceMax = 350 * 1 gwei;

    uint256 public buyTotalFees;
    uint256 public buyOperationsFee;
    uint256 public buyLiquidityFee;
    uint256 public buyCharityFee;
    uint256 public buyTreasuryFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;
    uint256 public sellLiquidityFee;
    uint256 public sellCharityFee;
    uint256 public sellTreasuryFee;

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;
    uint256 public tokensForCharity;
    uint256 public tokensForTreasury;

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

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

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

    event EnabledTrading();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedOperationsAddress(address indexed newWallet);

    event UpdatedCharityAddress(address indexed newWallet);

    event UpdatedTreasuryAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

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

    event TransferForeignToken(address token, uint256 amount);

    event UpdatedPrivateMaxSell(uint256 amount);

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

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

        uint256 totalSupply = 1 * 1e9 * 1e18;
        
        maxBuyAmount = totalSupply * 5 / 1000;
        maxSellAmount = totalSupply * 5 / 1000;
        maxWallet = totalSupply * 2 / 100;
        swapTokensAtAmount = totalSupply * 25 / 100000;

        buyOperationsFee = 3;
        buyLiquidityFee = 3;
        buyCharityFee = 1;
        buyTreasuryFee = 3;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyCharityFee + buyTreasuryFee;

        sellOperationsFee = 2;
        sellLiquidityFee = 14;
        sellCharityFee = 1;
        sellTreasuryFee = 3;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellCharityFee + sellTreasuryFee;

        operationsAddress = address(0x2f80BAF8F0D3d8251Fb394cb9797305Afdd69DD0);
        charityAddress = address(0xe560f108ffE46DE1a2646eCf4F320e5625080060);
        treasuryAddress = address(0x3FEC3b6D7A42d28EE5bF6b25423f4cC998230E40);
        futureOwnerAddress = address(0xc5a8c45a2Bc0656A25D49E2450be05237995ef82);

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

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

        // TGE
        _createInitialSupply(futureOwnerAddress, totalSupply * 46 / 100);
        _createInitialSupply(0x1Eb63Bd5622634B737a77e3aC76c1AEE24964b20, totalSupply * 2 / 100);
        privateSaleWallets[0x1Eb63Bd5622634B737a77e3aC76c1AEE24964b20] = true;
        nextPrivateWalletSellDate[0x1Eb63Bd5622634B737a77e3aC76c1AEE24964b20] = block.timestamp;
        _createInitialSupply(0x91F4B8928c20914Bd9a36D35773DeDcB59508c7D, totalSupply * 2 / 100);
        privateSaleWallets[0x91F4B8928c20914Bd9a36D35773DeDcB59508c7D] = true;
        nextPrivateWalletSellDate[0x91F4B8928c20914Bd9a36D35773DeDcB59508c7D] = block.timestamp;
        _createInitialSupply(0x8eDf457ba999661e73bAc529D7Dc978f707f3e11, totalSupply * 1 / 100);
        privateSaleWallets[0x8eDf457ba999661e73bAc529D7Dc978f707f3e11] = true;
        nextPrivateWalletSellDate[0x8eDf457ba999661e73bAc529D7Dc978f707f3e11] = block.timestamp;
        _createInitialSupply(0x86d16bdC25cB0FE2bc79243B4A66616E463CC278, totalSupply * 1 / 100);
        privateSaleWallets[0x86d16bdC25cB0FE2bc79243B4A66616E463CC278] = true;
        nextPrivateWalletSellDate[0x86d16bdC25cB0FE2bc79243B4A66616E463CC278] = block.timestamp;
        _createInitialSupply(0x447D6e83E58fAD1952ee6191D9C83efaaEB1F055, totalSupply * 1 / 100);
        privateSaleWallets[0x447D6e83E58fAD1952ee6191D9C83efaaEB1F055] = true;
        nextPrivateWalletSellDate[0x447D6e83E58fAD1952ee6191D9C83efaaEB1F055] = block.timestamp;
        _createInitialSupply(0xAad5f8F2066ff176A9Cf61E3206771A4e034Ed73, totalSupply * 1 / 100);
        _createInitialSupply(0xcBBe12BfD06800825Bc13247eeF667965F3faCc0, totalSupply * 2 / 100);
        _createInitialSupply(0x903D52723560543f550828B508eC66fe03ed0ABC, totalSupply * 5 / 1000);
        _createInitialSupply(0x0dB29C84F9582eB6FeaA43f1a65F5A5d7ADfCcfC, totalSupply * 1 / 100);
        _createInitialSupply(0x96e527a5Ec620418e473680E25C4F6BB329d6B8D, totalSupply * 5 / 1000);
        _createInitialSupply(operationsAddress, totalSupply * 2 / 100);
        _createInitialSupply(treasuryAddress, totalSupply * 10 / 100);
        _createInitialSupply(address(this), totalSupply * 30 / 100);

        transferOwnership(newOwner);
    }

    receive() external payable {}

    function setGasPriceMax(uint256 gas) external onlyOwner {
        require(gas >= 200);
        gasPriceMax = gas * 1 gwei;
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        gasLimitActive = false;
        transferDelayEnabled = false;
        maxBuyAmount = totalSupply();
        maxSellAmount = totalSupply();
        maxWallet = totalSupply();
        emit RemovedLimits();
    }

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

    function removeBoughtEarly(address wallet) external onlyOwner {
        boughtEarly[wallet] = false;
    }

    function emergencyUpdateRouter(address router) external onlyOwner {
        require(!tradingActive, "Cannot update after trading is functional");
        dexRouter = IDexRouter(router);
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    function setPrivateSaleMaxSell(uint256 amount) external onlyOwner{
        require(amount >= 25 && amount <= 5000, "Must set between 0.25 and 50 ETH");
        maxPrivSaleSell = amount * 1e16;
        emit UpdatedPrivateMaxSell(amount);
    }

    function getPrivateSaleMaxSell() public view returns (uint256){
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);
        
        uint256[] memory amounts = new uint256[](2);
        amounts = dexRouter.getAmountsOut(maxPrivSaleSell, path);
        return amounts[1] + (amounts[1] * (sellCharityFee + sellTreasuryFee + sellOperationsFee + sellLiquidityFee))/100;
    }
    
    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set max buy amount lower than 0.1%");
        maxBuyAmount = newNum * (10**18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }
    
    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set max sell amount lower than 0.1%");
        maxSellAmount = newNum * (10**18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

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

    function airdropToWallets(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 200, "Can only airdrop 200 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            uint256 amount = amountsInTokens[i];
            super._transfer(msg.sender, wallet, amount);
        }
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != lpPair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

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

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

    function updateBuyFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _charityFee, uint256 _treasuryFee) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyCharityFee = _charityFee;
        buyTreasuryFee = _treasuryFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyCharityFee + buyTreasuryFee;
        require(buyTotalFees <= 15, "Must keep fees at 15% or less");
    }

    function updateSellFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _charityFee, uint256 _treasuryFee) external onlyOwner {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellCharityFee = _charityFee;
        sellTreasuryFee = _treasuryFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellCharityFee + sellTreasuryFee;
        require(sellTotalFees <= 20, "Must keep fees at 20% or less");
    }

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

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

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

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

        if(privateSaleWallets[from]){
            if(automatedMarketMakerPairs[to]){
                //enforce max sell restrictions.
                require(nextPrivateWalletSellDate[from] <= block.timestamp, "Cannot sell yet");
                require(amount <= getPrivateSaleMaxSell(), "Attempting to sell over max sell amount.  Check max.");
                nextPrivateWalletSellDate[from] = block.timestamp + 24 hours;
            } else if(!_isExcludedFromFees[to]){
                revert("Private sale cannot transfer and must sell only or transfer to a whitelisted address.");
            }
        }
        
        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){
                
                // dynamically increase max buy during launch
                if (maxBuyAmount < totalSupply() * 5 / 1000 && block.number >= blockForPenaltyEnd + 20){
                    maxBuyAmount = totalSupply() * 5 / 1000;
                }
                // only use to prevent sniper buys in the first blocks.
                if (gasLimitActive && automatedMarketMakerPairs[from]) {
                    require(tx.gasprice <= gasPriceMax, "Gas price exceeds limit.");
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != address(dexRouter) && to != address(lpPair)){
                        require(_holderLastTransferBlock[tx.origin] < block.number && _holderLastTransferBlock[to] < block.number, "_transfer:: Transfer Delay enabled.  Try again later.");
                        _holderLastTransferBlock[tx.origin] = block.number;
                        _holderLastTransferBlock[to] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy.");
                        require(amount + balanceOf(to) <= maxWallet, "Max Wallet exceeded"); // just relevant to buys on launch.
                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxSellAmount, "Sell transfer amount exceeds the max sell.");
                }
            }
        }

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

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

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // bot/sniper penalty.
            if((earlyBuyPenaltyInEffect() || (amount >= maxBuyAmount - .9 ether && blockForPenaltyEnd + 3 >= block.number)) && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] && buyTotalFees > 0){
                
                if(!earlyBuyPenaltyInEffect()){
                    maxBuyAmount -= 1;
                }

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

                fees = amount * buyTotalFees / 100;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForCharity += fees * buyCharityFee / buyTotalFees;
                tokensForTreasury += fees * buyTreasuryFee / buyTotalFees;
            }

            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees / 100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForOperations += fees * sellOperationsFee / sellTotalFees;
                tokensForCharity += fees * sellCharityFee / sellTotalFees;
                tokensForTreasury += fees * sellTreasuryFee / sellTotalFees;
            }

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

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

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

    function swapTokensForEth(uint256 tokenAmount) private {

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

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

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function getCurrentBlock() external view returns (uint256) {
        return block.number;
    }

    function getCurrentTimestamp() external view returns (uint256) {
        return block.timestamp;
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(dexRouter), tokenAmount);

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

    function swapBack() private {

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

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

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

        uint256 ethForOperations = ethBalance * tokensForOperations / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForCharity = ethBalance * tokensForCharity / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForTreasury = ethBalance * tokensForTreasury / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForOperations + ethForCharity + ethForTreasury;
            
        tokensForLiquidity = 0;
        tokensForOperations = 0;
        tokensForCharity = 0;
        tokensForTreasury = 0;
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        (success,) = address(charityAddress).call{value: ethForCharity}("");
        (success,) = address(treasuryAddress).call{value: ethForTreasury}("");

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

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

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

    function setOperationsAddress(address _operationsAddress) external onlyOwner {
        require(_operationsAddress != address(0), "address cannot be 0");
        operationsAddress = payable(_operationsAddress);
        emit UpdatedOperationsAddress(_operationsAddress);
    }
    
    function setCharityAddress(address _charityAddress) external onlyOwner {
        require(_charityAddress != address(0), "address cannot be 0");
        charityAddress = payable(_charityAddress);
        emit UpdatedCharityAddress(_charityAddress);
    }

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

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

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

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

        maxBuyAmount = totalSupply() * 1 / 1000;
        maxSellAmount = totalSupply() * 1 / 1000;

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

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

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

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

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

    function launchWithoutAirdrop(uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");
        require(blocksForPenalty < 10, "Cannot make penalty blocks more than 10");

        maxBuyAmount = totalSupply() * 1 / 1000;
        maxSellAmount = totalSupply() * 1 / 1000;

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedCharityAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UpdatedPrivateMaxSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedTreasuryAddress","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyCharityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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 IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earlyBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"emergencyUpdateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"futureOwnerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEarlyBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrivateSaleMaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"},{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"launchWithoutAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPrivSaleSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nextPrivateWalletSellDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"privateSaleWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"removeBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellCharityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_charityAddress","type":"address"}],"name":"setCharityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setPrivateSaleMaxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryAddress","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForCharity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_charityFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_charityFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600060105560158054600162ffffff199091161790556703782dace9d90000601855601a805461ffff191661010117905564517da02c00601b556007608081815266105c98da18995b60ca1b60a0908152610100604052600460c0908152631050915360e21b60e0529192620000789160039162000aa9565b5080516200008e90600490602084019062000aa9565b5050506000620000a3620007b260201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062005860833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d90811790915533906b033b2e3c9fd0803ce80000006103e86200012882600562000b65565b62000134919062000b87565b6006556103e86200014782600562000b65565b62000153919062000b87565b60075560646200016582600262000b65565b62000171919062000b87565b600855620186a06200018582601962000b65565b62000191919062000b87565b600b556003601d819055601e8190556001601f8190556020829055620001b8828062000baa565b620001c4919062000baa565b620001d0919062000baa565b601c5560026022819055600e60238190556001602481905560036025819055929091620001fd9162000baa565b62000209919062000baa565b62000215919062000baa565b602155600c80546001600160a01b0319908116732f80baf8f0d3d8251fb394cb9797305afdd69dd017909155600d8054821673e560f108ffe46de1a2646ecf4f320e5625080060179055600e80548216733fec3b6d7a42d28ee5bf6b25423f4cc998230e40179055600f805490911673c5a8c45a2bc0656a25d49e2450be05237995ef82179055620002a9836001620007b6565b600f54620002c2906001600160a01b03166001620007b6565b620002cf306001620007b6565b620002de61dead6001620007b6565b600c54620002f7906001600160a01b03166001620007b6565b6200030483600162000819565b600f546200031d906001600160a01b0316600162000819565b6200032a30600162000819565b6200033961dead600162000819565b600c5462000352906001600160a01b0316600162000819565b600f5462000384906001600160a01b031660646200037284602e62000b65565b6200037e919062000b87565b620008c7565b620003ac731eb63bd5622634b737a77e3ac76c1aee24964b2060646200037284600262000b65565b731eb63bd5622634b737a77e3ac76c1aee24964b206000527fafc1748b7dd4b08b70d27ccd0ddbd1a2df6213748ea627487171a2bbe0781a0c805460ff191660011790556017602052427f1b98cb44d0e530614ca8dc8f596b41ee9df0c1e6e42c89cbd6d17afe543a420a55620004407391f4b8928c20914bd9a36d35773dedcb59508c7d60646200037284600262000b65565b7391f4b8928c20914bd9a36d35773dedcb59508c7d6000527ff7eb5bb499b3072fc4dc7c56cb42fc8bca87567b011ffc45832eb925d4bb5338805460ff191660019081179091556017602052427fdff7e214b0e13395fb84a923aed11c8d10c1c56efe7f832433ca560474696f9255620004da90738edf457ba999661e73bac529d7dc978f707f3e11906064906200037290859062000b65565b738edf457ba999661e73bac529d7dc978f707f3e116000527fc4954e15f237560f906567338a53c79f5b4b87c21145e2fd05701a532e102dd0805460ff191660019081179091556017602052427fd1e98d02240df4122050243ca8e07094ac9589d8dbe61d60dbba93b4dcc5c5335562000574907386d16bdc25cb0fe2bc79243b4a66616e463cc278906064906200037290859062000b65565b7386d16bdc25cb0fe2bc79243b4a66616e463cc2786000527f4535e4feb73b322fd03cef119f84ecdbdc80e141f981f5c307e1ab1e8a5ccb46805460ff191660019081179091556017602052427fb78133628982c4d25893e09f095649053aea3526e6333ef77b92a7e0091fa0db556200060e9073447d6e83e58fad1952ee6191d9c83efaaeb1f055906064906200037290859062000b65565b73447d6e83e58fad1952ee6191d9c83efaaeb1f0556000527f54aba0a3ac00f7d0fa4271cdc2b6eb39292efbaf4635c7817d4bb73c39bb8413805460ff191660019081179091556017602052427f76ab8b6179bfc6f40fa21a992e98dafef9a10cd5e947c6677610c36982d3aa4e55620006a89073aad5f8f2066ff176a9cf61e3206771a4e034ed73906064906200037290859062000b65565b620006d073cbbe12bfd06800825bc13247eef667965f3facc060646200037284600262000b65565b620006f973903d52723560543f550828b508ec66fe03ed0abc6103e86200037284600562000b65565b62000721730db29c84f9582eb6feaa43f1a65f5a5d7adfccfc60646200037284600162000b65565b6200074a7396e527a5ec620418e473680e25c4f6bb329d6b8d6103e86200037284600562000b65565b600c546200076a906001600160a01b031660646200037284600262000b65565b600e546200078a906001600160a01b031660646200037284600a62000b65565b6200079e3060646200037284601e62000b65565b620007a983620009ac565b50505062000c01565b3390565b6001600160a01b0382166000818152602b6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6005546001600160a01b03163314620008685760405162461bcd60e51b815260206004820181905260248201526000805160206200584083398151915260448201526064015b60405180910390fd5b6001600160a01b0382166000818152602a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200091f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200085f565b806002600082825462000933919062000baa565b90915550506001600160a01b038216600090815260208190526040812080548392906200096290849062000baa565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620009f75760405162461bcd60e51b815260206004820181905260248201526000805160206200584083398151915260448201526064016200085f565b6001600160a01b03811662000a5e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200085f565b6005546040516001600160a01b038084169216906000805160206200586083398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b82805462000ab79062000bc5565b90600052602060002090601f01602090048101928262000adb576000855562000b26565b82601f1062000af657805160ff191683800117855562000b26565b8280016001018555821562000b26579182015b8281111562000b2657825182559160200191906001019062000b09565b5062000b3492915062000b38565b5090565b5b8082111562000b34576000815560010162000b39565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000b825762000b8262000b4f565b500290565b60008262000ba557634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111562000bc05762000bc062000b4f565b500190565b600181811c9082168062000bda57607f821691505b60208210810362000bfb57634e487b7160e01b600052602260045260246000fd5b50919050565b614c2f8062000c116000396000f3fe6080604052600436106104775760003560e01c80637571336a1161024a578063c5f956af11610139578063ea4cfe12116100b6578063f2fde38b1161007a578063f2fde38b14610d5a578063f5648a4f14610d7a578063f637434214610d8f578063f8b45b0514610da5578063fb002c9714610dbb57600080fd5b8063ea4cfe1214610cce578063ead010ae14610cee578063eb472fc414610d0e578063ee40166e14610d2e578063f11a24d314610d4457600080fd5b8063dc3f0d0f116100fd578063dc3f0d0f14610c1d578063dd62ed3e14610c3d578063e2f4560514610c83578063e7ad9fcd14610c99578063e884f26014610cb957600080fd5b8063c5f956af14610b97578063c876d0b914610bb7578063cc2ffe7c14610bd1578063d257b34f14610be7578063d85ba06314610c0757600080fd5b8063a1dc92bc116101c7578063afcf2fc41161018b578063afcf2fc414610ad8578063afd6ce6114610af8578063b62496f514610b28578063bbc0c74214610b58578063c024666814610b7757600080fd5b8063a1dc92bc14610a56578063a457c2d714610a6c578063a62068ce14610a8c578063a9059cbb14610aa2578063acee28d114610ac257600080fd5b80638da5cb5b1161020e5780638da5cb5b146109c157806395d89b41146109df5780639a5bd2dd146109f45780639a7a23d614610a165780639e46fddb14610a3657600080fd5b80637571336a1461091b57806380d75bab1461093b5780638366e79a1461095b57806385ecfd281461097b57806388e765ff146109ab57600080fd5b80634f77f6c0116103665780636a486a8e116102e357806370a08231116102a757806370a082311461089c578063713d0974146108bc578063715018a6146108d1578063751039fc146108e65780637537355d146108fb57600080fd5b80636a486a8e146108275780636b0a894c1461083d5780636b2fb124146108535780636c9230db146108695780636ddd17131461087c57600080fd5b80635c068a8c1161032a5780635c068a8c1461079b5780635c3352d3146107b15780636605bfda146107de57806366d602ae146107fe578063672d5d3b1461081457600080fd5b80634f77f6c01461072357806351f205e41461073957806358a6d5311461074e5780635a139dd4146107655780635bb988c91461077b57600080fd5b80632307b441116103f457806339509351116103b8578063395093511461069357806344249f04146106b3578063452ed4f1146106c9578063499b8394146106e95780634a62bb651461070957600080fd5b80632307b441146105f757806323b872dd146106175780632be32b61146106375780632e6ed7ef14610657578063313ce5671461067757600080fd5b806310d5de531161043b57806310d5de531461055c5780631805805b1461058c57806318160ddd146105ac57806318e1c123146105c15780631a8145bb146105e157600080fd5b806306fdde03146104835780630758d924146104ae578063095ea7b3146104e65780630c9be46d146105165780630d7f14411461053857600080fd5b3661047e57005b600080fd5b34801561048f57600080fd5b50610498610dd1565b6040516104a591906142e5565b60405180910390f35b3480156104ba57600080fd5b506009546104ce906001600160a01b031681565b6040516001600160a01b0390911681526020016104a5565b3480156104f257600080fd5b50610506610501366004614352565b610e63565b60405190151581526020016104a5565b34801561052257600080fd5b5061053661053136600461437e565b610e79565b005b34801561054457600080fd5b5061054e60245481565b6040519081526020016104a5565b34801561056857600080fd5b5061050661057736600461437e565b602b6020526000908152604090205460ff1681565b34801561059857600080fd5b506105366105a736600461437e565b610f1c565b3480156105b857600080fd5b5060025461054e565b3480156105cd57600080fd5b506105366105dc3660046143a2565b610fd2565b3480156105ed57600080fd5b5061054e60275481565b34801561060357600080fd5b506105366106123660046144f5565b6110a6565b34801561062357600080fd5b50610506610632366004614559565b6111af565b34801561064357600080fd5b506105366106523660046143a2565b611259565b34801561066357600080fd5b5061053661067236600461459a565b61135f565b34801561068357600080fd5b50604051601281526020016104a5565b34801561069f57600080fd5b506105066106ae366004614352565b611418565b3480156106bf57600080fd5b5061054e60285481565b3480156106d557600080fd5b50600a546104ce906001600160a01b031681565b3480156106f557600080fd5b5061053661070436600461437e565b611454565b34801561071557600080fd5b506015546105069060ff1681565b34801561072f57600080fd5b5061054e60225481565b34801561074557600080fd5b506105366114ee565b34801561075a57600080fd5b506011544310610506565b34801561077157600080fd5b5061054e601d5481565b34801561078757600080fd5b5061053661079636600461437e565b6115f7565b3480156107a757600080fd5b5061054e60205481565b3480156107bd57600080fd5b5061054e6107cc36600461437e565b60176020526000908152604090205481565b3480156107ea57600080fd5b506105366107f936600461437e565b611642565b34801561080a57600080fd5b5061054e60075481565b34801561082057600080fd5b504361054e565b34801561083357600080fd5b5061054e60215481565b34801561084957600080fd5b5061054e60145481565b34801561085f57600080fd5b5061054e60255481565b34801561087557600080fd5b504261054e565b34801561088857600080fd5b506015546105069062010000900460ff1681565b3480156108a857600080fd5b5061054e6108b736600461437e565b6116dc565b3480156108c857600080fd5b5061054e6116f7565b3480156108dd57600080fd5b5061053661190d565b3480156108f257600080fd5b50610536611981565b34801561090757600080fd5b506105366109163660046143a2565b6119fd565b34801561092757600080fd5b506105366109363660046145da565b611a49565b34801561094757600080fd5b506105366109563660046143a2565b611b11565b34801561096757600080fd5b50610506610976366004614613565b611ec0565b34801561098757600080fd5b5061050661099636600461437e565b60126020526000908152604090205460ff1681565b3480156109b757600080fd5b5061054e60065481565b3480156109cd57600080fd5b506005546001600160a01b03166104ce565b3480156109eb57600080fd5b506104986120fa565b348015610a0057600080fd5b50610a09612109565b6040516104a59190614685565b348015610a2257600080fd5b50610536610a313660046145da565b61216a565b348015610a4257600080fd5b50600f546104ce906001600160a01b031681565b348015610a6257600080fd5b5061054e601f5481565b348015610a7857600080fd5b50610506610a87366004614352565b61225e565b348015610a9857600080fd5b5061054e60115481565b348015610aae57600080fd5b50610506610abd366004614352565b6122f7565b348015610ace57600080fd5b5061054e60185481565b348015610ae457600080fd5b50600d546104ce906001600160a01b031681565b348015610b0457600080fd5b50610506610b1336600461437e565b60166020526000908152604090205460ff1681565b348015610b3457600080fd5b50610506610b4336600461437e565b602c6020526000908152604090205460ff1681565b348015610b6457600080fd5b5060155461050690610100900460ff1681565b348015610b8357600080fd5b50610536610b923660046145da565b612304565b348015610ba357600080fd5b50600e546104ce906001600160a01b031681565b348015610bc357600080fd5b50601a546105069060ff1681565b348015610bdd57600080fd5b5061054e60295481565b348015610bf357600080fd5b50610536610c023660046143a2565b61238d565b348015610c1357600080fd5b5061054e601c5481565b348015610c2957600080fd5b50610536610c383660046143a2565b6124d8565b348015610c4957600080fd5b5061054e610c58366004614613565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610c8f57600080fd5b5061054e600b5481565b348015610ca557600080fd5b50610536610cb436600461459a565b6125df565b348015610cc557600080fd5b50610536612692565b348015610cda57600080fd5b50600c546104ce906001600160a01b031681565b348015610cfa57600080fd5b50610536610d09366004614698565b6126c8565b348015610d1a57600080fd5b506104ce610d293660046143a2565b612b8d565b348015610d3a57600080fd5b5061054e60105481565b348015610d5057600080fd5b5061054e601e5481565b348015610d6657600080fd5b50610536610d7536600461437e565b612bb7565b348015610d8657600080fd5b50610536612ca2565b348015610d9b57600080fd5b5061054e60235481565b348015610db157600080fd5b5061054e60085481565b348015610dc757600080fd5b5061054e60265481565b606060038054610de090614705565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0c90614705565b8015610e595780601f10610e2e57610100808354040283529160200191610e59565b820191906000526020600020905b815481529060010190602001808311610e3c57829003601f168201915b5050505050905090565b6000610e70338484612d0e565b50600192915050565b6005546001600160a01b03163314610eac5760405162461bcd60e51b8152600401610ea39061473f565b60405180910390fd5b6001600160a01b038116610ed25760405162461bcd60e51b8152600401610ea390614774565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517fff6a822e9e2c4fe74d4f27fcde00b94c5abb41dd24b73e718952279715fa663290600090a250565b6005546001600160a01b03163314610f465760405162461bcd60e51b8152600401610ea39061473f565b601554610100900460ff1615610fb05760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610ea3565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610ffc5760405162461bcd60e51b8152600401610ea39061473f565b6019811015801561100f57506113888111155b61105b5760405162461bcd60e51b815260206004820181905260248201527f4d75737420736574206265747765656e20302e323520616e64203530204554486044820152606401610ea3565b61106c81662386f26fc100006147b7565b6018556040518181527f0320a651094de4f5fc35c0f1c336811904e8f465b6599a93eb0dec4919b8fec5906020015b60405180910390a150565b6005546001600160a01b031633146110d05760405162461bcd60e51b8152600401610ea39061473f565b80518251146111215760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610ea3565b60c88251106111425760405162461bcd60e51b8152600401610ea3906147d6565b60005b82518110156111aa5760008382815181106111625761116261482c565b6020026020010151905060008383815181106111805761118061482c565b60200260200101519050611195338383612e32565b505080806111a290614842565b915050611145565b505050565b60006111bc848484612f87565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156112415760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610ea3565b61124e8533858403612d0e565b506001949350505050565b6005546001600160a01b031633146112835760405162461bcd60e51b8152600401610ea39061473f565b670de0b6b3a76400006103e861129860025490565b6112a39060016147b7565b6112ad919061485b565b6112b7919061485b565b8110156113185760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610ea3565b61132a81670de0b6b3a76400006147b7565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de410099060200161109b565b6005546001600160a01b031633146113895760405162461bcd60e51b8152600401610ea39061473f565b601d849055601e839055601f829055602081905580826113a9858761487d565b6113b3919061487d565b6113bd919061487d565b601c819055600f10156114125760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610ea3565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610e7091859061144f90869061487d565b612d0e565b6005546001600160a01b0316331461147e5760405162461bcd60e51b8152600401610ea39061473f565b6001600160a01b0381166114a45760405162461bcd60e51b8152600401610ea390614774565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b031633146115185760405162461bcd60e51b8152600401610ea39061473f565b600b54611524306116dc565b101561159a576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610ea3565b600a805460ff60a01b1916600160a01b1790556115b5613db2565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146116215760405162461bcd60e51b8152600401610ea39061473f565b6001600160a01b03166000908152601260205260409020805460ff19169055565b6005546001600160a01b0316331461166c5760405162461bcd60e51b8152600401610ea39061473f565b6001600160a01b0381166116925760405162461bcd60e51b8152600401610ea390614774565b600e80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6001600160a01b031660009081526020819052604090205490565b604080516002808252606082018352600092839291906020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611765573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117899190614895565b8160008151811061179c5761179c61482c565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106117d0576117d061482c565b6001600160a01b039290921660209283029190910182015260408051600280825260608201835260009391929091830190803683370190505060095460185460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f9161183f9186906004016148b2565b600060405180830381865afa15801561185c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261188491908101906148d3565b9050606460235460225460255460245461189e919061487d565b6118a8919061487d565b6118b2919061487d565b826001815181106118c5576118c561482c565b60200260200101516118d791906147b7565b6118e1919061485b565b816001815181106118f4576118f461482c565b6020026020010151611906919061487d565b9250505090565b6005546001600160a01b031633146119375760405162461bcd60e51b8152600401610ea39061473f565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146119ab5760405162461bcd60e51b8152600401610ea39061473f565b6015805460ff19169055601a805461ffff191690556002546006556002546007556002546008556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b03163314611a275760405162461bcd60e51b8152600401610ea39061473f565b60c8811015611a3557600080fd5b611a4381633b9aca006147b7565b601b5550565b6005546001600160a01b03163314611a735760405162461bcd60e51b8152600401610ea39061473f565b80611ae657600a546001600160a01b0390811690831603611ae65760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610ea3565b6001600160a01b03919091166000908152602b60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611b3b5760405162461bcd60e51b8152600401610ea39061473f565b601554610100900460ff1615611b635760405162461bcd60e51b8152600401610ea390614964565b600a8110611b835760405162461bcd60e51b8152600401610ea3906149af565b6103e8611b8f60025490565b611b9a9060016147b7565b611ba4919061485b565b6006556103e8611bb360025490565b611bbe9060016147b7565b611bc8919061485b565b6007556015805462ffff00191662010100179055436010819055611bed90829061487d565b6011556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c909190614895565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d169190614895565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d879190614895565b600a80546001600160a01b0319166001600160a01b03929092169182179055611db1906001614061565b600a54611dc8906001600160a01b031660016140c4565b60004711611de85760405162461bcd60e51b8152600401610ea3906149f6565b6000611df3306116dc565b11611e105760405162461bcd60e51b8152600401610ea390614a39565b600954611e2b9030906001600160a01b031661144f826116dc565b6009546001600160a01b031663f305d7194730611e47816116dc565b600f546040516001600160e01b031960e087901b168152611e7d93929160009182916001600160a01b0316904290600401614a7f565b60606040518083038185885af1158015611e9b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906114129190614aba565b6005546000906001600160a01b03163314611eed5760405162461bcd60e51b8152600401610ea39061473f565b6001600160a01b038316611f435760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610ea3565b6001600160a01b03831630141580611f635750601554610100900460ff16155b611fcc5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610ea3565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015612013573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120379190614ae8565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561208a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ae9190614b01565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610de090614705565b60606013805480602002602001604051908101604052809291908181526020018280548015610e5957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612143575050505050905090565b6005546001600160a01b031633146121945760405162461bcd60e51b8152600401610ea39061473f565b600a546001600160a01b03908116908316036122185760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ea3565b61222282826140c4565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156122e05760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ea3565b6122ed3385858403612d0e565b5060019392505050565b6000610e70338484612f87565b6005546001600160a01b0316331461232e5760405162461bcd60e51b8152600401610ea39061473f565b6001600160a01b0382166000818152602a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146123b75760405162461bcd60e51b8152600401610ea39061473f565b620186a06123c460025490565b6123cf9060016147b7565b6123d9919061485b565b8110156124465760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610ea3565b6103e861245260025490565b61245d9060016147b7565b612467919061485b565b8111156124d35760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610ea3565b600b55565b6005546001600160a01b031633146125025760405162461bcd60e51b8152600401610ea39061473f565b670de0b6b3a76400006103e861251760025490565b6125229060016147b7565b61252c919061485b565b612536919061485b565b8110156125985760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610ea3565b6125aa81670de0b6b3a76400006147b7565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e9060200161109b565b6005546001600160a01b031633146126095760405162461bcd60e51b8152600401610ea39061473f565b60228490556023839055602482905560258190558082612629858761487d565b612633919061487d565b61263d919061487d565b6021819055601410156114125760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610ea3565b6005546001600160a01b031633146126bc5760405162461bcd60e51b8152600401610ea39061473f565b601a805460ff19169055565b6005546001600160a01b031633146126f25760405162461bcd60e51b8152600401610ea39061473f565b601554610100900460ff161561271a5760405162461bcd60e51b8152600401610ea390614964565b600a811061273a5760405162461bcd60e51b8152600401610ea3906149af565b815183511461278b5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610ea3565b60c88351106127ac5760405162461bcd60e51b8152600401610ea3906147d6565b60005b83518110156128475760008482815181106127cc576127cc61482c565b6020908102919091018101516001600160a01b0381166000908152601683526040808220805460ff191660011790556017909352918220429055855190925085908490811061281d5761281d61482c565b60200260200101519050612832338383612e32565b5050808061283f90614842565b9150506127af565b506103e861285460025490565b61285f9060016147b7565b612869919061485b565b6006556103e861287860025490565b6128839060016147b7565b61288d919061485b565b6007556015805462ffff001916620101001790554360108190556128b290829061487d565b6011556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129559190614895565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129db9190614895565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612a28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a4c9190614895565b600a80546001600160a01b0319166001600160a01b03929092169182179055612a76906001614061565b600a54612a8d906001600160a01b031660016140c4565b60004711612aad5760405162461bcd60e51b8152600401610ea3906149f6565b6000612ab8306116dc565b11612ad55760405162461bcd60e51b8152600401610ea390614a39565b600954612af09030906001600160a01b031661144f826116dc565b6009546001600160a01b031663f305d7194730612b0c816116dc565b600f546040516001600160e01b031960e087901b168152612b4293929160009182916001600160a01b0316904290600401614a7f565b60606040518083038185885af1158015612b60573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b859190614aba565b505050505050565b60138181548110612b9d57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b03163314612be15760405162461bcd60e51b8152600401610ea39061473f565b6001600160a01b038116612c465760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ea3565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314612ccc5760405162461bcd60e51b8152600401610ea39061473f565b604051600090339047908381818185875af1925050503d8060008114611412576040519150601f19603f3d011682016040523d82523d6000602084013e611412565b6001600160a01b038316612d705760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ea3565b6001600160a01b038216612dd15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ea3565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612e585760405162461bcd60e51b8152600401610ea390614b1e565b6001600160a01b038216612e7e5760405162461bcd60e51b8152600401610ea390614b63565b6001600160a01b03831660009081526020819052604090205481811015612ef65760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ea3565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612f2d90849061487d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f7991815260200190565b60405180910390a350505050565b6001600160a01b038316612fad5760405162461bcd60e51b8152600401610ea390614b1e565b6001600160a01b038216612fd35760405162461bcd60e51b8152600401610ea390614b63565b600081116130235760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610ea3565b601554610100900460ff166130b6576001600160a01b0383166000908152602a602052604090205460ff168061307157506001600160a01b0382166000908152602a602052604090205460ff165b6130b65760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ea3565b60115443101580156130cf5750601554610100900460ff165b1561319f576001600160a01b03831660009081526012602052604090205460ff16158061310957506005546001600160a01b038381169116145b8061311e57506001600160a01b03821661dead145b61319f5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610ea3565b6001600160a01b03831660009081526016602052604090205460ff1615613386576001600160a01b0382166000908152602c602052604090205460ff16156132da576001600160a01b03831660009081526017602052604090205442101561323b5760405162461bcd60e51b815260206004820152600f60248201526e10d85b9b9bdd081cd95b1b081e595d608a1b6044820152606401610ea3565b6132436116f7565b8111156132af5760405162461bcd60e51b815260206004820152603460248201527f417474656d7074696e6720746f2073656c6c206f766572206d61782073656c6c6044820152731030b6b7bab73a17101021b432b1b59036b0bc1760611b6064820152608401610ea3565b6132bc426201518061487d565b6001600160a01b038416600090815260176020526040902055613386565b6001600160a01b0382166000908152602a602052604090205460ff166133865760405162461bcd60e51b815260206004820152605560248201527f507269766174652073616c652063616e6e6f74207472616e7366657220616e6460448201527f206d7573742073656c6c206f6e6c79206f72207472616e7366657220746f2061606482015274103bb434ba32b634b9ba32b21030b2323932b9b99760591b608482015260a401610ea3565b60155460ff16156137d8576005546001600160a01b038481169116148015906133bd57506005546001600160a01b03838116911614155b80156133d157506001600160a01b03821615155b80156133e857506001600160a01b03821661dead14155b801561340d57506001600160a01b0383166000908152602a602052604090205460ff16155b801561343257506001600160a01b0382166000908152602a602052604090205460ff16155b156137d8576103e861344360025490565b61344e9060056147b7565b613458919061485b565b600654108015613475575060115461347190601461487d565b4310155b1561349f576103e861348660025490565b6134919060056147b7565b61349b919061485b565b6006555b601a54610100900460ff1680156134ce57506001600160a01b0383166000908152602c602052604090205460ff165b1561352557601b543a11156135255760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610ea3565b601a5460ff1615613625576009546001600160a01b0383811691161480159061355c5750600a546001600160a01b03838116911614155b1561362557326000908152601960205260409020544311801561359657506001600160a01b03821660009081526019602052604090205443115b6136005760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610ea3565b3260009081526019602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152602c602052604090205460ff16801561366657506001600160a01b0382166000908152602b602052604090205460ff16155b1561372d576006548111156136ce5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610ea3565b6008546136da836116dc565b6136e4908361487d565b11156137285760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08195e18d959591959606a1b6044820152606401610ea3565b6137d8565b6001600160a01b0382166000908152602c602052604090205460ff16801561376e57506001600160a01b0383166000908152602b602052604090205460ff16155b156137d8576007548111156137d85760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610ea3565b60006137e3306116dc565b600b5490915081108015908190613802575060155462010000900460ff165b80156138185750600a54600160a01b900460ff16155b801561383d57506001600160a01b0385166000908152602c602052604090205460ff16155b801561386257506001600160a01b0385166000908152602a602052604090205460ff16155b801561388757506001600160a01b0384166000908152602a602052604090205460ff16155b156138b557600a805460ff60a01b1916600160a01b1790556138a7613db2565b600a805460ff60a01b191690555b6001600160a01b0385166000908152602a602052604090205460019060ff16806138f757506001600160a01b0385166000908152602a602052604090205460ff165b15613900575060005b60008115613d9e576011544310806139465750670c7d713b49da00006006546139299190614ba6565b85101580156139465750436011546003613943919061487d565b10155b801561396a57506001600160a01b0387166000908152602c602052604090205460ff165b801561398f57506001600160a01b0386166000908152602c602052604090205460ff16155b801561399d57506000601c54115b15613b875760115443106139c4576001600660008282546139be9190614ba6565b90915550505b6001600160a01b03861660009081526012602052604090205460ff16613aa4576001600160a01b0386166000908152601260205260408120805460ff191660019081179091556014805491929091613a1d90849061487d565b9091555050601380546001810182556000919091527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0900180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064601c5486613ab491906147b7565b613abe919061485b565b9050601c54601e5482613ad191906147b7565b613adb919061485b565b60276000828254613aec919061487d565b9091555050601c54601d54613b0190836147b7565b613b0b919061485b565b60266000828254613b1c919061487d565b9091555050601c54601f54613b3190836147b7565b613b3b919061485b565b60286000828254613b4c919061487d565b9091555050601c54602054613b6190836147b7565b613b6b919061485b565b60296000828254613b7c919061487d565b90915550613d809050565b6001600160a01b0386166000908152602c602052604090205460ff168015613bb157506000602154115b15613c7357606460215486613bc691906147b7565b613bd0919061485b565b905060215460235482613be391906147b7565b613bed919061485b565b60276000828254613bfe919061487d565b9091555050602154602254613c1390836147b7565b613c1d919061485b565b60266000828254613c2e919061487d565b9091555050602154602454613c4390836147b7565b613c4d919061485b565b60286000828254613c5e919061487d565b9091555050602154602554613b6190836147b7565b6001600160a01b0387166000908152602c602052604090205460ff168015613c9d57506000601c54115b15613d80576064601c5486613cb291906147b7565b613cbc919061485b565b9050601c54601e5482613ccf91906147b7565b613cd9919061485b565b60276000828254613cea919061487d565b9091555050601c54601d54613cff90836147b7565b613d09919061485b565b60266000828254613d1a919061487d565b9091555050601c54601f54613d2f90836147b7565b613d39919061485b565b60286000828254613d4a919061487d565b9091555050601c54602054613d5f90836147b7565b613d69919061485b565b60296000828254613d7a919061487d565b90915550505b8015613d9157613d91873083612e32565b613d9b8186614ba6565b94505b613da9878787612e32565b50505050505050565b6000613dbd306116dc565b90506000602954602854602654602754613dd7919061487d565b613de1919061487d565b613deb919061487d565b9050811580613df8575080155b15613e01575050565b600b54613e0f90600a6147b7565b821115613e2757600b54613e2490600a6147b7565b91505b60008060028360275486613e3b91906147b7565b613e45919061485b565b613e4f919061485b565b9050613e63613e5e8286614ba6565b6140f2565b60275447908190600090613e799060029061485b565b613e839087614ba6565b602654613e9090856147b7565b613e9a919061485b565b905060006002602754613ead919061485b565b613eb79088614ba6565b602854613ec490866147b7565b613ece919061485b565b905060006002602754613ee1919061485b565b613eeb9089614ba6565b602954613ef890876147b7565b613f02919061485b565b905080613f0f838561487d565b613f19919061487d565b613f239085614ba6565b600060278190556026819055602881905560295593508515801590613f485750600084115b15613f5757613f578685614244565b600d546040516001600160a01b03909116908390600081818185875af1925050503d8060008114613fa4576040519150601f19603f3d011682016040523d82523d6000602084013e613fa9565b606091505b5050600e546040519198506001600160a01b0316908290600081818185875af1925050503d8060008114613ff9576040519150601f19603f3d011682016040523d82523d6000602084013e613ffe565b606091505b5050600c546040519198506001600160a01b0316904790600081818185875af1925050503d806000811461404e576040519150601f19603f3d011682016040523d82523d6000602084013e614053565b606091505b505050505050505050505050565b6001600160a01b0382166000818152602b6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602c60205260409020805460ff19168215151790556122228282614061565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106141275761412761482c565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015614180573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141a49190614895565b816001815181106141b7576141b761482c565b6001600160a01b0392831660209182029290920101526009546141dd9130911684612d0e565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790614216908590600090869030904290600401614bbd565b600060405180830381600087803b15801561423057600080fd5b505af1158015612b85573d6000803e3d6000fd5b60095461425c9030906001600160a01b031684612d0e565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d71990839061429b9030908790600090819061dead904290600401614a7f565b60606040518083038185885af11580156142b9573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906142de9190614aba565b5050505050565b600060208083528351808285015260005b81811015614312578581018301518582016040015282016142f6565b81811115614324576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461434f57600080fd5b50565b6000806040838503121561436557600080fd5b82356143708161433a565b946020939093013593505050565b60006020828403121561439057600080fd5b813561439b8161433a565b9392505050565b6000602082840312156143b457600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156143fa576143fa6143bb565b604052919050565b600067ffffffffffffffff82111561441c5761441c6143bb565b5060051b60200190565b600082601f83011261443757600080fd5b8135602061444c61444783614402565b6143d1565b82815260059290921b8401810191818101908684111561446b57600080fd5b8286015b8481101561448f5780356144828161433a565b835291830191830161446f565b509695505050505050565b600082601f8301126144ab57600080fd5b813560206144bb61444783614402565b82815260059290921b840181019181810190868411156144da57600080fd5b8286015b8481101561448f57803583529183019183016144de565b6000806040838503121561450857600080fd5b823567ffffffffffffffff8082111561452057600080fd5b61452c86838701614426565b9350602085013591508082111561454257600080fd5b5061454f8582860161449a565b9150509250929050565b60008060006060848603121561456e57600080fd5b83356145798161433a565b925060208401356145898161433a565b929592945050506040919091013590565b600080600080608085870312156145b057600080fd5b5050823594602084013594506040840135936060013592509050565b801515811461434f57600080fd5b600080604083850312156145ed57600080fd5b82356145f88161433a565b91506020830135614608816145cc565b809150509250929050565b6000806040838503121561462657600080fd5b82356146318161433a565b915060208301356146088161433a565b600081518084526020808501945080840160005b8381101561467a5781516001600160a01b031687529582019590820190600101614655565b509495945050505050565b60208152600061439b6020830184614641565b6000806000606084860312156146ad57600080fd5b833567ffffffffffffffff808211156146c557600080fd5b6146d187838801614426565b945060208601359150808211156146e757600080fd5b506146f48682870161449a565b925050604084013590509250925092565b600181811c9082168061471957607f821691505b60208210810361473957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601390820152720616464726573732063616e6e6f74206265203606c1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156147d1576147d16147a1565b500290565b60208082526036908201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726040820152752074786e2064756520746f20676173206c696d69747360501b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060018201614854576148546147a1565b5060010190565b60008261487857634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115614890576148906147a1565b500190565b6000602082840312156148a757600080fd5b815161439b8161433a565b8281526040602082015260006148cb6040830184614641565b949350505050565b600060208083850312156148e657600080fd5b825167ffffffffffffffff8111156148fd57600080fd5b8301601f8101851361490e57600080fd5b805161491c61444782614402565b81815260059190911b8201830190838101908783111561493b57600080fd5b928401925b8284101561495957835182529284019290840190614940565b979650505050505050565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2031360cc1b606082015260800190565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b60208082526026908201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206040820152650d8c2eadcc6d60d31b606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215614acf57600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215614afa57600080fd5b5051919050565b600060208284031215614b1357600080fd5b815161439b816145cc565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015614bb857614bb86147a1565b500390565b85815284602082015260a060408201526000614bdc60a0830186614641565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220ac4b62077e111faca36baf55ad9ca80569069013cb6b2d0160a31c99ce2fb98964736f6c634300080d00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106104775760003560e01c80637571336a1161024a578063c5f956af11610139578063ea4cfe12116100b6578063f2fde38b1161007a578063f2fde38b14610d5a578063f5648a4f14610d7a578063f637434214610d8f578063f8b45b0514610da5578063fb002c9714610dbb57600080fd5b8063ea4cfe1214610cce578063ead010ae14610cee578063eb472fc414610d0e578063ee40166e14610d2e578063f11a24d314610d4457600080fd5b8063dc3f0d0f116100fd578063dc3f0d0f14610c1d578063dd62ed3e14610c3d578063e2f4560514610c83578063e7ad9fcd14610c99578063e884f26014610cb957600080fd5b8063c5f956af14610b97578063c876d0b914610bb7578063cc2ffe7c14610bd1578063d257b34f14610be7578063d85ba06314610c0757600080fd5b8063a1dc92bc116101c7578063afcf2fc41161018b578063afcf2fc414610ad8578063afd6ce6114610af8578063b62496f514610b28578063bbc0c74214610b58578063c024666814610b7757600080fd5b8063a1dc92bc14610a56578063a457c2d714610a6c578063a62068ce14610a8c578063a9059cbb14610aa2578063acee28d114610ac257600080fd5b80638da5cb5b1161020e5780638da5cb5b146109c157806395d89b41146109df5780639a5bd2dd146109f45780639a7a23d614610a165780639e46fddb14610a3657600080fd5b80637571336a1461091b57806380d75bab1461093b5780638366e79a1461095b57806385ecfd281461097b57806388e765ff146109ab57600080fd5b80634f77f6c0116103665780636a486a8e116102e357806370a08231116102a757806370a082311461089c578063713d0974146108bc578063715018a6146108d1578063751039fc146108e65780637537355d146108fb57600080fd5b80636a486a8e146108275780636b0a894c1461083d5780636b2fb124146108535780636c9230db146108695780636ddd17131461087c57600080fd5b80635c068a8c1161032a5780635c068a8c1461079b5780635c3352d3146107b15780636605bfda146107de57806366d602ae146107fe578063672d5d3b1461081457600080fd5b80634f77f6c01461072357806351f205e41461073957806358a6d5311461074e5780635a139dd4146107655780635bb988c91461077b57600080fd5b80632307b441116103f457806339509351116103b8578063395093511461069357806344249f04146106b3578063452ed4f1146106c9578063499b8394146106e95780634a62bb651461070957600080fd5b80632307b441146105f757806323b872dd146106175780632be32b61146106375780632e6ed7ef14610657578063313ce5671461067757600080fd5b806310d5de531161043b57806310d5de531461055c5780631805805b1461058c57806318160ddd146105ac57806318e1c123146105c15780631a8145bb146105e157600080fd5b806306fdde03146104835780630758d924146104ae578063095ea7b3146104e65780630c9be46d146105165780630d7f14411461053857600080fd5b3661047e57005b600080fd5b34801561048f57600080fd5b50610498610dd1565b6040516104a591906142e5565b60405180910390f35b3480156104ba57600080fd5b506009546104ce906001600160a01b031681565b6040516001600160a01b0390911681526020016104a5565b3480156104f257600080fd5b50610506610501366004614352565b610e63565b60405190151581526020016104a5565b34801561052257600080fd5b5061053661053136600461437e565b610e79565b005b34801561054457600080fd5b5061054e60245481565b6040519081526020016104a5565b34801561056857600080fd5b5061050661057736600461437e565b602b6020526000908152604090205460ff1681565b34801561059857600080fd5b506105366105a736600461437e565b610f1c565b3480156105b857600080fd5b5060025461054e565b3480156105cd57600080fd5b506105366105dc3660046143a2565b610fd2565b3480156105ed57600080fd5b5061054e60275481565b34801561060357600080fd5b506105366106123660046144f5565b6110a6565b34801561062357600080fd5b50610506610632366004614559565b6111af565b34801561064357600080fd5b506105366106523660046143a2565b611259565b34801561066357600080fd5b5061053661067236600461459a565b61135f565b34801561068357600080fd5b50604051601281526020016104a5565b34801561069f57600080fd5b506105066106ae366004614352565b611418565b3480156106bf57600080fd5b5061054e60285481565b3480156106d557600080fd5b50600a546104ce906001600160a01b031681565b3480156106f557600080fd5b5061053661070436600461437e565b611454565b34801561071557600080fd5b506015546105069060ff1681565b34801561072f57600080fd5b5061054e60225481565b34801561074557600080fd5b506105366114ee565b34801561075a57600080fd5b506011544310610506565b34801561077157600080fd5b5061054e601d5481565b34801561078757600080fd5b5061053661079636600461437e565b6115f7565b3480156107a757600080fd5b5061054e60205481565b3480156107bd57600080fd5b5061054e6107cc36600461437e565b60176020526000908152604090205481565b3480156107ea57600080fd5b506105366107f936600461437e565b611642565b34801561080a57600080fd5b5061054e60075481565b34801561082057600080fd5b504361054e565b34801561083357600080fd5b5061054e60215481565b34801561084957600080fd5b5061054e60145481565b34801561085f57600080fd5b5061054e60255481565b34801561087557600080fd5b504261054e565b34801561088857600080fd5b506015546105069062010000900460ff1681565b3480156108a857600080fd5b5061054e6108b736600461437e565b6116dc565b3480156108c857600080fd5b5061054e6116f7565b3480156108dd57600080fd5b5061053661190d565b3480156108f257600080fd5b50610536611981565b34801561090757600080fd5b506105366109163660046143a2565b6119fd565b34801561092757600080fd5b506105366109363660046145da565b611a49565b34801561094757600080fd5b506105366109563660046143a2565b611b11565b34801561096757600080fd5b50610506610976366004614613565b611ec0565b34801561098757600080fd5b5061050661099636600461437e565b60126020526000908152604090205460ff1681565b3480156109b757600080fd5b5061054e60065481565b3480156109cd57600080fd5b506005546001600160a01b03166104ce565b3480156109eb57600080fd5b506104986120fa565b348015610a0057600080fd5b50610a09612109565b6040516104a59190614685565b348015610a2257600080fd5b50610536610a313660046145da565b61216a565b348015610a4257600080fd5b50600f546104ce906001600160a01b031681565b348015610a6257600080fd5b5061054e601f5481565b348015610a7857600080fd5b50610506610a87366004614352565b61225e565b348015610a9857600080fd5b5061054e60115481565b348015610aae57600080fd5b50610506610abd366004614352565b6122f7565b348015610ace57600080fd5b5061054e60185481565b348015610ae457600080fd5b50600d546104ce906001600160a01b031681565b348015610b0457600080fd5b50610506610b1336600461437e565b60166020526000908152604090205460ff1681565b348015610b3457600080fd5b50610506610b4336600461437e565b602c6020526000908152604090205460ff1681565b348015610b6457600080fd5b5060155461050690610100900460ff1681565b348015610b8357600080fd5b50610536610b923660046145da565b612304565b348015610ba357600080fd5b50600e546104ce906001600160a01b031681565b348015610bc357600080fd5b50601a546105069060ff1681565b348015610bdd57600080fd5b5061054e60295481565b348015610bf357600080fd5b50610536610c023660046143a2565b61238d565b348015610c1357600080fd5b5061054e601c5481565b348015610c2957600080fd5b50610536610c383660046143a2565b6124d8565b348015610c4957600080fd5b5061054e610c58366004614613565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610c8f57600080fd5b5061054e600b5481565b348015610ca557600080fd5b50610536610cb436600461459a565b6125df565b348015610cc557600080fd5b50610536612692565b348015610cda57600080fd5b50600c546104ce906001600160a01b031681565b348015610cfa57600080fd5b50610536610d09366004614698565b6126c8565b348015610d1a57600080fd5b506104ce610d293660046143a2565b612b8d565b348015610d3a57600080fd5b5061054e60105481565b348015610d5057600080fd5b5061054e601e5481565b348015610d6657600080fd5b50610536610d7536600461437e565b612bb7565b348015610d8657600080fd5b50610536612ca2565b348015610d9b57600080fd5b5061054e60235481565b348015610db157600080fd5b5061054e60085481565b348015610dc757600080fd5b5061054e60265481565b606060038054610de090614705565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0c90614705565b8015610e595780601f10610e2e57610100808354040283529160200191610e59565b820191906000526020600020905b815481529060010190602001808311610e3c57829003601f168201915b5050505050905090565b6000610e70338484612d0e565b50600192915050565b6005546001600160a01b03163314610eac5760405162461bcd60e51b8152600401610ea39061473f565b60405180910390fd5b6001600160a01b038116610ed25760405162461bcd60e51b8152600401610ea390614774565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517fff6a822e9e2c4fe74d4f27fcde00b94c5abb41dd24b73e718952279715fa663290600090a250565b6005546001600160a01b03163314610f465760405162461bcd60e51b8152600401610ea39061473f565b601554610100900460ff1615610fb05760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610ea3565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610ffc5760405162461bcd60e51b8152600401610ea39061473f565b6019811015801561100f57506113888111155b61105b5760405162461bcd60e51b815260206004820181905260248201527f4d75737420736574206265747765656e20302e323520616e64203530204554486044820152606401610ea3565b61106c81662386f26fc100006147b7565b6018556040518181527f0320a651094de4f5fc35c0f1c336811904e8f465b6599a93eb0dec4919b8fec5906020015b60405180910390a150565b6005546001600160a01b031633146110d05760405162461bcd60e51b8152600401610ea39061473f565b80518251146111215760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610ea3565b60c88251106111425760405162461bcd60e51b8152600401610ea3906147d6565b60005b82518110156111aa5760008382815181106111625761116261482c565b6020026020010151905060008383815181106111805761118061482c565b60200260200101519050611195338383612e32565b505080806111a290614842565b915050611145565b505050565b60006111bc848484612f87565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156112415760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610ea3565b61124e8533858403612d0e565b506001949350505050565b6005546001600160a01b031633146112835760405162461bcd60e51b8152600401610ea39061473f565b670de0b6b3a76400006103e861129860025490565b6112a39060016147b7565b6112ad919061485b565b6112b7919061485b565b8110156113185760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610ea3565b61132a81670de0b6b3a76400006147b7565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de410099060200161109b565b6005546001600160a01b031633146113895760405162461bcd60e51b8152600401610ea39061473f565b601d849055601e839055601f829055602081905580826113a9858761487d565b6113b3919061487d565b6113bd919061487d565b601c819055600f10156114125760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610ea3565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610e7091859061144f90869061487d565b612d0e565b6005546001600160a01b0316331461147e5760405162461bcd60e51b8152600401610ea39061473f565b6001600160a01b0381166114a45760405162461bcd60e51b8152600401610ea390614774565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b031633146115185760405162461bcd60e51b8152600401610ea39061473f565b600b54611524306116dc565b101561159a576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610ea3565b600a805460ff60a01b1916600160a01b1790556115b5613db2565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146116215760405162461bcd60e51b8152600401610ea39061473f565b6001600160a01b03166000908152601260205260409020805460ff19169055565b6005546001600160a01b0316331461166c5760405162461bcd60e51b8152600401610ea39061473f565b6001600160a01b0381166116925760405162461bcd60e51b8152600401610ea390614774565b600e80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6001600160a01b031660009081526020819052604090205490565b604080516002808252606082018352600092839291906020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611765573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117899190614895565b8160008151811061179c5761179c61482c565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106117d0576117d061482c565b6001600160a01b039290921660209283029190910182015260408051600280825260608201835260009391929091830190803683370190505060095460185460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f9161183f9186906004016148b2565b600060405180830381865afa15801561185c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261188491908101906148d3565b9050606460235460225460255460245461189e919061487d565b6118a8919061487d565b6118b2919061487d565b826001815181106118c5576118c561482c565b60200260200101516118d791906147b7565b6118e1919061485b565b816001815181106118f4576118f461482c565b6020026020010151611906919061487d565b9250505090565b6005546001600160a01b031633146119375760405162461bcd60e51b8152600401610ea39061473f565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146119ab5760405162461bcd60e51b8152600401610ea39061473f565b6015805460ff19169055601a805461ffff191690556002546006556002546007556002546008556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b03163314611a275760405162461bcd60e51b8152600401610ea39061473f565b60c8811015611a3557600080fd5b611a4381633b9aca006147b7565b601b5550565b6005546001600160a01b03163314611a735760405162461bcd60e51b8152600401610ea39061473f565b80611ae657600a546001600160a01b0390811690831603611ae65760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610ea3565b6001600160a01b03919091166000908152602b60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611b3b5760405162461bcd60e51b8152600401610ea39061473f565b601554610100900460ff1615611b635760405162461bcd60e51b8152600401610ea390614964565b600a8110611b835760405162461bcd60e51b8152600401610ea3906149af565b6103e8611b8f60025490565b611b9a9060016147b7565b611ba4919061485b565b6006556103e8611bb360025490565b611bbe9060016147b7565b611bc8919061485b565b6007556015805462ffff00191662010100179055436010819055611bed90829061487d565b6011556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c909190614895565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d169190614895565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d879190614895565b600a80546001600160a01b0319166001600160a01b03929092169182179055611db1906001614061565b600a54611dc8906001600160a01b031660016140c4565b60004711611de85760405162461bcd60e51b8152600401610ea3906149f6565b6000611df3306116dc565b11611e105760405162461bcd60e51b8152600401610ea390614a39565b600954611e2b9030906001600160a01b031661144f826116dc565b6009546001600160a01b031663f305d7194730611e47816116dc565b600f546040516001600160e01b031960e087901b168152611e7d93929160009182916001600160a01b0316904290600401614a7f565b60606040518083038185885af1158015611e9b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906114129190614aba565b6005546000906001600160a01b03163314611eed5760405162461bcd60e51b8152600401610ea39061473f565b6001600160a01b038316611f435760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610ea3565b6001600160a01b03831630141580611f635750601554610100900460ff16155b611fcc5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610ea3565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015612013573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120379190614ae8565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561208a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ae9190614b01565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610de090614705565b60606013805480602002602001604051908101604052809291908181526020018280548015610e5957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612143575050505050905090565b6005546001600160a01b031633146121945760405162461bcd60e51b8152600401610ea39061473f565b600a546001600160a01b03908116908316036122185760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ea3565b61222282826140c4565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156122e05760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ea3565b6122ed3385858403612d0e565b5060019392505050565b6000610e70338484612f87565b6005546001600160a01b0316331461232e5760405162461bcd60e51b8152600401610ea39061473f565b6001600160a01b0382166000818152602a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146123b75760405162461bcd60e51b8152600401610ea39061473f565b620186a06123c460025490565b6123cf9060016147b7565b6123d9919061485b565b8110156124465760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610ea3565b6103e861245260025490565b61245d9060016147b7565b612467919061485b565b8111156124d35760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610ea3565b600b55565b6005546001600160a01b031633146125025760405162461bcd60e51b8152600401610ea39061473f565b670de0b6b3a76400006103e861251760025490565b6125229060016147b7565b61252c919061485b565b612536919061485b565b8110156125985760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610ea3565b6125aa81670de0b6b3a76400006147b7565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e9060200161109b565b6005546001600160a01b031633146126095760405162461bcd60e51b8152600401610ea39061473f565b60228490556023839055602482905560258190558082612629858761487d565b612633919061487d565b61263d919061487d565b6021819055601410156114125760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610ea3565b6005546001600160a01b031633146126bc5760405162461bcd60e51b8152600401610ea39061473f565b601a805460ff19169055565b6005546001600160a01b031633146126f25760405162461bcd60e51b8152600401610ea39061473f565b601554610100900460ff161561271a5760405162461bcd60e51b8152600401610ea390614964565b600a811061273a5760405162461bcd60e51b8152600401610ea3906149af565b815183511461278b5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610ea3565b60c88351106127ac5760405162461bcd60e51b8152600401610ea3906147d6565b60005b83518110156128475760008482815181106127cc576127cc61482c565b6020908102919091018101516001600160a01b0381166000908152601683526040808220805460ff191660011790556017909352918220429055855190925085908490811061281d5761281d61482c565b60200260200101519050612832338383612e32565b5050808061283f90614842565b9150506127af565b506103e861285460025490565b61285f9060016147b7565b612869919061485b565b6006556103e861287860025490565b6128839060016147b7565b61288d919061485b565b6007556015805462ffff001916620101001790554360108190556128b290829061487d565b6011556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129559190614895565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129db9190614895565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612a28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a4c9190614895565b600a80546001600160a01b0319166001600160a01b03929092169182179055612a76906001614061565b600a54612a8d906001600160a01b031660016140c4565b60004711612aad5760405162461bcd60e51b8152600401610ea3906149f6565b6000612ab8306116dc565b11612ad55760405162461bcd60e51b8152600401610ea390614a39565b600954612af09030906001600160a01b031661144f826116dc565b6009546001600160a01b031663f305d7194730612b0c816116dc565b600f546040516001600160e01b031960e087901b168152612b4293929160009182916001600160a01b0316904290600401614a7f565b60606040518083038185885af1158015612b60573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b859190614aba565b505050505050565b60138181548110612b9d57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b03163314612be15760405162461bcd60e51b8152600401610ea39061473f565b6001600160a01b038116612c465760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ea3565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314612ccc5760405162461bcd60e51b8152600401610ea39061473f565b604051600090339047908381818185875af1925050503d8060008114611412576040519150601f19603f3d011682016040523d82523d6000602084013e611412565b6001600160a01b038316612d705760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ea3565b6001600160a01b038216612dd15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ea3565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612e585760405162461bcd60e51b8152600401610ea390614b1e565b6001600160a01b038216612e7e5760405162461bcd60e51b8152600401610ea390614b63565b6001600160a01b03831660009081526020819052604090205481811015612ef65760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ea3565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612f2d90849061487d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f7991815260200190565b60405180910390a350505050565b6001600160a01b038316612fad5760405162461bcd60e51b8152600401610ea390614b1e565b6001600160a01b038216612fd35760405162461bcd60e51b8152600401610ea390614b63565b600081116130235760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610ea3565b601554610100900460ff166130b6576001600160a01b0383166000908152602a602052604090205460ff168061307157506001600160a01b0382166000908152602a602052604090205460ff165b6130b65760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ea3565b60115443101580156130cf5750601554610100900460ff165b1561319f576001600160a01b03831660009081526012602052604090205460ff16158061310957506005546001600160a01b038381169116145b8061311e57506001600160a01b03821661dead145b61319f5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610ea3565b6001600160a01b03831660009081526016602052604090205460ff1615613386576001600160a01b0382166000908152602c602052604090205460ff16156132da576001600160a01b03831660009081526017602052604090205442101561323b5760405162461bcd60e51b815260206004820152600f60248201526e10d85b9b9bdd081cd95b1b081e595d608a1b6044820152606401610ea3565b6132436116f7565b8111156132af5760405162461bcd60e51b815260206004820152603460248201527f417474656d7074696e6720746f2073656c6c206f766572206d61782073656c6c6044820152731030b6b7bab73a17101021b432b1b59036b0bc1760611b6064820152608401610ea3565b6132bc426201518061487d565b6001600160a01b038416600090815260176020526040902055613386565b6001600160a01b0382166000908152602a602052604090205460ff166133865760405162461bcd60e51b815260206004820152605560248201527f507269766174652073616c652063616e6e6f74207472616e7366657220616e6460448201527f206d7573742073656c6c206f6e6c79206f72207472616e7366657220746f2061606482015274103bb434ba32b634b9ba32b21030b2323932b9b99760591b608482015260a401610ea3565b60155460ff16156137d8576005546001600160a01b038481169116148015906133bd57506005546001600160a01b03838116911614155b80156133d157506001600160a01b03821615155b80156133e857506001600160a01b03821661dead14155b801561340d57506001600160a01b0383166000908152602a602052604090205460ff16155b801561343257506001600160a01b0382166000908152602a602052604090205460ff16155b156137d8576103e861344360025490565b61344e9060056147b7565b613458919061485b565b600654108015613475575060115461347190601461487d565b4310155b1561349f576103e861348660025490565b6134919060056147b7565b61349b919061485b565b6006555b601a54610100900460ff1680156134ce57506001600160a01b0383166000908152602c602052604090205460ff165b1561352557601b543a11156135255760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610ea3565b601a5460ff1615613625576009546001600160a01b0383811691161480159061355c5750600a546001600160a01b03838116911614155b1561362557326000908152601960205260409020544311801561359657506001600160a01b03821660009081526019602052604090205443115b6136005760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610ea3565b3260009081526019602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152602c602052604090205460ff16801561366657506001600160a01b0382166000908152602b602052604090205460ff16155b1561372d576006548111156136ce5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610ea3565b6008546136da836116dc565b6136e4908361487d565b11156137285760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08195e18d959591959606a1b6044820152606401610ea3565b6137d8565b6001600160a01b0382166000908152602c602052604090205460ff16801561376e57506001600160a01b0383166000908152602b602052604090205460ff16155b156137d8576007548111156137d85760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610ea3565b60006137e3306116dc565b600b5490915081108015908190613802575060155462010000900460ff165b80156138185750600a54600160a01b900460ff16155b801561383d57506001600160a01b0385166000908152602c602052604090205460ff16155b801561386257506001600160a01b0385166000908152602a602052604090205460ff16155b801561388757506001600160a01b0384166000908152602a602052604090205460ff16155b156138b557600a805460ff60a01b1916600160a01b1790556138a7613db2565b600a805460ff60a01b191690555b6001600160a01b0385166000908152602a602052604090205460019060ff16806138f757506001600160a01b0385166000908152602a602052604090205460ff165b15613900575060005b60008115613d9e576011544310806139465750670c7d713b49da00006006546139299190614ba6565b85101580156139465750436011546003613943919061487d565b10155b801561396a57506001600160a01b0387166000908152602c602052604090205460ff165b801561398f57506001600160a01b0386166000908152602c602052604090205460ff16155b801561399d57506000601c54115b15613b875760115443106139c4576001600660008282546139be9190614ba6565b90915550505b6001600160a01b03861660009081526012602052604090205460ff16613aa4576001600160a01b0386166000908152601260205260408120805460ff191660019081179091556014805491929091613a1d90849061487d565b9091555050601380546001810182556000919091527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0900180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064601c5486613ab491906147b7565b613abe919061485b565b9050601c54601e5482613ad191906147b7565b613adb919061485b565b60276000828254613aec919061487d565b9091555050601c54601d54613b0190836147b7565b613b0b919061485b565b60266000828254613b1c919061487d565b9091555050601c54601f54613b3190836147b7565b613b3b919061485b565b60286000828254613b4c919061487d565b9091555050601c54602054613b6190836147b7565b613b6b919061485b565b60296000828254613b7c919061487d565b90915550613d809050565b6001600160a01b0386166000908152602c602052604090205460ff168015613bb157506000602154115b15613c7357606460215486613bc691906147b7565b613bd0919061485b565b905060215460235482613be391906147b7565b613bed919061485b565b60276000828254613bfe919061487d565b9091555050602154602254613c1390836147b7565b613c1d919061485b565b60266000828254613c2e919061487d565b9091555050602154602454613c4390836147b7565b613c4d919061485b565b60286000828254613c5e919061487d565b9091555050602154602554613b6190836147b7565b6001600160a01b0387166000908152602c602052604090205460ff168015613c9d57506000601c54115b15613d80576064601c5486613cb291906147b7565b613cbc919061485b565b9050601c54601e5482613ccf91906147b7565b613cd9919061485b565b60276000828254613cea919061487d565b9091555050601c54601d54613cff90836147b7565b613d09919061485b565b60266000828254613d1a919061487d565b9091555050601c54601f54613d2f90836147b7565b613d39919061485b565b60286000828254613d4a919061487d565b9091555050601c54602054613d5f90836147b7565b613d69919061485b565b60296000828254613d7a919061487d565b90915550505b8015613d9157613d91873083612e32565b613d9b8186614ba6565b94505b613da9878787612e32565b50505050505050565b6000613dbd306116dc565b90506000602954602854602654602754613dd7919061487d565b613de1919061487d565b613deb919061487d565b9050811580613df8575080155b15613e01575050565b600b54613e0f90600a6147b7565b821115613e2757600b54613e2490600a6147b7565b91505b60008060028360275486613e3b91906147b7565b613e45919061485b565b613e4f919061485b565b9050613e63613e5e8286614ba6565b6140f2565b60275447908190600090613e799060029061485b565b613e839087614ba6565b602654613e9090856147b7565b613e9a919061485b565b905060006002602754613ead919061485b565b613eb79088614ba6565b602854613ec490866147b7565b613ece919061485b565b905060006002602754613ee1919061485b565b613eeb9089614ba6565b602954613ef890876147b7565b613f02919061485b565b905080613f0f838561487d565b613f19919061487d565b613f239085614ba6565b600060278190556026819055602881905560295593508515801590613f485750600084115b15613f5757613f578685614244565b600d546040516001600160a01b03909116908390600081818185875af1925050503d8060008114613fa4576040519150601f19603f3d011682016040523d82523d6000602084013e613fa9565b606091505b5050600e546040519198506001600160a01b0316908290600081818185875af1925050503d8060008114613ff9576040519150601f19603f3d011682016040523d82523d6000602084013e613ffe565b606091505b5050600c546040519198506001600160a01b0316904790600081818185875af1925050503d806000811461404e576040519150601f19603f3d011682016040523d82523d6000602084013e614053565b606091505b505050505050505050505050565b6001600160a01b0382166000818152602b6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602c60205260409020805460ff19168215151790556122228282614061565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106141275761412761482c565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015614180573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141a49190614895565b816001815181106141b7576141b761482c565b6001600160a01b0392831660209182029290920101526009546141dd9130911684612d0e565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790614216908590600090869030904290600401614bbd565b600060405180830381600087803b15801561423057600080fd5b505af1158015612b85573d6000803e3d6000fd5b60095461425c9030906001600160a01b031684612d0e565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d71990839061429b9030908790600090819061dead904290600401614a7f565b60606040518083038185885af11580156142b9573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906142de9190614aba565b5050505050565b600060208083528351808285015260005b81811015614312578581018301518582016040015282016142f6565b81811115614324576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461434f57600080fd5b50565b6000806040838503121561436557600080fd5b82356143708161433a565b946020939093013593505050565b60006020828403121561439057600080fd5b813561439b8161433a565b9392505050565b6000602082840312156143b457600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156143fa576143fa6143bb565b604052919050565b600067ffffffffffffffff82111561441c5761441c6143bb565b5060051b60200190565b600082601f83011261443757600080fd5b8135602061444c61444783614402565b6143d1565b82815260059290921b8401810191818101908684111561446b57600080fd5b8286015b8481101561448f5780356144828161433a565b835291830191830161446f565b509695505050505050565b600082601f8301126144ab57600080fd5b813560206144bb61444783614402565b82815260059290921b840181019181810190868411156144da57600080fd5b8286015b8481101561448f57803583529183019183016144de565b6000806040838503121561450857600080fd5b823567ffffffffffffffff8082111561452057600080fd5b61452c86838701614426565b9350602085013591508082111561454257600080fd5b5061454f8582860161449a565b9150509250929050565b60008060006060848603121561456e57600080fd5b83356145798161433a565b925060208401356145898161433a565b929592945050506040919091013590565b600080600080608085870312156145b057600080fd5b5050823594602084013594506040840135936060013592509050565b801515811461434f57600080fd5b600080604083850312156145ed57600080fd5b82356145f88161433a565b91506020830135614608816145cc565b809150509250929050565b6000806040838503121561462657600080fd5b82356146318161433a565b915060208301356146088161433a565b600081518084526020808501945080840160005b8381101561467a5781516001600160a01b031687529582019590820190600101614655565b509495945050505050565b60208152600061439b6020830184614641565b6000806000606084860312156146ad57600080fd5b833567ffffffffffffffff808211156146c557600080fd5b6146d187838801614426565b945060208601359150808211156146e757600080fd5b506146f48682870161449a565b925050604084013590509250925092565b600181811c9082168061471957607f821691505b60208210810361473957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601390820152720616464726573732063616e6e6f74206265203606c1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156147d1576147d16147a1565b500290565b60208082526036908201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726040820152752074786e2064756520746f20676173206c696d69747360501b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060018201614854576148546147a1565b5060010190565b60008261487857634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115614890576148906147a1565b500190565b6000602082840312156148a757600080fd5b815161439b8161433a565b8281526040602082015260006148cb6040830184614641565b949350505050565b600060208083850312156148e657600080fd5b825167ffffffffffffffff8111156148fd57600080fd5b8301601f8101851361490e57600080fd5b805161491c61444782614402565b81815260059190911b8201830190838101908783111561493b57600080fd5b928401925b8284101561495957835182529284019290840190614940565b979650505050505050565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2031360cc1b606082015260800190565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b60208082526026908201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206040820152650d8c2eadcc6d60d31b606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215614acf57600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215614afa57600080fd5b5051919050565b600060208284031215614b1357600080fd5b815161439b816145cc565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015614bb857614bb86147a1565b500390565b85815284602082015260a060408201526000614bdc60a0830186614641565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220ac4b62077e111faca36baf55ad9ca80569069013cb6b2d0160a31c99ce2fb98964736f6c634300080d0033

Deployed Bytecode Sourcemap

9549:27859:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4077:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9695:27;;;;;;;;;;-1:-1:-1;9695:27:0;;;;-1:-1:-1;;;;;9695:27:0;;;;;;-1:-1:-1;;;;;798:32:1;;;780:51;;768:2;753:18;9695:27:0;616:221:1;4991:169:0;;;;;;;;;;-1:-1:-1;4991:169:0;;;;;:::i;:::-;;:::i;:::-;;;1463:14:1;;1456:22;1438:41;;1426:2;1411:18;4991:169:0;1298:187:1;32978:257:0;;;;;;;;;;-1:-1:-1;32978:257:0;;;;;:::i;:::-;;:::i;:::-;;11130:29;;;;;;;;;;;;;;;;;;;1888:25:1;;;1876:2;1861:18;11130:29:0;1742:177:1;11478:64:0;;;;;;;;;;-1:-1:-1;11478:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17632:194;;;;;;;;;;-1:-1:-1;17632:194:0;;;;;:::i;:::-;;:::i;4398:108::-;;;;;;;;;;-1:-1:-1;4486:12:0;;4398:108;;17997:246;;;;;;;;;;-1:-1:-1;17997:246:0;;;;;:::i;:::-;;:::i;11246:33::-;;;;;;;;;;;;;;;;19907:618;;;;;;;;;;-1:-1:-1;19907:618:0;;;;;:::i;:::-;;:::i;5168:492::-;;;;;;;;;;-1:-1:-1;5168:492:0;;;;;:::i;:::-;;:::i;18709:269::-;;;;;;;;;;-1:-1:-1;18709:269:0;;;;;:::i;:::-;;:::i;21350:468::-;;;;;;;;;;-1:-1:-1;21350:468:0;;;;;:::i;:::-;;:::i;4297:93::-;;;;;;;;;;-1:-1:-1;4297:93:0;;4380:2;5711:36:1;;5699:2;5684:18;4297:93:0;5569:184:1;5668:215:0;;;;;;;;;;-1:-1:-1;5668:215:0;;;;;:::i;:::-;;:::i;11286:31::-;;;;;;;;;;;;;;;;9729:21;;;;;;;;;;-1:-1:-1;9729:21:0;;;;-1:-1:-1;;;;;9729:21:0;;;32688:278;;;;;;;;;;-1:-1:-1;32688:278:0;;;;;:::i;:::-;;:::i;10220:33::-;;;;;;;;;;-1:-1:-1;10220:33:0;;;;;;;;11053:32;;;;;;;;;;;;;;;;33559:312;;;;;;;;;;;;;:::i;28753:120::-;;;;;;;;;;-1:-1:-1;28847:18:0;;28832:12;:33;28753:120;;10870:31;;;;;;;;;;;;;;;;17516:108;;;;;;;;;;-1:-1:-1;17516:108:0;;;;;:::i;:::-;;:::i;10980:29::-;;;;;;;;;;;;;;;;10398:61;;;;;;;;;;-1:-1:-1;10398:61:0;;;;;:::i;:::-;;;;;;;;;;;;;;33243:264;;;;;;;;;;-1:-1:-1;33243:264:0;;;;;:::i;:::-;;:::i;9627:28::-;;;;;;;;;;;;;;;;29462:97;;;;;;;;;;-1:-1:-1;29539:12:0;29462:97;;11018:28;;;;;;;;;;;;;;;;10186:25;;;;;;;;;;;;;;;;11166:30;;;;;;;;;;;;;;;;29567:104;;;;;;;;;;-1:-1:-1;29648:15:0;29567:104;;10300:31;;;;;;;;;;-1:-1:-1;10300:31:0;;;;;;;;;;;4514:127;;;;;;;;;;-1:-1:-1;4514:127:0;;;;;:::i;:::-;;:::i;18251:446::-;;;;;;;;;;;;;:::i;8158:150::-;;;;;;;;;;;;;:::i;17095:302::-;;;;;;;;;;;;;:::i;16908:131::-;;;;;;;;;;-1:-1:-1;16908:131:0;;;;;:::i;:::-;;:::i;20537:260::-;;;;;;;;;;-1:-1:-1;20537:260:0;;;;;:::i;:::-;;:::i;35980:1425::-;;;;;;;;;;-1:-1:-1;35980:1425:0;;;;;:::i;:::-;;:::i;31952:498::-;;;;;;;;;;-1:-1:-1;31952:498:0;;;;;:::i;:::-;;:::i;10100:44::-;;;;;;;;;;-1:-1:-1;10100:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9593:27;;;;;;;;;;;;;;;;7944:79;;;;;;;;;;-1:-1:-1;8009:6:0;;-1:-1:-1;;;;;8009:6:0;7944:79;;4185:104;;;;;;;;;;;;;:::i;17405:103::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;20805:293::-;;;;;;;;;;-1:-1:-1;20805:293:0;;;;;:::i;:::-;;:::i;9941:33::-;;;;;;;;;;-1:-1:-1;9941:33:0;;;;-1:-1:-1;;;;;9941:33:0;;;10945:28;;;;;;;;;;;;;;;;5891:413;;;;;;;;;;-1:-1:-1;5891:413:0;;;;;:::i;:::-;;:::i;10060:33::-;;;;;;;;;;;;;;;;4649:175;;;;;;;;;;-1:-1:-1;4649:175:0;;;;;:::i;:::-;;:::i;10466:42::-;;;;;;;;;;;;;;;;9868:29;;;;;;;;;;-1:-1:-1;9868:29:0;;;;-1:-1:-1;;;;;9868:29:0;;;10340:51;;;;;;;;;;-1:-1:-1;10340:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11700:58;;;;;;;;;;-1:-1:-1;11700:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10260:33;;;;;;;;;;-1:-1:-1;10260:33:0;;;;;;;;;;;22313:182;;;;;;;;;;-1:-1:-1;22313:182:0;;;;;:::i;:::-;;:::i;9904:30::-;;;;;;;;;;-1:-1:-1;9904:30:0;;;;-1:-1:-1;;;;;9904:30:0;;;10696:39;;;;;;;;;;-1:-1:-1;10696:39:0;;;;;;;;11324:32;;;;;;;;;;;;;;;;19334:346;;;;;;;;;;-1:-1:-1;19334:346:0;;;;;:::i;:::-;;:::i;10836:27::-;;;;;;;;;;;;;;;;18990:274;;;;;;;;;;-1:-1:-1;18990:274:0;;;;;:::i;:::-;;:::i;4832:151::-;;;;;;;;;;-1:-1:-1;4832:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4948:18:0;;;4921:7;4948:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4832:151;9787:33;;;;;;;;;;;;;;;;21826:479;;;;;;;;;;-1:-1:-1;21826:479:0;;;;;:::i;:::-;;:::i;17891:98::-;;;;;;;;;;;;;:::i;9829:32::-;;;;;;;;;;-1:-1:-1;9829:32:0;;;;-1:-1:-1;;;;;9829:32:0;;;33879:2093;;;;;;;;;;-1:-1:-1;33879:2093:0;;;;;:::i;:::-;;:::i;10151:28::-;;;;;;;;;;-1:-1:-1;10151:28:0;;;;;:::i;:::-;;:::i;9983:37::-;;;;;;;;;;;;;;;;10908:30;;;;;;;;;;;;;;;;8316:244;;;;;;;;;;-1:-1:-1;8316:244:0;;;;;:::i;:::-;;:::i;32520:160::-;;;;;;;;;;;;;:::i;11092:31::-;;;;;;;;;;;;;;;;9662:24;;;;;;;;;;;;;;;;11205:34;;;;;;;;;;;;;;;;4077:100;4131:13;4164:5;4157:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4077:100;:::o;4991:169::-;5074:4;5091:39;306:10;5114:7;5123:6;5091:8;:39::i;:::-;-1:-1:-1;5148:4:0;4991:169;;;;:::o;32978:257::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;33068:29:0;::::1;33060:61;;;;-1:-1:-1::0;;;33060:61:0::1;;;;;;;:::i;:::-;33132:14;:41:::0;;-1:-1:-1;;;;;;33132:41:0::1;-1:-1:-1::0;;;;;33132:41:0;::::1;::::0;;::::1;::::0;;;33189:38:::1;::::0;::::1;::::0;-1:-1:-1;;33189:38:0::1;32978:257:::0;:::o;17632:194::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;17718:13:::1;::::0;::::1;::::0;::::1;;;17717:14;17709:68;;;::::0;-1:-1:-1;;;17709:68:0;;9565:2:1;17709:68:0::1;::::0;::::1;9547:21:1::0;9604:2;9584:18;;;9577:30;9643:34;9623:18;;;9616:62;-1:-1:-1;;;9694:18:1;;;9687:39;9743:19;;17709:68:0::1;9363:405:1::0;17709:68:0::1;17788:9;:30:::0;;-1:-1:-1;;;;;;17788:30:0::1;-1:-1:-1::0;;;;;17788:30:0;;;::::1;::::0;;;::::1;::::0;;17632:194::o;17997:246::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;18091:2:::1;18081:6;:12;;:30;;;;;18107:4;18097:6;:14;;18081:30;18073:75;;;::::0;-1:-1:-1;;;18073:75:0;;9975:2:1;18073:75:0::1;::::0;::::1;9957:21:1::0;;;9994:18;;;9987:30;10053:34;10033:18;;;10026:62;10105:18;;18073:75:0::1;9773:356:1::0;18073:75:0::1;18177:13;:6:::0;18186:4:::1;18177:13;:::i;:::-;18159:15;:31:::0;18206:29:::1;::::0;1888:25:1;;;18206:29:0::1;::::0;1876:2:1;1861:18;18206:29:0::1;;;;;;;;17997:246:::0;:::o;19907:618::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;20049:15:::1;:22;20031:7;:14;:40;20023:83;;;::::0;-1:-1:-1;;;20023:83:0;;10641:2:1;20023:83:0::1;::::0;::::1;10623:21:1::0;10680:2;10660:18;;;10653:30;10719:32;10699:18;;;10692:60;10769:18;;20023:83:0::1;10439:354:1::0;20023:83:0::1;20142:3;20125:7;:14;:20;20117:87;;;;-1:-1:-1::0;;;20117:87:0::1;;;;;;;:::i;:::-;20317:9;20313:205;20336:7;:14;20332:1;:18;20313:205;;;20371:14;20388:7;20396:1;20388:10;;;;;;;;:::i;:::-;;;;;;;20371:27;;20413:14;20430:15;20446:1;20430:18;;;;;;;;:::i;:::-;;;;;;;20413:35;;20463:43;20479:10;20491:6;20499;20463:15;:43::i;:::-;20356:162;;20352:3;;;;;:::i;:::-;;;;20313:205;;;;19907:618:::0;;:::o;5168:492::-;5308:4;5325:36;5335:6;5343:9;5354:6;5325:9;:36::i;:::-;-1:-1:-1;;;;;5401:19:0;;5374:24;5401:19;;;:11;:19;;;;;;;;306:10;5401:33;;;;;;;;5453:26;;;;5445:79;;;;-1:-1:-1;;;5445:79:0;;11695:2:1;5445:79:0;;;11677:21:1;11734:2;11714:18;;;11707:30;11773:34;11753:18;;;11746:62;-1:-1:-1;;;11824:18:1;;;11817:38;11872:19;;5445:79:0;11493:404:1;5445:79:0;5560:57;5569:6;306:10;5610:6;5591:16;:25;5560:8;:57::i;:::-;-1:-1:-1;5648:4:0;;5168:492;-1:-1:-1;;;;5168:492:0:o;18709:269::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;18828:4:::1;18822;18802:13;4486:12:::0;;;4398:108;18802:13:::1;:17;::::0;18818:1:::1;18802:17;:::i;:::-;:24;;;;:::i;:::-;18801:31;;;;:::i;:::-;18791:6;:41;;18783:95;;;::::0;-1:-1:-1;;;18783:95:0;;12326:2:1;18783:95:0::1;::::0;::::1;12308:21:1::0;12365:2;12345:18;;;12338:30;12404:34;12384:18;;;12377:62;-1:-1:-1;;;12455:18:1;;;12448:39;12504:19;;18783:95:0::1;12124:405:1::0;18783:95:0::1;18904:17;:6:::0;18914::::1;18904:17;:::i;:::-;18889:12;:32:::0;;;18937:33:::1;::::0;1888:25:1;;;18937:33:0::1;::::0;1876:2:1;1861:18;18937:33:0::1;1742:177:1::0;21350:468:0;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;21493:16:::1;:33:::0;;;21537:15:::1;:31:::0;;;21579:13:::1;:27:::0;;;21617:14:::1;:29:::0;;;21634:12;21595:11;21672:34:::1;21555:13:::0;21512:14;21672:34:::1;:::i;:::-;:50;;;;:::i;:::-;:67;;;;:::i;:::-;21657:12;:82:::0;;;21774:2:::1;-1:-1:-1::0;21758:18:0::1;21750:60;;;::::0;-1:-1:-1;;;21750:60:0;;12869:2:1;21750:60:0::1;::::0;::::1;12851:21:1::0;12908:2;12888:18;;;12881:30;12947:31;12927:18;;;12920:59;12996:18;;21750:60:0::1;12667:353:1::0;21750:60:0::1;21350:468:::0;;;;:::o;5668:215::-;306:10;5756:4;5805:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5805:34:0;;;;;;;;;;5756:4;;5773:80;;5796:7;;5805:47;;5842:10;;5805:47;:::i;:::-;5773:8;:80::i;32688:278::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32784:32:0;::::1;32776:64;;;;-1:-1:-1::0;;;32776:64:0::1;;;;;;;:::i;:::-;32851:17;:47:::0;;-1:-1:-1;;;;;;32851:47:0::1;-1:-1:-1::0;;;;;32851:47:0;::::1;::::0;;::::1;::::0;;;32914:44:::1;::::0;::::1;::::0;-1:-1:-1;;32914:44:0::1;32688:278:::0;:::o;33559:312::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;33650:18:::1;;33622:24;33640:4;33622:9;:24::i;:::-;:46;;33614:123;;;::::0;;-1:-1:-1;;;33614:123:0;;13227:2:1;33614:123:0::1;::::0;::::1;13209:21:1::0;13246:18;;;13239:30;;;;13305:34;13285:18;;;13278:62;13376:34;13356:18;;;13349:62;13428:19;;33614:123:0::1;13025:428:1::0;33614:123:0::1;33748:8;:15:::0;;-1:-1:-1;;;;33748:15:0::1;-1:-1:-1::0;;;33748:15:0::1;::::0;;33774:10:::1;:8;:10::i;:::-;33795:8;:16:::0;;-1:-1:-1;;;;33795:16:0::1;::::0;;33827:36:::1;::::0;33847:15:::1;1888:25:1::0;;33827:36:0::1;::::0;1876:2:1;1861:18;33827:36:0::1;;;;;;;33559:312::o:0;17516:108::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17589:19:0::1;17611:5;17589:19:::0;;;:11:::1;:19;::::0;;;;:27;;-1:-1:-1;;17589:27:0::1;::::0;;17516:108::o;33243:264::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33335:30:0;::::1;33327:62;;;;-1:-1:-1::0;;;33327:62:0::1;;;;;;;:::i;:::-;33400:15;:43:::0;;-1:-1:-1;;;;;;33400:43:0::1;-1:-1:-1::0;;;;;33400:43:0;::::1;::::0;;::::1;::::0;;;33459:40:::1;::::0;::::1;::::0;-1:-1:-1;;33459:40:0::1;33243:264:::0;:::o;4514:127::-;-1:-1:-1;;;;;4615:18:0;4588:7;4615:18;;;;;;;;;;;;4514:127::o;18251:446::-;18348:16;;;18362:1;18348:16;;;;;;;;18305:7;;;;18348:16;18362:1;18348:16;;;;;;;;-1:-1:-1;;18385:9:0;;:16;;;-1:-1:-1;;;18385:16:0;;;;18324:40;;-1:-1:-1;;;;;;18385:9:0;;;;:14;;-1:-1:-1;18385:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18375:4;18380:1;18375:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;18375:26:0;;;-1:-1:-1;;;;;18375:26:0;;;;;18430:4;18412;18417:1;18412:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18412:23:0;;;;:7;;;;;;;;;;:23;18483:16;;;18497:1;18483:16;;;;;;;;18456:24;;18483:16;;18497:1;;18483:16;;;;;;;;;-1:-1:-1;;18520:9:0;;18544:15;;18520:46;;-1:-1:-1;;;18520:46:0;;18456:43;;-1:-1:-1;;;;;;18520:9:0;;;;:23;;:46;;18561:4;;18520:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18520:46:0;;;;;;;;;;;;:::i;:::-;18510:56;;18686:3;18667:16;;18647:17;;18629:15;;18612:14;;:32;;;;:::i;:::-;:52;;;;:::i;:::-;:71;;;;:::i;:::-;18598:7;18606:1;18598:10;;;;;;;;:::i;:::-;;;;;;;:86;;;;:::i;:::-;18597:92;;;;:::i;:::-;18584:7;18592:1;18584:10;;;;;;;;:::i;:::-;;;;;;;:105;;;;:::i;:::-;18577:112;;;;18251:446;:::o;8158:150::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;8251:6:::1;::::0;8230:40:::1;::::0;8267:1:::1;::::0;-1:-1:-1;;;;;8251:6:0::1;::::0;8230:40:::1;::::0;8267:1;;8230:40:::1;8281:6;:19:::0;;-1:-1:-1;;;;;;8281:19:0::1;::::0;;8158:150::o;17095:302::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;17149:14:::1;:22:::0;;-1:-1:-1;;17149:22:0::1;::::0;;17182:14:::1;:22:::0;;-1:-1:-1;;17215:28:0;;;4486:12;;17254::::1;:28:::0;4486:12;;17293:13:::1;:29:::0;4486:12;;17333:9:::1;:25:::0;17374:15:::1;::::0;::::1;::::0;;;::::1;17095:302::o:0;16908:131::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;16990:3:::1;16983;:10;;16975:19;;;::::0;::::1;;17019:12;:3:::0;17025:6:::1;17019:12;:::i;:::-;17005:11;:26:::0;-1:-1:-1;16908:131:0:o;20537:260::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;20633:4:::1;20629:104;;20671:6;::::0;-1:-1:-1;;;;;20671:6:0;;::::1;20661:16:::0;;::::1;::::0;20653:68:::1;;;::::0;-1:-1:-1;;;20653:68:0;;15139:2:1;20653:68:0::1;::::0;::::1;15121:21:1::0;15178:2;15158:18;;;15151:30;15217:34;15197:18;;;15190:62;-1:-1:-1;;;15268:18:1;;;15261:37;15315:19;;20653:68:0::1;14937:403:1::0;20653:68:0::1;-1:-1:-1::0;;;;;20743:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;20743:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20537:260::o;35980:1425::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;36075:13:::1;::::0;::::1;::::0;::::1;;;36074:14;36066:70;;;;-1:-1:-1::0;;;36066:70:0::1;;;;;;;:::i;:::-;36174:2;36155:16;:21;36147:73;;;;-1:-1:-1::0;;;36147:73:0::1;;;;;;;:::i;:::-;36268:4;36248:13;4486:12:::0;;;4398:108;36248:13:::1;:17;::::0;36264:1:::1;36248:17;:::i;:::-;:24;;;;:::i;:::-;36233:12;:39:::0;36319:4:::1;36299:13;4486:12:::0;;;4398:108;36299:13:::1;:17;::::0;36315:1:::1;36299:17;:::i;:::-;:24;;;;:::i;:::-;36283:13;:40:::0;36371:13:::1;:20:::0;;-1:-1:-1;;36402:18:0;;;;;36452:12:::1;36431:18;:33:::0;;;36496:37:::1;::::0;36517:16;;36496:37:::1;:::i;:::-;36475:18;:58:::0;36549:16:::1;::::0;::::1;::::0;;;::::1;36623:9;;;;;;;;;-1:-1:-1::0;;;;;36623:9:0::1;-1:-1:-1::0;;;;;36623:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36611:43:0::1;;36663:4;36670:9;;;;;;;;;-1:-1:-1::0;;;;;36670:9:0::1;-1:-1:-1::0;;;;;36670:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36611:76;::::0;-1:-1:-1;;;;;;36611:76:0::1;::::0;;;;;;-1:-1:-1;;;;;16395:15:1;;;36611:76:0::1;::::0;::::1;16377:34:1::0;16447:15;;16427:18;;;16420:43;16312:18;;36611:76:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36602:6;:85:::0;;-1:-1:-1;;;;;;36602:85:0::1;-1:-1:-1::0;;;;;36602:85:0;;;::::1;::::0;;::::1;::::0;;36698:49:::1;::::0;-1:-1:-1;36698:26:0::1;:49::i;:::-;36795:6;::::0;36758:51:::1;::::0;-1:-1:-1;;;;;36795:6:0::1;::::0;36758:28:::1;:51::i;:::-;36889:1;36865:21;:25;36857:73;;;;-1:-1:-1::0;;;36857:73:0::1;;;;;;;:::i;:::-;36978:1;36951:24;36969:4;36951:9;:24::i;:::-;:28;36943:79;;;;-1:-1:-1::0;;;36943:79:0::1;;;;;;;:::i;:::-;37067:9;::::0;37035:69:::1;::::0;37052:4:::1;::::0;-1:-1:-1;;;;;37067:9:0::1;37079:24;37052:4:::0;37079:9:::1;:24::i;37035:69::-;37115:9;::::0;-1:-1:-1;;;;;37115:9:0::1;:25;37148:21;37193:4;37213:24;37193:4:::0;37213:9:::1;:24::i;:::-;37338:18;::::0;37115:282:::1;::::0;-1:-1:-1;;;;;;37115:282:0::1;::::0;;;;;;::::1;::::0;;;37252:1:::1;::::0;;;-1:-1:-1;;;;;37338:18:0::1;::::0;37371:15:::1;::::0;37115:282:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31952:498::-:0;8071:6;;32039:10;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32070:20:0;::::1;32062:59;;;::::0;-1:-1:-1;;;32062:59:0;;18410:2:1;32062:59:0::1;::::0;::::1;18392:21:1::0;18449:2;18429:18;;;18422:30;18488:28;18468:18;;;18461:56;18534:18;;32062:59:0::1;18208:350:1::0;32062:59:0::1;-1:-1:-1::0;;;;;32140:23:0;::::1;32158:4;32140:23;;::::0;:41:::1;;-1:-1:-1::0;32168:13:0::1;::::0;::::1;::::0;::::1;;;32167:14;32140:41;32132:106;;;::::0;-1:-1:-1;;;32132:106:0;;18765:2:1;32132:106:0::1;::::0;::::1;18747:21:1::0;18804:2;18784:18;;;18777:30;18843:34;18823:18;;;18816:62;-1:-1:-1;;;18894:18:1;;;18887:50;18954:19;;32132:106:0::1;18563:416:1::0;32132:106:0::1;32276:39;::::0;-1:-1:-1;;;32276:39:0;;32309:4:::1;32276:39;::::0;::::1;780:51:1::0;32249:24:0::1;::::0;-1:-1:-1;;;;;32276:24:0;::::1;::::0;::::1;::::0;753:18:1;;32276:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32334:46;::::0;-1:-1:-1;;;32334:46:0;;-1:-1:-1;;;;;19365:32:1;;;32334:46:0::1;::::0;::::1;19347:51:1::0;19414:18;;;19407:34;;;32249:66:0;;-1:-1:-1;32334:23:0;;::::1;::::0;::::1;::::0;19320:18:1;;32334:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32396;::::0;;-1:-1:-1;;;;;19365:32:1;;19347:51;;19429:2;19414:18;;19407:34;;;32326:54:0;;-1:-1:-1;32396:46:0::1;::::0;19320:18:1;32396:46:0::1;;;;;;;32051:399;31952:498:::0;;;;:::o;4185:104::-;4241:13;4274:7;4267:14;;;;;:::i;17405:103::-;17454:16;17489:11;17482:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17482:18:0;;;;;;;;;;;;;;;;;;;;;;17405:103;:::o;20805:293::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;20914:6:::1;::::0;-1:-1:-1;;;;;20914:6:0;;::::1;20906:14:::0;;::::1;::::0;20898:84:::1;;;::::0;-1:-1:-1;;;20898:84:0;;19904:2:1;20898:84:0::1;::::0;::::1;19886:21:1::0;19943:2;19923:18;;;19916:30;19982:34;19962:18;;;19955:62;20053:27;20033:18;;;20026:55;20098:19;;20898:84:0::1;19702:421:1::0;20898:84:0::1;20993:41;21022:4;21028:5;20993:28;:41::i;:::-;21050:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;21050:40:0;::::1;::::0;::::1;::::0;;;::::1;20805:293:::0;;:::o;5891:413::-;306:10;5984:4;6028:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6028:34:0;;;;;;;;;;6081:35;;;;6073:85;;;;-1:-1:-1;;;6073:85:0;;20330:2:1;6073:85:0;;;20312:21:1;20369:2;20349:18;;;20342:30;20408:34;20388:18;;;20381:62;-1:-1:-1;;;20459:18:1;;;20452:35;20504:19;;6073:85:0;20128:401:1;6073:85:0;6194:67;306:10;6217:7;6245:15;6226:16;:34;6194:8;:67::i;:::-;-1:-1:-1;6292:4:0;;5891:413;-1:-1:-1;;;5891:413:0:o;4649:175::-;4735:4;4752:42;306:10;4776:9;4787:6;4752:9;:42::i;22313:182::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22398:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;22398:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22453:34;;1438:41:1;;;22453:34:0::1;::::0;1411:18:1;22453:34:0::1;;;;;;;22313:182:::0;;:::o;19334:346::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;19457:6:::1;19437:13;4486:12:::0;;;4398:108;19437:13:::1;:17;::::0;19453:1:::1;19437:17;:::i;:::-;:26;;;;:::i;:::-;19424:9;:39;;19416:105;;;::::0;-1:-1:-1;;;19416:105:0;;20736:2:1;19416:105:0::1;::::0;::::1;20718:21:1::0;20775:2;20755:18;;;20748:30;20814:34;20794:18;;;20787:62;-1:-1:-1;;;20865:18:1;;;20858:51;20926:19;;19416:105:0::1;20534:417:1::0;19416:105:0::1;19572:4;19552:13;4486:12:::0;;;4398:108;19552:13:::1;:17;::::0;19568:1:::1;19552:17;:::i;:::-;:24;;;;:::i;:::-;19539:9;:37;;19531:102;;;::::0;-1:-1:-1;;;19531:102:0;;21158:2:1;19531:102:0::1;::::0;::::1;21140:21:1::0;21197:2;21177:18;;;21170:30;21236:34;21216:18;;;21209:62;-1:-1:-1;;;21287:18:1;;;21280:50;21347:19;;19531:102:0::1;20956:416:1::0;19531:102:0::1;19643:18;:30:::0;19334:346::o;18990:274::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;19110:4:::1;19104;19084:13;4486:12:::0;;;4398:108;19084:13:::1;:17;::::0;19100:1:::1;19084:17;:::i;:::-;:24;;;;:::i;:::-;19083:31;;;;:::i;:::-;19073:6;:41;;19065:96;;;::::0;-1:-1:-1;;;19065:96:0;;21579:2:1;19065:96:0::1;::::0;::::1;21561:21:1::0;21618:2;21598:18;;;21591:30;21657:34;21637:18;;;21630:62;-1:-1:-1;;;21708:18:1;;;21701:40;21758:19;;19065:96:0::1;21377:406:1::0;19065:96:0::1;19188:17;:6:::0;19198::::1;19188:17;:::i;:::-;19172:13;:33:::0;;;19221:35:::1;::::0;1888:25:1;;;19221:35:0::1;::::0;1876:2:1;1861:18;19221:35:0::1;1742:177:1::0;21826:479:0;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;21970:17:::1;:34:::0;;;22015:16:::1;:32:::0;;;22058:14:::1;:28:::0;;;22097:15:::1;:30:::0;;;22115:12;22075:11;22154:36:::1;22034:13:::0;21990:14;22154:36:::1;:::i;:::-;:53;;;;:::i;:::-;:71;;;;:::i;:::-;22138:13;:87:::0;;;22261:2:::1;-1:-1:-1::0;22244:19:0::1;22236:61;;;::::0;-1:-1:-1;;;22236:61:0;;21990:2:1;22236:61:0::1;::::0;::::1;21972:21:1::0;22029:2;22009:18;;;22002:30;22068:31;22048:18;;;22041:59;22117:18;;22236:61:0::1;21788:353:1::0;17891:98:0;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;17953:20:::1;:28:::0;;-1:-1:-1;;17953:28:0::1;::::0;;17891:98::o;33879:2093::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;34020:13:::1;::::0;::::1;::::0;::::1;;;34019:14;34011:70;;;;-1:-1:-1::0;;;34011:70:0::1;;;;;;;:::i;:::-;34119:2;34100:16;:21;34092:73;;;;-1:-1:-1::0;;;34092:73:0::1;;;;;;;:::i;:::-;34204:15;:22;34186:7;:14;:40;34178:83;;;::::0;-1:-1:-1;;;34178:83:0;;10641:2:1;34178:83:0::1;::::0;::::1;10623:21:1::0;10680:2;10660:18;;;10653:30;10719:32;10699:18;;;10692:60;10769:18;;34178:83:0::1;10439:354:1::0;34178:83:0::1;34297:3;34280:7;:14;:20;34272:87;;;;-1:-1:-1::0;;;34272:87:0::1;;;;;;;:::i;:::-;34472:9;34468:319;34491:7;:14;34487:1;:18;34468:319;;;34526:14;34543:7;34551:1;34543:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;34568:26:0;::::1;;::::0;;;:18:::1;:26:::0;;;;;;:33;;-1:-1:-1;;34568:33:0::1;34597:4;34568:33;::::0;;34616:25:::1;:33:::0;;;;;;34652:15:::1;34616:51:::0;;34699:18;;34543:10;;-1:-1:-1;34699:15:0;;34715:1;;34699:18;::::1;;;;;:::i;:::-;;;;;;;34682:35;;34732:43;34748:10;34760:6;34768;34732:15;:43::i;:::-;34511:276;;34507:3;;;;;:::i;:::-;;;;34468:319;;;;34834:4;34814:13;4486:12:::0;;;4398:108;34814:13:::1;:17;::::0;34830:1:::1;34814:17;:::i;:::-;:24;;;;:::i;:::-;34799:12;:39:::0;34885:4:::1;34865:13;4486:12:::0;;;4398:108;34865:13:::1;:17;::::0;34881:1:::1;34865:17;:::i;:::-;:24;;;;:::i;:::-;34849:13;:40:::0;34937:13:::1;:20:::0;;-1:-1:-1;;34968:18:0;;;;;35019:12:::1;34998:18;:33:::0;;;35063:37:::1;::::0;35084:16;;35063:37:::1;:::i;:::-;35042:18;:58:::0;35116:16:::1;::::0;::::1;::::0;;;::::1;35190:9;;;;;;;;;-1:-1:-1::0;;;;;35190:9:0::1;-1:-1:-1::0;;;;;35190:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35178:43:0::1;;35230:4;35237:9;;;;;;;;;-1:-1:-1::0;;;;;35237:9:0::1;-1:-1:-1::0;;;;;35237:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35178:76;::::0;-1:-1:-1;;;;;;35178:76:0::1;::::0;;;;;;-1:-1:-1;;;;;16395:15:1;;;35178:76:0::1;::::0;::::1;16377:34:1::0;16447:15;;16427:18;;;16420:43;16312:18;;35178:76:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35169:6;:85:::0;;-1:-1:-1;;;;;;35169:85:0::1;-1:-1:-1::0;;;;;35169:85:0;;;::::1;::::0;;::::1;::::0;;35265:49:::1;::::0;-1:-1:-1;35265:26:0::1;:49::i;:::-;35362:6;::::0;35325:51:::1;::::0;-1:-1:-1;;;;;35362:6:0::1;::::0;35325:28:::1;:51::i;:::-;35456:1;35432:21;:25;35424:73;;;;-1:-1:-1::0;;;35424:73:0::1;;;;;;;:::i;:::-;35545:1;35518:24;35536:4;35518:9;:24::i;:::-;:28;35510:79;;;;-1:-1:-1::0;;;35510:79:0::1;;;;;;;:::i;:::-;35634:9;::::0;35602:69:::1;::::0;35619:4:::1;::::0;-1:-1:-1;;;;;35634:9:0::1;35646:24;35619:4:::0;35646:9:::1;:24::i;35602:69::-;35682:9;::::0;-1:-1:-1;;;;;35682:9:0::1;:25;35715:21;35760:4;35780:24;35760:4:::0;35780:9:::1;:24::i;:::-;35905:18;::::0;35682:282:::1;::::0;-1:-1:-1;;;;;;35682:282:0::1;::::0;;;;;;::::1;::::0;;;35819:1:::1;::::0;;;-1:-1:-1;;;;;35905:18:0::1;::::0;35938:15:::1;::::0;35682:282:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;33879:2093:::0;;;:::o;10151:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10151:28:0;;-1:-1:-1;10151:28:0;:::o;8316:244::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8405:22:0;::::1;8397:73;;;::::0;-1:-1:-1;;;8397:73:0;;22348:2:1;8397:73:0::1;::::0;::::1;22330:21:1::0;22387:2;22367:18;;;22360:30;22426:34;22406:18;;;22399:62;-1:-1:-1;;;22477:18:1;;;22470:36;22523:19;;8397:73:0::1;22146:402:1::0;8397:73:0::1;8507:6;::::0;8486:38:::1;::::0;-1:-1:-1;;;;;8486:38:0;;::::1;::::0;8507:6:::1;::::0;8486:38:::1;::::0;8507:6:::1;::::0;8486:38:::1;8535:6;:17:::0;;-1:-1:-1;;;;;;8535:17:0::1;-1:-1:-1::0;;;;;8535:17:0;;;::::1;::::0;;;::::1;::::0;;8316:244::o;32520:160::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;32614:58:::1;::::0;32578:12:::1;::::0;32622:10:::1;::::0;32646:21:::1;::::0;32578:12;32614:58;32578:12;32614:58;32646:21;32622:10;32614:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7233:380:::0;-1:-1:-1;;;;;7369:19:0;;7361:68;;;;-1:-1:-1;;;7361:68:0;;22965:2:1;7361:68:0;;;22947:21:1;23004:2;22984:18;;;22977:30;23043:34;23023:18;;;23016:62;-1:-1:-1;;;23094:18:1;;;23087:34;23138:19;;7361:68:0;22763:400:1;7361:68:0;-1:-1:-1;;;;;7448:21:0;;7440:68;;;;-1:-1:-1;;;7440:68:0;;23370:2:1;7440:68:0;;;23352:21:1;23409:2;23389:18;;;23382:30;23448:34;23428:18;;;23421:62;-1:-1:-1;;;23499:18:1;;;23492:32;23541:19;;7440:68:0;23168:398:1;7440:68:0;-1:-1:-1;;;;;7521:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7573:32;;1888:25:1;;;7573:32:0;;1861:18:1;7573:32:0;;;;;;;7233:380;;;:::o;6312:614::-;-1:-1:-1;;;;;6452:20:0;;6444:70;;;;-1:-1:-1;;;6444:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6533:23:0;;6525:71;;;;-1:-1:-1;;;6525:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6633:17:0;;6609:21;6633:17;;;;;;;;;;;6669:23;;;;6661:74;;;;-1:-1:-1;;;6661:74:0;;24583:2:1;6661:74:0;;;24565:21:1;24622:2;24602:18;;;24595:30;24661:34;24641:18;;;24634:62;-1:-1:-1;;;24712:18:1;;;24705:36;24758:19;;6661:74:0;24381:402:1;6661:74:0;-1:-1:-1;;;;;6771:17:0;;;:9;:17;;;;;;;;;;;6791:22;;;6771:42;;6835:20;;;;;;;;:30;;6807:6;;6771:9;6835:30;;6807:6;;6835:30;:::i;:::-;;;;;;;;6900:9;-1:-1:-1;;;;;6883:35:0;6892:6;-1:-1:-1;;;;;6883:35:0;;6911:6;6883:35;;;;1888:25:1;;1876:2;1861:18;;1742:177;6883:35:0;;;;;;;;6433:493;6312:614;;;:::o;22503:6242::-;-1:-1:-1;;;;;22603:18:0;;22595:68;;;;-1:-1:-1;;;22595:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22682:16:0;;22674:64;;;;-1:-1:-1;;;22674:64:0;;;;;;;:::i;:::-;22766:1;22757:6;:10;22749:52;;;;-1:-1:-1;;;22749:52:0;;24990:2:1;22749:52:0;;;24972:21:1;25029:2;25009:18;;;25002:30;25068:31;25048:18;;;25041:59;25117:18;;22749:52:0;24788:353:1;22749:52:0;22826:13;;;;;;;22822:132;;-1:-1:-1;;;;;22863:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;22892:23:0;;;;;;:19;:23;;;;;;;;22863:52;22855:87;;;;-1:-1:-1;;;22855:87:0;;25348:2:1;22855:87:0;;;25330:21:1;25387:2;25367:18;;;25360:30;-1:-1:-1;;;25406:18:1;;;25399:52;25468:18;;22855:87:0;25146:346:1;22855:87:0;28847:18;;28832:12;:33;22969:26;:43;;;;-1:-1:-1;22999:13:0;;;;;;;22969:43;22966:217;;;-1:-1:-1;;;;;23037:17:0;;;;;;:11;:17;;;;;;;;23036:18;;:35;;-1:-1:-1;8009:6:0;;-1:-1:-1;;;;;23058:13:0;;;8009:6;;23058:13;23036:35;:60;;;-1:-1:-1;;;;;;23075:21:0;;23089:6;23075:21;23036:60;23028:143;;;;-1:-1:-1;;;23028:143:0;;25699:2:1;23028:143:0;;;25681:21:1;25738:2;25718:18;;;25711:30;25777:34;25757:18;;;25750:62;25848:34;25828:18;;;25821:62;-1:-1:-1;;;25899:19:1;;;25892:37;25946:19;;23028:143:0;25497:474:1;23028:143:0;-1:-1:-1;;;;;23198:24:0;;;;;;:18;:24;;;;;;;;23195:610;;;-1:-1:-1;;;;;23241:29:0;;;;;;:25;:29;;;;;;;;23238:556;;;-1:-1:-1;;;;;23348:31:0;;;;;;:25;:31;;;;;;23383:15;-1:-1:-1;23348:50:0;23340:78;;;;-1:-1:-1;;;23340:78:0;;26178:2:1;23340:78:0;;;26160:21:1;26217:2;26197:18;;;26190:30;-1:-1:-1;;;26236:18:1;;;26229:45;26291:18;;23340:78:0;25976:339:1;23340:78:0;23455:23;:21;:23::i;:::-;23445:6;:33;;23437:98;;;;-1:-1:-1;;;23437:98:0;;26522:2:1;23437:98:0;;;26504:21:1;26561:2;26541:18;;;26534:30;26600:34;26580:18;;;26573:62;-1:-1:-1;;;26651:18:1;;;26644:50;26711:19;;23437:98:0;26320:416:1;23437:98:0;23588:26;:15;23606:8;23588:26;:::i;:::-;-1:-1:-1;;;;;23554:31:0;;;;;;:25;:31;;;;;:60;23238:556;;;-1:-1:-1;;;;;23640:23:0;;;;;;:19;:23;;;;;;;;23636:158;;23683:95;;-1:-1:-1;;;23683:95:0;;26943:2:1;23683:95:0;;;26925:21:1;26982:2;26962:18;;;26955:30;27021:34;27001:18;;;26994:62;27092:34;27072:18;;;27065:62;-1:-1:-1;;;27143:19:1;;;27136:52;27205:19;;23683:95:0;26741:489:1;23636:158:0;23828:14;;;;23825:2005;;;8009:6;;-1:-1:-1;;;;;23862:15:0;;;8009:6;;23862:15;;;;:32;;-1:-1:-1;8009:6:0;;-1:-1:-1;;;;;23881:13:0;;;8009:6;;23881:13;;23862:32;:52;;;;-1:-1:-1;;;;;;23898:16:0;;;;23862:52;:77;;;;-1:-1:-1;;;;;;23918:21:0;;23932:6;23918:21;;23862:77;:107;;;;-1:-1:-1;;;;;;23944:25:0;;;;;;:19;:25;;;;;;;;23943:26;23862:107;:135;;;;-1:-1:-1;;;;;;23974:23:0;;;;;;:19;:23;;;;;;;;23973:24;23862:135;23858:1961;;;24137:4;24117:13;4486:12;;;4398:108;24117:13;:17;;24133:1;24117:17;:::i;:::-;:24;;;;:::i;:::-;24102:12;;:39;:82;;;;-1:-1:-1;24161:18:0;;:23;;24182:2;24161:23;:::i;:::-;24145:12;:39;;24102:82;24098:169;;;24243:4;24223:13;4486:12;;;4398:108;24223:13;:17;;24239:1;24223:17;:::i;:::-;:24;;;;:::i;:::-;24208:12;:39;24098:169;24362:14;;;;;;;:49;;;;-1:-1:-1;;;;;;24380:31:0;;;;;;:25;:31;;;;;;;;24362:49;24358:161;;;24459:11;;24444;:26;;24436:63;;;;-1:-1:-1;;;24436:63:0;;27437:2:1;24436:63:0;;;27419:21:1;27476:2;27456:18;;;27449:30;27515:26;27495:18;;;27488:54;27559:18;;24436:63:0;27235:348:1;24436:63:0;24677:20;;;;24673:482;;;24739:9;;-1:-1:-1;;;;;24725:24:0;;;24739:9;;24725:24;;;;:49;;-1:-1:-1;24767:6:0;;-1:-1:-1;;;;;24753:21:0;;;24767:6;;24753:21;;24725:49;24721:415;;;24835:9;24810:35;;;;:24;:35;;;;;;24848:12;-1:-1:-1;24810:97:0;;;;-1:-1:-1;;;;;;24864:28:0;;;;;;:24;:28;;;;;;24895:12;-1:-1:-1;24810:97:0;24802:163;;;;-1:-1:-1;;;24802:163:0;;27790:2:1;24802:163:0;;;27772:21:1;27829:2;27809:18;;;27802:30;27868:34;27848:18;;;27841:62;-1:-1:-1;;;27919:18:1;;;27912:51;27980:19;;24802:163:0;27588:417:1;24802:163:0;25017:9;24992:35;;;;:24;:35;;;;;;25030:12;24992:50;;;;-1:-1:-1;;;;;25069:28:0;;;;;;:43;24721:415;-1:-1:-1;;;;;25224:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;25260:35:0;;;;;;:31;:35;;;;;;;;25259:36;25224:71;25220:584;;;25342:12;;25332:6;:22;;25324:75;;;;-1:-1:-1;;;25324:75:0;;28212:2:1;25324:75:0;;;28194:21:1;28251:2;28231:18;;;28224:30;28290:34;28270:18;;;28263:62;-1:-1:-1;;;28341:18:1;;;28334:38;28389:19;;25324:75:0;28010:404:1;25324:75:0;25460:9;;25443:13;25453:2;25443:9;:13::i;:::-;25434:22;;:6;:22;:::i;:::-;:35;;25426:67;;;;-1:-1:-1;;;25426:67:0;;28621:2:1;25426:67:0;;;28603:21:1;28660:2;28640:18;;;28633:30;-1:-1:-1;;;28679:18:1;;;28672:49;28738:18;;25426:67:0;28419:343:1;25426:67:0;25220:584;;;-1:-1:-1;;;;;25606:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;25640:37:0;;;;;;:31;:37;;;;;;;;25639:38;25606:71;25602:202;;;25724:13;;25714:6;:23;;25706:78;;;;-1:-1:-1;;;25706:78:0;;28969:2:1;25706:78:0;;;28951:21:1;29008:2;28988:18;;;28981:30;29047:34;29027:18;;;29020:62;-1:-1:-1;;;29098:18:1;;;29091:40;29148:19;;25706:78:0;28767:406:1;25706:78:0;25842:28;25873:24;25891:4;25873:9;:24::i;:::-;25957:18;;25842:55;;-1:-1:-1;25933:42:0;;;;;;;25991:22;;-1:-1:-1;26002:11:0;;;;;;;25991:22;:35;;;;-1:-1:-1;26018:8:0;;-1:-1:-1;;;26018:8:0;;;;26017:9;25991:35;:71;;;;-1:-1:-1;;;;;;26031:31:0;;;;;;:25;:31;;;;;;;;26030:32;25991:71;:101;;;;-1:-1:-1;;;;;;26067:25:0;;;;;;:19;:25;;;;;;;;26066:26;25991:101;:129;;;;-1:-1:-1;;;;;;26097:23:0;;;;;;:19;:23;;;;;;;;26096:24;25991:129;25988:232;;;26137:8;:15;;-1:-1:-1;;;;26137:15:0;-1:-1:-1;;;26137:15:0;;;26167:10;:8;:10::i;:::-;26192:8;:16;;-1:-1:-1;;;;26192:16:0;;;25988:232;-1:-1:-1;;;;;26350:25:0;;26232:12;26350:25;;;:19;:25;;;;;;26247:4;;26350:25;;;:52;;-1:-1:-1;;;;;;26379:23:0;;;;;;:19;:23;;;;;;;;26350:52;26347:99;;;-1:-1:-1;26429:5:0;26347:99;26466:12;26570:7;26567:2125;;;28847:18;;28832:12;:33;26633:106;;;;26688:8;26673:12;;:23;;;;:::i;:::-;26663:6;:33;;:75;;;;;26726:12;26700:18;;26721:1;26700:22;;;;:::i;:::-;:38;;26663:75;26632:143;;;;-1:-1:-1;;;;;;26744:31:0;;;;;;:25;:31;;;;;;;;26632:143;:177;;;;-1:-1:-1;;;;;;26780:29:0;;;;;;:25;:29;;;;;;;;26779:30;26632:177;:197;;;;;26828:1;26813:12;;:16;26632:197;26629:1894;;;28847:18;;28832:12;:33;26867:90;;26936:1;26920:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;26867:90:0;-1:-1:-1;;;;;26981:15:0;;;;;;:11;:15;;;;;;;;26977:214;;-1:-1:-1;;;;;27020:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;27020:22:0;27038:4;27020:22;;;;;;27065:10;:15;;27038:4;;27065:10;;:15;;27038:4;;27065:15;:::i;:::-;;;;-1:-1:-1;;27103:11:0;:20;;;;;;;-1:-1:-1;27103:20:0;;;;;;;;-1:-1:-1;;;;;;27103:20:0;-1:-1:-1;;;;;27103:20:0;;;;;;;;27151;;780:51:1;;;27151:20:0;;768:2:1;753:18;27151:20:0;;;;;;;26977:214;27242:3;27227:12;;27218:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;27211:34;;27308:12;;27290:15;;27283:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;27261:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;27388:12:0;;27369:16;;27362:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;27339:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;27462:12:0;;27446:13;;27439:20;;:4;:20;:::i;:::-;:35;;;;:::i;:::-;27419:16;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;27538:12:0;;27521:14;;27514:21;;:4;:21;:::i;:::-;:36;;;;:::i;:::-;27493:17;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;26629:1894:0;;-1:-1:-1;26629:1894:0;;-1:-1:-1;;;;;27615:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;27664:1;27648:13;;:17;27615:50;27611:912;;;27717:3;27701:13;;27692:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;27685:35;;27787:13;;27768:16;;27761:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;27739:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;27869:13:0;;27849:17;;27842:24;;:4;:24;:::i;:::-;:40;;;;:::i;:::-;27819:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;27945:13:0;;27928:14;;27921:21;;:4;:21;:::i;:::-;:37;;;;:::i;:::-;27901:16;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;28023:13:0;;28005:15;;27998:22;;:4;:22;:::i;27611:912::-;-1:-1:-1;;;;;28099:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;28149:1;28134:12;;:16;28099:51;28096:427;;;28199:3;28184:12;;28175:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;28168:34;;28265:12;;28247:15;;28240:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;28218:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;28345:12:0;;28326:16;;28319:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;28296:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;28419:12:0;;28403:13;;28396:20;;:4;:20;:::i;:::-;:35;;;;:::i;:::-;28376:16;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;28495:12:0;;28478:14;;28471:21;;:4;:21;:::i;:::-;:36;;;;:::i;:::-;28450:17;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;28096:427:0;28554:8;;28551:93;;28586:42;28602:4;28616;28623;28586:15;:42::i;:::-;28666:14;28676:4;28666:14;;:::i;:::-;;;26567:2125;28704:33;28720:4;28726:2;28730:6;28704:15;:33::i;:::-;22582:6163;;;;22503:6242;;;:::o;30200:1744::-;30241:23;30267:24;30285:4;30267:9;:24::i;:::-;30241:50;;30302:25;30392:17;;30373:16;;30351:19;;30330:18;;:40;;;;:::i;:::-;:59;;;;:::i;:::-;:79;;;;:::i;:::-;30302:107;-1:-1:-1;30433:20:0;;;:46;;-1:-1:-1;30457:22:0;;30433:46;30430:60;;;30482:7;;30200:1744::o;30430:60::-;30523:18;;:23;;30544:2;30523:23;:::i;:::-;30505:15;:41;30502:113;;;30580:18;;:23;;30601:2;30580:23;:::i;:::-;30562:41;;30502:113;30627:12;30709:23;30794:1;30774:17;30753:18;;30735:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;30709:86;-1:-1:-1;30816:51:0;30833:33;30709:86;30833:15;:33;:::i;:::-;30816:16;:51::i;:::-;31075:18;;30910:21;;;;30889:18;;31075:20;;31094:1;;31075:20;:::i;:::-;31054:42;;:17;:42;:::i;:::-;31031:19;;31018:32;;:10;:32;:::i;:::-;:79;;;;:::i;:::-;30991:106;;31108:21;31205:1;31186:18;;:20;;;;:::i;:::-;31165:42;;:17;:42;:::i;:::-;31145:16;;31132:29;;:10;:29;:::i;:::-;:76;;;;:::i;:::-;31108:100;;31219:22;31318:1;31299:18;;:20;;;;:::i;:::-;31278:42;;:17;:42;:::i;:::-;31257:17;;31244:30;;:10;:30;:::i;:::-;:77;;;;:::i;:::-;31219:102;-1:-1:-1;31219:102:0;31353:32;31372:13;31353:16;:32;:::i;:::-;:49;;;;:::i;:::-;31334:68;;;;:::i;:::-;31448:1;31427:18;:22;;;31460:19;:23;;;31494:16;:20;;;31525:17;:21;31334:68;-1:-1:-1;31570:19:0;;;;;:42;;;31611:1;31593:15;:19;31570:42;31567:119;;;31628:46;31641:15;31658;31628:12;:46::i;:::-;31719:14;;31711:54;;-1:-1:-1;;;;;31719:14:0;;;;31747:13;;31711:54;;;;31747:13;31719:14;31711:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31797:15:0;;31789:56;;31698:67;;-1:-1:-1;;;;;;31797:15:0;;31826:14;;31789:56;;;;31826:14;31797:15;31789:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31879:17:0;;31871:65;;31776:69;;-1:-1:-1;;;;;;31879:17:0;;31910:21;;31871:65;;;;31910:21;31879:17;31871:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;30200:1744:0:o;19692:207::-;-1:-1:-1;;;;;19780:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;19780:52:0;;;;;;;;;;19848:43;;29476:51:1;;;29543:18;;;29536:50;19848:43:0;;29449:18:1;19848:43:0;;;;;;;19692:207;;:::o;21106:236::-;-1:-1:-1;;;;;21189:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;21189:39:0;;;;;;;21239;21189:31;:39;21239:26;:39::i;28881:573::-;29033:16;;;29047:1;29033:16;;;;;;;;29009:21;;29033:16;;;;;;;;;;-1:-1:-1;29033:16:0;29009:40;;29078:4;29060;29065:1;29060:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29060:23:0;;;:7;;;;;;;;;;:23;;;;29104:9;;:16;;;-1:-1:-1;;;29104:16:0;;;;:9;;;;;:14;;:16;;;;;29060:7;;29104:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29094:4;29099:1;29094:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29094:26:0;;;:7;;;;;;;;;:26;29165:9;;29133:56;;29150:4;;29165:9;29177:11;29133:8;:56::i;:::-;29228:9;;:218;;-1:-1:-1;;;29228:218:0;;-1:-1:-1;;;;;29228:9:0;;;;:60;;:218;;29303:11;;29228:9;;29373:4;;29400;;29420:15;;29228:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29683:509;29863:9;;29831:56;;29848:4;;-1:-1:-1;;;;;29863:9:0;29875:11;29831:8;:56::i;:::-;29930:9;;:254;;-1:-1:-1;;;29930:254:0;;-1:-1:-1;;;;;29930:9:0;;;;:25;;29963:9;;29930:254;;29996:4;;30016:11;;29930:9;;;;30136:6;;30158:15;;29930:254;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29683:509;;:::o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;842:131::-;-1:-1:-1;;;;;917:31:1;;907:42;;897:70;;963:1;960;953:12;897:70;842:131;:::o;978:315::-;1046:6;1054;1107:2;1095:9;1086:7;1082:23;1078:32;1075:52;;;1123:1;1120;1113:12;1075:52;1162:9;1149:23;1181:31;1206:5;1181:31;:::i;:::-;1231:5;1283:2;1268:18;;;;1255:32;;-1:-1:-1;;;978:315:1:o;1490:247::-;1549:6;1602:2;1590:9;1581:7;1577:23;1573:32;1570:52;;;1618:1;1615;1608:12;1570:52;1657:9;1644:23;1676:31;1701:5;1676:31;:::i;:::-;1726:5;1490:247;-1:-1:-1;;;1490:247:1:o;1924:180::-;1983:6;2036:2;2024:9;2015:7;2011:23;2007:32;2004:52;;;2052:1;2049;2042:12;2004:52;-1:-1:-1;2075:23:1;;1924:180;-1:-1:-1;1924:180:1:o;2109:127::-;2170:10;2165:3;2161:20;2158:1;2151:31;2201:4;2198:1;2191:15;2225:4;2222:1;2215:15;2241:275;2312:2;2306:9;2377:2;2358:13;;-1:-1:-1;;2354:27:1;2342:40;;2412:18;2397:34;;2433:22;;;2394:62;2391:88;;;2459:18;;:::i;:::-;2495:2;2488:22;2241:275;;-1:-1:-1;2241:275:1:o;2521:183::-;2581:4;2614:18;2606:6;2603:30;2600:56;;;2636:18;;:::i;:::-;-1:-1:-1;2681:1:1;2677:14;2693:4;2673:25;;2521:183::o;2709:737::-;2763:5;2816:3;2809:4;2801:6;2797:17;2793:27;2783:55;;2834:1;2831;2824:12;2783:55;2870:6;2857:20;2896:4;2920:60;2936:43;2976:2;2936:43;:::i;:::-;2920:60;:::i;:::-;3014:15;;;3100:1;3096:10;;;;3084:23;;3080:32;;;3045:12;;;;3124:15;;;3121:35;;;3152:1;3149;3142:12;3121:35;3188:2;3180:6;3176:15;3200:217;3216:6;3211:3;3208:15;3200:217;;;3296:3;3283:17;3313:31;3338:5;3313:31;:::i;:::-;3357:18;;3395:12;;;;3233;;3200:217;;;-1:-1:-1;3435:5:1;2709:737;-1:-1:-1;;;;;;2709:737:1:o;3451:662::-;3505:5;3558:3;3551:4;3543:6;3539:17;3535:27;3525:55;;3576:1;3573;3566:12;3525:55;3612:6;3599:20;3638:4;3662:60;3678:43;3718:2;3678:43;:::i;3662:60::-;3756:15;;;3842:1;3838:10;;;;3826:23;;3822:32;;;3787:12;;;;3866:15;;;3863:35;;;3894:1;3891;3884:12;3863:35;3930:2;3922:6;3918:15;3942:142;3958:6;3953:3;3950:15;3942:142;;;4024:17;;4012:30;;4062:12;;;;3975;;3942:142;;4118:595;4236:6;4244;4297:2;4285:9;4276:7;4272:23;4268:32;4265:52;;;4313:1;4310;4303:12;4265:52;4353:9;4340:23;4382:18;4423:2;4415:6;4412:14;4409:34;;;4439:1;4436;4429:12;4409:34;4462:61;4515:7;4506:6;4495:9;4491:22;4462:61;:::i;:::-;4452:71;;4576:2;4565:9;4561:18;4548:32;4532:48;;4605:2;4595:8;4592:16;4589:36;;;4621:1;4618;4611:12;4589:36;;4644:63;4699:7;4688:8;4677:9;4673:24;4644:63;:::i;:::-;4634:73;;;4118:595;;;;;:::o;4718:456::-;4795:6;4803;4811;4864:2;4852:9;4843:7;4839:23;4835:32;4832:52;;;4880:1;4877;4870:12;4832:52;4919:9;4906:23;4938:31;4963:5;4938:31;:::i;:::-;4988:5;-1:-1:-1;5045:2:1;5030:18;;5017:32;5058:33;5017:32;5058:33;:::i;:::-;4718:456;;5110:7;;-1:-1:-1;;;5164:2:1;5149:18;;;;5136:32;;4718:456::o;5179:385::-;5265:6;5273;5281;5289;5342:3;5330:9;5321:7;5317:23;5313:33;5310:53;;;5359:1;5356;5349:12;5310:53;-1:-1:-1;;5382:23:1;;;5452:2;5437:18;;5424:32;;-1:-1:-1;5503:2:1;5488:18;;5475:32;;5554:2;5539:18;5526:32;;-1:-1:-1;5179:385:1;-1:-1:-1;5179:385:1:o;5966:118::-;6052:5;6045:13;6038:21;6031:5;6028:32;6018:60;;6074:1;6071;6064:12;6089:382;6154:6;6162;6215:2;6203:9;6194:7;6190:23;6186:32;6183:52;;;6231:1;6228;6221:12;6183:52;6270:9;6257:23;6289:31;6314:5;6289:31;:::i;:::-;6339:5;-1:-1:-1;6396:2:1;6381:18;;6368:32;6409:30;6368:32;6409:30;:::i;:::-;6458:7;6448:17;;;6089:382;;;;;:::o;6476:388::-;6544:6;6552;6605:2;6593:9;6584:7;6580:23;6576:32;6573:52;;;6621:1;6618;6611:12;6573:52;6660:9;6647:23;6679:31;6704:5;6679:31;:::i;:::-;6729:5;-1:-1:-1;6786:2:1;6771:18;;6758:32;6799:33;6758:32;6799:33;:::i;6869:461::-;6922:3;6960:5;6954:12;6987:6;6982:3;6975:19;7013:4;7042:2;7037:3;7033:12;7026:19;;7079:2;7072:5;7068:14;7100:1;7110:195;7124:6;7121:1;7118:13;7110:195;;;7189:13;;-1:-1:-1;;;;;7185:39:1;7173:52;;7245:12;;;;7280:15;;;;7221:1;7139:9;7110:195;;;-1:-1:-1;7321:3:1;;6869:461;-1:-1:-1;;;;;6869:461:1:o;7335:261::-;7514:2;7503:9;7496:21;7477:4;7534:56;7586:2;7575:9;7571:18;7563:6;7534:56;:::i;7601:663::-;7728:6;7736;7744;7797:2;7785:9;7776:7;7772:23;7768:32;7765:52;;;7813:1;7810;7803:12;7765:52;7853:9;7840:23;7882:18;7923:2;7915:6;7912:14;7909:34;;;7939:1;7936;7929:12;7909:34;7962:61;8015:7;8006:6;7995:9;7991:22;7962:61;:::i;:::-;7952:71;;8076:2;8065:9;8061:18;8048:32;8032:48;;8105:2;8095:8;8092:16;8089:36;;;8121:1;8118;8111:12;8089:36;;8144:63;8199:7;8188:8;8177:9;8173:24;8144:63;:::i;:::-;8134:73;;;8254:2;8243:9;8239:18;8226:32;8216:42;;7601:663;;;;;:::o;8269:380::-;8348:1;8344:12;;;;8391;;;8412:61;;8466:4;8458:6;8454:17;8444:27;;8412:61;8519:2;8511:6;8508:14;8488:18;8485:38;8482:161;;8565:10;8560:3;8556:20;8553:1;8546:31;8600:4;8597:1;8590:15;8628:4;8625:1;8618:15;8482:161;;8269:380;;;:::o;8654:356::-;8856:2;8838:21;;;8875:18;;;8868:30;8934:34;8929:2;8914:18;;8907:62;9001:2;8986:18;;8654:356::o;9015:343::-;9217:2;9199:21;;;9256:2;9236:18;;;9229:30;-1:-1:-1;;;9290:2:1;9275:18;;9268:49;9349:2;9334:18;;9015:343::o;10134:127::-;10195:10;10190:3;10186:20;10183:1;10176:31;10226:4;10223:1;10216:15;10250:4;10247:1;10240:15;10266:168;10306:7;10372:1;10368;10364:6;10360:14;10357:1;10354:21;10349:1;10342:9;10335:17;10331:45;10328:71;;;10379:18;;:::i;:::-;-1:-1:-1;10419:9:1;;10266:168::o;10798:418::-;11000:2;10982:21;;;11039:2;11019:18;;;11012:30;11078:34;11073:2;11058:18;;11051:62;-1:-1:-1;;;11144:2:1;11129:18;;11122:52;11206:3;11191:19;;10798:418::o;11221:127::-;11282:10;11277:3;11273:20;11270:1;11263:31;11313:4;11310:1;11303:15;11337:4;11334:1;11327:15;11353:135;11392:3;11413:17;;;11410:43;;11433:18;;:::i;:::-;-1:-1:-1;11480:1:1;11469:13;;11353:135::o;11902:217::-;11942:1;11968;11958:132;;12012:10;12007:3;12003:20;12000:1;11993:31;12047:4;12044:1;12037:15;12075:4;12072:1;12065:15;11958:132;-1:-1:-1;12104:9:1;;11902:217::o;12534:128::-;12574:3;12605:1;12601:6;12598:1;12595:13;12592:39;;;12611:18;;:::i;:::-;-1:-1:-1;12647:9:1;;12534:128::o;13458:251::-;13528:6;13581:2;13569:9;13560:7;13556:23;13552:32;13549:52;;;13597:1;13594;13587:12;13549:52;13629:9;13623:16;13648:31;13673:5;13648:31;:::i;13714:332::-;13921:6;13910:9;13903:25;13964:2;13959;13948:9;13944:18;13937:30;13884:4;13984:56;14036:2;14025:9;14021:18;14013:6;13984:56;:::i;:::-;13976:64;13714:332;-1:-1:-1;;;;13714:332:1:o;14051:881::-;14146:6;14177:2;14220;14208:9;14199:7;14195:23;14191:32;14188:52;;;14236:1;14233;14226:12;14188:52;14269:9;14263:16;14302:18;14294:6;14291:30;14288:50;;;14334:1;14331;14324:12;14288:50;14357:22;;14410:4;14402:13;;14398:27;-1:-1:-1;14388:55:1;;14439:1;14436;14429:12;14388:55;14468:2;14462:9;14491:60;14507:43;14547:2;14507:43;:::i;14491:60::-;14585:15;;;14667:1;14663:10;;;;14655:19;;14651:28;;;14616:12;;;;14691:19;;;14688:39;;;14723:1;14720;14713:12;14688:39;14747:11;;;;14767:135;14783:6;14778:3;14775:15;14767:135;;;14849:10;;14837:23;;14800:12;;;;14880;;;;14767:135;;;14921:5;14051:881;-1:-1:-1;;;;;;;14051:881:1:o;15345:407::-;15547:2;15529:21;;;15586:2;15566:18;;;15559:30;15625:34;15620:2;15605:18;;15598:62;-1:-1:-1;;;15691:2:1;15676:18;;15669:41;15742:3;15727:19;;15345:407::o;15757:403::-;15959:2;15941:21;;;15998:2;15978:18;;;15971:30;16037:34;16032:2;16017:18;;16010:62;-1:-1:-1;;;16103:2:1;16088:18;;16081:37;16150:3;16135:19;;15757:403::o;16474:399::-;16676:2;16658:21;;;16715:2;16695:18;;;16688:30;16754:34;16749:2;16734:18;;16727:62;-1:-1:-1;;;16820:2:1;16805:18;;16798:33;16863:3;16848:19;;16474:399::o;16878:402::-;17080:2;17062:21;;;17119:2;17099:18;;;17092:30;17158:34;17153:2;17138:18;;17131:62;-1:-1:-1;;;17224:2:1;17209:18;;17202:36;17270:3;17255:19;;16878:402::o;17285:607::-;-1:-1:-1;;;;;17644:15:1;;;17626:34;;17691:2;17676:18;;17669:34;;;;17734:2;17719:18;;17712:34;;;;17777:2;17762:18;;17755:34;;;;17826:15;;;17820:3;17805:19;;17798:44;17606:3;17858:19;;17851:35;;;;17575:3;17560:19;;17285:607::o;17897:306::-;17985:6;17993;18001;18054:2;18042:9;18033:7;18029:23;18025:32;18022:52;;;18070:1;18067;18060:12;18022:52;18099:9;18093:16;18083:26;;18149:2;18138:9;18134:18;18128:25;18118:35;;18193:2;18182:9;18178:18;18172:25;18162:35;;17897:306;;;;;:::o;18984:184::-;19054:6;19107:2;19095:9;19086:7;19082:23;19078:32;19075:52;;;19123:1;19120;19113:12;19075:52;-1:-1:-1;19146:16:1;;18984:184;-1:-1:-1;18984:184:1:o;19452:245::-;19519:6;19572:2;19560:9;19551:7;19547:23;19543:32;19540:52;;;19588:1;19585;19578:12;19540:52;19620:9;19614:16;19639:28;19661:5;19639:28;:::i;23571:401::-;23773:2;23755:21;;;23812:2;23792:18;;;23785:30;23851:34;23846:2;23831:18;;23824:62;-1:-1:-1;;;23917:2:1;23902:18;;23895:35;23962:3;23947:19;;23571:401::o;23977:399::-;24179:2;24161:21;;;24218:2;24198:18;;;24191:30;24257:34;24252:2;24237:18;;24230:62;-1:-1:-1;;;24323:2:1;24308:18;;24301:33;24366:3;24351:19;;23977:399::o;29178:125::-;29218:4;29246:1;29243;29240:8;29237:34;;;29251:18;;:::i;:::-;-1:-1:-1;29288:9:1;;29178:125::o;29597:582::-;29896:6;29885:9;29878:25;29939:6;29934:2;29923:9;29919:18;29912:34;29982:3;29977:2;29966:9;29962:18;29955:31;29859:4;30003:57;30055:3;30044:9;30040:19;30032:6;30003:57;:::i;:::-;-1:-1:-1;;;;;30096:32:1;;;;30091:2;30076:18;;30069:60;-1:-1:-1;30160:3:1;30145:19;30138:35;29995:65;29597:582;-1:-1:-1;;;29597:582:1:o

Swarm Source

ipfs://ac4b62077e111faca36baf55ad9ca80569069013cb6b2d0160a31c99ce2fb989
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.