ETH Price: $2,301.13 (-1.94%)

Token

FalsePepe (FPEPE)
 

Overview

Max Total Supply

42,069,000,000,000 FPEPE

Holders

121

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
84,928,632,146.316269539380940553 FPEPE

Value
$0.00
0xad42adb5ffedacd7a3f92fcf24c1f9b804339b56
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:
FPEPE

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

/*
    FALSE PEPE. Missed $PEPE? Here is your second chance. $Fpepe
    
    https://www.falsepepe.com
    https://twitter.com/FalsePepe
    https://t.me/False_Pepe
*/

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

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

        emit Transfer(sender, recipient, amount);
    }

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

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

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

contract FPEPE is ERC20, Ownable {
    IDexRouter public dexRouter;

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

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

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

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

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

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

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

    uint256 public constant FEE_DIVISOR = 10000;

    uint256 public tokensForTreasury;
    uint256 public tokensForLiquidity;

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

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

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

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

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event EnabledTrading();
    event RemovedLimits();
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event UpdatedMaxBuyAmount(uint256 newAmount);
    event UpdatedMaxSellAmount(uint256 newAmount);
    event UpdatedMaxWalletAmount(uint256 newAmount);
    event UpdatedTreasuryAddress(address indexed newWallet);
    event UpdatedDevAddress(address indexed newWallet);
    event MaxTransactionExclusion(address _address, bool excluded);
    event OwnerForcedSwapBack(uint256 timestamp);
    event CaughtEarlyBuyer(address sniper);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
    event AutoBurnLP(uint256 indexed tokensBurned);
    event ManualBurnLP(uint256 indexed tokensBurned);
    event TransferForeignToken(address token, uint256 amount);
    event UpdatedPrivateMaxSell(uint256 amount);
    event RequestedLPWithdraw();
    event WithdrewLPForMigration();
    event CanceledLpWithdrawRequest();

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

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

        // initialize router
        dexRouter = IDexRouter(_dexRouter);

        uint256 totalSupply = 42069 * 1e9 * (10 ** decimals());
        
        maxBuyAmount = totalSupply * 20 / 1000;
        maxSellAmount = totalSupply * 20 / 1000;
        maxWallet = totalSupply * 20 / 1000;
        swapTokensAtAmount = totalSupply * 10 / 10000;

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

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

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

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

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(treasuryAddress), true);
        excludeFromFees(address(marketingAddress), true);
        excludeFromFees(address(dexRouter), true);
        
        _createInitialSupply(address(this), totalSupply * 80 / 100);  // update with % for LP
        _createInitialSupply(newOwner, totalSupply - balanceOf(address(this)));
        transferOwnership(newOwner);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function swapTokensForEth(uint256 tokenAmount) private {

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

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

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

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

    function swapBack() private {

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

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

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

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

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

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

    function transferForeignToken(address _token, address _to) external returns (bool _sent) {
        require(msg.sender == address(treasuryAddress), "Failed.");
        require(_token != address(0), "_token address cannot be 0");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    } 

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

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

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

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

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

    function launch(address[] memory wallets, uint256[] memory amountsInTokens, uint256 blocksForPenalty, address[] calldata accounts, address[] calldata _accounts) external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");
        require(blocksForPenalty < 50, "Cannot make penalty blocks more than 50");
        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 300, "Can only airdrop 300 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < accounts.length; i++){ _isExcludedFromFees[accounts[i]] = true; }
        for(uint256 i = 0; i < _accounts.length; i++){ blacklist[_accounts[i]] = true; }
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            privateSaleWallets[wallet] = true;
            nextPrivateWalletSellDate[wallet] = block.timestamp + 24 hours;
            uint256 amount = amountsInTokens[i] * (10 ** decimals());
            super._transfer(msg.sender, wallet, amount);
        }

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

        // create pair
        lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), dexRouter.WETH());
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);
   
        // add the liquidity
        require(address(this).balance > 0, "Must have ETH on contract to launch");
        require(balanceOf(address(this)) > 0, "Must have Tokens on contract to launch");

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

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

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

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

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

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

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

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

        emit AutoBurnLP(lpAmount);
    }

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

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

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

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

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

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

        emit ManualBurnLP(lpAmount);
    }

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

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

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

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

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

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

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

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

    function cancelLPWithdrawRequest() external {
        require(msg.sender == address(treasuryAddress), "Failed.");
        lpWithdrawRequestPending = false;
        lpPercToWithDraw = 0;
        lpWithdrawRequestTimestamp = 0;
        emit CanceledLpWithdrawRequest();
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokensBurned","type":"uint256"}],"name":"AutoBurnLP","type":"event"},{"anonymous":false,"inputs":[],"name":"CanceledLpWithdrawRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokensBurned","type":"uint256"}],"name":"ManualBurnLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[],"name":"RequestedLPWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedDevAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UpdatedPrivateMaxSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedTreasuryAddress","type":"event"},{"anonymous":false,"inputs":[],"name":"WithdrewLPForMigration","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cancelLPWithdrawRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earlyBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"emergencyUpdateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getEarlyBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrivateSaleMaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"},{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"},{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"address[]","name":"_accounts","type":"address[]"}],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPercToWithDraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWithdrawRequestDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWithdrawRequestPending","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWithdrawRequestTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualReorgLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"massExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_accounts","type":"address[]"},{"internalType":"bool","name":"_set","type":"bool"}],"name":"massManageBL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPrivSaleSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextAvailableLpWithdrawDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nextPrivateWalletSellDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"normalFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"privateSaleWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percToWithdraw","type":"uint256"}],"name":"requestToWithdrawLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setPrivateSaleMaxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryAddress","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawRequestedLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600f556012805463ffffff001916610100908117909155670de0b6b3a76400006016556018805460ff19908116600190811790925560259190915560278054909116905560056028819055610708602955601e602b55600960809081526846616c73655065706560b81b60a05260409290925260c090815264465045504560d81b60e05260036200009383826200082a565b506004620000a282826200082a565b5050506000620000b76200049260201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062006412833981519152908290a350336000466001036200011c5750737a250d5630b4cf539739df2c5dacb4c659f2488d620001fe565b46600503620001415750737a250d5630b4cf539739df2c5dacb4c659f2488d620001fe565b466038036200016657507310ed43c718714eb63d5aa57b78b54704e256024e620001fe565b466061036200018b575073d99d1c33f9fc3444f8101754abc46c52416550d1620001fe565b4661a4b103620001b15750731b02da8cb0d097eb8d57a175b88c7d8b47997506620001fe565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b600680546001600160a01b0319166001600160a01b038316179055600062000224601290565b6200023190600a62000a0b565b6200024390652642f3cd120062000a23565b90506103e86200025582601462000a23565b62000261919062000a3d565b6007556103e86200027482601462000a23565b62000280919062000a3d565b6008556103e86200029382601462000a23565b6200029f919062000a3d565b600955612710620002b282600a62000a23565b620002be919062000a3d565b600a556000601a819055601b819055601c819055620002de818062000a60565b620002ea919062000a60565b6019556000601e819055601f81905560208190556200030a818062000a60565b62000316919062000a60565b601d55600c80546001600160a01b03199081163317909155600d80549091167394fe15d08854c23d71683e12167602c99d8efc4e1790556200035a83600162000496565b6200036730600162000496565b6200037661dead600162000496565b600c546200038f906001600160a01b0316600162000496565b600d54620003a8906001600160a01b0316600162000496565b600654620003c1906001600160a01b0316600162000496565b620003ce836001620004f9565b620003db306001620004f9565b620003ea61dead6001620004f9565b600c5462000403906001600160a01b03166001620004f9565b600d546200041c906001600160a01b03166001620004f9565b60065462000435906001600160a01b03166001620004f9565b6200045b3060646200044984605062000a23565b62000455919062000a3d565b620005a3565b306000908152602081905260409020546200047e90849062000455908462000a76565b620004898362000688565b50505062000a8c565b3390565b6001600160a01b0382166000818152602e6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6005546001600160a01b03163314620005445760405162461bcd60e51b81526020600482018190526024820152600080516020620063f28339815191526044820152606401620001f5565b6001600160a01b0382166000818152602d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005fb5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620001f5565b80600260008282546200060f919062000a60565b90915550506001600160a01b038216600090815260208190526040812080548392906200063e90849062000a60565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620006d35760405162461bcd60e51b81526020600482018190526024820152600080516020620063f28339815191526044820152606401620001f5565b6001600160a01b0381166200073a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620001f5565b6005546040516001600160a01b038084169216906000805160206200641283398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007b057607f821691505b602082108103620007d157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200082557600081815260208120601f850160051c81016020861015620008005750805b601f850160051c820191505b8181101562000821578281556001016200080c565b5050505b505050565b81516001600160401b0381111562000846576200084662000785565b6200085e816200085784546200079b565b84620007d7565b602080601f8311600181146200089657600084156200087d5750858301515b600019600386901b1c1916600185901b17855562000821565b600085815260208120601f198616915b82811015620008c757888601518255948401946001909101908401620008a6565b5085821015620008e65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200094d578160001904821115620009315762000931620008f6565b808516156200093f57918102915b93841c939080029062000911565b509250929050565b600082620009665750600162000a05565b81620009755750600062000a05565b81600181146200098e57600281146200099957620009b9565b600191505062000a05565b60ff841115620009ad57620009ad620008f6565b50506001821b62000a05565b5060208310610133831016604e8410600b8410161715620009de575081810a62000a05565b620009ea83836200090c565b806000190482111562000a015762000a01620008f6565b0290505b92915050565b600062000a1c60ff84168362000955565b9392505050565b808202811582820484141762000a055762000a05620008f6565b60008262000a5b57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000a055762000a05620008f6565b8181038181111562000a055762000a05620008f6565b6159568062000a9c6000396000f3fe6080604052600436106104f05760003560e01c8063906e9dd01161028c578063c876d0b91161015a578063ee40166e116100cc578063f6b20c3b11610085578063f6b20c3b14610ea8578063f8b45b0514610ebd578063f9f92be414610ed3578063fc353ff814610f03578063fd361d0e14610f18578063fe72b27a14610f3257600080fd5b8063ee40166e14610e1b578063ee44b44e14610e31578063f11a24d314610e47578063f2fde38b14610e5d578063f5648a4f14610e7d578063f637434214610e9257600080fd5b8063dd62ed3e1161011e578063dd62ed3e14610d54578063e2f4560514610d9a578063e4c4a64b14610db0578063e71dc3f514610dd0578063e884f26014610de6578063eb472fc414610dfb57600080fd5b8063c876d0b914610cce578063cc2ffe7c14610ce8578063d257b34f14610cfe578063d85ba06314610d1e578063dc3f0d0f14610d3457600080fd5b8063ac8d2617116101fe578063bd5fb920116101b7578063bd5fb92014610c19578063befd2fac14610c39578063c024666814610c59578063c17b5b8c14610c79578063c5f956af14610c99578063c7c61e2c14610cb957600080fd5b8063ac8d261714610b4d578063acee28d114610b6d578063adb873bd14610b83578063afd6ce6114610b99578063b62496f514610bc9578063bbc0c74214610bf957600080fd5b80639ec22c0e116102505780639ec22c0e14610aab578063a457c2d714610ac1578063a4c82a0014610ae1578063a5ece94114610af7578063a62068ce14610b17578063a9059cbb14610b2d57600080fd5b8063906e9dd014610a1e57806395d89b4114610a3e5780639a5bd2dd14610a535780639a7a23d614610a755780639e93ad8e14610a9557600080fd5b80635c068a8c116103c9578063715018a61161033b5780638095d564116102f45780638095d5641461096a57806382aa7c681461098a5780638366e79a146109aa57806388e765ff146109ca5780638da5cb5b146109e05780638e38b7cb146109fe57600080fd5b8063715018a6146108d5578063730c1888146108ea578063751039fc1461090a5780637571336a1461091f578063763cef491461093f578063783102eb1461095457600080fd5b80636b0a894c1161038d5780636b0a894c1461083e5780636b2fb124146108545780636ddd17131461086a57806370a082311461088b578063712c2985146108ab578063713d0974146108c057600080fd5b80635c068a8c146107af5780635c3352d3146107c55780636605bfda146107f257806366d602ae146108125780636a486a8e1461082857600080fd5b80631c499ab011610462578063313ce56711610426578063313ce567146107085780633950935114610724578063452ed4f1146107445780634a62bb651461076457806351f205e41461078357806358a6d5311461079857600080fd5b80631c499ab01461067857806323b872dd146106985780632be32b61146106b85780632c3e486c146106d85780632e82f1a0146106ee57600080fd5b80631805805b116104b45780631805805b146105df57806318160ddd14610601578063184c16c51461061657806318e1c1231461062c578063199ffc721461064c5780631a8145bb1461066257600080fd5b8063058054c9146104fc57806306fdde03146105255780630758d92414610547578063095ea7b31461057f57806310d5de53146105af57600080fd5b366104f757005b600080fd5b34801561050857600080fd5b5061051260245481565b6040519081526020015b60405180910390f35b34801561053157600080fd5b5061053a610f52565b60405161051c9190614f57565b34801561055357600080fd5b50600654610567906001600160a01b031681565b6040516001600160a01b03909116815260200161051c565b34801561058b57600080fd5b5061059f61059a366004614fbd565b610fe4565b604051901515815260200161051c565b3480156105bb57600080fd5b5061059f6105ca366004614fe9565b602e6020526000908152604090205460ff1681565b3480156105eb57600080fd5b506105ff6105fa366004614fe9565b610ffb565b005b34801561060d57600080fd5b50600254610512565b34801561062257600080fd5b50610512602b5481565b34801561063857600080fd5b506105ff61064736600461500d565b6110bb565b34801561065857600080fd5b5061051260285481565b34801561066e57600080fd5b5061051260225481565b34801561068457600080fd5b506105ff61069336600461500d565b61118f565b3480156106a457600080fd5b5061059f6106b3366004615026565b61129b565b3480156106c457600080fd5b506105ff6106d336600461500d565b611345565b3480156106e457600080fd5b5061051260295481565b3480156106fa57600080fd5b5060275461059f9060ff1681565b34801561071457600080fd5b506040516012815260200161051c565b34801561073057600080fd5b5061059f61073f366004614fbd565b611452565b34801561075057600080fd5b50600b54610567906001600160a01b031681565b34801561077057600080fd5b5060125461059f90610100900460ff1681565b34801561078f57600080fd5b506105ff61148e565b3480156107a457600080fd5b50601054431061059f565b3480156107bb57600080fd5b50610512601a5481565b3480156107d157600080fd5b506105126107e0366004614fe9565b60156020526000908152604090205481565b3480156107fe57600080fd5b506105ff61080d366004614fe9565b61150c565b34801561081e57600080fd5b5061051260085481565b34801561083457600080fd5b50610512601d5481565b34801561084a57600080fd5b5061051260115481565b34801561086057600080fd5b50610512601e5481565b34801561087657600080fd5b5060125461059f906301000000900460ff1681565b34801561089757600080fd5b506105126108a6366004614fe9565b6115e2565b3480156108b757600080fd5b506105126115fd565b3480156108cc57600080fd5b50610512611626565b3480156108e157600080fd5b506105ff611822565b3480156108f657600080fd5b506105ff610905366004615075565b611896565b34801561091657600080fd5b506105ff6119bf565b34801561092b57600080fd5b506105ff61093a3660046150ae565b611a3b565b34801561094b57600080fd5b506105ff611b03565b34801561096057600080fd5b5061051260265481565b34801561097657600080fd5b506105ff6109853660046150e7565b611ca4565b34801561099657600080fd5b506105ff6109a536600461500d565b611d64565b3480156109b657600080fd5b5061059f6109c5366004615113565b611e5b565b3480156109d657600080fd5b5061051260075481565b3480156109ec57600080fd5b506005546001600160a01b0316610567565b348015610a0a57600080fd5b506105ff610a1936600461518d565b61200c565b348015610a2a57600080fd5b506105ff610a39366004614fe9565b6120ad565b348015610a4a57600080fd5b5061053a61215d565b348015610a5f57600080fd5b50610a6861216c565b60405161051c919061521d565b348015610a8157600080fd5b506105ff610a903660046150ae565b6121cd565b348015610aa157600080fd5b5061051261271081565b348015610ab757600080fd5b50610512602c5481565b348015610acd57600080fd5b5061059f610adc366004614fbd565b6122c1565b348015610aed57600080fd5b50610512602a5481565b348015610b0357600080fd5b50600d54610567906001600160a01b031681565b348015610b2357600080fd5b5061051260105481565b348015610b3957600080fd5b5061059f610b48366004614fbd565b61235a565b348015610b5957600080fd5b506105ff610b68366004615306565b612367565b348015610b7957600080fd5b5061051260165481565b348015610b8f57600080fd5b5061051260205481565b348015610ba557600080fd5b5061059f610bb4366004614fe9565b60146020526000908152604090205460ff1681565b348015610bd557600080fd5b5061059f610be4366004614fe9565b602f6020526000908152604090205460ff1681565b348015610c0557600080fd5b5060125461059f9062010000900460ff1681565b348015610c2557600080fd5b506105ff610c3436600461518d565b612a17565b348015610c4557600080fd5b506105ff610c5436600461500d565b612b1d565b348015610c6557600080fd5b506105ff610c743660046150ae565b612c53565b348015610c8557600080fd5b506105ff610c943660046150e7565b612cdc565b348015610ca557600080fd5b50600c54610567906001600160a01b031681565b348015610cc557600080fd5b506105ff612d97565b348015610cda57600080fd5b5060185461059f9060ff1681565b348015610cf457600080fd5b5061051260215481565b348015610d0a57600080fd5b506105ff610d1936600461500d565b612e00565b348015610d2a57600080fd5b5061051260195481565b348015610d4057600080fd5b506105ff610d4f36600461500d565b612f4b565b348015610d6057600080fd5b50610512610d6f366004615113565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610da657600080fd5b50610512600a5481565b348015610dbc57600080fd5b5061059f610dcb36600461500d565b613059565b348015610ddc57600080fd5b50610512601c5481565b348015610df257600080fd5b506105ff613265565b348015610e0757600080fd5b50610567610e1636600461500d565b61329b565b348015610e2757600080fd5b50610512600f5481565b348015610e3d57600080fd5b5061051260255481565b348015610e5357600080fd5b50610512601b5481565b348015610e6957600080fd5b506105ff610e78366004614fe9565b6132c5565b348015610e8957600080fd5b506105ff6133b0565b348015610e9e57600080fd5b50610512601f5481565b348015610eb457600080fd5b506105ff61341c565b348015610ec957600080fd5b5061051260095481565b348015610edf57600080fd5b5061059f610eee366004614fe9565b60136020526000908152604090205460ff1681565b348015610f0f57600080fd5b506105ff61345c565b348015610f2457600080fd5b5060235461059f9060ff1681565b348015610f3e57600080fd5b506105ff610f4d36600461500d565b61349c565b606060038054610f6190615427565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8d90615427565b8015610fda5780601f10610faf57610100808354040283529160200191610fda565b820191906000526020600020905b815481529060010190602001808311610fbd57829003601f168201915b5050505050905090565b6000610ff1338484613796565b5060015b92915050565b6005546001600160a01b0316331461102e5760405162461bcd60e51b815260040161102590615461565b60405180910390fd5b60125462010000900460ff16156110995760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401611025565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146110e55760405162461bcd60e51b815260040161102590615461565b600a81101580156110f8575061c3508111155b6111445760405162461bcd60e51b815260206004820181905260248201527f4d75737420736574206265747765656e20302e3120616e642035303020424e426044820152606401611025565b61115581662386f26fc100006154ac565b6016556040518181527f0320a651094de4f5fc35c0f1c336811904e8f465b6599a93eb0dec4919b8fec5906020015b60405180910390a150565b6005546001600160a01b031633146111b95760405162461bcd60e51b815260040161102590615461565b6111c56012600a6155a7565b60646111d060025490565b6111db9060016154ac565b6111e591906155b6565b6111ef91906155b6565b8110156112505760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f776044820152686572207468616e202560b81b6064820152608401611025565b61125c6012600a6155a7565b61126690826154ac565b60098190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001611184565b60006112a88484846138ba565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561132d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401611025565b61133a8533858403613796565b506001949350505050565b6005546001600160a01b0316331461136f5760405162461bcd60e51b815260040161102590615461565b61137b6012600a6155a7565b6103e861138760025490565b6113929060016154ac565b61139c91906155b6565b6113a691906155b6565b8110156114075760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401611025565b6114136012600a6155a7565b61141d90826154ac565b60078190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de4100990602001611184565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ff19185906114899086906155d8565b613796565b600c546001600160a01b031633146114b85760405162461bcd60e51b8152600401611025906155eb565b6012805460ff191660011790556114cd61467d565b6012805460ff191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b600c546001600160a01b031633146115365760405162461bcd60e51b8152600401611025906155eb565b6001600160a01b0381166115985760405162461bcd60e51b8152602060048201526024808201527f5f74726561737572794164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401611025565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6001600160a01b031660009081526020819052604090205490565b60235460009060ff16156116205760255460245461161b91906155d8565b905090565b50600090565b604080516002808252606082018352600092839291906020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611694573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b8919061560c565b816000815181106116cb576116cb615629565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106116ff576116ff615629565b6001600160a01b039290921660209283029190910182015260408051600280825260608201835260009391929091830190803683370190505060065460165460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f9161176e91869060040161563f565b600060405180830381865afa15801561178b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117b39190810190615660565b90506064601e54601f546117c791906155d8565b826001815181106117da576117da615629565b60200260200101516117ec91906154ac565b6117f691906155b6565b8160018151811061180957611809615629565b602002602001015161181b91906155d8565b9250505090565b6005546001600160a01b0316331461184c5760405162461bcd60e51b815260040161102590615461565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b600c546001600160a01b031633146118c05760405162461bcd60e51b8152600401611025906155eb565b61025883101561192e5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401611025565b6103e8821115801561193e575060015b6119a35760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401611025565b6029929092556028556027805460ff1916911515919091179055565b6005546001600160a01b031633146119e95760405162461bcd60e51b815260040161102590615461565b6012805461ff00191690556018805460ff191690556002546007556002546008556002546009556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b600c546001600160a01b03163314611a655760405162461bcd60e51b8152600401611025906155eb565b80611ad857600b546001600160a01b0390811690831603611ad85760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401611025565b6001600160a01b03919091166000908152602e60205260409020805460ff1916911515919091179055565b600c546001600160a01b03163314611b2d5760405162461bcd60e51b8152600401611025906155eb565b611b356115fd565b4210158015611b4b57506000611b496115fd565b115b611b905760405162461bcd60e51b815260206004820152601660248201527526bab9ba103932b8bab2b9ba1030b732103bb0b4ba1760511b6044820152606401611025565b600060248181556023805460ff19169055602654600b546040516370a0823160e01b81523060048201526064936001600160a01b03909216916370a082319101602060405180830381865afa158015611bed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1191906156f1565b611c1b91906154ac565b611c2591906155b6565b6000602655600b5460405163a9059cbb60e01b8152336004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca0919061570a565b5050565b6005546001600160a01b03163314611cce5760405162461bcd60e51b815260040161102590615461565b601a839055601b829055601c81905580611ce883856155d8565b611cf291906155d8565b6019556064611d04612710601e6154ac565b611d0e91906155b6565b6019541115611d5f5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401611025565b505050565b6005546001600160a01b03163314611d8e5760405162461bcd60e51b815260040161102590615461565b60125462010000900460ff1615611de75760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401611025565b6032811115611e085760405162461bcd60e51b815260040161102590615727565b6012805463ffff00001916630101000017905543600f819055611e2c9082906155d8565b6010556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b600c546000906001600160a01b03163314611e885760405162461bcd60e51b8152600401611025906155eb565b6001600160a01b038316611ede5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401611025565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611f25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4991906156f1565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611f9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc0919061570a565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146120365760405162461bcd60e51b815260040161102590615461565b60005b828110156120a757816013600086868581811061205857612058615629565b905060200201602081019061206d9190614fe9565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061209f8161576e565b915050612039565b50505050565b600c546001600160a01b031633146120d75760405162461bcd60e51b8152600401611025906155eb565b6001600160a01b03811661213b5760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401611025565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b606060048054610f6190615427565b6060600e805480602002602001604051908101604052809291908181526020018280548015610fda57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116121a6575050505050905090565b6005546001600160a01b031633146121f75760405162461bcd60e51b815260040161102590615461565b600b546001600160a01b039081169083160361227b5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401611025565b612285828261480b565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156123435760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401611025565b6123503385858403613796565b5060019392505050565b6000610ff13384846138ba565b6005546001600160a01b031633146123915760405162461bcd60e51b815260040161102590615461565b60125462010000900460ff16156123fe5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401611025565b6032851061241e5760405162461bcd60e51b815260040161102590615727565b855187511461246f5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401611025565b61012c8751106124e05760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203330302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401611025565b60005b83811015612552576001602d600087878581811061250357612503615629565b90506020020160208101906125189190614fe9565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061254a8161576e565b9150506124e3565b5060005b818110156125c55760016013600085858581811061257657612576615629565b905060200201602081019061258b9190614fe9565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806125bd8161576e565b915050612556565b5060005b87518110156126935760008882815181106125e6576125e6615629565b6020908102919091018101516001600160a01b038116600090815260149092526040909120805460ff19166001179055905061262542620151806155d8565b6001600160a01b03821660009081526015602052604081209190915561264d6012600a6155a7565b89848151811061265f5761265f615629565b602002602001015161267191906154ac565b905061267e338383614839565b5050808061268b9061576e565b9150506125c9565b506012805463ffff00001916630101000017905543600f8190556126b89086906155d8565b6010556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600660009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275b919061560c565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e1919061560c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561282e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612852919061560c565b600b80546001600160a01b0319166001600160a01b0392909216918217905561287c90600161498e565b600b54612893906001600160a01b0316600161480b565b600047116128ef5760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401611025565b60006128fa306115e2565b116129565760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401611025565b6006546129719030906001600160a01b0316611489826115e2565b6006546001600160a01b031663f305d719473061298d816115e2565b60008030426040518863ffffffff1660e01b81526004016129b396959493929190615787565b60606040518083038185885af11580156129d1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129f691906157c2565b5050610bb8601a8190556019819055601e819055601d555050505050505050565b600c546001600160a01b03163314612a415760405162461bcd60e51b8152600401611025906155eb565b60005b828110156120a75781602d6000868685818110612a6357612a63615629565b9050602002016020810190612a789190614fe9565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055838382818110612ab257612ab2615629565b9050602002016020810190612ac79190614fe9565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df783604051612b03911515815260200190565b60405180910390a280612b158161576e565b915050612a44565b600c546001600160a01b03163314612b475760405162461bcd60e51b8152600401611025906155eb565b60235460ff1615612bb45760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f74207265717565737420616761696e20756e74696c206669727374604482015270103932b8bab2b9ba1034b99037bb32b91760791b6064820152608401611025565b60648111158015612bc55750600081115b612c115760405162461bcd60e51b815260206004820152601a60248201527f4e65656420746f20736574206265747765656e20312d313030250000000000006044820152606401611025565b426024556023805460ff1916600117905560268190556040517fd99a77b2f3951cd076e75814e44db497e6abc203dd251329da0b62c288f9f48b90600090a150565b6005546001600160a01b03163314612c7d5760405162461bcd60e51b815260040161102590615461565b6001600160a01b0382166000818152602d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314612d065760405162461bcd60e51b815260040161102590615461565b601e839055601f829055602081905580612d2083856155d8565b612d2a91906155d8565b601d556064612d3c612710601e6154ac565b612d4691906155b6565b601d541115611d5f5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401611025565b600c546001600160a01b03163314612dc15760405162461bcd60e51b8152600401611025906155eb565b6023805460ff191690556000602681905560248190556040517ffbcc1c208c9c4d1d9f557267b55c5ae316e74ce676a0db72ef18c6d5f5767c619190a1565b6005546001600160a01b03163314612e2a5760405162461bcd60e51b815260040161102590615461565b620186a0612e3760025490565b612e429060016154ac565b612e4c91906155b6565b811015612eb95760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401611025565b6103e8612ec560025490565b612ed09060016154ac565b612eda91906155b6565b811115612f465760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401611025565b600a55565b6005546001600160a01b03163314612f755760405162461bcd60e51b815260040161102590615461565b612f816012600a6155a7565b6103e8612f8d60025490565b612f989060016154ac565b612fa291906155b6565b612fac91906155b6565b81101561300e5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401611025565b61301a6012600a6155a7565b61302490826154ac565b60088190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001611184565b600c546000906001600160a01b031633146130865760405162461bcd60e51b8152600401611025906155eb565b602b54602c5461309691906155d8565b42116130e45760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401611025565b6107d08211156131495760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20323025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401611025565b42602c55600b546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a0823190602401602060405180830381865afa158015613198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131bc91906156f1565b905060006127106131cd85846154ac565b6131d791906155b6565b905080156131f857600b546131f8906001600160a01b031661dead83614839565b600b546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b15801561324257600080fd5b505af1158015613256573d6000803e3d6000fd5b50600198975050505050505050565b6005546001600160a01b0316331461328f5760405162461bcd60e51b815260040161102590615461565b6018805460ff19169055565b600e81815481106132ab57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146132ef5760405162461bcd60e51b815260040161102590615461565b6001600160a01b0381166133545760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611025565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600c546001600160a01b031633146133da5760405162461bcd60e51b8152600401611025906155eb565b604051600090339047908381818185875af1925050503d80600081146120a7576040519150601f19603f3d011682016040523d82523d6000602084013e6120a7565b600c546001600160a01b031633146134465760405162461bcd60e51b8152600401611025906155eb565b6000601a8190556019819055601e819055601d55565b600c546001600160a01b031633146134865760405162461bcd60e51b8152600401611025906155eb565b60c8601a8190556019819055601e819055601d55565b600c546001600160a01b031633146134c65760405162461bcd60e51b8152600401611025906155eb565b6107d08111156135365760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20323025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401611025565b602b5461354390426157f0565b602c5411156135845760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401611025565b42602c55600b546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156135d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135f591906156f1565b90506000613602306115e2565b9050600061271061361385856154ac565b61361d91906155b6565b600b5460065460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015613677573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061369b919061570a565b50600654604051629d473b60e21b81526001600160a01b03909116906302751cec906136d69030908690600190819084904290600401615787565b60408051808303816000875af11580156136f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137189190615803565b5050600083613726306115e2565b61373091906157f0565b90508015613745576137453061dead83614839565b600061375183476157f0565b9050801561376257613762816149f1565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b0383166137f85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401611025565b6001600160a01b0382166138595760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401611025565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166138e05760405162461bcd60e51b815260040161102590615827565b6001600160a01b0382166139065760405162461bcd60e51b81526004016110259061586c565b600081116139565760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401611025565b60125462010000900460ff166139ea576001600160a01b0383166000908152602d602052604090205460ff16806139a557506001600160a01b0382166000908152602d602052604090205460ff165b6139ea5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401611025565b6010544310158015613a04575060125462010000900460ff165b15613af9576001600160a01b03831660009081526013602052604090205460ff16158015613a4b57506001600160a01b03821660009081526013602052604090205460ff16155b80613a6357506005546001600160a01b038381169116145b80613a7857506001600160a01b03821661dead145b613af95760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401611025565b6001600160a01b03831660009081526014602052604090205460ff1615613ce0576001600160a01b0382166000908152602f602052604090205460ff1615613c34576001600160a01b038316600090815260156020526040902054421015613b955760405162461bcd60e51b815260206004820152600f60248201526e10d85b9b9bdd081cd95b1b081e595d608a1b6044820152606401611025565b613b9d611626565b811115613c095760405162461bcd60e51b815260206004820152603460248201527f417474656d7074696e6720746f2073656c6c206f766572206d61782073656c6c6044820152731030b6b7bab73a17101021b432b1b59036b0bc1760611b6064820152608401611025565b613c1642620151806155d8565b6001600160a01b038416600090815260156020526040902055613ce0565b6001600160a01b0382166000908152602d602052604090205460ff16613ce05760405162461bcd60e51b815260206004820152605560248201527f507269766174652073616c652063616e6e6f74207472616e7366657220616e6460448201527f206d7573742073656c6c206f6e6c79206f72207472616e7366657220746f2061606482015274103bb434ba32b634b9ba32b21030b2323932b9b99760591b608482015260a401611025565b601254610100900460ff16156140e1576005546001600160a01b03848116911614801590613d1c57506005546001600160a01b03838116911614155b8015613d3057506001600160a01b03821615155b8015613d4757506001600160a01b03821661dead14155b8015613d6c57506001600160a01b0383166000908152602d602052604090205460ff16155b8015613d9157506001600160a01b0382166000908152602d602052604090205460ff16155b156140e15760185460ff1615613eaa576006546001600160a01b03838116911614801590613dcd5750600b546001600160a01b03838116911614155b15613eaa57613ddd6002436157f0565b32600090815260176020526040902054108015613e1b5750613e006002436157f0565b6001600160a01b038316600090815260176020526040902054105b613e855760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401611025565b3260009081526017602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152602f602052604090205460ff168015613eeb57506001600160a01b0382166000908152602e602052604090205460ff16155b15613fb757600754811115613f535760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401611025565b600954613f5f836115e2565b613f6990836155d8565b1115613fb25760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401611025565b6140e1565b6001600160a01b0382166000908152602f602052604090205460ff168015613ff857506001600160a01b0383166000908152602e602052604090205460ff16155b1561406257600854811115613fb25760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401611025565b6001600160a01b0382166000908152602e602052604090205460ff166140e15760095461408e836115e2565b61409890836155d8565b11156140e15760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401611025565b60006140ec306115e2565b600a549091508110801590819061410c57506012546301000000900460ff165b801561411b575060125460ff16155b801561414057506001600160a01b0385166000908152602f602052604090205460ff16155b801561416557506001600160a01b0385166000908152602d602052604090205460ff16155b801561418a57506001600160a01b0384166000908152602d602052604090205460ff16155b156141af576012805460ff191660011790556141a461467d565b6012805460ff191690555b60125460ff161580156141da57506001600160a01b0384166000908152602f602052604090205460ff165b80156141e8575060275460ff165b80156142035750602954602a546141ff91906155d8565b4210155b801561422857506001600160a01b0385166000908152602d602052604090205460ff16155b1561423557614235614b44565b6001600160a01b0385166000908152602d602052604090205460019060ff168061427757506001600160a01b0385166000908152602d602052604090205460ff165b15614280575060005b600080821561466857601054431080156142b257506001600160a01b0388166000908152602f602052604090205460ff165b80156142d757506001600160a01b0387166000908152602f602052604090205460ff16155b80156142fc57506001600160a01b0387166000908152602d602052604090205460ff16155b801561430a57506000601954115b156144b05760105443106143315760016007600082825461432b91906157f0565b90915550505b6001600160a01b03871660009081526013602052604090205460ff16614411576001600160a01b0387166000908152601360205260408120805460ff19166001908117909155601180549192909161438a9084906155d8565b9091555050600e80546001810182556000919091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0389169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6127106019548761442291906154ac565b61442c91906155b6565b9150601954601b548361443f91906154ac565b61444991906155b6565b6022600082825461445a91906155d8565b9091555050601954601a5461446f90846154ac565b61447991906155b6565b6021600082825461448a91906155d8565b9091555050601954601c5461449f90846154ac565b6144a991906155b6565b9050614637565b6001600160a01b0387166000908152602f602052604090205460ff1680156144da57506000601d54115b1561456d57612710601d54876144f091906154ac565b6144fa91906155b6565b9150601d54601f548361450d91906154ac565b61451791906155b6565b6022600082825461452891906155d8565b9091555050601d54601e5461453d90846154ac565b61454791906155b6565b6021600082825461455891906155d8565b909155505060195460205461449f90846154ac565b6001600160a01b0388166000908152602f602052604090205460ff16801561459757506000601954115b1561463757612710601954876145ad91906154ac565b6145b791906155b6565b9150601954601b54836145ca91906154ac565b6145d491906155b6565b602260008282546145e591906155d8565b9091555050601954601a546145fa90846154ac565b61460491906155b6565b6021600082825461461591906155d8565b9091555050601954601c5461462a90846154ac565b61463491906155b6565b90505b811561465b57614648883084614839565b801561465b5761465b3061dead83614839565b61466582876157f0565b95505b614673888888614839565b5050505050505050565b6000614688306115e2565b9050600060215460225461469c91906155d8565b90508115806146a9575080155b156146b2575050565b600a80546146bf916154ac565b8211156146d657600a80546146d3916154ac565b91505b600080600283602254866146ea91906154ac565b6146f491906155b6565b6146fe91906155b6565b905061471261470d82866157f0565b614d5e565b60225447908190600090614728906002906155b6565b61473290876157f0565b60215461473f90856154ac565b61474991906155b6565b905061475581836157f0565b9150836022600082825461476991906157f0565b90915550614779905084886157f0565b6021600082825461478a91906157f0565b9091555050831580159061479e5750600082115b156147ad576147ad8483614eb8565b600d546040516001600160a01b03909116904790600081818185875af1925050503d80600081146147fa576040519150601f19603f3d011682016040523d82523d6000602084013e6147ff565b606091505b50505050505050505050565b6001600160a01b0382166000908152602f60205260409020805460ff1916821515179055612285828261498e565b6001600160a01b03831661485f5760405162461bcd60e51b815260040161102590615827565b6001600160a01b0382166148855760405162461bcd60e51b81526004016110259061586c565b6001600160a01b038316600090815260208190526040902054818110156148fd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401611025565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906149349084906155d8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161498091815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152602e6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015614a5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a7f919061560c565b81600081518110614a9257614a92615629565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110614ac657614ac6615629565b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de95908490614b0e90600090869061dead9042906004016158af565b6000604051808303818588803b158015614b2757600080fd5b505af1158015614b3b573d6000803e3d6000fd5b50505050505050565b42602a819055602c55600b546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015614b96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bba91906156f1565b90506000614bc7306115e2565b9050600061271060285484614bdc91906154ac565b614be691906155b6565b600b5460065460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015614c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c64919061570a565b50600654604051629d473b60e21b81526001600160a01b03909116906302751cec90614c9f9030908690600190819084904290600401615787565b60408051808303816000875af1158015614cbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ce19190615803565b5050600083614cef306115e2565b614cf991906157f0565b90508015614d0e57614d0e3061dead83614839565b6000614d1a83476157f0565b90508015614d2b57614d2b816149f1565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110614d9357614d93615629565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015614dec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e10919061560c565b81600181518110614e2357614e23615629565b6001600160a01b039283166020918202929092010152600654614e499130911684613796565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790614e829085906000908690309042906004016158e4565b600060405180830381600087803b158015614e9c57600080fd5b505af1158015614eb0573d6000803e3d6000fd5b505050505050565b600654614ed09030906001600160a01b031684613796565b60065460405163f305d71960e01b81526001600160a01b039091169063f305d719908390614f0d9030908790600090819084904290600401615787565b60606040518083038185885af1158015614f2b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614f5091906157c2565b5050505050565b600060208083528351808285015260005b81811015614f8457858101830151858201604001528201614f68565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114614fba57600080fd5b50565b60008060408385031215614fd057600080fd5b8235614fdb81614fa5565b946020939093013593505050565b600060208284031215614ffb57600080fd5b813561500681614fa5565b9392505050565b60006020828403121561501f57600080fd5b5035919050565b60008060006060848603121561503b57600080fd5b833561504681614fa5565b9250602084013561505681614fa5565b929592945050506040919091013590565b8015158114614fba57600080fd5b60008060006060848603121561508a57600080fd5b833592506020840135915060408401356150a381615067565b809150509250925092565b600080604083850312156150c157600080fd5b82356150cc81614fa5565b915060208301356150dc81615067565b809150509250929050565b6000806000606084860312156150fc57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561512657600080fd5b823561513181614fa5565b915060208301356150dc81614fa5565b60008083601f84011261515357600080fd5b50813567ffffffffffffffff81111561516b57600080fd5b6020830191508360208260051b850101111561518657600080fd5b9250929050565b6000806000604084860312156151a257600080fd5b833567ffffffffffffffff8111156151b957600080fd5b6151c586828701615141565b90945092505060208401356150a381615067565b600081518084526020808501945080840160005b838110156152125781516001600160a01b0316875295820195908201906001016151ed565b509495945050505050565b60208152600061500660208301846151d9565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561526f5761526f615230565b604052919050565b600067ffffffffffffffff82111561529157615291615230565b5060051b60200190565b600082601f8301126152ac57600080fd5b813560206152c16152bc83615277565b615246565b82815260059290921b840181019181810190868411156152e057600080fd5b8286015b848110156152fb57803583529183019183016152e4565b509695505050505050565b600080600080600080600060a0888a03121561532157600080fd5b873567ffffffffffffffff8082111561533957600080fd5b818a0191508a601f83011261534d57600080fd5b8135602061535d6152bc83615277565b82815260059290921b8401810191818101908e84111561537c57600080fd5b948201945b838610156153a357853561539481614fa5565b82529482019490820190615381565b9b50508b0135925050808211156153b957600080fd5b6153c58b838c0161529b565b975060408a0135965060608a01359150808211156153e257600080fd5b6153ee8b838c01615141565b909650945060808a013591508082111561540757600080fd5b506154148a828b01615141565b989b979a50959850939692959293505050565b600181811c9082168061543b57607f821691505b60208210810361545b57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610ff557610ff5615496565b600181815b808511156154fe5781600019048211156154e4576154e4615496565b808516156154f157918102915b93841c93908002906154c8565b509250929050565b60008261551557506001610ff5565b8161552257506000610ff5565b816001811461553857600281146155425761555e565b6001915050610ff5565b60ff84111561555357615553615496565b50506001821b610ff5565b5060208310610133831016604e8410600b8410161715615581575081810a610ff5565b61558b83836154c3565b806000190482111561559f5761559f615496565b029392505050565b600061500660ff841683615506565b6000826155d357634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610ff557610ff5615496565b6020808252600790820152662330b4b632b21760c91b604082015260600190565b60006020828403121561561e57600080fd5b815161500681614fa5565b634e487b7160e01b600052603260045260246000fd5b82815260406020820152600061565860408301846151d9565b949350505050565b6000602080838503121561567357600080fd5b825167ffffffffffffffff81111561568a57600080fd5b8301601f8101851361569b57600080fd5b80516156a96152bc82615277565b81815260059190911b820183019083810190878311156156c857600080fd5b928401925b828410156156e6578351825292840192908401906156cd565b979650505050505050565b60006020828403121561570357600080fd5b5051919050565b60006020828403121561571c57600080fd5b815161500681615067565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2035360cc1b606082015260800190565b60006001820161578057615780615496565b5060010190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156157d757600080fd5b8351925060208401519150604084015190509250925092565b81810381811115610ff557610ff5615496565b6000806040838503121561581657600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8481526080602082015260006158c860808301866151d9565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061590360a08301866151d9565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220043efe7168102b0878de6b01ab114b92645d6b3328e1a44fdb72d7ffa841091a64736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106104f05760003560e01c8063906e9dd01161028c578063c876d0b91161015a578063ee40166e116100cc578063f6b20c3b11610085578063f6b20c3b14610ea8578063f8b45b0514610ebd578063f9f92be414610ed3578063fc353ff814610f03578063fd361d0e14610f18578063fe72b27a14610f3257600080fd5b8063ee40166e14610e1b578063ee44b44e14610e31578063f11a24d314610e47578063f2fde38b14610e5d578063f5648a4f14610e7d578063f637434214610e9257600080fd5b8063dd62ed3e1161011e578063dd62ed3e14610d54578063e2f4560514610d9a578063e4c4a64b14610db0578063e71dc3f514610dd0578063e884f26014610de6578063eb472fc414610dfb57600080fd5b8063c876d0b914610cce578063cc2ffe7c14610ce8578063d257b34f14610cfe578063d85ba06314610d1e578063dc3f0d0f14610d3457600080fd5b8063ac8d2617116101fe578063bd5fb920116101b7578063bd5fb92014610c19578063befd2fac14610c39578063c024666814610c59578063c17b5b8c14610c79578063c5f956af14610c99578063c7c61e2c14610cb957600080fd5b8063ac8d261714610b4d578063acee28d114610b6d578063adb873bd14610b83578063afd6ce6114610b99578063b62496f514610bc9578063bbc0c74214610bf957600080fd5b80639ec22c0e116102505780639ec22c0e14610aab578063a457c2d714610ac1578063a4c82a0014610ae1578063a5ece94114610af7578063a62068ce14610b17578063a9059cbb14610b2d57600080fd5b8063906e9dd014610a1e57806395d89b4114610a3e5780639a5bd2dd14610a535780639a7a23d614610a755780639e93ad8e14610a9557600080fd5b80635c068a8c116103c9578063715018a61161033b5780638095d564116102f45780638095d5641461096a57806382aa7c681461098a5780638366e79a146109aa57806388e765ff146109ca5780638da5cb5b146109e05780638e38b7cb146109fe57600080fd5b8063715018a6146108d5578063730c1888146108ea578063751039fc1461090a5780637571336a1461091f578063763cef491461093f578063783102eb1461095457600080fd5b80636b0a894c1161038d5780636b0a894c1461083e5780636b2fb124146108545780636ddd17131461086a57806370a082311461088b578063712c2985146108ab578063713d0974146108c057600080fd5b80635c068a8c146107af5780635c3352d3146107c55780636605bfda146107f257806366d602ae146108125780636a486a8e1461082857600080fd5b80631c499ab011610462578063313ce56711610426578063313ce567146107085780633950935114610724578063452ed4f1146107445780634a62bb651461076457806351f205e41461078357806358a6d5311461079857600080fd5b80631c499ab01461067857806323b872dd146106985780632be32b61146106b85780632c3e486c146106d85780632e82f1a0146106ee57600080fd5b80631805805b116104b45780631805805b146105df57806318160ddd14610601578063184c16c51461061657806318e1c1231461062c578063199ffc721461064c5780631a8145bb1461066257600080fd5b8063058054c9146104fc57806306fdde03146105255780630758d92414610547578063095ea7b31461057f57806310d5de53146105af57600080fd5b366104f757005b600080fd5b34801561050857600080fd5b5061051260245481565b6040519081526020015b60405180910390f35b34801561053157600080fd5b5061053a610f52565b60405161051c9190614f57565b34801561055357600080fd5b50600654610567906001600160a01b031681565b6040516001600160a01b03909116815260200161051c565b34801561058b57600080fd5b5061059f61059a366004614fbd565b610fe4565b604051901515815260200161051c565b3480156105bb57600080fd5b5061059f6105ca366004614fe9565b602e6020526000908152604090205460ff1681565b3480156105eb57600080fd5b506105ff6105fa366004614fe9565b610ffb565b005b34801561060d57600080fd5b50600254610512565b34801561062257600080fd5b50610512602b5481565b34801561063857600080fd5b506105ff61064736600461500d565b6110bb565b34801561065857600080fd5b5061051260285481565b34801561066e57600080fd5b5061051260225481565b34801561068457600080fd5b506105ff61069336600461500d565b61118f565b3480156106a457600080fd5b5061059f6106b3366004615026565b61129b565b3480156106c457600080fd5b506105ff6106d336600461500d565b611345565b3480156106e457600080fd5b5061051260295481565b3480156106fa57600080fd5b5060275461059f9060ff1681565b34801561071457600080fd5b506040516012815260200161051c565b34801561073057600080fd5b5061059f61073f366004614fbd565b611452565b34801561075057600080fd5b50600b54610567906001600160a01b031681565b34801561077057600080fd5b5060125461059f90610100900460ff1681565b34801561078f57600080fd5b506105ff61148e565b3480156107a457600080fd5b50601054431061059f565b3480156107bb57600080fd5b50610512601a5481565b3480156107d157600080fd5b506105126107e0366004614fe9565b60156020526000908152604090205481565b3480156107fe57600080fd5b506105ff61080d366004614fe9565b61150c565b34801561081e57600080fd5b5061051260085481565b34801561083457600080fd5b50610512601d5481565b34801561084a57600080fd5b5061051260115481565b34801561086057600080fd5b50610512601e5481565b34801561087657600080fd5b5060125461059f906301000000900460ff1681565b34801561089757600080fd5b506105126108a6366004614fe9565b6115e2565b3480156108b757600080fd5b506105126115fd565b3480156108cc57600080fd5b50610512611626565b3480156108e157600080fd5b506105ff611822565b3480156108f657600080fd5b506105ff610905366004615075565b611896565b34801561091657600080fd5b506105ff6119bf565b34801561092b57600080fd5b506105ff61093a3660046150ae565b611a3b565b34801561094b57600080fd5b506105ff611b03565b34801561096057600080fd5b5061051260265481565b34801561097657600080fd5b506105ff6109853660046150e7565b611ca4565b34801561099657600080fd5b506105ff6109a536600461500d565b611d64565b3480156109b657600080fd5b5061059f6109c5366004615113565b611e5b565b3480156109d657600080fd5b5061051260075481565b3480156109ec57600080fd5b506005546001600160a01b0316610567565b348015610a0a57600080fd5b506105ff610a1936600461518d565b61200c565b348015610a2a57600080fd5b506105ff610a39366004614fe9565b6120ad565b348015610a4a57600080fd5b5061053a61215d565b348015610a5f57600080fd5b50610a6861216c565b60405161051c919061521d565b348015610a8157600080fd5b506105ff610a903660046150ae565b6121cd565b348015610aa157600080fd5b5061051261271081565b348015610ab757600080fd5b50610512602c5481565b348015610acd57600080fd5b5061059f610adc366004614fbd565b6122c1565b348015610aed57600080fd5b50610512602a5481565b348015610b0357600080fd5b50600d54610567906001600160a01b031681565b348015610b2357600080fd5b5061051260105481565b348015610b3957600080fd5b5061059f610b48366004614fbd565b61235a565b348015610b5957600080fd5b506105ff610b68366004615306565b612367565b348015610b7957600080fd5b5061051260165481565b348015610b8f57600080fd5b5061051260205481565b348015610ba557600080fd5b5061059f610bb4366004614fe9565b60146020526000908152604090205460ff1681565b348015610bd557600080fd5b5061059f610be4366004614fe9565b602f6020526000908152604090205460ff1681565b348015610c0557600080fd5b5060125461059f9062010000900460ff1681565b348015610c2557600080fd5b506105ff610c3436600461518d565b612a17565b348015610c4557600080fd5b506105ff610c5436600461500d565b612b1d565b348015610c6557600080fd5b506105ff610c743660046150ae565b612c53565b348015610c8557600080fd5b506105ff610c943660046150e7565b612cdc565b348015610ca557600080fd5b50600c54610567906001600160a01b031681565b348015610cc557600080fd5b506105ff612d97565b348015610cda57600080fd5b5060185461059f9060ff1681565b348015610cf457600080fd5b5061051260215481565b348015610d0a57600080fd5b506105ff610d1936600461500d565b612e00565b348015610d2a57600080fd5b5061051260195481565b348015610d4057600080fd5b506105ff610d4f36600461500d565b612f4b565b348015610d6057600080fd5b50610512610d6f366004615113565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610da657600080fd5b50610512600a5481565b348015610dbc57600080fd5b5061059f610dcb36600461500d565b613059565b348015610ddc57600080fd5b50610512601c5481565b348015610df257600080fd5b506105ff613265565b348015610e0757600080fd5b50610567610e1636600461500d565b61329b565b348015610e2757600080fd5b50610512600f5481565b348015610e3d57600080fd5b5061051260255481565b348015610e5357600080fd5b50610512601b5481565b348015610e6957600080fd5b506105ff610e78366004614fe9565b6132c5565b348015610e8957600080fd5b506105ff6133b0565b348015610e9e57600080fd5b50610512601f5481565b348015610eb457600080fd5b506105ff61341c565b348015610ec957600080fd5b5061051260095481565b348015610edf57600080fd5b5061059f610eee366004614fe9565b60136020526000908152604090205460ff1681565b348015610f0f57600080fd5b506105ff61345c565b348015610f2457600080fd5b5060235461059f9060ff1681565b348015610f3e57600080fd5b506105ff610f4d36600461500d565b61349c565b606060038054610f6190615427565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8d90615427565b8015610fda5780601f10610faf57610100808354040283529160200191610fda565b820191906000526020600020905b815481529060010190602001808311610fbd57829003601f168201915b5050505050905090565b6000610ff1338484613796565b5060015b92915050565b6005546001600160a01b0316331461102e5760405162461bcd60e51b815260040161102590615461565b60405180910390fd5b60125462010000900460ff16156110995760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401611025565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146110e55760405162461bcd60e51b815260040161102590615461565b600a81101580156110f8575061c3508111155b6111445760405162461bcd60e51b815260206004820181905260248201527f4d75737420736574206265747765656e20302e3120616e642035303020424e426044820152606401611025565b61115581662386f26fc100006154ac565b6016556040518181527f0320a651094de4f5fc35c0f1c336811904e8f465b6599a93eb0dec4919b8fec5906020015b60405180910390a150565b6005546001600160a01b031633146111b95760405162461bcd60e51b815260040161102590615461565b6111c56012600a6155a7565b60646111d060025490565b6111db9060016154ac565b6111e591906155b6565b6111ef91906155b6565b8110156112505760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f776044820152686572207468616e202560b81b6064820152608401611025565b61125c6012600a6155a7565b61126690826154ac565b60098190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001611184565b60006112a88484846138ba565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561132d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401611025565b61133a8533858403613796565b506001949350505050565b6005546001600160a01b0316331461136f5760405162461bcd60e51b815260040161102590615461565b61137b6012600a6155a7565b6103e861138760025490565b6113929060016154ac565b61139c91906155b6565b6113a691906155b6565b8110156114075760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401611025565b6114136012600a6155a7565b61141d90826154ac565b60078190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de4100990602001611184565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ff19185906114899086906155d8565b613796565b600c546001600160a01b031633146114b85760405162461bcd60e51b8152600401611025906155eb565b6012805460ff191660011790556114cd61467d565b6012805460ff191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b600c546001600160a01b031633146115365760405162461bcd60e51b8152600401611025906155eb565b6001600160a01b0381166115985760405162461bcd60e51b8152602060048201526024808201527f5f74726561737572794164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401611025565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6001600160a01b031660009081526020819052604090205490565b60235460009060ff16156116205760255460245461161b91906155d8565b905090565b50600090565b604080516002808252606082018352600092839291906020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611694573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b8919061560c565b816000815181106116cb576116cb615629565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106116ff576116ff615629565b6001600160a01b039290921660209283029190910182015260408051600280825260608201835260009391929091830190803683370190505060065460165460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f9161176e91869060040161563f565b600060405180830381865afa15801561178b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117b39190810190615660565b90506064601e54601f546117c791906155d8565b826001815181106117da576117da615629565b60200260200101516117ec91906154ac565b6117f691906155b6565b8160018151811061180957611809615629565b602002602001015161181b91906155d8565b9250505090565b6005546001600160a01b0316331461184c5760405162461bcd60e51b815260040161102590615461565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b600c546001600160a01b031633146118c05760405162461bcd60e51b8152600401611025906155eb565b61025883101561192e5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401611025565b6103e8821115801561193e575060015b6119a35760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401611025565b6029929092556028556027805460ff1916911515919091179055565b6005546001600160a01b031633146119e95760405162461bcd60e51b815260040161102590615461565b6012805461ff00191690556018805460ff191690556002546007556002546008556002546009556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b600c546001600160a01b03163314611a655760405162461bcd60e51b8152600401611025906155eb565b80611ad857600b546001600160a01b0390811690831603611ad85760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401611025565b6001600160a01b03919091166000908152602e60205260409020805460ff1916911515919091179055565b600c546001600160a01b03163314611b2d5760405162461bcd60e51b8152600401611025906155eb565b611b356115fd565b4210158015611b4b57506000611b496115fd565b115b611b905760405162461bcd60e51b815260206004820152601660248201527526bab9ba103932b8bab2b9ba1030b732103bb0b4ba1760511b6044820152606401611025565b600060248181556023805460ff19169055602654600b546040516370a0823160e01b81523060048201526064936001600160a01b03909216916370a082319101602060405180830381865afa158015611bed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1191906156f1565b611c1b91906154ac565b611c2591906155b6565b6000602655600b5460405163a9059cbb60e01b8152336004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca0919061570a565b5050565b6005546001600160a01b03163314611cce5760405162461bcd60e51b815260040161102590615461565b601a839055601b829055601c81905580611ce883856155d8565b611cf291906155d8565b6019556064611d04612710601e6154ac565b611d0e91906155b6565b6019541115611d5f5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401611025565b505050565b6005546001600160a01b03163314611d8e5760405162461bcd60e51b815260040161102590615461565b60125462010000900460ff1615611de75760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401611025565b6032811115611e085760405162461bcd60e51b815260040161102590615727565b6012805463ffff00001916630101000017905543600f819055611e2c9082906155d8565b6010556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b600c546000906001600160a01b03163314611e885760405162461bcd60e51b8152600401611025906155eb565b6001600160a01b038316611ede5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401611025565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611f25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4991906156f1565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611f9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc0919061570a565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146120365760405162461bcd60e51b815260040161102590615461565b60005b828110156120a757816013600086868581811061205857612058615629565b905060200201602081019061206d9190614fe9565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061209f8161576e565b915050612039565b50505050565b600c546001600160a01b031633146120d75760405162461bcd60e51b8152600401611025906155eb565b6001600160a01b03811661213b5760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401611025565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b606060048054610f6190615427565b6060600e805480602002602001604051908101604052809291908181526020018280548015610fda57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116121a6575050505050905090565b6005546001600160a01b031633146121f75760405162461bcd60e51b815260040161102590615461565b600b546001600160a01b039081169083160361227b5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401611025565b612285828261480b565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156123435760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401611025565b6123503385858403613796565b5060019392505050565b6000610ff13384846138ba565b6005546001600160a01b031633146123915760405162461bcd60e51b815260040161102590615461565b60125462010000900460ff16156123fe5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401611025565b6032851061241e5760405162461bcd60e51b815260040161102590615727565b855187511461246f5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401611025565b61012c8751106124e05760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203330302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401611025565b60005b83811015612552576001602d600087878581811061250357612503615629565b90506020020160208101906125189190614fe9565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061254a8161576e565b9150506124e3565b5060005b818110156125c55760016013600085858581811061257657612576615629565b905060200201602081019061258b9190614fe9565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806125bd8161576e565b915050612556565b5060005b87518110156126935760008882815181106125e6576125e6615629565b6020908102919091018101516001600160a01b038116600090815260149092526040909120805460ff19166001179055905061262542620151806155d8565b6001600160a01b03821660009081526015602052604081209190915561264d6012600a6155a7565b89848151811061265f5761265f615629565b602002602001015161267191906154ac565b905061267e338383614839565b5050808061268b9061576e565b9150506125c9565b506012805463ffff00001916630101000017905543600f8190556126b89086906155d8565b6010556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600660009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275b919061560c565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e1919061560c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561282e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612852919061560c565b600b80546001600160a01b0319166001600160a01b0392909216918217905561287c90600161498e565b600b54612893906001600160a01b0316600161480b565b600047116128ef5760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401611025565b60006128fa306115e2565b116129565760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401611025565b6006546129719030906001600160a01b0316611489826115e2565b6006546001600160a01b031663f305d719473061298d816115e2565b60008030426040518863ffffffff1660e01b81526004016129b396959493929190615787565b60606040518083038185885af11580156129d1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129f691906157c2565b5050610bb8601a8190556019819055601e819055601d555050505050505050565b600c546001600160a01b03163314612a415760405162461bcd60e51b8152600401611025906155eb565b60005b828110156120a75781602d6000868685818110612a6357612a63615629565b9050602002016020810190612a789190614fe9565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055838382818110612ab257612ab2615629565b9050602002016020810190612ac79190614fe9565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df783604051612b03911515815260200190565b60405180910390a280612b158161576e565b915050612a44565b600c546001600160a01b03163314612b475760405162461bcd60e51b8152600401611025906155eb565b60235460ff1615612bb45760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f74207265717565737420616761696e20756e74696c206669727374604482015270103932b8bab2b9ba1034b99037bb32b91760791b6064820152608401611025565b60648111158015612bc55750600081115b612c115760405162461bcd60e51b815260206004820152601a60248201527f4e65656420746f20736574206265747765656e20312d313030250000000000006044820152606401611025565b426024556023805460ff1916600117905560268190556040517fd99a77b2f3951cd076e75814e44db497e6abc203dd251329da0b62c288f9f48b90600090a150565b6005546001600160a01b03163314612c7d5760405162461bcd60e51b815260040161102590615461565b6001600160a01b0382166000818152602d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314612d065760405162461bcd60e51b815260040161102590615461565b601e839055601f829055602081905580612d2083856155d8565b612d2a91906155d8565b601d556064612d3c612710601e6154ac565b612d4691906155b6565b601d541115611d5f5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401611025565b600c546001600160a01b03163314612dc15760405162461bcd60e51b8152600401611025906155eb565b6023805460ff191690556000602681905560248190556040517ffbcc1c208c9c4d1d9f557267b55c5ae316e74ce676a0db72ef18c6d5f5767c619190a1565b6005546001600160a01b03163314612e2a5760405162461bcd60e51b815260040161102590615461565b620186a0612e3760025490565b612e429060016154ac565b612e4c91906155b6565b811015612eb95760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401611025565b6103e8612ec560025490565b612ed09060016154ac565b612eda91906155b6565b811115612f465760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401611025565b600a55565b6005546001600160a01b03163314612f755760405162461bcd60e51b815260040161102590615461565b612f816012600a6155a7565b6103e8612f8d60025490565b612f989060016154ac565b612fa291906155b6565b612fac91906155b6565b81101561300e5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401611025565b61301a6012600a6155a7565b61302490826154ac565b60088190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001611184565b600c546000906001600160a01b031633146130865760405162461bcd60e51b8152600401611025906155eb565b602b54602c5461309691906155d8565b42116130e45760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401611025565b6107d08211156131495760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20323025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401611025565b42602c55600b546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a0823190602401602060405180830381865afa158015613198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131bc91906156f1565b905060006127106131cd85846154ac565b6131d791906155b6565b905080156131f857600b546131f8906001600160a01b031661dead83614839565b600b546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b15801561324257600080fd5b505af1158015613256573d6000803e3d6000fd5b50600198975050505050505050565b6005546001600160a01b0316331461328f5760405162461bcd60e51b815260040161102590615461565b6018805460ff19169055565b600e81815481106132ab57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146132ef5760405162461bcd60e51b815260040161102590615461565b6001600160a01b0381166133545760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611025565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600c546001600160a01b031633146133da5760405162461bcd60e51b8152600401611025906155eb565b604051600090339047908381818185875af1925050503d80600081146120a7576040519150601f19603f3d011682016040523d82523d6000602084013e6120a7565b600c546001600160a01b031633146134465760405162461bcd60e51b8152600401611025906155eb565b6000601a8190556019819055601e819055601d55565b600c546001600160a01b031633146134865760405162461bcd60e51b8152600401611025906155eb565b60c8601a8190556019819055601e819055601d55565b600c546001600160a01b031633146134c65760405162461bcd60e51b8152600401611025906155eb565b6107d08111156135365760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20323025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401611025565b602b5461354390426157f0565b602c5411156135845760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401611025565b42602c55600b546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156135d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135f591906156f1565b90506000613602306115e2565b9050600061271061361385856154ac565b61361d91906155b6565b600b5460065460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015613677573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061369b919061570a565b50600654604051629d473b60e21b81526001600160a01b03909116906302751cec906136d69030908690600190819084904290600401615787565b60408051808303816000875af11580156136f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137189190615803565b5050600083613726306115e2565b61373091906157f0565b90508015613745576137453061dead83614839565b600061375183476157f0565b9050801561376257613762816149f1565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b0383166137f85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401611025565b6001600160a01b0382166138595760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401611025565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166138e05760405162461bcd60e51b815260040161102590615827565b6001600160a01b0382166139065760405162461bcd60e51b81526004016110259061586c565b600081116139565760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401611025565b60125462010000900460ff166139ea576001600160a01b0383166000908152602d602052604090205460ff16806139a557506001600160a01b0382166000908152602d602052604090205460ff165b6139ea5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401611025565b6010544310158015613a04575060125462010000900460ff165b15613af9576001600160a01b03831660009081526013602052604090205460ff16158015613a4b57506001600160a01b03821660009081526013602052604090205460ff16155b80613a6357506005546001600160a01b038381169116145b80613a7857506001600160a01b03821661dead145b613af95760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401611025565b6001600160a01b03831660009081526014602052604090205460ff1615613ce0576001600160a01b0382166000908152602f602052604090205460ff1615613c34576001600160a01b038316600090815260156020526040902054421015613b955760405162461bcd60e51b815260206004820152600f60248201526e10d85b9b9bdd081cd95b1b081e595d608a1b6044820152606401611025565b613b9d611626565b811115613c095760405162461bcd60e51b815260206004820152603460248201527f417474656d7074696e6720746f2073656c6c206f766572206d61782073656c6c6044820152731030b6b7bab73a17101021b432b1b59036b0bc1760611b6064820152608401611025565b613c1642620151806155d8565b6001600160a01b038416600090815260156020526040902055613ce0565b6001600160a01b0382166000908152602d602052604090205460ff16613ce05760405162461bcd60e51b815260206004820152605560248201527f507269766174652073616c652063616e6e6f74207472616e7366657220616e6460448201527f206d7573742073656c6c206f6e6c79206f72207472616e7366657220746f2061606482015274103bb434ba32b634b9ba32b21030b2323932b9b99760591b608482015260a401611025565b601254610100900460ff16156140e1576005546001600160a01b03848116911614801590613d1c57506005546001600160a01b03838116911614155b8015613d3057506001600160a01b03821615155b8015613d4757506001600160a01b03821661dead14155b8015613d6c57506001600160a01b0383166000908152602d602052604090205460ff16155b8015613d9157506001600160a01b0382166000908152602d602052604090205460ff16155b156140e15760185460ff1615613eaa576006546001600160a01b03838116911614801590613dcd5750600b546001600160a01b03838116911614155b15613eaa57613ddd6002436157f0565b32600090815260176020526040902054108015613e1b5750613e006002436157f0565b6001600160a01b038316600090815260176020526040902054105b613e855760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401611025565b3260009081526017602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152602f602052604090205460ff168015613eeb57506001600160a01b0382166000908152602e602052604090205460ff16155b15613fb757600754811115613f535760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401611025565b600954613f5f836115e2565b613f6990836155d8565b1115613fb25760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401611025565b6140e1565b6001600160a01b0382166000908152602f602052604090205460ff168015613ff857506001600160a01b0383166000908152602e602052604090205460ff16155b1561406257600854811115613fb25760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401611025565b6001600160a01b0382166000908152602e602052604090205460ff166140e15760095461408e836115e2565b61409890836155d8565b11156140e15760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401611025565b60006140ec306115e2565b600a549091508110801590819061410c57506012546301000000900460ff165b801561411b575060125460ff16155b801561414057506001600160a01b0385166000908152602f602052604090205460ff16155b801561416557506001600160a01b0385166000908152602d602052604090205460ff16155b801561418a57506001600160a01b0384166000908152602d602052604090205460ff16155b156141af576012805460ff191660011790556141a461467d565b6012805460ff191690555b60125460ff161580156141da57506001600160a01b0384166000908152602f602052604090205460ff165b80156141e8575060275460ff165b80156142035750602954602a546141ff91906155d8565b4210155b801561422857506001600160a01b0385166000908152602d602052604090205460ff16155b1561423557614235614b44565b6001600160a01b0385166000908152602d602052604090205460019060ff168061427757506001600160a01b0385166000908152602d602052604090205460ff165b15614280575060005b600080821561466857601054431080156142b257506001600160a01b0388166000908152602f602052604090205460ff165b80156142d757506001600160a01b0387166000908152602f602052604090205460ff16155b80156142fc57506001600160a01b0387166000908152602d602052604090205460ff16155b801561430a57506000601954115b156144b05760105443106143315760016007600082825461432b91906157f0565b90915550505b6001600160a01b03871660009081526013602052604090205460ff16614411576001600160a01b0387166000908152601360205260408120805460ff19166001908117909155601180549192909161438a9084906155d8565b9091555050600e80546001810182556000919091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0389169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6127106019548761442291906154ac565b61442c91906155b6565b9150601954601b548361443f91906154ac565b61444991906155b6565b6022600082825461445a91906155d8565b9091555050601954601a5461446f90846154ac565b61447991906155b6565b6021600082825461448a91906155d8565b9091555050601954601c5461449f90846154ac565b6144a991906155b6565b9050614637565b6001600160a01b0387166000908152602f602052604090205460ff1680156144da57506000601d54115b1561456d57612710601d54876144f091906154ac565b6144fa91906155b6565b9150601d54601f548361450d91906154ac565b61451791906155b6565b6022600082825461452891906155d8565b9091555050601d54601e5461453d90846154ac565b61454791906155b6565b6021600082825461455891906155d8565b909155505060195460205461449f90846154ac565b6001600160a01b0388166000908152602f602052604090205460ff16801561459757506000601954115b1561463757612710601954876145ad91906154ac565b6145b791906155b6565b9150601954601b54836145ca91906154ac565b6145d491906155b6565b602260008282546145e591906155d8565b9091555050601954601a546145fa90846154ac565b61460491906155b6565b6021600082825461461591906155d8565b9091555050601954601c5461462a90846154ac565b61463491906155b6565b90505b811561465b57614648883084614839565b801561465b5761465b3061dead83614839565b61466582876157f0565b95505b614673888888614839565b5050505050505050565b6000614688306115e2565b9050600060215460225461469c91906155d8565b90508115806146a9575080155b156146b2575050565b600a80546146bf916154ac565b8211156146d657600a80546146d3916154ac565b91505b600080600283602254866146ea91906154ac565b6146f491906155b6565b6146fe91906155b6565b905061471261470d82866157f0565b614d5e565b60225447908190600090614728906002906155b6565b61473290876157f0565b60215461473f90856154ac565b61474991906155b6565b905061475581836157f0565b9150836022600082825461476991906157f0565b90915550614779905084886157f0565b6021600082825461478a91906157f0565b9091555050831580159061479e5750600082115b156147ad576147ad8483614eb8565b600d546040516001600160a01b03909116904790600081818185875af1925050503d80600081146147fa576040519150601f19603f3d011682016040523d82523d6000602084013e6147ff565b606091505b50505050505050505050565b6001600160a01b0382166000908152602f60205260409020805460ff1916821515179055612285828261498e565b6001600160a01b03831661485f5760405162461bcd60e51b815260040161102590615827565b6001600160a01b0382166148855760405162461bcd60e51b81526004016110259061586c565b6001600160a01b038316600090815260208190526040902054818110156148fd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401611025565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906149349084906155d8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161498091815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152602e6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015614a5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a7f919061560c565b81600081518110614a9257614a92615629565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110614ac657614ac6615629565b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de95908490614b0e90600090869061dead9042906004016158af565b6000604051808303818588803b158015614b2757600080fd5b505af1158015614b3b573d6000803e3d6000fd5b50505050505050565b42602a819055602c55600b546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015614b96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bba91906156f1565b90506000614bc7306115e2565b9050600061271060285484614bdc91906154ac565b614be691906155b6565b600b5460065460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015614c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c64919061570a565b50600654604051629d473b60e21b81526001600160a01b03909116906302751cec90614c9f9030908690600190819084904290600401615787565b60408051808303816000875af1158015614cbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ce19190615803565b5050600083614cef306115e2565b614cf991906157f0565b90508015614d0e57614d0e3061dead83614839565b6000614d1a83476157f0565b90508015614d2b57614d2b816149f1565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110614d9357614d93615629565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015614dec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e10919061560c565b81600181518110614e2357614e23615629565b6001600160a01b039283166020918202929092010152600654614e499130911684613796565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790614e829085906000908690309042906004016158e4565b600060405180830381600087803b158015614e9c57600080fd5b505af1158015614eb0573d6000803e3d6000fd5b505050505050565b600654614ed09030906001600160a01b031684613796565b60065460405163f305d71960e01b81526001600160a01b039091169063f305d719908390614f0d9030908790600090819084904290600401615787565b60606040518083038185885af1158015614f2b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614f5091906157c2565b5050505050565b600060208083528351808285015260005b81811015614f8457858101830151858201604001528201614f68565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114614fba57600080fd5b50565b60008060408385031215614fd057600080fd5b8235614fdb81614fa5565b946020939093013593505050565b600060208284031215614ffb57600080fd5b813561500681614fa5565b9392505050565b60006020828403121561501f57600080fd5b5035919050565b60008060006060848603121561503b57600080fd5b833561504681614fa5565b9250602084013561505681614fa5565b929592945050506040919091013590565b8015158114614fba57600080fd5b60008060006060848603121561508a57600080fd5b833592506020840135915060408401356150a381615067565b809150509250925092565b600080604083850312156150c157600080fd5b82356150cc81614fa5565b915060208301356150dc81615067565b809150509250929050565b6000806000606084860312156150fc57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561512657600080fd5b823561513181614fa5565b915060208301356150dc81614fa5565b60008083601f84011261515357600080fd5b50813567ffffffffffffffff81111561516b57600080fd5b6020830191508360208260051b850101111561518657600080fd5b9250929050565b6000806000604084860312156151a257600080fd5b833567ffffffffffffffff8111156151b957600080fd5b6151c586828701615141565b90945092505060208401356150a381615067565b600081518084526020808501945080840160005b838110156152125781516001600160a01b0316875295820195908201906001016151ed565b509495945050505050565b60208152600061500660208301846151d9565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561526f5761526f615230565b604052919050565b600067ffffffffffffffff82111561529157615291615230565b5060051b60200190565b600082601f8301126152ac57600080fd5b813560206152c16152bc83615277565b615246565b82815260059290921b840181019181810190868411156152e057600080fd5b8286015b848110156152fb57803583529183019183016152e4565b509695505050505050565b600080600080600080600060a0888a03121561532157600080fd5b873567ffffffffffffffff8082111561533957600080fd5b818a0191508a601f83011261534d57600080fd5b8135602061535d6152bc83615277565b82815260059290921b8401810191818101908e84111561537c57600080fd5b948201945b838610156153a357853561539481614fa5565b82529482019490820190615381565b9b50508b0135925050808211156153b957600080fd5b6153c58b838c0161529b565b975060408a0135965060608a01359150808211156153e257600080fd5b6153ee8b838c01615141565b909650945060808a013591508082111561540757600080fd5b506154148a828b01615141565b989b979a50959850939692959293505050565b600181811c9082168061543b57607f821691505b60208210810361545b57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610ff557610ff5615496565b600181815b808511156154fe5781600019048211156154e4576154e4615496565b808516156154f157918102915b93841c93908002906154c8565b509250929050565b60008261551557506001610ff5565b8161552257506000610ff5565b816001811461553857600281146155425761555e565b6001915050610ff5565b60ff84111561555357615553615496565b50506001821b610ff5565b5060208310610133831016604e8410600b8410161715615581575081810a610ff5565b61558b83836154c3565b806000190482111561559f5761559f615496565b029392505050565b600061500660ff841683615506565b6000826155d357634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610ff557610ff5615496565b6020808252600790820152662330b4b632b21760c91b604082015260600190565b60006020828403121561561e57600080fd5b815161500681614fa5565b634e487b7160e01b600052603260045260246000fd5b82815260406020820152600061565860408301846151d9565b949350505050565b6000602080838503121561567357600080fd5b825167ffffffffffffffff81111561568a57600080fd5b8301601f8101851361569b57600080fd5b80516156a96152bc82615277565b81815260059190911b820183019083810190878311156156c857600080fd5b928401925b828410156156e6578351825292840192908401906156cd565b979650505050505050565b60006020828403121561570357600080fd5b5051919050565b60006020828403121561571c57600080fd5b815161500681615067565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2035360cc1b606082015260800190565b60006001820161578057615780615496565b5060010190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156157d757600080fd5b8351925060208401519150604084015190509250925092565b81810381811115610ff557610ff5615496565b6000806040838503121561581657600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8481526080602082015260006158c860808301866151d9565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061590360a08301866151d9565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220043efe7168102b0878de6b01ab114b92645d6b3328e1a44fdb72d7ffa841091a64736f6c63430008110033

