ETH Price: $2,268.21 (-4.86%)

Token

King Flotamalon (KF)
 

Overview

Max Total Supply

1,000,000,000,000 KF

Holders

172

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
2,125,000,000 KF

Value
$0.00
0x933899194a99b567103e42785e787df8c248eb08
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:
KingFlotamalon

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

interface IERC20 {
  function totalSupply() external view returns (uint256);
  function decimals() external view returns (uint8);
  function symbol() external view returns (string memory);
  function name() external view returns (string memory);
  function getOwner() external view returns (address);
  function balanceOf(address account) external view returns (uint256);
  function transfer(address recipient, uint256 amount) external returns (bool);
  function allowance(address _owner, address spender) external view returns (uint256);
  function approve(address spender, uint256 amount) external returns (bool);
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
  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);
    function sync() external;
}

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

    function fullReset() external;
}

interface Cashier {
    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 KingFlotamalon 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;

    uint256 constant private startingSupply = 1_000_000_000_000;

    string constant private _name = "King Flotamalon";
    string constant private _symbol = "KF";
    uint8 constant private _decimals = 9;

    uint256 constant private _tTotal = startingSupply * (10 ** _decimals);

    struct Fees {
        uint16 buyFee;
        uint16 sellFee;
        uint16 transferFee;
        uint16 boostBuyFee;
        uint16 boostSellFee;
        uint16 boostTransferFee;
    }

    struct Ratios {
        uint16 rewards;
        uint16 liquidity;
        uint16 marketing;
        uint16 buyback;
        uint16 dev;
        uint16 winner;
        uint16 total;
    }

    Fees public _taxRates = Fees({
        buyFee: 1500,
        sellFee: 2500,
        transferFee: 0,
        boostBuyFee: 2500,
        boostSellFee: 2500,
        boostTransferFee: 2500
        });

    Ratios public _ratios = Ratios({
        rewards: 15,
        liquidity: 5,
        marketing: 15,
        buyback: 5,
        dev: 0,
        winner: 0,
        total: 40
        });

    uint256 constant public maxBuyTaxes = 2500;
    uint256 constant public maxSellTaxes = 2500;
    uint256 constant public maxTransferTaxes = 2500;
    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 dev;
        address payable winner;
    }

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0x2A034fc3c1552Ab065b152d4560C7eD3e254942C),
        dev: payable(0x7A24FFFb6d565a3650EEE3aCDA64eA74b1Cc1D0C),
        winner: payable(address(0))
        });


    uint256 private _maxTxAmount = (_tTotal * 100) / 100;
    uint256 private _maxWalletSize = (_tTotal * 2) / 100;

    Cashier reflector;
    uint256 reflectorGas = 300000;

    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public contractSwapTimer = 10 seconds;
    uint256 private lastSwap;
    uint256 public swapThreshold = (_tTotal * 5) / 10000;
    uint256 public swapAmount = (_tTotal * 20) / 10000;
    bool public processReflect = false;

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

    bool public boostedTaxesEnabled = false;
    uint256 public boostedTaxTimestampEnd;

    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 {
        // Set the owner.
        _owner = msg.sender;

        _tOwned[_owner] = _tTotal;
        emit Transfer(ZERO, _owner, _tTotal);
        emit OwnershipTransferred(address(0), _owner);

        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 if (block.chainid == 43114) {
            dexRouter = IRouter02(0x60aE616a2155Ee3d9A68541Ba4544862310933d4);
        } else if (block.chainid == 250) {
            dexRouter = IRouter02(0xF491e7B69E4244ad4002BC14e878a34207E38c29);
        } else {
            revert();
        }

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

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

        _isExcludedFromFees[_owner] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _isExcludedFromDividends[_owner] = true;
        _isExcludedFromDividends[lpPair] = true;
        _isExcludedFromDividends[address(this)] = true;
        _isExcludedFromDividends[DEAD] = true;
        _isExcludedFromDividends[ZERO] = true;
    }

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // 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 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 pure override returns (uint256) { if (_tTotal == 0) { revert(); } return _tTotal; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure 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(!_hasLiqBeenAdded);
        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 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 >= 250, "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 {}
        try reflector.initialize() {} catch {}
        tradingEnabled = true;
        swapThreshold = (balanceOf(lpPair) * 5) / 10000;
        swapAmount = (balanceOf(lpPair) * 1) / 1000;
    }

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

    function setRatios(uint16 rewards, uint16 liquidity, uint16 marketing, uint16 dev, uint16 buyback, uint16 winner) external onlyOwner {
        if(winner > 0) {
            require(_taxWallets.winner != address(0));
        }
        _ratios.rewards = rewards;
        _ratios.liquidity = liquidity;
        _ratios.marketing = marketing;
        _ratios.dev = dev;
        _ratios.buyback = buyback;
        _ratios.winner = winner;
        _ratios.total = rewards + liquidity + marketing + dev + buyback + winner;
    }

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

    function setWinnerWallet(address payable wallet) external onlyOwner {
        _taxWallets.winner = wallet;
    }

    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 setNewRouter(address newRouter) external 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 isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function isExcludedFromDividends(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 _hasLimits(address from, address to) internal 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");
        bool buy = false;
        bool sell = false;
        bool other = false;
        if (lpPairs[from]) {
            buy = true;
        } else if (lpPairs[to]) {
            sell = true;
        } else {
            other = true;
        }
        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if(buy || sell){
                if (!_isExcludedFromLimits[from] && !_isExcludedFromLimits[to]) {
                    require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
                }
            }
            if(to != address(dexRouter) && !sell) {
                if (!_isExcludedFromLimits[to]) {
                    require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
                }
            }
        }

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

        return _finalizeTransfer(from, to, amount, takeFee, buy, sell, other);
    }

    function _finalizeTransfer(address from, address to, uint256 amount, bool takeFee, bool buy, bool sell, bool other) 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();
            }
        }

        _tOwned[from] -= amount;

        if (sell) {
            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, amount, buy, sell, other);
        }

        _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, uint256 amount, bool buy, bool sell, bool other) internal returns (uint256) {
        uint256 currentFee;
        if (block.timestamp < boostedTaxTimestampEnd) {
            if (buy) {
                currentFee = _taxRates.boostBuyFee;
            } else if (sell) {
                currentFee = _taxRates.boostSellFee;
            } else {
                currentFee = _taxRates.boostTransferFee;
            }
        } else {
            if (buy) {
                currentFee = _taxRates.buyFee;
            } else if (sell) {
                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;
        }

        uint256 toLiquify = ((contractTokenBalance * ratios.liquidity) / (ratios.total)) / 2;
        uint256 swapAmt = contractTokenBalance - toLiquify;

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

        uint256 initial = address(this).balance;

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

        uint256 amtBalance = address(this).balance - initial;
        uint256 liquidityBalance = (amtBalance * toLiquify) / swapAmt;

        if (toLiquify > 0) {
            dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0,
                0,
                DEAD,
                block.timestamp
            );
            emit AutoLiquify(liquidityBalance, toLiquify);
        }

        amtBalance -= liquidityBalance;
        ratios.total -= ratios.liquidity;
        uint256 rewardsBalance = (amtBalance * ratios.rewards) / ratios.total;
        uint256 devBalance = (amtBalance * ratios.dev) / ratios.total;
        uint256 buybackBalance = (amtBalance * ratios.buyback) / ratios.total;
        uint256 winnerBalance = (amtBalance * ratios.winner) / ratios.total;
        uint256 marketingBalance = amtBalance - (rewardsBalance + devBalance + buybackBalance + winnerBalance);

        if (ratios.rewards > 0) {
            try reflector.load{value: rewardsBalance}() {} catch {}
        }

        if(ratios.dev > 0){
            _taxWallets.dev.transfer(devBalance);
        }
        if(ratios.marketing > 0){
            _taxWallets.marketing.transfer(marketingBalance);
        }
        if(ratios.winner > 0) {
            _taxWallets.winner.transfer(winnerBalance);
        }
    }

    function buybackAndBurn(uint256 boostTime, uint256 amount, uint256 multiplier) external onlyOwner {
        require(address(this).balance >= amount * 10**multiplier);
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);

        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens
        {value: amount*10**multiplier} (
            0,
            path,
            DEAD,
            block.timestamp
        );
        setBoostedTaxes(boostTime);
    }

    function setBoostedTaxesEnabled(bool enabled) external onlyOwner {
        if(!enabled) {
            boostedTaxTimestampEnd = 0;
        }
        boostedTaxesEnabled = enabled;
    }

    function setBoostedTaxes(uint256 timeInSeconds) public {
        require(msg.sender == address(this) || msg.sender == _owner);
        require(timeInSeconds <= 24 hours);
        boostedTaxTimestampEnd = block.timestamp + timeInSeconds;
    }

    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));
            }
            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]);
            _finalizeTransfer(msg.sender, accounts[i], amounts[i]*10**_decimals, false, false, false, true);
        }
    }

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

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":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"buyback","type":"uint16"},{"internalType":"uint16","name":"dev","type":"uint16"},{"internalType":"uint16","name":"winner","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":"boostBuyFee","type":"uint16"},{"internalType":"uint16","name":"boostSellFee","type":"uint16"},{"internalType":"uint16","name":"boostTransferFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"dev","type":"address"},{"internalType":"address payable","name":"winner","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":[{"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":"boostedTaxTimestampEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"boostedTaxesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"boostTime","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"multiplier","type":"uint256"}],"name":"buybackAndBurn","outputs":[],"stateMutability":"nonpayable","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":"pure","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"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":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromDividends","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","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":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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":"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":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"setBoostedTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timeInSeconds","type":"uint256"}],"name":"setBoostedTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBoostedTaxesEnabled","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":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"dev","type":"uint16"},{"internalType":"uint16","name":"buyback","type":"uint16"},{"internalType":"uint16","name":"winner","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":"dev","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wallet","type":"address"}],"name":"setWinnerWallet","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":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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"}]

