ETH Price: $3,047.16 (+2.48%)
Gas: 4 Gwei

Token

Jinx Inu (JINX)
 

Overview

Max Total Supply

975,000,000,000,000 JINX

Holders

888

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
11,732,880.637324029 JINX

Value
$0.00
0x609b8f72b39cdf29fb4583eea07ee217f25d6c5a
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:
JinxInu

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-28
*/

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

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

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

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

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

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

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

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

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

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

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

  /**
   * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * IMPORTANT: Beware that changing an allowance with this method brings the risk
   * that someone may use both the old and the new allowance by unfortunate
   * transaction ordering. One possible solution to mitigate this race
   * condition is to first reduce the spender's allowance to 0 and set the
   * desired value afterwards:
   * https://github.com/ethereum/EIPs/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 IFactoryV2 {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}

interface IV2Pair {
    function factory() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
}

interface IRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IRouter02 is IRouter01 {
    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;
}

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

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

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

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

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

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

    struct CurrentFees {
        uint16 reflect;
        uint16 totalSwap;
    }

    struct Fees {
        uint16 reflect;
        uint16 liquidity;
        uint16 marketing;
        uint16 totalSwap;
    }

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

    struct Ratios {
        uint16 liquidity;
        uint16 marketing;
        uint16 total;
    }

    CurrentFees private currentTaxes = CurrentFees({
        reflect: 0,
        totalSwap: 0
        });

    Fees public _buyTaxes = Fees({
        reflect: 100,
        liquidity: 200,
        marketing: 800,
        totalSwap: 1000
        });

    Fees public _sellTaxes = Fees({
        reflect: 100,
        liquidity: 200,
        marketing: 2200,
        totalSwap: 2400
        });

    Fees public _transferTaxes = Fees({
        reflect: 100,
        liquidity: 200,
        marketing: 800,
        totalSwap: 1000
        });

    Ratios public _ratios = Ratios({
        liquidity: 2,
        marketing: 8,
        total: 10
        });

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

    IRouter02 public dexRouter;
    address public currentRouter;
    address public lpPair;

    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;

    struct TaxWallets {
        address payable marketing;
        address liquidity;
    }

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0xeFcd06Ba9f0e886609Ea20D635f145868C7C16C1),
        liquidity: address(0)
        });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    
    uint256 private _maxTxAmount = 25;
    uint256 private _maxWalletSize = 45;
    uint256 private swapThreshold;
    uint256 private swapAmount;

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

    bool private contractInitialized = false;

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

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

        if (block.chainid == 56) {
            currentRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E;
        } else if (block.chainid == 97) {
            currentRouter = 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3;
        } else if (block.chainid == 1 || block.chainid == 4) {
            currentRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else {
            revert();
        }

        _taxWallets.liquidity = owner();

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

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

    function intializeContract(address[] memory accounts, uint256[] memory amounts, address _antiSnipe) external onlyOwner {
        require(!contractInitialized, "1");
        require(accounts.length < 200, "2");
        require(accounts.length == amounts.length, "3");
        startingSupply = 975_000_000_000_000;
        antiSnipe = AntiSnipe(_antiSnipe);
        if(address(antiSnipe) == address(0)){
            antiSnipe = AntiSnipe(address(this));
        }
        try antiSnipe.transfer(address(this)) {} catch {}
        if (startingSupply < 10000000000) {
            _decimals = 18;
        } else {
            _decimals = 9;
        }
        _tTotal = startingSupply * (10**_decimals);
        _rTotal = (~uint256(0) - (~uint256(0) % _tTotal));
        _name = "Jinx Inu";
        _symbol = "JINX";
        dexRouter = IRouter02(currentRouter);
        lpPair = IFactoryV2(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        swapThreshold = (_tTotal * 5) / 10000;
        swapAmount = (_tTotal * 10) / 10000;
        contractInitialized = true;     
        _rOwned[owner()] = _rTotal;
        emit Transfer(address(0), owner(), _tTotal);

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

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

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

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

        enableTrading();
    }

    receive() external payable {}

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

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

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

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

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

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

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

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

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

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

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

        return _transfer(sender, recipient, amount);
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

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

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

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

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

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

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

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

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

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

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

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

    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external onlyOwner {
        antiSnipe.setBlacklistEnabledMultiple(accounts, enabled);
    }

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

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

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

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

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

    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 75, "Too low.");
        antiSnipe.setGasPriceLimit(gas);
    }
    
    function setTaxesBuy(uint16 reflect, uint16 liquidity, uint16 marketing) external onlyOwner {
        require(reflect <= staticVals.maxReflect
                && liquidity <= staticVals.maxLiquidity
                && marketing <= staticVals.maxMarketing);
        uint16 check = reflect + liquidity + marketing;
        require(check <= 2500);
        _buyTaxes.liquidity = liquidity;
        _buyTaxes.reflect = reflect;
        _buyTaxes.marketing = marketing;
        _buyTaxes.totalSwap = check - reflect;
    }

    function setTaxesSell(uint16 reflect, uint16 liquidity, uint16 marketing) external onlyOwner {
        require(reflect <= staticVals.maxReflect
                && liquidity <= staticVals.maxLiquidity
                && marketing <= staticVals.maxMarketing);
        uint16 check = reflect + liquidity + marketing;
        require(check <= 2500);
        _sellTaxes.liquidity = liquidity;
        _sellTaxes.reflect = reflect;
        _sellTaxes.marketing = marketing;
        _sellTaxes.totalSwap = check - reflect;
    }

    function setTaxesTransfer(uint16 reflect, uint16 liquidity, uint16 marketing) external onlyOwner {
        require(reflect <= staticVals.maxReflect
                && liquidity <= staticVals.maxLiquidity
                && marketing <= staticVals.maxMarketing);
        uint16 check = reflect + liquidity + marketing;
        require(check <= 2500);
        _transferTaxes.liquidity = liquidity;
        _transferTaxes.reflect = reflect;
        _transferTaxes.marketing = marketing;
        _transferTaxes.totalSwap = check - reflect;
    }

    function setRatios(uint16 liquidity, uint16 marketing) external onlyOwner {
        _ratios.liquidity = liquidity;
        _ratios.marketing = marketing;
        _ratios.total = liquidity + marketing;
    }

    function setMaxTxPercent(uint256 percent) external onlyOwner {
        require(percent >= 10, "Max Transaction amt must be above 0.1% of total supply.");
        _maxTxAmount = percent;
    }

    function setMaxWalletSize(uint256 percent) external onlyOwner {
        require(percent >= 45, "Max Transaction amt must be above 0.45% of total supply.");
        _maxWalletSize = percent;
    }

    function getMaxTX() public view returns (uint256) {
        return ((getCirculatingSupply() * _maxTxAmount) / 10000) / (10**_decimals);
    }

    function getMaxWallet() public view returns (uint256) {
        return ((getCirculatingSupply() * _maxWalletSize) / 10000) / (10**_decimals);
    }

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

    function setWallets(address payable marketing) external onlyOwner {
        _taxWallets.marketing = payable(marketing);
    }

    function setLiquidityWallet(address wallet) external onlyOwner {
        require (wallet != DEAD);
        _taxWallets.liquidity = wallet;
    }

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

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

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

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

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

    function contractSwap(uint256 contractTokenBalance) private lockTheSwap {
        if (_ratios.total == 0)
            return;

        if(_allowances[address(this)][address(dexRouter)] != type(uint256).max) {
            _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        }

        uint256 toLiquify = ((contractTokenBalance * _ratios.liquidity) / _ratios.total) / 2;

        uint256 toSwapForEth = contractTokenBalance - toLiquify;
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            toSwapForEth,
            0,
            path,
            address(this),
            block.timestamp
        );


        uint256 liquidityBalance = ((address(this).balance * _ratios.liquidity) / _ratios.total) / 2;

        if (toLiquify > 0) {
            dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0,
                0,
                _taxWallets.liquidity,
                block.timestamp
            );
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (address(this).balance > 0 && _ratios.total - _ratios.liquidity > 0) {
            _taxWallets.marketing.transfer(address(this).balance);
        }
    }

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

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

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

    function multiSendTokens(address[] memory accounts, uint256[] memory amounts) external {
        require(accounts.length == amounts.length, "Lengths do not match.");
        for (uint8 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= amounts[i]);
            _transfer(msg.sender, accounts[i], amounts[i]*10**_decimals);
        }
    }

    function multiSendPercents(address[] memory accounts, uint256[] memory percents, uint256[] memory divisors) external {
        require(accounts.length == percents.length && percents.length == divisors.length, "Lengths do not match.");
        for (uint8 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= (_tTotal * percents[i]) / divisors[i]);
            _transfer(msg.sender, accounts[i], (_tTotal * percents[i]) / divisors[i]);
        }
    }

    struct ExtraValues {
        uint256 tTransferAmount;
        uint256 tFee;
        uint256 tSwap;

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;
    }

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

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

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

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

        if (values.tSwap > 0) {
            _rOwned[address(this)] = _rOwned[address(this)] + (values.tSwap * _getRate());
            if(_isExcluded[address(this)])
                _tOwned[address(this)] = _tOwned[address(this)] + values.tSwap;
            emit Transfer(from, address(this), values.tSwap); // Transparency is the key to success.
        }
        if (values.rFee > 0 || values.tFee > 0) {
            _rTotal -= values.rFee;
        }

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

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

        values.rAmount = tAmount * currentRate;

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

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

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"total","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address","name":"liquidity","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"changeRouterContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSniperAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"address","name":"_antiSnipe","type":"address"}],"name":"intializeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"percents","type":"uint256[]"},{"internalType":"uint256[]","name":"divisors","type":"uint256[]"}],"name":"multiSendPercents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabledMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initializer","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiGas","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"},{"internalType":"bool","name":"_algo","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setTaxesTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staticVals","outputs":[{"internalType":"uint16","name":"maxReflect","type":"uint16"},{"internalType":"uint16","name":"maxLiquidity","type":"uint16"},{"internalType":"uint16","name":"maxMarketing","type":"uint16"},{"internalType":"uint16","name":"masterTaxDivisor","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60006004819055608081905260a08190526010805463ffffffff19169055606460c081905260c860e08190526103206101008190526103e8610120819052601180546001600160401b03199081166703e8032000c80064908117909255610140869052610160859052610898610180526109606101a052601280548216670960089800c800641790556101c0959095526101e093909352610200829052610220819052601380548516909317909255600261024052600861026052600a610280526014805465ffffffffffff1916640a000800021790556102a08290526102c08290526102e091909152612710610300526015805490921667271003e803e803e81790915561036060405273efcd06ba9f0e886609ea20d635f145868c7c16c190819052610340829052601980546001600160a01b03199081169092178155601a805483169055601b805461ff0019169055601c55602d601d556020805461ffff60ff60b01b011916905581543391161790554660381415620001a857601780546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e17905562000225565b4660611415620001de57601780546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c317905562000225565b4660011480620001ee5750466004145b156200022057601780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905562000225565b600080fd5b600054601a80546001600160a01b0319166001600160a01b03928316179055601754620002589133911660001962000343565b601754620002749030906001600160a01b031660001962000343565b6001600660006200028d6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252812080548316600190811790915561dead82527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280549093168117909255600990620003156000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905562000444565b6001600160a01b038316620003955760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620003e35760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064016200038c565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b615a4980620004546000396000f3fe6080604052600436106103c75760003560e01c806370a08231116101f2578063c6a276c21161010d578063eafb5a3c116100a0578063f94aa1b41161006f578063f94aa1b414610c23578063fb78680d14610c6a578063fdb78c0e14610c8a578063fe575a8714610ca957600080fd5b8063eafb5a3c14610bae578063eb50e70e14610bce578063ee5d9c2d14610bee578063eec2744e14610c0357600080fd5b8063dd62ed3e116100dc578063dd62ed3e14610b08578063de3a3b6914610b4e578063e8a0e3f914610b6e578063ea1644d514610b8e57600080fd5b8063c6a276c214610a52578063cab5ebea14610a72578063cf84770614610a92578063d543dbeb14610ae857600080fd5b80638a8c523c11610185578063a9059cbb11610154578063a9059cbb14610998578063bcd96a25146109b8578063c2fa418f146109d8578063c6831cd814610a1557600080fd5b80638a8c523c1461094e5780638da5cb5b146108fb57806395d89b4114610963578063a457c2d71461097857600080fd5b806388f82020116101c157806388f82020146108c2578063893d20e8146108fb5780638965b55d146109195780638a63bd9b1461093957600080fd5b806370a0823114610830578063715018a6146108505780637b45d4311461086557806380c581d1146108a257600080fd5b80632b112e49116102e25780634fb2e45d1161027557806355dbc3691161024457806355dbc369146107c6578063590ffdce146107db5780635c24b074146107fb5780636ebd00781461081b57600080fd5b80634fb2e45d1461072e5780634fbee1931461074e57806350a8e0161461078757806355d8ece6146107a657600080fd5b8063384f36b6116102b1578063384f36b6146106b457806339509351146106d4578063452ed4f1146106f45780634ada218b1461071457600080fd5b80632b112e491461063d5780632d83811914610652578063313ce5671461067257806333251a0b1461069457600080fd5b806313e461921161035a57806323b872dd1161032957806323b872dd146105bd5780632610eaca146105dd578063296f0a0c146105fd57806329dd87981461061d57600080fd5b806313e46192146104fd57806318160ddd1461051d5780631b6afa2d146105325780631e90afe31461059d57600080fd5b80630923160211610396578063092316021461046a578063095ea7b31461048a5780630fa604e4146104ba578063122fea3b146104dd57600080fd5b806303fd2a45146103d357806305bbedb61461040657806306fdde03146104285780630758d9241461044a57600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e961dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561041257600080fd5b50610426610421366004615154565b610cc9565b005b34801561043457600080fd5b5061043d610da2565b6040516103fd91906151a6565b34801561045657600080fd5b506016546103e9906001600160a01b031681565b34801561047657600080fd5b506104266104853660046151fb565b610e34565b34801561049657600080fd5b506104aa6104a5366004615214565b610f53565b60405190151581526020016103fd565b3480156104c657600080fd5b506104cf610f6a565b6040519081526020016103fd565b3480156104e957600080fd5b506017546103e9906001600160a01b031681565b34801561050957600080fd5b50610426610518366004615240565b610faf565b34801561052957600080fd5b50600e546104cf565b34801561053e57600080fd5b5060155461056f9061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103fd565b3480156105a957600080fd5b506104266105b8366004615285565b611472565b3480156105c957600080fd5b506104aa6105d83660046152c8565b6115f5565b3480156105e957600080fd5b506104266105f8366004615364565b61166d565b34801561060957600080fd5b506104266106183660046153c8565b611772565b34801561062957600080fd5b506104266106383660046153e5565b611807565b34801561064957600080fd5b506104cf6118f0565b34801561065e57600080fd5b506104cf61066d3660046151fb565b61191e565b34801561067e57600080fd5b50600d5460405160ff90911681526020016103fd565b3480156106a057600080fd5b506104266106af3660046153c8565b6119b5565b3480156106c057600080fd5b506104266106cf3660046153c8565b611a55565b3480156106e057600080fd5b506104aa6106ef366004615214565b611ae7565b34801561070057600080fd5b506018546103e9906001600160a01b031681565b34801561072057600080fd5b506020546104aa9060ff1681565b34801561073a57600080fd5b506104266107493660046153c8565b611b23565b34801561075a57600080fd5b506104aa6107693660046153c8565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561079357600080fd5b506020546104aa90610100900460ff1681565b3480156107b257600080fd5b506104266107c1366004615285565b611d22565b3480156107d257600080fd5b506104cf611ea5565b3480156107e757600080fd5b506104266107f6366004615240565b611f1e565b34801561080757600080fd5b506104266108163660046153c8565b611f97565b34801561082757600080fd5b506104cf6120d6565b34801561083c57600080fd5b506104cf61084b3660046153c8565b6120f8565b34801561085c57600080fd5b50610426612157565b34801561087157600080fd5b5060115461056f9061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b3480156108ae57600080fd5b506104266108bd366004615240565b612207565b3480156108ce57600080fd5b506104aa6108dd3660046153c8565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561090757600080fd5b506000546001600160a01b03166103e9565b34801561092557600080fd5b50610426610934366004615285565b6123c8565b34801561094557600080fd5b506104aa61254b565b34801561095a57600080fd5b506104266125ba565b34801561096f57600080fd5b5061043d6127aa565b34801561098457600080fd5b506104aa610993366004615214565b6127b9565b3480156109a457600080fd5b506104aa6109b3366004615214565b6127f0565b3480156109c457600080fd5b506104266109d3366004615441565b612807565b3480156109e457600080fd5b5060135461056f9061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b348015610a2157600080fd5b5060125461056f9061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b348015610a5e57600080fd5b50610426610a6d3660046153c8565b6128be565b348015610a7e57600080fd5b50610426610a8d366004615474565b61295e565b348015610a9e57600080fd5b50601454610ac39061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103fd565b348015610af457600080fd5b50610426610b033660046151fb565b612a00565b348015610b1457600080fd5b506104cf610b23366004615491565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610b5a57600080fd5b50610426610b693660046154bf565b612aca565b348015610b7a57600080fd5b50610426610b89366004615537565b6132d8565b348015610b9a57600080fd5b50610426610ba93660046151fb565b613435565b348015610bba57600080fd5b50610426610bc93660046153c8565b6134ff565b348015610bda57600080fd5b50610426610be93660046153c8565b6138ae565b348015610bfa57600080fd5b5061042661392b565b348015610c0f57600080fd5b50610426610c1e366004615240565b613a0e565b348015610c2f57600080fd5b50601954601a54610c4a916001600160a01b03908116911682565b604080516001600160a01b039384168152929091166020830152016103fd565b348015610c7657600080fd5b50610426610c853660046155bf565b613ab6565b348015610c9657600080fd5b50601b546104aa90610100900460ff1681565b348015610cb557600080fd5b506104aa610cc43660046153c8565b613b43565b6000546001600160a01b03163314610d1c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6020546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610d6c9085908590600401615635565b600060405180830381600087803b158015610d8657600080fd5b505af1158015610d9a573d6000803e3d6000fd5b505050505050565b6060600b8054610db190615659565b80601f0160208091040260200160405190810160405280929190818152602001828054610ddd90615659565b8015610e2a5780601f10610dff57610100808354040283529160200191610e2a565b820191906000526020600020905b815481529060010190602001808311610e0d57829003601f168201915b5050505050905090565b6000546001600160a01b03163314610e825760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b604b811015610ed35760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610d13565b6020546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610f3857600080fd5b505af1158015610f4c573d6000803e3d6000fd5b5050505050565b6000610f60338484613bd1565b5060015b92915050565b600d54600090610f7e9060ff16600a6157c0565b612710601d54610f8c6118f0565b610f9691906157cf565b610fa0919061581d565b610faa919061581d565b905090565b6000546001600160a01b03163314610ffd5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b8015611152576001600160a01b03821660009081526007602052604090205460ff161561106c5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610d13565b6001600160a01b038216600090815260016020526040902054156110c6576001600160a01b0382166000908152600160205260409020546110ac9061191e565b6001600160a01b0383166000908152600260205260409020555b6001600160a01b038083166000818152600760205260409020805460ff191660011790556018549091161461114e57600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee301805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790555b5050565b8061114e576001600160a01b03821660009081526007602052604090205460ff166111bf5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610d13565b6018546001600160a01b038381169116141561123a576111dd613cde565b6001600160a01b03831660009081526002602052604090205461120091906157cf565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556007905220805460ff191690555050565b600854600114156112ea5761124d613cde565b6001600160a01b03831660009081526002602052604090205461127091906157cf565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556007905220805460ff1916905560088054806112b7576112b7615831565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b60085481101561146d57826001600160a01b03166008828154811061131457611314615860565b6000918252602090912001546001600160a01b0316141561145b576008805461133f9060019061588f565b8154811061134f5761134f615860565b600091825260209091200154600880546001600160a01b03909216918390811061137b5761137b615860565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559185168152600290915260408120556113c7613cde565b6001600160a01b0384166000908152600260205260409020546113ea91906157cf565b6001600160a01b0384166000908152600160209081526040808320939093556007905220805460ff19169055600880548061142757611427615831565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055505050565b80611465816158a6565b9150506112ed565b505050565b6000546001600160a01b031633146114c05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b60155461ffff908116908416118015906114ea575060155461ffff62010000909104811690831611155b8015611508575060155461ffff640100000000909104811690821611155b61151157600080fd5b60008161151e84866158c1565b61152891906158c1565b90506109c48161ffff16111561153d57600080fd5b6013805461ffff848116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00008288166201000002167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000090931692909217908716171790556115b184826158e7565b6013805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff90921691909117905550505050565b6001600160a01b03831660009081526005602090815260408083203384529091528120546000191461165a576001600160a01b03841660009081526005602090815260408083203384529091528120805484929061165490849061588f565b90915550505b611665848484613e7e565b949350505050565b80518251146116be5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610d13565b60005b82518160ff16101561146d57818160ff16815181106116e2576116e2615860565b60200260200101516116f3336120f8565b10156116fe57600080fd5b61175f33848360ff168151811061171757611717615860565b6020908102919091010151600d546117339060ff16600a6157c0565b858560ff168151811061174857611748615860565b602002602001015161175a91906157cf565b613e7e565b508061176a8161590a565b9150506116c1565b6000546001600160a01b031633146117c05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b6001600160a01b03811661dead14156117d857600080fd5b601a805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118555760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b6020546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b1580156118d257600080fd5b505af11580156118e6573d6000803e3d6000fd5b5050505050505050565b60006118fc60006120f8565b61190761dead6120f8565b611911919061592a565b600e54610faa919061588f565b6000600f548211156119985760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610d13565b60006119a2613cde565b90506119ae818461581d565b9392505050565b6000546001600160a01b03163314611a035760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b6020546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610f1e565b6000546001600160a01b03163314611aa35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b602054610100900460ff1615611ab857600080fd5b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610f60918590611b1e90869061592a565b613bd1565b6000546001600160a01b03163314611b715760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b6001600160a01b038116611bed5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d13565b6001600160a01b03811661dead1415611c6e5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d13565b60008054611c87916001600160a01b0390911690611f1e565b611c92816001611f1e565b60008054611ca8906001600160a01b03166120f8565b1115611cca57600054611cc8906001600160a01b03168261175a826120f8565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b03163314611d705760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b60155461ffff90811690841611801590611d9a575060155461ffff62010000909104811690831611155b8015611db8575060155461ffff640100000000909104811690821611155b611dc157600080fd5b600081611dce84866158c1565b611dd891906158c1565b90506109c48161ffff161115611ded57600080fd5b6011805461ffff848116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00008288166201000002167fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000009093169290921790871617179055611e6184826158e7565b6011805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff90921691909117905550505050565b6000602060029054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b8152600401602060405180830381865afa158015611efa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faa9190615942565b6000546001600160a01b03163314611f6c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611fe55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b602054610100900460ff161561203d5760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610d13565b6001600160a01b0381163014156120965760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610d13565b602080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b600d546000906120ea9060ff16600a6157c0565b612710601c54610f8c6118f0565b6001600160a01b03811660009081526007602052604081205460ff161561213557506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610f649061191e565b6000546001600160a01b031633146121a55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b600080546121be916001600160a01b0390911690611f1e565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146122555760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b806122e2576001600160a01b038281166000818152600360209081526040808320805460ff19169055905490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610d8657600080fd5b60045415612349576203f480600454426122fc919061588f565b116123495760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610d13565b6001600160a01b03828116600081815260036020908152604091829020805460ff19166001908117909155426004908155915492517f80c581d1000000000000000000000000000000000000000000000000000000008152918201939093526024810192909252620100009004909116906380c581d190604401610d6c565b6000546001600160a01b031633146124165760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b60155461ffff90811690841611801590612440575060155461ffff62010000909104811690831611155b801561245e575060155461ffff640100000000909104811690821611155b61246757600080fd5b60008161247484866158c1565b61247e91906158c1565b90506109c48161ffff16111561249357600080fd5b6012805461ffff848116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00008288166201000002167fffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000909316929092179087161717905561250784826158e7565b6012805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff90921691909117905550505050565b600080546001600160a01b0316331461259a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b6016546125b49030906001600160a01b0316600019613bd1565b50600190565b6000546001600160a01b031633146126085760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b60205460ff161561265b5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d13565b602054610100900460ff166126b25760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610d13565b6020546201000090046001600160a01b03166126f857602080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b602054601854600d546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561278957600080fd5b505af192505050801561279a575060015b506020805460ff19166001179055565b6060600c8054610db190615659565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610f60918590611b1e90869061588f565b60006127fd338484613e7e565b5060019392505050565b6000546001600160a01b031633146128555760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b6014805461ffff838116620100000263ffffffff199092169085161717905561287e81836158c1565b6014805461ffff92909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff9092169190911790555050565b6000546001600160a01b0316331461290c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b6020546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c290602401610f1e565b6000546001600160a01b031633146129ac5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b601b80548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906129f590831515815260200190565b60405180910390a150565b6000546001600160a01b03163314612a4e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b600a811015612ac55760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610d13565b601c55565b6000546001600160a01b03163314612b185760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b602054760100000000000000000000000000000000000000000000900460ff1615612b855760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610d13565b60c8835110612bd65760405162461bcd60e51b815260206004820152600160248201527f32000000000000000000000000000000000000000000000000000000000000006044820152606401610d13565b8151835114612c275760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610d13565b660376c1e0a7f000600a55602080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100006001600160a01b038481168202929092179283905590910416612ca957602080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6020546040517f1a695230000000000000000000000000000000000000000000000000000000008152306004820152620100009091046001600160a01b031690631a69523090602401600060405180830381600087803b158015612d0c57600080fd5b505af1925050508015612d1d575060015b506402540be400600a541015612d3f57600d805460ff19166012179055612d4d565b600d805460ff191660091790555b600d54612d5e9060ff16600a6157c0565b600a54612d6b91906157cf565b600e819055612d7c9060001961595b565b612d889060001961588f565b600f556040805180820190915260088082527f4a696e7820496e750000000000000000000000000000000000000000000000006020909201918252612dcf91600b91614fa0565b506040805180820190915260048082527f4a494e58000000000000000000000000000000000000000000000000000000006020909201918252612e1491600c91614fa0565b506017546016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169182179055604080517fc45a0155000000000000000000000000000000000000000000000000000000008152905163c45a0155916004808201926020929091908290030181865afa158015612e97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ebb919061596f565b6001600160a01b031663c9c65396601660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f40919061596f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015612fa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc8919061596f565b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556000908152600360205260409020805460ff19166001179055600e546127109061301f9060056157cf565b613029919061581d565b601e55600e546127109061303e90600a6157cf565b613048919061581d565b601f55602080547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000179055600f54600160006130a56000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556130d16000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600e5460405161311891815260200190565b60405180910390a360165461313a9030906001600160a01b0316600019613bd1565b60005b83518110156131ca57600d5460009061315a9060ff16600a6157c0565b84838151811061316c5761316c615860565b602002602001015161317e91906157cf565b90506131b56131956000546001600160a01b031690565b8684815181106131a7576131a7615860565b602002602001015183613e7e565b505080806131c2906158a6565b91505061313d565b506131f66131e06000546001600160a01b031690565b3061175a61084b6000546001600160a01b031690565b506016546001600160a01b031663f305d7194730613213816120f8565b6000806132286000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156132a8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132cd919061598c565b50505061146d6125ba565b815183511480156132ea575080518251145b6133365760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610d13565b60005b83518160ff16101561342f57818160ff168151811061335a5761335a615860565b6020026020010151838260ff168151811061337757613377615860565b6020026020010151600e5461338c91906157cf565b613396919061581d565b61339f336120f8565b10156133aa57600080fd5b61341c33858360ff16815181106133c3576133c3615860565b6020026020010151848460ff16815181106133e0576133e0615860565b6020026020010151868560ff16815181106133fd576133fd615860565b6020026020010151600e5461341291906157cf565b61175a919061581d565b50806134278161590a565b915050613339565b50505050565b6000546001600160a01b031633146134835760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b602d8110156134fa5760405162461bcd60e51b815260206004820152603860248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e343525206f6620746f74616c20737570706c792e00000000000000006064820152608401610d13565b601d55565b6000546001600160a01b0316331461354d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613592573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b6919061596f565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613603573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613627919061596f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561368a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136ae919061596f565b90506001600160a01b03811661384c57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156136fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613720919061596f565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561376d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613791919061596f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156137f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381a919061596f565b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055613875565b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03841690811790915561146d903090600019613bd1565b6000546001600160a01b031633146138fc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b6019805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146139795760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b602054610100900460ff16156139d15760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610d13565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015613a0b573d6000803e3d6000fd5b50565b6000546001600160a01b03163314613a5c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b6020546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610d6c565b6000546001600160a01b03163314613b045760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b8284600e54613b1391906157cf565b613b1d919061581d565b601e55600e548190613b309084906157cf565b613b3a919061581d565b601f5550505050565b6020546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015613bad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6491906159ba565b6001600160a01b038316613c275760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d13565b6001600160a01b038216613c7d5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d13565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600f54600e5460009190825b60085460ff82161015613e4557826001600060088460ff1681548110613d1257613d12615860565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613d805750816002600060088460ff1681548110613d5957613d59615860565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613d9d57600e54600f54613d95919061581d565b935050505090565b6001600060088360ff1681548110613db757613db7615860565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613de6908461588f565b92506002600060088360ff1681548110613e0257613e02615860565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613e31908361588f565b915080613e3d8161590a565b915050613cea565b50600e54600f54613e56919061581d565b821015613e7457600e54600f54613e6d919061581d565b9250505090565b613e6d818361581d565b60006001600160a01b038416613efc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610d13565b6001600160a01b038316613f785760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610d13565b60008211613fee5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610d13565b613ff884846142fa565b1561422b5760205460ff1661404f5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610d13565b6001600160a01b03841660009081526003602052604090205460ff168061408e57506001600160a01b03831660009081526003602052604090205460ff165b1561413657612710601c541015614136576127106140aa6118f0565b601c546140b791906157cf565b6140c1919061581d565b8211156141365760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610d13565b6017546001600160a01b0384811691161480159061416d57506001600160a01b03831660009081526003602052604090205460ff16155b801561417c5750612710601d54105b1561422b5761271061418c6118f0565b601d5461419991906157cf565b6141a3919061581d565b826141ad856120f8565b6141b7919061592a565b111561422b5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610d13565b6001600160a01b03841660009081526006602052604090205460019060ff168061426d57506001600160a01b03841660009081526006602052604090205460ff165b15614276575060005b6001600160a01b03841660009081526003602052604090205460ff16156142e557601b5460ff161580156142b15750601b54610100900460ff165b156142e55760006142c1306120f8565b9050601e5481106142e357601f5481106142da5750601f545b6142e3816143ce565b505b6142f1858585846147b8565b95945050505050565b600080546001600160a01b0384811691161480159061432757506000546001600160a01b03838116911614155b801561433e57506000546001600160a01b03163214155b801561436357506001600160a01b03821660009081526009602052604090205460ff16155b801561438857506001600160a01b03831660009081526009602052604090205460ff16155b801561439f57506001600160a01b03821661dead14155b80156143b357506001600160a01b03821615155b80156119ae57506001600160a01b0383163014159392505050565b601b805460ff1916600117905560145461ffff640100000000909104166143f4576147ab565b3060009081526005602090815260408083206016546001600160a01b031684529091529020546000191461444d573060009081526005602090815260408083206016546001600160a01b03168452909152902060001990555b60145460009060029061ffff640100000000820481169161446f9116856157cf565b614479919061581d565b614483919061581d565b90506000614491828461588f565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106144cb576144cb615860565b6001600160a01b03928316602091820292909201810191909152601654604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa15801561453d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614561919061596f565b8160018151811061457457614574615860565b6001600160a01b0392831660209182029290920101526016546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906145d39085906000908690309042906004016159d7565b600060405180830381600087803b1580156145ed57600080fd5b505af1158015614601573d6000803e3d6000fd5b5050601454600092506002915061ffff64010000000082048116916146279116476157cf565b614631919061581d565b61463b919061581d565b9050831561473657601654601a546040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810187905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156146cc573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906146f1919061598c565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b60004711801561476657506014546000906147609061ffff808216916401000000009004166158e7565b61ffff16115b156147a6576019546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156147a4573d6000803e3d6000fd5b505b505050505b50601b805460ff19169055565b602054600090610100900460ff16614864576147d48585614b1c565b602054610100900460ff161580156147f157506147f185856142fa565b156148645760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610d13565b600061487286868686614c7b565b60808101516001600160a01b03881660009081526001602052604090205491925061489c9161588f565b6001600160a01b03808816600090815260016020526040808220939093556060840151918816815291909120546148d3919061592a565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff1615614945576001600160a01b03861660009081526002602052604090205461492b90859061588f565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526007602052604090205460ff16156149a55780516001600160a01b03861660009081526002602052604090205461498b919061592a565b6001600160a01b0386166000908152600260205260409020555b604081015115614a87576149b7613cde565b81604001516149c691906157cf565b306000908152600160205260409020546149e0919061592a565b3060009081526001602090815260408083209390935560079052205460ff1615614a355760408082015130600090815260026020529190912054614a24919061592a565b306000908152600260205260409020555b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360400151604051614a7e91815260200190565b60405180910390a35b60008160a001511180614a9e575060008160200151115b15614abf578060a00151600f6000828254614ab9919061588f565b90915550505b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360000151604051614b0891815260200190565b60405180910390a350600195945050505050565b602054610100900460ff1615614b9a5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610d13565b614ba482826142fa565b158015614bbe57506018546001600160a01b038281169116145b1561114e576001600160a01b038083166000908152600960209081526040909120805460ff19166001179055805461ff001916610100179081905562010000900416614c3457602080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601b805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b614cb46040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b614ced6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000614cf7613cde565b9050614d0381866157cf565b6080830152614d1287876142fa565b15614dc5576020546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015614dae575060408051601f3d908101601f19168201909252614dab918101906159ba565b60015b614db757600080fd5b905080614dc357600080fd5b505b8315614f4a576001600160a01b03861660009081526003602052604090205460ff1615614e22576012546010805461ffff80841663ffffffff19909216919091176601000000000000909304166201000002919091179055614eab565b6001600160a01b03871660009081526003602052604090205460ff1615614e79576011546010805461ffff80841663ffffffff19909216919091176601000000000000909304166201000002919091179055614eab565b6013546010805461ffff80841663ffffffff199092169190911766010000000000009093041662010000029190911790555b60155460105461ffff6601000000000000909204821691614ecd9116876157cf565b614ed7919061581d565b602083015260155460105461ffff6601000000000000909204821691614f049162010000900416876157cf565b614f0e919061581d565b604083018190526020830151614f24919061592a565b614f2e908661588f565b82526020820151614f409082906157cf565b60a0830152614f63565b6000602083018190526040830181905285835260a08301525b808260400151614f7391906157cf565b8260a00151614f82919061592a565b8260800151614f91919061588f565b60608301525095945050505050565b828054614fac90615659565b90600052602060002090601f016020900481019282614fce5760008555615014565b82601f10614fe757805160ff1916838001178555615014565b82800160010185558215615014579182015b82811115615014578251825591602001919060010190614ff9565b50615020929150615024565b5090565b5b808211156150205760008155600101615025565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561509157615091615039565b604052919050565b600067ffffffffffffffff8211156150b3576150b3615039565b5060051b60200190565b6001600160a01b0381168114613a0b57600080fd5b600082601f8301126150e357600080fd5b813560206150f86150f383615099565b615068565b82815260059290921b8401810191818101908684111561511757600080fd5b8286015b8481101561513b57803561512e816150bd565b835291830191830161511b565b509695505050505050565b8015158114613a0b57600080fd5b6000806040838503121561516757600080fd5b823567ffffffffffffffff81111561517e57600080fd5b61518a858286016150d2565b925050602083013561519b81615146565b809150509250929050565b600060208083528351808285015260005b818110156151d3578581018301518582016040015282016151b7565b818111156151e5576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561520d57600080fd5b5035919050565b6000806040838503121561522757600080fd5b8235615232816150bd565b946020939093013593505050565b6000806040838503121561525357600080fd5b823561525e816150bd565b9150602083013561519b81615146565b803561ffff8116811461528057600080fd5b919050565b60008060006060848603121561529a57600080fd5b6152a38461526e565b92506152b16020850161526e565b91506152bf6040850161526e565b90509250925092565b6000806000606084860312156152dd57600080fd5b83356152e8816150bd565b925060208401356152f8816150bd565b929592945050506040919091013590565b600082601f83011261531a57600080fd5b8135602061532a6150f383615099565b82815260059290921b8401810191818101908684111561534957600080fd5b8286015b8481101561513b578035835291830191830161534d565b6000806040838503121561537757600080fd5b823567ffffffffffffffff8082111561538f57600080fd5b61539b868387016150d2565b935060208501359150808211156153b157600080fd5b506153be85828601615309565b9150509250929050565b6000602082840312156153da57600080fd5b81356119ae816150bd565b600080600080608085870312156153fb57600080fd5b843561540681615146565b9350602085013561541681615146565b9250604085013561542681615146565b9150606085013561543681615146565b939692955090935050565b6000806040838503121561545457600080fd5b61545d8361526e565b915061546b6020840161526e565b90509250929050565b60006020828403121561548657600080fd5b81356119ae81615146565b600080604083850312156154a457600080fd5b82356154af816150bd565b9150602083013561519b816150bd565b6000806000606084860312156154d457600080fd5b833567ffffffffffffffff808211156154ec57600080fd5b6154f8878388016150d2565b9450602086013591508082111561550e57600080fd5b5061551b86828701615309565b925050604084013561552c816150bd565b809150509250925092565b60008060006060848603121561554c57600080fd5b833567ffffffffffffffff8082111561556457600080fd5b615570878388016150d2565b9450602086013591508082111561558657600080fd5b61559287838801615309565b935060408601359150808211156155a857600080fd5b506155b586828701615309565b9150509250925092565b600080600080608085870312156155d557600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b8381101561562a5781516001600160a01b031687529582019590820190600101615605565b509495945050505050565b60408152600061564860408301856155f1565b905082151560208301529392505050565b600181811c9082168061566d57607f821691505b602082108114156156a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156157175781600019048211156156fd576156fd6156ad565b8085161561570a57918102915b93841c93908002906156e1565b509250929050565b60008261572e57506001610f64565b8161573b57506000610f64565b8160018114615751576002811461575b57615777565b6001915050610f64565b60ff84111561576c5761576c6156ad565b50506001821b610f64565b5060208310610133831016604e8410600b841016171561579a575081810a610f64565b6157a483836156dc565b80600019048211156157b8576157b86156ad565b029392505050565b60006119ae60ff84168361571f565b60008160001904831182151516156157e9576157e96156ad565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261582c5761582c6157ee565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000828210156158a1576158a16156ad565b500390565b60006000198214156158ba576158ba6156ad565b5060010190565b600061ffff8083168185168083038211156158de576158de6156ad565b01949350505050565b600061ffff83811690831681811015615902576159026156ad565b039392505050565b600060ff821660ff811415615921576159216156ad565b60010192915050565b6000821982111561593d5761593d6156ad565b500190565b60006020828403121561595457600080fd5b5051919050565b60008261596a5761596a6157ee565b500690565b60006020828403121561598157600080fd5b81516119ae816150bd565b6000806000606084860312156159a157600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156159cc57600080fd5b81516119ae81615146565b85815284602082015260a0604082015260006159f660a08301866155f1565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220e359411a13ee40fe34735e93c008983a4d71e05407f94c13e9a4db61fa6b5bef64736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106103c75760003560e01c806370a08231116101f2578063c6a276c21161010d578063eafb5a3c116100a0578063f94aa1b41161006f578063f94aa1b414610c23578063fb78680d14610c6a578063fdb78c0e14610c8a578063fe575a8714610ca957600080fd5b8063eafb5a3c14610bae578063eb50e70e14610bce578063ee5d9c2d14610bee578063eec2744e14610c0357600080fd5b8063dd62ed3e116100dc578063dd62ed3e14610b08578063de3a3b6914610b4e578063e8a0e3f914610b6e578063ea1644d514610b8e57600080fd5b8063c6a276c214610a52578063cab5ebea14610a72578063cf84770614610a92578063d543dbeb14610ae857600080fd5b80638a8c523c11610185578063a9059cbb11610154578063a9059cbb14610998578063bcd96a25146109b8578063c2fa418f146109d8578063c6831cd814610a1557600080fd5b80638a8c523c1461094e5780638da5cb5b146108fb57806395d89b4114610963578063a457c2d71461097857600080fd5b806388f82020116101c157806388f82020146108c2578063893d20e8146108fb5780638965b55d146109195780638a63bd9b1461093957600080fd5b806370a0823114610830578063715018a6146108505780637b45d4311461086557806380c581d1146108a257600080fd5b80632b112e49116102e25780634fb2e45d1161027557806355dbc3691161024457806355dbc369146107c6578063590ffdce146107db5780635c24b074146107fb5780636ebd00781461081b57600080fd5b80634fb2e45d1461072e5780634fbee1931461074e57806350a8e0161461078757806355d8ece6146107a657600080fd5b8063384f36b6116102b1578063384f36b6146106b457806339509351146106d4578063452ed4f1146106f45780634ada218b1461071457600080fd5b80632b112e491461063d5780632d83811914610652578063313ce5671461067257806333251a0b1461069457600080fd5b806313e461921161035a57806323b872dd1161032957806323b872dd146105bd5780632610eaca146105dd578063296f0a0c146105fd57806329dd87981461061d57600080fd5b806313e46192146104fd57806318160ddd1461051d5780631b6afa2d146105325780631e90afe31461059d57600080fd5b80630923160211610396578063092316021461046a578063095ea7b31461048a5780630fa604e4146104ba578063122fea3b146104dd57600080fd5b806303fd2a45146103d357806305bbedb61461040657806306fdde03146104285780630758d9241461044a57600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e961dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561041257600080fd5b50610426610421366004615154565b610cc9565b005b34801561043457600080fd5b5061043d610da2565b6040516103fd91906151a6565b34801561045657600080fd5b506016546103e9906001600160a01b031681565b34801561047657600080fd5b506104266104853660046151fb565b610e34565b34801561049657600080fd5b506104aa6104a5366004615214565b610f53565b60405190151581526020016103fd565b3480156104c657600080fd5b506104cf610f6a565b6040519081526020016103fd565b3480156104e957600080fd5b506017546103e9906001600160a01b031681565b34801561050957600080fd5b50610426610518366004615240565b610faf565b34801561052957600080fd5b50600e546104cf565b34801561053e57600080fd5b5060155461056f9061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103fd565b3480156105a957600080fd5b506104266105b8366004615285565b611472565b3480156105c957600080fd5b506104aa6105d83660046152c8565b6115f5565b3480156105e957600080fd5b506104266105f8366004615364565b61166d565b34801561060957600080fd5b506104266106183660046153c8565b611772565b34801561062957600080fd5b506104266106383660046153e5565b611807565b34801561064957600080fd5b506104cf6118f0565b34801561065e57600080fd5b506104cf61066d3660046151fb565b61191e565b34801561067e57600080fd5b50600d5460405160ff90911681526020016103fd565b3480156106a057600080fd5b506104266106af3660046153c8565b6119b5565b3480156106c057600080fd5b506104266106cf3660046153c8565b611a55565b3480156106e057600080fd5b506104aa6106ef366004615214565b611ae7565b34801561070057600080fd5b506018546103e9906001600160a01b031681565b34801561072057600080fd5b506020546104aa9060ff1681565b34801561073a57600080fd5b506104266107493660046153c8565b611b23565b34801561075a57600080fd5b506104aa6107693660046153c8565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561079357600080fd5b506020546104aa90610100900460ff1681565b3480156107b257600080fd5b506104266107c1366004615285565b611d22565b3480156107d257600080fd5b506104cf611ea5565b3480156107e757600080fd5b506104266107f6366004615240565b611f1e565b34801561080757600080fd5b506104266108163660046153c8565b611f97565b34801561082757600080fd5b506104cf6120d6565b34801561083c57600080fd5b506104cf61084b3660046153c8565b6120f8565b34801561085c57600080fd5b50610426612157565b34801561087157600080fd5b5060115461056f9061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b3480156108ae57600080fd5b506104266108bd366004615240565b612207565b3480156108ce57600080fd5b506104aa6108dd3660046153c8565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561090757600080fd5b506000546001600160a01b03166103e9565b34801561092557600080fd5b50610426610934366004615285565b6123c8565b34801561094557600080fd5b506104aa61254b565b34801561095a57600080fd5b506104266125ba565b34801561096f57600080fd5b5061043d6127aa565b34801561098457600080fd5b506104aa610993366004615214565b6127b9565b3480156109a457600080fd5b506104aa6109b3366004615214565b6127f0565b3480156109c457600080fd5b506104266109d3366004615441565b612807565b3480156109e457600080fd5b5060135461056f9061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b348015610a2157600080fd5b5060125461056f9061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b348015610a5e57600080fd5b50610426610a6d3660046153c8565b6128be565b348015610a7e57600080fd5b50610426610a8d366004615474565b61295e565b348015610a9e57600080fd5b50601454610ac39061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103fd565b348015610af457600080fd5b50610426610b033660046151fb565b612a00565b348015610b1457600080fd5b506104cf610b23366004615491565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610b5a57600080fd5b50610426610b693660046154bf565b612aca565b348015610b7a57600080fd5b50610426610b89366004615537565b6132d8565b348015610b9a57600080fd5b50610426610ba93660046151fb565b613435565b348015610bba57600080fd5b50610426610bc93660046153c8565b6134ff565b348015610bda57600080fd5b50610426610be93660046153c8565b6138ae565b348015610bfa57600080fd5b5061042661392b565b348015610c0f57600080fd5b50610426610c1e366004615240565b613a0e565b348015610c2f57600080fd5b50601954601a54610c4a916001600160a01b03908116911682565b604080516001600160a01b039384168152929091166020830152016103fd565b348015610c7657600080fd5b50610426610c853660046155bf565b613ab6565b348015610c9657600080fd5b50601b546104aa90610100900460ff1681565b348015610cb557600080fd5b506104aa610cc43660046153c8565b613b43565b6000546001600160a01b03163314610d1c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6020546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610d6c9085908590600401615635565b600060405180830381600087803b158015610d8657600080fd5b505af1158015610d9a573d6000803e3d6000fd5b505050505050565b6060600b8054610db190615659565b80601f0160208091040260200160405190810160405280929190818152602001828054610ddd90615659565b8015610e2a5780601f10610dff57610100808354040283529160200191610e2a565b820191906000526020600020905b815481529060010190602001808311610e0d57829003601f168201915b5050505050905090565b6000546001600160a01b03163314610e825760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b604b811015610ed35760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610d13565b6020546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610f3857600080fd5b505af1158015610f4c573d6000803e3d6000fd5b5050505050565b6000610f60338484613bd1565b5060015b92915050565b600d54600090610f7e9060ff16600a6157c0565b612710601d54610f8c6118f0565b610f9691906157cf565b610fa0919061581d565b610faa919061581d565b905090565b6000546001600160a01b03163314610ffd5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b8015611152576001600160a01b03821660009081526007602052604090205460ff161561106c5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610d13565b6001600160a01b038216600090815260016020526040902054156110c6576001600160a01b0382166000908152600160205260409020546110ac9061191e565b6001600160a01b0383166000908152600260205260409020555b6001600160a01b038083166000818152600760205260409020805460ff191660011790556018549091161461114e57600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee301805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790555b5050565b8061114e576001600160a01b03821660009081526007602052604090205460ff166111bf5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610d13565b6018546001600160a01b038381169116141561123a576111dd613cde565b6001600160a01b03831660009081526002602052604090205461120091906157cf565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556007905220805460ff191690555050565b600854600114156112ea5761124d613cde565b6001600160a01b03831660009081526002602052604090205461127091906157cf565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556007905220805460ff1916905560088054806112b7576112b7615831565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b60085481101561146d57826001600160a01b03166008828154811061131457611314615860565b6000918252602090912001546001600160a01b0316141561145b576008805461133f9060019061588f565b8154811061134f5761134f615860565b600091825260209091200154600880546001600160a01b03909216918390811061137b5761137b615860565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559185168152600290915260408120556113c7613cde565b6001600160a01b0384166000908152600260205260409020546113ea91906157cf565b6001600160a01b0384166000908152600160209081526040808320939093556007905220805460ff19169055600880548061142757611427615831565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055505050565b80611465816158a6565b9150506112ed565b505050565b6000546001600160a01b031633146114c05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b60155461ffff908116908416118015906114ea575060155461ffff62010000909104811690831611155b8015611508575060155461ffff640100000000909104811690821611155b61151157600080fd5b60008161151e84866158c1565b61152891906158c1565b90506109c48161ffff16111561153d57600080fd5b6013805461ffff848116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00008288166201000002167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000090931692909217908716171790556115b184826158e7565b6013805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff90921691909117905550505050565b6001600160a01b03831660009081526005602090815260408083203384529091528120546000191461165a576001600160a01b03841660009081526005602090815260408083203384529091528120805484929061165490849061588f565b90915550505b611665848484613e7e565b949350505050565b80518251146116be5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610d13565b60005b82518160ff16101561146d57818160ff16815181106116e2576116e2615860565b60200260200101516116f3336120f8565b10156116fe57600080fd5b61175f33848360ff168151811061171757611717615860565b6020908102919091010151600d546117339060ff16600a6157c0565b858560ff168151811061174857611748615860565b602002602001015161175a91906157cf565b613e7e565b508061176a8161590a565b9150506116c1565b6000546001600160a01b031633146117c05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b6001600160a01b03811661dead14156117d857600080fd5b601a805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118555760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b6020546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b1580156118d257600080fd5b505af11580156118e6573d6000803e3d6000fd5b5050505050505050565b60006118fc60006120f8565b61190761dead6120f8565b611911919061592a565b600e54610faa919061588f565b6000600f548211156119985760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610d13565b60006119a2613cde565b90506119ae818461581d565b9392505050565b6000546001600160a01b03163314611a035760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b6020546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610f1e565b6000546001600160a01b03163314611aa35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b602054610100900460ff1615611ab857600080fd5b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610f60918590611b1e90869061592a565b613bd1565b6000546001600160a01b03163314611b715760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b6001600160a01b038116611bed5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d13565b6001600160a01b03811661dead1415611c6e5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d13565b60008054611c87916001600160a01b0390911690611f1e565b611c92816001611f1e565b60008054611ca8906001600160a01b03166120f8565b1115611cca57600054611cc8906001600160a01b03168261175a826120f8565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b03163314611d705760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b60155461ffff90811690841611801590611d9a575060155461ffff62010000909104811690831611155b8015611db8575060155461ffff640100000000909104811690821611155b611dc157600080fd5b600081611dce84866158c1565b611dd891906158c1565b90506109c48161ffff161115611ded57600080fd5b6011805461ffff848116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00008288166201000002167fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000009093169290921790871617179055611e6184826158e7565b6011805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff90921691909117905550505050565b6000602060029054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b8152600401602060405180830381865afa158015611efa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faa9190615942565b6000546001600160a01b03163314611f6c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611fe55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b602054610100900460ff161561203d5760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610d13565b6001600160a01b0381163014156120965760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610d13565b602080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b600d546000906120ea9060ff16600a6157c0565b612710601c54610f8c6118f0565b6001600160a01b03811660009081526007602052604081205460ff161561213557506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610f649061191e565b6000546001600160a01b031633146121a55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b600080546121be916001600160a01b0390911690611f1e565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146122555760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b806122e2576001600160a01b038281166000818152600360209081526040808320805460ff19169055905490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610d8657600080fd5b60045415612349576203f480600454426122fc919061588f565b116123495760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610d13565b6001600160a01b03828116600081815260036020908152604091829020805460ff19166001908117909155426004908155915492517f80c581d1000000000000000000000000000000000000000000000000000000008152918201939093526024810192909252620100009004909116906380c581d190604401610d6c565b6000546001600160a01b031633146124165760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b60155461ffff90811690841611801590612440575060155461ffff62010000909104811690831611155b801561245e575060155461ffff640100000000909104811690821611155b61246757600080fd5b60008161247484866158c1565b61247e91906158c1565b90506109c48161ffff16111561249357600080fd5b6012805461ffff848116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00008288166201000002167fffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000909316929092179087161717905561250784826158e7565b6012805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff90921691909117905550505050565b600080546001600160a01b0316331461259a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b6016546125b49030906001600160a01b0316600019613bd1565b50600190565b6000546001600160a01b031633146126085760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b60205460ff161561265b5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d13565b602054610100900460ff166126b25760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610d13565b6020546201000090046001600160a01b03166126f857602080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b602054601854600d546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561278957600080fd5b505af192505050801561279a575060015b506020805460ff19166001179055565b6060600c8054610db190615659565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610f60918590611b1e90869061588f565b60006127fd338484613e7e565b5060019392505050565b6000546001600160a01b031633146128555760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b6014805461ffff838116620100000263ffffffff199092169085161717905561287e81836158c1565b6014805461ffff92909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff9092169190911790555050565b6000546001600160a01b0316331461290c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b6020546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c290602401610f1e565b6000546001600160a01b031633146129ac5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b601b80548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906129f590831515815260200190565b60405180910390a150565b6000546001600160a01b03163314612a4e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b600a811015612ac55760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610d13565b601c55565b6000546001600160a01b03163314612b185760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b602054760100000000000000000000000000000000000000000000900460ff1615612b855760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610d13565b60c8835110612bd65760405162461bcd60e51b815260206004820152600160248201527f32000000000000000000000000000000000000000000000000000000000000006044820152606401610d13565b8151835114612c275760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610d13565b660376c1e0a7f000600a55602080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100006001600160a01b038481168202929092179283905590910416612ca957602080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6020546040517f1a695230000000000000000000000000000000000000000000000000000000008152306004820152620100009091046001600160a01b031690631a69523090602401600060405180830381600087803b158015612d0c57600080fd5b505af1925050508015612d1d575060015b506402540be400600a541015612d3f57600d805460ff19166012179055612d4d565b600d805460ff191660091790555b600d54612d5e9060ff16600a6157c0565b600a54612d6b91906157cf565b600e819055612d7c9060001961595b565b612d889060001961588f565b600f556040805180820190915260088082527f4a696e7820496e750000000000000000000000000000000000000000000000006020909201918252612dcf91600b91614fa0565b506040805180820190915260048082527f4a494e58000000000000000000000000000000000000000000000000000000006020909201918252612e1491600c91614fa0565b506017546016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169182179055604080517fc45a0155000000000000000000000000000000000000000000000000000000008152905163c45a0155916004808201926020929091908290030181865afa158015612e97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ebb919061596f565b6001600160a01b031663c9c65396601660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f40919061596f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015612fa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc8919061596f565b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556000908152600360205260409020805460ff19166001179055600e546127109061301f9060056157cf565b613029919061581d565b601e55600e546127109061303e90600a6157cf565b613048919061581d565b601f55602080547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000179055600f54600160006130a56000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556130d16000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600e5460405161311891815260200190565b60405180910390a360165461313a9030906001600160a01b0316600019613bd1565b60005b83518110156131ca57600d5460009061315a9060ff16600a6157c0565b84838151811061316c5761316c615860565b602002602001015161317e91906157cf565b90506131b56131956000546001600160a01b031690565b8684815181106131a7576131a7615860565b602002602001015183613e7e565b505080806131c2906158a6565b91505061313d565b506131f66131e06000546001600160a01b031690565b3061175a61084b6000546001600160a01b031690565b506016546001600160a01b031663f305d7194730613213816120f8565b6000806132286000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156132a8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132cd919061598c565b50505061146d6125ba565b815183511480156132ea575080518251145b6133365760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610d13565b60005b83518160ff16101561342f57818160ff168151811061335a5761335a615860565b6020026020010151838260ff168151811061337757613377615860565b6020026020010151600e5461338c91906157cf565b613396919061581d565b61339f336120f8565b10156133aa57600080fd5b61341c33858360ff16815181106133c3576133c3615860565b6020026020010151848460ff16815181106133e0576133e0615860565b6020026020010151868560ff16815181106133fd576133fd615860565b6020026020010151600e5461341291906157cf565b61175a919061581d565b50806134278161590a565b915050613339565b50505050565b6000546001600160a01b031633146134835760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b602d8110156134fa5760405162461bcd60e51b815260206004820152603860248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e343525206f6620746f74616c20737570706c792e00000000000000006064820152608401610d13565b601d55565b6000546001600160a01b0316331461354d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613592573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b6919061596f565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613603573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613627919061596f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561368a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136ae919061596f565b90506001600160a01b03811661384c57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156136fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613720919061596f565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561376d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613791919061596f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156137f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381a919061596f565b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055613875565b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03841690811790915561146d903090600019613bd1565b6000546001600160a01b031633146138fc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b6019805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146139795760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b602054610100900460ff16156139d15760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610d13565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015613a0b573d6000803e3d6000fd5b50565b6000546001600160a01b03163314613a5c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b6020546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610d6c565b6000546001600160a01b03163314613b045760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d13565b8284600e54613b1391906157cf565b613b1d919061581d565b601e55600e548190613b309084906157cf565b613b3a919061581d565b601f5550505050565b6020546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015613bad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6491906159ba565b6001600160a01b038316613c275760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d13565b6001600160a01b038216613c7d5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d13565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600f54600e5460009190825b60085460ff82161015613e4557826001600060088460ff1681548110613d1257613d12615860565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613d805750816002600060088460ff1681548110613d5957613d59615860565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613d9d57600e54600f54613d95919061581d565b935050505090565b6001600060088360ff1681548110613db757613db7615860565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613de6908461588f565b92506002600060088360ff1681548110613e0257613e02615860565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613e31908361588f565b915080613e3d8161590a565b915050613cea565b50600e54600f54613e56919061581d565b821015613e7457600e54600f54613e6d919061581d565b9250505090565b613e6d818361581d565b60006001600160a01b038416613efc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610d13565b6001600160a01b038316613f785760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610d13565b60008211613fee5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610d13565b613ff884846142fa565b1561422b5760205460ff1661404f5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610d13565b6001600160a01b03841660009081526003602052604090205460ff168061408e57506001600160a01b03831660009081526003602052604090205460ff165b1561413657612710601c541015614136576127106140aa6118f0565b601c546140b791906157cf565b6140c1919061581d565b8211156141365760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610d13565b6017546001600160a01b0384811691161480159061416d57506001600160a01b03831660009081526003602052604090205460ff16155b801561417c5750612710601d54105b1561422b5761271061418c6118f0565b601d5461419991906157cf565b6141a3919061581d565b826141ad856120f8565b6141b7919061592a565b111561422b5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610d13565b6001600160a01b03841660009081526006602052604090205460019060ff168061426d57506001600160a01b03841660009081526006602052604090205460ff165b15614276575060005b6001600160a01b03841660009081526003602052604090205460ff16156142e557601b5460ff161580156142b15750601b54610100900460ff165b156142e55760006142c1306120f8565b9050601e5481106142e357601f5481106142da5750601f545b6142e3816143ce565b505b6142f1858585846147b8565b95945050505050565b600080546001600160a01b0384811691161480159061432757506000546001600160a01b03838116911614155b801561433e57506000546001600160a01b03163214155b801561436357506001600160a01b03821660009081526009602052604090205460ff16155b801561438857506001600160a01b03831660009081526009602052604090205460ff16155b801561439f57506001600160a01b03821661dead14155b80156143b357506001600160a01b03821615155b80156119ae57506001600160a01b0383163014159392505050565b601b805460ff1916600117905560145461ffff640100000000909104166143f4576147ab565b3060009081526005602090815260408083206016546001600160a01b031684529091529020546000191461444d573060009081526005602090815260408083206016546001600160a01b03168452909152902060001990555b60145460009060029061ffff640100000000820481169161446f9116856157cf565b614479919061581d565b614483919061581d565b90506000614491828461588f565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106144cb576144cb615860565b6001600160a01b03928316602091820292909201810191909152601654604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa15801561453d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614561919061596f565b8160018151811061457457614574615860565b6001600160a01b0392831660209182029290920101526016546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906145d39085906000908690309042906004016159d7565b600060405180830381600087803b1580156145ed57600080fd5b505af1158015614601573d6000803e3d6000fd5b5050601454600092506002915061ffff64010000000082048116916146279116476157cf565b614631919061581d565b61463b919061581d565b9050831561473657601654601a546040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810187905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156146cc573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906146f1919061598c565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b60004711801561476657506014546000906147609061ffff808216916401000000009004166158e7565b61ffff16115b156147a6576019546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156147a4573d6000803e3d6000fd5b505b505050505b50601b805460ff19169055565b602054600090610100900460ff16614864576147d48585614b1c565b602054610100900460ff161580156147f157506147f185856142fa565b156148645760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610d13565b600061487286868686614c7b565b60808101516001600160a01b03881660009081526001602052604090205491925061489c9161588f565b6001600160a01b03808816600090815260016020526040808220939093556060840151918816815291909120546148d3919061592a565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff1615614945576001600160a01b03861660009081526002602052604090205461492b90859061588f565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526007602052604090205460ff16156149a55780516001600160a01b03861660009081526002602052604090205461498b919061592a565b6001600160a01b0386166000908152600260205260409020555b604081015115614a87576149b7613cde565b81604001516149c691906157cf565b306000908152600160205260409020546149e0919061592a565b3060009081526001602090815260408083209390935560079052205460ff1615614a355760408082015130600090815260026020529190912054614a24919061592a565b306000908152600260205260409020555b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360400151604051614a7e91815260200190565b60405180910390a35b60008160a001511180614a9e575060008160200151115b15614abf578060a00151600f6000828254614ab9919061588f565b90915550505b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360000151604051614b0891815260200190565b60405180910390a350600195945050505050565b602054610100900460ff1615614b9a5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610d13565b614ba482826142fa565b158015614bbe57506018546001600160a01b038281169116145b1561114e576001600160a01b038083166000908152600960209081526040909120805460ff19166001179055805461ff001916610100179081905562010000900416614c3457602080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601b805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b614cb46040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b614ced6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000614cf7613cde565b9050614d0381866157cf565b6080830152614d1287876142fa565b15614dc5576020546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015614dae575060408051601f3d908101601f19168201909252614dab918101906159ba565b60015b614db757600080fd5b905080614dc357600080fd5b505b8315614f4a576001600160a01b03861660009081526003602052604090205460ff1615614e22576012546010805461ffff80841663ffffffff19909216919091176601000000000000909304166201000002919091179055614eab565b6001600160a01b03871660009081526003602052604090205460ff1615614e79576011546010805461ffff80841663ffffffff19909216919091176601000000000000909304166201000002919091179055614eab565b6013546010805461ffff80841663ffffffff199092169190911766010000000000009093041662010000029190911790555b60155460105461ffff6601000000000000909204821691614ecd9116876157cf565b614ed7919061581d565b602083015260155460105461ffff6601000000000000909204821691614f049162010000900416876157cf565b614f0e919061581d565b604083018190526020830151614f24919061592a565b614f2e908661588f565b82526020820151614f409082906157cf565b60a0830152614f63565b6000602083018190526040830181905285835260a08301525b808260400151614f7391906157cf565b8260a00151614f82919061592a565b8260800151614f91919061588f565b60608301525095945050505050565b828054614fac90615659565b90600052602060002090601f016020900481019282614fce5760008555615014565b82601f10614fe757805160ff1916838001178555615014565b82800160010185558215615014579182015b82811115615014578251825591602001919060010190614ff9565b50615020929150615024565b5090565b5b808211156150205760008155600101615025565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561509157615091615039565b604052919050565b600067ffffffffffffffff8211156150b3576150b3615039565b5060051b60200190565b6001600160a01b0381168114613a0b57600080fd5b600082601f8301126150e357600080fd5b813560206150f86150f383615099565b615068565b82815260059290921b8401810191818101908684111561511757600080fd5b8286015b8481101561513b57803561512e816150bd565b835291830191830161511b565b509695505050505050565b8015158114613a0b57600080fd5b6000806040838503121561516757600080fd5b823567ffffffffffffffff81111561517e57600080fd5b61518a858286016150d2565b925050602083013561519b81615146565b809150509250929050565b600060208083528351808285015260005b818110156151d3578581018301518582016040015282016151b7565b818111156151e5576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561520d57600080fd5b5035919050565b6000806040838503121561522757600080fd5b8235615232816150bd565b946020939093013593505050565b6000806040838503121561525357600080fd5b823561525e816150bd565b9150602083013561519b81615146565b803561ffff8116811461528057600080fd5b919050565b60008060006060848603121561529a57600080fd5b6152a38461526e565b92506152b16020850161526e565b91506152bf6040850161526e565b90509250925092565b6000806000606084860312156152dd57600080fd5b83356152e8816150bd565b925060208401356152f8816150bd565b929592945050506040919091013590565b600082601f83011261531a57600080fd5b8135602061532a6150f383615099565b82815260059290921b8401810191818101908684111561534957600080fd5b8286015b8481101561513b578035835291830191830161534d565b6000806040838503121561537757600080fd5b823567ffffffffffffffff8082111561538f57600080fd5b61539b868387016150d2565b935060208501359150808211156153b157600080fd5b506153be85828601615309565b9150509250929050565b6000602082840312156153da57600080fd5b81356119ae816150bd565b600080600080608085870312156153fb57600080fd5b843561540681615146565b9350602085013561541681615146565b9250604085013561542681615146565b9150606085013561543681615146565b939692955090935050565b6000806040838503121561545457600080fd5b61545d8361526e565b915061546b6020840161526e565b90509250929050565b60006020828403121561548657600080fd5b81356119ae81615146565b600080604083850312156154a457600080fd5b82356154af816150bd565b9150602083013561519b816150bd565b6000806000606084860312156154d457600080fd5b833567ffffffffffffffff808211156154ec57600080fd5b6154f8878388016150d2565b9450602086013591508082111561550e57600080fd5b5061551b86828701615309565b925050604084013561552c816150bd565b809150509250925092565b60008060006060848603121561554c57600080fd5b833567ffffffffffffffff8082111561556457600080fd5b615570878388016150d2565b9450602086013591508082111561558657600080fd5b61559287838801615309565b935060408601359150808211156155a857600080fd5b506155b586828701615309565b9150509250925092565b600080600080608085870312156155d557600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b8381101561562a5781516001600160a01b031687529582019590820190600101615605565b509495945050505050565b60408152600061564860408301856155f1565b905082151560208301529392505050565b600181811c9082168061566d57607f821691505b602082108114156156a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156157175781600019048211156156fd576156fd6156ad565b8085161561570a57918102915b93841c93908002906156e1565b509250929050565b60008261572e57506001610f64565b8161573b57506000610f64565b8160018114615751576002811461575b57615777565b6001915050610f64565b60ff84111561576c5761576c6156ad565b50506001821b610f64565b5060208310610133831016604e8410600b841016171561579a575081810a610f64565b6157a483836156dc565b80600019048211156157b8576157b86156ad565b029392505050565b60006119ae60ff84168361571f565b60008160001904831182151516156157e9576157e96156ad565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261582c5761582c6157ee565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000828210156158a1576158a16156ad565b500390565b60006000198214156158ba576158ba6156ad565b5060010190565b600061ffff8083168185168083038211156158de576158de6156ad565b01949350505050565b600061ffff83811690831681811015615902576159026156ad565b039392505050565b600060ff821660ff811415615921576159216156ad565b60010192915050565b6000821982111561593d5761593d6156ad565b500190565b60006020828403121561595457600080fd5b5051919050565b60008261596a5761596a6157ee565b500690565b60006020828403121561598157600080fd5b81516119ae816150bd565b6000806000606084860312156159a157600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156159cc57600080fd5b81516119ae81615146565b85815284602082015260a0604082015260006159f660a08301866155f1565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220e359411a13ee40fe34735e93c008983a4d71e05407f94c13e9a4db61fa6b5bef64736f6c634300080b0033

Deployed Bytecode Sourcemap

6231:28179:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8548:73;;;;;;;;;;;;8579:42;8548:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;8548:73:0;;;;;;;;20821:172;;;;;;;;;;-1:-1:-1;20821:172:0;;;;;:::i;:::-;;:::i;:::-;;14732:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8450:26::-;;;;;;;;;;-1:-1:-1;8450:26:0;;;;-1:-1:-1;;;;;8450:26:0;;;21691:149;;;;;;;;;;-1:-1:-1;21691:149:0;;;;;:::i;:::-;;:::i;15426:161::-;;;;;;;;;;-1:-1:-1;15426:161:0;;;;;:::i;:::-;;:::i;:::-;;;4046:14:1;;4039:22;4021:41;;4009:2;3994:18;15426:161:0;3881:187:1;24261:149:0;;;;;;;;;;;;;:::i;:::-;;;4219:25:1;;;4207:2;4192:18;24261:149:0;4073:177:1;8483:28:0;;;;;;;;;;-1:-1:-1;8483:28:0;;;;-1:-1:-1;;;;;8483:28:0;;;18627:1519;;;;;;;;;;-1:-1:-1;18627:1519:0;;;;;:::i;:::-;;:::i;14467:83::-;;;;;;;;;;-1:-1:-1;14540:7:0;;14467:83;;8252:189;;;;;;;;;;-1:-1:-1;8252:189:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4875:6:1;4908:15;;;4890:34;;4960:15;;;4955:2;4940:18;;4933:43;5012:15;;;4992:18;;;4985:43;;;;5064:15;;;5059:2;5044:18;;5037:43;4852:3;4837:19;8252:189:0;4642:444:1;22925:551:0;;;;;;;;;;-1:-1:-1;22925:551:0;;;;;:::i;:::-;;:::i;16093:306::-;;;;;;;;;;-1:-1:-1;16093:306:0;;;;;:::i;:::-;;:::i;29792:373::-;;;;;;;;;;-1:-1:-1;29792:373:0;;;;;:::i;:::-;;:::i;24850:147::-;;;;;;;;;;-1:-1:-1;24850:147:0;;;;;:::i;:::-;;:::i;21488:195::-;;;;;;;;;;-1:-1:-1;21488:195:0;;;;;:::i;:::-;;:::i;18075:141::-;;;;;;;;;;;;;:::i;20154:250::-;;;;;;;;;;-1:-1:-1;20154:250:0;;;;;:::i;:::-;;:::i;14556:80::-;;;;;;;;;;-1:-1:-1;14624:9:0;;14556:80;;14624:9;;;;8362:36:1;;8350:2;8335:18;14556:80:0;8220:184:1;21372:108:0;;;;;;;;;;-1:-1:-1;21372:108:0;;;;;:::i;:::-;;:::i;17921:146::-;;;;;;;;;;-1:-1:-1;17921:146:0;;;;;:::i;:::-;;:::i;16407:215::-;;;;;;;;;;-1:-1:-1;16407:215:0;;;;;:::i;:::-;;:::i;8518:21::-;;;;;;;;;;-1:-1:-1;8518:21:0;;;;-1:-1:-1;;;;;8518:21:0;;;9124:34;;;;;;;;;;-1:-1:-1;9124:34:0;;;;;;;;13321:590;;;;;;;;;;-1:-1:-1;13321:590:0;;;;;:::i;:::-;;:::i;18224:125::-;;;;;;;;;;-1:-1:-1;18224:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;18313:28:0;18289:4;18313:28;;;:19;:28;;;;;;;;;18224:125;9165:36;;;;;;;;;;-1:-1:-1;9165:36:0;;;;;;;;;;;21852:526;;;;;;;;;;-1:-1:-1;21852:526:0;;;;;:::i;:::-;;:::i;21260:104::-;;;;;;;;;;;;;:::i;18357:134::-;;;;;;;;;;-1:-1:-1;18357:134:0;;;;;:::i;:::-;;:::i;20412:248::-;;;;;;;;;;-1:-1:-1;20412:248:0;;;;;:::i;:::-;;:::i;24110:143::-;;;;;;;;;;;;;:::i;15045:198::-;;;;;;;;;;-1:-1:-1;15045:198:0;;;;;:::i;:::-;;:::i;13919:195::-;;;;;;;;;;;;;:::i;7680:140::-;;;;;;;;;;-1:-1:-1;7680:140:0;;;;;;;;;;;;;;;;;;;;;;;;;;;17413:500;;;;;;;;;;-1:-1:-1;17413:500:0;;;;;:::i;:::-;;:::i;18499:120::-;;;;;;;;;;-1:-1:-1;18499:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;18591:20:0;18567:4;18591:20;;;:11;:20;;;;;;;;;18499:120;14818:80;;;;;;;;;;-1:-1:-1;14870:7:0;13299:6;-1:-1:-1;;;;;13299:6:0;14818:80;24261:149;22386:531;;;;;;;;;;-1:-1:-1;22386:531:0;;;;;:::i;:::-;;:::i;15912:173::-;;;;;;;;;;;;;:::i;29164:429::-;;;;;;;;;;;;;:::i;14642:84::-;;;;;;;;;;;;;:::i;16630:225::-;;;;;;;;;;-1:-1:-1;16630:225:0;;;;;:::i;:::-;;:::i;15251:167::-;;;;;;;;;;-1:-1:-1;15251:167:0;;;;;:::i;:::-;;:::i;23484:210::-;;;;;;;;;;-1:-1:-1;23484:210:0;;;;;:::i;:::-;;:::i;7980:145::-;;;;;;;;;;-1:-1:-1;7980:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;7829:142;;;;;;;;;;-1:-1:-1;7829:142:0;;;;;;;;;;;;;;;;;;;;;;;;;;;21001:118;;;;;;;;;;-1:-1:-1;21001:118:0;;;;;:::i;:::-;;:::i;25005:165::-;;;;;;;;;;-1:-1:-1;25005:165:0;;;;;:::i;:::-;;:::i;8134:109::-;;;;;;;;;;-1:-1:-1;8134:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;9122:6:1;9155:15;;;9137:34;;9207:15;;;9202:2;9187:18;;9180:43;9259:15;;9239:18;;;9232:43;;;;9100:2;9085:18;8134:109:0;8916:365:1;23702:194:0;;;;;;;;;;-1:-1:-1;23702:194:0;;;;;:::i;:::-;;:::i;14904:133::-;;;;;;;;;;-1:-1:-1;14904:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;15006:19:0;;;14988:7;15006:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;14904:133;10775:1870;;;;;;;;;;-1:-1:-1;10775:1870:0;;;;;:::i;:::-;;:::i;30173:482::-;;;;;;;;;;-1:-1:-1;30173:482:0;;;;;:::i;:::-;;:::i;23904:198::-;;;;;;;;;;-1:-1:-1;23904:198:0;;;;;:::i;:::-;;:::i;16863:542::-;;;;;;;;;;-1:-1:-1;16863:542:0;;;;;:::i;:::-;;:::i;24715:127::-;;;;;;;;;;-1:-1:-1;24715:127:0;;;;;:::i;:::-;;:::i;29601:183::-;;;;;;;;;;;;;:::i;20668:145::-;;;;;;;;;;-1:-1:-1;20668:145:0;;;;;:::i;:::-;;:::i;8728:160::-;;;;;;;;;;-1:-1:-1;8728:160:0;;;;;;-1:-1:-1;;;;;8728:160:0;;;;;;;;;;;-1:-1:-1;;;;;11769:15:1;;;11751:34;;11821:15;;;;11816:2;11801:18;;11794:43;11663:18;8728:160:0;11500:343:1;24418:289:0;;;;;;;;;;-1:-1:-1;24418:289:0;;;;;:::i;:::-;;:::i;8919:39::-;;;;;;;;;;-1:-1:-1;8919:39:0;;;;;;;;;;;21127:125;;;;;;;;;;-1:-1:-1;21127:125:0;;;;;:::i;:::-;;:::i;20821:172::-;9821:6;;-1:-1:-1;;;;;9821:6:0;189:10;9821:22;9813:52;;;;-1:-1:-1;;;9813:52:0;;12440:2:1;9813:52:0;;;12422:21:1;12479:2;12459:18;;;12452:30;-1:-1:-1;;;12498:18:1;;;12491:47;12555:18;;9813:52:0;;;;;;;;;20929:9:::1;::::0;:56:::1;::::0;;;;:9;;;::::1;-1:-1:-1::0;;;;;20929:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;20967:8;;20977:7;;20929:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20821:172:::0;;:::o;14732:80::-;14780:13;14804:5;14797:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14732:80;:::o;21691:149::-;9821:6;;-1:-1:-1;;;;;9821:6:0;189:10;9821:22;9813:52;;;;-1:-1:-1;;;9813:52:0;;12440:2:1;9813:52:0;;;12422:21:1;12479:2;12459:18;;;12452:30;-1:-1:-1;;;12498:18:1;;;12491:47;12555:18;;9813:52:0;12238:341:1;9813:52:0;21775:2:::1;21768:3;:9;;21760:30;;;::::0;-1:-1:-1;;;21760:30:0;;14064:2:1;21760:30:0::1;::::0;::::1;14046:21:1::0;14103:1;14083:18;;;14076:29;14141:10;14121:18;;;14114:38;14169:18;;21760:30:0::1;13862:331:1::0;21760:30:0::1;21801:9;::::0;:31:::1;::::0;;;;::::1;::::0;::::1;4219:25:1::0;;;21801:9:0;;;::::1;-1:-1:-1::0;;;;;21801:9:0::1;::::0;:26:::1;::::0;4192:18:1;;21801:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21691:149:::0;:::o;15426:161::-;15501:4;15518:39;189:10;15541:7;15550:6;15518:8;:39::i;:::-;-1:-1:-1;15575:4:0;15426:161;;;;;:::o;24261:149::-;24392:9;;24306:7;;24388:13;;24392:9;;24388:2;:13;:::i;:::-;24378:5;24360:14;;24335:22;:20;:22::i;:::-;:39;;;;:::i;:::-;24334:49;;;;:::i;:::-;24333:69;;;;:::i;:::-;24326:76;;24261:149;:::o;18627:1519::-;9821:6;;-1:-1:-1;;;;;9821:6:0;189:10;9821:22;9813:52;;;;-1:-1:-1;;;9813:52:0;;12440:2:1;9813:52:0;;;12422:21:1;12479:2;12459:18;;;12452:30;-1:-1:-1;;;12498:18:1;;;12491:47;12555:18;;9813:52:0;12238:341:1;9813:52:0;18721:7:::1;18717:1422;;;-1:-1:-1::0;;;;;18754:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;18753:21;18745:62;;;::::0;-1:-1:-1;;;18745:62:0;;16639:2:1;18745:62:0::1;::::0;::::1;16621:21:1::0;16678:2;16658:18;;;16651:30;16717;16697:18;;;16690:58;16765:18;;18745:62:0::1;16437:352:1::0;18745:62:0::1;-1:-1:-1::0;;;;;18825:16:0;::::1;18844:1;18825:16:::0;;;:7:::1;:16;::::0;;;;;:20;18822:116:::1;;-1:-1:-1::0;;;;;18905:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;18885:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;18866:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;18822:116:::1;-1:-1:-1::0;;;;;18952:20:0;;::::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;18952:27:0::1;18975:4;18952:27;::::0;;19008:6:::1;::::0;;;::::1;18997:17;18994:79;;19034:9;:23:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;19034:23:0;;;;;::::1;::::0;;-1:-1:-1;;19034:23:0::1;-1:-1:-1::0;;;;;19034:23:0;::::1;;::::0;;18994:79:::1;18627:1519:::0;;:::o;18717:1422::-:1;19095:7;19090:1049;;-1:-1:-1::0;;;;;19127:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;19119:61;;;::::0;-1:-1:-1;;;19119:61:0;;16996:2:1;19119:61:0::1;::::0;::::1;16978:21:1::0;17035:2;17015:18;;;17008:30;17074;17054:18;;;17047:58;17122:18;;19119:61:0::1;16794:352:1::0;19119:61:0::1;19210:6;::::0;-1:-1:-1;;;;;19199:17:0;;::::1;19210:6:::0;::::1;19199:17;19195:933;;;19275:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;19256:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;19237:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;19304:7:::1;:16:::0;;;;;:20;;;19343:11:::1;:20:::0;;;:28;;-1:-1:-1;;19343:28:0::1;::::0;;18627:1519;;:::o;19195:933::-:1;19396:9;:16:::0;19416:1:::1;19396:21;19393:735;;;19476:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;19457:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;19438:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;19505:7:::1;:16:::0;;;;;:20;;;19544:11:::1;:20:::0;;;:28;;-1:-1:-1;;19544:28:0::1;::::0;;19591:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;19591:15:0;;;;;-1:-1:-1;;19591:15:0::1;::::0;;;;;18627:1519;;:::o;19393:735::-:1;19652:9;19647:466;19671:9;:16:::0;19667:20;::::1;19647:466;;;19737:7;-1:-1:-1::0;;;;;19721:23:0::1;:9;19731:1;19721:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;19721:12:0::1;:23;19717:377;;;19788:9;19798:16:::0;;:20:::1;::::0;19817:1:::1;::::0;19798:20:::1;:::i;:::-;19788:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;19773:9:::1;:12:::0;;-1:-1:-1;;;;;19788:31:0;;::::1;::::0;19783:1;;19773:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;19773:46:0::1;-1:-1:-1::0;;;;;19773:46:0;;::::1;;::::0;;19846:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;19931:10:::1;:8;:10::i;:::-;-1:-1:-1::0;;;;;19912:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;19893:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;19968:11:::1;:20:::0;;;:28;;-1:-1:-1;;19968:28:0::1;::::0;;20023:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;20023:15:0;;;;;-1:-1:-1;;20023:15:0::1;::::0;;;;;19647:466:::1;18627:1519:::0;;:::o;19717:377::-:1;19689:3:::0;::::1;::::0;::::1;:::i;:::-;;;;19647:466;;;;18627:1519:::0;;:::o;22925:551::-;9821:6;;-1:-1:-1;;;;;9821:6:0;189:10;9821:22;9813:52;;;;-1:-1:-1;;;9813:52:0;;12440:2:1;9813:52:0;;;12422:21:1;12479:2;12459:18;;;12452:30;-1:-1:-1;;;12498:18:1;;;12491:47;12555:18;;9813:52:0;12238:341:1;9813:52:0;23052:10:::1;:21:::0;::::1;::::0;;::::1;23041:32:::0;;::::1;;::::0;::::1;::::0;:89:::1;;-1:-1:-1::0;23107:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;23094:36:::0;;::::1;;;23041:89;:146;;;;-1:-1:-1::0;23164:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;23151:36:::0;;::::1;;;23041:146;23033:155;;;::::0;::::1;;23199:12;23236:9:::0;23214:19:::1;23224:9:::0;23214:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;23199:46;;23273:4;23264:5;:13;;;;23256:22;;;::::0;::::1;;23289:14;:36:::0;;::::1;23379::::0;;::::1;::::0;::::1;::::0;23289;;::::1;::::0;::::1;23379::::0;;;;;;;;;23336:32;;::::1;23379:36:::0;::::1;::::0;;23453:15:::1;23361:7:::0;23453:5;:15:::1;:::i;:::-;23426:14;:42:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;22925:551:0:o;16093:306::-;-1:-1:-1;;;;;16214:19:0;;16193:4;16214:19;;;:11;:19;;;;;;;;16234:10;16214:31;;;;;;;;-1:-1:-1;;16214:52:0;16210:126;;-1:-1:-1;;;;;16283:19:0;;;;;;:11;:19;;;;;;;;16303:10;16283:31;;;;;;;:41;;16318:6;;16283:19;:41;;16318:6;;16283:41;:::i;:::-;;;;-1:-1:-1;;16210:126:0;16355:36;16365:6;16373:9;16384:6;16355:9;:36::i;:::-;16348:43;16093:306;-1:-1:-1;;;;16093:306:0:o;29792:373::-;29917:7;:14;29898:8;:15;:33;29890:67;;;;-1:-1:-1;;;29890:67:0;;18512:2:1;29890:67:0;;;18494:21:1;18551:2;18531:18;;;18524:30;18590:23;18570:18;;;18563:51;18631:18;;29890:67:0;18310:345:1;29890:67:0;29973:7;29968:190;29990:8;:15;29986:1;:19;;;29968:190;;;30060:7;30068:1;30060:10;;;;;;;;;;:::i;:::-;;;;;;;30035:21;30045:10;30035:9;:21::i;:::-;:35;;30027:44;;;;;;30086:60;30096:10;30108:8;30117:1;30108:11;;;;;;;;;;:::i;:::-;;;;;;;;;;;30136:9;;30132:13;;30136:9;;30132:2;:13;:::i;:::-;30121:7;30129:1;30121:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;30086:9;:60::i;:::-;-1:-1:-1;30007:3:0;;;;:::i;:::-;;;;29968:190;;24850:147;9821:6;;-1:-1:-1;;;;;9821:6:0;189:10;9821:22;9813:52;;;;-1:-1:-1;;;9813:52:0;;12440:2:1;9813:52:0;;;12422:21:1;12479:2;12459:18;;;12452:30;-1:-1:-1;;;12498:18:1;;;12491:47;12555:18;;9813:52:0;12238:341:1;9813:52:0;-1:-1:-1;;;;;24933:14:0;::::1;8579:42;24933:14;;24924:24;;;::::0;::::1;;24959:21:::0;:30;;-1:-1:-1;;24959:30:0::1;-1:-1:-1::0;;;;;24959:30:0;;;::::1;::::0;;;::::1;::::0;;24850:147::o;21488:195::-;9821:6;;-1:-1:-1;;;;;9821:6:0;189:10;9821:22;9813:52;;;;-1:-1:-1;;;9813:52:0;;12440:2:1;9813:52:0;;;12422:21:1;12479:2;12459:18;;;12452:30;-1:-1:-1;;;12498:18:1;;;12491:47;12555:18;;9813:52:0;12238:341:1;9813:52:0;21610:9:::1;::::0;:65:::1;::::0;;;;19072:14:1;;19065:22;21610:65:0::1;::::0;::::1;19047:41:1::0;19131:14;;19124:22;19104:18;;;19097:50;19190:14;;19183:22;19163:18;;;19156:50;19249:14;;19242:22;19222:18;;;19215:50;21610:9:0;;;::::1;-1:-1:-1::0;;;;;21610:9:0::1;::::0;:24:::1;::::0;19019:19:1;;21610:65:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21488:195:::0;;;;:::o;18075:141::-;18128:7;18185:21;18203:1;18185:9;:21::i;:::-;18167:15;8579:42;18167:9;:15::i;:::-;:39;;;;:::i;:::-;18156:7;;:51;;;;:::i;20154:250::-;20220:7;20259;;20248;:18;;20240:73;;;;-1:-1:-1;;;20240:73:0;;19611:2:1;20240:73:0;;;19593:21:1;19650:2;19630:18;;;19623:30;19689:34;19669:18;;;19662:62;19760:12;19740:18;;;19733:40;19790:19;;20240:73:0;19409:406:1;20240:73:0;20324:19;20347:10;:8;:10::i;:::-;20324:33;-1:-1:-1;20375:21:0;20324:33;20375:7;:21;:::i;:::-;20368:28;20154:250;-1:-1:-1;;;20154:250:0:o;21372:108::-;9821:6;;-1:-1:-1;;;;;9821:6:0;189:10;9821:22;9813:52;;;;-1:-1:-1;;;9813:52:0;;12440:2:1;9813:52:0;;;12422:21:1;12479:2;12459:18;;;12452:30;-1:-1:-1;;;12498:18:1;;;12491:47;12555:18;;9813:52:0;12238:341:1;9813:52:0;21441:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;21441:31:0::1;::::0;::::1;160:74:1::0;21441:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;21441:31:0::1;14:226:1::0;17921:146:0;9821:6;;-1:-1:-1;;;;;9821:6:0;189:10;9821:22;9813:52;;;;-1:-1:-1;;;9813:52:0;;12440:2:1;9813:52:0;;;12422:21:1;12479:2;12459:18;;;12452:30;-1:-1:-1;;;12498:18:1;;;12491:47;12555:18;;9813:52:0;12238:341:1;9813:52:0;18009:16:::1;::::0;::::1;::::0;::::1;;;18008:17;18000:26;;;::::0;::::1;;18037:13;:22:::0;;-1:-1:-1;;18037:22:0::1;-1:-1:-1::0;;;;;18037:22:0;;;::::1;::::0;;;::::1;::::0;;17921:146::o;16407:215::-;189:10;16495:4;16544:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16544:34:0;;;;;;;;;;16495:4;;16512:80;;16535:7;;16544:47;;16581:10;;16544:47;:::i;:::-;16512:8;:80::i;13321:590::-;9821:6;;-1:-1:-1;;;;;9821:6:0;189:10;9821:22;9813:52;;;;-1:-1:-1;;;9813:52:0;;12440:2:1;9813:52:0;;;12422:21:1;12479:2;12459:18;;;12452:30;-1:-1:-1;;;12498:18:1;;;12491:47;12555:18;;9813:52:0;12238:341:1;9813:52:0;-1:-1:-1;;;;;13402:22:0;::::1;13394:96;;;::::0;-1:-1:-1;;;13394:96:0;;20022:2:1;13394:96:0::1;::::0;::::1;20004:21:1::0;20061:2;20041:18;;;20034:30;20100:34;20080:18;;;20073:62;20171:31;20151:18;;;20144:59;20220:19;;13394:96:0::1;19820:425:1::0;13394:96:0::1;-1:-1:-1::0;;;;;13509:16:0;::::1;8579:42;13509:16;;13501:90;;;::::0;-1:-1:-1;;;13501:90:0;;20022:2:1;13501:90:0::1;::::0;::::1;20004:21:1::0;20061:2;20041:18;;;20034:30;20100:34;20080:18;;;20073:62;20171:31;20151:18;;;20144:59;20220:19;;13501:90:0::1;19820:425:1::0;13501:90:0::1;13622:6;::::0;;13602:34:::1;::::0;-1:-1:-1;;;;;13622:6:0;;::::1;::::0;13602:19:::1;:34::i;:::-;13647:35;13667:8;13677:4;13647:19;:35::i;:::-;13726:1;13716:6:::0;;13706:17:::1;::::0;-1:-1:-1;;;;;13716:6:0::1;13706:9;:17::i;:::-;:21;13703:99;;;13754:6;::::0;13744:46:::1;::::0;-1:-1:-1;;;;;13754:6:0::1;13762:8:::0;13772:17:::1;13754:6:::0;13772:9:::1;:17::i;13744:46::-;;13703:99;13822:6;:17:::0;;-1:-1:-1;;13822:17:0::1;-1:-1:-1::0;;;;;13822:17:0;::::1;::::0;;::::1;::::0;;13855:38:::1;::::0;13822:17;;;;13855:38:::1;::::0;13822:6;13855:38:::1;13321:590:::0;:::o;21852:526::-;9821:6;;-1:-1:-1;;;;;9821:6:0;189:10;9821:22;9813:52;;;;-1:-1:-1;;;9813:52:0;;12440:2:1;9813:52:0;;;12422:21:1;12479:2;12459:18;;;12452:30;-1:-1:-1;;;12498:18:1;;;12491:47;12555:18;;9813:52:0;12238:341:1;9813:52:0;21974:10:::1;:21:::0;::::1;::::0;;::::1;21963:32:::0;;::::1;;::::0;::::1;::::0;:89:::1;;-1:-1:-1::0;22029:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;22016:36:::0;;::::1;;;21963:89;:146;;;;-1:-1:-1::0;22086:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;22073:36:::0;;::::1;;;21963:146;21955:155;;;::::0;::::1;;22121:12;22158:9:::0;22136:19:::1;22146:9:::0;22136:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;22121:46;;22195:4;22186:5;:13;;;;22178:22;;;::::0;::::1;;22211:9;:31:::0;;::::1;22291::::0;;::::1;::::0;::::1;::::0;22211;;::::1;::::0;::::1;22291::::0;;;;;;;;;22253:27;;::::1;22291:31:::0;::::1;::::0;;22355:15:::1;22273:7:::0;22355:5;:15:::1;:::i;:::-;22333:9;:37:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;21852:526:0:o;21260:104::-;21305:7;21332:9;;;;;;;;;-1:-1:-1;;;;;21332:9:0;-1:-1:-1;;;;;21332:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18357:134::-;9821:6;;-1:-1:-1;;;;;9821:6:0;189:10;9821:22;9813:52;;;;-1:-1:-1;;;9813:52:0;;12440:2:1;9813:52:0;;;12422:21:1;12479:2;12459:18;;;12452:30;-1:-1:-1;;;12498:18:1;;;12491:47;12555:18;;9813:52:0;12238:341:1;9813:52:0;-1:-1:-1;;;;;18445:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;18445:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18357:134::o;20412:248::-;9821:6;;-1:-1:-1;;;;;9821:6:0;189:10;9821:22;9813:52;;;;-1:-1:-1;;;9813:52:0;;12440:2:1;9813:52:0;;;12422:21:1;12479:2;12459:18;;;12452:30;-1:-1:-1;;;12498:18:1;;;12491:47;12555:18;;9813:52:0;12238:341:1;9813:52:0;20496:16:::1;::::0;::::1;::::0;::::1;;;20495:17;20487:54;;;::::0;-1:-1:-1;;;20487:54:0;;20641:2:1;20487:54:0::1;::::0;::::1;20623:21:1::0;20680:2;20660:18;;;20653:30;20719:26;20699:18;;;20692:54;20763:18;;20487:54:0::1;20439:348:1::0;20487:54:0::1;-1:-1:-1::0;;;;;20560:28:0;::::1;20583:4;20560:28;;20552:55;;;::::0;-1:-1:-1;;;20552:55:0;;20994:2:1;20552:55:0::1;::::0;::::1;20976:21:1::0;21033:2;21013:18;;;21006:30;21072:16;21052:18;;;21045:44;21106:18;;20552:55:0::1;20792:338:1::0;20552:55:0::1;20618:9;:34:::0;;-1:-1:-1;;;;;20618:34:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;20412:248::o;24110:143::-;24235:9;;24151:7;;24231:13;;24235:9;;24231:2;:13;:::i;:::-;24221:5;24205:12;;24180:22;:20;:22::i;15045:198::-;-1:-1:-1;;;;;15135:20:0;;15111:7;15135:20;;;:11;:20;;;;;;;;15131:49;;;-1:-1:-1;;;;;;15164:16:0;;;;;:7;:16;;;;;;;15045:198::o;15131:49::-;-1:-1:-1;;;;;15218:16:0;;;;;;:7;:16;;;;;;15198:37;;:19;:37::i;13919:195::-;9821:6;;-1:-1:-1;;;;;9821:6:0;189:10;9821:22;9813:52;;;;-1:-1:-1;;;9813:52:0;;12440:2:1;9813:52:0;;;12422:21:1;12479:2;12459:18;;;12452:30;-1:-1:-1;;;12498:18:1;;;12491:47;12555:18;;9813:52:0;12238:341:1;9813:52:0;14006:6:::1;::::0;;13986:34:::1;::::0;-1:-1:-1;;;;;14006:6:0;;::::1;::::0;13986:19:::1;:34::i;:::-;14048:1;14031:19:::0;;-1:-1:-1;;14031:19:0::1;::::0;;14066:40:::1;::::0;14048:1;;14066:40:::1;::::0;14048:1;;14066:40:::1;13919:195::o:0;17413:500::-;9821:6;;-1:-1:-1;;;;;9821:6:0;189:10;9821:22;9813:52;;;;-1:-1:-1;;;9813:52:0;;12440:2:1;9813:52:0;;;12422:21:1;12479:2;12459:18;;;12452:30;-1:-1:-1;;;12498:18:1;;;12491:47;12555:18;;9813:52:0;12238:341:1;9813:52:0;17494:16;17490:416:::1;;-1:-1:-1::0;;;;;17527:13:0;;::::1;17543:5;17527:13:::0;;;:7:::1;:13;::::0;;;;;;;:21;;-1:-1:-1;;17527:21:0::1;::::0;;17563:9;;:32;;;;;::::1;::::0;::::1;21303:74:1::0;;;;21393:18;;;21386:50;;;;17563:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;21276:18:1;;17563:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;17490:416;17632:17;::::0;:22;17628:136:::1;;17721:6;17701:17;;17683:15;:35;;;;:::i;:::-;:44;17675:73;;;::::0;-1:-1:-1;;;17675:73:0;;21649:2:1;17675:73:0::1;::::0;::::1;21631:21:1::0;21688:2;21668:18;;;21661:30;21727:18;21707;;;21700:46;21763:18;;17675:73:0::1;21447:340:1::0;17675:73:0::1;-1:-1:-1::0;;;;;17778:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;;;:20;;-1:-1:-1;;17778:20:0::1;17794:4;17778:20:::0;;::::1;::::0;;;17833:15:::1;17813:17;:35:::0;;;17863:9;;:31;;;;;;;::::1;21303:74:1::0;;;;21393:18;;;21386:50;;;;17863:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;21276:18:1;;17863:31:0::1;21135:307:1::0;22386:531:0;9821:6;;-1:-1:-1;;;;;9821:6:0;189:10;9821:22;9813:52;;;;-1:-1:-1;;;9813:52:0;;12440:2:1;9813:52:0;;;12422:21:1;12479:2;12459:18;;;12452:30;-1:-1:-1;;;12498:18:1;;;12491:47;12555:18;;9813:52:0;12238:341:1;9813:52:0;22509:10:::1;:21:::0;::::1;::::0;;::::1;22498:32:::0;;::::1;;::::0;::::1;::::0;:89:::1;;-1:-1:-1::0;22564:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;22551:36:::0;;::::1;;;22498:89;:146;;;;-1:-1:-1::0;22621:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;22608:36:::0;;::::1;;;22498:146;22490:155;;;::::0;::::1;;22656:12;22693:9:::0;22671:19:::1;22681:9:::0;22671:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;22656:46;;22730:4;22721:5;:13;;;;22713:22;;;::::0;::::1;;22746:10;:32:::0;;::::1;22828::::0;;::::1;::::0;::::1;::::0;22746;;::::1;::::0;::::1;22828::::0;;;;;;;;;22789:28;;::::1;22828:32:::0;::::1;::::0;;22894:15:::1;22810:7:::0;22894:5;:15:::1;:::i;:::-;22871:10;:38:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;22386:531:0:o;15912:173::-;15976:4;9821:6;;-1:-1:-1;;;;;9821:6:0;189:10;9821:22;9813:52;;;;-1:-1:-1;;;9813:52:0;;12440:2:1;9813:52:0;;;12422:21:1;12479:2;12459:18;;;12452:30;-1:-1:-1;;;12498:18:1;;;12491:47;12555:18;;9813:52:0;12238:341:1;9813:52:0;16025:9:::1;::::0;15993:62:::1;::::0;16010:4:::1;::::0;-1:-1:-1;;;;;16025:9:0::1;-1:-1:-1::0;;15993:8:0::1;:62::i;:::-;-1:-1:-1::0;16073:4:0::1;15912:173:::0;:::o;29164:429::-;9821:6;;-1:-1:-1;;;;;9821:6:0;189:10;9821:22;9813:52;;;;-1:-1:-1;;;9813:52:0;;12440:2:1;9813:52:0;;;12422:21:1;12479:2;12459:18;;;12452:30;-1:-1:-1;;;12498:18:1;;;12491:47;12555:18;;9813:52:0;12238:341:1;9813:52:0;29226:14:::1;::::0;::::1;;29225:15;29217:52;;;::::0;-1:-1:-1;;;29217:52:0;;21994:2:1;29217:52:0::1;::::0;::::1;21976:21:1::0;22033:2;22013:18;;;22006:30;22072:26;22052:18;;;22045:54;22116:18;;29217:52:0::1;21792:348:1::0;29217:52:0::1;29288:16;::::0;::::1;::::0;::::1;;;29280:53;;;::::0;-1:-1:-1;;;29280:53:0;;22347:2:1;29280:53:0::1;::::0;::::1;22329:21:1::0;22386:2;22366:18;;;22359:30;22425:26;22405:18;;;22398:54;22469:18;;29280:53:0::1;22145:348:1::0;29280:53:0::1;29355:9;::::0;;;::::1;-1:-1:-1::0;;;;;29355:9:0::1;29344:99;;29395:9;:36:::0;;;::::1;29425:4;29395:36:::0;::::1;;::::0;;29344:99:::1;29457:9;::::0;29477:6:::1;::::0;29532:9:::1;::::0;29457:85:::1;::::0;;;;-1:-1:-1;;;;;29477:6:0;;::::1;29457:85;::::0;::::1;22721:74:1::0;22843:10;29492:12:0::1;22831:23:1::0;22811:18;;;22804:51;22903:18;29514:15:0::1;22891:31:1::0;22871:18;;;22864:59;29532:9:0::1;::::0;;::::1;22939:18:1::0;;;22932:45;29457:9:0;;;::::1;;::::0;:19:::1;::::0;22693::1;;29457:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;29453:101:::0;29564:14:::1;:21:::0;;-1:-1:-1;;29564:21:0::1;29581:4;29564:21;::::0;;29164:429::o;14642:84::-;14692:13;14716:7;14709:14;;;;;:::i;16630:225::-;189:10;16723:4;16772:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16772:34:0;;;;;;;;;;16723:4;;16740:85;;16763:7;;16772:52;;16809:15;;16772:52;:::i;15251:167::-;15329:4;15346:42;189:10;15370:9;15381:6;15346:9;:42::i;:::-;-1:-1:-1;15406:4:0;;15251:167;-1:-1:-1;;;15251:167:0:o;23484:210::-;9821:6;;-1:-1:-1;;;;;9821:6:0;189:10;9821:22;9813:52;;;;-1:-1:-1;;;9813:52:0;;12440:2:1;9813:52:0;;;12422:21:1;12479:2;12459:18;;;12452:30;-1:-1:-1;;;12498:18:1;;;12491:47;12555:18;;9813:52:0;12238:341:1;9813:52:0;23569:7:::1;:29:::0;;::::1;23609::::0;;::::1;::::0;::::1;-1:-1:-1::0;;23609:29:0;;;23569;;::::1;23609::::0;::::1;::::0;;23665:21:::1;23629:9:::0;23589;23665:21:::1;:::i;:::-;23649:7;:37:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;23484:210:0:o;21001:118::-;9821:6;;-1:-1:-1;;;;;9821:6:0;189:10;9821:22;9813:52;;;;-1:-1:-1;;;9813:52:0;;12440:2:1;9813:52:0;;;12422:21:1;12479:2;12459:18;;;12452:30;-1:-1:-1;;;12498:18:1;;;12491:47;12555:18;;9813:52:0;12238:341:1;9813:52:0;21075:9:::1;::::0;:36:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;21075:36:0::1;::::0;::::1;160:74:1::0;21075:9:0;;;::::1;::::0;;::::1;::::0;:27:::1;::::0;133:18:1;;21075:36:0::1;14:226:1::0;25005:165:0;9821:6;;-1:-1:-1;;;;;9821:6:0;189:10;9821:22;9813:52;;;;-1:-1:-1;;;9813:52:0;;12440:2:1;9813:52:0;;;12422:21:1;12479:2;12459:18;;;12452:30;-1:-1:-1;;;12498:18:1;;;12491:47;12555:18;;9813:52:0;12238:341:1;9813:52:0;25080:19:::1;:30:::0;;;::::1;;;;-1:-1:-1::0;;25080:30:0;;::::1;;::::0;;25126:36:::1;::::0;::::1;::::0;::::1;::::0;25102:8;4046:14:1;4039:22;4021:41;;4009:2;3994:18;;3881:187;25126:36:0::1;;;;;;;;25005:165:::0;:::o;23702:194::-;9821:6;;-1:-1:-1;;;;;9821:6:0;189:10;9821:22;9813:52;;;;-1:-1:-1;;;9813:52:0;;12440:2:1;9813:52:0;;;12422:21:1;12479:2;12459:18;;;12452:30;-1:-1:-1;;;12498:18:1;;;12491:47;12555:18;;9813:52:0;12238:341:1;9813:52:0;23793:2:::1;23782:7;:13;;23774:81;;;::::0;-1:-1:-1;;;23774:81:0;;23190:2:1;23774:81:0::1;::::0;::::1;23172:21:1::0;23229:2;23209:18;;;23202:30;23268:34;23248:18;;;23241:62;23339:25;23319:18;;;23312:53;23382:19;;23774:81:0::1;22988:419:1::0;23774:81:0::1;23866:12;:22:::0;23702:194::o;10775:1870::-;9821:6;;-1:-1:-1;;;;;9821:6:0;189:10;9821:22;9813:52;;;;-1:-1:-1;;;9813:52:0;;12440:2:1;9813:52:0;;;12422:21:1;12479:2;12459:18;;;12452:30;-1:-1:-1;;;12498:18:1;;;12491:47;12555:18;;9813:52:0;12238:341:1;9813:52:0;10914:19:::1;::::0;;;::::1;;;10913:20;10905:34;;;::::0;-1:-1:-1;;;10905:34:0;;23614:2:1;10905:34:0::1;::::0;::::1;23596:21:1::0;23653:1;23633:18;;;23626:29;23691:3;23671:18;;;23664:31;23712:18;;10905:34:0::1;23412:324:1::0;10905:34:0::1;10976:3;10958:8;:15;:21;10950:35;;;::::0;-1:-1:-1;;;10950:35:0;;23943:2:1;10950:35:0::1;::::0;::::1;23925:21:1::0;23982:1;23962:18;;;23955:29;24020:3;24000:18;;;23993:31;24041:18;;10950:35:0::1;23741:324:1::0;10950:35:0::1;11023:7;:14;11004:8;:15;:33;10996:47;;;::::0;-1:-1:-1;;;10996:47:0;;24272:2:1;10996:47:0::1;::::0;::::1;24254:21:1::0;24311:1;24291:18;;;24284:29;24349:3;24329:18;;;24322:31;24370:18;;10996:47:0::1;24070:324:1::0;10996:47:0::1;11071:19;11054:14;:36:::0;11101:9:::1;:33:::0;;;::::1;::::0;-1:-1:-1;;;;;11101:33:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;11156:9;;::::1;;11145:99;;11196:9;:36:::0;;;::::1;11226:4;11196:36:::0;::::1;;::::0;;11145:99:::1;11258:9;::::0;:33:::1;::::0;;;;11285:4:::1;11258:33;::::0;::::1;160:74:1::0;11258:9:0;;;::::1;-1:-1:-1::0;;;;;11258:9:0::1;::::0;:18:::1;::::0;133::1;;11258:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;11254:49:::0;11334:11:::1;11317:14;;:28;11313:121;;;11362:9;:14:::0;;-1:-1:-1;;11362:14:0::1;11374:2;11362:14;::::0;;11313:121:::1;;;11409:9;:13:::0;;-1:-1:-1;;11409:13:0::1;11421:1;11409:13;::::0;;11313:121:::1;11476:9;::::0;11472:13:::1;::::0;11476:9:::1;;11472:2;:13;:::i;:::-;11454:14;;:32;;;;:::i;:::-;11444:7;:42:::0;;;11523:21:::1;::::0;-1:-1:-1;;11523:21:0::1;:::i;:::-;11508:37;::::0;-1:-1:-1;;11508:37:0::1;:::i;:::-;11497:7;:49:::0;11557:18:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;:5:::1;::::0;:18:::1;:::i;:::-;-1:-1:-1::0;11586:16:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;:7:::1;::::0;:16:::1;:::i;:::-;-1:-1:-1::0;11635:13:0::1;::::0;11613:9:::1;:36:::0;;-1:-1:-1;;11613:36:0::1;-1:-1:-1::0;;;;;11635:13:0;;::::1;11613:36:::0;;::::1;::::0;;11680:19:::1;::::0;;;;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;11635:13;11680:19:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11669:42:0::1;;11712:9;;;;;;;;;-1:-1:-1::0;;;;;11712:9:0::1;-1:-1:-1::0;;;;;11712:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11669:75;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;11769:15:1;;;11669:75:0::1;::::0;::::1;11751:34:1::0;11738:4:0::1;11801:18:1::0;;;11794:43;11663:18;;11669:75:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11660:6;:84:::0;;-1:-1:-1;;11660:84:0::1;-1:-1:-1::0;;;;;11660:84:0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;11755:15:0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;11755:22:0::1;-1:-1:-1::0;11755:22:0::1;::::0;;11805:7:::1;::::0;11820:5:::1;::::0;11805:11:::1;::::0;11815:1:::1;11805:11;:::i;:::-;11804:21;;;;:::i;:::-;11788:13;:37:::0;11850:7:::1;::::0;11866:5:::1;::::0;11850:12:::1;::::0;11860:2:::1;11850:12;:::i;:::-;11849:22;;;;:::i;:::-;11836:10;:35:::0;11882:19:::1;:26:::0;;;::::1;::::0;::::1;::::0;;11943:7:::1;::::0;11904:4:::1;11882:26:::0;11932:7:::1;13272::::0;13299:6;-1:-1:-1;;;;;13299:6:0;;13234:79;11932:7:::1;-1:-1:-1::0;;;;;11924:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;11924:16:0;:26;11987:7:::1;13272::::0;13299:6;-1:-1:-1;;;;;13299:6:0;;13234:79;11987:7:::1;-1:-1:-1::0;;;;;11966:38:0::1;11983:1;-1:-1:-1::0;;;;;11966:38:0::1;;11996:7;;11966:38;;;;4219:25:1::0;;4207:2;4192:18;;4073:177;11966:38:0::1;;;;;;;;12049:9;::::0;12017:62:::1;::::0;12034:4:::1;::::0;-1:-1:-1;;;;;12049:9:0::1;-1:-1:-1::0;;12017:8:0::1;:62::i;:::-;12096:9;12092:168;12115:8;:15;12111:1;:19;12092:168;;;12185:9;::::0;12151:14:::1;::::0;12181:13:::1;::::0;12185:9:::1;;12181:2;:13;:::i;:::-;12168:7;12176:1;12168:10;;;;;;;;:::i;:::-;;;;;;;:26;;;;:::i;:::-;12151:43;;12209:39;12219:7;13272::::0;13299:6;-1:-1:-1;;;;;13299:6:0;;13234:79;12219:7:::1;12228:8;12237:1;12228:11;;;;;;;;:::i;:::-;;;;;;;12241:6;12209:9;:39::i;:::-;;12136:124;12132:3;;;;;:::i;:::-;;;;12092:168;;;;12272:53;12282:7;13272::::0;13299:6;-1:-1:-1;;;;;13299:6:0;;13234:79;12282:7:::1;12299:4;12306:18;12316:7;13272::::0;13299:6;-1:-1:-1;;;;;13299:6:0;;13234:79;12272:53:::1;-1:-1:-1::0;12338:9:0::1;::::0;-1:-1:-1;;;;;12338:9:0::1;:25;12371:21;12416:4;12436:24;12416:4:::0;12436:9:::1;:24::i;:::-;12475:1;12518::::0;12561:7:::1;13272::::0;13299:6;-1:-1:-1;;;;;13299:6:0;;13234:79;12561:7:::1;12338:271;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;25486:15:1;;;12338:271:0::1;::::0;::::1;25468:34:1::0;25518:18;;;25511:34;;;;25561:18;;;25554:34;;;;25604:18;;;25597:34;25668:15;;;25647:19;;;25640:44;12583:15:0::1;25700:19:1::0;;;25693:35;25379:19;;12338:271:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;12622:15;:13;:15::i;30173:482::-:0;30328:8;:15;30309:8;:15;:34;:72;;;;;30366:8;:15;30347:8;:15;:34;30309:72;30301:106;;;;-1:-1:-1;;;30301:106:0;;18512:2:1;30301:106:0;;;18494:21:1;18551:2;18531:18;;;18524:30;18590:23;18570:18;;;18563:51;18631:18;;30301:106:0;18310:345:1;30301:106:0;30423:7;30418:230;30440:8;:15;30436:1;:19;;;30418:230;;;30536:8;30545:1;30536:11;;;;;;;;;;:::i;:::-;;;;;;;30521:8;30530:1;30521:11;;;;;;;;;;:::i;:::-;;;;;;;30511:7;;:21;;;;:::i;:::-;30510:37;;;;:::i;:::-;30485:21;30495:10;30485:9;:21::i;:::-;:62;;30477:71;;;;;;30563:73;30573:10;30585:8;30594:1;30585:11;;;;;;;;;;:::i;:::-;;;;;;;30624:8;30633:1;30624:11;;;;;;;;;;:::i;:::-;;;;;;;30609:8;30618:1;30609:11;;;;;;;;;;:::i;:::-;;;;;;;30599:7;;:21;;;;:::i;:::-;30598:37;;;;:::i;30563:73::-;-1:-1:-1;30457:3:0;;;;:::i;:::-;;;;30418:230;;;;30173:482;;;:::o;23904:198::-;9821:6;;-1:-1:-1;;;;;9821:6:0;189:10;9821:22;9813:52;;;;-1:-1:-1;;;9813:52:0;;12440:2:1;9813:52:0;;;12422:21:1;12479:2;12459:18;;;12452:30;-1:-1:-1;;;12498:18:1;;;12491:47;12555:18;;9813:52:0;12238:341:1;9813:52:0;23996:2:::1;23985:7;:13;;23977:82;;;::::0;-1:-1:-1;;;23977:82:0;;26252:2:1;23977:82:0::1;::::0;::::1;26234:21:1::0;26291:2;26271:18;;;26264:30;26330:34;26310:18;;;26303:62;26401:26;26381:18;;;26374:54;26445:19;;23977:82:0::1;26050:420:1::0;23977:82:0::1;24070:14;:24:::0;23904:198::o;16863:542::-;9821:6;;-1:-1:-1;;;;;9821:6:0;189:10;9821:22;9813:52;;;;-1:-1:-1;;;9813:52:0;;12440:2:1;9813:52:0;;;12422:21:1;12479:2;12459:18;;;12452:30;-1:-1:-1;;;12498:18:1;;;12491:47;12555:18;;9813:52:0;12238:341:1;9813:52:0;16934:20:::1;16967:9;16934:43;;16988:16;17018:10;-1:-1:-1::0;;;;;17018:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17007:40:0::1;;17056:4;17063:10;-1:-1:-1::0;;;;;17063:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17007:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;11769:15:1;;;17007:74:0::1;::::0;::::1;11751:34:1::0;11821:15;;11801:18;;;11794:43;11663:18;;17007:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16988:93:::0;-1:-1:-1;;;;;;17096:22:0;::::1;17092:200;;17155:10;-1:-1:-1::0;;;;;17155:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17144:43:0::1;;17196:4;17203:10;-1:-1:-1::0;;;;;17203:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17144:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;11769:15:1;;;17144:77:0::1;::::0;::::1;11751:34:1::0;11821:15;;11801:18;;;11794:43;11663:18;;17144:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17135:6;:86:::0;;-1:-1:-1;;17135:86:0::1;-1:-1:-1::0;;;;;17135:86:0;;;::::1;::::0;;;::::1;::::0;;17092:200:::1;;;17263:6;:17:::0;;-1:-1:-1;;17263:17:0::1;-1:-1:-1::0;;;;;17263:17:0;::::1;;::::0;;17092:200:::1;17302:9;:22:::0;;-1:-1:-1;;17302:22:0::1;-1:-1:-1::0;;;;;17302:22:0;::::1;::::0;;::::1;::::0;;;17335:62:::1;::::0;17352:4:::1;::::0;-1:-1:-1;;17335:8:0::1;:62::i;24715:127::-:0;9821:6;;-1:-1:-1;;;;;9821:6:0;189:10;9821:22;9813:52;;;;-1:-1:-1;;;9813:52:0;;12440:2:1;9813:52:0;;;12422:21:1;12479:2;12459:18;;;12452:30;-1:-1:-1;;;12498:18:1;;;12491:47;12555:18;;9813:52:0;12238:341:1;9813:52:0;24792:11:::1;:42:::0;;-1:-1:-1;;24792:42:0::1;-1:-1:-1::0;;;;;24792:42:0;;;::::1;::::0;;;::::1;::::0;;24715:127::o;29601:183::-;9821:6;;-1:-1:-1;;;;;9821:6:0;189:10;9821:22;9813:52;;;;-1:-1:-1;;;9813:52:0;;12440:2:1;9813:52:0;;;12422:21:1;12479:2;12459:18;;;12452:30;-1:-1:-1;;;12498:18:1;;;12491:47;12555:18;;9813:52:0;12238:341:1;9813:52:0;29668:16:::1;::::0;::::1;::::0;::::1;;;29667:17;29659:58;;;::::0;-1:-1:-1;;;29659:58:0;;26677:2:1;29659:58:0::1;::::0;::::1;26659:21:1::0;26716:2;26696:18;;;26689:30;26755;26735:18;;;26728:58;26803:18;;29659:58:0::1;26475:352:1::0;29659:58:0::1;13272:7:::0;13299:6;;29728:48:::1;::::0;-1:-1:-1;;;;;13299:6:0;;;;29754:21:::1;29728:48:::0;::::1;;;::::0;29754:21;;29728:48;13272:7;29728:48;29754:21;13299:6;29728:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;29601:183::o:0;20668:145::-;9821:6;;-1:-1:-1;;;;;9821:6:0;189:10;9821:22;9813:52;;;;-1:-1:-1;;;9813:52:0;;12440:2:1;9813:52:0;;;12422:21:1;12479:2;12459:18;;;12452:30;-1:-1:-1;;;12498:18:1;;;12491:47;12555:18;;9813:52:0;12238:341:1;9813:52:0;20758:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;21321:55:1;;;20758:47:0::1;::::0;::::1;21303:74:1::0;21420:14;;21413:22;21393:18;;;21386:50;20758:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;21276:18:1;;20758:47:0::1;21135:307:1::0;24418:289:0;9821:6;;-1:-1:-1;;;;;9821:6:0;189:10;9821:22;9813:52;;;;-1:-1:-1;;;9813:52:0;;12440:2:1;9813:52:0;;;12422:21:1;12479:2;12459:18;;;12452:30;-1:-1:-1;;;12498:18:1;;;12491:47;12555:18;;9813:52:0;12238:341:1;9813:52:0;24618:16:::1;24598;24588:7;;:26;;;;:::i;:::-;24587:47;;;;:::i;:::-;24571:13;:63:::0;24659:7:::1;::::0;24686:13;;24659:23:::1;::::0;24669:13;;24659:23:::1;:::i;:::-;24658:41;;;;:::i;:::-;24645:10;:54:::0;-1:-1:-1;;;;24418:289:0:o;21127:125::-;21212:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;21212:32:0;;;160:74:1;21188:4:0;;21212:9;;;;;:23;;133:18:1;;21212:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15595:309::-;-1:-1:-1;;;;;15689:20:0;;15681:52;;;;-1:-1:-1;;;15681:52:0;;27284:2:1;15681:52:0;;;27266:21:1;27323:2;27303:18;;;27296:30;27362:21;27342:18;;;27335:49;27401:18;;15681:52:0;27082:343:1;15681:52:0;-1:-1:-1;;;;;15752:21:0;;15744:53;;;;-1:-1:-1;;;15744:53:0;;27284:2:1;15744:53:0;;;27266:21:1;27323:2;27303:18;;;27296:30;27362:21;27342:18;;;27335:49;27401:18;;15744:53:0;27082:343:1;15744:53:0;-1:-1:-1;;;;;15810:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;15863:33;;4219:25:1;;;15863:33:0;;4192:18:1;15863:33:0;;;;;;;15595:309;;;:::o;33883:524::-;33963:7;;33999;;33925;;33963;33925;34017:280;34039:9;:16;34035:20;;;;34017:280;;;34105:7;34081;:21;34089:9;34099:1;34089:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34089:12:0;34081:21;;;;;;;;;;;;;:31;;:66;;;34140:7;34116;:21;34124:9;34134:1;34124:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34124:12:0;34116:21;;;;;;;;;;;;;:31;34081:66;34077:96;;;34166:7;;34156;;:17;;;;:::i;:::-;34149:24;;;;;33883:524;:::o;34077:96::-;34208:7;:21;34216:9;34226:1;34216:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34216:12:0;34208:21;;;;;;;;;;;;;34198:31;;:7;:31;:::i;:::-;34188:41;;34264:7;:21;34272:9;34282:1;34272:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34272:12:0;34264:21;;;;;;;;;;;;;34254:31;;:7;:31;:::i;:::-;34244:41;-1:-1:-1;34057:3:0;;;;:::i;:::-;;;;34017:280;;;;34331:7;;34321;;:17;;;;:::i;:::-;34311:7;:27;34307:57;;;34357:7;;34347;;:17;;;;:::i;:::-;34340:24;;;;33883:524;:::o;34307:57::-;34382:17;34392:7;34382;:17;:::i;25546:1634::-;25625:4;-1:-1:-1;;;;;25650:18:0;;25642:68;;;;-1:-1:-1;;;25642:68:0;;27632:2:1;25642:68:0;;;27614:21:1;27671:2;27651:18;;;27644:30;27710:34;27690:18;;;27683:62;27781:7;27761:18;;;27754:35;27806:19;;25642:68:0;27430:401:1;25642:68:0;-1:-1:-1;;;;;25729:16:0;;25721:64;;;;-1:-1:-1;;;25721:64:0;;28038:2:1;25721:64:0;;;28020:21:1;28077:2;28057:18;;;28050:30;28116:34;28096:18;;;28089:62;28187:5;28167:18;;;28160:33;28210:19;;25721:64:0;27836:399:1;25721:64:0;25813:1;25804:6;:10;25796:64;;;;-1:-1:-1;;;25796:64:0;;28442:2:1;25796:64:0;;;28424:21:1;28481:2;28461:18;;;28454:30;28520:34;28500:18;;;28493:62;28591:11;28571:18;;;28564:39;28620:19;;25796:64:0;28240:405:1;25796:64:0;25874:20;25885:4;25891:2;25874:10;:20::i;:::-;25871:644;;;25915:14;;;;25911:89;;25950:34;;-1:-1:-1;;;25950:34:0;;28852:2:1;25950:34:0;;;28834:21:1;28891:2;28871:18;;;28864:30;28930:26;28910:18;;;28903:54;28974:18;;25950:34:0;28650:348:1;25911:89:0;-1:-1:-1;;;;;26017:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;26034:11:0;;;;;;:7;:11;;;;;;;;26017:28;26014:245;;;26084:5;26069:12;;:20;26065:179;;;26174:5;26148:22;:20;:22::i;:::-;26133:12;;:37;;;;:::i;:::-;26132:47;;;;:::i;:::-;26122:6;:57;;26114:110;;;;-1:-1:-1;;;26114:110:0;;29205:2:1;26114:110:0;;;29187:21:1;29244:2;29224:18;;;29217:30;29283:34;29263:18;;;29256:62;29354:10;29334:18;;;29327:38;29382:19;;26114:110:0;29003:404:1;26114:110:0;26282:13;;-1:-1:-1;;;;;26276:19:0;;;26282:13;;26276:19;;;;:35;;-1:-1:-1;;;;;;26300:11:0;;;;;;:7;:11;;;;;;;;26299:12;26276:35;:61;;;;;26332:5;26315:14;;:22;26276:61;26273:231;;;26436:5;26410:22;:20;:22::i;:::-;26393:14;;:39;;;;:::i;:::-;26392:49;;;;:::i;:::-;26382:6;26366:13;26376:2;26366:9;:13::i;:::-;:22;;;;:::i;:::-;:75;;26358:130;;;;-1:-1:-1;;;26358:130:0;;29614:2:1;26358:130:0;;;29596:21:1;29653:2;29633:18;;;29626:30;29692:34;29672:18;;;29665:62;29763:12;29743:18;;;29736:40;29793:19;;26358:130:0;29412:406:1;26358:130:0;-1:-1:-1;;;;;26560:25:0;;26527:12;26560:25;;;:19;:25;;;;;;26542:4;;26560:25;;;:52;;-1:-1:-1;;;;;;26589:23:0;;;;;;:19;:23;;;;;;;;26560:52;26557:98;;;-1:-1:-1;26638:5:0;26557:98;-1:-1:-1;;;;;26671:11:0;;;;;;:7;:11;;;;;;;;26667:443;;;26704:6;;;;26703:7;:47;;;;-1:-1:-1;26731:19:0;;;;;;;26703:47;26699:394;;;26785:28;26816:24;26834:4;26816:9;:24::i;:::-;26785:55;;26887:13;;26863:20;:37;26859:219;;26952:10;;26928:20;:34;26925:77;;-1:-1:-1;26989:10:0;;26925:77;27024:34;27037:20;27024:12;:34::i;:::-;26766:327;26699:394;27128:44;27146:4;27152:2;27156:6;27164:7;27128:17;:44::i;:::-;27121:51;25546:1634;-1:-1:-1;;;;;25546:1634:0:o;25178:360::-;25246:4;13299:6;;-1:-1:-1;;;;;25270:15:0;;;13299:6;;25270:15;;;;:45;;-1:-1:-1;13272:7:0;13299:6;-1:-1:-1;;;;;25302:13:0;;;13299:6;;25302:13;;25270:45;:82;;;;-1:-1:-1;13272:7:0;13299:6;-1:-1:-1;;;;;13299:6:0;25332:9;:20;;25270:82;:121;;;;-1:-1:-1;;;;;;25370:21:0;;;;;;:17;:21;;;;;;;;25369:22;25270:121;:162;;;;-1:-1:-1;;;;;;25409:23:0;;;;;;:17;:23;;;;;;;;25408:24;25270:162;:189;;;;-1:-1:-1;;;;;;25449:10:0;;8579:42;25449:10;;25270:189;:222;;;;-1:-1:-1;;;;;;25476:16:0;;;;25270:222;:260;;;;-1:-1:-1;;;;;;25509:21:0;;25525:4;25509:21;;25263:267;25178:360;-1:-1:-1;;;25178:360:0:o;27188:1452::-;9715:6;:13;;-1:-1:-1;;9715:13:0;9724:4;9715:13;;;27275:7:::1;:13:::0;::::1;::::0;;;::::1;;27271:44;;27308:7;;27271:44;27350:4;27330:26;::::0;;;:11:::1;:26;::::0;;;;;;;27365:9:::1;::::0;-1:-1:-1;;;;;27365:9:0::1;27330:46:::0;;;;;;;;-1:-1:-1;;27330:67:0::1;27327:165;;27434:4;27414:26;::::0;;;:11:::1;:26;::::0;;;;;;;27449:9:::1;::::0;-1:-1:-1;;;;;27449:9:0::1;27414:46:::0;;;;;;;-1:-1:-1;;27414:66:0;;27327:165:::1;27570:7;:13:::0;27504:17:::1;::::0;27587:1:::1;::::0;27570:13:::1;::::0;;::::1;::::0;::::1;::::0;27526:40:::1;::::0;27549:17:::1;27526:20:::0;:40:::1;:::i;:::-;27525:58;;;;:::i;:::-;27524:64;;;;:::i;:::-;27504:84:::0;-1:-1:-1;27601:20:0::1;27624:32;27504:84:::0;27624:20;:32:::1;:::i;:::-;27701:16;::::0;;27715:1:::1;27701:16:::0;;;;;::::1;::::0;;27601:55;;-1:-1:-1;27677:21:0::1;::::0;27701:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;27701:16:0::1;27677:40;;27746:4;27728;27733:1;27728:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27728:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;27772:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;27728:7;;27772:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27762:4;27767:1;27762:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27762:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;27801:9:::1;::::0;:191:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:191:::1;::::0;27876:12;;27801:9:::1;::::0;27919:4;;27946::::1;::::0;27966:15:::1;::::0;27801:191:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;28081:7:0::1;:13:::0;28007:24:::1;::::0;-1:-1:-1;28098:1:0::1;::::0;-1:-1:-1;28081:13:0::1;::::0;;::::1;::::0;::::1;::::0;28036:41:::1;::::0;28060:17:::1;28036:21;:41;:::i;:::-;28035:59;;;;:::i;:::-;28034:65;;;;:::i;:::-;28007:92:::0;-1:-1:-1;28116:13:0;;28112:359:::1;;28146:9;::::0;28315:21;;28146:239:::1;::::0;;;;28223:4:::1;28146:239;::::0;::::1;25468:34:1::0;25518:18;;;25511:34;;;28146:9:0::1;25561:18:1::0;;;25554:34;;;25604:18;;;25597:34;-1:-1:-1;;;;;28315:21:0;;::::1;25647:19:1::0;;;25640:44;28355:15:0::1;25700:19:1::0;;;25693:35;28146:9:0;::::1;::::0;:25:::1;::::0;28179:16;;25379:19:1;;28146:239:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;28405:54:0::1;::::0;;30635:25:1;;;30691:2;30676:18;;30669:34;;;30719:18;;;30712:34;;;28405:54:0::1;::::0;-1:-1:-1;30623:2:1;30608:18;28405:54:0::1;;;;;;;28112:359;28509:1;28485:21;:25;:66;;;;-1:-1:-1::0;28530:7:0::1;:17:::0;28550:1:::1;::::0;28514:33:::1;::::0;28530:17:::1;::::0;;::::1;::::0;28514:13;;::::1;;:33;:::i;:::-;:37;;;28485:66;28481:152;;;28568:11;:21:::0;:53:::1;::::0;-1:-1:-1;;;;;28568:21:0;;::::1;::::0;28599::::1;28568:53:::0;::::1;;;::::0;:21:::1;:53:::0;:21;:53;28599:21;28568;:53;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28481:152;27260:1380;;;;9739:1;-1:-1:-1::0;9751:6:0;:14;;-1:-1:-1;;9751:14:0;;;27188:1452::o;30864:1300::-;30987:16;;30965:4;;30987:16;;;;;30982:221;;31020:28;31039:4;31045:2;31020:18;:28::i;:::-;31068:16;;;;;;;31067:17;:41;;;;;31088:20;31099:4;31105:2;31088:10;:20::i;:::-;31063:129;;;31129:47;;-1:-1:-1;;;31129:47:0;;30959:2:1;31129:47:0;;;30941:21:1;30998:2;30978:18;;;30971:30;31037:34;31017:18;;;31010:62;31108:7;31088:18;;;31081:35;31133:19;;31129:47:0;30757:401:1;31063:129:0;31215:25;31243:38;31254:4;31260:2;31264:7;31273;31243:10;:38::i;:::-;31326:14;;;;-1:-1:-1;;;;;31310:13:0;;;;;;:7;:13;;;;;;31215:66;;-1:-1:-1;31310:30:0;;;:::i;:::-;-1:-1:-1;;;;;31294:13:0;;;;;;;:7;:13;;;;;;:46;;;;31379:22;;;;31365:11;;;;;;;;;;:36;;31379:22;31365:36;:::i;:::-;-1:-1:-1;;;;;31351:11:0;;;;;;;:7;:11;;;;;;;;:50;;;;31418:17;;;;;:11;:17;;;;;;;31414:89;;;-1:-1:-1;;;;;31468:13:0;;;;;;:7;:13;;;;;;:23;;31484:7;;31468:23;:::i;:::-;-1:-1:-1;;;;;31452:13:0;;;;;;:7;:13;;;;;:39;31414:89;-1:-1:-1;;;;;31517:15:0;;;;;;:11;:15;;;;;;;;31513:98;;;31577:22;;-1:-1:-1;;;;;31563:11:0;;31577:22;31563:11;;;:7;:11;;;;;;:36;;31577:22;31563:36;:::i;:::-;-1:-1:-1;;;;;31549:11:0;;;;;;:7;:11;;;;;:50;31513:98;31627:12;;;;:16;31623:353;;31726:10;:8;:10::i;:::-;31711:6;:12;;;:25;;;;:::i;:::-;31701:4;31685:22;;;;:7;:22;;;;;;:52;;;;:::i;:::-;31676:4;31660:22;;;;:7;:22;;;;;;;;:77;;;;31755:11;:26;;;;;;31752:110;;;31850:12;;;;;31841:4;31825:22;;;;:7;:22;;;;;;;:37;;31850:12;31825:37;:::i;:::-;31816:4;31800:22;;;;:7;:22;;;;;:62;31752:110;31905:4;-1:-1:-1;;;;;31882:43:0;31891:4;-1:-1:-1;;;;;31882:43:0;;31912:6;:12;;;31882:43;;;;4219:25:1;;4207:2;4192:18;;4073:177;31882:43:0;;;;;;;;31623:353;32004:1;31990:6;:11;;;:15;:34;;;;32023:1;32009:6;:11;;;:15;31990:34;31986:89;;;32052:6;:11;;;32041:7;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;31986:89:0;32107:2;-1:-1:-1;;;;;32092:42:0;32101:4;-1:-1:-1;;;;;32092:42:0;;32111:6;:22;;;32092:42;;;;4219:25:1;;4207:2;4192:18;;4073:177;32092:42:0;;;;;;;;-1:-1:-1;32152:4:0;;30864:1300;-1:-1:-1;;;;;30864:1300:0:o;28648:508::-;28730:16;;;;;;;28729:17;28721:65;;;;-1:-1:-1;;;28721:65:0;;31365:2:1;28721:65:0;;;31347:21:1;31404:2;31384:18;;;31377:30;31443:34;31423:18;;;31416:62;31514:5;31494:18;;;31487:33;31537:19;;28721:65:0;31163:399:1;28721:65:0;28802:20;28813:4;28819:2;28802:10;:20::i;:::-;28801:21;:37;;;;-1:-1:-1;28832:6:0;;-1:-1:-1;;;;;28826:12:0;;;28832:6;;28826:12;28801:37;28797:352;;;-1:-1:-1;;;;;28855:23:0;;;;;;;:17;:23;;;;;;;;:30;;-1:-1:-1;;28855:30:0;28881:4;28855:30;;;28900:23;;-1:-1:-1;;28900:23:0;28855:30;28900:23;;;;;28949:9;;;;28938:107;;28993:9;:36;;;;29023:4;28993:36;;;;;28938:107;29059:19;:26;;-1:-1:-1;;29059:26:0;;;;;29105:32;;-1:-1:-1;4021:41:1;;29105:32:0;;4009:2:1;3994:18;29105:32:0;;;;;;;28648:508;;:::o;32172:1703::-;32266:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32266:18:0;32297:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32297:25:0;32333:19;32355:10;:8;:10::i;:::-;32333:32;-1:-1:-1;32395:21:0;32333:32;32395:7;:21;:::i;:::-;32378:14;;;:38;32433:20;32444:4;32450:2;32433:10;:20::i;:::-;32429:315;;;32501:9;;:38;;;;;-1:-1:-1;;;;;31848:15:1;;;32501:38:0;;;31830:34:1;31900:15;;;31880:18;;;31873:43;31932:18;;;31925:34;;;32470:12:0;;32501:9;;;;;:19;;31742:18:1;;32501:38:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;32501:38:0;;;;;;;;-1:-1:-1;;32501:38:0;;;;;;;;;;;;:::i;:::-;;;32497:164;;32637:8;;;32497:164;32590:5;-1:-1:-1;32681:7:0;32677:56;;32709:8;;;32677:56;32455:289;32429:315;32759:7;32756:991;;;-1:-1:-1;;;;;32787:11:0;;;;;;:7;:11;;;;;;;;32783:474;;;32842:10;:18;32819:12;:41;;32842:18;;;;-1:-1:-1;;32879:45:0;;;;;;;32904:20;;;;;32879:45;;;;;;;;32783:474;;;-1:-1:-1;;;;;32950:13:0;;;;;;:7;:13;;;;;;;;32946:311;;;33007:9;:17;32984:12;:40;;33007:17;;;;-1:-1:-1;;33043:44:0;;;;;;;33068:19;;;;;33043:44;;;;;;;;32946:311;;;33151:14;:22;33128:12;:45;;33151:22;;;;-1:-1:-1;;33192:49:0;;;;;;;33217:24;;;;;33192:49;;;;;;;;32946:311;33322:10;:27;33298:12;:20;33322:27;;;;;;;;33288:30;;33298:20;33288:7;:30;:::i;:::-;33287:62;;;;:::i;:::-;33273:11;;;:76;33416:10;:27;33390:12;:22;33416:27;;;;;;;;33380:32;;33390:22;;;;33380:7;:32;:::i;:::-;33379:64;;;;:::i;:::-;33364:12;;;:79;;;33494:11;;;;:26;;33364:79;33494:26;:::i;:::-;33483:38;;:7;:38;:::i;:::-;33458:63;;33552:11;;;;:25;;33566:11;;33552:25;:::i;:::-;33538:11;;;:39;32756:991;;;33624:1;33610:11;;;:15;;;33640:12;;;:16;;;33671:32;;;33720:11;;;:15;32756:991;33830:11;33815:6;:12;;;:26;;;;:::i;:::-;33800:6;:11;;;:42;;;;:::i;:::-;33782:6;:14;;;:61;;;;:::i;:::-;33757:22;;;:86;-1:-1:-1;33757:22:0;32172:1703;-1:-1:-1;;;;;32172:1703:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;245:184:1;297:77;294:1;287:88;394:4;391:1;384:15;418:4;415:1;408:15;434:334;505:2;499:9;561:2;551:13;;-1:-1:-1;;547:86:1;535:99;;664:18;649:34;;685:22;;;646:62;643:88;;;711:18;;:::i;:::-;747:2;740:22;434:334;;-1:-1:-1;434:334:1:o;773:183::-;833:4;866:18;858:6;855:30;852:56;;;888:18;;:::i;:::-;-1:-1:-1;933:1:1;929:14;945:4;925:25;;773:183::o;961:154::-;-1:-1:-1;;;;;1040:5:1;1036:54;1029:5;1026:65;1016:93;;1105:1;1102;1095:12;1120:737;1174:5;1227:3;1220:4;1212:6;1208:17;1204:27;1194:55;;1245:1;1242;1235:12;1194:55;1281:6;1268:20;1307:4;1331:60;1347:43;1387:2;1347:43;:::i;:::-;1331:60;:::i;:::-;1425:15;;;1511:1;1507:10;;;;1495:23;;1491:32;;;1456:12;;;;1535:15;;;1532:35;;;1563:1;1560;1553:12;1532:35;1599:2;1591:6;1587:15;1611:217;1627:6;1622:3;1619:15;1611:217;;;1707:3;1694:17;1724:31;1749:5;1724:31;:::i;:::-;1768:18;;1806:12;;;;1644;;1611:217;;;-1:-1:-1;1846:5:1;1120:737;-1:-1:-1;;;;;;1120:737:1:o;1862:118::-;1948:5;1941:13;1934:21;1927:5;1924:32;1914:60;;1970:1;1967;1960:12;1985:477;2075:6;2083;2136:2;2124:9;2115:7;2111:23;2107:32;2104:52;;;2152:1;2149;2142:12;2104:52;2192:9;2179:23;2225:18;2217:6;2214:30;2211:50;;;2257:1;2254;2247:12;2211:50;2280:61;2333:7;2324:6;2313:9;2309:22;2280:61;:::i;:::-;2270:71;;;2391:2;2380:9;2376:18;2363:32;2404:28;2426:5;2404:28;:::i;:::-;2451:5;2441:15;;;1985:477;;;;;:::o;2467:656::-;2579:4;2608:2;2637;2626:9;2619:21;2669:6;2663:13;2712:6;2707:2;2696:9;2692:18;2685:34;2737:1;2747:140;2761:6;2758:1;2755:13;2747:140;;;2856:14;;;2852:23;;2846:30;2822:17;;;2841:2;2818:26;2811:66;2776:10;;2747:140;;;2905:6;2902:1;2899:13;2896:91;;;2975:1;2970:2;2961:6;2950:9;2946:22;2942:31;2935:42;2896:91;-1:-1:-1;3039:2:1;3027:15;-1:-1:-1;;3023:88:1;3008:104;;;;3114:2;3004:113;;2467:656;-1:-1:-1;;;2467:656:1:o;3376:180::-;3435:6;3488:2;3476:9;3467:7;3463:23;3459:32;3456:52;;;3504:1;3501;3494:12;3456:52;-1:-1:-1;3527:23:1;;3376:180;-1:-1:-1;3376:180:1:o;3561:315::-;3629:6;3637;3690:2;3678:9;3669:7;3665:23;3661:32;3658:52;;;3706:1;3703;3696:12;3658:52;3745:9;3732:23;3764:31;3789:5;3764:31;:::i;:::-;3814:5;3866:2;3851:18;;;;3838:32;;-1:-1:-1;;;3561:315:1:o;4255:382::-;4320:6;4328;4381:2;4369:9;4360:7;4356:23;4352:32;4349:52;;;4397:1;4394;4387:12;4349:52;4436:9;4423:23;4455:31;4480:5;4455:31;:::i;:::-;4505:5;-1:-1:-1;4562:2:1;4547:18;;4534:32;4575:30;4534:32;4575:30;:::i;5091:159::-;5158:20;;5218:6;5207:18;;5197:29;;5187:57;;5240:1;5237;5230:12;5187:57;5091:159;;;:::o;5255:328::-;5329:6;5337;5345;5398:2;5386:9;5377:7;5373:23;5369:32;5366:52;;;5414:1;5411;5404:12;5366:52;5437:28;5455:9;5437:28;:::i;:::-;5427:38;;5484:37;5517:2;5506:9;5502:18;5484:37;:::i;:::-;5474:47;;5540:37;5573:2;5562:9;5558:18;5540:37;:::i;:::-;5530:47;;5255:328;;;;;:::o;5588:456::-;5665:6;5673;5681;5734:2;5722:9;5713:7;5709:23;5705:32;5702:52;;;5750:1;5747;5740:12;5702:52;5789:9;5776:23;5808:31;5833:5;5808:31;:::i;:::-;5858:5;-1:-1:-1;5915:2:1;5900:18;;5887:32;5928:33;5887:32;5928:33;:::i;:::-;5588:456;;5980:7;;-1:-1:-1;;;6034:2:1;6019:18;;;;6006:32;;5588:456::o;6049:662::-;6103:5;6156:3;6149:4;6141:6;6137:17;6133:27;6123:55;;6174:1;6171;6164:12;6123:55;6210:6;6197:20;6236:4;6260:60;6276:43;6316:2;6276:43;:::i;6260:60::-;6354:15;;;6440:1;6436:10;;;;6424:23;;6420:32;;;6385:12;;;;6464:15;;;6461:35;;;6492:1;6489;6482:12;6461:35;6528:2;6520:6;6516:15;6540:142;6556:6;6551:3;6548:15;6540:142;;;6622:17;;6610:30;;6660:12;;;;6573;;6540:142;;6716:595;6834:6;6842;6895:2;6883:9;6874:7;6870:23;6866:32;6863:52;;;6911:1;6908;6901:12;6863:52;6951:9;6938:23;6980:18;7021:2;7013:6;7010:14;7007:34;;;7037:1;7034;7027:12;7007:34;7060:61;7113:7;7104:6;7093:9;7089:22;7060:61;:::i;:::-;7050:71;;7174:2;7163:9;7159:18;7146:32;7130:48;;7203:2;7193:8;7190:16;7187:36;;;7219:1;7216;7209:12;7187:36;;7242:63;7297:7;7286:8;7275:9;7271:24;7242:63;:::i;:::-;7232:73;;;6716:595;;;;;:::o;7316:247::-;7375:6;7428:2;7416:9;7407:7;7403:23;7399:32;7396:52;;;7444:1;7441;7434:12;7396:52;7483:9;7470:23;7502:31;7527:5;7502:31;:::i;7568:647::-;7642:6;7650;7658;7666;7719:3;7707:9;7698:7;7694:23;7690:33;7687:53;;;7736:1;7733;7726:12;7687:53;7775:9;7762:23;7794:28;7816:5;7794:28;:::i;:::-;7841:5;-1:-1:-1;7898:2:1;7883:18;;7870:32;7911:30;7870:32;7911:30;:::i;:::-;7960:7;-1:-1:-1;8019:2:1;8004:18;;7991:32;8032:30;7991:32;8032:30;:::i;:::-;8081:7;-1:-1:-1;8140:2:1;8125:18;;8112:32;8153:30;8112:32;8153:30;:::i;:::-;7568:647;;;;-1:-1:-1;7568:647:1;;-1:-1:-1;;7568:647:1:o;8409:256::-;8475:6;8483;8536:2;8524:9;8515:7;8511:23;8507:32;8504:52;;;8552:1;8549;8542:12;8504:52;8575:28;8593:9;8575:28;:::i;:::-;8565:38;;8622:37;8655:2;8644:9;8640:18;8622:37;:::i;:::-;8612:47;;8409:256;;;;;:::o;8670:241::-;8726:6;8779:2;8767:9;8758:7;8754:23;8750:32;8747:52;;;8795:1;8792;8785:12;8747:52;8834:9;8821:23;8853:28;8875:5;8853:28;:::i;9286:388::-;9354:6;9362;9415:2;9403:9;9394:7;9390:23;9386:32;9383:52;;;9431:1;9428;9421:12;9383:52;9470:9;9457:23;9489:31;9514:5;9489:31;:::i;:::-;9539:5;-1:-1:-1;9596:2:1;9581:18;;9568:32;9609:33;9568:32;9609:33;:::i;9679:730::-;9806:6;9814;9822;9875:2;9863:9;9854:7;9850:23;9846:32;9843:52;;;9891:1;9888;9881:12;9843:52;9931:9;9918:23;9960:18;10001:2;9993:6;9990:14;9987:34;;;10017:1;10014;10007:12;9987:34;10040:61;10093:7;10084:6;10073:9;10069:22;10040:61;:::i;:::-;10030:71;;10154:2;10143:9;10139:18;10126:32;10110:48;;10183:2;10173:8;10170:16;10167:36;;;10199:1;10196;10189:12;10167:36;;10222:63;10277:7;10266:8;10255:9;10251:24;10222:63;:::i;:::-;10212:73;;;10335:2;10324:9;10320:18;10307:32;10348:31;10373:5;10348:31;:::i;:::-;10398:5;10388:15;;;9679:730;;;;;:::o;10414:821::-;10566:6;10574;10582;10635:2;10623:9;10614:7;10610:23;10606:32;10603:52;;;10651:1;10648;10641:12;10603:52;10691:9;10678:23;10720:18;10761:2;10753:6;10750:14;10747:34;;;10777:1;10774;10767:12;10747:34;10800:61;10853:7;10844:6;10833:9;10829:22;10800:61;:::i;:::-;10790:71;;10914:2;10903:9;10899:18;10886:32;10870:48;;10943:2;10933:8;10930:16;10927:36;;;10959:1;10956;10949:12;10927:36;10982:63;11037:7;11026:8;11015:9;11011:24;10982:63;:::i;:::-;10972:73;;11098:2;11087:9;11083:18;11070:32;11054:48;;11127:2;11117:8;11114:16;11111:36;;;11143:1;11140;11133:12;11111:36;;11166:63;11221:7;11210:8;11199:9;11195:24;11166:63;:::i;:::-;11156:73;;;10414:821;;;;;:::o;11848:385::-;11934:6;11942;11950;11958;12011:3;11999:9;11990:7;11986:23;11982:33;11979:53;;;12028:1;12025;12018:12;11979:53;-1:-1:-1;;12051:23:1;;;12121:2;12106:18;;12093:32;;-1:-1:-1;12172:2:1;12157:18;;12144:32;;12223:2;12208:18;12195:32;;-1:-1:-1;11848:385:1;-1:-1:-1;11848:385:1:o;12584:484::-;12637:3;12675:5;12669:12;12702:6;12697:3;12690:19;12728:4;12757:2;12752:3;12748:12;12741:19;;12794:2;12787:5;12783:14;12815:1;12825:218;12839:6;12836:1;12833:13;12825:218;;;12904:13;;-1:-1:-1;;;;;12900:62:1;12888:75;;12983:12;;;;13018:15;;;;12861:1;12854:9;12825:218;;;-1:-1:-1;13059:3:1;;12584:484;-1:-1:-1;;;;;12584:484:1:o;13073:342::-;13274:2;13263:9;13256:21;13237:4;13294:56;13346:2;13335:9;13331:18;13323:6;13294:56;:::i;:::-;13286:64;;13400:6;13393:14;13386:22;13381:2;13370:9;13366:18;13359:50;13073:342;;;;;:::o;13420:437::-;13499:1;13495:12;;;;13542;;;13563:61;;13617:4;13609:6;13605:17;13595:27;;13563:61;13670:2;13662:6;13659:14;13639:18;13636:38;13633:218;;;13707:77;13704:1;13697:88;13808:4;13805:1;13798:15;13836:4;13833:1;13826:15;13633:218;;13420:437;;;:::o;14198:184::-;14250:77;14247:1;14240:88;14347:4;14344:1;14337:15;14371:4;14368:1;14361:15;14387:482;14476:1;14519:5;14476:1;14533:330;14554:7;14544:8;14541:21;14533:330;;;14673:4;-1:-1:-1;;14601:77:1;14595:4;14592:87;14589:113;;;14682:18;;:::i;:::-;14732:7;14722:8;14718:22;14715:55;;;14752:16;;;;14715:55;14831:22;;;;14791:15;;;;14533:330;;;14537:3;14387:482;;;;;:::o;14874:866::-;14923:5;14953:8;14943:80;;-1:-1:-1;14994:1:1;15008:5;;14943:80;15042:4;15032:76;;-1:-1:-1;15079:1:1;15093:5;;15032:76;15124:4;15142:1;15137:59;;;;15210:1;15205:130;;;;15117:218;;15137:59;15167:1;15158:10;;15181:5;;;15205:130;15242:3;15232:8;15229:17;15226:43;;;15249:18;;:::i;:::-;-1:-1:-1;;15305:1:1;15291:16;;15320:5;;15117:218;;15419:2;15409:8;15406:16;15400:3;15394:4;15391:13;15387:36;15381:2;15371:8;15368:16;15363:2;15357:4;15354:12;15350:35;15347:77;15344:159;;;-1:-1:-1;15456:19:1;;;15488:5;;15344:159;15535:34;15560:8;15554:4;15535:34;:::i;:::-;15665:6;-1:-1:-1;;15593:79:1;15584:7;15581:92;15578:118;;;15676:18;;:::i;:::-;15714:20;;14874:866;-1:-1:-1;;;14874:866:1:o;15745:140::-;15803:5;15832:47;15873:4;15863:8;15859:19;15853:4;15832:47;:::i;15890:228::-;15930:7;16056:1;-1:-1:-1;;15984:74:1;15981:1;15978:81;15973:1;15966:9;15959:17;15955:105;15952:131;;;16063:18;;:::i;:::-;-1:-1:-1;16103:9:1;;15890:228::o;16123:184::-;16175:77;16172:1;16165:88;16272:4;16269:1;16262:15;16296:4;16293:1;16286:15;16312:120;16352:1;16378;16368:35;;16383:18;;:::i;:::-;-1:-1:-1;16417:9:1;;16312:120::o;17151:184::-;17203:77;17200:1;17193:88;17300:4;17297:1;17290:15;17324:4;17321:1;17314:15;17340:184;17392:77;17389:1;17382:88;17489:4;17486:1;17479:15;17513:4;17510:1;17503:15;17529:125;17569:4;17597:1;17594;17591:8;17588:34;;;17602:18;;:::i;:::-;-1:-1:-1;17639:9:1;;17529:125::o;17659:195::-;17698:3;-1:-1:-1;;17722:5:1;17719:77;17716:103;;;17799:18;;:::i;:::-;-1:-1:-1;17846:1:1;17835:13;;17659:195::o;17859:224::-;17898:3;17926:6;17959:2;17956:1;17952:10;17989:2;17986:1;17982:10;18020:3;18016:2;18012:12;18007:3;18004:21;18001:47;;;18028:18;;:::i;:::-;18064:13;;17859:224;-1:-1:-1;;;;17859:224:1:o;18088:217::-;18127:4;18156:6;18212:10;;;;18182;;18234:12;;;18231:38;;;18249:18;;:::i;:::-;18286:13;;18088:217;-1:-1:-1;;;18088:217:1:o;18660:175::-;18697:3;18741:4;18734:5;18730:16;18770:4;18761:7;18758:17;18755:43;;;18778:18;;:::i;:::-;18827:1;18814:15;;18660:175;-1:-1:-1;;18660:175:1:o;19276:128::-;19316:3;19347:1;19343:6;19340:1;19337:13;19334:39;;;19353:18;;:::i;:::-;-1:-1:-1;19389:9:1;;19276:128::o;20250:184::-;20320:6;20373:2;20361:9;20352:7;20348:23;20344:32;20341:52;;;20389:1;20386;20379:12;20341:52;-1:-1:-1;20412:16:1;;20250:184;-1:-1:-1;20250:184:1:o;24399:112::-;24431:1;24457;24447:35;;24462:18;;:::i;:::-;-1:-1:-1;24496:9:1;;24399:112::o;24516:251::-;24586:6;24639:2;24627:9;24618:7;24614:23;24610:32;24607:52;;;24655:1;24652;24645:12;24607:52;24687:9;24681:16;24706:31;24731:5;24706:31;:::i;25739:306::-;25827:6;25835;25843;25896:2;25884:9;25875:7;25871:23;25867:32;25864:52;;;25912:1;25909;25902:12;25864:52;25941:9;25935:16;25925:26;;25991:2;25980:9;25976:18;25970:25;25960:35;;26035:2;26024:9;26020:18;26014:25;26004:35;;25739:306;;;;;:::o;26832:245::-;26899:6;26952:2;26940:9;26931:7;26927:23;26923:32;26920:52;;;26968:1;26965;26958:12;26920:52;27000:9;26994:16;27019:28;27041:5;27019:28;:::i;29823:605::-;30122:6;30111:9;30104:25;30165:6;30160:2;30149:9;30145:18;30138:34;30208:3;30203:2;30192:9;30188:18;30181:31;30085:4;30229:57;30281:3;30270:9;30266:19;30258:6;30229:57;:::i;:::-;-1:-1:-1;;;;;30322:55:1;;;;30317:2;30302:18;;30295:83;-1:-1:-1;30409:3:1;30394:19;30387:35;30221:65;29823:605;-1:-1:-1;;;29823:605:1:o

Swarm Source

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