Deployed Bytecode Sourcemap

12257:31641:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13830:41;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;13830:41:0;;;;;;;;4200:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;12297:27::-;;;;;;;;;;-1:-1:-1;12297:27:0;;;;-1:-1:-1;;;;;12297:27:0;;;;;;-1:-1:-1;;;;;931:32:1;;;913:51;;901:2;886:18;12297:27:0;749:221:1;5114:169:0;;;;;;;;;;-1:-1:-1;5114:169:0;;;;;:::i;:::-;;:::i;:::-;;;1596:14:1;;1589:22;1571:41;;1559:2;1544:18;5114:169:0;1431:187:1;14402:64:0;;;;;;;;;;-1:-1:-1;14402:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20030:194;;;;;;;;;;-1:-1:-1;20030:194:0;;;;;:::i;:::-;;:::i;:::-;;4521:108;;;;;;;;;;-1:-1:-1;4609:12:0;;4521:108;;14159:47;;;;;;;;;;;;;;;;34720:248;;;;;;;;;;-1:-1:-1;34720:248:0;;;;;:::i;:::-;;:::i;14017:35::-;;;;;;;;;;;;;;;;13745:33;;;;;;;;;;;;;;;;21014:288;;;;;;;;;;-1:-1:-1;21014:288:0;;;;;:::i;:::-;;:::i;5291:492::-;;;;;;;;;;-1:-1:-1;5291:492:0;;;;;:::i;:::-;;:::i;20399:295::-;;;;;;;;;;-1:-1:-1;20399:295:0;;;;;:::i;:::-;;:::i;14071:45::-;;;;;;;;;;;;;;;;13977:33;;;;;;;;;;-1:-1:-1;13977:33:0;;;;;;;;4420:93;;;;;;;;;;-1:-1:-1;4420:93:0;;4503:2;2663:36:1;;2651:2;2636:18;4420:93:0;2521:184:1;5791:215:0;;;;;;;;;;-1:-1:-1;5791:215:0;;;;;:::i;:::-;;:::i;12475:21::-;;;;;;;;;;-1:-1:-1;12475:21:0;;;;-1:-1:-1;;;;;12475:21:0;;;12794:33;;;;;;;;;;-1:-1:-1;12794:33:0;;;;;;;;;;;43658:237;;;;;;;;;;;;;:::i;30419:120::-;;;;;;;;;;-1:-1:-1;30513:18:0;;30498:12;:33;30419:120;;13402:29;;;;;;;;;;;;;;;;13021:61;;;;;;;;;;-1:-1:-1;13021:61:0;;;;;:::i;:::-;;;;;;;;;;;;;;33657:340;;;;;;;;;;-1:-1:-1;33657:340:0;;;;;:::i;:::-;;:::i;12367:28::-;;;;;;;;;;;;;;;;13509;;;;;;;;;;;;;;;;12732:25;;;;;;;;;;;;;;;;13544:30;;;;;;;;;;;;;;;;12874:31;;;;;;;;;;-1:-1:-1;12874:31:0;;;;;;;;;;;4637:127;;;;;;;;;;-1:-1:-1;4637:127:0;;;;;:::i;:::-;;:::i;42528:281::-;;;;;;;;;;;;;:::i;34303:409::-;;;;;;;;;;;;;:::i;8281:150::-;;;;;;;;;;;;;:::i;37389:506::-;;;;;;;;;;-1:-1:-1;37389:506:0;;;;;:::i;:::-;;:::i;18963:269::-;;;;;;;;;;;;;:::i;21950:319::-;;;;;;;;;;-1:-1:-1;21950:319:0;;;;;:::i;:::-;;:::i;42817:546::-;;;;;;;;;;;;;:::i;13937:31::-;;;;;;;;;;;;;;;;22822:389;;;;;;;;;;-1:-1:-1;22822:389:0;;;;;:::i;:::-;;:::i;18480:427::-;;;;;;;;;;-1:-1:-1;18480:427:0;;;;;:::i;:::-;;:::i;32919:440::-;;;;;;;;;;-1:-1:-1;32919:440:0;;;;;:::i;:::-;;:::i;12333:27::-;;;;;;;;;;;;;;;;8067:79;;;;;;;;;;-1:-1:-1;8132:6:0;;-1:-1:-1;;;;;8132:6:0;8067:79;;19819:203;;;;;;;;;;-1:-1:-1;19819:203:0;;;;;:::i;:::-;;:::i;34005:290::-;;;;;;;;;;-1:-1:-1;34005:290:0;;;;;:::i;:::-;;:::i;4308:104::-;;;;;;;;;;;;;:::i;19708:103::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;22277:293::-;;;;;;;;;;-1:-1:-1;22277:293:0;;;;;:::i;:::-;;:::i;13654:43::-;;;;;;;;;;;;13692:5;13654:43;;14213:35;;;;;;;;;;;;;;;;6014:413;;;;;;;;;;-1:-1:-1;6014:413:0;;;;;:::i;:::-;;:::i;14123:29::-;;;;;;;;;;;;;;;;12540:31;;;;;;;;;;-1:-1:-1;12540:31:0;;;;-1:-1:-1;;;;;12540:31:0;;;12692:33;;;;;;;;;;;;;;;;4772:175;;;;;;;;;;-1:-1:-1;4772:175:0;;;;;:::i;:::-;;:::i;34976:2405::-;;;;;;;;;;-1:-1:-1;34976:2405:0;;;;;:::i;:::-;;:::i;13089:40::-;;;;;;;;;;;;;;;;13619:26;;;;;;;;;;;;;;;;12963:51;;;;;;;;;;-1:-1:-1;12963:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14624:58;;;;;;;;;;-1:-1:-1;14624:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12834:33;;;;;;;;;;-1:-1:-1;12834:33:0;;;;;;;;;;;23624:341;;;;;;;;;;-1:-1:-1;23624:341:0;;;;;:::i;:::-;;:::i;42012:508::-;;;;;;;;;;-1:-1:-1;42012:508:0;;;;;:::i;:::-;;:::i;23973:182::-;;;;;;;;;;-1:-1:-1;23973:182:0;;;;;:::i;:::-;;:::i;23219:397::-;;;;;;;;;;-1:-1:-1;23219:397:0;;;;;:::i;:::-;;:::i;12503:30::-;;;;;;;;;;-1:-1:-1;12503:30:0;;;;-1:-1:-1;;;;;12503:30:0;;;43371:279;;;;;;;;;;;;;:::i;13320:39::-;;;;;;;;;;-1:-1:-1;13320:39:0;;;;;;;;13706:32;;;;;;;;;;;;;;;;21372:346;;;;;;;;;;-1:-1:-1;21372:346:0;;;;;:::i;:::-;;:::i;13368:27::-;;;;;;;;;;;;;;;;20706:300;;;;;;;;;;-1:-1:-1;20706:300:0;;;;;:::i;:::-;;:::i;4955:151::-;;;;;;;;;;-1:-1:-1;4955:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;5071:18:0;;;5044:7;5071:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4955:151;12433:33;;;;;;;;;;;;;;;;40632:982;;;;;;;;;;-1:-1:-1;40632:982:0;;;;;:::i;:::-;;:::i;13475:25::-;;;;;;;;;;;;;;;;20289:98;;;;;;;;;;;;;:::i;12578:28::-;;;;;;;;;;-1:-1:-1;12578:28:0;;;;;:::i;:::-;;:::i;12615:37::-;;;;;;;;;;;;;;;;13878:52;;;;;;;;;;;;;;;;13438:30;;;;;;;;;;;;;;;;8439:244;;;;;;;;;;-1:-1:-1;8439:244:0;;;;;:::i;:::-;;:::i;33430:219::-;;;;;;;;;;;;;:::i;13581:31::-;;;;;;;;;;;;;;;;19478:222;;;;;;;;;;;;;:::i;12402:24::-;;;;;;;;;;;;;;;;12914:42;;;;;;;;;;-1:-1:-1;12914:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19240:230;;;;;;;;;;;;;:::i;13787:36::-;;;;;;;;;;-1:-1:-1;13787:36:0;;;;;;;;39167:1457;;;;;;;;;;-1:-1:-1;39167:1457:0;;;;;:::i;:::-;;:::i;4200:100::-;4254:13;4287:5;4280:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4200:100;:::o;5114:169::-;5197:4;5214:39;429:10;5237:7;5246:6;5214:8;:39::i;:::-;-1:-1:-1;5271:4:0;5114:169;;;;;:::o;20030:194::-;8194:6;;-1:-1:-1;;;;;8194:6:0;429:10;8194:22;8186:67;;;;-1:-1:-1;;;8186:67:0;;;;;;;:::i;:::-;;;;;;;;;20116:13:::1;::::0;;;::::1;;;20115:14;20107:68;;;::::0;-1:-1:-1;;;20107:68:0;;10334:2:1;20107:68:0::1;::::0;::::1;10316:21:1::0;10373:2;10353:18;;;10346:30;10412:34;10392:18;;;10385:62;-1:-1:-1;;;10463:18:1;;;10456:39;10512:19;;20107:68:0::1;10132:405:1::0;20107:68:0::1;20186:9;:30:::0;;-1:-1:-1;;;;;;20186:30:0::1;-1:-1:-1::0;;;;;20186:30:0;;;::::1;::::0;;;::::1;::::0;;20030:194::o;34720:248::-;8194:6;;-1:-1:-1;;;;;8194:6:0;429:10;8194:22;8186:67;;;;-1:-1:-1;;;8186:67:0;;;;;;;:::i;:::-;34815:2:::1;34805:6;:12;;:31;;;;;34831:5;34821:6;:15;;34805:31;34797:76;;;::::0;-1:-1:-1;;;34797:76:0;;10744:2:1;34797:76:0::1;::::0;::::1;10726:21:1::0;;;10763:18;;;10756:30;10822:34;10802:18;;;10795:62;10874:18;;34797:76:0::1;10542:356:1::0;34797:76:0::1;34902:13;:6:::0;34911:4:::1;34902:13;:::i;:::-;34884:15;:31:::0;34931:29:::1;::::0;160:25:1;;;34931:29:0::1;::::0;148:2:1;133:18;34931:29:0::1;;;;;;;;34720:248:::0;:::o;21014:288::-;8194:6;;-1:-1:-1;;;;;8194:6:0;429:10;8194:22;8186:67;;;;-1:-1:-1;;;8186:67:0;;;;;;;:::i;:::-;21132:16:::1;4503:2:::0;21132::::1;:16;:::i;:::-;21124:3;21104:13;4609:12:::0;;;4521:108;21104:13:::1;:17;::::0;21120:1:::1;21104:17;:::i;:::-;:23;;;;:::i;:::-;21103:46;;;;:::i;:::-;21093:6;:56;;21085:110;;;::::0;-1:-1:-1;;;21085:110:0;;13015:2:1;21085:110:0::1;::::0;::::1;12997:21:1::0;13054:2;13034:18;;;13027:30;13093:34;13073:18;;;13066:62;-1:-1:-1;;;13144:18:1;;;13137:39;13193:19;;21085:110:0::1;12813:405:1::0;21085:110:0::1;21228:16;4503:2:::0;21228::::1;:16;:::i;:::-;21218:27;::::0;:6;:27:::1;:::i;:::-;21206:9;:39:::0;;;21261:33:::1;::::0;160:25:1;;;21261:33:0::1;::::0;148:2:1;133:18;21261:33:0::1;14:177:1::0;5291:492:0;5431:4;5448:36;5458:6;5466:9;5477:6;5448:9;:36::i;:::-;-1:-1:-1;;;;;5524:19:0;;5497:24;5524:19;;;:11;:19;;;;;;;;429:10;5524:33;;;;;;;;5576:26;;;;5568:79;;;;-1:-1:-1;;;5568:79:0;;13425:2:1;5568:79:0;;;13407:21:1;13464:2;13444:18;;;13437:30;13503:34;13483:18;;;13476:62;-1:-1:-1;;;13554:18:1;;;13547:38;13602:19;;5568:79:0;13223:404:1;5568:79:0;5683:57;5692:6;429:10;5733:6;5714:16;:25;5683:8;:57::i;:::-;-1:-1:-1;5771:4:0;;5291:492;-1:-1:-1;;;;5291:492:0:o;20399:295::-;8194:6;;-1:-1:-1;;;;;8194:6:0;429:10;8194:22;8186:67;;;;-1:-1:-1;;;8186:67:0;;;;;;;:::i;:::-;20521:16:::1;4503:2:::0;20521::::1;:16;:::i;:::-;20512:4;20492:13;4609:12:::0;;;4521:108;20492:13:::1;:17;::::0;20508:1:::1;20492:17;:::i;:::-;:24;;;;:::i;:::-;20491:47;;;;:::i;:::-;20481:6;:57;;20473:111;;;::::0;-1:-1:-1;;;20473:111:0;;13834:2:1;20473:111:0::1;::::0;::::1;13816:21:1::0;13873:2;13853:18;;;13846:30;13912:34;13892:18;;;13885:62;-1:-1:-1;;;13963:18:1;;;13956:39;14012:19;;20473:111:0::1;13632:405:1::0;20473:111:0::1;20620:16;4503:2:::0;20620::::1;:16;:::i;:::-;20610:27;::::0;:6;:27:::1;:::i;:::-;20595:12;:42:::0;;;20653:33:::1;::::0;160:25:1;;;20653:33:0::1;::::0;148:2:1;133:18;20653:33:0::1;14:177:1::0;5791:215:0;429:10;5879:4;5928:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5928:34:0;;;;;;;;;;5879:4;;5896:80;;5919:7;;5928:47;;5965:10;;5928:47;:::i;:::-;5896:8;:80::i;43658:237::-;43733:15;;-1:-1:-1;;;;;43733:15:0;43711:10;:38;43703:58;;;;-1:-1:-1;;;43703:58:0;;;;;;;:::i;:::-;43772:8;:15;;-1:-1:-1;;43772:15:0;43783:4;43772:15;;;43798:10;:8;:10::i;:::-;43819:8;:16;;-1:-1:-1;;43819:16:0;;;43851:36;;43871:15;160:25:1;;43851:36:0;;148:2:1;133:18;43851:36:0;;;;;;;43658:237::o;33657:340::-;33761:15;;-1:-1:-1;;;;;33761:15:0;33739:10;:38;33731:58;;;;-1:-1:-1;;;33731:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33808:30:0;;33800:79;;;;-1:-1:-1;;;33800:79:0;;14709:2:1;33800:79:0;;;14691:21:1;14748:2;14728:18;;;14721:30;14787:34;14767:18;;;14760:62;-1:-1:-1;;;14838:18:1;;;14831:34;14882:19;;33800:79:0;14507:400:1;33800:79:0;33890:15;:43;;-1:-1:-1;;;;;;33890:43:0;-1:-1:-1;;;;;33890:43:0;;;;;;;;33949:40;;;;-1:-1:-1;;33949:40:0;33657:340;:::o;4637:127::-;-1:-1:-1;;;;;4738:18:0;4711:7;4738:18;;;;;;;;;;;;4637:127::o;42528:281::-;42610:24;;42588:7;;42610:24;;42607:195;;;42686:25;;42657:26;;:54;;;;:::i;:::-;42650:61;;42528:281;:::o;42607:195::-;-1:-1:-1;42760:1:0;;42528:281::o;34303:409::-;34400:16;;;34414:1;34400:16;;;;;;;;34357:7;;;;34400:16;34414:1;34400:16;;;;;;;;-1:-1:-1;;34437:9:0;;:16;;;-1:-1:-1;;;34437:16:0;;;;34376:40;;-1:-1:-1;;;;;;34437:9:0;;;;:14;;-1:-1:-1;34437:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34427:4;34432:1;34427:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;34427:26:0;;;-1:-1:-1;;;;;34427:26:0;;;;;34482:4;34464;34469:1;34464:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34464:23:0;;;;:7;;;;;;;;;;:23;34535:16;;;34549:1;34535:16;;;;;;;;34508:24;;34535:16;;34549:1;;34535:16;;;;;;;;;-1:-1:-1;;34572:9:0;;34596:15;;34572:46;;-1:-1:-1;;;34572:46:0;;34508:43;;-1:-1:-1;;;;;;34572:9:0;;;;:23;;:46;;34613:4;;34572:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34572:46:0;;;;;;;;;;;;:::i;:::-;34562:56;;34701:3;34683:15;;34664:16;;:34;;;;:::i;:::-;34650:7;34658:1;34650:10;;;;;;;;:::i;:::-;;;;;;;:49;;;;:::i;:::-;34649:55;;;;:::i;:::-;34636:7;34644:1;34636:10;;;;;;;;:::i;:::-;;;;;;;:68;;;;:::i;:::-;34629:75;;;;34303:409;:::o;8281:150::-;8194:6;;-1:-1:-1;;;;;8194:6:0;429:10;8194:22;8186:67;;;;-1:-1:-1;;;8186:67:0;;;;;;;:::i;:::-;8374:6:::1;::::0;8353:40:::1;::::0;8390:1:::1;::::0;-1:-1:-1;;;;;8374:6:0::1;::::0;8353:40:::1;::::0;8390:1;;8353:40:::1;8404:6;:19:::0;;-1:-1:-1;;;;;;8404:19:0::1;::::0;;8281:150::o;37389:506::-;37532:15;;-1:-1:-1;;;;;37532:15:0;37510:10;:38;37502:58;;;;-1:-1:-1;;;37502:58:0;;;;;;;:::i;:::-;37602:3;37579:19;:26;;37571:90;;;;-1:-1:-1;;;37571:90:0;;16725:2:1;37571:90:0;;;16707:21:1;16764:2;16744:18;;;16737:30;16803:34;16783:18;;;16776:62;-1:-1:-1;;;16854:18:1;;;16847:49;16913:19;;37571:90:0;16523:415:1;37571:90:0;37692:4;37680:8;:16;;:33;;;;-1:-1:-1;37700:13:0;37680:33;37672:94;;;;-1:-1:-1;;;37672:94:0;;17145:2:1;37672:94:0;;;17127:21:1;17184:2;17164:18;;;17157:30;17223:34;17203:18;;;17196:62;-1:-1:-1;;;17274:18:1;;;17267:46;17330:19;;37672:94:0;16943:412:1;37672:94:0;37777:15;:37;;;;37825:16;:27;37863:13;:24;;-1:-1:-1;;37863:24:0;;;;;;;;;;37389:506::o;18963:269::-;8194:6;;-1:-1:-1;;;;;8194:6:0;429:10;8194:22;8186:67;;;;-1:-1:-1;;;8186:67:0;;;;;;;:::i;:::-;19017:14:::1;:22:::0;;-1:-1:-1;;19017:22:0::1;::::0;;19050:20:::1;:28:::0;;-1:-1:-1;;19050:28:0::1;::::0;;4609:12;;19089::::1;:28:::0;4609:12;;19128:13:::1;:29:::0;4609:12;;19168:9:::1;:25:::0;19209:15:::1;::::0;::::1;::::0;;;::::1;18963:269::o:0;21950:319::-;22062:15;;-1:-1:-1;;;;;22062:15:0;22040:10;:38;22032:58;;;;-1:-1:-1;;;22032:58:0;;;;;;;:::i;:::-;22105:4;22101:104;;22143:6;;-1:-1:-1;;;;;22143:6:0;;;22133:16;;;;22125:68;;;;-1:-1:-1;;;22125:68:0;;17562:2:1;22125:68:0;;;17544:21:1;17601:2;17581:18;;;17574:30;17640:34;17620:18;;;17613:62;-1:-1:-1;;;17691:18:1;;;17684:37;17738:19;;22125:68:0;17360:403:1;22125:68:0;-1:-1:-1;;;;;22215:39:0;;;;;;;;:31;:39;;;;;:46;;-1:-1:-1;;22215:46:0;;;;;;;;;;21950:319::o;42817:546::-;42898:15;;-1:-1:-1;;;;;42898:15:0;42876:10;:38;42868:58;;;;-1:-1:-1;;;42868:58:0;;;;;;;:::i;:::-;42964:29;:27;:29::i;:::-;42945:15;:48;;:85;;;;;43029:1;42997:29;:27;:29::i;:::-;:33;42945:85;42937:120;;;;-1:-1:-1;;;42937:120:0;;17970:2:1;42937:120:0;;;17952:21:1;18009:2;17989:18;;;17982:30;-1:-1:-1;;;18028:18:1;;;18021:52;18090:18;;42937:120:0;17768:346:1;42937:120:0;43097:1;43068:26;:30;;;43109:24;:32;;-1:-1:-1;;43109:32:0;;;43229:16;;43193:6;;43178:48;;-1:-1:-1;;;43178:48:0;;43220:4;43178:48;;;913:51:1;43248:3:0;;-1:-1:-1;;;;;43193:6:0;;;;43178:33;;886:18:1;43178:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:67;;;;:::i;:::-;:73;;;;:::i;:::-;43291:1;43272:16;:20;43312:6;;43305:50;;-1:-1:-1;;;43305:50:0;;43329:10;43305:50;;;18482:51:1;18549:18;;;18542:34;;;43154:97:0;;-1:-1:-1;;;;;;43312:6:0;;43305:23;;18455:18:1;;43305:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42857:506;42817:546::o;22822:389::-;8194:6;;-1:-1:-1;;;;;8194:6:0;429:10;8194:22;8186:67;;;;-1:-1:-1;;;8186:67:0;;;;;;;:::i;:::-;22938:14:::1;:29:::0;;;22978:15:::1;:31:::0;;;23020:10:::1;:21:::0;;;23033:8;23067:32:::1;22996:13:::0;22955:12;23067:32:::1;:::i;:::-;:45;;;;:::i;:::-;23052:12;:60:::0;23166:3:::1;23147:16;13692:5;23147:2;:16;:::i;:::-;:22;;;;:::i;:::-;23131:12;;:38;;23123:80;;;::::0;-1:-1:-1;;;23123:80:0;;19039:2:1;23123:80:0::1;::::0;::::1;19021:21:1::0;19078:2;19058:18;;;19051:30;19117:31;19097:18;;;19090:59;19166:18;;23123:80:0::1;18837:353:1::0;23123:80:0::1;22822:389:::0;;;:::o;18480:427::-;8194:6;;-1:-1:-1;;;;;8194:6:0;429:10;8194:22;8186:67;;;;-1:-1:-1;;;8186:67:0;;;;;;;:::i;:::-;18568:13:::1;::::0;;;::::1;;;18567:14;18559:50;;;::::0;-1:-1:-1;;;18559:50:0;;19397:2:1;18559:50:0::1;::::0;::::1;19379:21:1::0;19436:2;19416:18;;;19409:30;19475:25;19455:18;;;19448:53;19518:18;;18559:50:0::1;19195:347:1::0;18559:50:0::1;18648:2;18628:16;:22;;18620:74;;;;-1:-1:-1::0;;;18620:74:0::1;;;;;;;:::i;:::-;18705:13;:20:::0;;-1:-1:-1;;18736:18:0;;;;;18786:12:::1;18765:18;:33:::0;;;18830:37:::1;::::0;18851:16;;18830:37:::1;:::i;:::-;18809:18;:58:::0;18883:16:::1;::::0;::::1;::::0;;;::::1;18480:427:::0;:::o;32919:440::-;33049:15;;32996:10;;-1:-1:-1;;;;;33049:15:0;33027:10;:38;33019:58;;;;-1:-1:-1;;;33019:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33096:20:0;;33088:59;;;;-1:-1:-1;;;33088:59:0;;20157:2:1;33088:59:0;;;20139:21:1;20196:2;20176:18;;;20169:30;20235:28;20215:18;;;20208:56;20281:18;;33088:59:0;19955:350:1;33088:59:0;33185:39;;-1:-1:-1;;;33185:39:0;;33218:4;33185:39;;;913:51:1;33158:24:0;;-1:-1:-1;;;;;33185:24:0;;;;;886:18:1;;33185:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33243:46;;-1:-1:-1;;;33243:46:0;;-1:-1:-1;;;;;18500:32:1;;;33243:46:0;;;18482:51:1;18549:18;;;18542:34;;;33158:66:0;;-1:-1:-1;33243:23:0;;;;;;18455:18:1;;33243:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33305;;;-1:-1:-1;;;;;18500:32:1;;18482:51;;18564:2;18549:18;;18542:34;;;33235:54:0;;-1:-1:-1;33305:46:0;;18455:18:1;33305:46:0;;;;;;;33008:351;32919:440;;;;:::o;19819:203::-;8194:6;;-1:-1:-1;;;;;8194:6:0;429:10;8194:22;8186:67;;;;-1:-1:-1;;;8186:67:0;;;;;;;:::i;:::-;19917:9:::1;19913:102;19932:20:::0;;::::1;19913:102;;;19999:4;19973:9;:23;19983:9;;19993:1;19983:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19973:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;19973:23:0;:30;;-1:-1:-1;;19973:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19954:3;::::1;::::0;::::1;:::i;:::-;;;;19913:102;;;;19819:203:::0;;;:::o;34005:290::-;34111:15;;-1:-1:-1;;;;;34111:15:0;34089:10;:38;34081:58;;;;-1:-1:-1;;;34081:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34158:31:0;;34150:81;;;;-1:-1:-1;;;34150:81:0;;20652:2:1;34150:81:0;;;20634:21:1;20691:2;20671:18;;;20664:30;20730:34;20710:18;;;20703:62;-1:-1:-1;;;20781:18:1;;;20774:35;20826:19;;34150:81:0;20450:401:1;34150:81:0;34242:16;:45;;-1:-1:-1;;;;;;34242:45:0;-1:-1:-1;;;;;34242:45:0;;;;;;;;;;34005:290::o;4308:104::-;4364:13;4397:7;4390:14;;;;;:::i;19708:103::-;19757:16;19792:11;19785:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19785:18:0;;;;;;;;;;;;;;;;;;;;;;19708:103;:::o;22277:293::-;8194:6;;-1:-1:-1;;;;;8194:6:0;429:10;8194:22;8186:67;;;;-1:-1:-1;;;8186:67:0;;;;;;;:::i;:::-;22386:6:::1;::::0;-1:-1:-1;;;;;22386:6:0;;::::1;22378:14:::0;;::::1;::::0;22370:84:::1;;;::::0;-1:-1:-1;;;22370:84:0;;21058:2:1;22370:84:0::1;::::0;::::1;21040:21:1::0;21097:2;21077:18;;;21070:30;21136:34;21116:18;;;21109:62;21207:27;21187:18;;;21180:55;21252:19;;22370:84:0::1;20856:421:1::0;22370:84:0::1;22465:41;22494:4;22500:5;22465:28;:41::i;:::-;22522:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;22522:40:0;::::1;::::0;::::1;::::0;;;::::1;22277:293:::0;;:::o;6014:413::-;429:10;6107:4;6151:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6151:34:0;;;;;;;;;;6204:35;;;;6196:85;;;;-1:-1:-1;;;6196:85:0;;21484:2:1;6196:85:0;;;21466:21:1;21523:2;21503:18;;;21496:30;21562:34;21542:18;;;21535:62;-1:-1:-1;;;21613:18:1;;;21606:35;21658:19;;6196:85:0;21282:401:1;6196:85:0;6317:67;429:10;6340:7;6368:15;6349:16;:34;6317:8;:67::i;:::-;-1:-1:-1;6415:4:0;;6014:413;-1:-1:-1;;;6014:413:0:o;4772:175::-;4858:4;4875:42;429:10;4899:9;4910:6;4875:9;:42::i;34976:2405::-;8194:6;;-1:-1:-1;;;;;8194:6:0;429:10;8194:22;8186:67;;;;-1:-1:-1;;;8186:67:0;;;;;;;:::i;:::-;35176:13:::1;::::0;;;::::1;;;35175:14;35167:70;;;::::0;-1:-1:-1;;;35167:70:0;;21890:2:1;35167:70:0::1;::::0;::::1;21872:21:1::0;21929:2;21909:18;;;21902:30;21968:34;21948:18;;;21941:62;-1:-1:-1;;;22019:18:1;;;22012:41;22070:19;;35167:70:0::1;21688:407:1::0;35167:70:0::1;35275:2;35256:16;:21;35248:73;;;;-1:-1:-1::0;;;35248:73:0::1;;;;;;;:::i;:::-;35358:15;:22;35340:7;:14;:40;35332:83;;;::::0;-1:-1:-1;;;35332:83:0;;22302:2:1;35332:83:0::1;::::0;::::1;22284:21:1::0;22341:2;22321:18;;;22314:30;22380:32;22360:18;;;22353:60;22430:18;;35332:83:0::1;22100:354:1::0;35332:83:0::1;35451:3;35434:7;:14;:20;35426:87;;;::::0;-1:-1:-1;;;35426:87:0;;22661:2:1;35426:87:0::1;::::0;::::1;22643:21:1::0;22700:2;22680:18;;;22673:30;22739:34;22719:18;;;22712:62;-1:-1:-1;;;22790:18:1;;;22783:52;22852:19;;35426:87:0::1;22459:418:1::0;35426:87:0::1;35626:9;35622:88;35641:19:::0;;::::1;35622:88;;;35703:4;35668:19;:32;35688:8;;35697:1;35688:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35668:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35668:32:0;:39;;-1:-1:-1;;35668:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35662:3;::::1;::::0;::::1;:::i;:::-;;;;35622:88;;;;35724:9;35720:80;35739:20:::0;;::::1;35720:80;;;35793:4;35767:9;:23;35777:9;;35787:1;35777:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35767:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35767:23:0;:30;;-1:-1:-1;;35767:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35761:3;::::1;::::0;::::1;:::i;:::-;;;;35720:80;;;;35814:9;35810:351;35833:7;:14;35829:1;:18;35810:351;;;35868:14;35885:7;35893:1;35885:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;35910:26:0;::::1;;::::0;;;:18:::1;:26:::0;;;;;;;:33;;-1:-1:-1;;35910:33:0::1;35939:4;35910:33;::::0;;35885:10;-1:-1:-1;35994:26:0::1;:15;36012:8;35994:26;:::i;:::-;-1:-1:-1::0;;;;;35958:33:0;::::1;;::::0;;;:25:::1;:33;::::0;;;;:62;;;;36074:16:::1;4503:2:::0;36074::::1;:16;:::i;:::-;36052:15;36068:1;36052:18;;;;;;;;:::i;:::-;;;;;;;:39;;;;:::i;:::-;36035:56;;36106:43;36122:10;36134:6;36142;36106:15;:43::i;:::-;35853:308;;35849:3;;;;;:::i;:::-;;;;35810:351;;;-1:-1:-1::0;36208:13:0::1;:20:::0;;-1:-1:-1;;36239:18:0;;;;;36289:12:::1;36268:18;:33:::0;;;36333:37:::1;::::0;36354:16;;36333:37:::1;:::i;:::-;36312:18;:58:::0;36386:16:::1;::::0;::::1;::::0;;;::::1;36460:9;;;;;;;;;-1:-1:-1::0;;;;;36460:9:0::1;-1:-1:-1::0;;;;;36460:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36448:43:0::1;;36500:4;36507:9;;;;;;;;;-1:-1:-1::0;;;;;36507:9:0::1;-1:-1:-1::0;;;;;36507:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36448:76;::::0;-1:-1:-1;;;;;;36448:76:0::1;::::0;;;;;;-1:-1:-1;;;;;23112:15:1;;;36448:76:0::1;::::0;::::1;23094:34:1::0;23164:15;;23144:18;;;23137:43;23029:18;;36448:76:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36439:6;:85:::0;;-1:-1:-1;;;;;;36439:85:0::1;-1:-1:-1::0;;;;;36439:85:0;;;::::1;::::0;;::::1;::::0;;36535:49:::1;::::0;-1:-1:-1;36535:26:0::1;:49::i;:::-;36632:6;::::0;36595:51:::1;::::0;-1:-1:-1;;;;;36632:6:0::1;::::0;36595:28:::1;:51::i;:::-;36724:1;36700:21;:25;36692:73;;;::::0;-1:-1:-1;;;36692:73:0;;23393:2:1;36692:73:0::1;::::0;::::1;23375:21:1::0;23432:2;23412:18;;;23405:30;23471:34;23451:18;;;23444:62;-1:-1:-1;;;23522:18:1;;;23515:33;23565:19;;36692:73:0::1;23191:399:1::0;36692:73:0::1;36811:1;36784:24;36802:4;36784:9;:24::i;:::-;:28;36776:79;;;::::0;-1:-1:-1;;;36776:79:0;;23797:2:1;36776:79:0::1;::::0;::::1;23779:21:1::0;23836:2;23816:18;;;23809:30;23875:34;23855:18;;;23848:62;-1:-1:-1;;;23926:18:1;;;23919:36;23972:19;;36776:79:0::1;23595:402:1::0;36776:79:0::1;36900:9;::::0;36868:69:::1;::::0;36885:4:::1;::::0;-1:-1:-1;;;;;36900:9:0::1;36912:24;36885:4:::0;36912:9:::1;:24::i;36868:69::-;36948:9;::::0;-1:-1:-1;;;;;36948:9:0::1;:25;36981:21;37026:4;37046:24;37026:4:::0;37046:9:::1;:24::i;:::-;37085:1;37128::::0;37179:4:::1;37199:15;36948:277;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;37275:4:0::1;37258:14;:21:::0;;;37290:12:::1;:19:::0;;;37320:15:::1;:22:::0;;;37353:13:::1;:20:::0;-1:-1:-1;;;;;;;;34976:2405:0:o;23624:341::-;23747:15;;-1:-1:-1;;;;;23747:15:0;23725:10;:38;23717:58;;;;-1:-1:-1;;;23717:58:0;;;;;;;:::i;:::-;23790:9;23786:172;23805:19;;;23786:172;;;23880:8;23845:19;:32;23865:8;;23874:1;23865:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23845:32:0;;;;;;;;;;;;-1:-1:-1;23845:32:0;:43;;-1:-1:-1;;23845:43:0;;;;;;;;;;23924:8;;23933:1;23924:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23908:38:0;;23937:8;23908:38;;;;1596:14:1;1589:22;1571:41;;1559:2;1544:18;;1431:187;23908:38:0;;;;;;;;23826:3;;;;:::i;:::-;;;;23786:172;;42012:508;42115:15;;-1:-1:-1;;;;;42115:15:0;42093:10;:38;42085:58;;;;-1:-1:-1;;;42085:58:0;;;;;;;:::i;:::-;42163:24;;;;42162:25;42154:87;;;;-1:-1:-1;;;42154:87:0;;25127:2:1;42154:87:0;;;25109:21:1;25166:2;25146:18;;;25139:30;25205:34;25185:18;;;25178:62;-1:-1:-1;;;25256:18:1;;;25249:47;25313:19;;42154:87:0;24925:413:1;42154:87:0;42278:3;42260:14;:21;;:43;;;;;42302:1;42285:14;:18;42260:43;42252:82;;;;-1:-1:-1;;;42252:82:0;;25545:2:1;42252:82:0;;;25527:21:1;25584:2;25564:18;;;25557:30;25623:28;25603:18;;;25596:56;25669:18;;42252:82:0;25343:350:1;42252:82:0;42374:15;42345:26;:44;42400:24;:31;;-1:-1:-1;;42400:31:0;42427:4;42400:31;;;42442:16;:33;;;42491:21;;;;42400:24;;42491:21;42012:508;:::o;23973:182::-;8194:6;;-1:-1:-1;;;;;8194:6:0;429:10;8194:22;8186:67;;;;-1:-1:-1;;;8186:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24058:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;24058:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24113:34;;1571:41:1;;;24113:34:0::1;::::0;1544:18:1;24113:34:0::1;;;;;;;23973:182:::0;;:::o;23219:397::-;8194:6;;-1:-1:-1;;;;;8194:6:0;429:10;8194:22;8186:67;;;;-1:-1:-1;;;8186:67:0;;;;;;;:::i;:::-;23335:15:::1;:30:::0;;;23376:16:::1;:32:::0;;;23419:11:::1;:22:::0;;;23433:8;23468:34:::1;23395:13:::0;23353:12;23468:34:::1;:::i;:::-;:48;;;;:::i;:::-;23452:13;:64:::0;23571:3:::1;23552:16;13692:5;23552:2;:16;:::i;:::-;:22;;;;:::i;:::-;23535:13;;:39;;23527:81;;;::::0;-1:-1:-1;;;23527:81:0;;25900:2:1;23527:81:0::1;::::0;::::1;25882:21:1::0;25939:2;25919:18;;;25912:30;25978:31;25958:18;;;25951:59;26027:18;;23527:81:0::1;25698:353:1::0;43371:279:0;43456:15;;-1:-1:-1;;;;;43456:15:0;43434:10;:38;43426:58;;;;-1:-1:-1;;;43426:58:0;;;;;;;:::i;:::-;43495:24;:32;;-1:-1:-1;;43495:32:0;;;43522:5;43538:16;:20;;;43569:26;:30;;;43615:27;;;;43522:5;43615:27;43371:279::o;21372:346::-;8194:6;;-1:-1:-1;;;;;8194:6:0;429:10;8194:22;8186:67;;;;-1:-1:-1;;;8186:67:0;;;;;;;:::i;:::-;21495:6:::1;21475:13;4609:12:::0;;;4521:108;21475:13:::1;:17;::::0;21491:1:::1;21475:17;:::i;:::-;:26;;;;:::i;:::-;21462:9;:39;;21454:105;;;::::0;-1:-1:-1;;;21454:105:0;;26258:2:1;21454:105:0::1;::::0;::::1;26240:21:1::0;26297:2;26277:18;;;26270:30;26336:34;26316:18;;;26309:62;-1:-1:-1;;;26387:18:1;;;26380:51;26448:19;;21454:105:0::1;26056:417:1::0;21454:105:0::1;21610:4;21590:13;4609:12:::0;;;4521:108;21590:13:::1;:17;::::0;21606:1:::1;21590:17;:::i;:::-;:24;;;;:::i;:::-;21577:9;:37;;21569:102;;;::::0;-1:-1:-1;;;21569:102:0;;26680:2:1;21569:102:0::1;::::0;::::1;26662:21:1::0;26719:2;26699:18;;;26692:30;26758:34;26738:18;;;26731:62;-1:-1:-1;;;26809:18:1;;;26802:50;26869:19;;21569:102:0::1;26478:416:1::0;21569:102:0::1;21681:18;:30:::0;21372:346::o;20706:300::-;8194:6;;-1:-1:-1;;;;;8194:6:0;429:10;8194:22;8186:67;;;;-1:-1:-1;;;8186:67:0;;;;;;;:::i;:::-;20829:16:::1;4503:2:::0;20829::::1;:16;:::i;:::-;20820:4;20800:13;4609:12:::0;;;4521:108;20800:13:::1;:17;::::0;20816:1:::1;20800:17;:::i;:::-;:24;;;;:::i;:::-;20799:47;;;;:::i;:::-;20789:6;:57;;20781:112;;;::::0;-1:-1:-1;;;20781:112:0;;27101:2:1;20781:112:0::1;::::0;::::1;27083:21:1::0;27140:2;27120:18;;;27113:30;27179:34;27159:18;;;27152:62;-1:-1:-1;;;27230:18:1;;;27223:40;27280:19;;20781:112:0::1;26899:406:1::0;20781:112:0::1;20930:16;4503:2:::0;20930::::1;:16;:::i;:::-;20920:27;::::0;:6;:27:::1;:::i;:::-;20904:13;:43:::0;;;20963:35:::1;::::0;160:25:1;;;20963:35:0::1;::::0;148:2:1;133:18;20963:35:0::1;14:177:1::0;40632:982:0;40753:15;;40707:4;;-1:-1:-1;;;;;40753:15:0;40731:10;:38;40723:58;;;;-1:-1:-1;;;40723:58:0;;;;;;;:::i;:::-;40841:19;;40818:20;;:42;;;;:::i;:::-;40800:15;:60;40792:106;;;;-1:-1:-1;;;40792:106:0;;27512:2:1;40792:106:0;;;27494:21:1;;;27531:18;;;27524:30;27590:34;27570:18;;;27563:62;27642:18;;40792:106:0;27310:356:1;40792:106:0;40928:4;40917:7;:15;;40909:70;;;;-1:-1:-1;;;40909:70:0;;27873:2:1;40909:70:0;;;27855:21:1;27912:2;27892:18;;;27885:30;27951:34;27931:18;;;27924:62;-1:-1:-1;;;28002:18:1;;;27995:40;28052:19;;40909:70:0;27671:406:1;40909:70:0;41013:15;40990:20;:38;41130:6;;41115:22;;-1:-1:-1;;;41115:22:0;;-1:-1:-1;;;;;41130:6:0;;;41115:22;;;913:51:1;41084:28:0;;41115:4;;:14;;886:18:1;;41115:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41084:53;-1:-1:-1;41188:20:0;41245:5;41211:31;41235:7;41084:53;41211:31;:::i;:::-;:39;;;;:::i;:::-;41188:62;-1:-1:-1;41344:16:0;;41340:102;;41392:6;;41376:54;;-1:-1:-1;;;;;41392:6:0;41408;41417:12;41376:15;:54::i;:::-;41555:6;;41573:11;;;-1:-1:-1;;;;;;41573:11:0;;;;-1:-1:-1;;;;;41555:6:0;;;;;;41573:9;;:11;;;;;41518:19;;41573:11;;;;;;;41518:19;41555:6;41573:11;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41602:4:0;;40632:982;-1:-1:-1;;;;;;;;40632:982:0:o;20289:98::-;8194:6;;-1:-1:-1;;;;;8194:6:0;429:10;8194:22;8186:67;;;;-1:-1:-1;;;8186:67:0;;;;;;;:::i;:::-;20351:20:::1;:28:::0;;-1:-1:-1;;20351:28:0::1;::::0;;20289:98::o;12578:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12578:28:0;;-1:-1:-1;12578:28:0;:::o;8439:244::-;8194:6;;-1:-1:-1;;;;;8194:6:0;429:10;8194:22;8186:67;;;;-1:-1:-1;;;8186:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8528:22:0;::::1;8520:73;;;::::0;-1:-1:-1;;;8520:73:0;;28284:2:1;8520:73:0::1;::::0;::::1;28266:21:1::0;28323:2;28303:18;;;28296:30;28362:34;28342:18;;;28335:62;-1:-1:-1;;;28413:18:1;;;28406:36;28459:19;;8520:73:0::1;28082:402:1::0;8520:73:0::1;8630:6;::::0;8609:38:::1;::::0;-1:-1:-1;;;;;8609:38:0;;::::1;::::0;8630:6:::1;::::0;8609:38:::1;::::0;8630:6:::1;::::0;8609:38:::1;8658:6;:17:::0;;-1:-1:-1;;;;;;8658:17:0::1;-1:-1:-1::0;;;;;8658:17:0;;;::::1;::::0;;;::::1;::::0;;8439:244::o;33430:219::-;33508:15;;-1:-1:-1;;;;;33508:15:0;33486:10;:38;33478:58;;;;-1:-1:-1;;;33478:58:0;;;;;;;:::i;:::-;33583;;33547:12;;33591:10;;33615:21;;33547:12;33583:58;33547:12;33583:58;33615:21;33591:10;33583:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19478:222;19550:15;;-1:-1:-1;;;;;19550:15:0;19528:10;:38;19520:58;;;;-1:-1:-1;;;19520:58:0;;;;;;;:::i;:::-;19606:1;19589:14;:18;;;19618:12;:16;;;19645:15;:19;;;19675:13;:17;19478:222::o;19240:230::-;19312:15;;-1:-1:-1;;;;;19312:15:0;19290:10;:38;19282:58;;;;-1:-1:-1;;;19282:58:0;;;;;;;:::i;:::-;19368:3;19351:14;:20;;;19382:12;:18;;;19411:15;:21;;;19443:13;:19;19240:230::o;39167:1457::-;39273:15;;-1:-1:-1;;;;;39273:15:0;39251:10;:38;39243:58;;;;-1:-1:-1;;;39243:58:0;;;;;;;:::i;:::-;39330:4;39320:7;:14;;39312:80;;;;-1:-1:-1;;;39312:80:0;;28901:2:1;39312:80:0;;;28883:21:1;28940:2;28920:18;;;28913:30;28979:34;28959:18;;;28952:62;-1:-1:-1;;;29030:18:1;;;29023:51;29091:19;;39312:80:0;28699:417:1;39312:80:0;39453:19;;39435:37;;:15;:37;:::i;:::-;39411:20;;:61;;39403:87;;;;-1:-1:-1;;;39403:87:0;;29456:2:1;39403:87:0;;;29438:21:1;29495:2;29475:18;;;29468:30;-1:-1:-1;;;29514:18:1;;;29507:43;29567:18;;39403:87:0;29254:337:1;39403:87:0;39524:15;39501:20;:38;39577:6;;39570:39;;-1:-1:-1;;;39570:39:0;;39603:4;39570:39;;;913:51:1;39550:17:0;;-1:-1:-1;;;;;39577:6:0;;39570:24;;886:18:1;;39570:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39550:59;;39620:20;39643:24;39661:4;39643:9;:24::i;:::-;39620:47;-1:-1:-1;39678:16:0;39719:5;39697:19;39709:7;39697:9;:19;:::i;:::-;:27;;;;:::i;:::-;39871:6;;39895:9;;39864:52;;-1:-1:-1;;;39864:52:0;;-1:-1:-1;;;;;39895:9:0;;;39864:52;;;18482:51:1;18549:18;;;18542:34;;;39678:46:0;;-1:-1:-1;39763:21:0;;39871:6;;;39864:22;;18455:18:1;;39864:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;39962:9:0;;:234;;-1:-1:-1;;;39962:234:0;;-1:-1:-1;;;;;39962:9:0;;;;:28;;:234;;40013:4;;40033:8;;39962:9;;;;40013:4;;40170:15;;39962:234;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40209:25;40264:12;40237:24;40255:4;40237:9;:24::i;:::-;:39;;;;:::i;:::-;40209:67;-1:-1:-1;40290:21:0;;40287:118;;40327:66;40351:4;40366:6;40375:17;40327:15;:66::i;:::-;40417:23;40443:41;40467:17;40443:21;:41;:::i;:::-;40417:67;-1:-1:-1;40500:19:0;;40497:80;;40535:30;40549:15;40535:13;:30::i;:::-;40594:22;;40607:8;;40594:22;;;;;39232:1392;;;;;;39167:1457;:::o;7356:380::-;-1:-1:-1;;;;;7492:19:0;;7484:68;;;;-1:-1:-1;;;7484:68:0;;30660:2:1;7484:68:0;;;30642:21:1;30699:2;30679:18;;;30672:30;30738:34;30718:18;;;30711:62;-1:-1:-1;;;30789:18:1;;;30782:34;30833:19;;7484:68:0;30458:400:1;7484:68:0;-1:-1:-1;;;;;7571:21:0;;7563:68;;;;-1:-1:-1;;;7563:68:0;;31065:2:1;7563:68:0;;;31047:21:1;31104:2;31084:18;;;31077:30;31143:34;31123:18;;;31116:62;-1:-1:-1;;;31194:18:1;;;31187:32;31236:19;;7563:68:0;30863:398:1;7563:68:0;-1:-1:-1;;;;;7644:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7696:32;;160:25:1;;;7696:32:0;;133:18:1;7696:32:0;;;;;;;7356:380;;;:::o;24163:6248::-;-1:-1:-1;;;;;24261:18:0;;24253:68;;;;-1:-1:-1;;;24253:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24340:16:0;;24332:64;;;;-1:-1:-1;;;24332:64:0;;;;;;;:::i;:::-;24424:1;24415:6;:10;24407:52;;;;-1:-1:-1;;;24407:52:0;;32278:2:1;24407:52:0;;;32260:21:1;32317:2;32297:18;;;32290:30;32356:31;32336:18;;;32329:59;32405:18;;24407:52:0;32076:353:1;24407:52:0;24484:13;;;;;;;24480:132;;-1:-1:-1;;;;;24521:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;24550:23:0;;;;;;:19;:23;;;;;;;;24521:52;24513:87;;;;-1:-1:-1;;;24513:87:0;;32636:2:1;24513:87:0;;;32618:21:1;32675:2;32655:18;;;32648:30;-1:-1:-1;;;32694:18:1;;;32687:52;32756:18;;24513:87:0;32434:346:1;24513:87:0;30513:18;;30498:12;:33;24627:26;:43;;;;-1:-1:-1;24657:13:0;;;;;;;24627:43;24624:235;;;-1:-1:-1;;;;;24696:15:0;;;;;;:9;:15;;;;;;;;24695:16;:34;;;;-1:-1:-1;;;;;;24716:13:0;;;;;;:9;:13;;;;;;;;24715:14;24695:34;24694:53;;;-1:-1:-1;8132:6:0;;-1:-1:-1;;;;;24734:13:0;;;8132:6;;24734:13;24694:53;:78;;;-1:-1:-1;;;;;;24751:21:0;;24765:6;24751:21;24694:78;24686:161;;;;-1:-1:-1;;;24686:161:0;;32987:2:1;24686:161:0;;;32969:21:1;33026:2;33006:18;;;32999:30;33065:34;33045:18;;;33038:62;33136:34;33116:18;;;33109:62;-1:-1:-1;;;33187:19:1;;;33180:37;33234:19;;24686:161:0;32785:474:1;24686:161:0;-1:-1:-1;;;;;24874:24:0;;;;;;:18;:24;;;;;;;;24871:610;;;-1:-1:-1;;;;;24917:29:0;;;;;;:25;:29;;;;;;;;24914:556;;;-1:-1:-1;;;;;25024:31:0;;;;;;:25;:31;;;;;;25059:15;-1:-1:-1;25024:50:0;25016:78;;;;-1:-1:-1;;;25016:78:0;;33466:2:1;25016:78:0;;;33448:21:1;33505:2;33485:18;;;33478:30;-1:-1:-1;;;33524:18:1;;;33517:45;33579:18;;25016:78:0;33264:339:1;25016:78:0;25131:23;:21;:23::i;:::-;25121:6;:33;;25113:98;;;;-1:-1:-1;;;25113:98:0;;33810:2:1;25113:98:0;;;33792:21:1;33849:2;33829:18;;;33822:30;33888:34;33868:18;;;33861:62;-1:-1:-1;;;33939:18:1;;;33932:50;33999:19;;25113:98:0;33608:416:1;25113:98:0;25264:26;:15;25282:8;25264:26;:::i;:::-;-1:-1:-1;;;;;25230:31:0;;;;;;:25;:31;;;;;:60;24914:556;;;-1:-1:-1;;;;;25316:23:0;;;;;;:19;:23;;;;;;;;25312:158;;25359:95;;-1:-1:-1;;;25359:95:0;;34231:2:1;25359:95:0;;;34213:21:1;34270:2;34250:18;;;34243:30;34309:34;34289:18;;;34282:62;34380:34;34360:18;;;34353:62;-1:-1:-1;;;34431:19:1;;;34424:52;34493:19;;25359:95:0;34029:489:1;25312:158:0;25504:14;;;;;;;25501:1662;;;8132:6;;-1:-1:-1;;;;;25538:15:0;;;8132:6;;25538:15;;;;:32;;-1:-1:-1;8132:6:0;;-1:-1:-1;;;;;25557:13:0;;;8132:6;;25557:13;;25538:32;:52;;;;-1:-1:-1;;;;;;25574:16:0;;;;25538:52;:77;;;;-1:-1:-1;;;;;;25594:21:0;;25608:6;25594:21;;25538:77;:107;;;;-1:-1:-1;;;;;;25620:25:0;;;;;;:19;:25;;;;;;;;25619:26;25538:107;:135;;;;-1:-1:-1;;;;;;25650:23:0;;;;;;:19;:23;;;;;;;;25649:24;25538:135;25534:1618;;;25849:20;;;;25845:506;;;25911:9;;-1:-1:-1;;;;;25897:24:0;;;25911:9;;25897:24;;;;:49;;-1:-1:-1;25939:6:0;;-1:-1:-1;;;;;25925:21:0;;;25939:6;;25925:21;;25897:49;25893:439;;;26024:16;26039:1;26024:12;:16;:::i;:::-;26011:9;25982:39;;;;:28;:39;;;;;;:58;:113;;;;-1:-1:-1;26079:16:0;26094:1;26079:12;:16;:::i;:::-;-1:-1:-1;;;;;26044:32:0;;;;;;:28;:32;;;;;;:51;25982:113;25974:179;;;;-1:-1:-1;;;25974:179:0;;34725:2:1;25974:179:0;;;34707:21:1;34764:2;34744:18;;;34737:30;34803:34;34783:18;;;34776:62;-1:-1:-1;;;34854:18:1;;;34847:51;34915:19;;25974:179:0;34523:417:1;25974:179:0;26209:9;26180:39;;;;:28;:39;;;;;;26222:12;26180:54;;;;-1:-1:-1;;;;;26261:32:0;;;;;;:47;25893:439;-1:-1:-1;;;;;26420:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;26456:35:0;;;;;;:31;:35;;;;;;;;26455:36;26420:71;26416:721;;;26534:12;;26524:6;:22;;26516:75;;;;-1:-1:-1;;;26516:75:0;;35147:2:1;26516:75:0;;;35129:21:1;35186:2;35166:18;;;35159:30;35225:34;35205:18;;;35198:62;-1:-1:-1;;;35276:18:1;;;35269:38;35324:19;;26516:75:0;34945:404:1;26516:75:0;26648:9;;26631:13;26641:2;26631:9;:13::i;:::-;26622:22;;:6;:22;:::i;:::-;:35;;26614:72;;;;-1:-1:-1;;;26614:72:0;;35556:2:1;26614:72:0;;;35538:21:1;35595:2;35575:18;;;35568:30;-1:-1:-1;;;35614:18:1;;;35607:54;35678:18;;26614:72:0;35354:348:1;26614:72:0;26416:721;;;-1:-1:-1;;;;;26763:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;26797:37:0;;;;;;:31;:37;;;;;;;;26796:38;26763:71;26759:378;;;26877:13;;26867:6;:23;;26859:78;;;;-1:-1:-1;;;26859:78:0;;35909:2:1;26859:78:0;;;35891:21:1;35948:2;35928:18;;;35921:30;35987:34;35967:18;;;35960:62;-1:-1:-1;;;36038:18:1;;;36031:40;36088:19;;26859:78:0;35707:406:1;26759:378:0;-1:-1:-1;;;;;26985:35:0;;;;;;:31;:35;;;;;;;;26980:157;;27079:9;;27062:13;27072:2;27062:9;:13::i;:::-;27053:22;;:6;:22;:::i;:::-;:35;;27045:72;;;;-1:-1:-1;;;27045:72:0;;35556:2:1;27045:72:0;;;35538:21:1;35595:2;35575:18;;;35568:30;-1:-1:-1;;;35614:18:1;;;35607:54;35678:18;;27045:72:0;35354:348:1;27045:72:0;27175:28;27206:24;27224:4;27206:9;:24::i;:::-;27290:18;;27175:55;;-1:-1:-1;27266:42:0;;;;;;;27324:22;;-1:-1:-1;27335:11:0;;;;;;;27324:22;:35;;;;-1:-1:-1;27351:8:0;;;;27350:9;27324:35;:71;;;;-1:-1:-1;;;;;;27364:31:0;;;;;;:25;:31;;;;;;;;27363:32;27324:71;:101;;;;-1:-1:-1;;;;;;27400:25:0;;;;;;:19;:25;;;;;;;;27399:26;27324:101;:129;;;;-1:-1:-1;;;;;;27430:23:0;;;;;;:19;:23;;;;;;;;27429:24;27324:129;27321:232;;;27470:8;:15;;-1:-1:-1;;27470:15:0;27481:4;27470:15;;;27500:10;:8;:10::i;:::-;27525:8;:16;;-1:-1:-1;;27525:16:0;;;27321:232;27569:8;;;;27568:9;:42;;;;-1:-1:-1;;;;;;27581:29:0;;;;;;:25;:29;;;;;;;;27568:42;:59;;;;-1:-1:-1;27614:13:0;;;;27568:59;:114;;;;;27667:15;;27650:14;;:32;;;;:::i;:::-;27631:15;:51;;27568:114;:144;;;;-1:-1:-1;;;;;;27687:25:0;;;;;;:19;:25;;;;;;;;27686:26;27568:144;27565:204;;;27728:29;:27;:29::i;:::-;-1:-1:-1;;;;;27899:25:0;;27781:12;27899:25;;;:19;:25;;;;;;27796:4;;27899:25;;;:52;;-1:-1:-1;;;;;;27928:23:0;;;;;;:19;:23;;;;;;;;27899:52;27896:99;;;-1:-1:-1;27978:5:0;27896:99;28015:12;28042:20;28156:7;28153:2205;;;30513:18;;30498:12;:33;28218:60;;;;-1:-1:-1;;;;;;28247:31:0;;;;;;:25;:31;;;;;;;;28218:60;:94;;;;-1:-1:-1;;;;;;28283:29:0;;;;;;:25;:29;;;;;;;;28282:30;28218:94;:122;;;;-1:-1:-1;;;;;;28317:23:0;;;;;;:19;:23;;;;;;;;28316:24;28218:122;:142;;;;;28359:1;28344:12;;:16;28218:142;28215:1832;;;30513:18;;30498:12;:33;28398:330;;28707:1;28691:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;28398:330:0;-1:-1:-1;;;;;28752:13:0;;;;;;:9;:13;;;;;;;;28748:210;;-1:-1:-1;;;;;28789:13:0;;;;;;:9;:13;;;;;:20;;-1:-1:-1;;28789:20:0;28805:4;28789:20;;;;;;28832:10;:15;;28805:4;;28832:10;;:15;;28805:4;;28832:15;:::i;:::-;;;;-1:-1:-1;;28870:11:0;:20;;;;;;;-1:-1:-1;28870:20:0;;;;;;;;-1:-1:-1;;;;;;28870:20:0;-1:-1:-1;;;;;28870:20:0;;;;;;;;28918;;913:51:1;;;28918:20:0;;901:2:1;886:18;28918:20:0;;;;;;;28748:210;13692:5;28994:12;;28985:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;28978:42;;29083:12;;29065:15;;29058:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;29036:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;29159:12:0;;29142:14;;29135:21;;:4;:21;:::i;:::-;:36;;;;:::i;:::-;29114:17;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;29225:12:0;;29212:10;;29205:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;29190:47;;28215:1832;;;-1:-1:-1;;;;;29302:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;29351:1;29335:13;;:17;29302:50;29298:749;;;13692:5;29388:13;;29379:6;:22;;;;:::i;:::-;:36;;;;:::i;:::-;29372:43;;29482:13;;29463:16;;29456:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;29434:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;29560:13:0;;29542:15;;29535:22;;:4;:22;:::i;:::-;:38;;;;:::i;:::-;29514:17;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;29628:12:0;;29614:11;;29607:18;;:4;:18;:::i;29298:749::-;-1:-1:-1;;;;;29703:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;29753:1;29738:12;;:16;29703:51;29700:347;;;13692:5;29788:12;;29779:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;29772:42;;29877:12;;29859:15;;29852:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;29830:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;29953:12:0;;29936:14;;29929:21;;:4;:21;:::i;:::-;:36;;;;:::i;:::-;29908:17;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;30019:12:0;;30006:10;;29999:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;29984:47;;29700:347;30078:8;;30075:235;;30110:42;30126:4;30140;30147;30110:15;:42::i;:::-;30174:16;;30171:124;;30214:61;30238:4;30253:6;30262:12;30214:15;:61::i;:::-;30332:14;30342:4;30332:14;;:::i;:::-;;;28153:2205;30370:33;30386:4;30392:2;30396:6;30370:15;:33::i;:::-;24242:6169;;;;;24163:6248;;;:::o;31647:1264::-;31688:23;31714:24;31732:4;31714:9;:24::i;:::-;31688:50;;31749:25;31798:17;;31777:18;;:38;;;;:::i;:::-;31749:66;-1:-1:-1;31839:20:0;;;:46;;-1:-1:-1;31863:22:0;;31839:46;31836:60;;;31888:7;;31647:1264::o;31836:60::-;31929:18;;;:23;;;:::i;:::-;31911:15;:41;31908:113;;;31986:18;;;:23;;;:::i;:::-;31968:41;;31908:113;32033:12;32115:23;32200:1;32180:17;32159:18;;32141:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;32115:86;-1:-1:-1;32222:51:0;32239:33;32115:86;32239:15;:33;:::i;:::-;32222:16;:51::i;:::-;32477:18;;32316:21;;;;32295:18;;32477:20;;32496:1;;32477:20;:::i;:::-;32456:42;;:17;:42;:::i;:::-;32435:17;;32422:30;;:10;:30;:::i;:::-;:77;;;;:::i;:::-;32397:102;-1:-1:-1;32512:33:0;32397:102;32512:33;;:::i;:::-;;;32592:15;32570:18;;:37;;;;;;;:::i;:::-;;;;-1:-1:-1;32640:33:0;;-1:-1:-1;32658:15:0;32640;:33;:::i;:::-;32618:17;;:56;;;;;;;:::i;:::-;;;;-1:-1:-1;;32698:19:0;;;;;:42;;;32739:1;32721:15;:19;32698:42;32695:119;;;32756:46;32769:15;32786;32756:12;:46::i;:::-;32847:16;;32839:64;;-1:-1:-1;;;;;32847:16:0;;;;32877:21;;32839:64;;;;32877:21;32847:16;32839:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;31647:1264:0:o;22578:236::-;-1:-1:-1;;;;;22661:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;22661:39:0;;;;;;;22711;22661:31;:39;22711:26;:39::i;6435:614::-;-1:-1:-1;;;;;6575:20:0;;6567:70;;;;-1:-1:-1;;;6567:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6656:23:0;;6648:71;;;;-1:-1:-1;;;6648:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6756:17:0;;6732:21;6756:17;;;;;;;;;;;6792:23;;;;6784:74;;;;-1:-1:-1;;;6784:74:0;;36320:2:1;6784:74:0;;;36302:21:1;36359:2;36339:18;;;36332:30;36398:34;36378:18;;;36371:62;-1:-1:-1;;;36449:18:1;;;36442:36;36495:19;;6784:74:0;36118:402:1;6784:74:0;-1:-1:-1;;;;;6894:17:0;;;:9;:17;;;;;;;;;;;6914:22;;;6894:42;;6958:20;;;;;;;;:30;;6930:6;;6894:9;6958:30;;6930:6;;6958:30;:::i;:::-;;;;;;;;7023:9;-1:-1:-1;;;;;7006:35:0;7015:6;-1:-1:-1;;;;;7006:35:0;;7034:6;7006:35;;;;160:25:1;;148:2;133:18;;14:177;7006:35:0;;;;;;;;6556:493;6435:614;;;:::o;21730:207::-;-1:-1:-1;;;;;21818:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;21818:52:0;;;;;;;;;;21886:43;;36693:51:1;;;36760:18;;;36753:50;21886:43:0;;36666:18:1;21886:43:0;;;;;;;21730:207;;:::o;41622:382::-;41710:16;;;41724:1;41710:16;;;;;;;;41686:21;;41710:16;;;;;;;;-1:-1:-1;;41747:9:0;;:16;;;-1:-1:-1;;;41747:16:0;;;;41686:40;;-1:-1:-1;;;;;;41747:9:0;;;;:14;;-1:-1:-1;41747:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41737:4;41742:1;41737:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;41737:26:0;;;-1:-1:-1;;;;;41737:26:0;;;;;41792:4;41774;41779:1;41774:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41774:23:0;;;:7;;;;;;;;;:23;41810:9;;:186;;-1:-1:-1;;;41810:186:0;;:9;;;:60;;41878:11;;41810:186;;:9;;41921:4;;41948:6;;41970:15;;41810:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41675:329;41622:382;:::o;37907:1252::-;37993:15;37976:14;:32;;;38029:20;:38;38105:6;;38098:39;;-1:-1:-1;;;38098:39:0;;38131:4;38098:39;;;913:51:1;-1:-1:-1;;;;;;;38105:6:0;;38098:24;;886:18:1;;38098:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38078:59;;38148:20;38171:24;38189:4;38171:9;:24::i;:::-;38148:47;;38206:16;38256:5;38237:16;;38225:9;:28;;;;:::i;:::-;:36;;;;:::i;:::-;38408:6;;38432:9;;38401:52;;-1:-1:-1;;;38401:52:0;;-1:-1:-1;;;;;38432:9:0;;;38401:52;;;18482:51:1;18549:18;;;18542:34;;;38206:55:0;;-1:-1:-1;38300:21:0;;38408:6;;;38401:22;;18455:18:1;;38401:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;38499:9:0;;:234;;-1:-1:-1;;;38499:234:0;;-1:-1:-1;;;;;38499:9:0;;;;:28;;:234;;38550:4;;38570:8;;38499:9;;;;38550:4;;38707:15;;38499:234;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38746:25;38801:12;38774:24;38792:4;38774:9;:24::i;:::-;:39;;;;:::i;:::-;38746:67;-1:-1:-1;38827:21:0;;38824:118;;38864:66;38888:4;38903:6;38912:17;38864:15;:66::i;:::-;38954:23;38980:41;39004:17;38980:21;:41;:::i;:::-;38954:67;-1:-1:-1;39037:19:0;;39034:80;;39072:30;39086:15;39072:13;:30::i;:::-;39131:20;;39142:8;;39131:20;;;;;37955:1204;;;;;;37907:1252::o;30547:573::-;30699:16;;;30713:1;30699:16;;;;;;;;30675:21;;30699:16;;;;;;;;;;-1:-1:-1;30699:16:0;30675:40;;30744:4;30726;30731:1;30726:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30726:23:0;;;:7;;;;;;;;;;:23;;;;30770:9;;:16;;;-1:-1:-1;;;30770:16:0;;;;:9;;;;;:14;;:16;;;;;30726:7;;30770:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30760:4;30765:1;30760:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30760:26:0;;;:7;;;;;;;;;:26;30831:9;;30799:56;;30816:4;;30831:9;30843:11;30799:8;:56::i;:::-;30894:9;;:218;;-1:-1:-1;;;30894:218:0;;-1:-1:-1;;;;;30894:9:0;;;;:60;;:218;;30969:11;;30894:9;;31039:4;;31066;;31086:15;;30894:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30602:518;30547:573;:::o;31132:507::-;31312:9;;31280:56;;31297:4;;-1:-1:-1;;;;;31312:9:0;31324:11;31280:8;:56::i;:::-;31379:9;;:252;;-1:-1:-1;;;31379:252:0;;-1:-1:-1;;;;;31379:9:0;;;;:25;;31412:9;;31379:252;;31445:4;;31465:11;;31379:9;;;;31445:4;;31605:15;;31379:252;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31132:507;;:::o;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;975:131::-;-1:-1:-1;;;;;1050:31:1;;1040:42;;1030:70;;1096:1;1093;1086:12;1030:70;975:131;:::o;1111:315::-;1179:6;1187;1240:2;1228:9;1219:7;1215:23;1211:32;1208:52;;;1256:1;1253;1246:12;1208:52;1295:9;1282:23;1314:31;1339:5;1314:31;:::i;:::-;1364:5;1416:2;1401:18;;;;1388:32;;-1:-1:-1;;;1111:315:1:o;1623:247::-;1682:6;1735:2;1723:9;1714:7;1710:23;1706:32;1703:52;;;1751:1;1748;1741:12;1703:52;1790:9;1777:23;1809:31;1834:5;1809:31;:::i;:::-;1859:5;1623:247;-1:-1:-1;;;1623:247:1:o;1875:180::-;1934:6;1987:2;1975:9;1966:7;1962:23;1958:32;1955:52;;;2003:1;2000;1993:12;1955:52;-1:-1:-1;2026:23:1;;1875:180;-1:-1:-1;1875:180:1:o;2060:456::-;2137:6;2145;2153;2206:2;2194:9;2185:7;2181:23;2177:32;2174:52;;;2222:1;2219;2212:12;2174:52;2261:9;2248:23;2280:31;2305:5;2280:31;:::i;:::-;2330:5;-1:-1:-1;2387:2:1;2372:18;;2359:32;2400:33;2359:32;2400:33;:::i;:::-;2060:456;;2452:7;;-1:-1:-1;;;2506:2:1;2491:18;;;;2478:32;;2060:456::o;2918:118::-;3004:5;2997:13;2990:21;2983:5;2980:32;2970:60;;3026:1;3023;3016:12;3041:377;3115:6;3123;3131;3184:2;3172:9;3163:7;3159:23;3155:32;3152:52;;;3200:1;3197;3190:12;3152:52;3236:9;3223:23;3213:33;;3293:2;3282:9;3278:18;3265:32;3255:42;;3347:2;3336:9;3332:18;3319:32;3360:28;3382:5;3360:28;:::i;:::-;3407:5;3397:15;;;3041:377;;;;;:::o;3423:382::-;3488:6;3496;3549:2;3537:9;3528:7;3524:23;3520:32;3517:52;;;3565:1;3562;3555:12;3517:52;3604:9;3591:23;3623:31;3648:5;3623:31;:::i;:::-;3673:5;-1:-1:-1;3730:2:1;3715:18;;3702:32;3743:30;3702:32;3743:30;:::i;:::-;3792:7;3782:17;;;3423:382;;;;;:::o;3810:316::-;3887:6;3895;3903;3956:2;3944:9;3935:7;3931:23;3927:32;3924:52;;;3972:1;3969;3962:12;3924:52;-1:-1:-1;;3995:23:1;;;4065:2;4050:18;;4037:32;;-1:-1:-1;4116:2:1;4101:18;;;4088:32;;3810:316;-1:-1:-1;3810:316:1:o;4131:388::-;4199:6;4207;4260:2;4248:9;4239:7;4235:23;4231:32;4228:52;;;4276:1;4273;4266:12;4228:52;4315:9;4302:23;4334:31;4359:5;4334:31;:::i;:::-;4384:5;-1:-1:-1;4441:2:1;4426:18;;4413:32;4454:33;4413:32;4454:33;:::i;4524:367::-;4587:8;4597:6;4651:3;4644:4;4636:6;4632:17;4628:27;4618:55;;4669:1;4666;4659:12;4618:55;-1:-1:-1;4692:20:1;;4735:18;4724:30;;4721:50;;;4767:1;4764;4757:12;4721:50;4804:4;4796:6;4792:17;4780:29;;4864:3;4857:4;4847:6;4844:1;4840:14;4832:6;4828:27;4824:38;4821:47;4818:67;;;4881:1;4878;4871:12;4818:67;4524:367;;;;;:::o;4896:566::-;4988:6;4996;5004;5057:2;5045:9;5036:7;5032:23;5028:32;5025:52;;;5073:1;5070;5063:12;5025:52;5113:9;5100:23;5146:18;5138:6;5135:30;5132:50;;;5178:1;5175;5168:12;5132:50;5217:70;5279:7;5270:6;5259:9;5255:22;5217:70;:::i;:::-;5306:8;;-1:-1:-1;5191:96:1;-1:-1:-1;;5391:2:1;5376:18;;5363:32;5404:28;5363:32;5404:28;:::i;5467:461::-;5520:3;5558:5;5552:12;5585:6;5580:3;5573:19;5611:4;5640:2;5635:3;5631:12;5624:19;;5677:2;5670:5;5666:14;5698:1;5708:195;5722:6;5719:1;5716:13;5708:195;;;5787:13;;-1:-1:-1;;;;;5783:39:1;5771:52;;5843:12;;;;5878:15;;;;5819:1;5737:9;5708:195;;;-1:-1:-1;5919:3:1;;5467:461;-1:-1:-1;;;;;5467:461:1:o;5933:261::-;6112:2;6101:9;6094:21;6075:4;6132:56;6184:2;6173:9;6169:18;6161:6;6132:56;:::i;6199:127::-;6260:10;6255:3;6251:20;6248:1;6241:31;6291:4;6288:1;6281:15;6315:4;6312:1;6305:15;6331:275;6402:2;6396:9;6467:2;6448:13;;-1:-1:-1;;6444:27:1;6432:40;;6502:18;6487:34;;6523:22;;;6484:62;6481:88;;;6549:18;;:::i;:::-;6585:2;6578:22;6331:275;;-1:-1:-1;6331:275:1:o;6611:183::-;6671:4;6704:18;6696:6;6693:30;6690:56;;;6726:18;;:::i;:::-;-1:-1:-1;6771:1:1;6767:14;6783:4;6763:25;;6611:183::o;6799:662::-;6853:5;6906:3;6899:4;6891:6;6887:17;6883:27;6873:55;;6924:1;6921;6914:12;6873:55;6960:6;6947:20;6986:4;7010:60;7026:43;7066:2;7026:43;:::i;:::-;7010:60;:::i;:::-;7104:15;;;7190:1;7186:10;;;;7174:23;;7170:32;;;7135:12;;;;7214:15;;;7211:35;;;7242:1;7239;7232:12;7211:35;7278:2;7270:6;7266:15;7290:142;7306:6;7301:3;7298:15;7290:142;;;7372:17;;7360:30;;7410:12;;;;7323;;7290:142;;;-1:-1:-1;7450:5:1;6799:662;-1:-1:-1;;;;;;6799:662:1:o;7466:1915::-;7665:6;7673;7681;7689;7697;7705;7713;7766:3;7754:9;7745:7;7741:23;7737:33;7734:53;;;7783:1;7780;7773:12;7734:53;7823:9;7810:23;7852:18;7893:2;7885:6;7882:14;7879:34;;;7909:1;7906;7899:12;7879:34;7947:6;7936:9;7932:22;7922:32;;7992:7;7985:4;7981:2;7977:13;7973:27;7963:55;;8014:1;8011;8004:12;7963:55;8050:2;8037:16;8072:4;8096:60;8112:43;8152:2;8112:43;:::i;8096:60::-;8190:15;;;8272:1;8268:10;;;;8260:19;;8256:28;;;8221:12;;;;8296:19;;;8293:39;;;8328:1;8325;8318:12;8293:39;8352:11;;;;8372:217;8388:6;8383:3;8380:15;8372:217;;;8468:3;8455:17;8485:31;8510:5;8485:31;:::i;:::-;8529:18;;8405:12;;;;8567;;;;8372:217;;;8608:5;-1:-1:-1;;8651:18:1;;8638:32;;-1:-1:-1;;8682:16:1;;;8679:36;;;8711:1;8708;8701:12;8679:36;8734:63;8789:7;8778:8;8767:9;8763:24;8734:63;:::i;:::-;8724:73;;8844:2;8833:9;8829:18;8816:32;8806:42;;8901:2;8890:9;8886:18;8873:32;8857:48;;8930:2;8920:8;8917:16;8914:36;;;8946:1;8943;8936:12;8914:36;8985:72;9049:7;9038:8;9027:9;9023:24;8985:72;:::i;:::-;9076:8;;-1:-1:-1;8959:98:1;-1:-1:-1;9164:3:1;9149:19;;9136:33;;-1:-1:-1;9181:16:1;;;9178:36;;;9210:1;9207;9200:12;9178:36;;9249:72;9313:7;9302:8;9291:9;9287:24;9249:72;:::i;:::-;7466:1915;;;;-1:-1:-1;7466:1915:1;;-1:-1:-1;7466:1915:1;;;;9223:98;;-1:-1:-1;;;7466:1915:1:o;9386:380::-;9465:1;9461:12;;;;9508;;;9529:61;;9583:4;9575:6;9571:17;9561:27;;9529:61;9636:2;9628:6;9625:14;9605:18;9602:38;9599:161;;9682:10;9677:3;9673:20;9670:1;9663:31;9717:4;9714:1;9707:15;9745:4;9742:1;9735:15;9599:161;;9386:380;;;:::o;9771:356::-;9973:2;9955:21;;;9992:18;;;9985:30;10051:34;10046:2;10031:18;;10024:62;10118:2;10103:18;;9771:356::o;10903:127::-;10964:10;10959:3;10955:20;10952:1;10945:31;10995:4;10992:1;10985:15;11019:4;11016:1;11009:15;11035:168;11108:9;;;11139;;11156:15;;;11150:22;;11136:37;11126:71;;11177:18;;:::i;11208:422::-;11297:1;11340:5;11297:1;11354:270;11375:7;11365:8;11362:21;11354:270;;;11434:4;11430:1;11426:6;11422:17;11416:4;11413:27;11410:53;;;11443:18;;:::i;:::-;11493:7;11483:8;11479:22;11476:55;;;11513:16;;;;11476:55;11592:22;;;;11552:15;;;;11354:270;;;11358:3;11208:422;;;;;:::o;11635:806::-;11684:5;11714:8;11704:80;;-1:-1:-1;11755:1:1;11769:5;;11704:80;11803:4;11793:76;;-1:-1:-1;11840:1:1;11854:5;;11793:76;11885:4;11903:1;11898:59;;;;11971:1;11966:130;;;;11878:218;;11898:59;11928:1;11919:10;;11942:5;;;11966:130;12003:3;11993:8;11990:17;11987:43;;;12010:18;;:::i;:::-;-1:-1:-1;;12066:1:1;12052:16;;12081:5;;11878:218;;12180:2;12170:8;12167:16;12161:3;12155:4;12152:13;12148:36;12142:2;12132:8;12129:16;12124:2;12118:4;12115:12;12111:35;12108:77;12105:159;;;-1:-1:-1;12217:19:1;;;12249:5;;12105:159;12296:34;12321:8;12315:4;12296:34;:::i;:::-;12366:6;12362:1;12358:6;12354:19;12345:7;12342:32;12339:58;;;12377:18;;:::i;:::-;12415:20;;11635:806;-1:-1:-1;;;11635:806:1:o;12446:140::-;12504:5;12533:47;12574:4;12564:8;12560:19;12554:4;12533:47;:::i;12591:217::-;12631:1;12657;12647:132;;12701:10;12696:3;12692:20;12689:1;12682:31;12736:4;12733:1;12726:15;12764:4;12761:1;12754:15;12647:132;-1:-1:-1;12793:9:1;;12591:217::o;14042:125::-;14107:9;;;14128:10;;;14125:36;;;14141:18;;:::i;14172:330::-;14374:2;14356:21;;;14413:1;14393:18;;;14386:29;-1:-1:-1;;;14446:2:1;14431:18;;14424:37;14493:2;14478:18;;14172:330::o;14912:251::-;14982:6;15035:2;15023:9;15014:7;15010:23;15006:32;15003:52;;;15051:1;15048;15041:12;15003:52;15083:9;15077:16;15102:31;15127:5;15102:31;:::i;15168:127::-;15229:10;15224:3;15220:20;15217:1;15210:31;15260:4;15257:1;15250:15;15284:4;15281:1;15274:15;15300:332;15507:6;15496:9;15489:25;15550:2;15545;15534:9;15530:18;15523:30;15470:4;15570:56;15622:2;15611:9;15607:18;15599:6;15570:56;:::i;:::-;15562:64;15300:332;-1:-1:-1;;;;15300:332:1:o;15637:881::-;15732:6;15763:2;15806;15794:9;15785:7;15781:23;15777:32;15774:52;;;15822:1;15819;15812:12;15774:52;15855:9;15849:16;15888:18;15880:6;15877:30;15874:50;;;15920:1;15917;15910:12;15874:50;15943:22;;15996:4;15988:13;;15984:27;-1:-1:-1;15974:55:1;;16025:1;16022;16015:12;15974:55;16054:2;16048:9;16077:60;16093:43;16133:2;16093:43;:::i;16077:60::-;16171:15;;;16253:1;16249:10;;;;16241:19;;16237:28;;;16202:12;;;;16277:19;;;16274:39;;;16309:1;16306;16299:12;16274:39;16333:11;;;;16353:135;16369:6;16364:3;16361:15;16353:135;;;16435:10;;16423:23;;16386:12;;;;16466;;;;16353:135;;;16507:5;15637:881;-1:-1:-1;;;;;;;15637:881:1:o;18119:184::-;18189:6;18242:2;18230:9;18221:7;18217:23;18213:32;18210:52;;;18258:1;18255;18248:12;18210:52;-1:-1:-1;18281:16:1;;18119:184;-1:-1:-1;18119:184:1:o;18587:245::-;18654:6;18707:2;18695:9;18686:7;18682:23;18678:32;18675:52;;;18723:1;18720;18713:12;18675:52;18755:9;18749:16;18774:28;18796:5;18774:28;:::i;19547:403::-;19749:2;19731:21;;;19788:2;19768:18;;;19761:30;19827:34;19822:2;19807:18;;19800:62;-1:-1:-1;;;19893:2:1;19878:18;;19871:37;19940:3;19925:19;;19547:403::o;20310:135::-;20349:3;20370:17;;;20367:43;;20390:18;;:::i;:::-;-1:-1:-1;20437:1:1;20426:13;;20310:135::o;24002:607::-;-1:-1:-1;;;;;24361:15:1;;;24343:34;;24408:2;24393:18;;24386:34;;;;24451:2;24436:18;;24429:34;;;;24494:2;24479:18;;24472:34;;;;24543:15;;;24537:3;24522:19;;24515:44;24323:3;24575:19;;24568:35;;;;24292:3;24277:19;;24002:607::o;24614:306::-;24702:6;24710;24718;24771:2;24759:9;24750:7;24746:23;24742:32;24739:52;;;24787:1;24784;24777:12;24739:52;24816:9;24810:16;24800:26;;24866:2;24855:9;24851:18;24845:25;24835:35;;24910:2;24899:9;24895:18;24889:25;24879:35;;24614:306;;;;;:::o;29121:128::-;29188:9;;;29209:11;;;29206:37;;;29223:18;;:::i;30208:245::-;30287:6;30295;30348:2;30336:9;30327:7;30323:23;30319:32;30316:52;;;30364:1;30361;30354:12;30316:52;-1:-1:-1;;30387:16:1;;30443:2;30428:18;;;30422:25;30387:16;;30422:25;;-1:-1:-1;30208:245:1:o;31266:401::-;31468:2;31450:21;;;31507:2;31487:18;;;31480:30;31546:34;31541:2;31526:18;;31519:62;-1:-1:-1;;;31612:2:1;31597:18;;31590:35;31657:3;31642:19;;31266:401::o;31672:399::-;31874:2;31856:21;;;31913:2;31893:18;;;31886:30;31952:34;31947:2;31932:18;;31925:62;-1:-1:-1;;;32018:2:1;32003:18;;31996:33;32061:3;32046:19;;31672:399::o;36814:510::-;37085:6;37074:9;37067:25;37128:3;37123:2;37112:9;37108:18;37101:31;37048:4;37149:57;37201:3;37190:9;37186:19;37178:6;37149:57;:::i;:::-;-1:-1:-1;;;;;37242:32:1;;;;37237:2;37222:18;;37215:60;-1:-1:-1;37306:2:1;37291:18;37284:34;37141:65;36814:510;-1:-1:-1;;36814:510:1:o;37329:582::-;37628:6;37617:9;37610:25;37671:6;37666:2;37655:9;37651:18;37644:34;37714:3;37709:2;37698:9;37694:18;37687:31;37591:4;37735:57;37787:3;37776:9;37772:19;37764:6;37735:57;:::i;:::-;-1:-1:-1;;;;;37828:32:1;;;;37823:2;37808:18;;37801:60;-1:-1:-1;37892:3:1;37877:19;37870:35;37727:65;37329:582;-1:-1:-1;;;37329:582:1:o

Swarm Source

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