600060038190556105dc6080526109c460a081905260c082905260e081905261010081905261012052600980546001600160601b0319166b09c409c409c4000009c405dc178155600f61014081905260056101608190526101808290526101a0526101c08390526101e0839052602861020052600a80546001600160701b0319166c28000000000005000f0005000f178155610280604052732a034fc3c1552ab065b152d4560c7ed3e254942c610220819052737a24fffb6d565a3650eee3acda64ea74b1cc1d0c61024081905261026095909552600d80546001600160a01b03199081169092179055600e80548216909517909455815490931690556064916200010b919062000934565b6200011c9064e8d4a510006200094c565b620001299060646200094c565b6200013591906200096e565b6010556064620001486009600a62000934565b620001599064e8d4a510006200094c565b620001669060026200094c565b6200017291906200096e565b601155620493e06013556014805461ff0019169055600a601581905561271090620001a09060099062000934565b620001b19064e8d4a510006200094c565b620001be9060056200094c565b620001ca91906200096e565b601755612710620001de6009600a62000934565b620001ef9064e8d4a510006200094c565b620001fc9060146200094c565b6200020891906200096e565b6018556019805462ffffff60ff60b81b0119169055600080546001600160a01b031916331790556200023d6009600a62000934565b6200024e9064e8d4a510006200094c565b600080546001600160a01b039081168252600160205260408220929092558054909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620002a16009600a62000934565b620002b29064e8d4a510006200094c565b60405190815260200160405180910390a3600080546040516001600160a01b0390911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a346603814156200033257600b80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e1790556200041c565b46606114156200036857600b80546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c31790556200041c565b4660011480620003785750466004145b15620003aa57600b80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790556200041c565b4661a86a1415620003e157600b80546001600160a01b0319167360ae616a2155ee3d9a68541ba4544862310933d41790556200041c565b4660fa14156200041757600b80546001600160a01b03191673f491e7b69e4244ad4002bc14e878a34207e38c291790556200041c565b600080fd5b600b60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000470573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000496919062000991565b6001600160a01b031663c9c65396600b60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200051e919062000991565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af11580156200056b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000591919062000991565b600c80546001600160a01b0319166001600160a01b039283169081179091556000908152600260205260408120805460ff1916600117905554600b54620005e0929182169116600019620006f3565b600b54620005fc9030906001600160a01b0316600019620006f3565b600080546001600160a01b0390811682526005602090815260408084208054600160ff1991821681179092553080875283872080548316841790557f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba805483168417905586548616875260079094528286208054821683179055600c5490941685528185208054851682179055918452832080548316821790557fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d80548316821790559180527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df80549091169091179055620009bc565b6001600160a01b0383166200075b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620007be5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000752565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620008765781600019048211156200085a576200085a6200081f565b808516156200086857918102915b93841c93908002906200083a565b509250929050565b6000826200088f575060016200092e565b816200089e575060006200092e565b8160018114620008b75760028114620008c257620008e2565b60019150506200092e565b60ff841115620008d657620008d66200081f565b50506001821b6200092e565b5060208310610133831016604e8410600b841016171562000907575081810a6200092e565b62000913838362000835565b80600019048211156200092a576200092a6200081f565b0290505b92915050565b60006200094560ff8416836200087e565b9392505050565b60008160001904831182151516156200096957620009696200081f565b500290565b6000826200098c57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620009a457600080fd5b81516001600160a01b03811681146200094557600080fd5b6156d480620009cc6000396000f3fe6080604052600436106104845760003560e01c80636372c68f1161025e578063c6a276c211610143578063eafb5a3c116100bb578063f7c245ea1161008a578063fceef4ac1161006f578063fceef4ac14610ea8578063fdb78c0e14610ec8578063fe575a8714610ee757600080fd5b8063f7c245ea14610e3c578063f94aa1b414610e5157600080fd5b8063eafb5a3c14610dcc578063eec2744e14610dec578063efe7dc9014610e0c578063f3889a1614610e2657600080fd5b8063d3f6a15711610112578063dd62ed3e116100f7578063dd62ed3e14610d50578063dea528a114610d96578063e4fcfd1814610db657600080fd5b8063d3f6a15714610d10578063d69153c914610d3057600080fd5b8063c6a276c214610be2578063c705c56914610c02578063cf84770614610c3b578063d0b1449d14610cf057600080fd5b80638a63bd9b116101d65780639dc67615116101a5578063ab5cb5a61161018a578063ab5cb5a614610bc2578063b1b08f711461078c578063b3d514fb1461078c57600080fd5b80639dc6761514610b8d578063a9059cbb14610ba257600080fd5b80638a63bd9b14610afd5780638a8c523c14610b1257806395d89b4114610b27578063968253da14610b6d57600080fd5b80636ebd00781161022d578063715018a611610212578063715018a614610aaa57806380c581d114610abf578063893d20e814610adf57600080fd5b80636ebd007814610a5f57806370a0823114610a7457600080fd5b80636372c68f146109da5780636386c1c7146109fa5780636ab86dc114610a2a5780636b639a2514610a3f57600080fd5b806329dd879811610384578063452ed4f1116102fc5780634fbee193116102cb57806350dea0c3116102b057806350dea0c314610961578063590ffdce146109815780635cce86cd146109a157600080fd5b80634fbee1931461090857806350a8e0161461094157600080fd5b8063452ed4f11461087457806348909c02146108945780634ada218b146108c95780634fb2e45d146108e857600080fd5b806332cde6641161035357806334cd82601161033857806334cd82601461081457806336fddb04146108345780633f3cf56c1461085457600080fd5b806332cde664146107d457806333251a0b146107f457600080fd5b806329dd87981461076c5780632b28fc7a1461078c5780632e8fa821146107a2578063313ce567146107b857600080fd5b806309a8f17911610417578063218950bc116103e657806326003957116103cb578063260039571461070c5780632610eaca1461072c578063290e81eb1461074c57600080fd5b8063218950bc146106cc57806323b872dd146106ec57600080fd5b806309a8f179146106625780630fa604e41461068257806318160ddd146106975780631fa54825146106ac57600080fd5b806306fdde031161045357806306fdde03146105a35780630758d924146105f25780630923160214610612578063095ea7b31461063257600080fd5b806303fd2a45146104905780630445b667146104c357806305bbedb6146104e7578063069d955f1461050957600080fd5b3661048b57005b600080fd5b34801561049c57600080fd5b506104a661dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156104cf57600080fd5b506104d960175481565b6040519081526020016104ba565b3480156104f357600080fd5b50610507610502366004614d27565b610f07565b005b34801561051557600080fd5b506009546105669061ffff808216916201000081048216916401000000008204811691660100000000000081048216916801000000000000000082048116916a010000000000000000000090041686565b6040805161ffff978816815295871660208701529386169385019390935290841660608401528316608083015290911660a082015260c0016104ba565b3480156105af57600080fd5b5060408051808201909152600f81527f4b696e6720466c6f74616d616c6f6e000000000000000000000000000000000060208201525b6040516104ba9190614dd1565b3480156105fe57600080fd5b50600b546104a6906001600160a01b031681565b34801561061e57600080fd5b5061050761062d366004614de4565b610fed565b34801561063e57600080fd5b5061065261064d366004614dfd565b611119565b60405190151581526020016104ba565b34801561066e57600080fd5b5061050761067d366004614e29565b611186565b34801561068e57600080fd5b506104d9611279565b3480156106a357600080fd5b506104d9611299565b3480156106b857600080fd5b506105076106c7366004614e6c565b6112da565b3480156106d857600080fd5b506105076106e7366004614eaf565b611413565b3480156106f857600080fd5b50610652610707366004614edd565b61152d565b34801561071857600080fd5b50610507610727366004614f1e565b6115a5565b34801561073857600080fd5b50610507610747366004614f40565b611704565b34801561075857600080fd5b50610507610767366004614de4565b611825565b34801561077857600080fd5b50610507610787366004614ffb565b611866565b34801561079857600080fd5b506104d96109c481565b3480156107ae57600080fd5b506104d960185481565b3480156107c457600080fd5b50604051600981526020016104ba565b3480156107e057600080fd5b506105076107ef366004614e6c565b61195c565b34801561080057600080fd5b5061050761080f366004615057565b611a60565b34801561082057600080fd5b5061050761082f366004615074565b611b0d565b34801561084057600080fd5b5061050761084f3660046150af565b611bd8565b34801561086057600080fd5b5061050761086f366004614f1e565b611c5d565b34801561088057600080fd5b50600c546104a6906001600160a01b031681565b3480156108a057600080fd5b506019546106529077010000000000000000000000000000000000000000000000900460ff1681565b3480156108d557600080fd5b5060195461065290610100900460ff1681565b3480156108f457600080fd5b50610507610903366004615057565b611dbc565b34801561091457600080fd5b50610652610923366004615057565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561094d57600080fd5b506019546106529062010000900460ff1681565b34801561096d57600080fd5b5061050761097c366004614e29565b612006565b34801561098d57600080fd5b5061050761099c3660046150af565b61220a565b3480156109ad57600080fd5b506106526109bc366004615057565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156109e657600080fd5b506104d96109f5366004615057565b61228f565b348015610a0657600080fd5b50610a1a610a15366004615057565b612318565b6040516104ba94939291906150dd565b348015610a3657600080fd5b506105076123b9565b348015610a4b57600080fd5b50610507610a5a3660046150af565b612478565b348015610a6b57600080fd5b506104d96125e7565b348015610a8057600080fd5b506104d9610a8f366004615057565b6001600160a01b031660009081526001602052604090205490565b348015610ab657600080fd5b50610507612602565b348015610acb57600080fd5b50610507610ada3660046150af565b6126e0565b348015610aeb57600080fd5b506000546001600160a01b03166104a6565b348015610b0957600080fd5b50610652612894565b348015610b1e57600080fd5b5061050761290f565b348015610b3357600080fd5b5060408051808201909152600281527f4b4600000000000000000000000000000000000000000000000000000000000060208201526105e5565b348015610b7957600080fd5b50610507610b88366004615057565b612be0565b348015610b9957600080fd5b50610507612c69565b348015610bae57600080fd5b50610652610bbd366004614dfd565b612cdb565b348015610bce57600080fd5b506104d9610bdd366004615057565b612cef565b348015610bee57600080fd5b50610507610bfd366004615057565b612d3b565b348015610c0e57600080fd5b50610652610c1d366004615057565b6001600160a01b031660009081526007602052604090205460ff1690565b348015610c4757600080fd5b50600a54610cac9061ffff808216916201000081048216916401000000008204811691660100000000000081048216916801000000000000000082048116916a010000000000000000000081048216916c010000000000000000000000009091041687565b6040805161ffff9889168152968816602088015294871694860194909452918516606085015284166080840152831660a083015290911660c082015260e0016104ba565b348015610cfc57600080fd5b50610507610d0b366004614de4565b612de8565b348015610d1c57600080fd5b50610507610d2b366004614eaf565b612e56565b348015610d3c57600080fd5b50610507610d4b366004615135565b612eeb565b348015610d5c57600080fd5b506104d9610d6b366004614eaf565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610da257600080fd5b50610507610db13660046151a9565b6130e6565b348015610dc257600080fd5b506104d960155481565b348015610dd857600080fd5b50610507610de7366004615057565b61316d565b348015610df857600080fd5b50610507610e073660046150af565b613528565b348015610e1857600080fd5b506019546106529060ff1681565b348015610e3257600080fd5b506104d9601a5481565b348015610e4857600080fd5b506104d9613614565b348015610e5d57600080fd5b50600d54600e54600f54610e7e926001600160a01b03908116928116911683565b604080516001600160a01b03948516815292841660208401529216918101919091526060016104ba565b348015610eb457600080fd5b50610507610ec33660046151c7565b61369b565b348015610ed457600080fd5b5060145461065290610100900460ff1681565b348015610ef357600080fd5b50610652610f02366004615057565b61374d565b6000546001600160a01b03163314610f665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6019546040517f05bbedb600000000000000000000000000000000000000000000000000000000815263010000009091046001600160a01b0316906305bbedb690610fb79085908590600401615228565b600060405180830381600087803b158015610fd157600080fd5b505af1158015610fe5573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146110475760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b60fa8110156110985760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610f5d565b6019546040517f092316020000000000000000000000000000000000000000000000000000000081526004810183905263010000009091046001600160a01b0316906309231602906024015b600060405180830381600087803b1580156110fe57600080fd5b505af1158015611112573d6000803e3d6000fd5b5050505050565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906111749086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b031633146111e05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b6111eb81600a61535f565b6111f5908361536b565b6012546040517f8cd7f02e00000000000000000000000000000000000000000000000000000000815260048101869052602481018390529193506001600160a01b031690638cd7f02e90604401600060405180830381600087803b15801561125c57600080fd5b505af1158015611270573d6000803e3d6000fd5b50505050505050565b60006112876009600a61538a565b6011546112949190615399565b905090565b60006112a76009600a61538a565b6112b69064e8d4a5100061536b565b6112bf57600080fd5b6112cb6009600a61538a565b6112949064e8d4a5100061536b565b6000546001600160a01b031633146113345760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b6109c48361ffff161115801561135057506109c48261ffff1611155b801561136257506109c48161ffff1611155b61136b57600080fd5b600980547fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff16660100000000000061ffff958616027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff16176801000000000000000093851693909302929092177fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff166a01000000000000000000009190931602919091179055565b6000546001600160a01b0316331461146d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b60195462010000900460ff161561148357600080fd5b6001600160a01b03811630148015906114a557506001600160a01b0382163014155b80156114c35750816001600160a01b0316816001600160a01b031614155b6114cc57600080fd5b6012805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03928316179055601980547fffffffffffffffffff0000000000000000000000000000000000000000ffffff1663010000009390921692909202179055565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914611592576001600160a01b03841660009081526004602090815260408083203384529091528120805484929061158c9084906153d4565b90915550505b61159d8484846137dc565b949350505050565b6000546001600160a01b031633146115ff5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b6103e861160e6009600a61538a565b61161d9064e8d4a5100061536b565b6116279190615399565b81836116356009600a61538a565b6116449064e8d4a5100061536b565b61164e919061536b565b6116589190615399565b10156116cc5760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610f5d565b80826116da6009600a61538a565b6116e99064e8d4a5100061536b565b6116f3919061536b565b6116fd9190615399565b6011555050565b80518251146117555760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610f5d565b60005b82518160ff16101561182057818160ff1681518110611779576117796153eb565b60200260200101516117a0336001600160a01b031660009081526001602052604090205490565b10156117ab57600080fd5b61180d33848360ff16815181106117c4576117c46153eb565b60200260200101516009600a6117da919061538a565b858560ff16815181106117ef576117ef6153eb565b6020026020010151611801919061536b565b60008060006001613c23565b50806118188161541a565b915050611758565b505050565b3330148061183d57506000546001600160a01b031633145b61184657600080fd5b6201518081111561185657600080fd5b611860814261543a565b601a5550565b6000546001600160a01b031633146118c05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b6019546040517f0109da69000000000000000000000000000000000000000000000000000000008152851515600482015284151560248201528315156044820152821515606482015263010000009091046001600160a01b031690630109da6990608401600060405180830381600087803b15801561193e57600080fd5b505af1158015611952573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031633146119b65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b6109c48361ffff16111580156119d257506109c48261ffff1611155b80156119e457506109c48161ffff1611155b6119ed57600080fd5b6009805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b03163314611aba5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b6019546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526301000000909204909116906333251a0b906024016110e4565b6000546001600160a01b03163314611b675760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b8385611b756009600a61538a565b611b849064e8d4a5100061536b565b611b8e919061536b565b611b989190615399565b6017558183611ba96009600a61538a565b611bb89064e8d4a5100061536b565b611bc2919061536b565b611bcc9190615399565b60185560155550505050565b6000546001600160a01b03163314611c325760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611cb75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b6103e8611cc66009600a61538a565b611cd59064e8d4a5100061536b565b611cdf9190615399565b8183611ced6009600a61538a565b611cfc9064e8d4a5100061536b565b611d06919061536b565b611d109190615399565b1015611d845760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610f5d565b8082611d926009600a61538a565b611da19064e8d4a5100061536b565b611dab919061536b565b611db59190615399565b6010555050565b6000546001600160a01b03163314611e165760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b6001600160a01b038116611e925760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610f5d565b6001600160a01b03811661dead1415611f135760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610f5d565b600080546001600160a01b039081168252600560208181526040808520805460ff1990811690915585548516865260078084528287208054831690558786168752938352818620805482166001908117909155938352818620805490911684179055845490931684525290205415611fae57600080546001600160a01b03168082526001602052604090912054611fac919083906137dc565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146120605760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b61206b81600a61535f565b612075908361536b565b47101561208157600080fd5b6040805160028082526060820183526000926020830190803683375050600b54604080517fad5c464800000000000000000000000000000000000000000000000000000000815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612104573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121289190615452565b8160008151811061213b5761213b6153eb565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061216f5761216f6153eb565b6001600160a01b039283166020918202929092010152600b541663b6f9de9561219984600a61535f565b6121a3908661536b565b60008461dead426040518663ffffffff1660e01b81526004016121c9949392919061546f565b6000604051808303818588803b1580156121e257600080fd5b505af11580156121f6573d6000803e3d6000fd5b505050505061220484611825565b50505050565b6000546001600160a01b031633146122645760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6012546040517fd59b2ffd0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063d59b2ffd906024015b602060405180830381865afa1580156122f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118091906154a4565b6012546040517f5e6056bb0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526060928392839283921690635e6056bb90602401600060405180830381865afa158015612382573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123aa9190810190615521565b93509350935093509193509193565b6000546001600160a01b031633146124135760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b601260009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be476040518263ffffffff1660e01b81526004016000604051808303818588803b15801561246357600080fd5b505af193505050508015612475575060015b50565b6000546001600160a01b031633146124d25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b6001600160a01b03821630148015906124f95750600c546001600160a01b03838116911614155b61250257600080fd5b6001600160a01b0382166000908152600760205260409020805460ff19168215801591909117909155612581576012546040517fdf047e9e0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152600060248301529091169063df047e9e90604401610fb7565b6012546001600160a01b03838116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401610fb7565b5050565b60006125f56009600a61538a565b6010546112949190615399565b6000546001600160a01b0316331461265c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b600080546001600160a01b039081168252600560209081526040808420805460ff199081169091558454909316845260079091528083208054909216909155815473ffffffffffffffffffffffffffffffffffffffff191682555181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b0316331461273a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b806127b2576001600160a01b03828116600081815260026020526040808220805460ff1916905560195490517f80c581d10000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915263010000009004909116906380c581d190604401610fb7565b60035415612819576203f480600354426127cc91906153d4565b116128195760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610f5d565b6001600160a01b0382811660008181526002602052604090819020805460ff191660019081179091554260035560195491517f80c581d10000000000000000000000000000000000000000000000000000000081526004810193909352602483015263010000009004909116906380c581d190604401610fb7565b600080546001600160a01b031633146128ef5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b600b546129099030906001600160a01b0316600019613eda565b50600190565b6000546001600160a01b031633146129695760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b601954610100900460ff16156129c15760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610f5d565b60195462010000900460ff16612a195760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610f5d565b601954630100000090046001600160a01b0316612a6157601980547fffffffffffffffffff0000000000000000000000000000000000000000ffffff16306301000000021790555b601954600c546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff421660448201526009606482015263010000009092041690636c115c3490608401600060405180830381600087803b158015612aed57600080fd5b505af1925050508015612afe575060015b50601260009054906101000a90046001600160a01b03166001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612b4f57600080fd5b505af1925050508015612b60575060015b506019805461ff001916610100179055600c546001600160a01b031660009081526001602052604090205461271090612b9a90600561536b565b612ba49190615399565b601755600c546001600160a01b03166000908152600160205260409020546103e890612bd190600161536b565b612bdb9190615399565b601855565b6000546001600160a01b03163314612c3a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b600f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6012546040517f2e6f0efd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690632e6f0efd90602401600060405180830381600087803b158015612cc757600080fd5b505af1158015612204573d6000803e3d6000fd5b6000612ce83384846137dc565b9392505050565b6012546040517ff6ed20170000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063f6ed2017906024016122d7565b6000546001600160a01b03163314612d955760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b6019546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015263010000009092049091169063c6a276c2906024016110e4565b6000546001600160a01b03163314612e425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b620b71b08110612e5157600080fd5b601355565b6000546001600160a01b03163314612eb05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b600d80546001600160a01b0393841673ffffffffffffffffffffffffffffffffffffffff1991821617909155600e8054929093169116179055565b6000546001600160a01b03163314612f455760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b61ffff811615612f6457600f546001600160a01b0316612f6457600080fd5b600a805461ffff8881167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909216919091176201000088831602177fffffffffffffffffffffffffffffffffffffffffffff0000ffff0000ffffffff16640100000000878316027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff16176801000000000000000086831602177fffffffffffffffffffffffffffffffffffffffff0000ffff0000ffffffffffff166601000000000000858316027fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff16176a01000000000000000000009184169190910217905580828486613072898b6155ce565b61307c91906155ce565b61308691906155ce565b61309091906155ce565b61309a91906155ce565b600a805461ffff929092166c01000000000000000000000000027fffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffff909216919091179055505050505050565b6000546001600160a01b031633146131405760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b6014805461ff00191661010093151593909302929092179091556019805460ff1916911515919091179055565b6000546001600160a01b031633146131c75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561320c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132309190615452565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561327d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a19190615452565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015613304573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133289190615452565b90506001600160a01b0381166134c657816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613376573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061339a9190615452565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061340b9190615452565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015613470573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134949190615452565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790556134ef565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155611820903090600019613eda565b6000546001600160a01b031633146135825760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b6019546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152831515602483015263010000009092049091169063eec2744e90604401600060405180830381600087803b1580156135f257600080fd5b505af1158015613606573d6000803e3d6000fd5b505050506125e38282612478565b601254604080517f5695fa5800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691635695fa589160048083019260209291908290030181865afa158015613677573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129491906154a4565b6000546001600160a01b031633146136f55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b80613700576000601a555b6019805491151577010000000000000000000000000000000000000000000000027fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6019546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015260009263010000009004169063fe575a8790602401602060405180830381865afa1580156137b8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118091906155f4565b60006001600160a01b03841661385a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610f5d565b6001600160a01b0383166138d65760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610f5d565b6000821161394c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610f5d565b6001600160a01b0384166000908152600260205260408120548190819060ff161561397a57600192506139a8565b6001600160a01b03861660009081526002602052604090205460ff16156139a457600191506139a8565b5060015b6139b28787614032565b15613bbd57601954610100900460ff16613a0e5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610f5d565b8280613a175750815b15613adb576001600160a01b03871660009081526006602052604090205460ff16158015613a5e57506001600160a01b03861660009081526006602052604090205460ff16155b15613adb57601054851115613adb5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610f5d565b600b546001600160a01b03878116911614801590613af7575081155b15613bbd576001600160a01b03861660009081526006602052604090205460ff16613bbd5760115485613b3f886001600160a01b031660009081526001602052604090205490565b613b49919061543a565b1115613bbd5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610f5d565b6001600160a01b03871660009081526005602052604090205460019060ff1680613bff57506001600160a01b03871660009081526005602052604090205460ff165b15613c08575060005b613c1788888884888888613c23565b98975050505050505050565b60195460009062010000900460ff16613cd157613c408888614103565b60195462010000900460ff16158015613c5e5750613c5e8888614032565b15613cd15760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610f5d565b613cdb8888614032565b15613d8f576019546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038a8116600483015289811660248301526044820189905260009263010000009004169063ecd07a53906064016020604051808303816000875af1925050508015613d78575060408051601f3d908101601f19168201909252613d75918101906155f4565b60015b613d8157600080fd5b905080613d8d57600080fd5b505b6001600160a01b03881660009081526001602052604081208054889290613db79084906153d4565b90915550508215613e2f5760145460ff16158015613ddc5750601454610100900460ff165b15613e2f5742601554601654613df2919061543a565b1015613e2f57306000908152600160205260409020546017548110613e2d576018548110613e1f57506018545b613e28816142b2565b426016555b505b858515613e4657613e4389888787876148e3565b90505b6001600160a01b03881660009081526001602052604081208054839290613e6e90849061543a565b90915550613e7e90508989614a2c565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613ec391815260200190565b60405180910390a350600198975050505050505050565b6001600160a01b038316613f555760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610f5d565b6001600160a01b038216613fd15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610f5d565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600080546001600160a01b0384811691161480159061405f57506000546001600160a01b03838116911614155b801561407657506000546001600160a01b03163214155b801561409b57506001600160a01b03821660009081526008602052604090205460ff16155b80156140c057506001600160a01b03831660009081526008602052604090205460ff16155b80156140d757506001600160a01b03821661dead14155b80156140eb57506001600160a01b03821615155b8015612ce8575050506001600160a01b031630141590565b60195462010000900460ff16156141825760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610f5d565b61418c8282614032565b1580156141a65750600c546001600160a01b038281169116145b156125e3576001600160a01b038083166000908152600860205260409020805460ff19166001179055601980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff16620100001790819055630100000090041661423b57601980547fffffffffffffffffff0000000000000000000000000000000000000000ffffff16306301000000021790555b6012546001600160a01b031661426b576012805473ffffffffffffffffffffffffffffffffffffffff1916301790555b6014805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6014805460ff191660011790556040805160e081018252600a5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000810483166060830152680100000000000000008104831660808301526a01000000000000000000008104831660a08301526c01000000000000000000000000900490911660c0820181905261434f57506148d6565b306000908152600460209081526040808320600b546001600160a01b03168452909152902054600019146143a857306000908152600460209081526040808320600b546001600160a01b03168452909152902060001990555b600060028260c0015161ffff16836020015161ffff16856143c9919061536b565b6143d39190615399565b6143dd9190615399565b905060006143eb82856153d4565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110614425576144256153eb565b6001600160a01b03928316602091820292909201810191909152600b54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015614497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144bb9190615452565b816001815181106144ce576144ce6153eb565b6001600160a01b039283166020918202929092010152600b546040517f791ac9470000000000000000000000000000000000000000000000000000000081524792919091169063791ac94790614531908690600090879030904290600401615611565b600060405180830381600087803b15801561454b57600080fd5b505af115801561455f573d6000803e3d6000fd5b505050506000814761457191906153d4565b9050600084614580878461536b565b61458a9190615399565b9050851561467b57600b546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101889052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015614619573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061463e919061564d565b505060408051838152602081018990527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b61468581836153d4565b915086602001518760c00181815161469d919061567b565b61ffff90811690915260c0890151895160009350908216916146c091168561536b565b6146ca9190615399565b905060008860c0015161ffff16896080015161ffff16856146eb919061536b565b6146f59190615399565b905060008960c0015161ffff168a6060015161ffff1686614716919061536b565b6147209190615399565b905060008a60c0015161ffff168b60a0015161ffff1687614741919061536b565b61474b9190615399565b90506000818361475b868861543a565b614765919061543a565b61476f919061543a565b61477990886153d4565b8c5190915061ffff16156147eb57601260009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be866040518263ffffffff1660e01b81526004016000604051808303818588803b1580156147d757600080fd5b505af1935050505080156147e9575060015b505b60808c015161ffff161561483557600e546040516001600160a01b039091169085156108fc029086906000818181858888f19350505050158015614833573d6000803e3d6000fd5b505b60408c015161ffff161561487f57600d546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561487d573d6000803e3d6000fd5b505b60a08c015161ffff16156148c957600f546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156148c7573d6000803e3d6000fd5b505b5050505050505050505050505b506014805460ff19169055565b600080601a5442101561494757841561490d57506009546601000000000000900461ffff16614984565b831561492c575060095468010000000000000000900461ffff16614984565b506009546a0100000000000000000000900461ffff16614984565b841561495a575060095461ffff16614984565b8315614973575060095462010000900461ffff16614984565b50600954640100000000900461ffff165b806149925785915050614a23565b60006127106149a1838961536b565b6149ab9190615399565b306000908152600160205260408120805492935083929091906149cf90849061543a565b909155505060405181815230906001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3614a1e81886153d4565b925050505b95945050505050565b6001600160a01b03821660009081526007602052604090205460ff16614ad6576012546001600160a01b03838116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b158015614ac357600080fd5b505af1925050508015614ad4575060015b505b6001600160a01b03811660009081526007602052604090205460ff16614b80576012546001600160a01b03828116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b158015614b6d57600080fd5b505af1925050508015614b7e575060015b505b60195460ff16156125e3576012546013546040517fa9e732bb0000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163a9e732bb91614bd99160040190815260200190565b600060405180830381600087803b158015614bf357600080fd5b505af1925050508015614c04575060015b6125e3575050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614c6457614c64614c0c565b604052919050565b600067ffffffffffffffff821115614c8657614c86614c0c565b5060051b60200190565b6001600160a01b038116811461247557600080fd5b600082601f830112614cb657600080fd5b81356020614ccb614cc683614c6c565b614c3b565b82815260059290921b84018101918181019086841115614cea57600080fd5b8286015b84811015614d0e578035614d0181614c90565b8352918301918301614cee565b509695505050505050565b801515811461247557600080fd5b60008060408385031215614d3a57600080fd5b823567ffffffffffffffff811115614d5157600080fd5b614d5d85828601614ca5565b9250506020830135614d6e81614d19565b809150509250929050565b60005b83811015614d94578181015183820152602001614d7c565b838111156122045750506000910152565b60008151808452614dbd816020860160208601614d79565b601f01601f19169290920160200192915050565b602081526000612ce86020830184614da5565b600060208284031215614df657600080fd5b5035919050565b60008060408385031215614e1057600080fd5b8235614e1b81614c90565b946020939093013593505050565b600080600060608486031215614e3e57600080fd5b505081359360208301359350604090920135919050565b803561ffff81168114614e6757600080fd5b919050565b600080600060608486031215614e8157600080fd5b614e8a84614e55565b9250614e9860208501614e55565b9150614ea660408501614e55565b90509250925092565b60008060408385031215614ec257600080fd5b8235614ecd81614c90565b91506020830135614d6e81614c90565b600080600060608486031215614ef257600080fd5b8335614efd81614c90565b92506020840135614f0d81614c90565b929592945050506040919091013590565b60008060408385031215614f3157600080fd5b50508035926020909101359150565b60008060408385031215614f5357600080fd5b823567ffffffffffffffff80821115614f6b57600080fd5b614f7786838701614ca5565b9350602091508185013581811115614f8e57600080fd5b85019050601f81018613614fa157600080fd5b8035614faf614cc682614c6c565b81815260059190911b82018301908381019088831115614fce57600080fd5b928401925b82841015614fec57833582529284019290840190614fd3565b80955050505050509250929050565b6000806000806080858703121561501157600080fd5b843561501c81614d19565b9350602085013561502c81614d19565b9250604085013561503c81614d19565b9150606085013561504c81614d19565b939692955090935050565b60006020828403121561506957600080fd5b8135612ce881614c90565b600080600080600060a0868803121561508c57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080604083850312156150c257600080fd5b82356150cd81614c90565b91506020830135614d6e81614d19565b6080815260006150f06080830187614da5565b82810360208401526151028187614da5565b905082810360408401526151168186614da5565b9050828103606084015261512a8185614da5565b979650505050505050565b60008060008060008060c0878903121561514e57600080fd5b61515787614e55565b955061516560208801614e55565b945061517360408801614e55565b935061518160608801614e55565b925061518f60808801614e55565b915061519d60a08801614e55565b90509295509295509295565b600080604083850312156151bc57600080fd5b82356150cd81614d19565b6000602082840312156151d957600080fd5b8135612ce881614d19565b600081518084526020808501945080840160005b8381101561521d5781516001600160a01b0316875295820195908201906001016151f8565b509495945050505050565b60408152600061523b60408301856151e4565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156152b657816000190482111561529c5761529c61524c565b808516156152a957918102915b93841c9390800290615280565b509250929050565b6000826152cd57506001611180565b816152da57506000611180565b81600181146152f057600281146152fa57615316565b6001915050611180565b60ff84111561530b5761530b61524c565b50506001821b611180565b5060208310610133831016604e8410600b8410161715615339575081810a611180565b615343838361527b565b80600019048211156153575761535761524c565b029392505050565b6000612ce883836152be565b60008160001904831182151516156153855761538561524c565b500290565b6000612ce860ff8416836152be565b6000826153cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156153e6576153e661524c565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff8114156154315761543161524c565b60010192915050565b6000821982111561544d5761544d61524c565b500190565b60006020828403121561546457600080fd5b8151612ce881614c90565b84815260806020820152600061548860808301866151e4565b6001600160a01b03949094166040830152506060015292915050565b6000602082840312156154b657600080fd5b5051919050565b600082601f8301126154ce57600080fd5b815167ffffffffffffffff8111156154e8576154e8614c0c565b6154fb6020601f19601f84011601614c3b565b81815284602083860101111561551057600080fd5b61159d826020830160208701614d79565b6000806000806080858703121561553757600080fd5b845167ffffffffffffffff8082111561554f57600080fd5b61555b888389016154bd565b9550602087015191508082111561557157600080fd5b61557d888389016154bd565b9450604087015191508082111561559357600080fd5b61559f888389016154bd565b935060608701519150808211156155b557600080fd5b506155c2878288016154bd565b91505092959194509250565b600061ffff8083168185168083038211156155eb576155eb61524c565b01949350505050565b60006020828403121561560657600080fd5b8151612ce881614d19565b85815284602082015260a06040820152600061563060a08301866151e4565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561566257600080fd5b8351925060208401519150604084015190509250925092565b600061ffff838116908316818110156156965761569661524c565b03939250505056fea2646970667358221220254e3937c5afd3f22263223edd4aa2a15dea222afaafa299f77ba5571772389a64736f6c634300080c0033

