ETH Price: $3,892.85 (-0.71%)

Token

ERC-20: Tiger King Inu (TKINU)
 

Overview

Max Total Supply

1,000,000 TKINU

Holders

210

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,287.985107850040172675 TKINU

Value
$0.00
0x8470837b645159c682c3ea8a1b10359a988892ff
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:
TigerKingInu

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 2022-01-21
*/

// 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 addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function 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;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}

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;
    function getInitializers() external view returns (string memory, string memory, uint256, uint8);
}

interface Cashier {
    function whomst() external view returns(address);
    function setToken(address token) external;
    function setReflectionCriteria(uint256 _minPeriod, uint256 _minReflection) external;
    function tally(address shareholder, uint256 amount) external;
    function load() external payable;
    function cashout(uint256 gas) external;
    function giveMeWelfarePlease(address hobo) external;
    function getTotalDistributed() external view returns(uint256);
    function getShareholderInfo(address shareholder) external view returns(string memory, string memory, string memory, string memory);
    function getShareholderRealized(address shareholder) external view returns (uint256);
    function getPendingRewards(address shareholder) external view returns (uint256);
    function initialize() external;
}

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

    mapping (address => uint256) _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) _allowances;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
    mapping (address => bool) private _isExcludedFromDividends;
    mapping (address => bool) private _liquidityHolders;
    mapping (address => uint256) firstBuy;

    uint256 private startingSupply;
    string private _name;
    string private _symbol;
    uint8 private _decimals;
    uint256 private _tTotal;

    struct Fees {
        uint16 buyFee;
        uint16 sellFee;
        uint16 transferFee;
        uint16 antiJeet;
    }

    struct Ratios {
        uint16 rewards;
        uint16 marketing;
        uint16 ironBank;
        uint16 total;
    }

    Fees public _taxRates = Fees({
        buyFee: 1500,
        sellFee: 1500,
        transferFee: 1500,
        antiJeet: 2500
        });

    Ratios public _ratios = Ratios({
        rewards: 3,
        marketing: 7,
        ironBank: 5,
        total: 15
        });

    uint256 constant public maxBuyTaxes = 2000;
    uint256 constant public maxSellTaxes = 2000;
    uint256 constant public maxTransferTaxes = 2000;
    uint256 constant masterTaxDivisor = 10000;

    IRouter02 public dexRouter;
    address public lpPair;

    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;
    address constant private ZERO = 0x0000000000000000000000000000000000000000;

    struct TaxWallets {
        address payable marketing;
        address payable ironBank;
    }

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0x353aeC1d6Be292Ea93b956f9B249d4bB0cD2AbcC),
        ironBank: payable(0x2eE82E0A83282696b96fA8555E4A9823715A4F9C)
        });


    uint256 private _maxTxAmount;
    uint256 private _maxWalletSize;

    Cashier reflector;
    uint256 reflectorGas = 300000;

    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public contractSwapTimer = 30 seconds;
    uint256 private lastSwap;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    bool public processReflect = false;

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

    bool public antiJeetEnabled = true;
    uint256 public antiJeetTimeLimit = 24 hours;

    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }

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

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountBNB, uint256 amount);
    event SniperCaught(address sniperAddress);

    constructor () payable {
        address msgSender = msg.sender;
        _owner = msgSender;

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

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;

        emit OwnershipTransferred(address(0), msgSender);
    }


    function intializeContract(address[] memory accounts, uint256[] memory amounts, address _antiSnipe, address _cashier) external onlyOwner {
        require(!contractInitialized, "1");
        require(accounts.length == amounts.length, "2");
        antiSnipe = AntiSnipe(_antiSnipe);
        reflector = Cashier(_cashier);
        try antiSnipe.transfer(address(this)) {} catch {}
        try antiSnipe.getInitializers() returns (string memory initName, string memory initSymbol, uint256 initStartingSupply, uint8 initDecimals) {
            _name = initName;
            _symbol = initSymbol;
            startingSupply = initStartingSupply;
            _decimals = initDecimals;
            _tTotal = startingSupply * (10**_decimals);
        } catch {
            revert("3");
        }
        try reflector.setToken(address(this)) {} catch {}
        lpPair = IFactoryV2(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        _isExcludedFromDividends[owner()] = true;
        _isExcludedFromDividends[lpPair] = true;
        _isExcludedFromDividends[address(this)] = true;
        _isExcludedFromDividends[DEAD] = true;
        _isExcludedFromDividends[ZERO] = true;
        swapThreshold = (_tTotal * 5) / 10000;
        swapAmount = (_tTotal * 10) / 10000;
        _maxTxAmount = (_tTotal * 3) / 1000;
        _maxWalletSize = (_tTotal * 19) / 1000;
        contractInitialized = true;

        _tOwned[owner()] = _tTotal;
        emit Transfer(address(0), owner(), _tTotal);

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

        for(uint256 i = 0; i < accounts.length; i++){
            uint256 amount = amounts[i] * 10**_decimals;
            address account = accounts[i];
            _basicTransfer(_owner, account, amount);
            try reflector.tally(account, amount) {} catch {}
        }

        _basicTransfer(_owner, address(this), _tOwned[_owner]);

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

        enableTrading();
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        _isExcludedFromFees[_owner] = false;
        _isExcludedFromDividends[_owner] = false;
        _owner = address(0);
        emit OwnershipTransferred(_owner, address(0));
    }
//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

    receive() external payable {}

    function totalSupply() external view override returns (uint256) { if (_tTotal == 0) { revert(); } 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 balanceOf(address account) public view override returns (uint256) { return _tOwned[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function _approve(address sender, address spender, uint256 amount) private {
        require(sender != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the 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 transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transfer(msg.sender, recipient, amount);
    }

    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 setBlacklistEnabled(address account, bool enabled) external onlyOwner {
        antiSnipe.setBlacklistEnabled(account, enabled);
        setDividendExcluded(account, enabled);
    }

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

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

    function setInitializers(address aInitializer, address cInitializer) external onlyOwner {
        require(cInitializer != address(this) && aInitializer != address(this) && cInitializer != aInitializer);
        reflector = Cashier(cInitializer);
        antiSnipe = AntiSnipe(aInitializer);
    }

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

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

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

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

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

    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 setTaxes(uint16 buyFee, uint16 sellFee, uint16 transferFee) external onlyOwner {
        require(buyFee <= maxBuyTaxes
                && sellFee <= maxSellTaxes
                && transferFee <= maxTransferTaxes);
        _taxRates.buyFee = buyFee;
        _taxRates.sellFee = sellFee;
        _taxRates.transferFee = transferFee;
    }

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

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

    function setContractSwapSettings(bool _enabled, bool processReflectEnabled) external onlyOwner {
        contractSwapEnabled = _enabled;
        processReflect = processReflectEnabled;
    }

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

    function setReflectionCriteria(uint256 _minPeriod, uint256 _minReflection, uint256 minReflectionMultiplier) external onlyOwner {
        _minReflection = _minReflection * 10**minReflectionMultiplier;
        reflector.setReflectionCriteria(_minPeriod, _minReflection);
    }

    function setReflectorSettings(uint256 gas) external onlyOwner {
        require(gas < 750000);
        reflectorGas = gas;
    }

    function giveMeWelfarePlease() external {
        reflector.giveMeWelfarePlease(msg.sender);
    }

    function getTotalReflected() external view returns (uint256) {
        return reflector.getTotalDistributed();
    }

    function getUserInfo(address shareholder) external view returns (string memory, string memory, string memory, string memory) {
        return reflector.getShareholderInfo(shareholder);
    }

    function getUserRealizedGains(address shareholder) external view returns (uint256) {
        return reflector.getShareholderRealized(shareholder);
    }

    function getUserUnpaidEarnings(address shareholder) external view returns (uint256) {
        return reflector.getPendingRewards(shareholder);
    }

    function getFirstBuy(address account) public view returns (uint256) {
        return firstBuy[account];
    }

    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, "Cannot set a new pair this week!");
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
            antiSnipe.setLpPair(pair, true);
        }
    }

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

    function isDividendExcluded(address account) public view returns(bool) {
        return _isExcludedFromDividends[account];
    }

    function isExcludedFromLimits(address account) public view returns (bool) {
        return _isExcludedFromLimits[account];
    }

    function setExcludedFromLimits(address account, bool enabled) external onlyOwner {
        _isExcludedFromLimits[account] = enabled;
    }

    function setDividendExcluded(address holder, bool enabled) public onlyOwner {
        require(holder != address(this) && holder != lpPair);
        _isExcludedFromDividends[holder] = enabled;
        if (enabled) {
            reflector.tally(holder, 0);
        } else {
            reflector.tally(holder, _tOwned[holder]);
        }
    }

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

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

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

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

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

    function setAntiJeetEnabled(bool enabled) external onlyOwner {
        antiJeetEnabled = enabled;
    }

    function setAntiJeetTimeLimit(uint256 time) external onlyOwner {
        require(time <= 24 hours, "Cannot set above 1 day.");
        antiJeetTimeLimit = time;
    }

    function setAntiJeetTaxFee(uint16 tax) external onlyOwner {
        require(tax <= 2500, "Cannot set above 25%");
        _taxRates.antiJeet = tax;
    }

    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 (!_isExcludedFromLimits[from] && !_isExcludedFromLimits[to]) {
                    require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
                }
            }
            if(to != address(dexRouter) && !lpPairs[to]) {
                if (!_isExcludedFromLimits[to]) {
                    require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
                }
            }
        }

        if (_tOwned[to] == 0) {
            firstBuy[to] = block.timestamp;
        }

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

        return _finalizeTransfer(from, to, amount, takeFee);
    }

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

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

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

        if (inSwap) {
            return _basicTransfer(from, to, amount);
        } else {
            _tOwned[from] -= amount;
        }

        if (lpPairs[to]) {
            if (!inSwap
                && contractSwapEnabled
            ) {
                if (lastSwap + contractSwapTimer < block.timestamp) {
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance >= swapThreshold) {
                        if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                        contractSwap(contractTokenBalance);
                        lastSwap = block.timestamp;
                    }
                }
            }      
        } 

        uint256 amountReceived = amount;

        if (takeFee) {
            amountReceived = takeTaxes(from, to, amount);
        }

        _tOwned[to] += amountReceived;

        processTokenReflect(from, to);

        emit Transfer(from, to, amountReceived);
        return true;
    }

    function processTokenReflect(address from, address to) internal {
        if (!_isExcludedFromDividends[from]) {
            try reflector.tally(from, _tOwned[from]) {} catch {}
        }
        if (!_isExcludedFromDividends[to]) {
            try reflector.tally(to, _tOwned[to]) {} catch {}
        }
        if (processReflect) {
            try reflector.cashout(reflectorGas) {} catch {}
        }
    }

    function _basicTransfer(address from, address to, uint256 amount) internal returns (bool) {
        _tOwned[from] -= amount;
        _tOwned[to] += amount;
        emit Transfer(from, to, amount);
        return true;
    }

    function takeTaxes(address from, address to, uint256 amount) internal returns (uint256) {
        uint256 currentFee;
        if (lpPairs[from]) {
            currentFee = _taxRates.buyFee;
        } else if (lpPairs[to]) {
            if (antiJeetEnabled && firstBuy[from] + antiJeetTimeLimit > block.timestamp) {
                currentFee = _taxRates.antiJeet;
            } else {
                currentFee = _taxRates.sellFee;
            }
        } else {
            currentFee = _taxRates.transferFee;
        }

        if (currentFee == 0) {
            return amount;
        }

        uint256 feeAmount = amount * currentFee / masterTaxDivisor;

        _tOwned[address(this)] += feeAmount;
        emit Transfer(from, address(this), feeAmount);

        return amount - feeAmount;
    }

    function contractSwap(uint256 contractTokenBalance) internal swapping {
        Ratios memory ratios = _ratios;
        if (ratios.total == 0) {
            return;
        }
        
        if(_allowances[address(this)][address(dexRouter)] != type(uint256).max) {
            _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        }

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

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

        uint256 amtBalance = address(this).balance;
        uint256 rewardsBalance = (amtBalance * ratios.rewards) / ratios.total;
        uint256 ironBankBalance = (amtBalance * ratios.ironBank) / ratios.total;
        uint256 marketingBalance = amtBalance - (rewardsBalance + ironBankBalance);

        if (ratios.rewards > 0) {
            try reflector.load{value: rewardsBalance}() {} catch {}
        }
        if(ratios.ironBank > 0){
            _taxWallets.ironBank.transfer(ironBankBalance);
        }
        if(ratios.marketing > 0){
            _taxWallets.marketing.transfer(marketingBalance);
        }
    }

    function manualDeposit() external onlyOwner {
        try reflector.load{value: address(this).balance}() {} catch {}
    }

    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));
            }
            if(address(reflector) ==  address(0)) {
                reflector = Cashier(address(this));
            }
            try reflector.initialize() {} catch {}
            contractSwapEnabled = true;
            emit ContractSwapEnabledUpdated(true);
        }
    }

    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]);
        }
    }
}

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":"uint256","name":"amountBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","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":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":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"rewards","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"ironBank","type":"uint16"},{"internalType":"uint16","name":"total","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRates","outputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"},{"internalType":"uint16","name":"antiJeet","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"ironBank","type":"address"}],"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":[],"name":"antiJeetEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiJeetTimeLimit","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":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapTimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":[{"internalType":"address","name":"account","type":"address"}],"name":"getFirstBuy","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":[],"name":"getTotalReflected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUserInfo","outputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUserRealizedGains","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUserUnpaidEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giveMeWelfarePlease","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"address","name":"_antiSnipe","type":"address"},{"internalType":"address","name":"_cashier","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":"isDividendExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isFeeExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"processReflect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"bool","name":"enabled","type":"bool"}],"name":"setAntiJeetEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"tax","type":"uint16"}],"name":"setAntiJeetTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setAntiJeetTimeLimit","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"},{"internalType":"bool","name":"processReflectEnabled","type":"bool"}],"name":"setContractSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setDividendExcluded","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":"setExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"aInitializer","type":"address"},{"internalType":"address","name":"cInitializer","type":"address"}],"name":"setInitializers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiGas","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"},{"internalType":"bool","name":"_antiSpecial","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"rewards","type":"uint16"},{"internalType":"uint16","name":"ironBank","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minReflection","type":"uint256"},{"internalType":"uint256","name":"minReflectionMultiplier","type":"uint256"}],"name":"setReflectionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setReflectorSettings","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"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"ironBank","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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"}]

600060038181556105dc608081905260a081905260c0526109c460e052600f80546709c405dc05dc05dc6001600160401b0319918216178255610100929092526007610120526005610140526101605260108054660f00050007000392169190911790556101c060405273353aec1d6be292ea93b956f9b249d4bb0cd2abcc610180819052732ee82e0a83282696b96fa8555e4a9823715a4f9c6101a0819052601380546001600160a01b031990811690931790556014805483169091179055620493e06018556019805461ff0019169055601e601a819055805462ffffff61ffff60b81b011916600160c01b17905562015180601f558154163390811790915560384614156200013657601180546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e179055620001b3565b46606114156200016c57601180546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c3179055620001b3565b46600114806200017c5750466004145b15620001ae57601180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055620001b3565b600080fd5b600160056000620001cc6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526005909352818320805490941660011790935551918316917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350615e33806200024b6000396000f3fe6080604052600436106104d55760003560e01c80636b639a2511610279578063b4a4c4781161015e578063dea528a1116100d6578063efe7dc901161008a578063f94aa1b41161006f578063f94aa1b414610e0f578063fdb78c0e14610e56578063fe575a8714610e7557600080fd5b8063efe7dc9014610de0578063f7c245ea14610dfa57600080fd5b8063e8a0e3f9116100bb578063e8a0e3f914610d80578063eafb5a3c14610da0578063eec2744e14610dc057600080fd5b8063dea528a114610d4a578063e4fcfd1814610d6a57600080fd5b8063cf8477061161012d578063d3f6a15711610112578063d3f6a15714610cc4578063dc750e8514610ce4578063dd62ed3e14610d0457600080fd5b8063cf84770614610c67578063d0b1449d14610ca457600080fd5b8063b4a4c47814610bd8578063b81dc53914610bee578063bca238aa14610c0e578063c6a276c214610c4757600080fd5b806395d89b41116101f1578063a9059cbb116101c0578063ab5cb5a6116101a5578063ab5cb5a614610bb8578063b1b08f711461077a578063b3d514fb1461077a57600080fd5b8063a9059cbb14610b78578063aa22b17214610b9857600080fd5b806395d89b4114610ae25780639dc6761514610af75780639fc423ce14610b0c578063a13ce2c614610b4257600080fd5b806380c581d1116102485780638a63bd9b1161022d5780638a63bd9b14610ab85780638a8c523c14610acd5780638da5cb5b14610a9a57600080fd5b806380c581d114610a7a578063893d20e814610a9a57600080fd5b80636b639a25146109fa5780636ebd007814610a1a57806370a0823114610a2f578063715018a614610a6557600080fd5b80632e8fa821116103ba5780634ada218b11610332578063590ffdce116102e65780636372c68f116102cb5780636372c68f146109955780636386c1c7146109b55780636ab86dc1146109e557600080fd5b8063590ffdce1461093c5780635cce86cd1461095c57600080fd5b80634fb2e45d116103175780634fb2e45d146108e757806350a8e0161461090757806355dbc3691461092757600080fd5b80634ada218b146108a85780634b01f560146108c757600080fd5b806334cd8260116103895780633f3cf56c1161036e5780633f3cf56c146108485780633ff825dd14610868578063452ed4f11461088857600080fd5b806334cd82601461080857806336fddb041461082857600080fd5b80632e8fa82114610790578063313ce567146107a657806332cde664146107c857806333251a0b146107e857600080fd5b80630fa604e41161044d578063255a2e541161041c5780632610eaca116104015780632610eaca1461073a57806329dd87981461075a5780632b28fc7a1461077a57600080fd5b8063255a2e54146106e1578063260039571461071a57600080fd5b80630fa604e41461067757806318160ddd1461068c578063218950bc146106a157806323b872dd146106c157600080fd5b806306fdde03116104a457806309231602116104895780630923160214610607578063095ea7b31461062757806309a8f1791461065757600080fd5b806306fdde03146105c55780630758d924146105e757600080fd5b806303fd2a45146104e15780630445b6671461051457806305bbedb614610538578063069d955f1461055a57600080fd5b366104dc57005b600080fd5b3480156104ed57600080fd5b506104f761dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561052057600080fd5b5061052a601c5481565b60405190815260200161050b565b34801561054457600080fd5b50610558610553366004615343565b610e95565b005b34801561056657600080fd5b50600f546105979061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff9586168152938516602085015291841691830191909152909116606082015260800161050b565b3480156105d157600080fd5b506105da610f7b565b60405161050b91906153ed565b3480156105f357600080fd5b506011546104f7906001600160a01b031681565b34801561061357600080fd5b50610558610622366004615400565b61100d565b34801561063357600080fd5b50610647610642366004615419565b611139565b604051901515815260200161050b565b34801561066357600080fd5b50610558610672366004615445565b6111a6565b34801561068357600080fd5b5061052a611299565b34801561069857600080fd5b5061052a6112bf565b3480156106ad57600080fd5b506105586106bc366004615471565b6112d8565b3480156106cd57600080fd5b506106476106dc36600461549f565b6113dc565b3480156106ed57600080fd5b506106476106fc3660046154e0565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561072657600080fd5b506105586107353660046154fd565b611456565b34801561074657600080fd5b5061055861075536600461557a565b61156d565b34801561076657600080fd5b506105586107753660046155de565b61168d565b34801561078657600080fd5b5061052a6107d081565b34801561079c57600080fd5b5061052a601d5481565b3480156107b257600080fd5b50600d5460405160ff909116815260200161050b565b3480156107d457600080fd5b506105586107e3366004615651565b611783565b3480156107f457600080fd5b506105586108033660046154e0565b611887565b34801561081457600080fd5b50610558610823366004615694565b611934565b34801561083457600080fd5b506105586108433660046156cf565b6119d0565b34801561085457600080fd5b506105586108633660046154fd565b611a55565b34801561087457600080fd5b506105586108833660046156fd565b611b6c565b34801561089457600080fd5b506012546104f7906001600160a01b031681565b3480156108b457600080fd5b50601e5461064790610100900460ff1681565b3480156108d357600080fd5b506105586108e2366004615718565b611c5b565b3480156108f357600080fd5b506105586109023660046154e0565b611d03565b34801561091357600080fd5b50601e546106479062010000900460ff1681565b34801561093357600080fd5b5061052a611f4d565b34801561094857600080fd5b506105586109573660046156cf565b611fc6565b34801561096857600080fd5b506106476109773660046154e0565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156109a157600080fd5b5061052a6109b03660046154e0565b61204b565b3480156109c157600080fd5b506109d56109d03660046154e0565b6120d4565b60405161050b9493929190615735565b3480156109f157600080fd5b50610558612175565b348015610a0657600080fd5b50610558610a153660046156cf565b612234565b348015610a2657600080fd5b5061052a6123a3565b348015610a3b57600080fd5b5061052a610a4a3660046154e0565b6001600160a01b031660009081526001602052604090205490565b348015610a7157600080fd5b506105586123c4565b348015610a8657600080fd5b50610558610a953660046156cf565b6124a2565b348015610aa657600080fd5b506000546001600160a01b03166104f7565b348015610ac457600080fd5b50610647612656565b348015610ad957600080fd5b506105586126d1565b348015610aee57600080fd5b506105da6128d8565b348015610b0357600080fd5b506105586128e7565b348015610b1857600080fd5b50601e54610647907801000000000000000000000000000000000000000000000000900460ff1681565b348015610b4e57600080fd5b5061052a610b5d3660046154e0565b6001600160a01b031660009081526009602052604090205490565b348015610b8457600080fd5b50610647610b93366004615419565b61295f565b348015610ba457600080fd5b50610558610bb3366004615651565b61296c565b348015610bc457600080fd5b5061052a610bd33660046154e0565b612a8b565b348015610be457600080fd5b5061052a601f5481565b348015610bfa57600080fd5b50610558610c0936600461578d565b612ad7565b348015610c1a57600080fd5b50610647610c293660046154e0565b6001600160a01b031660009081526005602052604090205460ff1690565b348015610c5357600080fd5b50610558610c623660046154e0565b613453565b348015610c7357600080fd5b506010546105979061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b348015610cb057600080fd5b50610558610cbf366004615400565b613500565b348015610cd057600080fd5b50610558610cdf366004615471565b61356e565b348015610cf057600080fd5b50610558610cff366004615400565b613603565b348015610d1057600080fd5b5061052a610d1f366004615471565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610d5657600080fd5b50610558610d6536600461580b565b6136b5565b348015610d7657600080fd5b5061052a601a5481565b348015610d8c57600080fd5b50610558610d9b366004615829565b61373c565b348015610dac57600080fd5b50610558610dbb3660046154e0565b61389a565b348015610dcc57600080fd5b50610558610ddb3660046156cf565b613c55565b348015610dec57600080fd5b50601e546106479060ff1681565b348015610e0657600080fd5b5061052a613d41565b348015610e1b57600080fd5b50601354601454610e36916001600160a01b03908116911682565b604080516001600160a01b0393841681529290911660208301520161050b565b348015610e6257600080fd5b5060195461064790610100900460ff1681565b348015610e8157600080fd5b50610647610e903660046154e0565b613da4565b6000546001600160a01b03163314610ef45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b601e546040517f05bbedb600000000000000000000000000000000000000000000000000000000815263010000009091046001600160a01b0316906305bbedb690610f4590859085906004016158f5565b600060405180830381600087803b158015610f5f57600080fd5b505af1158015610f73573d6000803e3d6000fd5b505050505050565b6060600b8054610f8a90615919565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb690615919565b80156110035780601f10610fd857610100808354040283529160200191611003565b820191906000526020600020905b815481529060010190602001808311610fe657829003601f168201915b5050505050905090565b6000546001600160a01b031633146110675760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b604b8110156110b85760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610eeb565b601e546040517f092316020000000000000000000000000000000000000000000000000000000081526004810183905263010000009091046001600160a01b0316906309231602906024015b600060405180830381600087803b15801561111e57600080fd5b505af1158015611132573d6000803e3d6000fd5b5050505050565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906111949086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b031633146112005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b61120b81600a615a80565b6112159083615a8c565b6017546040517f8cd7f02e00000000000000000000000000000000000000000000000000000000815260048101869052602481018390529193506001600160a01b031690638cd7f02e90604401600060405180830381600087803b15801561127c57600080fd5b505af1158015611290573d6000803e3d6000fd5b50505050505050565b600d546000906112ad9060ff16600a615aab565b6016546112ba9190615aba565b905090565b6000600e54600014156112d157600080fd5b50600e5490565b6000546001600160a01b031633146113325760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b6001600160a01b038116301480159061135457506001600160a01b0382163014155b80156113725750816001600160a01b0316816001600160a01b031614155b61137b57600080fd5b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03928316179055601e80547fffffffffffffffffff0000000000000000000000000000000000000000ffffff1663010000009390921692909202179055565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914611441576001600160a01b03841660009081526004602090815260408083203384529091528120805484929061143b908490615af5565b90915550505b61144c848484613e33565b90505b9392505050565b6000546001600160a01b031633146114b05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b6103e8600e546114c09190615aba565b8183600e546114cf9190615a8c565b6114d99190615aba565b101561154d5760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610eeb565b8082600e5461155c9190615a8c565b6115669190615aba565b6016555050565b80518251146115be5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610eeb565b60005b82518160ff16101561168857818160ff16815181106115e2576115e2615b0c565b6020026020010151611609336001600160a01b031660009081526001602052604090205490565b101561161457600080fd5b61167533848360ff168151811061162d5761162d615b0c565b6020908102919091010151600d546116499060ff16600a615aab565b858560ff168151811061165e5761165e615b0c565b60200260200101516116709190615a8c565b613e33565b508061168081615b3b565b9150506115c1565b505050565b6000546001600160a01b031633146116e75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b601e546040517f0109da69000000000000000000000000000000000000000000000000000000008152851515600482015284151560248201528315156044820152821515606482015263010000009091046001600160a01b031690630109da6990608401600060405180830381600087803b15801561176557600080fd5b505af1158015611779573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031633146117dd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b6107d08361ffff16111580156117f957506107d08261ffff1611155b801561180b57506107d08161ffff1611155b61181457600080fd5b600f805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b031633146118e15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b601e546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526301000000909204909116906333251a0b90602401611104565b6000546001600160a01b0316331461198e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b8385600e5461199d9190615a8c565b6119a79190615aba565b601c55600e5482906119ba908590615a8c565b6119c49190615aba565b601d55601a5550505050565b6000546001600160a01b03163314611a2a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611aaf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b6103e8600e54611abf9190615aba565b8183600e54611ace9190615a8c565b611ad89190615aba565b1015611b4c5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610eeb565b8082600e54611b5b9190615a8c565b611b659190615aba565b6015555050565b6000546001600160a01b03163314611bc65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b6109c48161ffff161115611c1c5760405162461bcd60e51b815260206004820152601460248201527f43616e6e6f74207365742061626f7665203235250000000000000000000000006044820152606401610eeb565b600f805461ffff9092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff909216919091179055565b6000546001600160a01b03163314611cb55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b601e80549115157801000000000000000000000000000000000000000000000000027fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6000546001600160a01b03163314611d5d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b6001600160a01b038116611dd95760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610eeb565b6001600160a01b03811661dead1415611e5a5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610eeb565b600080546001600160a01b039081168252600560208181526040808520805460ff1990811690915585548516865260078084528287208054831690558786168752938352818620805482166001908117909155938352818620805490911684179055845490931684525290205415611ef557600080546001600160a01b03168082526001602052604090912054611ef391908390613e33565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000601e60039054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fa2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ba9190615b5b565b6000546001600160a01b031633146120205760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6017546040517fd59b2ffd0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063d59b2ffd906024015b602060405180830381865afa1580156120b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a09190615b5b565b6017546040517f5e6056bb0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526060928392839283921690635e6056bb90602401600060405180830381865afa15801561213e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121669190810190615bd8565b93509350935093509193509193565b6000546001600160a01b031633146121cf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b601760009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be476040518263ffffffff1660e01b81526004016000604051808303818588803b15801561221f57600080fd5b505af193505050508015612231575060015b50565b6000546001600160a01b0316331461228e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b6001600160a01b03821630148015906122b557506012546001600160a01b03838116911614155b6122be57600080fd5b6001600160a01b0382166000908152600760205260409020805460ff1916821580159190911790915561233d576017546040517fdf047e9e0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152600060248301529091169063df047e9e90604401610f45565b6017546001600160a01b03838116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401610f45565b5050565b600d546000906123b79060ff16600a615aab565b6015546112ba9190615aba565b6000546001600160a01b0316331461241e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b600080546001600160a01b039081168252600560209081526040808420805460ff199081169091558454909316845260079091528083208054909216909155815473ffffffffffffffffffffffffffffffffffffffff191682555181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146124fc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b80612574576001600160a01b03828116600081815260026020526040808220805460ff19169055601e5490517f80c581d10000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915263010000009004909116906380c581d190604401610f45565b600354156125db576203f4806003544261258e9190615af5565b116125db5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610eeb565b6001600160a01b0382811660008181526002602052604090819020805460ff1916600190811790915542600355601e5491517f80c581d10000000000000000000000000000000000000000000000000000000081526004810193909352602483015263010000009004909116906380c581d190604401610f45565b600080546001600160a01b031633146126b15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b6011546126cb9030906001600160a01b03166000196142a2565b50600190565b6000546001600160a01b0316331461272b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b601e54610100900460ff16156127835760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610eeb565b601e5462010000900460ff166127db5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610eeb565b601e54630100000090046001600160a01b031661282357601e80547fffffffffffffffffff0000000000000000000000000000000000000000ffffff16306301000000021790555b601e54601254600d546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff909116606482015263010000009092041690636c115c3490608401600060405180830381600087803b1580156128b557600080fd5b505af19250505080156128c6575060015b50601e805461ff001916610100179055565b6060600c8054610f8a90615919565b6017546040517f2e6f0efd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690632e6f0efd90602401600060405180830381600087803b15801561294557600080fd5b505af1158015612959573d6000803e3d6000fd5b50505050565b600061144f338484613e33565b6000546001600160a01b031633146129c65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b6010805461ffff83811662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff868316640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff000090941692881692909217929092171617905580612a3e8385615c85565b612a489190615c85565b6010805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff909216919091179055505050565b6017546040517ff6ed20170000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063f6ed201790602401612093565b6000546001600160a01b03163314612b315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b601e5477010000000000000000000000000000000000000000000000900460ff1615612b9f5760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610eeb565b8251845114612bf05760405162461bcd60e51b815260206004820152600160248201527f32000000000000000000000000000000000000000000000000000000000000006044820152606401610eeb565b601e80547fffffffffffffffffff0000000000000000000000000000000000000000ffffff1663010000006001600160a01b03858116820292909217928390556017805473ffffffffffffffffffffffffffffffffffffffff19168584161790556040517f1a69523000000000000000000000000000000000000000000000000000000000815230600482015292041690631a69523090602401600060405180830381600087803b158015612ca457600080fd5b505af1925050508015612cb5575060015b50601e60039054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b8152600401600060405180830381865afa925050508015612d2a57506040513d6000823e601f3d908101601f19168201604052612d279190810190615cab565b60015b612d765760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610eeb565b8351612d8990600b90602087019061518f565b508251612d9d90600c90602086019061518f565b50600a828155600d805460ff191660ff8416908117909155612dbe91615aab565b600a54612dcb9190615a8c565b600e5550506017546040517f144fa6d70000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03909116925063144fa6d79150602401600060405180830381600087803b158015612e3057600080fd5b505af1925050508015612e41575060015b50601160009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb99190615d26565b6001600160a01b031663c9c65396601160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f3e9190615d26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015612fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc69190615d26565b6012805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392831690811782556000908152600260209081526040808320805460ff1990811660019081179092558454871685526007909352818420805484168217905593549094168252838220805482168417905530825292812080548416831790557fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d805484168317905580527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df8054909216179055600e54612710906130ae906005615a8c565b6130b89190615aba565b601c55600e54612710906130cd90600a615a8c565b6130d79190615aba565b601d55600e546103e8906130ec906003615a8c565b6130f69190615aba565b601555600e546103e89061310b906013615a8c565b6131159190615aba565b601655601e80547fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff1677010000000000000000000000000000000000000000000000179055600e54600160006131736000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000205561319f6000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600e546040516131e691815260200190565b60405180910390a36011546132089033906001600160a01b03166000196142a2565b6011546132229030906001600160a01b03166000196142a2565b60005b845181101561333357600d546000906132429060ff16600a615aab565b85838151811061325457613254615b0c565b60200260200101516132669190615a8c565b9050600086838151811061327c5761327c615b0c565b602002602001015190506132a460008054906101000a90046001600160a01b031682846143fa565b506017546040517fdf047e9e0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590529091169063df047e9e90604401600060405180830381600087803b15801561330c57600080fd5b505af192505050801561331d575060015b505050808061332b90615d43565b915050613225565b50600080546001600160a01b0316808252600160205260409091205461335b919030906143fa565b506011546001600160a01b031663f305d719473061338e816001600160a01b031660009081526001602052604090205490565b6000806133a36000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015613423573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134489190615d5e565b5050506129596126d1565b6000546001600160a01b031633146134ad5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b601e546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015263010000009092049091169063c6a276c290602401611104565b6000546001600160a01b0316331461355a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b620b71b0811061356957600080fd5b601855565b6000546001600160a01b031633146135c85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b601380546001600160a01b0393841673ffffffffffffffffffffffffffffffffffffffff199182161790915560148054929093169116179055565b6000546001600160a01b0316331461365d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b620151808111156136b05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207365742061626f76652031206461792e0000000000000000006044820152606401610eeb565b601f55565b6000546001600160a01b0316331461370f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b6019805461ff0019166101009315159390930292909217909155601e805460ff1916911515919091179055565b8151835114801561374e575080518251145b61379a5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610eeb565b60005b83518160ff16101561295957818160ff16815181106137be576137be615b0c565b6020026020010151838260ff16815181106137db576137db615b0c565b6020026020010151600e546137f09190615a8c565b6137fa9190615aba565b33600090815260016020526040902054101561381557600080fd5b61388733858360ff168151811061382e5761382e615b0c565b6020026020010151848460ff168151811061384b5761384b615b0c565b6020026020010151868560ff168151811061386857613868615b0c565b6020026020010151600e5461387d9190615a8c565b6116709190615aba565b508061389281615b3b565b91505061379d565b6000546001600160a01b031633146138f45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613939573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061395d9190615d26565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139ce9190615d26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015613a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a559190615d26565b90506001600160a01b038116613bf357816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613aa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ac79190615d26565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b389190615d26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015613b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bc19190615d26565b6012805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055613c1c565b6012805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556116889030906000196142a2565b6000546001600160a01b03163314613caf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b601e546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152831515602483015263010000009092049091169063eec2744e90604401600060405180830381600087803b158015613d1f57600080fd5b505af1158015613d33573d6000803e3d6000fd5b5050505061239f8282612234565b601754604080517f5695fa5800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691635695fa589160048083019260209291908290030181865afa158015611fa2573d6000803e3d6000fd5b601e546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015260009263010000009004169063fe575a8790602401602060405180830381865afa158015613e0f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a09190615d8c565b60006001600160a01b038416613eb15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610eeb565b6001600160a01b038316613f2d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610eeb565b60008211613fa35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610eeb565b613fad84846144af565b1561420957601e54610100900460ff166140095760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610eeb565b6001600160a01b03841660009081526002602052604090205460ff168061404857506001600160a01b03831660009081526002602052604090205460ff165b1561410c576001600160a01b03841660009081526006602052604090205460ff1615801561408f57506001600160a01b03831660009081526006602052604090205460ff16155b1561410c5760155482111561410c5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610eeb565b6011546001600160a01b0384811691161480159061414357506001600160a01b03831660009081526002602052604090205460ff16155b15614209576001600160a01b03831660009081526006602052604090205460ff16614209576016548261418b856001600160a01b031660009081526001602052604090205490565b6141959190615da9565b11156142095760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610eeb565b6001600160a01b038316600090815260016020526040902054614242576001600160a01b03831660009081526009602052604090204290555b6001600160a01b03841660009081526005602052604090205460019060ff168061428457506001600160a01b03841660009081526005602052604090205460ff165b1561428d575060005b61429985858584614580565b95945050505050565b6001600160a01b03831661431d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610eeb565b6001600160a01b0382166143995760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610eeb565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316600090815260016020526040812080548391908390614424908490615af5565b90915550506001600160a01b03831660009081526001602052604081208054849290614451908490615da9565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161449d91815260200190565b60405180910390a35060019392505050565b600080546001600160a01b038481169116148015906144dc57506000546001600160a01b03838116911614155b80156144f357506000546001600160a01b03163214155b801561451857506001600160a01b03821660009081526008602052604090205460ff16155b801561453d57506001600160a01b03831660009081526008602052604090205460ff16155b801561455457506001600160a01b03821661dead14155b801561456857506001600160a01b03821615155b801561144f575050506001600160a01b031630141590565b601e5460009062010000900460ff1661462e5761459d858561486c565b601e5462010000900460ff161580156145bb57506145bb85856144af565b1561462e5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610eeb565b61463885856144af565b156146ec57601e546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b03878116600483015286811660248301526044820186905260009263010000009004169063ecd07a53906064016020604051808303816000875af19250505080156146d5575060408051601f3d908101601f191682019092526146d291810190615d8c565b60015b6146de57600080fd5b9050806146ea57600080fd5b505b60195460ff1615614709576147028585856143fa565b9050614864565b6001600160a01b03851660009081526001602052604081208054859290614731908490615af5565b90915550506001600160a01b03841660009081526002602052604090205460ff16156147c45760195460ff161580156147715750601954610100900460ff165b156147c45742601a54601b546147879190615da9565b10156147c45730600090815260016020526040902054601c5481106147c257601d5481106147b45750601d545b6147bd81614a7d565b42601b555b505b8282156147d9576147d6868686614e28565b90505b6001600160a01b03851660009081526001602052604081208054839290614801908490615da9565b9091555061481190508686614faf565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161485691815260200190565b60405180910390a360019150505b949350505050565b601e5462010000900460ff16156148eb5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610eeb565b6148f582826144af565b15801561490f57506012546001600160a01b038281169116145b1561239f576001600160a01b038083166000908152600860205260409020805460ff19166001179055601e80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1662010000179081905563010000009004166149a457601e80547fffffffffffffffffff0000000000000000000000000000000000000000ffffff16306301000000021790555b6017546001600160a01b03166149d4576017805473ffffffffffffffffffffffffffffffffffffffff1916301790555b601760009054906101000a90046001600160a01b03166001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614a2457600080fd5b505af1925050508015614a35575060015b506019805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6019805460ff191660011790556040805160808101825260105461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000900490911660608201819052614adb5750614e1b565b3060009081526004602090815260408083206011546001600160a01b0316845290915290205460001914614b34573060009081526004602090815260408083206011546001600160a01b03168452909152902060001990555b6040805160028082526060820183526000926020830190803683370190505090503081600081518110614b6957614b69615b0c565b6001600160a01b03928316602091820292909201810191909152601154604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015614bdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bff9190615d26565b81600181518110614c1257614c12615b0c565b6001600160a01b0392831660209182029290920101526011546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790614c71908690600090869030904290600401615dc1565b600060405180830381600087803b158015614c8b57600080fd5b505af1158015614c9f573d6000803e3d6000fd5b5050506060830151835147925060009161ffff90811691614cc1911684615a8c565b614ccb9190615aba565b90506000846060015161ffff16856040015161ffff1684614cec9190615a8c565b614cf69190615aba565b90506000614d048284615da9565b614d0e9085615af5565b865190915061ffff1615614d8057601760009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be846040518263ffffffff1660e01b81526004016000604051808303818588803b158015614d6c57600080fd5b505af193505050508015614d7e575060015b505b604086015161ffff1615614dca576014546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015614dc8573d6000803e3d6000fd5b505b602086015161ffff1615614e14576013546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015614e12573d6000803e3d6000fd5b505b5050505050505b506019805460ff19169055565b6001600160a01b038316600090815260026020526040812054819060ff1615614e585750600f5461ffff16614f0b565b6001600160a01b03841660009081526002602052604090205460ff1615614efa57601e547801000000000000000000000000000000000000000000000000900460ff168015614ecb5750601f546001600160a01b0386166000908152600960205260409020544291614ec991615da9565b115b15614ee75750600f546601000000000000900461ffff16614f0b565b50600f5462010000900461ffff16614f0b565b50600f54640100000000900461ffff165b80614f19578291505061144f565b6000612710614f288386615a8c565b614f329190615aba565b30600090815260016020526040812080549293508392909190614f56908490615da9565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3614fa58185615af5565b9695505050505050565b6001600160a01b03821660009081526007602052604090205460ff16615059576017546001600160a01b03838116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b15801561504657600080fd5b505af1925050508015615057575060015b505b6001600160a01b03811660009081526007602052604090205460ff16615103576017546001600160a01b03828116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b1580156150f057600080fd5b505af1925050508015615101575060015b505b601e5460ff161561239f576017546018546040517fa9e732bb0000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163a9e732bb9161515c9160040190815260200190565b600060405180830381600087803b15801561517657600080fd5b505af1925050508015615187575060015b61239f575050565b82805461519b90615919565b90600052602060002090601f0160209004810192826151bd5760008555615203565b82601f106151d657805160ff1916838001178555615203565b82800160010185558215615203579182015b828111156152035782518255916020019190600101906151e8565b5061520f929150615213565b5090565b5b8082111561520f5760008155600101615214565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561528057615280615228565b604052919050565b600067ffffffffffffffff8211156152a2576152a2615228565b5060051b60200190565b6001600160a01b038116811461223157600080fd5b600082601f8301126152d257600080fd5b813560206152e76152e283615288565b615257565b82815260059290921b8401810191818101908684111561530657600080fd5b8286015b8481101561532a57803561531d816152ac565b835291830191830161530a565b509695505050505050565b801515811461223157600080fd5b6000806040838503121561535657600080fd5b823567ffffffffffffffff81111561536d57600080fd5b615379858286016152c1565b925050602083013561538a81615335565b809150509250929050565b60005b838110156153b0578181015183820152602001615398565b838111156129595750506000910152565b600081518084526153d9816020860160208601615395565b601f01601f19169290920160200192915050565b60208152600061144f60208301846153c1565b60006020828403121561541257600080fd5b5035919050565b6000806040838503121561542c57600080fd5b8235615437816152ac565b946020939093013593505050565b60008060006060848603121561545a57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561548457600080fd5b823561548f816152ac565b9150602083013561538a816152ac565b6000806000606084860312156154b457600080fd5b83356154bf816152ac565b925060208401356154cf816152ac565b929592945050506040919091013590565b6000602082840312156154f257600080fd5b813561144f816152ac565b6000806040838503121561551057600080fd5b50508035926020909101359150565b600082601f83011261553057600080fd5b813560206155406152e283615288565b82815260059290921b8401810191818101908684111561555f57600080fd5b8286015b8481101561532a5780358352918301918301615563565b6000806040838503121561558d57600080fd5b823567ffffffffffffffff808211156155a557600080fd5b6155b1868387016152c1565b935060208501359150808211156155c757600080fd5b506155d48582860161551f565b9150509250929050565b600080600080608085870312156155f457600080fd5b84356155ff81615335565b9350602085013561560f81615335565b9250604085013561561f81615335565b9150606085013561562f81615335565b939692955090935050565b803561ffff8116811461564c57600080fd5b919050565b60008060006060848603121561566657600080fd5b61566f8461563a565b925061567d6020850161563a565b915061568b6040850161563a565b90509250925092565b600080600080600060a086880312156156ac57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080604083850312156156e257600080fd5b82356156ed816152ac565b9150602083013561538a81615335565b60006020828403121561570f57600080fd5b61144f8261563a565b60006020828403121561572a57600080fd5b813561144f81615335565b60808152600061574860808301876153c1565b828103602084015261575a81876153c1565b9050828103604084015261576e81866153c1565b9050828103606084015261578281856153c1565b979650505050505050565b600080600080608085870312156157a357600080fd5b843567ffffffffffffffff808211156157bb57600080fd5b6157c7888389016152c1565b955060208701359150808211156157dd57600080fd5b506157ea8782880161551f565b93505060408501356157fb816152ac565b9150606085013561562f816152ac565b6000806040838503121561581e57600080fd5b82356156ed81615335565b60008060006060848603121561583e57600080fd5b833567ffffffffffffffff8082111561585657600080fd5b615862878388016152c1565b9450602086013591508082111561587857600080fd5b6158848783880161551f565b9350604086013591508082111561589a57600080fd5b506158a78682870161551f565b9150509250925092565b600081518084526020808501945080840160005b838110156158ea5781516001600160a01b0316875295820195908201906001016158c5565b509495945050505050565b60408152600061590860408301856158b1565b905082151560208301529392505050565b600181811c9082168061592d57607f821691505b60208210811415615967577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156159d75781600019048211156159bd576159bd61596d565b808516156159ca57918102915b93841c93908002906159a1565b509250929050565b6000826159ee575060016111a0565b816159fb575060006111a0565b8160018114615a115760028114615a1b57615a37565b60019150506111a0565b60ff841115615a2c57615a2c61596d565b50506001821b6111a0565b5060208310610133831016604e8410600b8410161715615a5a575081810a6111a0565b615a64838361599c565b8060001904821115615a7857615a7861596d565b029392505050565b600061144f83836159df565b6000816000190483118215151615615aa657615aa661596d565b500290565b600061144f60ff8416836159df565b600082615af0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015615b0757615b0761596d565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff811415615b5257615b5261596d565b60010192915050565b600060208284031215615b6d57600080fd5b5051919050565b600082601f830112615b8557600080fd5b815167ffffffffffffffff811115615b9f57615b9f615228565b615bb26020601f19601f84011601615257565b818152846020838601011115615bc757600080fd5b614864826020830160208701615395565b60008060008060808587031215615bee57600080fd5b845167ffffffffffffffff80821115615c0657600080fd5b615c1288838901615b74565b95506020870151915080821115615c2857600080fd5b615c3488838901615b74565b94506040870151915080821115615c4a57600080fd5b615c5688838901615b74565b93506060870151915080821115615c6c57600080fd5b50615c7987828801615b74565b91505092959194509250565b600061ffff808316818516808303821115615ca257615ca261596d565b01949350505050565b60008060008060808587031215615cc157600080fd5b845167ffffffffffffffff80821115615cd957600080fd5b615ce588838901615b74565b95506020870151915080821115615cfb57600080fd5b50615d0887828801615b74565b93505060408501519150606085015160ff8116811461562f57600080fd5b600060208284031215615d3857600080fd5b815161144f816152ac565b6000600019821415615d5757615d5761596d565b5060010190565b600080600060608486031215615d7357600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215615d9e57600080fd5b815161144f81615335565b60008219821115615dbc57615dbc61596d565b500190565b85815284602082015260a060408201526000615de060a08301866158b1565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212200963d9acbad5e067f9dfd19d13d33541571131206bc90138ddd3c35459be44d264736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106104d55760003560e01c80636b639a2511610279578063b4a4c4781161015e578063dea528a1116100d6578063efe7dc901161008a578063f94aa1b41161006f578063f94aa1b414610e0f578063fdb78c0e14610e56578063fe575a8714610e7557600080fd5b8063efe7dc9014610de0578063f7c245ea14610dfa57600080fd5b8063e8a0e3f9116100bb578063e8a0e3f914610d80578063eafb5a3c14610da0578063eec2744e14610dc057600080fd5b8063dea528a114610d4a578063e4fcfd1814610d6a57600080fd5b8063cf8477061161012d578063d3f6a15711610112578063d3f6a15714610cc4578063dc750e8514610ce4578063dd62ed3e14610d0457600080fd5b8063cf84770614610c67578063d0b1449d14610ca457600080fd5b8063b4a4c47814610bd8578063b81dc53914610bee578063bca238aa14610c0e578063c6a276c214610c4757600080fd5b806395d89b41116101f1578063a9059cbb116101c0578063ab5cb5a6116101a5578063ab5cb5a614610bb8578063b1b08f711461077a578063b3d514fb1461077a57600080fd5b8063a9059cbb14610b78578063aa22b17214610b9857600080fd5b806395d89b4114610ae25780639dc6761514610af75780639fc423ce14610b0c578063a13ce2c614610b4257600080fd5b806380c581d1116102485780638a63bd9b1161022d5780638a63bd9b14610ab85780638a8c523c14610acd5780638da5cb5b14610a9a57600080fd5b806380c581d114610a7a578063893d20e814610a9a57600080fd5b80636b639a25146109fa5780636ebd007814610a1a57806370a0823114610a2f578063715018a614610a6557600080fd5b80632e8fa821116103ba5780634ada218b11610332578063590ffdce116102e65780636372c68f116102cb5780636372c68f146109955780636386c1c7146109b55780636ab86dc1146109e557600080fd5b8063590ffdce1461093c5780635cce86cd1461095c57600080fd5b80634fb2e45d116103175780634fb2e45d146108e757806350a8e0161461090757806355dbc3691461092757600080fd5b80634ada218b146108a85780634b01f560146108c757600080fd5b806334cd8260116103895780633f3cf56c1161036e5780633f3cf56c146108485780633ff825dd14610868578063452ed4f11461088857600080fd5b806334cd82601461080857806336fddb041461082857600080fd5b80632e8fa82114610790578063313ce567146107a657806332cde664146107c857806333251a0b146107e857600080fd5b80630fa604e41161044d578063255a2e541161041c5780632610eaca116104015780632610eaca1461073a57806329dd87981461075a5780632b28fc7a1461077a57600080fd5b8063255a2e54146106e1578063260039571461071a57600080fd5b80630fa604e41461067757806318160ddd1461068c578063218950bc146106a157806323b872dd146106c157600080fd5b806306fdde03116104a457806309231602116104895780630923160214610607578063095ea7b31461062757806309a8f1791461065757600080fd5b806306fdde03146105c55780630758d924146105e757600080fd5b806303fd2a45146104e15780630445b6671461051457806305bbedb614610538578063069d955f1461055a57600080fd5b366104dc57005b600080fd5b3480156104ed57600080fd5b506104f761dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561052057600080fd5b5061052a601c5481565b60405190815260200161050b565b34801561054457600080fd5b50610558610553366004615343565b610e95565b005b34801561056657600080fd5b50600f546105979061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff9586168152938516602085015291841691830191909152909116606082015260800161050b565b3480156105d157600080fd5b506105da610f7b565b60405161050b91906153ed565b3480156105f357600080fd5b506011546104f7906001600160a01b031681565b34801561061357600080fd5b50610558610622366004615400565b61100d565b34801561063357600080fd5b50610647610642366004615419565b611139565b604051901515815260200161050b565b34801561066357600080fd5b50610558610672366004615445565b6111a6565b34801561068357600080fd5b5061052a611299565b34801561069857600080fd5b5061052a6112bf565b3480156106ad57600080fd5b506105586106bc366004615471565b6112d8565b3480156106cd57600080fd5b506106476106dc36600461549f565b6113dc565b3480156106ed57600080fd5b506106476106fc3660046154e0565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561072657600080fd5b506105586107353660046154fd565b611456565b34801561074657600080fd5b5061055861075536600461557a565b61156d565b34801561076657600080fd5b506105586107753660046155de565b61168d565b34801561078657600080fd5b5061052a6107d081565b34801561079c57600080fd5b5061052a601d5481565b3480156107b257600080fd5b50600d5460405160ff909116815260200161050b565b3480156107d457600080fd5b506105586107e3366004615651565b611783565b3480156107f457600080fd5b506105586108033660046154e0565b611887565b34801561081457600080fd5b50610558610823366004615694565b611934565b34801561083457600080fd5b506105586108433660046156cf565b6119d0565b34801561085457600080fd5b506105586108633660046154fd565b611a55565b34801561087457600080fd5b506105586108833660046156fd565b611b6c565b34801561089457600080fd5b506012546104f7906001600160a01b031681565b3480156108b457600080fd5b50601e5461064790610100900460ff1681565b3480156108d357600080fd5b506105586108e2366004615718565b611c5b565b3480156108f357600080fd5b506105586109023660046154e0565b611d03565b34801561091357600080fd5b50601e546106479062010000900460ff1681565b34801561093357600080fd5b5061052a611f4d565b34801561094857600080fd5b506105586109573660046156cf565b611fc6565b34801561096857600080fd5b506106476109773660046154e0565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156109a157600080fd5b5061052a6109b03660046154e0565b61204b565b3480156109c157600080fd5b506109d56109d03660046154e0565b6120d4565b60405161050b9493929190615735565b3480156109f157600080fd5b50610558612175565b348015610a0657600080fd5b50610558610a153660046156cf565b612234565b348015610a2657600080fd5b5061052a6123a3565b348015610a3b57600080fd5b5061052a610a4a3660046154e0565b6001600160a01b031660009081526001602052604090205490565b348015610a7157600080fd5b506105586123c4565b348015610a8657600080fd5b50610558610a953660046156cf565b6124a2565b348015610aa657600080fd5b506000546001600160a01b03166104f7565b348015610ac457600080fd5b50610647612656565b348015610ad957600080fd5b506105586126d1565b348015610aee57600080fd5b506105da6128d8565b348015610b0357600080fd5b506105586128e7565b348015610b1857600080fd5b50601e54610647907801000000000000000000000000000000000000000000000000900460ff1681565b348015610b4e57600080fd5b5061052a610b5d3660046154e0565b6001600160a01b031660009081526009602052604090205490565b348015610b8457600080fd5b50610647610b93366004615419565b61295f565b348015610ba457600080fd5b50610558610bb3366004615651565b61296c565b348015610bc457600080fd5b5061052a610bd33660046154e0565b612a8b565b348015610be457600080fd5b5061052a601f5481565b348015610bfa57600080fd5b50610558610c0936600461578d565b612ad7565b348015610c1a57600080fd5b50610647610c293660046154e0565b6001600160a01b031660009081526005602052604090205460ff1690565b348015610c5357600080fd5b50610558610c623660046154e0565b613453565b348015610c7357600080fd5b506010546105979061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b348015610cb057600080fd5b50610558610cbf366004615400565b613500565b348015610cd057600080fd5b50610558610cdf366004615471565b61356e565b348015610cf057600080fd5b50610558610cff366004615400565b613603565b348015610d1057600080fd5b5061052a610d1f366004615471565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610d5657600080fd5b50610558610d6536600461580b565b6136b5565b348015610d7657600080fd5b5061052a601a5481565b348015610d8c57600080fd5b50610558610d9b366004615829565b61373c565b348015610dac57600080fd5b50610558610dbb3660046154e0565b61389a565b348015610dcc57600080fd5b50610558610ddb3660046156cf565b613c55565b348015610dec57600080fd5b50601e546106479060ff1681565b348015610e0657600080fd5b5061052a613d41565b348015610e1b57600080fd5b50601354601454610e36916001600160a01b03908116911682565b604080516001600160a01b0393841681529290911660208301520161050b565b348015610e6257600080fd5b5060195461064790610100900460ff1681565b348015610e8157600080fd5b50610647610e903660046154e0565b613da4565b6000546001600160a01b03163314610ef45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b601e546040517f05bbedb600000000000000000000000000000000000000000000000000000000815263010000009091046001600160a01b0316906305bbedb690610f4590859085906004016158f5565b600060405180830381600087803b158015610f5f57600080fd5b505af1158015610f73573d6000803e3d6000fd5b505050505050565b6060600b8054610f8a90615919565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb690615919565b80156110035780601f10610fd857610100808354040283529160200191611003565b820191906000526020600020905b815481529060010190602001808311610fe657829003601f168201915b5050505050905090565b6000546001600160a01b031633146110675760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b604b8110156110b85760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610eeb565b601e546040517f092316020000000000000000000000000000000000000000000000000000000081526004810183905263010000009091046001600160a01b0316906309231602906024015b600060405180830381600087803b15801561111e57600080fd5b505af1158015611132573d6000803e3d6000fd5b5050505050565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906111949086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b031633146112005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b61120b81600a615a80565b6112159083615a8c565b6017546040517f8cd7f02e00000000000000000000000000000000000000000000000000000000815260048101869052602481018390529193506001600160a01b031690638cd7f02e90604401600060405180830381600087803b15801561127c57600080fd5b505af1158015611290573d6000803e3d6000fd5b50505050505050565b600d546000906112ad9060ff16600a615aab565b6016546112ba9190615aba565b905090565b6000600e54600014156112d157600080fd5b50600e5490565b6000546001600160a01b031633146113325760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b6001600160a01b038116301480159061135457506001600160a01b0382163014155b80156113725750816001600160a01b0316816001600160a01b031614155b61137b57600080fd5b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03928316179055601e80547fffffffffffffffffff0000000000000000000000000000000000000000ffffff1663010000009390921692909202179055565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914611441576001600160a01b03841660009081526004602090815260408083203384529091528120805484929061143b908490615af5565b90915550505b61144c848484613e33565b90505b9392505050565b6000546001600160a01b031633146114b05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b6103e8600e546114c09190615aba565b8183600e546114cf9190615a8c565b6114d99190615aba565b101561154d5760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610eeb565b8082600e5461155c9190615a8c565b6115669190615aba565b6016555050565b80518251146115be5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610eeb565b60005b82518160ff16101561168857818160ff16815181106115e2576115e2615b0c565b6020026020010151611609336001600160a01b031660009081526001602052604090205490565b101561161457600080fd5b61167533848360ff168151811061162d5761162d615b0c565b6020908102919091010151600d546116499060ff16600a615aab565b858560ff168151811061165e5761165e615b0c565b60200260200101516116709190615a8c565b613e33565b508061168081615b3b565b9150506115c1565b505050565b6000546001600160a01b031633146116e75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b601e546040517f0109da69000000000000000000000000000000000000000000000000000000008152851515600482015284151560248201528315156044820152821515606482015263010000009091046001600160a01b031690630109da6990608401600060405180830381600087803b15801561176557600080fd5b505af1158015611779573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031633146117dd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b6107d08361ffff16111580156117f957506107d08261ffff1611155b801561180b57506107d08161ffff1611155b61181457600080fd5b600f805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b031633146118e15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b601e546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526301000000909204909116906333251a0b90602401611104565b6000546001600160a01b0316331461198e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b8385600e5461199d9190615a8c565b6119a79190615aba565b601c55600e5482906119ba908590615a8c565b6119c49190615aba565b601d55601a5550505050565b6000546001600160a01b03163314611a2a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611aaf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b6103e8600e54611abf9190615aba565b8183600e54611ace9190615a8c565b611ad89190615aba565b1015611b4c5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610eeb565b8082600e54611b5b9190615a8c565b611b659190615aba565b6015555050565b6000546001600160a01b03163314611bc65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b6109c48161ffff161115611c1c5760405162461bcd60e51b815260206004820152601460248201527f43616e6e6f74207365742061626f7665203235250000000000000000000000006044820152606401610eeb565b600f805461ffff9092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff909216919091179055565b6000546001600160a01b03163314611cb55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b601e80549115157801000000000000000000000000000000000000000000000000027fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6000546001600160a01b03163314611d5d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b6001600160a01b038116611dd95760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610eeb565b6001600160a01b03811661dead1415611e5a5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610eeb565b600080546001600160a01b039081168252600560208181526040808520805460ff1990811690915585548516865260078084528287208054831690558786168752938352818620805482166001908117909155938352818620805490911684179055845490931684525290205415611ef557600080546001600160a01b03168082526001602052604090912054611ef391908390613e33565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000601e60039054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fa2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ba9190615b5b565b6000546001600160a01b031633146120205760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6017546040517fd59b2ffd0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063d59b2ffd906024015b602060405180830381865afa1580156120b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a09190615b5b565b6017546040517f5e6056bb0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526060928392839283921690635e6056bb90602401600060405180830381865afa15801561213e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121669190810190615bd8565b93509350935093509193509193565b6000546001600160a01b031633146121cf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b601760009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be476040518263ffffffff1660e01b81526004016000604051808303818588803b15801561221f57600080fd5b505af193505050508015612231575060015b50565b6000546001600160a01b0316331461228e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b6001600160a01b03821630148015906122b557506012546001600160a01b03838116911614155b6122be57600080fd5b6001600160a01b0382166000908152600760205260409020805460ff1916821580159190911790915561233d576017546040517fdf047e9e0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152600060248301529091169063df047e9e90604401610f45565b6017546001600160a01b03838116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401610f45565b5050565b600d546000906123b79060ff16600a615aab565b6015546112ba9190615aba565b6000546001600160a01b0316331461241e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b600080546001600160a01b039081168252600560209081526040808420805460ff199081169091558454909316845260079091528083208054909216909155815473ffffffffffffffffffffffffffffffffffffffff191682555181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146124fc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b80612574576001600160a01b03828116600081815260026020526040808220805460ff19169055601e5490517f80c581d10000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915263010000009004909116906380c581d190604401610f45565b600354156125db576203f4806003544261258e9190615af5565b116125db5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610eeb565b6001600160a01b0382811660008181526002602052604090819020805460ff1916600190811790915542600355601e5491517f80c581d10000000000000000000000000000000000000000000000000000000081526004810193909352602483015263010000009004909116906380c581d190604401610f45565b600080546001600160a01b031633146126b15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b6011546126cb9030906001600160a01b03166000196142a2565b50600190565b6000546001600160a01b0316331461272b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b601e54610100900460ff16156127835760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610eeb565b601e5462010000900460ff166127db5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610eeb565b601e54630100000090046001600160a01b031661282357601e80547fffffffffffffffffff0000000000000000000000000000000000000000ffffff16306301000000021790555b601e54601254600d546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff909116606482015263010000009092041690636c115c3490608401600060405180830381600087803b1580156128b557600080fd5b505af19250505080156128c6575060015b50601e805461ff001916610100179055565b6060600c8054610f8a90615919565b6017546040517f2e6f0efd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690632e6f0efd90602401600060405180830381600087803b15801561294557600080fd5b505af1158015612959573d6000803e3d6000fd5b50505050565b600061144f338484613e33565b6000546001600160a01b031633146129c65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b6010805461ffff83811662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff868316640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff000090941692881692909217929092171617905580612a3e8385615c85565b612a489190615c85565b6010805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff909216919091179055505050565b6017546040517ff6ed20170000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063f6ed201790602401612093565b6000546001600160a01b03163314612b315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b601e5477010000000000000000000000000000000000000000000000900460ff1615612b9f5760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610eeb565b8251845114612bf05760405162461bcd60e51b815260206004820152600160248201527f32000000000000000000000000000000000000000000000000000000000000006044820152606401610eeb565b601e80547fffffffffffffffffff0000000000000000000000000000000000000000ffffff1663010000006001600160a01b03858116820292909217928390556017805473ffffffffffffffffffffffffffffffffffffffff19168584161790556040517f1a69523000000000000000000000000000000000000000000000000000000000815230600482015292041690631a69523090602401600060405180830381600087803b158015612ca457600080fd5b505af1925050508015612cb5575060015b50601e60039054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b8152600401600060405180830381865afa925050508015612d2a57506040513d6000823e601f3d908101601f19168201604052612d279190810190615cab565b60015b612d765760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610eeb565b8351612d8990600b90602087019061518f565b508251612d9d90600c90602086019061518f565b50600a828155600d805460ff191660ff8416908117909155612dbe91615aab565b600a54612dcb9190615a8c565b600e5550506017546040517f144fa6d70000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03909116925063144fa6d79150602401600060405180830381600087803b158015612e3057600080fd5b505af1925050508015612e41575060015b50601160009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb99190615d26565b6001600160a01b031663c9c65396601160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f3e9190615d26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015612fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc69190615d26565b6012805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392831690811782556000908152600260209081526040808320805460ff1990811660019081179092558454871685526007909352818420805484168217905593549094168252838220805482168417905530825292812080548416831790557fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d805484168317905580527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df8054909216179055600e54612710906130ae906005615a8c565b6130b89190615aba565b601c55600e54612710906130cd90600a615a8c565b6130d79190615aba565b601d55600e546103e8906130ec906003615a8c565b6130f69190615aba565b601555600e546103e89061310b906013615a8c565b6131159190615aba565b601655601e80547fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff1677010000000000000000000000000000000000000000000000179055600e54600160006131736000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000205561319f6000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600e546040516131e691815260200190565b60405180910390a36011546132089033906001600160a01b03166000196142a2565b6011546132229030906001600160a01b03166000196142a2565b60005b845181101561333357600d546000906132429060ff16600a615aab565b85838151811061325457613254615b0c565b60200260200101516132669190615a8c565b9050600086838151811061327c5761327c615b0c565b602002602001015190506132a460008054906101000a90046001600160a01b031682846143fa565b506017546040517fdf047e9e0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590529091169063df047e9e90604401600060405180830381600087803b15801561330c57600080fd5b505af192505050801561331d575060015b505050808061332b90615d43565b915050613225565b50600080546001600160a01b0316808252600160205260409091205461335b919030906143fa565b506011546001600160a01b031663f305d719473061338e816001600160a01b031660009081526001602052604090205490565b6000806133a36000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015613423573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134489190615d5e565b5050506129596126d1565b6000546001600160a01b031633146134ad5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b601e546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015263010000009092049091169063c6a276c290602401611104565b6000546001600160a01b0316331461355a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b620b71b0811061356957600080fd5b601855565b6000546001600160a01b031633146135c85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b601380546001600160a01b0393841673ffffffffffffffffffffffffffffffffffffffff199182161790915560148054929093169116179055565b6000546001600160a01b0316331461365d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b620151808111156136b05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207365742061626f76652031206461792e0000000000000000006044820152606401610eeb565b601f55565b6000546001600160a01b0316331461370f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b6019805461ff0019166101009315159390930292909217909155601e805460ff1916911515919091179055565b8151835114801561374e575080518251145b61379a5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610eeb565b60005b83518160ff16101561295957818160ff16815181106137be576137be615b0c565b6020026020010151838260ff16815181106137db576137db615b0c565b6020026020010151600e546137f09190615a8c565b6137fa9190615aba565b33600090815260016020526040902054101561381557600080fd5b61388733858360ff168151811061382e5761382e615b0c565b6020026020010151848460ff168151811061384b5761384b615b0c565b6020026020010151868560ff168151811061386857613868615b0c565b6020026020010151600e5461387d9190615a8c565b6116709190615aba565b508061389281615b3b565b91505061379d565b6000546001600160a01b031633146138f45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613939573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061395d9190615d26565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139ce9190615d26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015613a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a559190615d26565b90506001600160a01b038116613bf357816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613aa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ac79190615d26565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b389190615d26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015613b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bc19190615d26565b6012805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055613c1c565b6012805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556116889030906000196142a2565b6000546001600160a01b03163314613caf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eeb565b601e546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152831515602483015263010000009092049091169063eec2744e90604401600060405180830381600087803b158015613d1f57600080fd5b505af1158015613d33573d6000803e3d6000fd5b5050505061239f8282612234565b601754604080517f5695fa5800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691635695fa589160048083019260209291908290030181865afa158015611fa2573d6000803e3d6000fd5b601e546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015260009263010000009004169063fe575a8790602401602060405180830381865afa158015613e0f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a09190615d8c565b60006001600160a01b038416613eb15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610eeb565b6001600160a01b038316613f2d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610eeb565b60008211613fa35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610eeb565b613fad84846144af565b1561420957601e54610100900460ff166140095760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610eeb565b6001600160a01b03841660009081526002602052604090205460ff168061404857506001600160a01b03831660009081526002602052604090205460ff165b1561410c576001600160a01b03841660009081526006602052604090205460ff1615801561408f57506001600160a01b03831660009081526006602052604090205460ff16155b1561410c5760155482111561410c5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610eeb565b6011546001600160a01b0384811691161480159061414357506001600160a01b03831660009081526002602052604090205460ff16155b15614209576001600160a01b03831660009081526006602052604090205460ff16614209576016548261418b856001600160a01b031660009081526001602052604090205490565b6141959190615da9565b11156142095760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610eeb565b6001600160a01b038316600090815260016020526040902054614242576001600160a01b03831660009081526009602052604090204290555b6001600160a01b03841660009081526005602052604090205460019060ff168061428457506001600160a01b03841660009081526005602052604090205460ff165b1561428d575060005b61429985858584614580565b95945050505050565b6001600160a01b03831661431d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610eeb565b6001600160a01b0382166143995760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610eeb565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316600090815260016020526040812080548391908390614424908490615af5565b90915550506001600160a01b03831660009081526001602052604081208054849290614451908490615da9565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161449d91815260200190565b60405180910390a35060019392505050565b600080546001600160a01b038481169116148015906144dc57506000546001600160a01b03838116911614155b80156144f357506000546001600160a01b03163214155b801561451857506001600160a01b03821660009081526008602052604090205460ff16155b801561453d57506001600160a01b03831660009081526008602052604090205460ff16155b801561455457506001600160a01b03821661dead14155b801561456857506001600160a01b03821615155b801561144f575050506001600160a01b031630141590565b601e5460009062010000900460ff1661462e5761459d858561486c565b601e5462010000900460ff161580156145bb57506145bb85856144af565b1561462e5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610eeb565b61463885856144af565b156146ec57601e546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b03878116600483015286811660248301526044820186905260009263010000009004169063ecd07a53906064016020604051808303816000875af19250505080156146d5575060408051601f3d908101601f191682019092526146d291810190615d8c565b60015b6146de57600080fd5b9050806146ea57600080fd5b505b60195460ff1615614709576147028585856143fa565b9050614864565b6001600160a01b03851660009081526001602052604081208054859290614731908490615af5565b90915550506001600160a01b03841660009081526002602052604090205460ff16156147c45760195460ff161580156147715750601954610100900460ff165b156147c45742601a54601b546147879190615da9565b10156147c45730600090815260016020526040902054601c5481106147c257601d5481106147b45750601d545b6147bd81614a7d565b42601b555b505b8282156147d9576147d6868686614e28565b90505b6001600160a01b03851660009081526001602052604081208054839290614801908490615da9565b9091555061481190508686614faf565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161485691815260200190565b60405180910390a360019150505b949350505050565b601e5462010000900460ff16156148eb5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610eeb565b6148f582826144af565b15801561490f57506012546001600160a01b038281169116145b1561239f576001600160a01b038083166000908152600860205260409020805460ff19166001179055601e80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1662010000179081905563010000009004166149a457601e80547fffffffffffffffffff0000000000000000000000000000000000000000ffffff16306301000000021790555b6017546001600160a01b03166149d4576017805473ffffffffffffffffffffffffffffffffffffffff1916301790555b601760009054906101000a90046001600160a01b03166001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614a2457600080fd5b505af1925050508015614a35575060015b506019805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6019805460ff191660011790556040805160808101825260105461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000900490911660608201819052614adb5750614e1b565b3060009081526004602090815260408083206011546001600160a01b0316845290915290205460001914614b34573060009081526004602090815260408083206011546001600160a01b03168452909152902060001990555b6040805160028082526060820183526000926020830190803683370190505090503081600081518110614b6957614b69615b0c565b6001600160a01b03928316602091820292909201810191909152601154604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015614bdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bff9190615d26565b81600181518110614c1257614c12615b0c565b6001600160a01b0392831660209182029290920101526011546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790614c71908690600090869030904290600401615dc1565b600060405180830381600087803b158015614c8b57600080fd5b505af1158015614c9f573d6000803e3d6000fd5b5050506060830151835147925060009161ffff90811691614cc1911684615a8c565b614ccb9190615aba565b90506000846060015161ffff16856040015161ffff1684614cec9190615a8c565b614cf69190615aba565b90506000614d048284615da9565b614d0e9085615af5565b865190915061ffff1615614d8057601760009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be846040518263ffffffff1660e01b81526004016000604051808303818588803b158015614d6c57600080fd5b505af193505050508015614d7e575060015b505b604086015161ffff1615614dca576014546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015614dc8573d6000803e3d6000fd5b505b602086015161ffff1615614e14576013546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015614e12573d6000803e3d6000fd5b505b5050505050505b506019805460ff19169055565b6001600160a01b038316600090815260026020526040812054819060ff1615614e585750600f5461ffff16614f0b565b6001600160a01b03841660009081526002602052604090205460ff1615614efa57601e547801000000000000000000000000000000000000000000000000900460ff168015614ecb5750601f546001600160a01b0386166000908152600960205260409020544291614ec991615da9565b115b15614ee75750600f546601000000000000900461ffff16614f0b565b50600f5462010000900461ffff16614f0b565b50600f54640100000000900461ffff165b80614f19578291505061144f565b6000612710614f288386615a8c565b614f329190615aba565b30600090815260016020526040812080549293508392909190614f56908490615da9565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3614fa58185615af5565b9695505050505050565b6001600160a01b03821660009081526007602052604090205460ff16615059576017546001600160a01b03838116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b15801561504657600080fd5b505af1925050508015615057575060015b505b6001600160a01b03811660009081526007602052604090205460ff16615103576017546001600160a01b03828116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b1580156150f057600080fd5b505af1925050508015615101575060015b505b601e5460ff161561239f576017546018546040517fa9e732bb0000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163a9e732bb9161515c9160040190815260200190565b600060405180830381600087803b15801561517657600080fd5b505af1925050508015615187575060015b61239f575050565b82805461519b90615919565b90600052602060002090601f0160209004810192826151bd5760008555615203565b82601f106151d657805160ff1916838001178555615203565b82800160010185558215615203579182015b828111156152035782518255916020019190600101906151e8565b5061520f929150615213565b5090565b5b8082111561520f5760008155600101615214565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561528057615280615228565b604052919050565b600067ffffffffffffffff8211156152a2576152a2615228565b5060051b60200190565b6001600160a01b038116811461223157600080fd5b600082601f8301126152d257600080fd5b813560206152e76152e283615288565b615257565b82815260059290921b8401810191818101908684111561530657600080fd5b8286015b8481101561532a57803561531d816152ac565b835291830191830161530a565b509695505050505050565b801515811461223157600080fd5b6000806040838503121561535657600080fd5b823567ffffffffffffffff81111561536d57600080fd5b615379858286016152c1565b925050602083013561538a81615335565b809150509250929050565b60005b838110156153b0578181015183820152602001615398565b838111156129595750506000910152565b600081518084526153d9816020860160208601615395565b601f01601f19169290920160200192915050565b60208152600061144f60208301846153c1565b60006020828403121561541257600080fd5b5035919050565b6000806040838503121561542c57600080fd5b8235615437816152ac565b946020939093013593505050565b60008060006060848603121561545a57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561548457600080fd5b823561548f816152ac565b9150602083013561538a816152ac565b6000806000606084860312156154b457600080fd5b83356154bf816152ac565b925060208401356154cf816152ac565b929592945050506040919091013590565b6000602082840312156154f257600080fd5b813561144f816152ac565b6000806040838503121561551057600080fd5b50508035926020909101359150565b600082601f83011261553057600080fd5b813560206155406152e283615288565b82815260059290921b8401810191818101908684111561555f57600080fd5b8286015b8481101561532a5780358352918301918301615563565b6000806040838503121561558d57600080fd5b823567ffffffffffffffff808211156155a557600080fd5b6155b1868387016152c1565b935060208501359150808211156155c757600080fd5b506155d48582860161551f565b9150509250929050565b600080600080608085870312156155f457600080fd5b84356155ff81615335565b9350602085013561560f81615335565b9250604085013561561f81615335565b9150606085013561562f81615335565b939692955090935050565b803561ffff8116811461564c57600080fd5b919050565b60008060006060848603121561566657600080fd5b61566f8461563a565b925061567d6020850161563a565b915061568b6040850161563a565b90509250925092565b600080600080600060a086880312156156ac57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080604083850312156156e257600080fd5b82356156ed816152ac565b9150602083013561538a81615335565b60006020828403121561570f57600080fd5b61144f8261563a565b60006020828403121561572a57600080fd5b813561144f81615335565b60808152600061574860808301876153c1565b828103602084015261575a81876153c1565b9050828103604084015261576e81866153c1565b9050828103606084015261578281856153c1565b979650505050505050565b600080600080608085870312156157a357600080fd5b843567ffffffffffffffff808211156157bb57600080fd5b6157c7888389016152c1565b955060208701359150808211156157dd57600080fd5b506157ea8782880161551f565b93505060408501356157fb816152ac565b9150606085013561562f816152ac565b6000806040838503121561581e57600080fd5b82356156ed81615335565b60008060006060848603121561583e57600080fd5b833567ffffffffffffffff8082111561585657600080fd5b615862878388016152c1565b9450602086013591508082111561587857600080fd5b6158848783880161551f565b9350604086013591508082111561589a57600080fd5b506158a78682870161551f565b9150509250925092565b600081518084526020808501945080840160005b838110156158ea5781516001600160a01b0316875295820195908201906001016158c5565b509495945050505050565b60408152600061590860408301856158b1565b905082151560208301529392505050565b600181811c9082168061592d57607f821691505b60208210811415615967577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156159d75781600019048211156159bd576159bd61596d565b808516156159ca57918102915b93841c93908002906159a1565b509250929050565b6000826159ee575060016111a0565b816159fb575060006111a0565b8160018114615a115760028114615a1b57615a37565b60019150506111a0565b60ff841115615a2c57615a2c61596d565b50506001821b6111a0565b5060208310610133831016604e8410600b8410161715615a5a575081810a6111a0565b615a64838361599c565b8060001904821115615a7857615a7861596d565b029392505050565b600061144f83836159df565b6000816000190483118215151615615aa657615aa661596d565b500290565b600061144f60ff8416836159df565b600082615af0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015615b0757615b0761596d565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff811415615b5257615b5261596d565b60010192915050565b600060208284031215615b6d57600080fd5b5051919050565b600082601f830112615b8557600080fd5b815167ffffffffffffffff811115615b9f57615b9f615228565b615bb26020601f19601f84011601615257565b818152846020838601011115615bc757600080fd5b614864826020830160208701615395565b60008060008060808587031215615bee57600080fd5b845167ffffffffffffffff80821115615c0657600080fd5b615c1288838901615b74565b95506020870151915080821115615c2857600080fd5b615c3488838901615b74565b94506040870151915080821115615c4a57600080fd5b615c5688838901615b74565b93506060870151915080821115615c6c57600080fd5b50615c7987828801615b74565b91505092959194509250565b600061ffff808316818516808303821115615ca257615ca261596d565b01949350505050565b60008060008060808587031215615cc157600080fd5b845167ffffffffffffffff80821115615cd957600080fd5b615ce588838901615b74565b95506020870151915080821115615cfb57600080fd5b50615d0887828801615b74565b93505060408501519150606085015160ff8116811461562f57600080fd5b600060208284031215615d3857600080fd5b815161144f816152ac565b6000600019821415615d5757615d5761596d565b5060010190565b600080600060608486031215615d7357600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215615d9e57600080fd5b815161144f81615335565b60008219821115615dbc57615dbc61596d565b500190565b85815284602082015260a060408201526000615de060a08301866158b1565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212200963d9acbad5e067f9dfd19d13d33541571131206bc90138ddd3c35459be44d264736f6c634300080b0033

Deployed Bytecode Sourcemap

7919:26188:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9507:73;;;;;;;;;;;;9538:42;9507:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;9507:73:0;;;;;;;;10269:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;10269:28:0;245:177:1;18304:172:0;;;;;;;;;;-1:-1:-1;18304:172:0;;;;;:::i;:::-;;:::i;:::-;;8953:141;;;;;;;;;;-1:-1:-1;8953:141:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2882:6:1;2915:15;;;2897:34;;2967:15;;;2962:2;2947:18;;2940:43;3019:15;;;2999:18;;;2992:43;;;;3071:15;;;3066:2;3051:18;;3044:43;2859:3;2844:19;8953:141:0;2649:444:1;16453:80:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9444:26::-;;;;;;;;;;-1:-1:-1;9444:26:0;;;;-1:-1:-1;;;;;9444:26:0;;;19502:149;;;;;;;;;;-1:-1:-1;19502:149:0;;;;;:::i;:::-;;:::i;16875:216::-;;;;;;;;;;-1:-1:-1;16875:216:0;;;;;:::i;:::-;;:::i;:::-;;;4826:14:1;;4819:22;4801:41;;4789:2;4774:18;16875:216:0;4661:187:1;21492:277:0;;;;;;;;;;-1:-1:-1;21492:277:0;;;;;:::i;:::-;;:::i;25580:112::-;;;;;;;;;;;;;:::i;16156:115::-;;;;;;;;;;;;;:::i;18617:300::-;;;;;;;;;;-1:-1:-1;18617:300:0;;;;;:::i;:::-;;:::i;17789:306::-;;;;;;;;;;-1:-1:-1;17789:306:0;;;;;:::i;:::-;;:::i;23991:130::-;;;;;;;;;;-1:-1:-1;23991:130:0;;;;;:::i;:::-;-1:-1:-1;;;;;24080:33:0;24056:4;24080:33;;;:24;:33;;;;;;;;;23991:130;25191:267;;;;;;;;;;-1:-1:-1;25191:267:0;;;;;:::i;:::-;;:::i;33241:373::-;;;;;;;;;;-1:-1:-1;33241:373:0;;;;;:::i;:::-;;:::i;19283:211::-;;;;;;;;;;-1:-1:-1;19283:211:0;;;;;:::i;:::-;;:::i;9241:42::-;;;;;;;;;;;;9279:4;9241:42;;10304:25;;;;;;;;;;;;;;;;16277:80;;;;;;;;;;-1:-1:-1;16345:9:0;;16277:80;;16345:9;;;;8594:36:1;;8582:2;8567:18;16277:80:0;8452:184:1;20096:353:0;;;;;;;;;;-1:-1:-1;20096:353:0;;;;;:::i;:::-;;:::i;18925:110::-;;;;;;;;;;-1:-1:-1;18925:110:0;;;;;:::i;:::-;;:::i;21146:338::-;;;;;;;;;;-1:-1:-1;21146:338:0;;;;;:::i;:::-;;:::i;24267:140::-;;;;;;;;;;-1:-1:-1;24267:140:0;;;;;:::i;:::-;;:::i;24914:269::-;;;;;;;;;;-1:-1:-1;24914:269:0;;;;;:::i;:::-;;:::i;25990:156::-;;;;;;;;;;-1:-1:-1;25990:156:0;;;;;:::i;:::-;;:::i;9477:21::-;;;;;;;;;;-1:-1:-1;9477:21:0;;;;-1:-1:-1;;;;;9477:21:0;;;10379:34;;;;;;;;;;-1:-1:-1;10379:34:0;;;;;;;;;;;25700:105;;;;;;;;;;-1:-1:-1;25700:105:0;;;;;:::i;:::-;;:::i;14824:689::-;;;;;;;;;;-1:-1:-1;14824:689:0;;;;;:::i;:::-;;:::i;10420:36::-;;;;;;;;;;-1:-1:-1;10420:36:0;;;;;;;;;;;19171:104;;;;;;;;;;;;;:::i;24772:134::-;;;;;;;;;;-1:-1:-1;24772:134:0;;;;;:::i;:::-;;:::i;24129:130::-;;;;;;;;;;-1:-1:-1;24129:130:0;;;;;:::i;:::-;-1:-1:-1;;;;;24221:30:0;24197:4;24221:30;;;:21;:30;;;;;;;;;24129:130;22350:154;;;;;;;;;;-1:-1:-1;22350:154:0;;;;;:::i;:::-;;:::i;22150:192::-;;;;;;;;;;-1:-1:-1;22150:192:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;32419:124::-;;;;;;;;;;;;;:::i;24415:349::-;;;;;;;;;;-1:-1:-1;24415:349:0;;;;;:::i;:::-;;:::i;25466:106::-;;;;;;;;;;;;;:::i;16625:103::-;;;;;;;;;;-1:-1:-1;16625:103:0;;;;;:::i;:::-;-1:-1:-1;;;;;16709:16:0;16691:7;16709:16;;;:7;:16;;;;;;;16625:103;15521:245;;;;;;;;;;;;;:::i;23339:516::-;;;;;;;;;;-1:-1:-1;23339:516:0;;;;;:::i;:::-;;:::i;16539:80::-;;;;;;;;;;-1:-1:-1;16591:7:0;14802:6;-1:-1:-1;;;;;14802:6:0;16539:80;25580:112;17448:173;;;;;;;;;;;;;:::i;19659:429::-;;;;;;;;;;;;;:::i;16363:84::-;;;;;;;;;;;;;:::i;21916:100::-;;;;;;;;;;;;;:::i;10530:34::-;;;;;;;;;;-1:-1:-1;10530:34:0;;;;;;;;;;;22670:111;;;;;;;;;;-1:-1:-1;22670:111:0;;;;;:::i;:::-;-1:-1:-1;;;;;22756:17:0;22729:7;22756:17;;;:8;:17;;;;;;;22670:111;17629:152;;;;;;;;;;-1:-1:-1;17629:152:0;;;;;:::i;:::-;;:::i;20457:268::-;;;;;;;;;;-1:-1:-1;20457:268:0;;;;;:::i;:::-;;:::i;22512:150::-;;;;;;;;;;-1:-1:-1;22512:150:0;;;;;:::i;:::-;;:::i;10571:43::-;;;;;;;;;;;;;;;;11806:2379;;;;;;;;;;-1:-1:-1;11806:2379:0;;;;;:::i;:::-;;:::i;23863:120::-;;;;;;;;;;-1:-1:-1;23863:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;23947:28:0;23923:4;23947:28;;;:19;:28;;;;;;;;;23863:120;19043;;;;;;;;;;-1:-1:-1;19043:120:0;;;;;:::i;:::-;;:::i;9103:129::-;;;;;;;;;;-1:-1:-1;9103:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;21777:131;;;;;;;;;;-1:-1:-1;21777:131:0;;;;;:::i;:::-;;:::i;20733:204::-;;;;;;;;;;-1:-1:-1;20733:204:0;;;;;:::i;:::-;;:::i;25813:169::-;;;;;;;;;;-1:-1:-1;25813:169:0;;;;;:::i;:::-;;:::i;16734:133::-;;;;;;;;;;-1:-1:-1;16734:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;16836:19:0;;;16818:7;16836:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;16734:133;20945:193;;;;;;;;;;-1:-1:-1;20945:193:0;;;;;:::i;:::-;;:::i;10186:45::-;;;;;;;;;;;;;;;;33622:482;;;;;;;;;;-1:-1:-1;33622:482:0;;;;;:::i;:::-;;:::i;22789:542::-;;;;;;;;;;-1:-1:-1;22789:542:0;;;;;:::i;:::-;;:::i;18103:193::-;;;;;;;;;;-1:-1:-1;18103:193:0;;;;;:::i;:::-;;:::i;10336:34::-;;;;;;;;;;-1:-1:-1;10336:34:0;;;;;;;;22024:118;;;;;;;;;;;;;:::i;9775:200::-;;;;;;;;;;-1:-1:-1;9775:200:0;;;;;;-1:-1:-1;;;;;9775:200:0;;;;;;;;;;;-1:-1:-1;;;;;13913:15:1;;;13895:34;;13965:15;;;;13960:2;13945:18;;13938:43;13807:18;9775:200:0;13628:359:1;10140:39:0;;;;;;;;;;-1:-1:-1;10140:39:0;;;;;;;;;;;18484:125;;;;;;;;;;-1:-1:-1;18484:125:0;;;;;:::i;:::-;;:::i;18304:172::-;10760:6;;-1:-1:-1;;;;;10760:6:0;10770:10;10760:20;10752:65;;;;-1:-1:-1;;;10752:65:0;;14194:2:1;10752:65:0;;;14176:21:1;;;14213:18;;;14206:30;14272:34;14252:18;;;14245:62;14324:18;;10752:65:0;;;;;;;;;18412:9:::1;::::0;:56:::1;::::0;;;;:9;;;::::1;-1:-1:-1::0;;;;;18412:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;18450:8;;18460:7;;18412:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18304:172:::0;;:::o;16453:80::-;16501:13;16525:5;16518:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16453:80;:::o;19502:149::-;10760:6;;-1:-1:-1;;;;;10760:6:0;10770:10;10760:20;10752:65;;;;-1:-1:-1;;;10752:65:0;;14194:2:1;10752:65:0;;;14176:21:1;;;14213:18;;;14206:30;14272:34;14252:18;;;14245:62;14324:18;;10752:65:0;13992:356:1;10752:65:0;19586:2:::1;19579:3;:9;;19571:30;;;::::0;-1:-1:-1;;;19571:30:0;;15833:2:1;19571:30:0::1;::::0;::::1;15815:21:1::0;15872:1;15852:18;;;15845:29;15910:10;15890:18;;;15883:38;15938:18;;19571:30:0::1;15631:331:1::0;19571:30:0::1;19612:9;::::0;:31:::1;::::0;;;;::::1;::::0;::::1;391:25:1::0;;;19612:9:0;;;::::1;-1:-1:-1::0;;;;;19612:9:0::1;::::0;:26:::1;::::0;364:18:1;;19612:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19502:149:::0;:::o;16875:216::-;16979:10;16950:4;16967:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;16967:32:0;;;;;;;;;;:41;;;17024:37;16950:4;;16967:32;;17024:37;;;;17002:6;391:25:1;;379:2;364:18;;245:177;17024:37:0;;;;;;;;-1:-1:-1;17079:4:0;16875:216;;;;;:::o;21492:277::-;10760:6;;-1:-1:-1;;;;;10760:6:0;10770:10;10760:20;10752:65;;;;-1:-1:-1;;;10752:65:0;;14194:2:1;10752:65:0;;;14176:21:1;;;14213:18;;;14206:30;14272:34;14252:18;;;14245:62;14324:18;;10752:65:0;13992:356:1;10752:65:0;21664:27:::1;21668:23:::0;21664:2:::1;:27;:::i;:::-;21647:44;::::0;:14;:44:::1;:::i;:::-;21702:9;::::0;:59:::1;::::0;;;;::::1;::::0;::::1;18057:25:1::0;;;18098:18;;;18091:34;;;21630:61:0;;-1:-1:-1;;;;;;21702:9:0::1;::::0;:31:::1;::::0;18030:18:1;;21702:59:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21492:277:::0;;;:::o;25580:112::-;25674:9;;25625:7;;25670:13;;25674:9;;25670:2;:13;:::i;:::-;25652:14;;:32;;;;:::i;:::-;25645:39;;25580:112;:::o;16156:115::-;16211:7;16226;;16237:1;16226:12;16222:31;;;16242:8;;;16222:31;-1:-1:-1;16261:7:0;;;16156:115::o;18617:300::-;10760:6;;-1:-1:-1;;;;;10760:6:0;10770:10;10760:20;10752:65;;;;-1:-1:-1;;;10752:65:0;;14194:2:1;10752:65:0;;;14176:21:1;;;14213:18;;;14206:30;14272:34;14252:18;;;14245:62;14324:18;;10752:65:0;13992:356:1;10752:65:0;-1:-1:-1;;;;;18724:29:0;::::1;18748:4;18724:29;::::0;::::1;::::0;:62:::1;;-1:-1:-1::0;;;;;;18757:29:0;::::1;18781:4;18757:29;;18724:62;:94;;;;;18806:12;-1:-1:-1::0;;;;;18790:28:0::1;:12;-1:-1:-1::0;;;;;18790:28:0::1;;;18724:94;18716:103;;;::::0;::::1;;18830:9;:33:::0;;-1:-1:-1;;18830:33:0::1;-1:-1:-1::0;;;;;18830:33:0;;::::1;;::::0;;18874:9:::1;:35:::0;;;::::1;::::0;;;;::::1;::::0;;;::::1;;::::0;;18617:300::o;17789:306::-;-1:-1:-1;;;;;17910:19:0;;17889:4;17910:19;;;:11;:19;;;;;;;;17930:10;17910:31;;;;;;;;-1:-1:-1;;17910:52:0;17906:126;;-1:-1:-1;;;;;17979:19:0;;;;;;:11;:19;;;;;;;;17999:10;17979:31;;;;;;;:41;;18014:6;;17979:19;:41;;18014:6;;17979:41;:::i;:::-;;;;-1:-1:-1;;17906:126:0;18051:36;18061:6;18069:9;18080:6;18051:9;:36::i;:::-;18044:43;;17789:306;;;;;;:::o;25191:267::-;10760:6;;-1:-1:-1;;;;;10760:6:0;10770:10;10760:20;10752:65;;;;-1:-1:-1;;;10752:65:0;;14194:2:1;10752:65:0;;;14176:21:1;;;14213:18;;;14206:30;14272:34;14252:18;;;14245:62;14324:18;;10752:65:0;13992:356:1;10752:65:0;25333:4:::1;25323:7;;:14;;;;:::i;:::-;25311:7;25300;25290;;:17;;;;:::i;:::-;25289:29;;;;:::i;:::-;:49;;25281:112;;;::::0;-1:-1:-1;;;25281:112:0;;18892:2:1;25281:112:0::1;::::0;::::1;18874:21:1::0;18931:2;18911:18;;;18904:30;18970:34;18950:18;;;18943:62;19041:20;19021:18;;;19014:48;19079:19;;25281:112:0::1;18690:414:1::0;25281:112:0::1;25443:7;25432;25422;;:17;;;;:::i;:::-;25421:29;;;;:::i;:::-;25404:14;:46:::0;-1:-1:-1;;25191:267:0:o;33241:373::-;33366:7;:14;33347:8;:15;:33;33339:67;;;;-1:-1:-1;;;33339:67:0;;19311:2:1;33339:67:0;;;19293:21:1;19350:2;19330:18;;;19323:30;19389:23;19369:18;;;19362:51;19430:18;;33339:67:0;19109:345:1;33339:67:0;33422:7;33417:190;33439:8;:15;33435:1;:19;;;33417:190;;;33509:7;33517:1;33509:10;;;;;;;;;;:::i;:::-;;;;;;;33484:21;33494:10;-1:-1:-1;;;;;16709:16:0;16691:7;16709:16;;;:7;:16;;;;;;;16625:103;33484:21;:35;;33476:44;;;;;;33535:60;33545:10;33557:8;33566:1;33557:11;;;;;;;;;;:::i;:::-;;;;;;;;;;;33585:9;;33581:13;;33585:9;;33581:2;:13;:::i;:::-;33570:7;33578:1;33570:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;33535:9;:60::i;:::-;-1:-1:-1;33456:3:0;;;;:::i;:::-;;;;33417:190;;;;33241:373;;:::o;19283:211::-;10760:6;;-1:-1:-1;;;;;10760:6:0;10770:10;10760:20;10752:65;;;;-1:-1:-1;;;10752:65:0;;14194:2:1;10752:65:0;;;14176:21:1;;;14213:18;;;14206:30;14272:34;14252:18;;;14245:62;14324:18;;10752:65:0;13992:356:1;10752:65:0;19414:9:::1;::::0;:72:::1;::::0;;;;20060:14:1;;20053:22;19414:72:0::1;::::0;::::1;20035:41:1::0;20119:14;;20112:22;20092:18;;;20085:50;20178:14;;20171:22;20151:18;;;20144:50;20237:14;;20230:22;20210:18;;;20203:50;19414:9:0;;;::::1;-1:-1:-1::0;;;;;19414:9:0::1;::::0;:24:::1;::::0;20007:19:1;;19414:72:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19283:211:::0;;;;:::o;20096:353::-;10760:6;;-1:-1:-1;;;;;10760:6:0;10770:10;10760:20;10752:65;;;;-1:-1:-1;;;10752:65:0;;14194:2:1;10752:65:0;;;14176:21:1;;;14213:18;;;14206:30;14272:34;14252:18;;;14245:62;14324:18;;10752:65:0;13992:356:1;10752:65:0;9279:4:::1;20203:6;:21;;;;:65;;;;;9329:4;20245:7;:23;;;;20203:65;:117;;;;;9383:4;20289:11;:31;;;;20203:117;20195:126;;;::::0;::::1;;20332:9;:25:::0;;::::1;::::0;;::::1;20368:27:::0;;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;20406:35:::0;::::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;20096:353::o;18925:110::-;10760:6;;-1:-1:-1;;;;;10760:6:0;10770:10;10760:20;10752:65;;;;-1:-1:-1;;;10752:65:0;;14194:2:1;10752:65:0;;;14176:21:1;;;14213:18;;;14206:30;14272:34;14252:18;;;14245:62;14324:18;;10752:65:0;13992:356:1;10752:65:0;18996:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;18996:31:0::1;::::0;::::1;160:74:1::0;18996:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;18996:31:0::1;14:226:1::0;21146:338:0;10760:6;;-1:-1:-1;;;;;10760:6:0;10770:10;10760:20;10752:65;;;;-1:-1:-1;;;10752:65:0;;14194:2:1;10752:65:0;;;14176:21:1;;;14213:18;;;14206:30;14272:34;14252:18;;;14245:62;14324:18;;10752:65:0;13992:356:1;10752:65:0;21360:16:::1;21340;21330:7;;:26;;;;:::i;:::-;21329:47;;;;:::i;:::-;21313:13;:63:::0;21401:7:::1;::::0;21428:13;;21401:23:::1;::::0;21411:13;;21401:23:::1;:::i;:::-;21400:41;;;;:::i;:::-;21387:10;:54:::0;21452:17:::1;:24:::0;-1:-1:-1;;;;21146:338:0:o;24267:140::-;10760:6;;-1:-1:-1;;;;;10760:6:0;10770:10;10760:20;10752:65;;;;-1:-1:-1;;;10752:65:0;;14194:2:1;10752:65:0;;;14176:21:1;;;14213:18;;;14206:30;14272:34;14252:18;;;14245:62;14324:18;;10752:65:0;13992:356:1;10752:65:0;-1:-1:-1;;;;;24359:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;24359:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24267:140::o;24914:269::-;10760:6;;-1:-1:-1;;;;;10760:6:0;10770:10;10760:20;10752:65;;;;-1:-1:-1;;;10752:65:0;;14194:2:1;10752:65:0;;;14176:21:1;;;14213:18;;;14206:30;14272:34;14252:18;;;14245:62;14324:18;;10752:65:0;13992:356:1;10752:65:0;25055:4:::1;25045:7;;:14;;;;:::i;:::-;25033:7;25022;25012;;:17;;;;:::i;:::-;25011:29;;;;:::i;:::-;:49;;25003:117;;;::::0;-1:-1:-1;;;25003:117:0;;20466:2:1;25003:117:0::1;::::0;::::1;20448:21:1::0;20505:2;20485:18;;;20478:30;20544:34;20524:18;;;20517:62;20615:25;20595:18;;;20588:53;20658:19;;25003:117:0::1;20264:419:1::0;25003:117:0::1;25168:7;25157;25147;;:17;;;;:::i;:::-;25146:29;;;;:::i;:::-;25131:12;:44:::0;-1:-1:-1;;24914:269:0:o;25990:156::-;10760:6;;-1:-1:-1;;;;;10760:6:0;10770:10;10760:20;10752:65;;;;-1:-1:-1;;;10752:65:0;;14194:2:1;10752:65:0;;;14176:21:1;;;14213:18;;;14206:30;14272:34;14252:18;;;14245:62;14324:18;;10752:65:0;13992:356:1;10752:65:0;26074:4:::1;26067:3;:11;;;;26059:44;;;::::0;-1:-1:-1;;;26059:44:0;;20890:2:1;26059:44:0::1;::::0;::::1;20872:21:1::0;20929:2;20909:18;;;20902:30;20968:22;20948:18;;;20941:50;21008:18;;26059:44:0::1;20688:344:1::0;26059:44:0::1;26114:9;:24:::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;25990:156::o;25700:105::-;10760:6;;-1:-1:-1;;;;;10760:6:0;10770:10;10760:20;10752:65;;;;-1:-1:-1;;;10752:65:0;;14194:2:1;10752:65:0;;;14176:21:1;;;14213:18;;;14206:30;14272:34;14252:18;;;14245:62;14324:18;;10752:65:0;13992:356:1;10752:65:0;25772:15:::1;:25:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;25700:105::o;14824:689::-;10760:6;;-1:-1:-1;;;;;10760:6:0;10770:10;10760:20;10752:65;;;;-1:-1:-1;;;10752:65:0;;14194:2:1;10752:65:0;;;14176:21:1;;;14213:18;;;14206:30;14272:34;14252:18;;;14245:62;14324:18;;10752:65:0;13992:356:1;10752:65:0;-1:-1:-1;;;;;14903:22:0;::::1;14895:96;;;::::0;-1:-1:-1;;;14895:96:0;;21239:2:1;14895:96:0::1;::::0;::::1;21221:21:1::0;21278:2;21258:18;;;21251:30;21317:34;21297:18;;;21290:62;21388:31;21368:18;;;21361:59;21437:19;;14895:96:0::1;21037:425:1::0;14895:96:0::1;-1:-1:-1::0;;;;;15010:16:0;::::1;9538:42;15010:16;;15002:90;;;::::0;-1:-1:-1;;;15002:90:0;;21239:2:1;15002:90:0::1;::::0;::::1;21221:21:1::0;21278:2;21258:18;;;21251:30;21317:34;21297:18;;;21290:62;21388:31;21368:18;;;21361:59;21437:19;;15002:90:0::1;21037:425:1::0;15002:90:0::1;15133:5;15123:6:::0;;-1:-1:-1;;;;;15123:6:0;;::::1;15103:27:::0;;:19:::1;:27;::::0;;;;;;;:35;;-1:-1:-1;;15103:35:0;;::::1;::::0;;;15174:6;;;::::1;15149:32:::0;;:24:::1;:32:::0;;;;;;:40;;;::::1;::::0;;15200:29;;::::1;::::0;;;;;;;;:36;;;::::1;15123:6:::0;15200:36;;::::1;::::0;;;15247:34;;;;;;:41;;;;::::1;::::0;::::1;::::0;;15320:6;;;;::::1;15312:15:::0;;;;;;:19;15309:95:::1;;15358:6;::::0;;-1:-1:-1;;;;;15358:6:0::1;15376:15:::0;;;15358:6;15376:15:::1;::::0;;;;;;15348:44:::1;::::0;15358:6;15366:8;;15348:9:::1;:44::i;:::-;;15309:95;15424:6;:17:::0;;-1:-1:-1;;15424:17:0::1;-1:-1:-1::0;;;;;15424:17:0;::::1;::::0;;::::1;::::0;;15457:38:::1;::::0;15424:17;;;;15457:38:::1;::::0;15424:6;15457:38:::1;14824:689:::0;:::o;19171:104::-;19216:7;19243:9;;;;;;;;;-1:-1:-1;;;;;19243:9:0;-1:-1:-1;;;;;19243:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24772:134::-;10760:6;;-1:-1:-1;;;;;10760:6:0;10770:10;10760:20;10752:65;;;;-1:-1:-1;;;10752:65:0;;14194:2:1;10752:65:0;;;14176:21:1;;;14213:18;;;14206:30;14272:34;14252:18;;;14245:62;14324:18;;10752:65:0;13992:356:1;10752:65:0;-1:-1:-1;;;;;24860:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;24860:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24772:134::o;22350:154::-;22451:9;;:45;;;;;-1:-1:-1;;;;;178:55:1;;;22451:45:0;;;160:74:1;22424:7:0;;22451:9;;:32;;133:18:1;;22451:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22150:192::-;22293:9;;:41;;;;;-1:-1:-1;;;;;178:55:1;;;22293:41:0;;;160:74:1;22215:13:0;;;;;;;;22293:9;;:28;;133:18:1;;22293:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22293:41:0;;;;;;;;;;;;:::i;:::-;22286:48;;;;;;;;22150:192;;;;;:::o;32419:124::-;10760:6;;-1:-1:-1;;;;;10760:6:0;10770:10;10760:20;10752:65;;;;-1:-1:-1;;;10752:65:0;;14194:2:1;10752:65:0;;;14176:21:1;;;14213:18;;;14206:30;14272:34;14252:18;;;14245:62;14324:18;;10752:65:0;13992:356:1;10752:65:0;32478:9:::1;;;;;;;;;-1:-1:-1::0;;;;;32478:9:0::1;-1:-1:-1::0;;;;;32478:14:0::1;;32500:21;32478:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;32474:62:::0;32419:124::o;24415:349::-;10760:6;;-1:-1:-1;;;;;10760:6:0;10770:10;10760:20;10752:65;;;;-1:-1:-1;;;10752:65:0;;14194:2:1;10752:65:0;;;14176:21:1;;;14213:18;;;14206:30;14272:34;14252:18;;;14245:62;14324:18;;10752:65:0;13992:356:1;10752:65:0;-1:-1:-1;;;;;24510:23:0;::::1;24528:4;24510:23;::::0;::::1;::::0;:43:::1;;-1:-1:-1::0;24547:6:0::1;::::0;-1:-1:-1;;;;;24537:16:0;;::::1;24547:6:::0;::::1;24537:16;;24510:43;24502:52;;;::::0;::::1;;-1:-1:-1::0;;;;;24565:32:0;::::1;;::::0;;;:24:::1;:32;::::0;;;;:42;;-1:-1:-1;;24565:42:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;24618:139:::1;;24646:9;::::0;:26:::1;::::0;;;;-1:-1:-1;;;;;23393:55:1;;;24646:26:0::1;::::0;::::1;23375:74:1::0;24646:9:0::1;23465:18:1::0;;;23458:34;24646:9:0;;::::1;::::0;:15:::1;::::0;23348:18:1;;24646:26:0::1;23193:305:1::0;24618:139:0::1;24705:9;::::0;-1:-1:-1;;;;;24729:15:0;;::::1;24705:9;24729:15:::0;;;24705:9;24729:15:::1;::::0;;;;;;;24705:40;;;;;::::1;::::0;::::1;23375:74:1::0;;;;23465:18;;;23458:34;24705:9:0;::::1;::::0;:15:::1;::::0;23348:18:1;;24705:40:0::1;23193:305:1::0;24618:139:0::1;24415:349:::0;;:::o;25466:106::-;25554:9;;25507:7;;25550:13;;25554:9;;25550:2;:13;:::i;:::-;25534:12;;:30;;;;:::i;15521:245::-;10760:6;;-1:-1:-1;;;;;10760:6:0;10770:10;10760:20;10752:65;;;;-1:-1:-1;;;10752:65:0;;14194:2:1;10752:65:0;;;14176:21:1;;;14213:18;;;14206:30;14272:34;14252:18;;;14245:62;14324:18;;10752:65:0;13992:356:1;10752:65:0;15616:5:::1;15606:6:::0;;-1:-1:-1;;;;;15606:6:0;;::::1;15586:27:::0;;:19:::1;:27;::::0;;;;;;;:35;;-1:-1:-1;;15586:35:0;;::::1;::::0;;;15657:6;;;;::::1;15632:32:::0;;:24:::1;:32:::0;;;;;;:40;;;;::::1;::::0;;;15683:19;;-1:-1:-1;;15683:19:0::1;::::0;;15718:40;15616:5;;15718:40:::1;::::0;15616:5;;15718:40:::1;15521:245::o:0;23339:516::-;10760:6;;-1:-1:-1;;;;;10760:6:0;10770:10;10760:20;10752:65;;;;-1:-1:-1;;;10752:65:0;;14194:2:1;10752:65:0;;;14176:21:1;;;14213:18;;;14206:30;14272:34;14252:18;;;14245:62;14324:18;;10752:65:0;13992:356:1;10752:65:0;23420:16;23416:432:::1;;-1:-1:-1::0;;;;;23453:13:0;;::::1;23469:5;23453:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;23453:21:0::1;::::0;;23489:9:::1;::::0;:32;;;;;::::1;::::0;::::1;23973:74:1::0;;;;24063:18;;;24056:50;;;;23489:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;23946:18:1;;23489:32:0::1;23805:307:1::0;23416:432:0::1;23558:17;::::0;:22;23554:152:::1;;23647:6;23627:17;;23609:15;:35;;;;:::i;:::-;:44;23601:89;;;::::0;-1:-1:-1;;;23601:89:0;;24319:2:1;23601:89:0::1;::::0;::::1;24301:21:1::0;;;24338:18;;;24331:30;24397:34;24377:18;;;24370:62;24449:18;;23601:89:0::1;24117:356:1::0;23601:89:0::1;-1:-1:-1::0;;;;;23720:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;23720:20:0::1;23736:4;23720:20:::0;;::::1;::::0;;;23775:15:::1;23755:17;:35:::0;23805:9:::1;::::0;:31;;;;;::::1;::::0;::::1;23973:74:1::0;;;;24063:18;;;24056:50;23805:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;23946:18:1;;23805:31:0::1;:307:1::0;17448:173:0;17512:4;10760:6;;-1:-1:-1;;;;;10760:6:0;10770:10;10760:20;10752:65;;;;-1:-1:-1;;;10752:65:0;;14194:2:1;10752:65:0;;;14176:21:1;;;14213:18;;;14206:30;14272:34;14252:18;;;14245:62;14324:18;;10752:65:0;13992:356:1;10752:65:0;17561:9:::1;::::0;17529:62:::1;::::0;17546:4:::1;::::0;-1:-1:-1;;;;;17561:9:0::1;-1:-1:-1::0;;17529:8:0::1;:62::i;:::-;-1:-1:-1::0;17609:4:0::1;17448:173:::0;:::o;19659:429::-;10760:6;;-1:-1:-1;;;;;10760:6:0;10770:10;10760:20;10752:65;;;;-1:-1:-1;;;10752:65:0;;14194:2:1;10752:65:0;;;14176:21:1;;;14213:18;;;14206:30;14272:34;14252:18;;;14245:62;14324:18;;10752:65:0;13992:356:1;10752:65:0;19721:14:::1;::::0;::::1;::::0;::::1;;;19720:15;19712:52;;;::::0;-1:-1:-1;;;19712:52:0;;24680:2:1;19712:52:0::1;::::0;::::1;24662:21:1::0;24719:2;24699:18;;;24692:30;24758:26;24738:18;;;24731:54;24802:18;;19712:52:0::1;24478:348:1::0;19712:52:0::1;19783:16;::::0;;;::::1;;;19775:53;;;::::0;-1:-1:-1;;;19775:53:0;;25033:2:1;19775:53:0::1;::::0;::::1;25015:21:1::0;25072:2;25052:18;;;25045:30;25111:26;25091:18;;;25084:54;25155:18;;19775:53:0::1;24831:348:1::0;19775:53:0::1;19850:9;::::0;;;::::1;-1:-1:-1::0;;;;;19850:9:0::1;19839:99;;19890:9;:36:::0;;;::::1;19920:4;19890:36:::0;::::1;;::::0;;19839:99:::1;19952:9;::::0;19972:6:::1;::::0;20027:9:::1;::::0;19952:85:::1;::::0;;;;-1:-1:-1;;;;;19972:6:0;;::::1;19952:85;::::0;::::1;25407:74:1::0;25529:10;19987:12:0::1;25517:23:1::0;25497:18;;;25490:51;25589:18;20009:15:0::1;25577:31:1::0;25557:18;;;25550:59;20027:9:0::1;::::0;;::::1;25625:18:1::0;;;25618:45;19952:9:0;;;::::1;;::::0;:19:::1;::::0;25379::1;;19952:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;19948:101:::0;20059:14:::1;:21:::0;;-1:-1:-1;;20059:21:0::1;;;::::0;;19659:429::o;16363:84::-;16413:13;16437:7;16430:14;;;;;:::i;21916:100::-;21967:9;;:41;;;;;21997:10;21967:41;;;160:74:1;-1:-1:-1;;;;;21967:9:0;;;;:29;;133:18:1;;21967:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21916:100::o;17629:152::-;17709:4;17733:40;17743:10;17755:9;17766:6;17733:9;:40::i;20457:268::-;10760:6;;-1:-1:-1;;;;;10760:6:0;10770:10;10760:20;10752:65;;;;-1:-1:-1;;;10752:65:0;;14194:2:1;10752:65:0;;;14176:21:1;;;14213:18;;;14206:30;14272:34;14252:18;;;14245:62;14324:18;;10752:65:0;13992:356:1;10752:65:0;20557:7:::1;:25:::0;;::::1;20631:29:::0;;::::1;::::0;::::1;::::0;20593:27;;::::1;::::0;::::1;::::0;;;;20557:25;;::::1;20593:27:::0;;;;;;;::::1;20631:29;;::::0;;20651:9;20687:18:::1;20612:8:::0;20575:7;20687:18:::1;:::i;:::-;:30;;;;:::i;:::-;20671:7;:46:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;20457:268:0:o;22512:150::-;22614:9;;:40;;;;;-1:-1:-1;;;;;178:55:1;;;22614:40:0;;;160:74:1;22587:7:0;;22614:9;;:27;;133:18:1;;22614:40:0;14:226:1;11806:2379:0;10760:6;;-1:-1:-1;;;;;10760:6:0;10770:10;10760:20;10752:65;;;;-1:-1:-1;;;10752:65:0;;14194:2:1;10752:65:0;;;14176:21:1;;;14213:18;;;14206:30;14272:34;14252:18;;;14245:62;14324:18;;10752:65:0;13992:356:1;10752:65:0;11963:19:::1;::::0;;;::::1;;;11962:20;11954:34;;;::::0;-1:-1:-1;;;11954:34:0;;26105:2:1;11954:34:0::1;::::0;::::1;26087:21:1::0;26144:1;26124:18;;;26117:29;26182:3;26162:18;;;26155:31;26203:18;;11954:34:0::1;25903:324:1::0;11954:34:0::1;12026:7;:14;12007:8;:15;:33;11999:47;;;::::0;-1:-1:-1;;;11999:47:0;;26434:2:1;11999:47:0::1;::::0;::::1;26416:21:1::0;26473:1;26453:18;;;26446:29;26511:3;26491:18;;;26484:31;26532:18;;11999:47:0::1;26232:324:1::0;11999:47:0::1;12057:9;:33:::0;;;::::1;::::0;-1:-1:-1;;;;;12057:33:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;12101:9:::1;:29:::0;;-1:-1:-1;;12101:29:0::1;::::0;;::::1;;::::0;;12145:33:::1;::::0;;;;12172:4:::1;12145:33;::::0;::::1;160:74:1::0;12145:9:0;::::1;;::::0;:18:::1;::::0;133::1;;12145:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;12141:49:::0;12204:9:::1;;;;;;;;;-1:-1:-1::0;;;;;12204:9:0::1;-1:-1:-1::0;;;;;12204:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;12204:27:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;;;12200:408;;12585:11;::::0;-1:-1:-1;;;12585:11:0;;27542:2:1;12585:11:0::1;::::0;::::1;27524:21:1::0;27581:1;27561:18;;;27554:29;27619:3;27599:18;;;27592:31;27640:18;;12585:11:0::1;27340:324:1::0;12200:408:0::1;12354:16:::0;;::::1;::::0;:5:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;12385:20:0;;::::1;::::0;:7:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;12420:14:0::1;:35:::0;;;12470:9:::1;:24:::0;;-1:-1:-1;;12470:24:0::1;;::::0;::::1;::::0;;::::1;::::0;;;12537:13:::1;::::0;::::1;:::i;:::-;12519:14;;:32;;;;:::i;:::-;12509:7;:42:::0;-1:-1:-1;;12622:9:0::1;::::0;:33:::1;::::0;;;;12649:4:::1;12622:33;::::0;::::1;160:74:1::0;-1:-1:-1;;;;;12622:9:0;;::::1;::::0;-1:-1:-1;12622:18:0::1;::::0;-1:-1:-1;133:18:1;;12622:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;12618:49:::0;12697:9:::1;;;;;;;;;-1:-1:-1::0;;;;;12697:9:0::1;-1:-1:-1::0;;;;;12697:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12686:42:0::1;;12729:9;;;;;;;;;-1:-1:-1::0;;;;;12729:9:0::1;-1:-1:-1::0;;;;;12729:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12686:75;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;13913:15:1;;;12686:75:0::1;::::0;::::1;13895:34:1::0;12755:4:0::1;13945:18:1::0;;;13938:43;13807:18;;12686:75:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12677:6;:84:::0;;-1:-1:-1;;12677:84:0::1;-1:-1:-1::0;;;;;12677:84:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;12772:15:0;;;:7:::1;:15;::::0;;;;;;;:22;;-1:-1:-1;;12772:22:0;;::::1;-1:-1:-1::0;12772:22:0;;::::1;::::0;;;14802:6;;;;12805:33;;:24:::1;:33:::0;;;;;;:40;;;::::1;::::0;::::1;::::0;;12881:6;;;;::::1;12856:32:::0;;;;;:39;;;::::1;::::0;::::1;::::0;;12939:4:::1;12906:39:::0;;;;;:46;;;::::1;::::0;::::1;::::0;;12963:30;:37;;;::::1;::::0;::::1;::::0;;13011:30;;;:37;;;;::::1;;::::0;;13076:7:::1;::::0;13091:5:::1;::::0;13076:11:::1;::::0;13086:1:::1;13076:11;:::i;:::-;13075:21;;;;:::i;:::-;13059:13;:37:::0;13121:7:::1;::::0;13137:5:::1;::::0;13121:12:::1;::::0;13131:2:::1;13121:12;:::i;:::-;13120:22;;;;:::i;:::-;13107:10;:35:::0;13169:7:::1;::::0;13184:4:::1;::::0;13169:11:::1;::::0;13179:1:::1;13169:11;:::i;:::-;13168:20;;;;:::i;:::-;13153:12;:35:::0;13217:7:::1;::::0;13233:4:::1;::::0;13217:12:::1;::::0;13227:2:::1;13217:12;:::i;:::-;13216:21;;;;:::i;:::-;13199:14;:38:::0;13248:19:::1;:26:::0;;;::::1;::::0;::::1;::::0;;13306:7:::1;::::0;13270:4:::1;13248:26:::0;13295:7:::1;14775::::0;14802:6;-1:-1:-1;;;;;14802:6:0;;14737:79;13295:7:::1;-1:-1:-1::0;;;;;13287:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;13287:16:0;:26;13350:7:::1;14775::::0;14802:6;-1:-1:-1;;;;;14802:6:0;;14737:79;13350:7:::1;-1:-1:-1::0;;;;;13329:38:0::1;13346:1;-1:-1:-1::0;;;;;13329:38:0::1;;13359:7;;13329:38;;;;391:25:1::0;;379:2;364:18;;245:177;13329:38:0::1;;;;;;;;13409:9;::::0;13380:59:::1;::::0;13389:10:::1;::::0;-1:-1:-1;;;;;13409:9:0::1;-1:-1:-1::0;;13380:8:0::1;:59::i;:::-;13482:9;::::0;13450:62:::1;::::0;13467:4:::1;::::0;-1:-1:-1;;;;;13482:9:0::1;-1:-1:-1::0;;13450:8:0::1;:62::i;:::-;13529:9;13525:274;13548:8;:15;13544:1;:19;13525:274;;;13618:9;::::0;13584:14:::1;::::0;13614:13:::1;::::0;13618:9:::1;;13614:2;:13;:::i;:::-;13601:7;13609:1;13601:10;;;;;;;;:::i;:::-;;;;;;;:26;;;;:::i;:::-;13584:43;;13642:15;13660:8;13669:1;13660:11;;;;;;;;:::i;:::-;;;;;;;13642:29;;13686:39;13701:6;::::0;::::1;;;;;;-1:-1:-1::0;;;;;13701:6:0::1;13709:7;13718:6;13686:14;:39::i;:::-;-1:-1:-1::0;13744:9:0::1;::::0;:32:::1;::::0;;;;-1:-1:-1;;;;;23393:55:1;;;13744:32:0::1;::::0;::::1;23375:74:1::0;23465:18;;;23458:34;;;13744:9:0;;::::1;::::0;:15:::1;::::0;23348:18:1;;13744:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;13740:48:::0;13569:230:::1;;13565:3;;;;;:::i;:::-;;;;13525:274;;;-1:-1:-1::0;13826:6:0::1;::::0;;-1:-1:-1;;;;;13826:6:0::1;13849:15:::0;;;13826:6;13849:15:::1;::::0;;;;;;13811:54:::1;::::0;13826:6;13842:4:::1;::::0;13811:14:::1;:54::i;:::-;-1:-1:-1::0;13878:9:0::1;::::0;-1:-1:-1;;;;;13878:9:0::1;:25;13911:21;13956:4;13976:24;13956:4:::0;-1:-1:-1;;;;;16709:16:0;16691:7;16709:16;;;:7;:16;;;;;;;16625:103;13976:24:::1;14015:1;14058::::0;14101:7:::1;14775::::0;14802:6;-1:-1:-1;;;;;14802:6:0;;14737:79;14101:7:::1;13878:271;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;28839:15:1;;;13878:271:0::1;::::0;::::1;28821:34:1::0;28871:18;;;28864:34;;;;28914:18;;;28907:34;;;;28957:18;;;28950:34;29021:15;;;29000:19;;;28993:44;14123:15:0::1;29053:19:1::0;;;29046:35;28732:19;;13878:271:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;14162:15;:13;:15::i;19043:120::-:0;10760:6;;-1:-1:-1;;;;;10760:6:0;10770:10;10760:20;10752:65;;;;-1:-1:-1;;;10752:65:0;;14194:2:1;10752:65:0;;;14176:21:1;;;14213:18;;;14206:30;14272:34;14252:18;;;14245:62;14324:18;;10752:65:0;13992:356:1;10752:65:0;19119:9:::1;::::0;:36:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;19119:36:0::1;::::0;::::1;160:74:1::0;19119:9:0;;;::::1;::::0;;::::1;::::0;:27:::1;::::0;133:18:1;;19119:36:0::1;14:226:1::0;21777:131:0;10760:6;;-1:-1:-1;;;;;10760:6:0;10770:10;10760:20;10752:65;;;;-1:-1:-1;;;10752:65:0;;14194:2:1;10752:65:0;;;14176:21:1;;;14213:18;;;14206:30;14272:34;14252:18;;;14245:62;14324:18;;10752:65:0;13992:356:1;10752:65:0;21864:6:::1;21858:3;:12;21850:21;;;::::0;::::1;;21882:12;:18:::0;21777:131::o;20733:204::-;10760:6;;-1:-1:-1;;;;;10760:6:0;10770:10;10760:20;10752:65;;;;-1:-1:-1;;;10752:65:0;;14194:2:1;10752:65:0;;;14176:21:1;;;14213:18;;;14206:30;14272:34;14252:18;;;14245:62;14324:18;;10752:65:0;13992:356:1;10752:65:0;20836:11:::1;:42:::0;;-1:-1:-1;;;;;20836:42:0;;::::1;-1:-1:-1::0;;20836:42:0;;::::1;;::::0;;;20889:20;:40;;;;;::::1;::::0;::::1;;::::0;;20733:204::o;25813:169::-;10760:6;;-1:-1:-1;;;;;10760:6:0;10770:10;10760:20;10752:65;;;;-1:-1:-1;;;10752:65:0;;14194:2:1;10752:65:0;;;14176:21:1;;;14213:18;;;14206:30;14272:34;14252:18;;;14245:62;14324:18;;10752:65:0;13992:356:1;10752:65:0;25903:8:::1;25895:4;:16;;25887:52;;;::::0;-1:-1:-1;;;25887:52:0;;29605:2:1;25887:52:0::1;::::0;::::1;29587:21:1::0;29644:2;29624:18;;;29617:30;29683:25;29663:18;;;29656:53;29726:18;;25887:52:0::1;29403:347:1::0;25887:52:0::1;25950:17;:24:::0;25813:169::o;20945:193::-;10760:6;;-1:-1:-1;;;;;10760:6:0;10770:10;10760:20;10752:65;;;;-1:-1:-1;;;10752:65:0;;14194:2:1;10752:65:0;;;14176:21:1;;;14213:18;;;14206:30;14272:34;14252:18;;;14245:62;14324:18;;10752:65:0;13992:356:1;10752:65:0;21051:19:::1;:30:::0;;-1:-1:-1;;21051:30:0::1;;::::0;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;;21092:14:::1;:38:::0;;-1:-1:-1;;21092:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20945:193::o;33622:482::-;33777:8;:15;33758:8;:15;:34;:72;;;;;33815:8;:15;33796:8;:15;:34;33758:72;33750:106;;;;-1:-1:-1;;;33750:106:0;;19311:2:1;33750:106:0;;;19293:21:1;19350:2;19330:18;;;19323:30;19389:23;19369:18;;;19362:51;19430:18;;33750:106:0;19109:345:1;33750:106:0;33872:7;33867:230;33889:8;:15;33885:1;:19;;;33867:230;;;33985:8;33994:1;33985:11;;;;;;;;;;:::i;:::-;;;;;;;33970:8;33979:1;33970:11;;;;;;;;;;:::i;:::-;;;;;;;33960:7;;:21;;;;:::i;:::-;33959:37;;;;:::i;:::-;33944:10;16691:7;16709:16;;;:7;:16;;;;;;33934:62;;33926:71;;;;;;34012:73;34022:10;34034:8;34043:1;34034:11;;;;;;;;;;:::i;:::-;;;;;;;34073:8;34082:1;34073:11;;;;;;;;;;:::i;:::-;;;;;;;34058:8;34067:1;34058:11;;;;;;;;;;:::i;:::-;;;;;;;34048:7;;:21;;;;:::i;:::-;34047:37;;;;:::i;34012:73::-;-1:-1:-1;33906:3:0;;;;:::i;:::-;;;;33867:230;;22789:542;10760:6;;-1:-1:-1;;;;;10760:6:0;10770:10;10760:20;10752:65;;;;-1:-1:-1;;;10752:65:0;;14194:2:1;10752:65:0;;;14176:21:1;;;14213:18;;;14206:30;14272:34;14252:18;;;14245:62;14324:18;;10752:65:0;13992:356:1;10752:65:0;22860:20:::1;22893:9;22860:43;;22914:16;22944:10;-1:-1:-1::0;;;;;22944:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22933:40:0::1;;22982:4;22989:10;-1:-1:-1::0;;;;;22989:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22933:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;13913:15:1;;;22933:74:0::1;::::0;::::1;13895:34:1::0;13965:15;;13945:18;;;13938:43;13807:18;;22933:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22914:93:::0;-1:-1:-1;;;;;;23022:22:0;::::1;23018:200;;23081:10;-1:-1:-1::0;;;;;23081:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23070:43:0::1;;23122:4;23129:10;-1:-1:-1::0;;;;;23129:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23070:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;13913:15:1;;;23070:77:0::1;::::0;::::1;13895:34:1::0;13965:15;;13945:18;;;13938:43;13807:18;;23070:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23061:6;:86:::0;;-1:-1:-1;;23061:86:0::1;-1:-1:-1::0;;;;;23061:86:0;;;::::1;::::0;;;::::1;::::0;;23018:200:::1;;;23189:6;:17:::0;;-1:-1:-1;;23189:17:0::1;-1:-1:-1::0;;;;;23189:17:0;::::1;;::::0;;23018:200:::1;23228:9;:22:::0;;-1:-1:-1;;23228:22:0::1;-1:-1:-1::0;;;;;23228:22:0;::::1;::::0;;::::1;::::0;;;23261:62:::1;::::0;23278:4:::1;::::0;-1:-1:-1;;23261:8:0::1;:62::i;18103:193::-:0;10760:6;;-1:-1:-1;;;;;10760:6:0;10770:10;10760:20;10752:65;;;;-1:-1:-1;;;10752:65:0;;14194:2:1;10752:65:0;;;14176:21:1;;;14213:18;;;14206:30;14272:34;14252:18;;;14245:62;14324:18;;10752:65:0;13992:356:1;10752:65:0;18193:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;23991:55:1;;;18193:47:0::1;::::0;::::1;23973:74:1::0;24090:14;;24083:22;24063:18;;;24056:50;18193:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;23946:18:1;;18193:47:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18251:37;18271:7;18280;18251:19;:37::i;22024:118::-:0;22103:9;;:31;;;;;;;;22076:7;;-1:-1:-1;;;;;22103:9:0;;:29;;:31;;;;;;;;;;;;;;:9;:31;;;;;;;;;;;;;;18484:125;18569:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;18569:32:0;;;160:74:1;18545:4:0;;18569:9;;;;;:23;;133:18:1;;18569:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26522:1302::-;26601:4;-1:-1:-1;;;;;26626:18:0;;26618:68;;;;-1:-1:-1;;;26618:68:0;;30207:2:1;26618:68:0;;;30189:21:1;30246:2;30226:18;;;30219:30;30285:34;30265:18;;;30258:62;30356:7;30336:18;;;30329:35;30381:19;;26618:68:0;30005:401:1;26618:68:0;-1:-1:-1;;;;;26705:16:0;;26697:64;;;;-1:-1:-1;;;26697:64:0;;30613:2:1;26697:64:0;;;30595:21:1;30652:2;30632:18;;;30625:30;30691:34;30671:18;;;30664:62;30762:5;30742:18;;;30735:33;30785:19;;26697:64:0;30411:399:1;26697:64:0;26789:1;26780:6;:10;26772:64;;;;-1:-1:-1;;;26772:64:0;;31017:2:1;26772:64:0;;;30999:21:1;31056:2;31036:18;;;31029:30;31095:34;31075:18;;;31068:62;31166:11;31146:18;;;31139:39;31195:19;;26772:64:0;30815:405:1;26772:64:0;26850:20;26861:4;26867:2;26850:10;:20::i;:::-;26847:665;;;26891:14;;;;;;;26887:89;;26926:34;;-1:-1:-1;;;26926:34:0;;31427:2:1;26926:34:0;;;31409:21:1;31466:2;31446:18;;;31439:30;31505:26;31485:18;;;31478:54;31549:18;;26926:34:0;31225:348:1;26887:89:0;-1:-1:-1;;;;;26993:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;27010:11:0;;;;;;:7;:11;;;;;;;;26993:28;26990:248;;;-1:-1:-1;;;;;27046:27:0;;;;;;:21;:27;;;;;;;;27045:28;:58;;;;-1:-1:-1;;;;;;27078:25:0;;;;;;:21;:25;;;;;;;;27077:26;27045:58;27041:182;;;27146:12;;27136:6;:22;;27128:75;;;;-1:-1:-1;;;27128:75:0;;31780:2:1;27128:75:0;;;31762:21:1;31819:2;31799:18;;;31792:30;31858:34;31838:18;;;31831:62;31929:10;31909:18;;;31902:38;31957:19;;27128:75:0;31578:404:1;27128:75:0;27269:9;;-1:-1:-1;;;;;27255:24:0;;;27269:9;;27255:24;;;;:40;;-1:-1:-1;;;;;;27284:11:0;;;;;;:7;:11;;;;;;;;27283:12;27255:40;27252:249;;;-1:-1:-1;;;;;27321:25:0;;;;;;:21;:25;;;;;;;;27316:170;;27405:14;;27395:6;27379:13;27389:2;-1:-1:-1;;;;;16709:16:0;16691:7;16709:16;;;:7;:16;;;;;;;16625:103;27379:13;:22;;;;:::i;:::-;:40;;27371:95;;;;-1:-1:-1;;;27371:95:0;;32322:2:1;27371:95:0;;;32304:21:1;32361:2;32341:18;;;32334:30;32400:34;32380:18;;;32373:62;32471:12;32451:18;;;32444:40;32501:19;;27371:95:0;32120:406:1;27371:95:0;-1:-1:-1;;;;;27528:11:0;;;;;;:7;:11;;;;;;27524:79;;-1:-1:-1;;;;;27561:12:0;;;;;;:8;:12;;;;;27576:15;27561:30;;27524:79;-1:-1:-1;;;;;27658:25:0;;27615:12;27658:25;;;:19;:25;;;;;;27630:4;;27658:25;;;:52;;-1:-1:-1;;;;;;27687:23:0;;;;;;:19;:23;;;;;;;;27658:52;27655:98;;;-1:-1:-1;27736:5:0;27655:98;27772:44;27790:4;27796:2;27800:6;27808:7;27772:17;:44::i;:::-;27765:51;26522:1302;-1:-1:-1;;;;;26522:1302:0:o;17099:341::-;-1:-1:-1;;;;;17193:20:0;;17185:69;;;;-1:-1:-1;;;17185:69:0;;32733:2:1;17185:69:0;;;32715:21:1;32772:2;32752:18;;;32745:30;32811:34;32791:18;;;32784:62;32882:6;32862:18;;;32855:34;32906:19;;17185:69:0;32531:400:1;17185:69:0;-1:-1:-1;;;;;17273:21:0;;17265:68;;;;-1:-1:-1;;;17265:68:0;;33138:2:1;17265:68:0;;;33120:21:1;33177:2;33157:18;;;33150:30;33216:34;33196:18;;;33189:62;33287:4;33267:18;;;33260:32;33309:19;;17265:68:0;32936:398:1;17265:68:0;-1:-1:-1;;;;;17346:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;17399:33;;391:25:1;;;17399:33:0;;364:18:1;17399:33:0;;;;;;;17099:341;;;:::o;30001:228::-;-1:-1:-1;;;;;30102:13:0;;30085:4;30102:13;;;:7;:13;;;;;:23;;30119:6;;30102:13;30085:4;;30102:23;;30119:6;;30102:23;:::i;:::-;;;;-1:-1:-1;;;;;;;30136:11:0;;;;;;:7;:11;;;;;:21;;30151:6;;30136:11;:21;;30151:6;;30136:21;:::i;:::-;;;;;;;;30188:2;-1:-1:-1;;;;;30173:26:0;30182:4;-1:-1:-1;;;;;30173:26:0;;30192:6;30173:26;;;;391:25:1;;379:2;364:18;;245:177;30173:26:0;;;;;;;;-1:-1:-1;30217:4:0;30001:228;;;;;:::o;26154:360::-;26222:4;14802:6;;-1:-1:-1;;;;;26246:15:0;;;14802:6;;26246:15;;;;:45;;-1:-1:-1;14775:7:0;14802:6;-1:-1:-1;;;;;26278:13:0;;;14802:6;;26278:13;;26246:45;:82;;;;-1:-1:-1;14775:7:0;14802:6;-1:-1:-1;;;;;14802:6:0;26308:9;:20;;26246:82;:121;;;;-1:-1:-1;;;;;;26346:21:0;;;;;;:17;:21;;;;;;;;26345:22;26246:121;:162;;;;-1:-1:-1;;;;;;26385:23:0;;;;;;:17;:23;;;;;;;;26384:24;26246:162;:189;;;;-1:-1:-1;;;;;;26425:10:0;;9538:42;26425:10;;26246:189;:222;;;;-1:-1:-1;;;;;;26452:16:0;;;;26246:222;:260;;;;-1:-1:-1;;;;;;;;26485:21:0;26501:4;26485:21;;;26154:360::o;27832:1734::-;27955:16;;27933:4;;27955:16;;;;;27950:221;;27988:28;28007:4;28013:2;27988:18;:28::i;:::-;28036:16;;;;;;;28035:17;:41;;;;;28056:20;28067:4;28073:2;28056:10;:20::i;:::-;28031:129;;;28097:47;;-1:-1:-1;;;28097:47:0;;33541:2:1;28097:47:0;;;33523:21:1;33580:2;33560:18;;;33553:30;33619:34;33599:18;;;33592:62;33690:7;33670:18;;;33663:35;33715:19;;28097:47:0;33339:401:1;28031:129:0;28186:20;28197:4;28203:2;28186:10;:20::i;:::-;28183:313;;;28254:9;;:37;;;;;-1:-1:-1;;;;;34026:15:1;;;28254:37:0;;;34008:34:1;34078:15;;;34058:18;;;34051:43;34110:18;;;34103:34;;;28223:12:0;;28254:9;;;;;:19;;33920:18:1;;28254:37:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;28254:37:0;;;;;;;;-1:-1:-1;;28254:37:0;;;;;;;;;;;;:::i;:::-;;;28250:163;;28389:8;;;28250:163;28342:5;-1:-1:-1;28433:7:0;28429:56;;28461:8;;;28429:56;28208:288;28183:313;28512:6;;;;28508:134;;;28542:32;28557:4;28563:2;28567:6;28542:14;:32::i;:::-;28535:39;;;;28508:134;-1:-1:-1;;;;;28607:13:0;;;;;;:7;:13;;;;;:23;;28624:6;;28607:13;:23;;28624:6;;28607:23;:::i;:::-;;;;-1:-1:-1;;;;;;;28658:11:0;;;;;;:7;:11;;;;;;;;28654:606;;;28691:6;;;;28690:7;:47;;;;-1:-1:-1;28718:19:0;;;;;;;28690:47;28686:557;;;28807:15;28787:17;;28776:8;;:28;;;;:::i;:::-;:46;28772:456;;;28896:4;28847:28;16709:16;;;:7;:16;;;;;;28953:13;;28929:37;;28925:284;;29022:10;;28998:20;:34;28995:77;;-1:-1:-1;29059:10:0;;28995:77;29098:34;29111:20;29098:12;:34::i;:::-;29170:15;29159:8;:26;28925:284;28824:404;28772:456;29298:6;29317:84;;;;29362:27;29372:4;29378:2;29382:6;29362:9;:27::i;:::-;29345:44;;29317:84;-1:-1:-1;;;;;29413:11:0;;;;;;:7;:11;;;;;:29;;29428:14;;29413:11;:29;;29428:14;;29413:29;:::i;:::-;;;;-1:-1:-1;29455:29:0;;-1:-1:-1;29475:4:0;29481:2;29455:19;:29::i;:::-;29517:2;-1:-1:-1;;;;;29502:34:0;29511:4;-1:-1:-1;;;;;29502:34:0;;29521:14;29502:34;;;;391:25:1;;379:2;364:18;;245:177;29502:34:0;;;;;;;;29554:4;29547:11;;;27832:1734;;;;;;;:::o;32551:682::-;32633:16;;;;;;;32632:17;32624:65;;;;-1:-1:-1;;;32624:65:0;;34350:2:1;32624:65:0;;;34332:21:1;34389:2;34369:18;;;34362:30;34428:34;34408:18;;;34401:62;34499:5;34479:18;;;34472:33;34522:19;;32624:65:0;34148:399:1;32624:65:0;32705:20;32716:4;32722:2;32705:10;:20::i;:::-;32704:21;:37;;;;-1:-1:-1;32735:6:0;;-1:-1:-1;;;;;32729:12:0;;;32735:6;;32729:12;32704:37;32700:526;;;-1:-1:-1;;;;;32758:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;32758:30:0;32784:4;32758:30;;;32803:16;:23;;;;;;;;;;32852:9;;;;32841:108;;32897:9;:36;;;;32927:4;32897:36;;;;;32841:108;32974:9;;-1:-1:-1;;;;;32974:9:0;32963:107;;33020:9;:34;;-1:-1:-1;;33020:34:0;33048:4;33020:34;;;32963:107;33088:9;;;;;;;;;-1:-1:-1;;;;;33088:9:0;-1:-1:-1;;;;;33088:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33136:19:0;:26;;-1:-1:-1;;33136:26:0;;;;;33182:32;;-1:-1:-1;4801:41:1;;33182:32:0;;4789:2:1;4774:18;33182:32:0;;;;;;;32551:682;;:::o;31071:1340::-;10654:6;:13;;-1:-1:-1;;10654:13:0;10663:4;10654:13;;;31152:30:::1;::::0;;::::1;::::0;::::1;::::0;;31175:7:::1;31152:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;;::::1;::::0;;;;;;31193:56:::1;;31231:7;;;31193:56;31292:4;31272:26;::::0;;;:11:::1;:26;::::0;;;;;;;31307:9:::1;::::0;-1:-1:-1;;;;;31307:9:0::1;31272:46:::0;;;;;;;;-1:-1:-1;;31272:67:0::1;31269:165;;31376:4;31356:26;::::0;;;:11:::1;:26;::::0;;;;;;;31391:9:::1;::::0;-1:-1:-1;;;;;31391:9:0::1;31356:46:::0;;;;;;;-1:-1:-1;;31356:66:0;;31269:165:::1;31470:16;::::0;;31484:1:::1;31470:16:::0;;;;;::::1;::::0;;31446:21:::1;::::0;31470:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;31470:16:0::1;31446:40;;31515:4;31497;31502:1;31497:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;31497:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;31541:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;31497:7;;31541:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31531:4;31536:1;31531:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;31531:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;31570:9:::1;::::0;:199:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:199:::1;::::0;31645:20;;31570:9:::1;::::0;31696:4;;31723::::1;::::0;31743:15:::1;::::0;31570:199:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;31892:12:0::1;::::0;::::1;::::0;31874:14;;31803:21:::1;::::0;-1:-1:-1;31782:18:0::1;::::0;31860:44:::1;::::0;;::::1;::::0;31861:27:::1;::::0;::::1;31803:21:::0;31861:27:::1;:::i;:::-;31860:44;;;;:::i;:::-;31835:69;;31915:23;31974:6;:12;;;31941:45;;31955:6;:15;;;31942:28;;:10;:28;;;;:::i;:::-;31941:45;;;;:::i;:::-;31915:71:::0;-1:-1:-1;31997:24:0::1;32038:32;31915:71:::0;32038:14;:32:::1;:::i;:::-;32024:47;::::0;:10;:47:::1;:::i;:::-;32088:14:::0;;31997:74;;-1:-1:-1;32088:18:0::1;;::::0;32084:105:::1;;32127:9;;;;;;;;;-1:-1:-1::0;;;;;32127:9:0::1;-1:-1:-1::0;;;;;32127:14:0::1;;32149;32127:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;32123:55:::0;::::1;32202:15;::::0;::::1;::::0;:19:::1;;::::0;32199:96:::1;;32237:20:::0;;:46:::1;::::0;-1:-1:-1;;;;;32237:20:0;;::::1;::::0;:46;::::1;;;::::0;32267:15;;32237:20:::1;:46:::0;:20;:46;32267:15;32237:20;:46;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;32199:96;32308:16;::::0;::::1;::::0;:20:::1;;::::0;32305:99:::1;;32344:11;:21:::0;:48:::1;::::0;-1:-1:-1;;;;;32344:21:0;;::::1;::::0;:48;::::1;;;::::0;32375:16;;32344:21:::1;:48:::0;:21;:48;32375:16;32344:21;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;32305:99;31141:1270;;;;;;10678:1;-1:-1:-1::0;10690:6:0;:14;;-1:-1:-1;;10690:14:0;;;31071:1340::o;30237:826::-;-1:-1:-1;;;;;30369:13:0;;30316:7;30369:13;;;:7;:13;;;;;;30316:7;;30369:13;;30365:405;;;-1:-1:-1;30412:9:0;:16;;;30365:405;;;-1:-1:-1;;;;;30450:11:0;;;;;;:7;:11;;;;;;;;30446:324;;;30482:15;;;;;;;:71;;;;-1:-1:-1;30518:17:0;;-1:-1:-1;;;;;30501:14:0;;;;;;:8;:14;;;;;;30538:15;;30501:34;;;:::i;:::-;:52;30482:71;30478:214;;;-1:-1:-1;30587:9:0;:18;;;;;;30446:324;;30478:214;-1:-1:-1;30659:9:0;:17;;;;;;30446:324;;;-1:-1:-1;30737:9:0;:21;;;;;;30446:324;30786:15;30782:61;;30825:6;30818:13;;;;;30782:61;30855:17;9430:5;30875:19;30884:10;30875:6;:19;:::i;:::-;:38;;;;:::i;:::-;30942:4;30926:22;;;;:7;:22;;;;;:35;;30855:58;;-1:-1:-1;30855:58:0;;30926:22;;;:35;;30855:58;;30926:35;:::i;:::-;;;;-1:-1:-1;;30977:40:0;;391:25:1;;;31000:4:0;;-1:-1:-1;;;;;30977:40:0;;;;;379:2:1;364:18;30977:40:0;;;;;;;31037:18;31046:9;31037:6;:18;:::i;:::-;31030:25;30237:826;-1:-1:-1;;;;;;30237:826:0:o;29574:419::-;-1:-1:-1;;;;;29654:30:0;;;;;;:24;:30;;;;;;;;29649:115;;29705:9;;-1:-1:-1;;;;;29727:13:0;;;29705:9;29727:13;;;29705:9;29727:13;;;;;;;;29705:36;;;;;;;;23375:74:1;;;;23465:18;;;23458:34;29705:9:0;;;:15;;23348:18:1;;29705:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29701:52;;-1:-1:-1;;;;;29779:28:0;;;;;;:24;:28;;;;;;;;29774:109;;29828:9;;-1:-1:-1;;;;;29848:11:0;;;29828:9;29848:11;;;29828:9;29848:11;;;;;;;;29828:32;;;;;;;;23375:74:1;;;;23465:18;;;23458:34;29828:9:0;;;:15;;23348:18:1;;29828:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29824:48;;29897:14;;;;29893:93;;;29932:9;;29950:12;;29932:31;;;;;-1:-1:-1;;;;;29932:9:0;;;;:17;;:31;;;;391:25:1;;;379:2;364:18;;245:177;29932:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29928:47;;24415:349;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;427:184:1;479:77;476:1;469:88;576:4;573:1;566:15;600:4;597:1;590:15;616:334;687:2;681:9;743:2;733:13;;-1:-1:-1;;729:86:1;717:99;;846:18;831:34;;867:22;;;828:62;825:88;;;893:18;;:::i;:::-;929:2;922:22;616:334;;-1:-1:-1;616:334:1:o;955:183::-;1015:4;1048:18;1040:6;1037:30;1034:56;;;1070:18;;:::i;:::-;-1:-1:-1;1115:1:1;1111:14;1127:4;1107:25;;955:183::o;1143:154::-;-1:-1:-1;;;;;1222:5:1;1218:54;1211:5;1208:65;1198:93;;1287:1;1284;1277:12;1302:737;1356:5;1409:3;1402:4;1394:6;1390:17;1386:27;1376:55;;1427:1;1424;1417:12;1376:55;1463:6;1450:20;1489:4;1513:60;1529:43;1569:2;1529:43;:::i;:::-;1513:60;:::i;:::-;1607:15;;;1693:1;1689:10;;;;1677:23;;1673:32;;;1638:12;;;;1717:15;;;1714:35;;;1745:1;1742;1735:12;1714:35;1781:2;1773:6;1769:15;1793:217;1809:6;1804:3;1801:15;1793:217;;;1889:3;1876:17;1906:31;1931:5;1906:31;:::i;:::-;1950:18;;1988:12;;;;1826;;1793:217;;;-1:-1:-1;2028:5:1;1302:737;-1:-1:-1;;;;;;1302:737:1:o;2044:118::-;2130:5;2123:13;2116:21;2109:5;2106:32;2096:60;;2152:1;2149;2142:12;2167:477;2257:6;2265;2318:2;2306:9;2297:7;2293:23;2289:32;2286:52;;;2334:1;2331;2324:12;2286:52;2374:9;2361:23;2407:18;2399:6;2396:30;2393:50;;;2439:1;2436;2429:12;2393:50;2462:61;2515:7;2506:6;2495:9;2491:22;2462:61;:::i;:::-;2452:71;;;2573:2;2562:9;2558:18;2545:32;2586:28;2608:5;2586:28;:::i;:::-;2633:5;2623:15;;;2167:477;;;;;:::o;3098:258::-;3170:1;3180:113;3194:6;3191:1;3188:13;3180:113;;;3270:11;;;3264:18;3251:11;;;3244:39;3216:2;3209:10;3180:113;;;3311:6;3308:1;3305:13;3302:48;;;-1:-1:-1;;3346:1:1;3328:16;;3321:27;3098:258::o;3361:317::-;3403:3;3441:5;3435:12;3468:6;3463:3;3456:19;3484:63;3540:6;3533:4;3528:3;3524:14;3517:4;3510:5;3506:16;3484:63;:::i;:::-;3592:2;3580:15;-1:-1:-1;;3576:88:1;3567:98;;;;3667:4;3563:109;;3361:317;-1:-1:-1;;3361:317:1:o;3683:220::-;3832:2;3821:9;3814:21;3795:4;3852:45;3893:2;3882:9;3878:18;3870:6;3852:45;:::i;4156:180::-;4215:6;4268:2;4256:9;4247:7;4243:23;4239:32;4236:52;;;4284:1;4281;4274:12;4236:52;-1:-1:-1;4307:23:1;;4156:180;-1:-1:-1;4156:180:1:o;4341:315::-;4409:6;4417;4470:2;4458:9;4449:7;4445:23;4441:32;4438:52;;;4486:1;4483;4476:12;4438:52;4525:9;4512:23;4544:31;4569:5;4544:31;:::i;:::-;4594:5;4646:2;4631:18;;;;4618:32;;-1:-1:-1;;;4341:315:1:o;4853:316::-;4930:6;4938;4946;4999:2;4987:9;4978:7;4974:23;4970:32;4967:52;;;5015:1;5012;5005:12;4967:52;-1:-1:-1;;5038:23:1;;;5108:2;5093:18;;5080:32;;-1:-1:-1;5159:2:1;5144:18;;;5131:32;;4853:316;-1:-1:-1;4853:316:1:o;5174:388::-;5242:6;5250;5303:2;5291:9;5282:7;5278:23;5274:32;5271:52;;;5319:1;5316;5309:12;5271:52;5358:9;5345:23;5377:31;5402:5;5377:31;:::i;:::-;5427:5;-1:-1:-1;5484:2:1;5469:18;;5456:32;5497:33;5456:32;5497:33;:::i;5567:456::-;5644:6;5652;5660;5713:2;5701:9;5692:7;5688:23;5684:32;5681:52;;;5729:1;5726;5719:12;5681:52;5768:9;5755:23;5787:31;5812:5;5787:31;:::i;:::-;5837:5;-1:-1:-1;5894:2:1;5879:18;;5866:32;5907:33;5866:32;5907:33;:::i;:::-;5567:456;;5959:7;;-1:-1:-1;;;6013:2:1;5998:18;;;;5985:32;;5567:456::o;6028:247::-;6087:6;6140:2;6128:9;6119:7;6115:23;6111:32;6108:52;;;6156:1;6153;6146:12;6108:52;6195:9;6182:23;6214:31;6239:5;6214:31;:::i;6280:248::-;6348:6;6356;6409:2;6397:9;6388:7;6384:23;6380:32;6377:52;;;6425:1;6422;6415:12;6377:52;-1:-1:-1;;6448:23:1;;;6518:2;6503:18;;;6490:32;;-1:-1:-1;6280:248:1:o;6533:662::-;6587:5;6640:3;6633:4;6625:6;6621:17;6617:27;6607:55;;6658:1;6655;6648:12;6607:55;6694:6;6681:20;6720:4;6744:60;6760:43;6800:2;6760:43;:::i;6744:60::-;6838:15;;;6924:1;6920:10;;;;6908:23;;6904:32;;;6869:12;;;;6948:15;;;6945:35;;;6976:1;6973;6966:12;6945:35;7012:2;7004:6;7000:15;7024:142;7040:6;7035:3;7032:15;7024:142;;;7106:17;;7094:30;;7144:12;;;;7057;;7024:142;;7200:595;7318:6;7326;7379:2;7367:9;7358:7;7354:23;7350:32;7347:52;;;7395:1;7392;7385:12;7347:52;7435:9;7422:23;7464:18;7505:2;7497:6;7494:14;7491:34;;;7521:1;7518;7511:12;7491:34;7544:61;7597:7;7588:6;7577:9;7573:22;7544:61;:::i;:::-;7534:71;;7658:2;7647:9;7643:18;7630:32;7614:48;;7687:2;7677:8;7674:16;7671:36;;;7703:1;7700;7693:12;7671:36;;7726:63;7781:7;7770:8;7759:9;7755:24;7726:63;:::i;:::-;7716:73;;;7200:595;;;;;:::o;7800:647::-;7874:6;7882;7890;7898;7951:3;7939:9;7930:7;7926:23;7922:33;7919:53;;;7968:1;7965;7958:12;7919:53;8007:9;7994:23;8026:28;8048:5;8026:28;:::i;:::-;8073:5;-1:-1:-1;8130:2:1;8115:18;;8102:32;8143:30;8102:32;8143:30;:::i;:::-;8192:7;-1:-1:-1;8251:2:1;8236:18;;8223:32;8264:30;8223:32;8264:30;:::i;:::-;8313:7;-1:-1:-1;8372:2:1;8357:18;;8344:32;8385:30;8344:32;8385:30;:::i;:::-;7800:647;;;;-1:-1:-1;7800:647:1;;-1:-1:-1;;7800:647:1:o;8641:159::-;8708:20;;8768:6;8757:18;;8747:29;;8737:57;;8790:1;8787;8780:12;8737:57;8641:159;;;:::o;8805:328::-;8879:6;8887;8895;8948:2;8936:9;8927:7;8923:23;8919:32;8916:52;;;8964:1;8961;8954:12;8916:52;8987:28;9005:9;8987:28;:::i;:::-;8977:38;;9034:37;9067:2;9056:9;9052:18;9034:37;:::i;:::-;9024:47;;9090:37;9123:2;9112:9;9108:18;9090:37;:::i;:::-;9080:47;;8805:328;;;;;:::o;9138:454::-;9233:6;9241;9249;9257;9265;9318:3;9306:9;9297:7;9293:23;9289:33;9286:53;;;9335:1;9332;9325:12;9286:53;-1:-1:-1;;9358:23:1;;;9428:2;9413:18;;9400:32;;-1:-1:-1;9479:2:1;9464:18;;9451:32;;9530:2;9515:18;;9502:32;;-1:-1:-1;9581:3:1;9566:19;9553:33;;-1:-1:-1;9138:454:1;-1:-1:-1;9138:454:1:o;9597:382::-;9662:6;9670;9723:2;9711:9;9702:7;9698:23;9694:32;9691:52;;;9739:1;9736;9729:12;9691:52;9778:9;9765:23;9797:31;9822:5;9797:31;:::i;:::-;9847:5;-1:-1:-1;9904:2:1;9889:18;;9876:32;9917:30;9876:32;9917:30;:::i;9984:184::-;10042:6;10095:2;10083:9;10074:7;10070:23;10066:32;10063:52;;;10111:1;10108;10101:12;10063:52;10134:28;10152:9;10134:28;:::i;10173:241::-;10229:6;10282:2;10270:9;10261:7;10257:23;10253:32;10250:52;;;10298:1;10295;10288:12;10250:52;10337:9;10324:23;10356:28;10378:5;10356:28;:::i;10419:711::-;10712:3;10701:9;10694:22;10675:4;10739:46;10780:3;10769:9;10765:19;10757:6;10739:46;:::i;:::-;10833:9;10825:6;10821:22;10816:2;10805:9;10801:18;10794:50;10867:33;10893:6;10885;10867:33;:::i;:::-;10853:47;;10948:9;10940:6;10936:22;10931:2;10920:9;10916:18;10909:50;10982:33;11008:6;11000;10982:33;:::i;:::-;10968:47;;11063:9;11055:6;11051:22;11046:2;11035:9;11031:18;11024:50;11091:33;11117:6;11109;11091:33;:::i;:::-;11083:41;10419:711;-1:-1:-1;;;;;;;10419:711:1:o;11135:872::-;11271:6;11279;11287;11295;11348:3;11336:9;11327:7;11323:23;11319:33;11316:53;;;11365:1;11362;11355:12;11316:53;11405:9;11392:23;11434:18;11475:2;11467:6;11464:14;11461:34;;;11491:1;11488;11481:12;11461:34;11514:61;11567:7;11558:6;11547:9;11543:22;11514:61;:::i;:::-;11504:71;;11628:2;11617:9;11613:18;11600:32;11584:48;;11657:2;11647:8;11644:16;11641:36;;;11673:1;11670;11663:12;11641:36;;11696:63;11751:7;11740:8;11729:9;11725:24;11696:63;:::i;:::-;11686:73;;;11809:2;11798:9;11794:18;11781:32;11822:31;11847:5;11822:31;:::i;:::-;11872:5;-1:-1:-1;11929:2:1;11914:18;;11901:32;11942:33;11901:32;11942:33;:::i;12421:376::-;12483:6;12491;12544:2;12532:9;12523:7;12519:23;12515:32;12512:52;;;12560:1;12557;12550:12;12512:52;12599:9;12586:23;12618:28;12640:5;12618:28;:::i;12802:821::-;12954:6;12962;12970;13023:2;13011:9;13002:7;12998:23;12994:32;12991:52;;;13039:1;13036;13029:12;12991:52;13079:9;13066:23;13108:18;13149:2;13141:6;13138:14;13135:34;;;13165:1;13162;13155:12;13135:34;13188:61;13241:7;13232:6;13221:9;13217:22;13188:61;:::i;:::-;13178:71;;13302:2;13291:9;13287:18;13274:32;13258:48;;13331:2;13321:8;13318:16;13315:36;;;13347:1;13344;13337:12;13315:36;13370:63;13425:7;13414:8;13403:9;13399:24;13370:63;:::i;:::-;13360:73;;13486:2;13475:9;13471:18;13458:32;13442:48;;13515:2;13505:8;13502:16;13499:36;;;13531:1;13528;13521:12;13499:36;;13554:63;13609:7;13598:8;13587:9;13583:24;13554:63;:::i;:::-;13544:73;;;12802:821;;;;;:::o;14353:484::-;14406:3;14444:5;14438:12;14471:6;14466:3;14459:19;14497:4;14526:2;14521:3;14517:12;14510:19;;14563:2;14556:5;14552:14;14584:1;14594:218;14608:6;14605:1;14602:13;14594:218;;;14673:13;;-1:-1:-1;;;;;14669:62:1;14657:75;;14752:12;;;;14787:15;;;;14630:1;14623:9;14594:218;;;-1:-1:-1;14828:3:1;;14353:484;-1:-1:-1;;;;;14353:484:1:o;14842:342::-;15043:2;15032:9;15025:21;15006:4;15063:56;15115:2;15104:9;15100:18;15092:6;15063:56;:::i;:::-;15055:64;;15169:6;15162:14;15155:22;15150:2;15139:9;15135:18;15128:50;14842:342;;;;;:::o;15189:437::-;15268:1;15264:12;;;;15311;;;15332:61;;15386:4;15378:6;15374:17;15364:27;;15332:61;15439:2;15431:6;15428:14;15408:18;15405:38;15402:218;;;15476:77;15473:1;15466:88;15577:4;15574:1;15567:15;15605:4;15602:1;15595:15;15402:218;;15189:437;;;:::o;15967:184::-;16019:77;16016:1;16009:88;16116:4;16113:1;16106:15;16140:4;16137:1;16130:15;16156:482;16245:1;16288:5;16245:1;16302:330;16323:7;16313:8;16310:21;16302:330;;;16442:4;-1:-1:-1;;16370:77:1;16364:4;16361:87;16358:113;;;16451:18;;:::i;:::-;16501:7;16491:8;16487:22;16484:55;;;16521:16;;;;16484:55;16600:22;;;;16560:15;;;;16302:330;;;16306:3;16156:482;;;;;:::o;16643:866::-;16692:5;16722:8;16712:80;;-1:-1:-1;16763:1:1;16777:5;;16712:80;16811:4;16801:76;;-1:-1:-1;16848:1:1;16862:5;;16801:76;16893:4;16911:1;16906:59;;;;16979:1;16974:130;;;;16886:218;;16906:59;16936:1;16927:10;;16950:5;;;16974:130;17011:3;17001:8;16998:17;16995:43;;;17018:18;;:::i;:::-;-1:-1:-1;;17074:1:1;17060:16;;17089:5;;16886:218;;17188:2;17178:8;17175:16;17169:3;17163:4;17160:13;17156:36;17150:2;17140:8;17137:16;17132:2;17126:4;17123:12;17119:35;17116:77;17113:159;;;-1:-1:-1;17225:19:1;;;17257:5;;17113:159;17304:34;17329:8;17323:4;17304:34;:::i;:::-;17434:6;-1:-1:-1;;17362:79:1;17353:7;17350:92;17347:118;;;17445:18;;:::i;:::-;17483:20;;16643:866;-1:-1:-1;;;16643:866:1:o;17514:131::-;17574:5;17603:36;17630:8;17624:4;17603:36;:::i;17650:228::-;17690:7;17816:1;-1:-1:-1;;17744:74:1;17741:1;17738:81;17733:1;17726:9;17719:17;17715:105;17712:131;;;17823:18;;:::i;:::-;-1:-1:-1;17863:9:1;;17650:228::o;18136:140::-;18194:5;18223:47;18264:4;18254:8;18250:19;18244:4;18223:47;:::i;18281:274::-;18321:1;18347;18337:189;;18382:77;18379:1;18372:88;18483:4;18480:1;18473:15;18511:4;18508:1;18501:15;18337:189;-1:-1:-1;18540:9:1;;18281:274::o;18560:125::-;18600:4;18628:1;18625;18622:8;18619:34;;;18633:18;;:::i;:::-;-1:-1:-1;18670:9:1;;18560:125::o;19459:184::-;19511:77;19508:1;19501:88;19608:4;19605:1;19598:15;19632:4;19629:1;19622:15;19648:175;19685:3;19729:4;19722:5;19718:16;19758:4;19749:7;19746:17;19743:43;;;19766:18;;:::i;:::-;19815:1;19802:15;;19648:175;-1:-1:-1;;19648:175:1:o;21467:184::-;21537:6;21590:2;21578:9;21569:7;21565:23;21561:32;21558:52;;;21606:1;21603;21596:12;21558:52;-1:-1:-1;21629:16:1;;21467:184;-1:-1:-1;21467:184:1:o;21656:556::-;21710:5;21763:3;21756:4;21748:6;21744:17;21740:27;21730:55;;21781:1;21778;21771:12;21730:55;21810:6;21804:13;21836:18;21832:2;21829:26;21826:52;;;21858:18;;:::i;:::-;21902:114;22010:4;-1:-1:-1;;21934:4:1;21930:2;21926:13;21922:86;21918:97;21902:114;:::i;:::-;22041:2;22032:7;22025:19;22087:3;22080:4;22075:2;22067:6;22063:15;22059:26;22056:35;22053:55;;;22104:1;22101;22094:12;22053:55;22117:64;22178:2;22171:4;22162:7;22158:18;22151:4;22143:6;22139:17;22117:64;:::i;22217:971::-;22354:6;22362;22370;22378;22431:3;22419:9;22410:7;22406:23;22402:33;22399:53;;;22448:1;22445;22438:12;22399:53;22481:9;22475:16;22510:18;22551:2;22543:6;22540:14;22537:34;;;22567:1;22564;22557:12;22537:34;22590:61;22643:7;22634:6;22623:9;22619:22;22590:61;:::i;:::-;22580:71;;22697:2;22686:9;22682:18;22676:25;22660:41;;22726:2;22716:8;22713:16;22710:36;;;22742:1;22739;22732:12;22710:36;22765:63;22820:7;22809:8;22798:9;22794:24;22765:63;:::i;:::-;22755:73;;22874:2;22863:9;22859:18;22853:25;22837:41;;22903:2;22893:8;22890:16;22887:36;;;22919:1;22916;22909:12;22887:36;22942:63;22997:7;22986:8;22975:9;22971:24;22942:63;:::i;:::-;22932:73;;23051:2;23040:9;23036:18;23030:25;23014:41;;23080:2;23070:8;23067:16;23064:36;;;23096:1;23093;23086:12;23064:36;;23119:63;23174:7;23163:8;23152:9;23148:24;23119:63;:::i;:::-;23109:73;;;22217:971;;;;;;;:::o;25674:224::-;25713:3;25741:6;25774:2;25771:1;25767:10;25804:2;25801:1;25797:10;25835:3;25831:2;25827:12;25822:3;25819:21;25816:47;;;25843:18;;:::i;:::-;25879:13;;25674:224;-1:-1:-1;;;;25674:224:1:o;26561:774::-;26676:6;26684;26692;26700;26753:3;26741:9;26732:7;26728:23;26724:33;26721:53;;;26770:1;26767;26760:12;26721:53;26803:9;26797:16;26832:18;26873:2;26865:6;26862:14;26859:34;;;26889:1;26886;26879:12;26859:34;26912:61;26965:7;26956:6;26945:9;26941:22;26912:61;:::i;:::-;26902:71;;27019:2;27008:9;27004:18;26998:25;26982:41;;27048:2;27038:8;27035:16;27032:36;;;27064:1;27061;27054:12;27032:36;;27087:63;27142:7;27131:8;27120:9;27116:24;27087:63;:::i;:::-;27077:73;;;27190:2;27179:9;27175:18;27169:25;27159:35;;27237:2;27226:9;27222:18;27216:25;27281:4;27274:5;27270:16;27263:5;27260:27;27250:55;;27301:1;27298;27291:12;27669:251;27739:6;27792:2;27780:9;27771:7;27767:23;27763:32;27760:52;;;27808:1;27805;27798:12;27760:52;27840:9;27834:16;27859:31;27884:5;27859:31;:::i;28257:195::-;28296:3;-1:-1:-1;;28320:5:1;28317:77;28314:103;;;28397:18;;:::i;:::-;-1:-1:-1;28444:1:1;28433:13;;28257:195::o;29092:306::-;29180:6;29188;29196;29249:2;29237:9;29228:7;29224:23;29220:32;29217:52;;;29265:1;29262;29255:12;29217:52;29294:9;29288:16;29278:26;;29344:2;29333:9;29329:18;29323:25;29313:35;;29388:2;29377:9;29373:18;29367:25;29357:35;;29092:306;;;;;:::o;29755:245::-;29822:6;29875:2;29863:9;29854:7;29850:23;29846:32;29843:52;;;29891:1;29888;29881:12;29843:52;29923:9;29917:16;29942:28;29964:5;29942:28;:::i;31987:128::-;32027:3;32058:1;32054:6;32051:1;32048:13;32045:39;;;32064:18;;:::i;:::-;-1:-1:-1;32100:9:1;;31987:128::o;34552:605::-;34851:6;34840:9;34833:25;34894:6;34889:2;34878:9;34874:18;34867:34;34937:3;34932:2;34921:9;34917:18;34910:31;34814:4;34958:57;35010:3;34999:9;34995:19;34987:6;34958:57;:::i;:::-;-1:-1:-1;;;;;35051:55:1;;;;35046:2;35031:18;;35024:83;-1:-1:-1;35138:3:1;35123:19;35116:35;34950:65;34552:605;-1:-1:-1;;;34552:605:1:o

Swarm Source

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