Deployed Bytecode

0x6080604052600436106104845760003560e01c80636372c68f1161025e578063c6a276c211610143578063eafb5a3c116100bb578063f7c245ea1161008a578063fceef4ac1161006f578063fceef4ac14610ea8578063fdb78c0e14610ec8578063fe575a8714610ee757600080fd5b8063f7c245ea14610e3c578063f94aa1b414610e5157600080fd5b8063eafb5a3c14610dcc578063eec2744e14610dec578063efe7dc9014610e0c578063f3889a1614610e2657600080fd5b8063d3f6a15711610112578063dd62ed3e116100f7578063dd62ed3e14610d50578063dea528a114610d96578063e4fcfd1814610db657600080fd5b8063d3f6a15714610d10578063d69153c914610d3057600080fd5b8063c6a276c214610be2578063c705c56914610c02578063cf84770614610c3b578063d0b1449d14610cf057600080fd5b80638a63bd9b116101d65780639dc67615116101a5578063ab5cb5a61161018a578063ab5cb5a614610bc2578063b1b08f711461078c578063b3d514fb1461078c57600080fd5b80639dc6761514610b8d578063a9059cbb14610ba257600080fd5b80638a63bd9b14610afd5780638a8c523c14610b1257806395d89b4114610b27578063968253da14610b6d57600080fd5b80636ebd00781161022d578063715018a611610212578063715018a614610aaa57806380c581d114610abf578063893d20e814610adf57600080fd5b80636ebd007814610a5f57806370a0823114610a7457600080fd5b80636372c68f146109da5780636386c1c7146109fa5780636ab86dc114610a2a5780636b639a2514610a3f57600080fd5b806329dd879811610384578063452ed4f1116102fc5780634fbee193116102cb57806350dea0c3116102b057806350dea0c314610961578063590ffdce146109815780635cce86cd146109a157600080fd5b80634fbee1931461090857806350a8e0161461094157600080fd5b8063452ed4f11461087457806348909c02146108945780634ada218b146108c95780634fb2e45d146108e857600080fd5b806332cde6641161035357806334cd82601161033857806334cd82601461081457806336fddb04146108345780633f3cf56c1461085457600080fd5b806332cde664146107d457806333251a0b146107f457600080fd5b806329dd87981461076c5780632b28fc7a1461078c5780632e8fa821146107a2578063313ce567146107b857600080fd5b806309a8f17911610417578063218950bc116103e657806326003957116103cb578063260039571461070c5780632610eaca1461072c578063290e81eb1461074c57600080fd5b8063218950bc146106cc57806323b872dd146106ec57600080fd5b806309a8f179146106625780630fa604e41461068257806318160ddd146106975780631fa54825146106ac57600080fd5b806306fdde031161045357806306fdde03146105a35780630758d924146105f25780630923160214610612578063095ea7b31461063257600080fd5b806303fd2a45146104905780630445b667146104c357806305bbedb6146104e7578063069d955f1461050957600080fd5b3661048b57005b600080fd5b34801561049c57600080fd5b506104a661dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156104cf57600080fd5b506104d960175481565b6040519081526020016104ba565b3480156104f357600080fd5b50610507610502366004614d27565b610f07565b005b34801561051557600080fd5b506009546105669061ffff808216916201000081048216916401000000008204811691660100000000000081048216916801000000000000000082048116916a010000000000000000000090041686565b6040805161ffff978816815295871660208701529386169385019390935290841660608401528316608083015290911660a082015260c0016104ba565b3480156105af57600080fd5b5060408051808201909152600f81527f4b696e6720466c6f74616d616c6f6e000000000000000000000000000000000060208201525b6040516104ba9190614dd1565b3480156105fe57600080fd5b50600b546104a6906001600160a01b031681565b34801561061e57600080fd5b5061050761062d366004614de4565b610fed565b34801561063e57600080fd5b5061065261064d366004614dfd565b611119565b60405190151581526020016104ba565b34801561066e57600080fd5b5061050761067d366004614e29565b611186565b34801561068e57600080fd5b506104d9611279565b3480156106a357600080fd5b506104d9611299565b3480156106b857600080fd5b506105076106c7366004614e6c565b6112da565b3480156106d857600080fd5b506105076106e7366004614eaf565b611413565b3480156106f857600080fd5b50610652610707366004614edd565b61152d565b34801561071857600080fd5b50610507610727366004614f1e565b6115a5565b34801561073857600080fd5b50610507610747366004614f40565b611704565b34801561075857600080fd5b50610507610767366004614de4565b611825565b34801561077857600080fd5b50610507610787366004614ffb565b611866565b34801561079857600080fd5b506104d96109c481565b3480156107ae57600080fd5b506104d960185481565b3480156107c457600080fd5b50604051600981526020016104ba565b3480156107e057600080fd5b506105076107ef366004614e6c565b61195c565b34801561080057600080fd5b5061050761080f366004615057565b611a60565b34801561082057600080fd5b5061050761082f366004615074565b611b0d565b34801561084057600080fd5b5061050761084f3660046150af565b611bd8565b34801561086057600080fd5b5061050761086f366004614f1e565b611c5d565b34801561088057600080fd5b50600c546104a6906001600160a01b031681565b3480156108a057600080fd5b506019546106529077010000000000000000000000000000000000000000000000900460ff1681565b3480156108d557600080fd5b5060195461065290610100900460ff1681565b3480156108f457600080fd5b50610507610903366004615057565b611dbc565b34801561091457600080fd5b50610652610923366004615057565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561094d57600080fd5b506019546106529062010000900460ff1681565b34801561096d57600080fd5b5061050761097c366004614e29565b612006565b34801561098d57600080fd5b5061050761099c3660046150af565b61220a565b3480156109ad57600080fd5b506106526109bc366004615057565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156109e657600080fd5b506104d96109f5366004615057565b61228f565b348015610a0657600080fd5b50610a1a610a15366004615057565b612318565b6040516104ba94939291906150dd565b348015610a3657600080fd5b506105076123b9565b348015610a4b57600080fd5b50610507610a5a3660046150af565b612478565b348015610a6b57600080fd5b506104d96125e7565b348015610a8057600080fd5b506104d9610a8f366004615057565b6001600160a01b031660009081526001602052604090205490565b348015610ab657600080fd5b50610507612602565b348015610acb57600080fd5b50610507610ada3660046150af565b6126e0565b348015610aeb57600080fd5b506000546001600160a01b03166104a6565b348015610b0957600080fd5b50610652612894565b348015610b1e57600080fd5b5061050761290f565b348015610b3357600080fd5b5060408051808201909152600281527f4b4600000000000000000000000000000000000000000000000000000000000060208201526105e5565b348015610b7957600080fd5b50610507610b88366004615057565b612be0565b348015610b9957600080fd5b50610507612c69565b348015610bae57600080fd5b50610652610bbd366004614dfd565b612cdb565b348015610bce57600080fd5b506104d9610bdd366004615057565b612cef565b348015610bee57600080fd5b50610507610bfd366004615057565b612d3b565b348015610c0e57600080fd5b50610652610c1d366004615057565b6001600160a01b031660009081526007602052604090205460ff1690565b348015610c4757600080fd5b50600a54610cac9061ffff808216916201000081048216916401000000008204811691660100000000000081048216916801000000000000000082048116916a010000000000000000000081048216916c010000000000000000000000009091041687565b6040805161ffff9889168152968816602088015294871694860194909452918516606085015284166080840152831660a083015290911660c082015260e0016104ba565b348015610cfc57600080fd5b50610507610d0b366004614de4565b612de8565b348015610d1c57600080fd5b50610507610d2b366004614eaf565b612e56565b348015610d3c57600080fd5b50610507610d4b366004615135565b612eeb565b348015610d5c57600080fd5b506104d9610d6b366004614eaf565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610da257600080fd5b50610507610db13660046151a9565b6130e6565b348015610dc257600080fd5b506104d960155481565b348015610dd857600080fd5b50610507610de7366004615057565b61316d565b348015610df857600080fd5b50610507610e073660046150af565b613528565b348015610e1857600080fd5b506019546106529060ff1681565b348015610e3257600080fd5b506104d9601a5481565b348015610e4857600080fd5b506104d9613614565b348015610e5d57600080fd5b50600d54600e54600f54610e7e926001600160a01b03908116928116911683565b604080516001600160a01b03948516815292841660208401529216918101919091526060016104ba565b348015610eb457600080fd5b50610507610ec33660046151c7565b61369b565b348015610ed457600080fd5b5060145461065290610100900460ff1681565b348015610ef357600080fd5b50610652610f02366004615057565b61374d565b6000546001600160a01b03163314610f665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6019546040517f05bbedb600000000000000000000000000000000000000000000000000000000815263010000009091046001600160a01b0316906305bbedb690610fb79085908590600401615228565b600060405180830381600087803b158015610fd157600080fd5b505af1158015610fe5573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146110475760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b60fa8110156110985760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610f5d565b6019546040517f092316020000000000000000000000000000000000000000000000000000000081526004810183905263010000009091046001600160a01b0316906309231602906024015b600060405180830381600087803b1580156110fe57600080fd5b505af1158015611112573d6000803e3d6000fd5b5050505050565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906111749086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b031633146111e05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b6111eb81600a61535f565b6111f5908361536b565b6012546040517f8cd7f02e00000000000000000000000000000000000000000000000000000000815260048101869052602481018390529193506001600160a01b031690638cd7f02e90604401600060405180830381600087803b15801561125c57600080fd5b505af1158015611270573d6000803e3d6000fd5b50505050505050565b60006112876009600a61538a565b6011546112949190615399565b905090565b60006112a76009600a61538a565b6112b69064e8d4a5100061536b565b6112bf57600080fd5b6112cb6009600a61538a565b6112949064e8d4a5100061536b565b6000546001600160a01b031633146113345760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b6109c48361ffff161115801561135057506109c48261ffff1611155b801561136257506109c48161ffff1611155b61136b57600080fd5b600980547fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff16660100000000000061ffff958616027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff16176801000000000000000093851693909302929092177fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff166a01000000000000000000009190931602919091179055565b6000546001600160a01b0316331461146d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b60195462010000900460ff161561148357600080fd5b6001600160a01b03811630148015906114a557506001600160a01b0382163014155b80156114c35750816001600160a01b0316816001600160a01b031614155b6114cc57600080fd5b6012805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03928316179055601980547fffffffffffffffffff0000000000000000000000000000000000000000ffffff1663010000009390921692909202179055565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914611592576001600160a01b03841660009081526004602090815260408083203384529091528120805484929061158c9084906153d4565b90915550505b61159d8484846137dc565b949350505050565b6000546001600160a01b031633146115ff5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b6103e861160e6009600a61538a565b61161d9064e8d4a5100061536b565b6116279190615399565b81836116356009600a61538a565b6116449064e8d4a5100061536b565b61164e919061536b565b6116589190615399565b10156116cc5760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610f5d565b80826116da6009600a61538a565b6116e99064e8d4a5100061536b565b6116f3919061536b565b6116fd9190615399565b6011555050565b80518251146117555760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610f5d565b60005b82518160ff16101561182057818160ff1681518110611779576117796153eb565b60200260200101516117a0336001600160a01b031660009081526001602052604090205490565b10156117ab57600080fd5b61180d33848360ff16815181106117c4576117c46153eb565b60200260200101516009600a6117da919061538a565b858560ff16815181106117ef576117ef6153eb565b6020026020010151611801919061536b565b60008060006001613c23565b50806118188161541a565b915050611758565b505050565b3330148061183d57506000546001600160a01b031633145b61184657600080fd5b6201518081111561185657600080fd5b611860814261543a565b601a5550565b6000546001600160a01b031633146118c05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b6019546040517f0109da69000000000000000000000000000000000000000000000000000000008152851515600482015284151560248201528315156044820152821515606482015263010000009091046001600160a01b031690630109da6990608401600060405180830381600087803b15801561193e57600080fd5b505af1158015611952573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031633146119b65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b6109c48361ffff16111580156119d257506109c48261ffff1611155b80156119e457506109c48161ffff1611155b6119ed57600080fd5b6009805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b03163314611aba5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b6019546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526301000000909204909116906333251a0b906024016110e4565b6000546001600160a01b03163314611b675760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b8385611b756009600a61538a565b611b849064e8d4a5100061536b565b611b8e919061536b565b611b989190615399565b6017558183611ba96009600a61538a565b611bb89064e8d4a5100061536b565b611bc2919061536b565b611bcc9190615399565b60185560155550505050565b6000546001600160a01b03163314611c325760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611cb75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b6103e8611cc66009600a61538a565b611cd59064e8d4a5100061536b565b611cdf9190615399565b8183611ced6009600a61538a565b611cfc9064e8d4a5100061536b565b611d06919061536b565b611d109190615399565b1015611d845760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610f5d565b8082611d926009600a61538a565b611da19064e8d4a5100061536b565b611dab919061536b565b611db59190615399565b6010555050565b6000546001600160a01b03163314611e165760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b6001600160a01b038116611e925760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610f5d565b6001600160a01b03811661dead1415611f135760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610f5d565b600080546001600160a01b039081168252600560208181526040808520805460ff1990811690915585548516865260078084528287208054831690558786168752938352818620805482166001908117909155938352818620805490911684179055845490931684525290205415611fae57600080546001600160a01b03168082526001602052604090912054611fac919083906137dc565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146120605760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b61206b81600a61535f565b612075908361536b565b47101561208157600080fd5b6040805160028082526060820183526000926020830190803683375050600b54604080517fad5c464800000000000000000000000000000000000000000000000000000000815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612104573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121289190615452565b8160008151811061213b5761213b6153eb565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061216f5761216f6153eb565b6001600160a01b039283166020918202929092010152600b541663b6f9de9561219984600a61535f565b6121a3908661536b565b60008461dead426040518663ffffffff1660e01b81526004016121c9949392919061546f565b6000604051808303818588803b1580156121e257600080fd5b505af11580156121f6573d6000803e3d6000fd5b505050505061220484611825565b50505050565b6000546001600160a01b031633146122645760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6012546040517fd59b2ffd0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063d59b2ffd906024015b602060405180830381865afa1580156122f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118091906154a4565b6012546040517f5e6056bb0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526060928392839283921690635e6056bb90602401600060405180830381865afa158015612382573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123aa9190810190615521565b93509350935093509193509193565b6000546001600160a01b031633146124135760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b601260009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be476040518263ffffffff1660e01b81526004016000604051808303818588803b15801561246357600080fd5b505af193505050508015612475575060015b50565b6000546001600160a01b031633146124d25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b6001600160a01b03821630148015906124f95750600c546001600160a01b03838116911614155b61250257600080fd5b6001600160a01b0382166000908152600760205260409020805460ff19168215801591909117909155612581576012546040517fdf047e9e0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152600060248301529091169063df047e9e90604401610fb7565b6012546001600160a01b03838116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401610fb7565b5050565b60006125f56009600a61538a565b6010546112949190615399565b6000546001600160a01b0316331461265c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b600080546001600160a01b039081168252600560209081526040808420805460ff199081169091558454909316845260079091528083208054909216909155815473ffffffffffffffffffffffffffffffffffffffff191682555181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b0316331461273a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b806127b2576001600160a01b03828116600081815260026020526040808220805460ff1916905560195490517f80c581d10000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915263010000009004909116906380c581d190604401610fb7565b60035415612819576203f480600354426127cc91906153d4565b116128195760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610f5d565b6001600160a01b0382811660008181526002602052604090819020805460ff191660019081179091554260035560195491517f80c581d10000000000000000000000000000000000000000000000000000000081526004810193909352602483015263010000009004909116906380c581d190604401610fb7565b600080546001600160a01b031633146128ef5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b600b546129099030906001600160a01b0316600019613eda565b50600190565b6000546001600160a01b031633146129695760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b601954610100900460ff16156129c15760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610f5d565b60195462010000900460ff16612a195760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610f5d565b601954630100000090046001600160a01b0316612a6157601980547fffffffffffffffffff0000000000000000000000000000000000000000ffffff16306301000000021790555b601954600c546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff421660448201526009606482015263010000009092041690636c115c3490608401600060405180830381600087803b158015612aed57600080fd5b505af1925050508015612afe575060015b50601260009054906101000a90046001600160a01b03166001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612b4f57600080fd5b505af1925050508015612b60575060015b506019805461ff001916610100179055600c546001600160a01b031660009081526001602052604090205461271090612b9a90600561536b565b612ba49190615399565b601755600c546001600160a01b03166000908152600160205260409020546103e890612bd190600161536b565b612bdb9190615399565b601855565b6000546001600160a01b03163314612c3a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b600f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6012546040517f2e6f0efd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690632e6f0efd90602401600060405180830381600087803b158015612cc757600080fd5b505af1158015612204573d6000803e3d6000fd5b6000612ce83384846137dc565b9392505050565b6012546040517ff6ed20170000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063f6ed2017906024016122d7565b6000546001600160a01b03163314612d955760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b6019546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015263010000009092049091169063c6a276c2906024016110e4565b6000546001600160a01b03163314612e425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b620b71b08110612e5157600080fd5b601355565b6000546001600160a01b03163314612eb05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b600d80546001600160a01b0393841673ffffffffffffffffffffffffffffffffffffffff1991821617909155600e8054929093169116179055565b6000546001600160a01b03163314612f455760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b61ffff811615612f6457600f546001600160a01b0316612f6457600080fd5b600a805461ffff8881167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909216919091176201000088831602177fffffffffffffffffffffffffffffffffffffffffffff0000ffff0000ffffffff16640100000000878316027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff16176801000000000000000086831602177fffffffffffffffffffffffffffffffffffffffff0000ffff0000ffffffffffff166601000000000000858316027fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff16176a01000000000000000000009184169190910217905580828486613072898b6155ce565b61307c91906155ce565b61308691906155ce565b61309091906155ce565b61309a91906155ce565b600a805461ffff929092166c01000000000000000000000000027fffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffff909216919091179055505050505050565b6000546001600160a01b031633146131405760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b6014805461ff00191661010093151593909302929092179091556019805460ff1916911515919091179055565b6000546001600160a01b031633146131c75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561320c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132309190615452565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561327d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a19190615452565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015613304573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133289190615452565b90506001600160a01b0381166134c657816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613376573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061339a9190615452565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061340b9190615452565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015613470573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134949190615452565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790556134ef565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155611820903090600019613eda565b6000546001600160a01b031633146135825760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b6019546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152831515602483015263010000009092049091169063eec2744e90604401600060405180830381600087803b1580156135f257600080fd5b505af1158015613606573d6000803e3d6000fd5b505050506125e38282612478565b601254604080517f5695fa5800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691635695fa589160048083019260209291908290030181865afa158015613677573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129491906154a4565b6000546001600160a01b031633146136f55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f5d565b80613700576000601a555b6019805491151577010000000000000000000000000000000000000000000000027fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6019546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015260009263010000009004169063fe575a8790602401602060405180830381865afa1580156137b8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118091906155f4565b60006001600160a01b03841661385a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610f5d565b6001600160a01b0383166138d65760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610f5d565b6000821161394c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610f5d565b6001600160a01b0384166000908152600260205260408120548190819060ff161561397a57600192506139a8565b6001600160a01b03861660009081526002602052604090205460ff16156139a457600191506139a8565b5060015b6139b28787614032565b15613bbd57601954610100900460ff16613a0e5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610f5d565b8280613a175750815b15613adb576001600160a01b03871660009081526006602052604090205460ff16158015613a5e57506001600160a01b03861660009081526006602052604090205460ff16155b15613adb57601054851115613adb5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610f5d565b600b546001600160a01b03878116911614801590613af7575081155b15613bbd576001600160a01b03861660009081526006602052604090205460ff16613bbd5760115485613b3f886001600160a01b031660009081526001602052604090205490565b613b49919061543a565b1115613bbd5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610f5d565b6001600160a01b03871660009081526005602052604090205460019060ff1680613bff57506001600160a01b03871660009081526005602052604090205460ff165b15613c08575060005b613c1788888884888888613c23565b98975050505050505050565b60195460009062010000900460ff16613cd157613c408888614103565b60195462010000900460ff16158015613c5e5750613c5e8888614032565b15613cd15760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610f5d565b613cdb8888614032565b15613d8f576019546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038a8116600483015289811660248301526044820189905260009263010000009004169063ecd07a53906064016020604051808303816000875af1925050508015613d78575060408051601f3d908101601f19168201909252613d75918101906155f4565b60015b613d8157600080fd5b905080613d8d57600080fd5b505b6001600160a01b03881660009081526001602052604081208054889290613db79084906153d4565b90915550508215613e2f5760145460ff16158015613ddc5750601454610100900460ff165b15613e2f5742601554601654613df2919061543a565b1015613e2f57306000908152600160205260409020546017548110613e2d576018548110613e1f57506018545b613e28816142b2565b426016555b505b858515613e4657613e4389888787876148e3565b90505b6001600160a01b03881660009081526001602052604081208054839290613e6e90849061543a565b90915550613e7e90508989614a2c565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613ec391815260200190565b60405180910390a350600198975050505050505050565b6001600160a01b038316613f555760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610f5d565b6001600160a01b038216613fd15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610f5d565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600080546001600160a01b0384811691161480159061405f57506000546001600160a01b03838116911614155b801561407657506000546001600160a01b03163214155b801561409b57506001600160a01b03821660009081526008602052604090205460ff16155b80156140c057506001600160a01b03831660009081526008602052604090205460ff16155b80156140d757506001600160a01b03821661dead14155b80156140eb57506001600160a01b03821615155b8015612ce8575050506001600160a01b031630141590565b60195462010000900460ff16156141825760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610f5d565b61418c8282614032565b1580156141a65750600c546001600160a01b038281169116145b156125e3576001600160a01b038083166000908152600860205260409020805460ff19166001179055601980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff16620100001790819055630100000090041661423b57601980547fffffffffffffffffff0000000000000000000000000000000000000000ffffff16306301000000021790555b6012546001600160a01b031661426b576012805473ffffffffffffffffffffffffffffffffffffffff1916301790555b6014805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6014805460ff191660011790556040805160e081018252600a5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000810483166060830152680100000000000000008104831660808301526a01000000000000000000008104831660a08301526c01000000000000000000000000900490911660c0820181905261434f57506148d6565b306000908152600460209081526040808320600b546001600160a01b03168452909152902054600019146143a857306000908152600460209081526040808320600b546001600160a01b03168452909152902060001990555b600060028260c0015161ffff16836020015161ffff16856143c9919061536b565b6143d39190615399565b6143dd9190615399565b905060006143eb82856153d4565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110614425576144256153eb565b6001600160a01b03928316602091820292909201810191909152600b54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015614497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144bb9190615452565b816001815181106144ce576144ce6153eb565b6001600160a01b039283166020918202929092010152600b546040517f791ac9470000000000000000000000000000000000000000000000000000000081524792919091169063791ac94790614531908690600090879030904290600401615611565b600060405180830381600087803b15801561454b57600080fd5b505af115801561455f573d6000803e3d6000fd5b505050506000814761457191906153d4565b9050600084614580878461536b565b61458a9190615399565b9050851561467b57600b546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101889052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015614619573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061463e919061564d565b505060408051838152602081018990527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b61468581836153d4565b915086602001518760c00181815161469d919061567b565b61ffff90811690915260c0890151895160009350908216916146c091168561536b565b6146ca9190615399565b905060008860c0015161ffff16896080015161ffff16856146eb919061536b565b6146f59190615399565b905060008960c0015161ffff168a6060015161ffff1686614716919061536b565b6147209190615399565b905060008a60c0015161ffff168b60a0015161ffff1687614741919061536b565b61474b9190615399565b90506000818361475b868861543a565b614765919061543a565b61476f919061543a565b61477990886153d4565b8c5190915061ffff16156147eb57601260009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be866040518263ffffffff1660e01b81526004016000604051808303818588803b1580156147d757600080fd5b505af1935050505080156147e9575060015b505b60808c015161ffff161561483557600e546040516001600160a01b039091169085156108fc029086906000818181858888f19350505050158015614833573d6000803e3d6000fd5b505b60408c015161ffff161561487f57600d546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561487d573d6000803e3d6000fd5b505b60a08c015161ffff16156148c957600f546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156148c7573d6000803e3d6000fd5b505b5050505050505050505050505b506014805460ff19169055565b600080601a5442101561494757841561490d57506009546601000000000000900461ffff16614984565b831561492c575060095468010000000000000000900461ffff16614984565b506009546a0100000000000000000000900461ffff16614984565b841561495a575060095461ffff16614984565b8315614973575060095462010000900461ffff16614984565b50600954640100000000900461ffff165b806149925785915050614a23565b60006127106149a1838961536b565b6149ab9190615399565b306000908152600160205260408120805492935083929091906149cf90849061543a565b909155505060405181815230906001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3614a1e81886153d4565b925050505b95945050505050565b6001600160a01b03821660009081526007602052604090205460ff16614ad6576012546001600160a01b03838116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b158015614ac357600080fd5b505af1925050508015614ad4575060015b505b6001600160a01b03811660009081526007602052604090205460ff16614b80576012546001600160a01b03828116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b158015614b6d57600080fd5b505af1925050508015614b7e575060015b505b60195460ff16156125e3576012546013546040517fa9e732bb0000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163a9e732bb91614bd99160040190815260200190565b600060405180830381600087803b158015614bf357600080fd5b505af1925050508015614c04575060015b6125e3575050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614c6457614c64614c0c565b604052919050565b600067ffffffffffffffff821115614c8657614c86614c0c565b5060051b60200190565b6001600160a01b038116811461247557600080fd5b600082601f830112614cb657600080fd5b81356020614ccb614cc683614c6c565b614c3b565b82815260059290921b84018101918181019086841115614cea57600080fd5b8286015b84811015614d0e578035614d0181614c90565b8352918301918301614cee565b509695505050505050565b801515811461247557600080fd5b60008060408385031215614d3a57600080fd5b823567ffffffffffffffff811115614d5157600080fd5b614d5d85828601614ca5565b9250506020830135614d6e81614d19565b809150509250929050565b60005b83811015614d94578181015183820152602001614d7c565b838111156122045750506000910152565b60008151808452614dbd816020860160208601614d79565b601f01601f19169290920160200192915050565b602081526000612ce86020830184614da5565b600060208284031215614df657600080fd5b5035919050565b60008060408385031215614e1057600080fd5b8235614e1b81614c90565b946020939093013593505050565b600080600060608486031215614e3e57600080fd5b505081359360208301359350604090920135919050565b803561ffff81168114614e6757600080fd5b919050565b600080600060608486031215614e8157600080fd5b614e8a84614e55565b9250614e9860208501614e55565b9150614ea660408501614e55565b90509250925092565b60008060408385031215614ec257600080fd5b8235614ecd81614c90565b91506020830135614d6e81614c90565b600080600060608486031215614ef257600080fd5b8335614efd81614c90565b92506020840135614f0d81614c90565b929592945050506040919091013590565b60008060408385031215614f3157600080fd5b50508035926020909101359150565b60008060408385031215614f5357600080fd5b823567ffffffffffffffff80821115614f6b57600080fd5b614f7786838701614ca5565b9350602091508185013581811115614f8e57600080fd5b85019050601f81018613614fa157600080fd5b8035614faf614cc682614c6c565b81815260059190911b82018301908381019088831115614fce57600080fd5b928401925b82841015614fec57833582529284019290840190614fd3565b80955050505050509250929050565b6000806000806080858703121561501157600080fd5b843561501c81614d19565b9350602085013561502c81614d19565b9250604085013561503c81614d19565b9150606085013561504c81614d19565b939692955090935050565b60006020828403121561506957600080fd5b8135612ce881614c90565b600080600080600060a0868803121561508c57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080604083850312156150c257600080fd5b82356150cd81614c90565b91506020830135614d6e81614d19565b6080815260006150f06080830187614da5565b82810360208401526151028187614da5565b905082810360408401526151168186614da5565b9050828103606084015261512a8185614da5565b979650505050505050565b60008060008060008060c0878903121561514e57600080fd5b61515787614e55565b955061516560208801614e55565b945061517360408801614e55565b935061518160608801614e55565b925061518f60808801614e55565b915061519d60a08801614e55565b90509295509295509295565b600080604083850312156151bc57600080fd5b82356150cd81614d19565b6000602082840312156151d957600080fd5b8135612ce881614d19565b600081518084526020808501945080840160005b8381101561521d5781516001600160a01b0316875295820195908201906001016151f8565b509495945050505050565b60408152600061523b60408301856151e4565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156152b657816000190482111561529c5761529c61524c565b808516156152a957918102915b93841c9390800290615280565b509250929050565b6000826152cd57506001611180565b816152da57506000611180565b81600181146152f057600281146152fa57615316565b6001915050611180565b60ff84111561530b5761530b61524c565b50506001821b611180565b5060208310610133831016604e8410600b8410161715615339575081810a611180565b615343838361527b565b80600019048211156153575761535761524c565b029392505050565b6000612ce883836152be565b60008160001904831182151516156153855761538561524c565b500290565b6000612ce860ff8416836152be565b6000826153cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156153e6576153e661524c565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff8114156154315761543161524c565b60010192915050565b6000821982111561544d5761544d61524c565b500190565b60006020828403121561546457600080fd5b8151612ce881614c90565b84815260806020820152600061548860808301866151e4565b6001600160a01b03949094166040830152506060015292915050565b6000602082840312156154b657600080fd5b5051919050565b600082601f8301126154ce57600080fd5b815167ffffffffffffffff8111156154e8576154e8614c0c565b6154fb6020601f19601f84011601614c3b565b81815284602083860101111561551057600080fd5b61159d826020830160208701614d79565b6000806000806080858703121561553757600080fd5b845167ffffffffffffffff8082111561554f57600080fd5b61555b888389016154bd565b9550602087015191508082111561557157600080fd5b61557d888389016154bd565b9450604087015191508082111561559357600080fd5b61559f888389016154bd565b935060608701519150808211156155b557600080fd5b506155c2878288016154bd565b91505092959194509250565b600061ffff8083168185168083038211156155eb576155eb61524c565b01949350505050565b60006020828403121561560657600080fd5b8151612ce881614d19565b85815284602082015260a06040820152600061563060a08301866151e4565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561566257600080fd5b8351925060208401519150604084015190509250925092565b600061ffff838116908316818110156156965761569661524c565b03939250505056fea2646970667358221220254e3937c5afd3f22263223edd4aa2a15dea222afaafa299f77ba5571772389a64736f6c634300080c0033

Deployed Bytecode Sourcemap

5043:27079:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6987:73;;;;;;;;;;;;7018:42;6987:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;6987:73:0;;;;;;;;7856:52;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;7856:52:0;245:177:1;14306:172:0;;;;;;;;;;-1:-1:-1;14306:172:0;;;;;:::i;:::-;;:::i;:::-;;6310:203;;;;;;;;;;-1:-1:-1;6310:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2934:6:1;2967:15;;;2949:34;;3019:15;;;3014:2;2999:18;;2992:43;3071:15;;;3051:18;;;3044:43;;;;3123:15;;;3118:2;3103:18;;3096:43;3176:15;;3170:3;3155:19;;3148:44;3229:15;;;3223:3;3208:19;;3201:44;2911:3;2896:19;6310:203:0;2649:602:1;12456:80:0;;;;;;;;;;-1:-1:-1;12528:5:0;;;;;;;;;;;;;;;;;12456:80;;;;;;;:::i;6924:26::-;;;;;;;;;;-1:-1:-1;6924:26:0;;;;-1:-1:-1;;;;;6924:26:0;;;15423:150;;;;;;;;;;-1:-1:-1;15423:150:0;;;;;:::i;:::-;;:::i;12877:216::-;;;;;;;;;;-1:-1:-1;12877:216:0;;;;;:::i;:::-;;:::i;:::-;;;4984:14:1;;4977:22;4959:41;;4947:2;4932:18;12877:216:0;4819:187:1;18327:277:0;;;;;;;;;;-1:-1:-1;18327:277:0;;;;;:::i;:::-;;:::i;22306:112::-;;;;;;;;;;;;;:::i;12159:115::-;;;;;;;;;;;;;:::i;16539:375::-;;;;;;;;;;-1:-1:-1;16539:375:0;;;;;:::i;:::-;;:::i;14619:337::-;;;;;;;;;;-1:-1:-1;14619:337:0;;;;;:::i;:::-;;:::i;13791:306::-;;;;;;;;;;-1:-1:-1;13791:306:0;;;;;:::i;:::-;;:::i;21917:267::-;;;;;;;;;;-1:-1:-1;21917:267:0;;;;;:::i;:::-;;:::i;31579:408::-;;;;;;;;;;-1:-1:-1;31579:408:0;;;;;:::i;:::-;;:::i;30687:246::-;;;;;;;;;;-1:-1:-1;30687:246:0;;;;;:::i;:::-;;:::i;15206:209::-;;;;;;;;;;-1:-1:-1;15206:209:0;;;;;:::i;:::-;;:::i;6721:42::-;;;;;;;;;;;;6759:4;6721:42;;7915:50;;;;;;;;;;;;;;;;12280:80;;;;;;;;;;-1:-1:-1;12280:80:0;;5821:1;8873:36:1;;8861:2;8846:18;12280:80:0;8731:184:1;16178:353:0;;;;;;;;;;-1:-1:-1;16178:353:0;;;;;:::i;:::-;;:::i;14964:108::-;;;;;;;;;;-1:-1:-1;14964:108:0;;;;;:::i;:::-;;:::i;17981:338::-;;;;;;;;;;-1:-1:-1;17981:338:0;;;;;:::i;:::-;;:::i;20993:140::-;;;;;;;;;;-1:-1:-1;20993:140:0;;;;;:::i;:::-;;:::i;21640:269::-;;;;;;;;;;-1:-1:-1;21640:269:0;;;;;:::i;:::-;;:::i;6957:21::-;;;;;;;;;;-1:-1:-1;6957:21:0;;;;-1:-1:-1;;;;;6957:21:0;;;8127:39;;;;;;;;;;-1:-1:-1;8127:39:0;;;;;;;;;;;8015:34;;;;;;;;;;-1:-1:-1;8015:34:0;;;;;;;;;;;10827:689;;;;;;;;;;-1:-1:-1;10827:689:0;;;;;:::i;:::-;;:::i;20579:125::-;;;;;;;;;;-1:-1:-1;20579:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;20668:28:0;20644:4;20668:28;;;:19;:28;;;;;;;;;20579:125;8056:36;;;;;;;;;;-1:-1:-1;8056:36:0;;;;;;;;;;;29940:542;;;;;;;;;;-1:-1:-1;29940:542:0;;;;;:::i;:::-;;:::i;21498:134::-;;;;;;;;;;-1:-1:-1;21498:134:0;;;;;:::i;:::-;;:::i;20855:130::-;;;;;;;;;;-1:-1:-1;20855:130:0;;;;;:::i;:::-;-1:-1:-1;;;;;20947:30:0;20923:4;20947:30;;;:21;:30;;;;;;;;;20855:130;19185:154;;;;;;;;;;-1:-1:-1;19185:154:0;;;;;:::i;:::-;;:::i;18985:192::-;;;;;;;;;;-1:-1:-1;18985:192:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;31995:124::-;;;;;;;;;;;;;:::i;21141:349::-;;;;;;;;;;-1:-1:-1;21141:349:0;;;;;:::i;:::-;;:::i;22192:106::-;;;;;;;;;;;;;:::i;12627:103::-;;;;;;;;;;-1:-1:-1;12627:103:0;;;;;:::i;:::-;-1:-1:-1;;;;;12711:16:0;12693:7;12711:16;;;:7;:16;;;;;;;12627:103;11524:245;;;;;;;;;;;;;:::i;20055:516::-;;;;;;;;;;-1:-1:-1;20055:516:0;;;;;:::i;:::-;;:::i;12542:79::-;;;;;;;;;;-1:-1:-1;12594:7:0;12612:6;-1:-1:-1;;;;;12612:6:0;12542:79;;13450:173;;;;;;;;;;;;;:::i;15581:589::-;;;;;;;;;;;;;:::i;12366:84::-;;;;;;;;;;-1:-1:-1;12440:7:0;;;;;;;;;;;;;;;;;12366:84;;17658:114;;;;;;;;;;-1:-1:-1;17658:114:0;;;;;:::i;:::-;;:::i;18751:100::-;;;;;;;;;;;;;:::i;13631:152::-;;;;;;;;;;-1:-1:-1;13631:152:0;;;;;:::i;:::-;;:::i;19347:150::-;;;;;;;;;;-1:-1:-1;19347:150:0;;;;;:::i;:::-;;:::i;15080:118::-;;;;;;;;;;-1:-1:-1;15080:118:0;;;;;:::i;:::-;;:::i;20712:135::-;;;;;;;;;;-1:-1:-1;20712:135:0;;;;;:::i;:::-;-1:-1:-1;;;;;20806:33:0;20782:4;20806:33;;;:24;:33;;;;;;;;;20712:135;6522:190;;;;;;;;;;-1:-1:-1;6522:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11305:6:1;11338:15;;;11320:34;;11390:15;;;11385:2;11370:18;;11363:43;11442:15;;;11422:18;;;11415:43;;;;11494:15;;;11489:2;11474:18;;11467:43;11547:15;;11541:3;11526:19;;11519:44;11600:15;;11594:3;11579:19;;11572:44;11653:15;;;11647:3;11632:19;;11625:44;11282:3;11267:19;6522:190:0;10994:681:1;18612:131:0;;;;;;;;;;-1:-1:-1;18612:131:0;;;;;:::i;:::-;;:::i;17461:189::-;;;;;;;;;;-1:-1:-1;17461:189:0;;;;;:::i;:::-;;:::i;16922:531::-;;;;;;;;;;-1:-1:-1;16922:531:0;;;;;:::i;:::-;;:::i;12736:133::-;;;;;;;;;;-1:-1:-1;12736:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;12838:19:0;;;12820:7;12838:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;12736:133;17780:193;;;;;;;;;;-1:-1:-1;17780:193:0;;;;;:::i;:::-;;:::i;7773:45::-;;;;;;;;;;;;;;;;19505:542;;;;;;;;;;-1:-1:-1;19505:542:0;;;;;:::i;:::-;;:::i;14105:193::-;;;;;;;;;;-1:-1:-1;14105:193:0;;;;;:::i;:::-;;:::i;7972:34::-;;;;;;;;;;-1:-1:-1;7972:34:0;;;;;;;;8173:37;;;;;;;;;;;;;;;;18859:118;;;;;;;;;;;;;:::i;7283:233::-;;;;;;;;;;-1:-1:-1;7283:233:0;;;;;;;;-1:-1:-1;;;;;7283:233:0;;;;;;;;;;;;;;-1:-1:-1;;;;;13351:15:1;;;13333:34;;13403:15;;;13398:2;13383:18;;13376:43;13455:15;;13435:18;;;13428:43;;;;13260:2;13245:18;7283:233:0;13022:455:1;30490:189:0;;;;;;;;;;-1:-1:-1;30490:189:0;;;;;:::i;:::-;;:::i;7727:39::-;;;;;;;;;;-1:-1:-1;7727:39:0;;;;;;;;;;;14486:125;;;;;;;;;;-1:-1:-1;14486:125:0;;;;;:::i;:::-;;:::i;14306:172::-;8356:6;;-1:-1:-1;;;;;8356:6:0;8366:10;8356:20;8348:65;;;;-1:-1:-1;;;8348:65:0;;13930:2:1;8348:65:0;;;13912:21:1;;;13949:18;;;13942:30;14008:34;13988:18;;;13981:62;14060:18;;8348:65:0;;;;;;;;;14414:9:::1;::::0;:56:::1;::::0;;;;:9;;;::::1;-1:-1:-1::0;;;;;14414:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;14452:8;;14462:7;;14414:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14306:172:::0;;:::o;15423:150::-;8356:6;;-1:-1:-1;;;;;8356:6:0;8366:10;8356:20;8348:65;;;;-1:-1:-1;;;8348:65:0;;13930:2:1;8348:65:0;;;13912:21:1;;;13949:18;;;13942:30;14008:34;13988:18;;;13981:62;14060:18;;8348:65:0;13728:356:1;8348:65:0;15507:3:::1;15500;:10;;15492:31;;;::::0;-1:-1:-1;;;15492:31:0;;15127:2:1;15492:31:0::1;::::0;::::1;15109:21:1::0;15166:1;15146:18;;;15139:29;15204:10;15184:18;;;15177:38;15232:18;;15492:31:0::1;14925:331:1::0;15492:31:0::1;15534:9;::::0;:31:::1;::::0;;;;::::1;::::0;::::1;391:25:1::0;;;15534:9:0;;;::::1;-1:-1:-1::0;;;;;15534:9:0::1;::::0;:26:::1;::::0;364:18:1;;15534:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15423:150:::0;:::o;12877:216::-;12981:10;12952:4;12969:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;12969:32:0;;;;;;;;;;:41;;;13026:37;12952:4;;12969:32;;13026:37;;;;13004:6;391:25:1;;379:2;364:18;;245:177;13026:37:0;;;;;;;;-1:-1:-1;13081:4:0;12877:216;;;;;:::o;18327:277::-;8356:6;;-1:-1:-1;;;;;8356:6:0;8366:10;8356:20;8348:65;;;;-1:-1:-1;;;8348:65:0;;13930:2:1;8348:65:0;;;13912:21:1;;;13949:18;;;13942:30;14008:34;13988:18;;;13981:62;14060:18;;8348:65:0;13728:356:1;8348:65:0;18499:27:::1;18503:23:::0;18499:2:::1;:27;:::i;:::-;18482:44;::::0;:14;:44:::1;:::i;:::-;18537:9;::::0;:59:::1;::::0;;;;::::1;::::0;::::1;17351:25:1::0;;;17392:18;;;17385:34;;;18465:61:0;;-1:-1:-1;;;;;;18537:9:0::1;::::0;:31:::1;::::0;17324:18:1;;18537:59:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18327:277:::0;;;:::o;22306:112::-;22351:7;22396:13;5821:1;22396:2;:13;:::i;:::-;22378:14;;:32;;;;:::i;:::-;22371:39;;22306:112;:::o;12159:115::-;12214:7;5884:15;5821:1;5884:2;:15;:::i;:::-;5866:34;;5659:17;5866:34;:::i;:::-;12225:31;;12245:8;;;12225:31;5884:15;5821:1;5884:2;:15;:::i;:::-;5866:34;;5659:17;5866:34;:::i;16539:375::-;8356:6;;-1:-1:-1;;;;;8356:6:0;8366:10;8356:20;8348:65;;;;-1:-1:-1;;;8348:65:0;;13930:2:1;8348:65:0;;;13912:21:1;;;13949:18;;;13942:30;14008:34;13988:18;;;13981:62;14060:18;;8348:65:0;13728:356:1;8348:65:0;6759:4:::1;16653:6;:21;;;;:65;;;;;6809:4;16695:7;:23;;;;16653:65;:117;;;;;6863:4;16739:11;:31;;;;16653:117;16645:126;;;::::0;::::1;;16782:9;:30:::0;;16823:32;;16782:30;::::1;::::0;;::::1;;16823:32:::0;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;16866:40:::0;::::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;16539:375::o;14619:337::-;8356:6;;-1:-1:-1;;;;;8356:6:0;8366:10;8356:20;8348:65;;;;-1:-1:-1;;;8348:65:0;;13930:2:1;8348:65:0;;;13912:21:1;;;13949:18;;;13942:30;14008:34;13988:18;;;13981:62;14060:18;;8348:65:0;13728:356:1;8348:65:0;14727:16:::1;::::0;;;::::1;;;14726:17;14718:26;;;::::0;::::1;;-1:-1:-1::0;;;;;14763:29:0;::::1;14787:4;14763:29;::::0;::::1;::::0;:62:::1;;-1:-1:-1::0;;;;;;14796:29:0;::::1;14820:4;14796:29;;14763:62;:94;;;;;14845:12;-1:-1:-1::0;;;;;14829:28:0::1;:12;-1:-1:-1::0;;;;;14829:28:0::1;;;14763:94;14755:103;;;::::0;::::1;;14869:9;:33:::0;;-1:-1:-1;;14869:33:0::1;-1:-1:-1::0;;;;;14869:33:0;;::::1;;::::0;;14913:9:::1;:35:::0;;;::::1;::::0;;;;::::1;::::0;;;::::1;;::::0;;14619:337::o;13791:306::-;-1:-1:-1;;;;;13912:19:0;;13891:4;13912:19;;;:11;:19;;;;;;;;13932:10;13912:31;;;;;;;;-1:-1:-1;;13912:52:0;13908:126;;-1:-1:-1;;;;;13981:19:0;;;;;;:11;:19;;;;;;;;14001:10;13981:31;;;;;;;:41;;14016:6;;13981:19;:41;;14016:6;;13981:41;:::i;:::-;;;;-1:-1:-1;;13908:126:0;14053:36;14063:6;14071:9;14082:6;14053:9;:36::i;:::-;14046:43;13791:306;-1:-1:-1;;;;13791:306:0:o;21917:267::-;8356:6;;-1:-1:-1;;;;;8356:6:0;8366:10;8356:20;8348:65;;;;-1:-1:-1;;;8348:65:0;;13930:2:1;8348:65:0;;;13912:21:1;;;13949:18;;;13942:30;14008:34;13988:18;;;13981:62;14060:18;;8348:65:0;13728:356:1;8348:65:0;22059:4:::1;5884:15;5821:1;5884:2;:15;:::i;:::-;5866:34;::::0;5659:17:::1;5866:34;:::i;:::-;22049:14;;;;:::i;:::-;22037:7:::0;22026;5884:15:::1;5821:1;5884:2;:15;:::i;:::-;5866:34;::::0;5659:17:::1;5866:34;:::i;:::-;22016:17;;;;:::i;:::-;22015:29;;;;:::i;:::-;:49;;22007:112;;;::::0;-1:-1:-1;;;22007:112:0;;18186:2:1;22007:112:0::1;::::0;::::1;18168:21:1::0;18225:2;18205:18;;;18198:30;18264:34;18244:18;;;18237:62;18335:20;18315:18;;;18308:48;18373:19;;22007:112:0::1;17984:414:1::0;22007:112:0::1;22169:7:::0;22158;5884:15:::1;5821:1;5884:2;:15;:::i;:::-;5866:34;::::0;5659:17:::1;5866:34;:::i;:::-;22148:17;;;;:::i;:::-;22147:29;;;;:::i;:::-;22130:14;:46:::0;-1:-1:-1;;21917:267:0:o;31579:408::-;31704:7;:14;31685:8;:15;:33;31677:67;;;;-1:-1:-1;;;31677:67:0;;18605:2:1;31677:67:0;;;18587:21:1;18644:2;18624:18;;;18617:30;18683:23;18663:18;;;18656:51;18724:18;;31677:67:0;18403:345:1;31677:67:0;31760:7;31755:225;31777:8;:15;31773:1;:19;;;31755:225;;;31847:7;31855:1;31847:10;;;;;;;;;;:::i;:::-;;;;;;;31822:21;31832:10;-1:-1:-1;;;;;12711:16:0;12693:7;12711:16;;;:7;:16;;;;;;;12627:103;31822:21;:35;;31814:44;;;;;;31873:95;31891:10;31903:8;31912:1;31903:11;;;;;;;;;;:::i;:::-;;;;;;;5821:1;31927:2;:13;;;;:::i;:::-;31916:7;31924:1;31916:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;31942:5;31949;31956;31963:4;31873:17;:95::i;:::-;-1:-1:-1;31794:3:0;;;;:::i;:::-;;;;31755:225;;;;31579:408;;:::o;30687:246::-;30761:10;30783:4;30761:27;;:51;;-1:-1:-1;30806:6:0;;-1:-1:-1;;;;;30806:6:0;30792:10;:20;30761:51;30753:60;;;;;;30849:8;30832:13;:25;;30824:34;;;;;;30894:31;30912:13;30894:15;:31;:::i;:::-;30869:22;:56;-1:-1:-1;30687:246:0:o;15206:209::-;8356:6;;-1:-1:-1;;;;;8356:6:0;8366:10;8356:20;8348:65;;;;-1:-1:-1;;;8348:65:0;;13930:2:1;8348:65:0;;;13912:21:1;;;13949:18;;;13942:30;14008:34;13988:18;;;13981:62;14060:18;;8348:65:0;13728:356:1;8348:65:0;15335:9:::1;::::0;:72:::1;::::0;;;;19487:14:1;;19480:22;15335:72:0::1;::::0;::::1;19462:41:1::0;19546:14;;19539:22;19519:18;;;19512:50;19605:14;;19598:22;19578:18;;;19571:50;19664:14;;19657:22;19637:18;;;19630:50;15335:9:0;;;::::1;-1:-1:-1::0;;;;;15335:9:0::1;::::0;:24:::1;::::0;19434:19:1;;15335:72:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15206:209:::0;;;;:::o;16178:353::-;8356:6;;-1:-1:-1;;;;;8356:6:0;8366:10;8356:20;8348:65;;;;-1:-1:-1;;;8348:65:0;;13930:2:1;8348:65:0;;;13912:21:1;;;13949:18;;;13942:30;14008:34;13988:18;;;13981:62;14060:18;;8348:65:0;13728:356:1;8348:65:0;6759:4:::1;16285:6;:21;;;;:65;;;;;6809:4;16327:7;:23;;;;16285:65;:117;;;;;6863:4;16371:11;:31;;;;16285:117;16277:126;;;::::0;::::1;;16414:9;:25:::0;;::::1;::::0;;::::1;16450:27:::0;;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;16488:35:::0;::::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;16178:353::o;14964:108::-;8356:6;;-1:-1:-1;;;;;8356:6:0;8366:10;8356:20;8348:65;;;;-1:-1:-1;;;8348:65:0;;13930:2:1;8348:65:0;;;13912:21:1;;;13949:18;;;13942:30;14008:34;13988:18;;;13981:62;14060:18;;8348:65:0;13728:356:1;8348:65:0;15033:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;15033:31:0::1;::::0;::::1;160:74:1::0;15033:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;15033:31:0::1;14:226:1::0;17981:338:0;8356:6;;-1:-1:-1;;;;;8356:6:0;8366:10;8356:20;8348:65;;;;-1:-1:-1;;;8348:65:0;;13930:2:1;8348:65:0;;;13912:21:1;;;13949:18;;;13942:30;14008:34;13988:18;;;13981:62;14060:18;;8348:65:0;13728:356:1;8348:65:0;18195:16;18175;5884:15:::1;5821:1;5884:2;:15;:::i;:::-;5866:34;::::0;5659:17:::1;5866:34;:::i;:::-;18165:26;;;;:::i;:::-;18164:47;;;;:::i;:::-;18148:13;:63:::0;18263:13;18246;5884:15:::1;5821:1;5884:2;:15;:::i;:::-;5866:34;::::0;5659:17:::1;5866:34;:::i;:::-;18236:23;;;;:::i;:::-;18235:41;;;;:::i;:::-;18222:10;:54:::0;18287:17:::1;:24:::0;-1:-1:-1;;;;17981:338:0:o;20993:140::-;8356:6;;-1:-1:-1;;;;;8356:6:0;8366:10;8356:20;8348:65;;;;-1:-1:-1;;;8348:65:0;;13930:2:1;8348:65:0;;;13912:21:1;;;13949:18;;;13942:30;14008:34;13988:18;;;13981:62;14060:18;;8348:65:0;13728:356:1;8348:65:0;-1:-1:-1;;;;;21085:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;21085:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20993:140::o;21640:269::-;8356:6;;-1:-1:-1;;;;;8356:6:0;8366:10;8356:20;8348:65;;;;-1:-1:-1;;;8348:65:0;;13930:2:1;8348:65:0;;;13912:21:1;;;13949:18;;;13942:30;14008:34;13988:18;;;13981:62;14060:18;;8348:65:0;13728:356:1;8348:65:0;21781:4:::1;5884:15;5821:1;5884:2;:15;:::i;:::-;5866:34;::::0;5659:17:::1;5866:34;:::i;:::-;21771:14;;;;:::i;:::-;21759:7:::0;21748;5884:15:::1;5821:1;5884:2;:15;:::i;:::-;5866:34;::::0;5659:17:::1;5866:34;:::i;:::-;21738:17;;;;:::i;:::-;21737:29;;;;:::i;:::-;:49;;21729:117;;;::::0;-1:-1:-1;;;21729:117:0;;19893:2:1;21729:117:0::1;::::0;::::1;19875:21:1::0;19932:2;19912:18;;;19905:30;19971:34;19951:18;;;19944:62;20042:25;20022:18;;;20015:53;20085:19;;21729:117:0::1;19691:419:1::0;21729:117:0::1;21894:7:::0;21883;5884:15:::1;5821:1;5884:2;:15;:::i;:::-;5866:34;::::0;5659:17:::1;5866:34;:::i;:::-;21873:17;;;;:::i;:::-;21872:29;;;;:::i;:::-;21857:12;:44:::0;-1:-1:-1;;21640:269:0:o;10827:689::-;8356:6;;-1:-1:-1;;;;;8356:6:0;8366:10;8356:20;8348:65;;;;-1:-1:-1;;;8348:65:0;;13930:2:1;8348:65:0;;;13912:21:1;;;13949:18;;;13942:30;14008:34;13988:18;;;13981:62;14060:18;;8348:65:0;13728:356:1;8348:65:0;-1:-1:-1;;;;;10906:22:0;::::1;10898:96;;;::::0;-1:-1:-1;;;10898:96:0;;20317:2:1;10898:96:0::1;::::0;::::1;20299:21:1::0;20356:2;20336:18;;;20329:30;20395:34;20375:18;;;20368:62;20466:31;20446:18;;;20439:59;20515:19;;10898:96:0::1;20115:425:1::0;10898:96:0::1;-1:-1:-1::0;;;;;11013:16:0;::::1;7018:42;11013:16;;11005:90;;;::::0;-1:-1:-1;;;11005:90:0;;20317:2:1;11005:90:0::1;::::0;::::1;20299:21:1::0;20356:2;20336:18;;;20329:30;20395:34;20375:18;;;20368:62;20466:31;20446:18;;;20439:59;20515:19;;11005:90:0::1;20115:425:1::0;11005:90:0::1;11136:5;11126:6:::0;;-1:-1:-1;;;;;11126:6:0;;::::1;11106:27:::0;;:19:::1;:27;::::0;;;;;;;:35;;-1:-1:-1;;11106:35:0;;::::1;::::0;;;11177:6;;;::::1;11152:32:::0;;:24:::1;:32:::0;;;;;;:40;;;::::1;::::0;;11203:29;;::::1;::::0;;;;;;;;:36;;;::::1;11126:6:::0;11203:36;;::::1;::::0;;;11250:34;;;;;;:41;;;;::::1;::::0;::::1;::::0;;11323:6;;;;::::1;11315:15:::0;;;;;;:19;11312:95:::1;;11361:6;::::0;;-1:-1:-1;;;;;11361:6:0::1;11379:15:::0;;;11361:6;11379:15:::1;::::0;;;;;;11351:44:::1;::::0;11361:6;11369:8;;11351:9:::1;:44::i;:::-;;11312:95;11427:6;:17:::0;;-1:-1:-1;;11427:17:0::1;-1:-1:-1::0;;;;;11427:17:0;::::1;::::0;;::::1;::::0;;11460:38:::1;::::0;11427:17;;;;11460:38:::1;::::0;11427:6;11460:38:::1;10827:689:::0;:::o;29940:542::-;8356:6;;-1:-1:-1;;;;;8356:6:0;8366:10;8356:20;8348:65;;;;-1:-1:-1;;;8348:65:0;;13930:2:1;8348:65:0;;;13912:21:1;;;13949:18;;;13942:30;14008:34;13988:18;;;13981:62;14060:18;;8348:65:0;13728:356:1;8348:65:0;30091:14:::1;30095:10:::0;30091:2:::1;:14;:::i;:::-;30082:23;::::0;:6;:23:::1;:::i;:::-;30057:21;:48;;30049:57;;;::::0;::::1;;30141:16;::::0;;30155:1:::1;30141:16:::0;;;;;::::1;::::0;;30117:21:::1;::::0;30141:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;30178:9:0::1;::::0;:16:::1;::::0;;;;;;;30117:40;;-1:-1:-1;;;;;;30178:9:0;;::::1;::::0;:14:::1;::::0;-1:-1:-1;30178:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30168:4;30173:1;30168:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1::0;;;;;30168:26:0::1;;;-1:-1:-1::0;;;;;30168:26:0::1;;;::::0;::::1;30223:4;30205;30210:1;30205:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30205:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;30241:9:::1;::::0;::::1;:60;30326:14;30330:10:::0;30326:2:::1;:14;:::i;:::-;30319:21;::::0;:6;:21:::1;:::i;:::-;30357:1;30373:4;7018:42;30411:15;30241:196;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;30448:26;30464:9;30448:15;:26::i;:::-;30038:444;29940:542:::0;;;:::o;21498:134::-;8356:6;;-1:-1:-1;;;;;8356:6:0;8366:10;8356:20;8348:65;;;;-1:-1:-1;;;8348:65:0;;13930:2:1;8348:65:0;;;13912:21:1;;;13949:18;;;13942:30;14008:34;13988:18;;;13981:62;14060:18;;8348:65:0;13728:356:1;8348:65:0;-1:-1:-1;;;;;21586:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;21586:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21498:134::o;19185:154::-;19286:9;;:45;;;;;-1:-1:-1;;;;;178:55:1;;;19286:45:0;;;160:74:1;19259:7:0;;19286:9;;:32;;133:18:1;;19286:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18985:192::-;19128:9;;:41;;;;;-1:-1:-1;;;;;178:55:1;;;19128:41:0;;;160:74:1;19050:13:0;;;;;;;;19128:9;;:28;;133:18:1;;19128:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19128:41:0;;;;;;;;;;;;:::i;:::-;19121:48;;;;;;;;18985:192;;;;;:::o;31995:124::-;8356:6;;-1:-1:-1;;;;;8356:6:0;8366:10;8356:20;8348:65;;;;-1:-1:-1;;;8348:65:0;;13930:2:1;8348:65:0;;;13912:21:1;;;13949:18;;;13942:30;14008:34;13988:18;;;13981:62;14060:18;;8348:65:0;13728:356:1;8348:65:0;32054:9:::1;;;;;;;;;-1:-1:-1::0;;;;;32054:9:0::1;-1:-1:-1::0;;;;;32054:14:0::1;;32076:21;32054:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;32050:62:::0;31995:124::o;21141:349::-;8356:6;;-1:-1:-1;;;;;8356:6:0;8366:10;8356:20;8348:65;;;;-1:-1:-1;;;8348:65:0;;13930:2:1;8348:65:0;;;13912:21:1;;;13949:18;;;13942:30;14008:34;13988:18;;;13981:62;14060:18;;8348:65:0;13728:356:1;8348:65:0;-1:-1:-1;;;;;21236:23:0;::::1;21254:4;21236:23;::::0;::::1;::::0;:43:::1;;-1:-1:-1::0;21273:6:0::1;::::0;-1:-1:-1;;;;;21263:16:0;;::::1;21273:6:::0;::::1;21263:16;;21236:43;21228:52;;;::::0;::::1;;-1:-1:-1::0;;;;;21291:32:0;::::1;;::::0;;;:24:::1;:32;::::0;;;;:42;;-1:-1:-1;;21291:42:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;21344:139:::1;;21372:9;::::0;:26:::1;::::0;;;;-1:-1:-1;;;;;23265:55:1;;;21372:26:0::1;::::0;::::1;23247:74:1::0;21372:9:0::1;23337:18:1::0;;;23330:34;21372:9:0;;::::1;::::0;:15:::1;::::0;23220:18:1;;21372:26:0::1;23065:305:1::0;21344:139:0::1;21431:9;::::0;-1:-1:-1;;;;;21455:15:0;;::::1;21431:9;21455:15:::0;;;21431:9;21455:15:::1;::::0;;;;;;;21431:40;;;;;::::1;::::0;::::1;23247:74:1::0;;;;23337:18;;;23330:34;21431:9:0;::::1;::::0;:15:::1;::::0;23220:18:1;;21431:40:0::1;23065:305:1::0;21344:139:0::1;21141:349:::0;;:::o;22192:106::-;22233:7;22276:13;5821:1;22276:2;:13;:::i;:::-;22260:12;;:30;;;;:::i;11524:245::-;8356:6;;-1:-1:-1;;;;;8356:6:0;8366:10;8356:20;8348:65;;;;-1:-1:-1;;;8348:65:0;;13930:2:1;8348:65:0;;;13912:21:1;;;13949:18;;;13942:30;14008:34;13988:18;;;13981:62;14060:18;;8348:65:0;13728:356:1;8348:65:0;11619:5:::1;11609:6:::0;;-1:-1:-1;;;;;11609:6:0;;::::1;11589:27:::0;;:19:::1;:27;::::0;;;;;;;:35;;-1:-1:-1;;11589:35:0;;::::1;::::0;;;11660:6;;;;::::1;11635:32:::0;;:24:::1;:32:::0;;;;;;:40;;;;::::1;::::0;;;11686:19;;-1:-1:-1;;11686:19:0::1;::::0;;11721:40;11619:5;;11721:40:::1;::::0;11619:5;;11721:40:::1;11524:245::o:0;20055:516::-;8356:6;;-1:-1:-1;;;;;8356:6:0;8366:10;8356:20;8348:65;;;;-1:-1:-1;;;8348:65:0;;13930:2:1;8348:65:0;;;13912:21:1;;;13949:18;;;13942:30;14008:34;13988:18;;;13981:62;14060:18;;8348:65:0;13728:356:1;8348:65:0;20136:16;20132:432:::1;;-1:-1:-1::0;;;;;20169:13:0;;::::1;20185:5;20169:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;20169:21:0::1;::::0;;20205:9:::1;::::0;:32;;;;;::::1;::::0;::::1;23845:74:1::0;;;;23935:18;;;23928:50;;;;20205:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;23818:18:1;;20205:32:0::1;23677:307:1::0;20132:432:0::1;20274:17;::::0;:22;20270:152:::1;;20363:6;20343:17;;20325:15;:35;;;;:::i;:::-;:44;20317:89;;;::::0;-1:-1:-1;;;20317:89:0;;24191:2:1;20317:89:0::1;::::0;::::1;24173:21:1::0;;;24210:18;;;24203:30;24269:34;24249:18;;;24242:62;24321:18;;20317:89:0::1;23989:356:1::0;20317:89:0::1;-1:-1:-1::0;;;;;20436:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;20436:20:0::1;20452:4;20436:20:::0;;::::1;::::0;;;20491:15:::1;20471:17;:35:::0;20521:9:::1;::::0;:31;;;;;::::1;::::0;::::1;23845:74:1::0;;;;23935:18;;;23928:50;20521:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;23818:18:1;;20521:31:0::1;23677:307:1::0;13450:173:0;13514:4;8356:6;;-1:-1:-1;;;;;8356:6:0;8366:10;8356:20;8348:65;;;;-1:-1:-1;;;8348:65:0;;13930:2:1;8348:65:0;;;13912:21:1;;;13949:18;;;13942:30;14008:34;13988:18;;;13981:62;14060:18;;8348:65:0;13728:356:1;8348:65:0;13563:9:::1;::::0;13531:62:::1;::::0;13548:4:::1;::::0;-1:-1:-1;;;;;13563:9:0::1;-1:-1:-1::0;;13531:8:0::1;:62::i;:::-;-1:-1:-1::0;13611:4:0::1;13450:173:::0;:::o;15581:589::-;8356:6;;-1:-1:-1;;;;;8356:6:0;8366:10;8356:20;8348:65;;;;-1:-1:-1;;;8348:65:0;;13930:2:1;8348:65:0;;;13912:21:1;;;13949:18;;;13942:30;14008:34;13988:18;;;13981:62;14060:18;;8348:65:0;13728:356:1;8348:65:0;15643:14:::1;::::0;::::1;::::0;::::1;;;15642:15;15634:52;;;::::0;-1:-1:-1;;;15634:52:0;;24552:2:1;15634:52:0::1;::::0;::::1;24534:21:1::0;24591:2;24571:18;;;24564:30;24630:26;24610:18;;;24603:54;24674:18;;15634:52:0::1;24350:348:1::0;15634:52:0::1;15705:16;::::0;;;::::1;;;15697:53;;;::::0;-1:-1:-1;;;15697:53:0;;24905:2:1;15697:53:0::1;::::0;::::1;24887:21:1::0;24944:2;24924:18;;;24917:30;24983:26;24963:18;;;24956:54;25027:18;;15697:53:0::1;24703:348:1::0;15697:53:0::1;15772:9;::::0;;;::::1;-1:-1:-1::0;;;;;15772:9:0::1;15761:99;;15812:9;:36:::0;;;::::1;15842:4;15812:36:::0;::::1;;::::0;;15761:99:::1;15874:9;::::0;15894:6:::1;::::0;15874:85:::1;::::0;;;;-1:-1:-1;;;;;15894:6:0;;::::1;15874:85;::::0;::::1;25279:74:1::0;25401:10;15909:12:0::1;25389:23:1::0;25369:18;;;25362:51;25461:18;15931:15:0::1;25449:31:1::0;25429:18;;;25422:59;5821:1:0::1;25497:18:1::0;;;25490:45;15874:9:0;;;::::1;;::::0;:19:::1;::::0;25251::1;;15874:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;15870:101:::0;15985:9:::1;;;;;;;;;-1:-1:-1::0;;;;;15985:9:0::1;-1:-1:-1::0;;;;;15985:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;-1:-1:-1::0;16029:14:0::1;:21:::0;;-1:-1:-1;;16029:21:0::1;;;::::0;;16088:6:::1;::::0;-1:-1:-1;;;;;16088:6:0::1;-1:-1:-1::0;12711:16:0;;;-1:-1:-1;12711:16:0;;;;;;16103:5:::1;::::0;16078:21:::1;::::0;16098:1:::1;16078:21;:::i;:::-;16077:31;;;;:::i;:::-;16061:13;:47:::0;16143:6:::1;::::0;-1:-1:-1;;;;;16143:6:0::1;12693:7:::0;12711:16;;;:7;:16;;;;;;16158:4:::1;::::0;16133:21:::1;::::0;16153:1:::1;16133:21;:::i;:::-;16132:30;;;;:::i;:::-;16119:10;:43:::0;15581:589::o;17658:114::-;8356:6;;-1:-1:-1;;;;;8356:6:0;8366:10;8356:20;8348:65;;;;-1:-1:-1;;;8348:65:0;;13930:2:1;8348:65:0;;;13912:21:1;;;13949:18;;;13942:30;14008:34;13988:18;;;13981:62;14060:18;;8348:65:0;13728:356:1;8348:65:0;17737:18;:27;;-1:-1:-1;;17737:27:0::1;-1:-1:-1::0;;;;;17737:27:0;;;::::1;::::0;;;::::1;::::0;;17658:114::o;18751:100::-;18802:9;;:41;;;;;18832:10;18802:41;;;160:74:1;-1:-1:-1;;;;;18802:9:0;;;;:29;;133:18:1;;18802:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13631:152;13711:4;13735:40;13745:10;13757:9;13768:6;13735:9;:40::i;:::-;13728:47;13631:152;-1:-1:-1;;;13631:152:0:o;19347:150::-;19449:9;;:40;;;;;-1:-1:-1;;;;;178:55:1;;;19449:40:0;;;160:74:1;19422:7:0;;19449:9;;:27;;133:18:1;;19449:40:0;14:226:1;15080:118:0;8356:6;;-1:-1:-1;;;;;8356:6:0;8366:10;8356:20;8348:65;;;;-1:-1:-1;;;8348:65:0;;13930:2:1;8348:65:0;;;13912:21:1;;;13949:18;;;13942:30;14008:34;13988:18;;;13981:62;14060:18;;8348:65:0;13728:356:1;8348:65:0;15154:9:::1;::::0;:36:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;15154:36:0::1;::::0;::::1;160:74:1::0;15154:9:0;;;::::1;::::0;;::::1;::::0;:27:::1;::::0;133:18:1;;15154:36:0::1;14:226:1::0;18612:131:0;8356:6;;-1:-1:-1;;;;;8356:6:0;8366:10;8356:20;8348:65;;;;-1:-1:-1;;;8348:65:0;;13930:2:1;8348:65:0;;;13912:21:1;;;13949:18;;;13942:30;14008:34;13988:18;;;13981:62;14060:18;;8348:65:0;13728:356:1;8348:65:0;18699:6:::1;18693:3;:12;18685:21;;;::::0;::::1;;18717:12;:18:::0;18612:131::o;17461:189::-;8356:6;;-1:-1:-1;;;;;8356:6:0;8366:10;8356:20;8348:65;;;;-1:-1:-1;;;8348:65:0;;13930:2:1;8348:65:0;;;13912:21:1;;;13949:18;;;13942:30;14008:34;13988:18;;;13981:62;14060:18;;8348:65:0;13728:356:1;8348:65:0;17559:11:::1;:42:::0;;-1:-1:-1;;;;;17559:42:0;;::::1;-1:-1:-1::0;;17559:42:0;;::::1;;::::0;;;17612:15;:30;;;;;::::1;::::0;::::1;;::::0;;17461:189::o;16922:531::-;8356:6;;-1:-1:-1;;;;;8356:6:0;8366:10;8356:20;8348:65;;;;-1:-1:-1;;;8348:65:0;;13930:2:1;8348:65:0;;;13912:21:1;;;13949:18;;;13942:30;14008:34;13988:18;;;13981:62;14060:18;;8348:65:0;13728:356:1;8348:65:0;17069:10:::1;::::0;::::1;::::0;17066:83:::1;;17104:18:::0;;-1:-1:-1;;;;;17104:18:0::1;17096:41;;;::::0;::::1;;17159:7;:25:::0;;::::1;::::0;;::::1;17195:29:::0;;;;;;;;;;;::::1;;;17275:17:::0;;17235:29;;;::::1;;17275:17:::0;;;;;;::::1;;;17339:23:::0;;17303:25;;;::::1;;17339:23:::0;;;;;;::::1;::::0;;;::::1;;::::0;;;17303:25;17275:17;17235:29;17389:19:::1;17195:29:::0;17159:25;17389:19:::1;:::i;:::-;:31;;;;:::i;:::-;:37;;;;:::i;:::-;:47;;;;:::i;:::-;:56;;;;:::i;:::-;17373:7;:72:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;;16922:531:0:o;17780:193::-;8356:6;;-1:-1:-1;;;;;8356:6:0;8366:10;8356:20;8348:65;;;;-1:-1:-1;;;8348:65:0;;13930:2:1;8348:65:0;;;13912:21:1;;;13949:18;;;13942:30;14008:34;13988:18;;;13981:62;14060:18;;8348:65:0;13728:356:1;8348:65:0;17886:19:::1;:30:::0;;-1:-1:-1;;17886:30:0::1;;::::0;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;;17927:14:::1;:38:::0;;-1:-1:-1;;17927:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17780:193::o;19505:542::-;8356:6;;-1:-1:-1;;;;;8356:6:0;8366:10;8356:20;8348:65;;;;-1:-1:-1;;;8348:65:0;;13930:2:1;8348:65:0;;;13912:21:1;;;13949:18;;;13942:30;14008:34;13988:18;;;13981:62;14060:18;;8348:65:0;13728:356:1;8348:65:0;19576:20:::1;19609:9;19576:43;;19630:16;19660:10;-1:-1:-1::0;;;;;19660:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19649:40:0::1;;19698:4;19705:10;-1:-1:-1::0;;;;;19705:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19649:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;26028:15:1;;;19649:74:0::1;::::0;::::1;26010:34:1::0;26080:15;;26060:18;;;26053:43;25922:18;;19649:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19630:93:::0;-1:-1:-1;;;;;;19738:22:0;::::1;19734:200;;19797:10;-1:-1:-1::0;;;;;19797:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19786:43:0::1;;19838:4;19845:10;-1:-1:-1::0;;;;;19845:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19786:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;26028:15:1;;;19786:77:0::1;::::0;::::1;26010:34:1::0;26080:15;;26060:18;;;26053:43;25922:18;;19786:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19777:6;:86:::0;;-1:-1:-1;;19777:86:0::1;-1:-1:-1::0;;;;;19777:86:0;;;::::1;::::0;;;::::1;::::0;;19734:200:::1;;;19905:6;:17:::0;;-1:-1:-1;;19905:17:0::1;-1:-1:-1::0;;;;;19905:17:0;::::1;;::::0;;19734:200:::1;19944:9;:22:::0;;-1:-1:-1;;19944:22:0::1;-1:-1:-1::0;;;;;19944:22:0;::::1;::::0;;::::1;::::0;;;19977:62:::1;::::0;19994:4:::1;::::0;-1:-1:-1;;19977:8:0::1;:62::i;14105:193::-:0;8356:6;;-1:-1:-1;;;;;8356:6:0;8366:10;8356:20;8348:65;;;;-1:-1:-1;;;8348:65:0;;13930:2:1;8348:65:0;;;13912:21:1;;;13949:18;;;13942:30;14008:34;13988:18;;;13981:62;14060:18;;8348:65:0;13728:356:1;8348:65:0;14195:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;23863:55:1;;;14195:47:0::1;::::0;::::1;23845:74:1::0;23962:14;;23955:22;23935:18;;;23928:50;14195:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;23818:18:1;;14195:47:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14253:37;14273:7;14282;14253:19;:37::i;18859:118::-:0;18938:9;;:31;;;;;;;;18911:7;;-1:-1:-1;;;;;18938:9:0;;:29;;:31;;;;;;;;;;;;;;:9;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30490:189::-;8356:6;;-1:-1:-1;;;;;8356:6:0;8366:10;8356:20;8348:65;;;;-1:-1:-1;;;8348:65:0;;13930:2:1;8348:65:0;;;13912:21:1;;;13949:18;;;13942:30;14008:34;13988:18;;;13981:62;14060:18;;8348:65:0;13728:356:1;8348:65:0;30570:7:::1;30566:66;;30619:1;30594:22;:26:::0;30566:66:::1;30642:19;:29:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;30490:189::o;14486:125::-;14571:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;14571:32:0;;;160:74:1;14547:4:0;;14571:9;;;;;:23;;133:18:1;;14571:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22792:1461::-;22871:4;-1:-1:-1;;;;;22896:18:0;;22888:68;;;;-1:-1:-1;;;22888:68:0;;26559:2:1;22888:68:0;;;26541:21:1;26598:2;26578:18;;;26571:30;26637:34;26617:18;;;26610:62;26708:7;26688:18;;;26681:35;26733:19;;22888:68:0;26357:401:1;22888:68:0;-1:-1:-1;;;;;22975:16:0;;22967:64;;;;-1:-1:-1;;;22967:64:0;;26965:2:1;22967:64:0;;;26947:21:1;27004:2;26984:18;;;26977:30;27043:34;27023:18;;;27016:62;27114:5;27094:18;;;27087:33;27137:19;;22967:64:0;26763:399:1;22967:64:0;23059:1;23050:6;:10;23042:64;;;;-1:-1:-1;;;23042:64:0;;27369:2:1;23042:64:0;;;27351:21:1;27408:2;27388:18;;;27381:30;27447:34;27427:18;;;27420:62;27518:11;27498:18;;;27491:39;27547:19;;23042:64:0;27167:405:1;23042:64:0;-1:-1:-1;;;;;23205:13:0;;23117:8;23205:13;;;:7;:13;;;;;;23117:8;;;;23205:13;;23201:162;;;23241:4;23235:10;;23201:162;;;-1:-1:-1;;;;;23267:11:0;;;;;;:7;:11;;;;;;;;23263:100;;;23302:4;23295:11;;23263:100;;;-1:-1:-1;23347:4:0;23263:100;23376:20;23387:4;23393:2;23376:10;:20::i;:::-;23373:641;;;23417:14;;;;;;;23413:89;;23452:34;;-1:-1:-1;;;23452:34:0;;27779:2:1;23452:34:0;;;27761:21:1;27818:2;27798:18;;;27791:30;27857:26;27837:18;;;27830:54;27901:18;;23452:34:0;27577:348:1;23413:89:0;23519:3;:11;;;;23526:4;23519:11;23516:231;;;-1:-1:-1;;;;;23555:27:0;;;;;;:21;:27;;;;;;;;23554:28;:58;;;;-1:-1:-1;;;;;;23587:25:0;;;;;;:21;:25;;;;;;;;23586:26;23554:58;23550:182;;;23655:12;;23645:6;:22;;23637:75;;;;-1:-1:-1;;;23637:75:0;;28132:2:1;23637:75:0;;;28114:21:1;28171:2;28151:18;;;28144:30;28210:34;28190:18;;;28183:62;28281:10;28261:18;;;28254:38;28309:19;;23637:75:0;27930:404:1;23637:75:0;23778:9;;-1:-1:-1;;;;;23764:24:0;;;23778:9;;23764:24;;;;:33;;;23793:4;23792:5;23764:33;23761:242;;;-1:-1:-1;;;;;23823:25:0;;;;;;:21;:25;;;;;;;;23818:170;;23907:14;;23897:6;23881:13;23891:2;-1:-1:-1;;;;;12711:16:0;12693:7;12711:16;;;:7;:16;;;;;;;12627:103;23881:13;:22;;;;:::i;:::-;:40;;23873:95;;;;-1:-1:-1;;;23873:95:0;;28541:2:1;23873:95:0;;;28523:21:1;28580:2;28560:18;;;28553:30;28619:34;28599:18;;;28592:62;28690:12;28670:18;;;28663:40;28720:19;;23873:95:0;28339:406:1;23873:95:0;-1:-1:-1;;;;;24069:25:0;;24026:12;24069:25;;;:19;:25;;;;;;24041:4;;24069:25;;;:52;;-1:-1:-1;;;;;;24098:23:0;;;;;;:19;:23;;;;;;;;24069:52;24066:98;;;-1:-1:-1;24147:5:0;24066:98;24183:62;24201:4;24207:2;24211:6;24219:7;24228:3;24233:4;24239:5;24183:17;:62::i;:::-;24176:69;22792:1461;-1:-1:-1;;;;;;;;22792:1461:0:o;24261:1664::-;24417:16;;24395:4;;24417:16;;;;;24412:221;;24450:28;24469:4;24475:2;24450:18;:28::i;:::-;24498:16;;;;;;;24497:17;:41;;;;;24518:20;24529:4;24535:2;24518:10;:20::i;:::-;24493:129;;;24559:47;;-1:-1:-1;;;24559:47:0;;28952:2:1;24559:47:0;;;28934:21:1;28991:2;28971:18;;;28964:30;29030:34;29010:18;;;29003:62;29101:7;29081:18;;;29074:35;29126:19;;24559:47:0;28750:401:1;24493:129:0;24648:20;24659:4;24665:2;24648:10;:20::i;:::-;24645:313;;;24716:9;;:37;;;;;-1:-1:-1;;;;;29437:15:1;;;24716:37:0;;;29419:34:1;29489:15;;;29469:18;;;29462:43;29521:18;;;29514:34;;;24685:12:0;;24716:9;;;;;:19;;29331:18:1;;24716:37:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;24716:37:0;;;;;;;;-1:-1:-1;;24716:37:0;;;;;;;;;;;;:::i;:::-;;;24712:163;;24851:8;;;24712:163;24804:5;-1:-1:-1;24895:7:0;24891:56;;24923:8;;;24891:56;24670:288;24645:313;-1:-1:-1;;;;;24970:13:0;;;;;;:7;:13;;;;;:23;;24987:6;;24970:13;:23;;24987:6;;24970:23;:::i;:::-;;;;-1:-1:-1;;25006:599:0;;;;25036:6;;;;25035:7;:47;;;;-1:-1:-1;25063:19:0;;;;;;;25035:47;25031:557;;;25152:15;25132:17;;25121:8;;:28;;;;:::i;:::-;:46;25117:456;;;25241:4;25192:28;12711:16;;;:7;:16;;;;;;25298:13;;25274:37;;25270:284;;25367:10;;25343:20;:34;25340:77;;-1:-1:-1;25404:10:0;;25340:77;25443:34;25456:20;25443:12;:34::i;:::-;25515:15;25504:8;:26;25270:284;25169:404;25117:456;25643:6;25662:98;;;;25707:41;25717:4;25723:6;25731:3;25736:4;25742:5;25707:9;:41::i;:::-;25690:58;;25662:98;-1:-1:-1;;;;;25772:11:0;;;;;;:7;:11;;;;;:29;;25787:14;;25772:11;:29;;25787:14;;25772:29;:::i;:::-;;;;-1:-1:-1;25814:29:0;;-1:-1:-1;25834:4:0;25840:2;25814:19;:29::i;:::-;25876:2;-1:-1:-1;;;;;25861:34:0;25870:4;-1:-1:-1;;;;;25861:34:0;;25880:14;25861:34;;;;391:25:1;;379:2;364:18;;245:177;25861:34:0;;;;;;;;-1:-1:-1;25913:4:0;;24261:1664;-1:-1:-1;;;;;;;;24261:1664:0:o;13101:341::-;-1:-1:-1;;;;;13195:20:0;;13187:69;;;;-1:-1:-1;;;13187:69:0;;29761:2:1;13187:69:0;;;29743:21:1;29800:2;29780:18;;;29773:30;29839:34;29819:18;;;29812:62;29910:6;29890:18;;;29883:34;29934:19;;13187:69:0;29559:400:1;13187:69:0;-1:-1:-1;;;;;13275:21:0;;13267:68;;;;-1:-1:-1;;;13267:68:0;;30166:2:1;13267:68:0;;;30148:21:1;30205:2;30185:18;;;30178:30;30244:34;30224:18;;;30217:62;30315:4;30295:18;;;30288:32;30337:19;;13267:68:0;29964:398:1;13267:68:0;-1:-1:-1;;;;;13348:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;13401:33;;391:25:1;;;13401:33:0;;364:18:1;13401:33:0;;;;;;;13101:341;;;:::o;22426:358::-;22495:4;22527:6;;-1:-1:-1;;;;;22519:14:0;;;22527:6;;22519:14;;;;:43;;-1:-1:-1;22556:6:0;;-1:-1:-1;;;;;22550:12:0;;;22556:6;;22550:12;;22519:43;:79;;;;-1:-1:-1;22592:6:0;;-1:-1:-1;;;;;22592:6:0;22579:9;:19;;22519:79;:118;;;;-1:-1:-1;;;;;;22616:21:0;;;;;;:17;:21;;;;;;;;22615:22;22519:118;:159;;;;-1:-1:-1;;;;;;22655:23:0;;;;;;:17;:23;;;;;;;;22654:24;22519:159;:186;;;;-1:-1:-1;;;;;;22695:10:0;;7018:42;22695:10;;22519:186;:219;;;;-1:-1:-1;;;;;;22722:16:0;;;;22519:219;:257;;;;-1:-1:-1;;;;;;;;22755:21:0;22771:4;22755:21;;;22426:358::o;30941:630::-;31023:16;;;;;;;31022:17;31014:65;;;;-1:-1:-1;;;31014:65:0;;30569:2:1;31014:65:0;;;30551:21:1;30608:2;30588:18;;;30581:30;30647:34;30627:18;;;30620:62;30718:5;30698:18;;;30691:33;30741:19;;31014:65:0;30367:399:1;31014:65:0;31095:20;31106:4;31112:2;31095:10;:20::i;:::-;31094:21;:37;;;;-1:-1:-1;31125:6:0;;-1:-1:-1;;;;;31119:12:0;;;31125:6;;31119:12;31094:37;31090:474;;;-1:-1:-1;;;;;31148:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;31148:30:0;31174:4;31148:30;;;31193:16;:23;;;;;;;;;;31242:9;;;;31231:108;;31287:9;:36;;;;31317:4;31287:36;;;;;31231:108;31364:9;;-1:-1:-1;;;;;31364:9:0;31353:107;;31410:9;:34;;-1:-1:-1;;31410:34:0;31438:4;31410:34;;;31353:107;31474:19;:26;;-1:-1:-1;;31474:26:0;;;;;31520:32;;-1:-1:-1;4959:41:1;;31520:32:0;;4947:2:1;4932:18;31520:32:0;;;;;;;30941:630;;:::o;27623:2309::-;8250:6;:13;;-1:-1:-1;;8250:13:0;8259:4;8250:13;;;27704:30:::1;::::0;;::::1;::::0;::::1;::::0;;27727:7:::1;27704:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;::::1;::::0;;;;;;27745:56:::1;;27783:7;;;27745:56;27844:4;27824:26;::::0;;;:11:::1;:26;::::0;;;;;;;27859:9:::1;::::0;-1:-1:-1;;;;;27859:9:0::1;27824:46:::0;;;;;;;;-1:-1:-1;;27824:67:0::1;27821:165;;27928:4;27908:26;::::0;;;:11:::1;:26;::::0;;;;;;;27943:9:::1;::::0;-1:-1:-1;;;;;27943:9:0::1;27908:46:::0;;;;;;;-1:-1:-1;;27908:66:0;;27821:165:::1;27998:17;28081:1;28064:6;:12;;;28019:58;;28043:6;:16;;;28020:39;;:20;:39;;;;:::i;:::-;28019:58;;;;:::i;:::-;28018:64;;;;:::i;:::-;27998:84:::0;-1:-1:-1;28093:15:0::1;28111:32;27998:84:::0;28111:20;:32:::1;:::i;:::-;28180:16;::::0;;28194:1:::1;28180:16:::0;;;;;::::1;::::0;;28093:50;;-1:-1:-1;28156:21:0::1;::::0;28180:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;28180:16:0::1;28156:40;;28225:4;28207;28212:1;28207:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28207:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;28251:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;28207:7;;28251:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28241:4;28246:1;28241:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28241:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;28332:9:::1;::::0;:186:::1;::::0;;;;28298:21:::1;::::0;28332:9;;;::::1;::::0;:60:::1;::::0;:186:::1;::::0;28407:7;;28280:15:::1;::::0;28445:4;;28472::::1;::::0;28492:15:::1;::::0;28332:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28531:18;28576:7;28552:21;:31;;;;:::i;:::-;28531:52:::0;-1:-1:-1;28594:24:0::1;28648:7:::0;28622:22:::1;28635:9:::0;28531:52;28622:22:::1;:::i;:::-;28621:34;;;;:::i;:::-;28594:61:::0;-1:-1:-1;28672:13:0;;28668:328:::1;;28702:9;::::0;:222:::1;::::0;;;;28779:4:::1;28702:222;::::0;::::1;31745:34:1::0;31795:18;;;31788:34;;;28702:9:0::1;31838:18:1::0;;;31831:34;;;31881:18;;;31874:34;7018:42:0::1;31924:19:1::0;;;31917:44;28894:15:0::1;31977:19:1::0;;;31970:35;-1:-1:-1;;;;;28702:9:0;;::::1;::::0;:25:::1;::::0;28735:16;;31656:19:1;;28702:222:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;28944:40:0::1;::::0;;17351:25:1;;;17407:2;17392:18;;17385:34;;;28944:40:0::1;::::0;-1:-1:-1;17324:18:1;28944:40:0::1;;;;;;;28668:328;29008:30;29022:16:::0;29008:30;::::1;:::i;:::-;;;29065:6;:16;;;29049:6;:12;;:32;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;29149:12:::1;::::0;::::1;::::0;29131:14;;29092:22:::1;::::0;-1:-1:-1;29117:44:0;;::::1;::::0;29118:27:::1;::::0;::::1;:10:::0;:27:::1;:::i;:::-;29117:44;;;;:::i;:::-;29092:69;;29172:18;29221:6;:12;;;29193:40;;29207:6;:10;;;29194:23;;:10;:23;;;;:::i;:::-;29193:40;;;;:::i;:::-;29172:61;;29244:22;29301:6;:12;;;29269:44;;29283:6;:14;;;29270:27;;:10;:27;;;;:::i;:::-;29269:44;;;;:::i;:::-;29244:69;;29324:21;29379:6;:12;;;29348:43;;29362:6;:13;;;29349:26;;:10;:26;;;;:::i;:::-;29348:43;;;;:::i;:::-;29324:67:::0;-1:-1:-1;29402:24:0::1;29324:67:::0;29473:14;29443:27:::1;29460:10:::0;29443:14;:27:::1;:::i;:::-;:44;;;;:::i;:::-;:60;;;;:::i;:::-;29429:75;::::0;:10;:75:::1;:::i;:::-;29521:14:::0;;29402:102;;-1:-1:-1;29521:18:0::1;;::::0;29517:105:::1;;29560:9;;;;;;;;;-1:-1:-1::0;;;;;29560:9:0::1;-1:-1:-1::0;;;;;29560:14:0::1;;29582;29560:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;29556:55:::0;::::1;29637:10;::::0;::::1;::::0;:14:::1;;::::0;29634:81:::1;;29667:15:::0;;:36:::1;::::0;-1:-1:-1;;;;;29667:15:0;;::::1;::::0;:36;::::1;;;::::0;29692:10;;29667:15:::1;:36:::0;:15;:36;29692:10;29667:15;:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;29634:81;29728:16;::::0;::::1;::::0;:20:::1;;::::0;29725:99:::1;;29764:11;:21:::0;:48:::1;::::0;-1:-1:-1;;;;;29764:21:0;;::::1;::::0;:48;::::1;;;::::0;29795:16;;29764:21:::1;:48:::0;:21;:48;29795:16;29764:21;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;29725:99;29837:13;::::0;::::1;::::0;:17:::1;;::::0;29834:91:::1;;29871:18:::0;;:42:::1;::::0;-1:-1:-1;;;;;29871:18:0;;::::1;::::0;:42;::::1;;;::::0;29899:13;;29871:18:::1;:42:::0;:18;:42;29899:13;29871:18;:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;29834:91;27693:2239;;;;;;;;;;;;8274:1;-1:-1:-1::0;8286:6:0;:14;;-1:-1:-1;;8286:14:0;;;27623:2309::o;26596:1019::-;26696:7;26716:18;26767:22;;26749:15;:40;26745:577;;;26810:3;26806:244;;;-1:-1:-1;26847:9:0;:21;;;;;;26745:577;;26806:244;26894:4;26890:160;;;-1:-1:-1;26932:9:0;:22;;;;;;26745:577;;26890:160;-1:-1:-1;27008:9:0;:26;;;;;;26745:577;;;27086:3;27082:229;;;-1:-1:-1;27123:9:0;:16;;;27082:229;;;27165:4;27161:150;;;-1:-1:-1;27203:9:0;:17;;;;;;27161:150;;;-1:-1:-1;27274:9:0;:21;;;;;;27161:150;27338:15;27334:61;;27377:6;27370:13;;;;;27334:61;27407:17;6910:5;27427:19;27436:10;27427:6;:19;:::i;:::-;:38;;;;:::i;:::-;27494:4;27478:22;;;;:7;:22;;;;;:35;;27407:58;;-1:-1:-1;27407:58:0;;27478:22;;;:35;;27407:58;;27478:35;:::i;:::-;;;;-1:-1:-1;;27529:40:0;;391:25:1;;;27552:4:0;;-1:-1:-1;;;;;27529:40:0;;;;;379:2:1;364:18;27529:40:0;;;;;;;27589:18;27598:9;27589:6;:18;:::i;:::-;27582:25;;;;26596:1019;;;;;;;;:::o;25933:419::-;-1:-1:-1;;;;;26013:30:0;;;;;;:24;:30;;;;;;;;26008:115;;26064:9;;-1:-1:-1;;;;;26086:13:0;;;26064:9;26086:13;;;26064:9;26086:13;;;;;;;;26064:36;;;;;;;;23247:74:1;;;;23337:18;;;23330:34;26064:9:0;;;:15;;23220:18:1;;26064:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26060:52;;-1:-1:-1;;;;;26138:28:0;;;;;;:24;:28;;;;;;;;26133:109;;26187:9;;-1:-1:-1;;;;;26207:11:0;;;26187:9;26207:11;;;26187:9;26207:11;;;;;;;;26187:32;;;;;;;;23247:74:1;;;;23337:18;;;23330:34;26187:9:0;;;:15;;23220:18:1;;26187:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26183:48;;26256:14;;;;26252:93;;;26291:9;;26309:12;;26291:31;;;;;-1:-1:-1;;;;;26291:9:0;;;;:17;;:31;;;;391:25:1;;;379:2;364:18;;245:177;26291:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26287:47;;21141:349;;:::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;3256:258::-;3328:1;3338:113;3352:6;3349:1;3346:13;3338:113;;;3428:11;;;3422:18;3409:11;;;3402:39;3374:2;3367:10;3338:113;;;3469:6;3466:1;3463:13;3460:48;;;-1:-1:-1;;3504:1:1;3486:16;;3479:27;3256:258::o;3519:317::-;3561:3;3599:5;3593:12;3626:6;3621:3;3614:19;3642:63;3698:6;3691:4;3686:3;3682:14;3675:4;3668:5;3664:16;3642:63;:::i;:::-;3750:2;3738:15;-1:-1:-1;;3734:88:1;3725:98;;;;3825:4;3721:109;;3519:317;-1:-1:-1;;3519:317:1:o;3841:220::-;3990:2;3979:9;3972:21;3953:4;4010:45;4051:2;4040:9;4036:18;4028:6;4010:45;:::i;4314:180::-;4373:6;4426:2;4414:9;4405:7;4401:23;4397:32;4394:52;;;4442:1;4439;4432:12;4394:52;-1:-1:-1;4465:23:1;;4314:180;-1:-1:-1;4314:180:1:o;4499:315::-;4567:6;4575;4628:2;4616:9;4607:7;4603:23;4599:32;4596:52;;;4644:1;4641;4634:12;4596:52;4683:9;4670:23;4702:31;4727:5;4702:31;:::i;:::-;4752:5;4804:2;4789:18;;;;4776:32;;-1:-1:-1;;;4499:315:1:o;5011:316::-;5088:6;5096;5104;5157:2;5145:9;5136:7;5132:23;5128:32;5125:52;;;5173:1;5170;5163:12;5125:52;-1:-1:-1;;5196:23:1;;;5266:2;5251:18;;5238:32;;-1:-1:-1;5317:2:1;5302:18;;;5289:32;;5011:316;-1:-1:-1;5011:316:1:o;5332:159::-;5399:20;;5459:6;5448:18;;5438:29;;5428:57;;5481:1;5478;5471:12;5428:57;5332:159;;;:::o;5496:328::-;5570:6;5578;5586;5639:2;5627:9;5618:7;5614:23;5610:32;5607:52;;;5655:1;5652;5645:12;5607:52;5678:28;5696:9;5678:28;:::i;:::-;5668:38;;5725:37;5758:2;5747:9;5743:18;5725:37;:::i;:::-;5715:47;;5781:37;5814:2;5803:9;5799:18;5781:37;:::i;:::-;5771:47;;5496:328;;;;;:::o;5829:388::-;5897:6;5905;5958:2;5946:9;5937:7;5933:23;5929:32;5926:52;;;5974:1;5971;5964:12;5926:52;6013:9;6000:23;6032:31;6057:5;6032:31;:::i;:::-;6082:5;-1:-1:-1;6139:2:1;6124:18;;6111:32;6152:33;6111:32;6152:33;:::i;6222:456::-;6299:6;6307;6315;6368:2;6356:9;6347:7;6343:23;6339:32;6336:52;;;6384:1;6381;6374:12;6336:52;6423:9;6410:23;6442:31;6467:5;6442:31;:::i;:::-;6492:5;-1:-1:-1;6549:2:1;6534:18;;6521:32;6562:33;6521:32;6562:33;:::i;:::-;6222:456;;6614:7;;-1:-1:-1;;;6668:2:1;6653:18;;;;6640:32;;6222:456::o;6683:248::-;6751:6;6759;6812:2;6800:9;6791:7;6787:23;6783:32;6780:52;;;6828:1;6825;6818:12;6780:52;-1:-1:-1;;6851:23:1;;;6921:2;6906:18;;;6893:32;;-1:-1:-1;6683:248:1:o;6936:1138::-;7054:6;7062;7115:2;7103:9;7094:7;7090:23;7086:32;7083:52;;;7131:1;7128;7121:12;7083:52;7171:9;7158:23;7200:18;7241:2;7233:6;7230:14;7227:34;;;7257:1;7254;7247:12;7227:34;7280:61;7333:7;7324:6;7313:9;7309:22;7280:61;:::i;:::-;7270:71;;7360:2;7350:12;;7415:2;7404:9;7400:18;7387:32;7444:2;7434:8;7431:16;7428:36;;;7460:1;7457;7450:12;7428:36;7483:24;;;-1:-1:-1;7538:4:1;7530:13;;7526:27;-1:-1:-1;7516:55:1;;7567:1;7564;7557:12;7516:55;7603:2;7590:16;7626:60;7642:43;7682:2;7642:43;:::i;7626:60::-;7720:15;;;7802:1;7798:10;;;;7790:19;;7786:28;;;7751:12;;;;7826:19;;;7823:39;;;7858:1;7855;7848:12;7823:39;7882:11;;;;7902:142;7918:6;7913:3;7910:15;7902:142;;;7984:17;;7972:30;;7935:12;;;;8022;;;;7902:142;;;8063:5;8053:15;;;;;;;6936:1138;;;;;:::o;8079:647::-;8153:6;8161;8169;8177;8230:3;8218:9;8209:7;8205:23;8201:33;8198:53;;;8247:1;8244;8237:12;8198:53;8286:9;8273:23;8305:28;8327:5;8305:28;:::i;:::-;8352:5;-1:-1:-1;8409:2:1;8394:18;;8381:32;8422:30;8381:32;8422:30;:::i;:::-;8471:7;-1:-1:-1;8530:2:1;8515:18;;8502:32;8543:30;8502:32;8543:30;:::i;:::-;8592:7;-1:-1:-1;8651:2:1;8636:18;;8623:32;8664:30;8623:32;8664:30;:::i;:::-;8079:647;;;;-1:-1:-1;8079:647:1;;-1:-1:-1;;8079:647:1:o;8920:247::-;8979:6;9032:2;9020:9;9011:7;9007:23;9003:32;9000:52;;;9048:1;9045;9038:12;9000:52;9087:9;9074:23;9106:31;9131:5;9106:31;:::i;9172:454::-;9267:6;9275;9283;9291;9299;9352:3;9340:9;9331:7;9327:23;9323:33;9320:53;;;9369:1;9366;9359:12;9320:53;-1:-1:-1;;9392:23:1;;;9462:2;9447:18;;9434:32;;-1:-1:-1;9513:2:1;9498:18;;9485:32;;9564:2;9549:18;;9536:32;;-1:-1:-1;9615:3:1;9600:19;9587:33;;-1:-1:-1;9172:454:1;-1:-1:-1;9172:454:1:o;9631:382::-;9696:6;9704;9757:2;9745:9;9736:7;9732:23;9728:32;9725:52;;;9773:1;9770;9763:12;9725:52;9812:9;9799:23;9831:31;9856:5;9831:31;:::i;:::-;9881:5;-1:-1:-1;9938:2:1;9923:18;;9910:32;9951:30;9910:32;9951:30;:::i;10018:711::-;10311:3;10300:9;10293:22;10274:4;10338:46;10379:3;10368:9;10364:19;10356:6;10338:46;:::i;:::-;10432:9;10424:6;10420:22;10415:2;10404:9;10400:18;10393:50;10466:33;10492:6;10484;10466:33;:::i;:::-;10452:47;;10547:9;10539:6;10535:22;10530:2;10519:9;10515:18;10508:50;10581:33;10607:6;10599;10581:33;:::i;:::-;10567:47;;10662:9;10654:6;10650:22;10645:2;10634:9;10630:18;10623:50;10690:33;10716:6;10708;10690:33;:::i;:::-;10682:41;10018:711;-1:-1:-1;;;;;;;10018:711:1:o;12089:547::-;12187:6;12195;12203;12211;12219;12227;12280:3;12268:9;12259:7;12255:23;12251:33;12248:53;;;12297:1;12294;12287:12;12248:53;12320:28;12338:9;12320:28;:::i;:::-;12310:38;;12367:37;12400:2;12389:9;12385:18;12367:37;:::i;:::-;12357:47;;12423:37;12456:2;12445:9;12441:18;12423:37;:::i;:::-;12413:47;;12479:37;12512:2;12501:9;12497:18;12479:37;:::i;:::-;12469:47;;12535:38;12568:3;12557:9;12553:19;12535:38;:::i;:::-;12525:48;;12592:38;12625:3;12614:9;12610:19;12592:38;:::i;:::-;12582:48;;12089:547;;;;;;;;:::o;12641:376::-;12703:6;12711;12764:2;12752:9;12743:7;12739:23;12735:32;12732:52;;;12780:1;12777;12770:12;12732:52;12819:9;12806:23;12838:28;12860:5;12838:28;:::i;13482:241::-;13538:6;13591:2;13579:9;13570:7;13566:23;13562:32;13559:52;;;13607:1;13604;13597:12;13559:52;13646:9;13633:23;13665:28;13687:5;13665:28;:::i;14089:484::-;14142:3;14180:5;14174:12;14207:6;14202:3;14195:19;14233:4;14262:2;14257:3;14253:12;14246:19;;14299:2;14292:5;14288:14;14320:1;14330:218;14344:6;14341:1;14338:13;14330:218;;;14409:13;;-1:-1:-1;;;;;14405:62:1;14393:75;;14488:12;;;;14523:15;;;;14366:1;14359:9;14330:218;;;-1:-1:-1;14564:3:1;;14089:484;-1:-1:-1;;;;;14089:484:1:o;14578:342::-;14779:2;14768:9;14761:21;14742:4;14799:56;14851:2;14840:9;14836:18;14828:6;14799:56;:::i;:::-;14791:64;;14905:6;14898:14;14891:22;14886:2;14875:9;14871:18;14864:50;14578:342;;;;;:::o;15261:184::-;15313:77;15310:1;15303:88;15410:4;15407:1;15400:15;15434:4;15431:1;15424:15;15450:482;15539:1;15582:5;15539:1;15596:330;15617:7;15607:8;15604:21;15596:330;;;15736:4;-1:-1:-1;;15664:77:1;15658:4;15655:87;15652:113;;;15745:18;;:::i;:::-;15795:7;15785:8;15781:22;15778:55;;;15815:16;;;;15778:55;15894:22;;;;15854:15;;;;15596:330;;;15600:3;15450:482;;;;;:::o;15937:866::-;15986:5;16016:8;16006:80;;-1:-1:-1;16057:1:1;16071:5;;16006:80;16105:4;16095:76;;-1:-1:-1;16142:1:1;16156:5;;16095:76;16187:4;16205:1;16200:59;;;;16273:1;16268:130;;;;16180:218;;16200:59;16230:1;16221:10;;16244:5;;;16268:130;16305:3;16295:8;16292:17;16289:43;;;16312:18;;:::i;:::-;-1:-1:-1;;16368:1:1;16354:16;;16383:5;;16180:218;;16482:2;16472:8;16469:16;16463:3;16457:4;16454:13;16450:36;16444:2;16434:8;16431:16;16426:2;16420:4;16417:12;16413:35;16410:77;16407:159;;;-1:-1:-1;16519:19:1;;;16551:5;;16407:159;16598:34;16623:8;16617:4;16598:34;:::i;:::-;16728:6;-1:-1:-1;;16656:79:1;16647:7;16644:92;16641:118;;;16739:18;;:::i;:::-;16777:20;;15937:866;-1:-1:-1;;;15937:866:1:o;16808:131::-;16868:5;16897:36;16924:8;16918:4;16897:36;:::i;16944:228::-;16984:7;17110:1;-1:-1:-1;;17038:74:1;17035:1;17032:81;17027:1;17020:9;17013:17;17009:105;17006:131;;;17117:18;;:::i;:::-;-1:-1:-1;17157:9:1;;16944:228::o;17430:140::-;17488:5;17517:47;17558:4;17548:8;17544:19;17538:4;17517:47;:::i;17575:274::-;17615:1;17641;17631:189;;17676:77;17673:1;17666:88;17777:4;17774:1;17767:15;17805:4;17802:1;17795:15;17631:189;-1:-1:-1;17834:9:1;;17575:274::o;17854:125::-;17894:4;17922:1;17919;17916:8;17913:34;;;17927:18;;:::i;:::-;-1:-1:-1;17964:9:1;;17854:125::o;18753:184::-;18805:77;18802:1;18795:88;18902:4;18899:1;18892:15;18926:4;18923:1;18916:15;18942:175;18979:3;19023:4;19016:5;19012:16;19052:4;19043:7;19040:17;19037:43;;;19060:18;;:::i;:::-;19109:1;19096:15;;18942:175;-1:-1:-1;;18942:175:1:o;19122:128::-;19162:3;19193:1;19189:6;19186:1;19183:13;19180:39;;;19199:18;;:::i;:::-;-1:-1:-1;19235:9:1;;19122:128::o;20545:251::-;20615:6;20668:2;20656:9;20647:7;20643:23;20639:32;20636:52;;;20684:1;20681;20674:12;20636:52;20716:9;20710:16;20735:31;20760:5;20735:31;:::i;20801:533::-;21072:6;21061:9;21054:25;21115:3;21110:2;21099:9;21095:18;21088:31;21035:4;21136:57;21188:3;21177:9;21173:19;21165:6;21136:57;:::i;:::-;-1:-1:-1;;;;;21229:55:1;;;;21224:2;21209:18;;21202:83;-1:-1:-1;21316:2:1;21301:18;21294:34;21128:65;20801:533;-1:-1:-1;;20801:533:1:o;21339:184::-;21409:6;21462:2;21450:9;21441:7;21437:23;21433:32;21430:52;;;21478:1;21475;21468:12;21430:52;-1:-1:-1;21501:16:1;;21339:184;-1:-1:-1;21339:184:1:o;21528:556::-;21582:5;21635:3;21628:4;21620:6;21616:17;21612:27;21602:55;;21653:1;21650;21643:12;21602:55;21682:6;21676:13;21708:18;21704:2;21701:26;21698:52;;;21730:18;;:::i;:::-;21774:114;21882:4;-1:-1:-1;;21806:4:1;21802:2;21798:13;21794:86;21790:97;21774:114;:::i;:::-;21913:2;21904:7;21897:19;21959:3;21952:4;21947:2;21939:6;21935:15;21931:26;21928:35;21925:55;;;21976:1;21973;21966:12;21925:55;21989:64;22050:2;22043:4;22034:7;22030:18;22023:4;22015:6;22011:17;21989:64;:::i;22089:971::-;22226:6;22234;22242;22250;22303:3;22291:9;22282:7;22278:23;22274:33;22271:53;;;22320:1;22317;22310:12;22271:53;22353:9;22347:16;22382:18;22423:2;22415:6;22412:14;22409:34;;;22439:1;22436;22429:12;22409:34;22462:61;22515:7;22506:6;22495:9;22491:22;22462:61;:::i;:::-;22452:71;;22569:2;22558:9;22554:18;22548:25;22532:41;;22598:2;22588:8;22585:16;22582:36;;;22614:1;22611;22604:12;22582:36;22637:63;22692:7;22681:8;22670:9;22666:24;22637:63;:::i;:::-;22627:73;;22746:2;22735:9;22731:18;22725:25;22709:41;;22775:2;22765:8;22762:16;22759:36;;;22791:1;22788;22781:12;22759:36;22814:63;22869:7;22858:8;22847:9;22843:24;22814:63;:::i;:::-;22804:73;;22923:2;22912:9;22908:18;22902:25;22886:41;;22952:2;22942:8;22939:16;22936:36;;;22968:1;22965;22958:12;22936:36;;22991:63;23046:7;23035:8;23024:9;23020:24;22991:63;:::i;:::-;22981:73;;;22089:971;;;;;;;:::o;25546:224::-;25585:3;25613:6;25646:2;25643:1;25639:10;25676:2;25673:1;25669:10;25707:3;25703:2;25699:12;25694:3;25691:21;25688:47;;;25715:18;;:::i;:::-;25751:13;;25546:224;-1:-1:-1;;;;25546:224:1:o;26107:245::-;26174:6;26227:2;26215:9;26206:7;26202:23;26198:32;26195:52;;;26243:1;26240;26233:12;26195:52;26275:9;26269:16;26294:28;26316:5;26294:28;:::i;30771:605::-;31070:6;31059:9;31052:25;31113:6;31108:2;31097:9;31093:18;31086:34;31156:3;31151:2;31140:9;31136:18;31129:31;31033:4;31177:57;31229:3;31218:9;31214:19;31206:6;31177:57;:::i;:::-;-1:-1:-1;;;;;31270:55:1;;;;31265:2;31250:18;;31243:83;-1:-1:-1;31357:3:1;31342:19;31335:35;31169:65;30771:605;-1:-1:-1;;;30771:605:1:o;32016:306::-;32104:6;32112;32120;32173:2;32161:9;32152:7;32148:23;32144:32;32141:52;;;32189:1;32186;32179:12;32141:52;32218:9;32212:16;32202:26;;32268:2;32257:9;32253:18;32247:25;32237:35;;32312:2;32301:9;32297:18;32291:25;32281:35;;32016:306;;;;;:::o;32327:217::-;32366:4;32395:6;32451:10;;;;32421;;32473:12;;;32470:38;;;32488:18;;:::i;:::-;32525:13;;32327:217;-1:-1:-1;;;32327:217:1:o

Swarm Source

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