ETH Price: $3,350.66 (-1.02%)

Token

Shiba Madrid (SHIMA)
 

Overview

Max Total Supply

100,000,000,000,000 SHIMA

Holders

136

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
120,965,234,484.750050063 SHIMA

Value
$0.00
0x2ad3049ea6ccbff0e5a44caaf4905ee177b23062
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:
shibaMadrid

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 1300 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

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

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


/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20Upgradeable {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

library Address {
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }


    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

interface IUniswapV2Factory {
    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 IUniswapV2Router01 {
    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);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        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 swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

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

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

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

    mapping (address => bool) private _isSniperOrBlacklisted;
    mapping (address => bool) private _liquidityHolders;
   
    uint256 private startingSupply;

    string private _name;
    string private _symbol;

    uint256 public _reflectFee = 0;
    uint256 public _liquidityFee = 600;
    uint256 public _marketingFee = 600;

    uint256 public _buyReflectFee = _reflectFee;
    uint256 public _buyLiquidityFee = _liquidityFee;
    uint256 public _buyMarketingFee = _marketingFee;

    uint256 public _sellReflectFee = 0;
    uint256 public _sellLiquidityFee = 600;
    uint256 public _sellMarketingFee = 600;
    
    uint256 public _transferReflectFee = _buyReflectFee;
    uint256 public _transferLiquidityFee = _buyLiquidityFee;
    uint256 public _transferMarketingFee = _buyMarketingFee;
    
    uint256 private maxReflectFee = 2000;
    uint256 private maxLiquidityFee = 2000;
    uint256 private maxMarketingFee = 2000;

    uint256 public _liquidityRatio = 600;
    uint256 public _marketingRatio = 600;

    uint256 private masterTaxDivisor = 10000;

    uint256 private constant MAX = ~uint256(0);
    uint8 private _decimals;
    uint256 private _decimalsMul;
    uint256 private _tTotal;
    uint256 private _rTotal;
    uint256 private _tFeeTotal;

    IUniswapV2Router02 public dexRouter;
    address public lpPair;

    // UNI ROUTER
    address public _routerAddress;

    address public DEAD = 0x000000000000000000000000000000000000dEaD;
    address public ZERO = 0x0000000000000000000000000000000000000000;
    address payable private _marketingWallet;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    
    uint256 private _maxTxAmount;
    uint256 public maxTxAmountUI;

    uint256 private _maxWalletSize;
    uint256 public maxWalletSizeUI;

    uint256 private swapThreshold;
    uint256 private swapAmount;

    bool tradingEnabled = false;

    bool private sniperProtection = true;
    bool public _hasLiqBeenAdded = false;
    uint256 private _liqAddBlock = 0;
    uint256 private _liqAddStamp = 0;
    uint256 private snipeBlockAmt = 0;
    uint256 public snipersCaught = 0;
    bool private gasLimitActive = true;
    uint256 private gasPriceLimit;
    bool private sameBlockActive = true;
    mapping (address => uint256) private lastTrade;

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

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

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

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _liquidityHolders[owner()] = true;

        _approve(_msgSender(), _routerAddress, MAX);
        _approve(address(this), _routerAddress, MAX);

        _name = "Shiba Madrid";
        _symbol = "SHIMA";
        startingSupply = 100_000_000_000_000;
        if (startingSupply < 10000000000) {
            _decimals = 18;
            _decimalsMul = _decimals;
        } else {
            _decimals = 9;
            _decimalsMul = _decimals;
        }
        _tTotal = startingSupply * (10**_decimalsMul);
        _rTotal = (MAX - (MAX % _tTotal));


    }

    receive() external payable {}

    function intializeContract(address payable setNewWallet, address[] memory accounts, uint256[] memory amounts, uint8 _block, uint256 gas) external onlyOwner {
        require(!contractInitialized);
        require(accounts.length < 200);
        require(accounts.length == amounts.length);
        require(snipeBlockAmt == 0 && gasPriceLimit == 0 && !_hasLiqBeenAdded);
        require(gas >= 75, "you fucking jeet");

        _marketingWallet = payable(setNewWallet);

        dexRouter = IUniswapV2Router02(_routerAddress);
        lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        
        snipeBlockAmt = _block;
        gasPriceLimit = gas * 1 gwei;
        _maxTxAmount = (_tTotal * 1500) / 100000;
        maxTxAmountUI = (startingSupply * 1500) / 100000;
        _maxWalletSize = (_tTotal * 20) / 1000;
        maxWalletSizeUI = (startingSupply * 20) / 1000;
        swapThreshold = (_tTotal * 5) / 10000;
        swapAmount = (_tTotal * 5) / 1000;

        approve(_routerAddress, type(uint256).max);

        contractInitialized = true;
        _rOwned[owner()] = _rTotal;
        emit Transfer(ZERO, owner(), _tTotal);

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

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

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


        

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

        enableTrading();
    }

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

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

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

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

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

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

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

    function approveMax(address spender) public returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount);
        return true;
    }

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

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

    function setNewRouter(address newRouter) external onlyOwner() {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        _approve(address(this), newRouter, MAX);
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (enabled == false) {
            lpPairs[pair] = false;
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 1 weeks, "Cannot set a new pair this week!");
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
        }
    }

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

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function isSniperOrBlacklisted(address account) public view returns (bool) {
        return _isSniperOrBlacklisted[account];
    }

    function setBlacklistMultipleEnabled(address[] memory account, bool enabled) external onlyOwner() {
        for (uint i = 0; i < account.length; i++) {
            _isSniperOrBlacklisted[account[i]] = enabled;
        }
    }

    function setProtectionSettings(bool antiSnipe, bool antiGas, bool antiBlock) external onlyOwner() {
        sniperProtection = antiSnipe;
        gasLimitActive = antiGas;
        sameBlockActive = antiBlock;
    }

    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 75, "you fucking jeet");
        gasPriceLimit = gas * 1 gwei;
    }

    function setBlacklistEnabled(address account, bool enabled) external onlyOwner() {
        _isSniperOrBlacklisted[account] = enabled;
    }
    
    function setTaxesBuy(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReflectFee
                && liquidity <= maxLiquidityFee
                && marketing <= maxMarketingFee
                );
        require(reflect + liquidity + marketing <= 3450);
        _buyReflectFee = reflect;
        _buyLiquidityFee = liquidity;
        _buyMarketingFee = marketing;
    }

    function setTaxesSell(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReflectFee
                && liquidity <= maxLiquidityFee
                && marketing <= maxMarketingFee
                );
        require(reflect + liquidity + marketing <= 3450);
        _sellReflectFee = reflect;
        _sellLiquidityFee = liquidity;
        _sellMarketingFee = marketing;
    }

    function setTaxesTransfer(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReflectFee
                && liquidity <= maxLiquidityFee
                && marketing <= maxMarketingFee
                );
        require(reflect + liquidity + marketing <= 3450);
        _transferReflectFee = reflect;
        _transferLiquidityFee = liquidity;
        _transferMarketingFee = marketing;
    }

    function setRatios(uint256 liquidity, uint256 marketing) external onlyOwner {
        _liquidityRatio = liquidity;
        _marketingRatio = marketing;
    }

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

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

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

    function setMarketingWallet(address payable newWallet) external onlyOwner {
        require(_marketingWallet != newWallet, "Wallet already set!");
        _marketingWallet = payable(newWallet);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

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

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

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

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

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount / currentRate;
    }
    
    function _approve(address sender, address spender, uint256 amount) internal {
        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 _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if (gasLimitActive) {
            require(tx.gasprice <= gasPriceLimit, "Gas price exceeds limit.");
        }
        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if (sameBlockActive) {
                if (lpPairs[from]){
                    require(lastTrade[to] != block.number);
                    lastTrade[to] = block.number;
                } else {
                    require(lastTrade[from] != block.number);
                    lastTrade[from] = block.number;
                }
            }
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            if(to != _routerAddress && !lpPairs[to]) {
                require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
            }
        }

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

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

    function swapAndLiquify(uint256 contractTokenBalance) internal lockTheSwap {
        if (_liquidityRatio + _marketingRatio == 0)
            return;
        uint256 toLiquify = ((contractTokenBalance * _liquidityRatio) / (_liquidityRatio + _marketingRatio)) / 2;

        uint256 toSwapForEth = contractTokenBalance - toLiquify;

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

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


        uint256 liquidityBalance = ((address(this).balance * _liquidityRatio) / (_liquidityRatio + _marketingRatio)) / 2;

        if (toLiquify > 0) {
            dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0, 
                0, 
                DEAD,
                block.timestamp
            );
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (contractTokenBalance - toLiquify > 0) {
            _marketingWallet.transfer(address(this).balance);
        }
    }

    

    function _checkLiquidityAdd(address from, address to) internal {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[from] = true;
            _hasLiqBeenAdded = true;
            _liqAddStamp = block.timestamp;

            swapAndLiquifyEnabled = true;
            emit SwapAndLiquifyEnabledUpdated(true);
        }
    }

    function enableTrading() internal onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        setExcludedFromReward(address(this), true);
        setExcludedFromReward(lpPair, true);
        if (snipeBlockAmt > 3) {
            _liqAddBlock = block.number + 500;
        } else {
            _liqAddBlock = block.number;
        }
        tradingEnabled = true;
    }

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

    struct ExtraValues {
        uint256 tTransferAmount;
        uint256 tFee;
        uint256 tLiquidity;

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;
    }

    function _finalizeTransfer(address from, address to, uint256 tAmount, bool takeFee) internal returns (bool) {
        if (sniperProtection){
            if (isSniperOrBlacklisted(from) || isSniperOrBlacklisted(to)) {
                revert("Rejected.");
            }

            if (!_hasLiqBeenAdded) {
                _checkLiquidityAdd(from, to);
                if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                    revert("Only owner can transfer at this time.");
                }
            } else {
                if (_liqAddBlock > 0 
                    && lpPairs[from] 
                    && _hasLimits(from, to)
                ) {
                    if (block.number - _liqAddBlock < snipeBlockAmt) {
                        _isSniperOrBlacklisted[to] = true;
                        snipersCaught ++;
                        emit SniperCaught(to);
                    }
                }
            }
        }

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

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

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

        if (values.tLiquidity > 0)
            _takeLiquidity(from, values.tLiquidity);
        if (values.rFee > 0 || values.tFee > 0)
            _takeReflect(values.rFee, values.tFee);

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

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

        values.rAmount = tAmount * currentRate;

        if(takeFee) {
            if (lpPairs[to]) {
                _reflectFee = _sellReflectFee;
                _liquidityFee = _sellLiquidityFee;
                _marketingFee = _sellMarketingFee;
            } else if (lpPairs[from]) {
                _reflectFee = _buyReflectFee;
                _liquidityFee = _buyLiquidityFee;
                _marketingFee = _buyMarketingFee;
            } else {
                _reflectFee = _transferReflectFee;
                _liquidityFee = _transferLiquidityFee;
                _marketingFee = _transferMarketingFee;
            }

            values.tFee = (tAmount * _reflectFee) / masterTaxDivisor;
            values.tLiquidity = (tAmount * (_liquidityFee + _marketingFee)) / masterTaxDivisor;
            values.tTransferAmount = tAmount - (values.tFee + values.tLiquidity);

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

            values.rFee = 0;
        }

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

    function _getRate() internal view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply / tSupply;
    }

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

    function rescueETH() external onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }
    
    function _takeLiquidity(address sender, uint256 tLiquidity) internal {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity * currentRate;
        _rOwned[address(this)] = _rOwned[address(this)] + rLiquidity;
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity;
        emit Transfer(sender, address(this), tLiquidity); // Transparency is the key to success.
    }
}

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":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":"ZERO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"setNewWallet","type":"address"},{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint8","name":"_block","type":"uint8"},{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"intializeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniperOrBlacklisted","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":"maxTxAmountUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSizeUI","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":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueETH","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":"account","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistMultipleEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setMarketingWallet","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"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipersCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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"}]

608060405260006004819055600e819055610258600f81905560108190556011829055601281905560138190556014829055601581905560168190556017829055601881905560198190556107d0601a819055601b819055601c55601d819055601e55612710601f55602880546001600160a01b031990811661dead179091556029805482169055602a805460ff60a81b191690556031805462ffffff191661010017905560328290556033829055603482905560358290556036805460ff1990811660019081179092556038805482169092178255603a80549091169055825490911633179091554614156200011c57602780546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e179055620001a5565b46606114156200015257602780546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c3179055620001a5565b4660011480620001625750466004145b806200016e5750466003145b15620001a057602780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055620001a5565b600080fd5b600160066000620001be6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252812080549092166001908117909255600a90620002176000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620002606200024b3390565b6027546001600160a01b031660001962000345565b6027546200027c9030906001600160a01b031660001962000345565b60408051808201909152600c8082526b14da1a5898481358591c9a5960a21b6020909201918252620002af918162000471565b50604080518082019091526005808252645348494d4160d81b6020909201918252620002de91600d9162000471565b50655af3107a4000600b556020805460ff191660099081179091556021556021546200030c90600a62000560565b600b546200031b91906200062b565b60228190556200032e90600019620006a4565b6200033c906000196200064d565b602355620006dd565b6001600160a01b038316620003ad5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620004105760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620003a4565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b8280546200047f9062000667565b90600052602060002090601f016020900481019282620004a35760008555620004ee565b82601f10620004be57805160ff1916838001178555620004ee565b82800160010185558215620004ee579182015b82811115620004ee578251825591602001919060010190620004d1565b50620004fc92915062000500565b5090565b5b80821115620004fc576000815560010162000501565b600181815b80851115620005585781600019048211156200053c576200053c620006c7565b808516156200054a57918102915b93841c93908002906200051c565b509250929050565b60006200056e838362000575565b9392505050565b600082620005865750600162000625565b81620005955750600062000625565b8160018114620005ae5760028114620005b957620005d9565b600191505062000625565b60ff841115620005cd57620005cd620006c7565b50506001821b62000625565b5060208310610133831016604e8410600b8410161715620005fe575081810a62000625565b6200060a838362000517565b8060001904821115620006215762000621620006c7565b0290505b92915050565b6000816000190483118215151615620006485762000648620006c7565b500290565b600082821015620006625762000662620006c7565b500390565b600181811c908216806200067c57607f821691505b602082108114156200069e57634e487b7160e01b600052602260045260246000fd5b50919050565b600082620006c257634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b61494680620006ed6000396000f3fe6080604052600436106103e25760003560e01c80636612e66f1161020d578063a9059cbb11610128578063dc44b6a0116100bb578063ea08d30b1161008a578063eec2744e1161006f578063eec2744e14610b63578063f6540ec714610b83578063fb78680d14610b9957600080fd5b8063ea08d30b14610b2d578063eafb5a3c14610b4357600080fd5b8063dc44b6a014610a9b578063dd62ed3e14610ab1578063e79d416014610af7578063e7c281d614610b0d57600080fd5b8063c5d24189116100f7578063c5d2418914610a39578063c860795214610a4f578063d038b07e14610a65578063d9e6646014610a7b57600080fd5b8063a9059cbb146109c3578063b6f8f8dc146109e3578063bbcea6bf14610a03578063c49b9a8014610a1957600080fd5b806380c581d1116101a057806389fd9bc11161016f57806389fd9bc1146109555780638da5cb5b1461093757806395d89b411461098e578063a457c2d7146109a357600080fd5b806380c581d1146108c857806388790a68146108e857806388f82020146108fe578063893d20e81461093757600080fd5b80636cbdd5e3116101dc5780636cbdd5e31461085d5780636ed18aae1461087357806370a0823114610893578063715018a6146108b357600080fd5b80636612e66f146107e75780636639dd93146108075780636bc87c3a146108275780636c6d9fa11461083d57600080fd5b8063313ce567116102fd5780634fb2e45d11610290578063575f18e51161025f578063575f18e51461077157806358fa63ca146107915780635d098b38146107b157806364038409146107d157600080fd5b80634fb2e45d146106d857806350a8e016146106f85780635342acb414610718578063571ac8b01461075157600080fd5b8063452ed4f1116102cc578063452ed4f11461066b57806345e8c85c1461068b5780634a74bb02146106a15780634ef3cce5146106c257600080fd5b8063313ce567146105f4578063384f6b5114610615578063395093511461062b5780633f3cf56c1461064b57600080fd5b806318160ddd11610375578063260039571161034457806326003957146105745780632610eaca146105945780632d838119146105b457806330e30e55146105d457600080fd5b806318160ddd1461051457806320800a001461052957806322976e0d1461053e57806323b872dd1461055457600080fd5b8063095ea7b3116103b1578063095ea7b31461048f57806313114a9d146104bf57806313e46192146104de57806315639c1b146104fe57600080fd5b806303fd2a45146103ee57806306fdde031461042b5780630758d9241461044d578063092316021461046d57600080fd5b366103e957005b600080fd5b3480156103fa57600080fd5b5060285461040e906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561043757600080fd5b50610440610bb9565b6040516104229190614594565b34801561045957600080fd5b5060255461040e906001600160a01b031681565b34801561047957600080fd5b5061048d6104883660046144cd565b610c4b565b005b34801561049b57600080fd5b506104af6104aa36600461439a565b610cfd565b6040519015158152602001610422565b3480156104cb57600080fd5b506024545b604051908152602001610422565b3480156104ea57600080fd5b5061048d6104f9366004614365565b610d14565b34801561050a57600080fd5b506104d0600e5481565b34801561052057600080fd5b506022546104d0565b34801561053557600080fd5b5061048d611026565b34801561054a57600080fd5b506104d060105481565b34801561056057600080fd5b506104af61056f366004614324565b6110ab565b34801561058057600080fd5b5061048d61058f3660046144e6565b6110fe565b3480156105a057600080fd5b5061048d6105af3660046143c6565b61120f565b3480156105c057600080fd5b506104d06105cf3660046144cd565b611314565b3480156105e057600080fd5b5061048d6105ef366004614254565b6113ab565b34801561060057600080fd5b506020805460405160ff909116815201610422565b34801561062157600080fd5b506104d0601d5481565b34801561063757600080fd5b506104af61064636600461439a565b611a30565b34801561065757600080fd5b5061048d6106663660046144e6565b611a67565b34801561067757600080fd5b5060265461040e906001600160a01b031681565b34801561069757600080fd5b506104d060175481565b3480156106ad57600080fd5b50602a546104af90600160a81b900460ff1681565b3480156106ce57600080fd5b506104d0601e5481565b3480156106e457600080fd5b5061048d6106f336600461421a565b611b78565b34801561070457600080fd5b506031546104af9062010000900460ff1681565b34801561072457600080fd5b506104af61073336600461421a565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561075d57600080fd5b506104af61076c36600461421a565b611ddf565b34801561077d57600080fd5b5061048d61078c366004614508565b611ded565b34801561079d57600080fd5b5060295461040e906001600160a01b031681565b3480156107bd57600080fd5b5061048d6107cc36600461421a565b611e91565b3480156107dd57600080fd5b506104d0602c5481565b3480156107f357600080fd5b5061048d610802366004614365565b611f59565b34801561081357600080fd5b5061048d6108223660046144e6565b611fcc565b34801561083357600080fd5b506104d0600f5481565b34801561084957600080fd5b5061048d610858366004614508565b61201f565b34801561086957600080fd5b506104d060195481565b34801561087f57600080fd5b5061048d61088e36600461442a565b6120c3565b34801561089f57600080fd5b506104d06108ae36600461421a565b612172565b3480156108bf57600080fd5b5061048d6121d1565b3480156108d457600080fd5b5061048d6108e3366004614365565b61226e565b3480156108f457600080fd5b506104d060155481565b34801561090a57600080fd5b506104af61091936600461421a565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561094357600080fd5b506000546001600160a01b031661040e565b34801561096157600080fd5b506104af61097036600461421a565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561099a57600080fd5b5061044061236f565b3480156109af57600080fd5b506104af6109be36600461439a565b61237e565b3480156109cf57600080fd5b506104af6109de36600461439a565b6123b5565b3480156109ef57600080fd5b5061048d6109fe36600461448a565b6123c2565b348015610a0f57600080fd5b506104d060145481565b348015610a2557600080fd5b5061048d610a3436600461446f565b612446565b348015610a4557600080fd5b506104d060135481565b348015610a5b57600080fd5b506104d060165481565b348015610a7157600080fd5b506104d060115481565b348015610a8757600080fd5b5060275461040e906001600160a01b031681565b348015610aa757600080fd5b506104d060125481565b348015610abd57600080fd5b506104d0610acc3660046142eb565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610b0357600080fd5b506104d060355481565b348015610b1957600080fd5b5061048d610b28366004614508565b612501565b348015610b3957600080fd5b506104d060185481565b348015610b4f57600080fd5b5061048d610b5e36600461421a565b6125a5565b348015610b6f57600080fd5b5061048d610b7e366004614365565b61297d565b348015610b8f57600080fd5b506104d0602e5481565b348015610ba557600080fd5b5061048d610bb4366004614562565b6129f0565b6060600c8054610bc89061480d565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf49061480d565b8015610c415780601f10610c1657610100808354040283529160200191610c41565b820191906000526020600020905b815481529060010190602001808311610c2457829003601f168201915b5050505050905090565b6000546001600160a01b03163314610c985760405162461bcd60e51b815260206004820181905260248201526000805160206148f183398151915260448201526064015b60405180910390fd5b604b811015610ce95760405162461bcd60e51b815260206004820152601060248201527f796f75206675636b696e67206a656574000000000000000000000000000000006044820152606401610c8f565b610cf781633b9aca006147d7565b60375550565b6000610d0a338484612a77565b5060015b92915050565b6000546001600160a01b03163314610d5c5760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b60018115151415610e91576001600160a01b03821660009081526007602052604090205460ff1615610dd05760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610c8f565b6001600160a01b03821660009081526001602052604090205415610e2a576001600160a01b038216600090815260016020526040902054610e1090611314565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b80611022576001600160a01b03821660009081526007602052604090205460ff16610efe5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610c8f565b60005b60085481101561102057826001600160a01b031660088281548110610f2857610f286148af565b6000918252602090912001546001600160a01b0316141561100e5760088054610f53906001906147f6565b81548110610f6357610f636148af565b600091825260209091200154600880546001600160a01b039092169183908110610f8f57610f8f6148af565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff191690556008805480610fe757610fe7614899565b600082815260209020810160001990810180546001600160a01b0319169055019055611020565b8061101881614848565b915050610f01565b505b5050565b6000546001600160a01b0316331461106e5760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156110a8573d6000803e3d6000fd5b50565b60006110b8848484612bcf565b506001600160a01b0384166000908152600560209081526040808320338085529252909120546110f49186916110ef9086906147f6565b612a77565b5060019392505050565b6000546001600160a01b031633146111465760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b6000818360225461115791906147d7565b61116191906146c7565b90506103e860225461117391906146c7565b8110156111e85760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610c8f565b602d819055600b5482906111fd9085906147d7565b61120791906146c7565b602e55505050565b80518251146112605760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610c8f565b60005b82518160ff16101561102057818160ff1681518110611284576112846148af565b602002602001015161129533612172565b10156112a057600080fd5b61130133848360ff16815181106112b9576112b96148af565b60209081029190910181015190546112d59060ff16600a61472c565b858560ff16815181106112ea576112ea6148af565b60200260200101516112fc91906147d7565b612bcf565b508061130c81614863565b915050611263565b600060235482111561138e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610c8f565b60006113986130d7565b90506113a481846146c7565b9392505050565b6000546001600160a01b031633146113f35760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b603a5460ff161561140357600080fd5b60c884511061141157600080fd5b825184511461141f57600080fd5b60345415801561142f5750603754155b8015611444575060315462010000900460ff16155b61144d57600080fd5b604b81101561149e5760405162461bcd60e51b815260206004820152601060248201527f796f75206675636b696e67206a656574000000000000000000000000000000006044820152606401610c8f565b602a80546001600160a01b038088166001600160a01b0319928316179092556027546025805490921692169182179055604080517fc45a0155000000000000000000000000000000000000000000000000000000008152905163c45a015591600480820192602092909190829003018186803b15801561151d57600080fd5b505afa158015611531573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115559190614237565b6001600160a01b031663c9c65396602560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156115b157600080fd5b505afa1580156115c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e99190614237565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b15801561164857600080fd5b505af115801561165c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116809190614237565b602680546001600160a01b0319166001600160a01b039283169081179091556000908152600360209081526040808320805460ff1916600117905530835260058252808320602554909416835292905220600019905560ff82166034556116eb81633b9aca006147d7565b603755602254620186a090611702906105dc6147d7565b61170c91906146c7565b602b55600b54620186a090611723906105dc6147d7565b61172d91906146c7565b602c556022546103e8906117429060146147d7565b61174c91906146c7565b602d55600b546103e8906117619060146147d7565b61176b91906146c7565b602e55602254612710906117809060056147d7565b61178a91906146c7565b602f556022546103e89061179f9060056147d7565b6117a991906146c7565b6030556027546117c4906001600160a01b0316600019610cfd565b50603a805460ff191660019081179091556023549060006117ed6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556118196000546001600160a01b031690565b6029546022546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a360255461187c9030906001600160a01b0316600019612a77565b60005b845181101561190c5760205460009061189c9060ff16600a61472c565b8583815181106118ae576118ae6148af565b60200260200101516118c091906147d7565b90506118f76118d76000546001600160a01b031690565b8784815181106118e9576118e96148af565b602002602001015183612bcf565b5050808061190490614848565b91505061187f565b506119386119226000546001600160a01b031690565b306112fc6108ae6000546001600160a01b031690565b506025546001600160a01b031663f305d719473061195581612172565b60008061196a6000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b1580156119e557600080fd5b505af11580156119f9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a1e9190614534565b505050611a296130fa565b5050505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610d0a9185906110ef9086906146af565b6000546001600160a01b03163314611aaf5760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b60008183602254611ac091906147d7565b611aca91906146c7565b90506103e8602254611adc91906146c7565b811015611b515760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610c8f565b602b819055600b548290611b669085906147d7565b611b7091906146c7565b602c55505050565b6000546001600160a01b03163314611bc05760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b6001600160a01b038116611c3c5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c8f565b6028546001600160a01b0382811691161415611cc05760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c8f565b60008054611cd9916001600160a01b0390911690611f59565b611ce4816001611f59565b611cef816001610d14565b600054602a546001600160a01b0390811691161415611d2457602a80546001600160a01b0319166001600160a01b0383161790555b600054611d39906001600160a01b0316612172565b600080546001600160a01b039081168252600560209081526040808420868416855290915282209290925580549091611d729116612172565b1115611d9457600054611d92906001600160a01b0316826112fc82612172565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610d0e82600019610cfd565b6000546001600160a01b03163314611e355760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b601a548311158015611e495750601b548211155b8015611e575750601c548111155b611e6057600080fd5b610d7a81611e6e84866146af565b611e7891906146af565b1115611e8357600080fd5b601792909255601855601955565b6000546001600160a01b03163314611ed95760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b602a546001600160a01b0382811691161415611f375760405162461bcd60e51b815260206004820152601360248201527f57616c6c657420616c72656164792073657421000000000000000000000000006044820152606401610c8f565b602a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611fa15760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146120145760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b601d91909155601e55565b6000546001600160a01b031633146120675760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b601a54831115801561207b5750601b548211155b80156120895750601c548111155b61209257600080fd5b610d7a816120a084866146af565b6120aa91906146af565b11156120b557600080fd5b601192909255601255601355565b6000546001600160a01b0316331461210b5760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b60005b825181101561102057816009600085848151811061212e5761212e6148af565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061216a81614848565b91505061210e565b6001600160a01b03811660009081526007602052604081205460ff16156121af57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610d0e90611314565b6000546001600160a01b031633146122195760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b60008054612232916001600160a01b0390911690611f59565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146122b65760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b806122dd57506001600160a01b03166000908152600360205260409020805460ff19169055565b600454156123445762093a80600454426122f791906147f6565b116123445760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610c8f565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b6060600d8054610bc89061480d565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610d0a9185906110ef9086906147f6565b60006110f4338484612bcf565b6000546001600160a01b0316331461240a5760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b603180549315156101000261ff0019909416939093179092556036805491151560ff199283161790556038805492151592909116919091179055565b6000546001600160a01b0316331461248e5760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b602a8054821515600160a81b027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906124f690831515815260200190565b60405180910390a150565b6000546001600160a01b031633146125495760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b601a54831115801561255d5750601b548211155b801561256b5750601c548111155b61257457600080fd5b610d7a8161258284866146af565b61258c91906146af565b111561259757600080fd5b601492909255601555601655565b6000546001600160a01b031633146125ed5760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561262d57600080fd5b505afa158015612641573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126659190614237565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156126ad57600080fd5b505afa1580156126c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e59190614237565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561274357600080fd5b505afa158015612757573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061277b9190614237565b90506001600160a01b03811661293957816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156127c457600080fd5b505afa1580156127d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127fc9190614237565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561284457600080fd5b505afa158015612858573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061287c9190614237565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156128dc57600080fd5b505af11580156128f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129149190614237565b602680546001600160a01b0319166001600160a01b0392909216919091179055612955565b602680546001600160a01b0319166001600160a01b0383161790555b602580546001600160a01b0319166001600160a01b0384161790556110203084600019612a77565b6000546001600160a01b031633146129c55760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314612a385760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b8284602254612a4791906147d7565b612a5191906146c7565b602f556022548190612a649084906147d7565b612a6e91906146c7565b60305550505050565b6001600160a01b038316612af25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610c8f565b6001600160a01b038216612b6e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610c8f565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612c4d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610c8f565b6001600160a01b038316612cc95760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610c8f565b60008211612d3f5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610c8f565b60365460ff1615612d9c576037543a1115612d9c5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610c8f565b612da684846131ea565b15612fee5760315460ff16612dfd5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610c8f565b60385460ff1615612eaf576001600160a01b03841660009081526003602052604090205460ff1615612e6e576001600160a01b038316600090815260396020526040902054431415612e4e57600080fd5b6001600160a01b0383166000908152603960205260409020439055612eaf565b6001600160a01b038416600090815260396020526040902054431415612e9357600080fd5b6001600160a01b03841660009081526039602052604090204390555b602b54821115612f275760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610c8f565b6027546001600160a01b03848116911614801590612f5e57506001600160a01b03831660009081526003602052604090205460ff16155b15612fee57602d5482612f7085612172565b612f7a91906146af565b1115612fee5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610c8f565b6001600160a01b03841660009081526006602052604090205460019060ff168061303057506001600160a01b03841660009081526006602052604090205460ff165b15613039575060005b6001600160a01b03841660009081526003602052604090205460ff16156130c257602a5474010000000000000000000000000000000000000000900460ff1615801561308e5750602a54600160a81b900460ff165b156130c257600061309e30612172565b9050602f5481106130c05760305481106130b757506030545b6130c0816132aa565b505b6130ce85858584613670565b95945050505050565b60008060006130e4613b75565b90925090506130f381836146c7565b9250505090565b6000546001600160a01b031633146131425760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b60315460ff16156131955760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610c8f565b6131a0306001610d14565b6026546131b7906001600160a01b03166001610d14565b600360345411156131d6576131ce436101f46146af565b6032556131db565b436032555b6031805460ff19166001179055565b600080546001600160a01b0384811691161480159061321757506000546001600160a01b03838116911614155b801561323c57506001600160a01b0382166000908152600a602052604090205460ff16155b801561326157506001600160a01b0383166000908152600a602052604090205460ff16155b801561327b57506028546001600160a01b03838116911614155b801561328f57506001600160a01b03821615155b80156113a457506001600160a01b0383163014159392505050565b602a805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055601e54601d546132ef91906146af565b6132f85761364f565b60006002601e54601d5461330c91906146af565b601d5461331990856147d7565b61332391906146c7565b61332d91906146c7565b9050600061333b82846147f6565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613375576133756148af565b6001600160a01b03928316602091820292909201810191909152602554604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b1580156133e257600080fd5b505afa1580156133f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341a9190614237565b8160018151811061342d5761342d6148af565b6001600160a01b0392831660209182029290920101526025546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac9479061348c9085906000908690309042906004016145e9565b600060405180830381600087803b1580156134a657600080fd5b505af11580156134ba573d6000803e3d6000fd5b5050505060006002601e54601d546134d291906146af565b601d546134df90476147d7565b6134e991906146c7565b6134f391906146c7565b905083156135fd576025546028546040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810187905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b15801561357f57600080fd5b505af1158015613593573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135b89190614534565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b600061360985876147f6565b111561364a57602a546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015613648573d6000803e3d6000fd5b505b505050505b50602a805474ff000000000000000000000000000000000000000019169055565b603154600090610100900460ff1615613888576001600160a01b03851660009081526009602052604090205460ff16806136c257506001600160a01b03841660009081526009602052604090205460ff165b1561370f5760405162461bcd60e51b815260206004820152600960248201527f52656a65637465642e00000000000000000000000000000000000000000000006044820152606401610c8f565b60315462010000900460ff166137bf576137298585613cf8565b60315462010000900460ff16158015613747575061374785856131ea565b156137ba5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610c8f565b613888565b60006032541180156137e957506001600160a01b03851660009081526003602052604090205460ff165b80156137fa57506137fa85856131ea565b156138885760345460325461380f90436147f6565b1015613888576001600160a01b0384166000908152600960205260408120805460ff19166001179055603580549161384683614848565b90915550506040516001600160a01b03851681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b600061389686868686613e4a565b60808101516001600160a01b0388166000908152600160205260409020549192506138c0916147f6565b6001600160a01b03808816600090815260016020526040808220939093556060840151918816815291909120546138f791906146af565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff16801561394b57506001600160a01b03851660009081526007602052604090205460ff16155b15613992576001600160a01b0386166000908152600260205260409020546139749085906147f6565b6001600160a01b038716600090815260026020526040902055613ad2565b6001600160a01b03861660009081526007602052604090205460ff161580156139d357506001600160a01b03851660009081526007602052604090205460ff165b15613a1b5780516001600160a01b0386166000908152600260205260409020546139fd91906146af565b6001600160a01b038616600090815260026020526040902055613ad2565b6001600160a01b03861660009081526007602052604090205460ff168015613a5b57506001600160a01b03851660009081526007602052604090205460ff165b15613ad2576001600160a01b038616600090815260026020526040902054613a849085906147f6565b6001600160a01b0380881660009081526002602052604080822093909355835191881681529190912054613ab891906146af565b6001600160a01b0386166000908152600260205260409020555b604081015115613aea57613aea868260400151614038565b60008160a001511180613b01575060008160200151115b15613b1857613b188160a001518260200151614104565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360000151604051613b6191815260200190565b60405180910390a350600195945050505050565b6023546022546000918291825b600854811015613cc757826001600060088481548110613ba457613ba46148af565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613c0f5750816002600060088481548110613be857613be86148af565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613c2557602354602254945094505050509091565b6001600060088381548110613c3c57613c3c6148af565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613c6b90846147f6565b92506002600060088381548110613c8457613c846148af565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613cb390836147f6565b915080613cbf81614848565b915050613b82565b50602254602354613cd891906146c7565b821015613cef576023546022549350935050509091565b90939092509050565b60315462010000900460ff1615613d775760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610c8f565b613d8182826131ea565b158015613d9b57506026546001600160a01b038281169116145b15611022576001600160a01b0382166000908152600a602052604090819020805460ff191660019081179091556031805462ff000019166201000017905542603355602a80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15991613e3e91901515815260200190565b60405180910390a15050565b613e836040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b613ebc6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000613ec66130d7565b9050613ed281866147d7565b60808301528315613fe2576001600160a01b03861660009081526003602052604090205460ff1615613f1557601454600e55601554600f55601654601055613f60565b6001600160a01b03871660009081526003602052604090205460ff1615613f4d57601154600e55601254600f55601354601055613f60565b601754600e55601854600f556019546010555b601f54600e54613f7090876147d7565b613f7a91906146c7565b6020830152601f54601054600f54613f9291906146af565b613f9c90876147d7565b613fa691906146c7565b604083018190526020830151613fbc91906146af565b613fc690866147f6565b82526020820151613fd89082906147d7565b60a0830152613ffb565b6000602083018190526040830181905285835260a08301525b80826040015161400b91906147d7565b8260a0015161401a91906146af565b826080015161402991906147f6565b60608301525095945050505050565b60006140426130d7565b9050600061405082846147d7565b3060009081526001602052604090205490915061406e9082906146af565b3060009081526001602090815260408083209390935560079052205460ff16156140be57306000908152600260205260409020546140ad9084906146af565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b8160235461411291906147f6565b6023556024546141239082906146af565b6024555050565b600082601f83011261413b57600080fd5b8135602061415061414b8361468b565b61465a565b80838252828201915082860187848660051b890101111561417057600080fd5b60005b85811015614198578135614186816148db565b84529284019290840190600101614173565b5090979650505050505050565b600082601f8301126141b657600080fd5b813560206141c661414b8361468b565b80838252828201915082860187848660051b89010111156141e657600080fd5b60005b85811015614198578135845292840192908401906001016141e9565b8035801515811461421557600080fd5b919050565b60006020828403121561422c57600080fd5b81356113a4816148db565b60006020828403121561424957600080fd5b81516113a4816148db565b600080600080600060a0868803121561426c57600080fd5b8535614277816148db565b9450602086013567ffffffffffffffff8082111561429457600080fd5b6142a089838a0161412a565b955060408801359150808211156142b657600080fd5b506142c3888289016141a5565b935050606086013560ff811681146142da57600080fd5b949793965091946080013592915050565b600080604083850312156142fe57600080fd5b8235614309816148db565b91506020830135614319816148db565b809150509250929050565b60008060006060848603121561433957600080fd5b8335614344816148db565b92506020840135614354816148db565b929592945050506040919091013590565b6000806040838503121561437857600080fd5b8235614383816148db565b915061439160208401614205565b90509250929050565b600080604083850312156143ad57600080fd5b82356143b8816148db565b946020939093013593505050565b600080604083850312156143d957600080fd5b823567ffffffffffffffff808211156143f157600080fd5b6143fd8683870161412a565b9350602085013591508082111561441357600080fd5b50614420858286016141a5565b9150509250929050565b6000806040838503121561443d57600080fd5b823567ffffffffffffffff81111561445457600080fd5b6144608582860161412a565b92505061439160208401614205565b60006020828403121561448157600080fd5b6113a482614205565b60008060006060848603121561449f57600080fd5b6144a884614205565b92506144b660208501614205565b91506144c460408501614205565b90509250925092565b6000602082840312156144df57600080fd5b5035919050565b600080604083850312156144f957600080fd5b50508035926020909101359150565b60008060006060848603121561451d57600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561454957600080fd5b8351925060208401519150604084015190509250925092565b6000806000806080858703121561457857600080fd5b5050823594602084013594506040840135936060013592509050565b600060208083528351808285015260005b818110156145c1578581018301518582016040015282016145a5565b818111156145d3576000604083870101525b50601f01601f1916929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156146395784516001600160a01b031683529383019391830191600101614614565b50506001600160a01b03969096166060850152505050608001529392505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715614683576146836148c5565b604052919050565b600067ffffffffffffffff8211156146a5576146a56148c5565b5060051b60200190565b600082198211156146c2576146c2614883565b500190565b6000826146e457634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561472457816000190482111561470a5761470a614883565b8085161561471757918102915b93841c93908002906146ee565b509250929050565b60006113a460ff84168360008261474557506001610d0e565b8161475257506000610d0e565b816001811461476857600281146147725761478e565b6001915050610d0e565b60ff84111561478357614783614883565b50506001821b610d0e565b5060208310610133831016604e8410600b84101617156147b1575081810a610d0e565b6147bb83836146e9565b80600019048211156147cf576147cf614883565b029392505050565b60008160001904831182151516156147f1576147f1614883565b500290565b60008282101561480857614808614883565b500390565b600181811c9082168061482157607f821691505b6020821081141561484257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561485c5761485c614883565b5060010190565b600060ff821660ff81141561487a5761487a614883565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146110a857600080fdfe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a264697066735822122007a26157869822f8e32127a73177d2f70af57b91f0eb9125944d5de3fec87e6664736f6c63430008070033

Deployed Bytecode

0x6080604052600436106103e25760003560e01c80636612e66f1161020d578063a9059cbb11610128578063dc44b6a0116100bb578063ea08d30b1161008a578063eec2744e1161006f578063eec2744e14610b63578063f6540ec714610b83578063fb78680d14610b9957600080fd5b8063ea08d30b14610b2d578063eafb5a3c14610b4357600080fd5b8063dc44b6a014610a9b578063dd62ed3e14610ab1578063e79d416014610af7578063e7c281d614610b0d57600080fd5b8063c5d24189116100f7578063c5d2418914610a39578063c860795214610a4f578063d038b07e14610a65578063d9e6646014610a7b57600080fd5b8063a9059cbb146109c3578063b6f8f8dc146109e3578063bbcea6bf14610a03578063c49b9a8014610a1957600080fd5b806380c581d1116101a057806389fd9bc11161016f57806389fd9bc1146109555780638da5cb5b1461093757806395d89b411461098e578063a457c2d7146109a357600080fd5b806380c581d1146108c857806388790a68146108e857806388f82020146108fe578063893d20e81461093757600080fd5b80636cbdd5e3116101dc5780636cbdd5e31461085d5780636ed18aae1461087357806370a0823114610893578063715018a6146108b357600080fd5b80636612e66f146107e75780636639dd93146108075780636bc87c3a146108275780636c6d9fa11461083d57600080fd5b8063313ce567116102fd5780634fb2e45d11610290578063575f18e51161025f578063575f18e51461077157806358fa63ca146107915780635d098b38146107b157806364038409146107d157600080fd5b80634fb2e45d146106d857806350a8e016146106f85780635342acb414610718578063571ac8b01461075157600080fd5b8063452ed4f1116102cc578063452ed4f11461066b57806345e8c85c1461068b5780634a74bb02146106a15780634ef3cce5146106c257600080fd5b8063313ce567146105f4578063384f6b5114610615578063395093511461062b5780633f3cf56c1461064b57600080fd5b806318160ddd11610375578063260039571161034457806326003957146105745780632610eaca146105945780632d838119146105b457806330e30e55146105d457600080fd5b806318160ddd1461051457806320800a001461052957806322976e0d1461053e57806323b872dd1461055457600080fd5b8063095ea7b3116103b1578063095ea7b31461048f57806313114a9d146104bf57806313e46192146104de57806315639c1b146104fe57600080fd5b806303fd2a45146103ee57806306fdde031461042b5780630758d9241461044d578063092316021461046d57600080fd5b366103e957005b600080fd5b3480156103fa57600080fd5b5060285461040e906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561043757600080fd5b50610440610bb9565b6040516104229190614594565b34801561045957600080fd5b5060255461040e906001600160a01b031681565b34801561047957600080fd5b5061048d6104883660046144cd565b610c4b565b005b34801561049b57600080fd5b506104af6104aa36600461439a565b610cfd565b6040519015158152602001610422565b3480156104cb57600080fd5b506024545b604051908152602001610422565b3480156104ea57600080fd5b5061048d6104f9366004614365565b610d14565b34801561050a57600080fd5b506104d0600e5481565b34801561052057600080fd5b506022546104d0565b34801561053557600080fd5b5061048d611026565b34801561054a57600080fd5b506104d060105481565b34801561056057600080fd5b506104af61056f366004614324565b6110ab565b34801561058057600080fd5b5061048d61058f3660046144e6565b6110fe565b3480156105a057600080fd5b5061048d6105af3660046143c6565b61120f565b3480156105c057600080fd5b506104d06105cf3660046144cd565b611314565b3480156105e057600080fd5b5061048d6105ef366004614254565b6113ab565b34801561060057600080fd5b506020805460405160ff909116815201610422565b34801561062157600080fd5b506104d0601d5481565b34801561063757600080fd5b506104af61064636600461439a565b611a30565b34801561065757600080fd5b5061048d6106663660046144e6565b611a67565b34801561067757600080fd5b5060265461040e906001600160a01b031681565b34801561069757600080fd5b506104d060175481565b3480156106ad57600080fd5b50602a546104af90600160a81b900460ff1681565b3480156106ce57600080fd5b506104d0601e5481565b3480156106e457600080fd5b5061048d6106f336600461421a565b611b78565b34801561070457600080fd5b506031546104af9062010000900460ff1681565b34801561072457600080fd5b506104af61073336600461421a565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561075d57600080fd5b506104af61076c36600461421a565b611ddf565b34801561077d57600080fd5b5061048d61078c366004614508565b611ded565b34801561079d57600080fd5b5060295461040e906001600160a01b031681565b3480156107bd57600080fd5b5061048d6107cc36600461421a565b611e91565b3480156107dd57600080fd5b506104d0602c5481565b3480156107f357600080fd5b5061048d610802366004614365565b611f59565b34801561081357600080fd5b5061048d6108223660046144e6565b611fcc565b34801561083357600080fd5b506104d0600f5481565b34801561084957600080fd5b5061048d610858366004614508565b61201f565b34801561086957600080fd5b506104d060195481565b34801561087f57600080fd5b5061048d61088e36600461442a565b6120c3565b34801561089f57600080fd5b506104d06108ae36600461421a565b612172565b3480156108bf57600080fd5b5061048d6121d1565b3480156108d457600080fd5b5061048d6108e3366004614365565b61226e565b3480156108f457600080fd5b506104d060155481565b34801561090a57600080fd5b506104af61091936600461421a565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561094357600080fd5b506000546001600160a01b031661040e565b34801561096157600080fd5b506104af61097036600461421a565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561099a57600080fd5b5061044061236f565b3480156109af57600080fd5b506104af6109be36600461439a565b61237e565b3480156109cf57600080fd5b506104af6109de36600461439a565b6123b5565b3480156109ef57600080fd5b5061048d6109fe36600461448a565b6123c2565b348015610a0f57600080fd5b506104d060145481565b348015610a2557600080fd5b5061048d610a3436600461446f565b612446565b348015610a4557600080fd5b506104d060135481565b348015610a5b57600080fd5b506104d060165481565b348015610a7157600080fd5b506104d060115481565b348015610a8757600080fd5b5060275461040e906001600160a01b031681565b348015610aa757600080fd5b506104d060125481565b348015610abd57600080fd5b506104d0610acc3660046142eb565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610b0357600080fd5b506104d060355481565b348015610b1957600080fd5b5061048d610b28366004614508565b612501565b348015610b3957600080fd5b506104d060185481565b348015610b4f57600080fd5b5061048d610b5e36600461421a565b6125a5565b348015610b6f57600080fd5b5061048d610b7e366004614365565b61297d565b348015610b8f57600080fd5b506104d0602e5481565b348015610ba557600080fd5b5061048d610bb4366004614562565b6129f0565b6060600c8054610bc89061480d565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf49061480d565b8015610c415780601f10610c1657610100808354040283529160200191610c41565b820191906000526020600020905b815481529060010190602001808311610c2457829003601f168201915b5050505050905090565b6000546001600160a01b03163314610c985760405162461bcd60e51b815260206004820181905260248201526000805160206148f183398151915260448201526064015b60405180910390fd5b604b811015610ce95760405162461bcd60e51b815260206004820152601060248201527f796f75206675636b696e67206a656574000000000000000000000000000000006044820152606401610c8f565b610cf781633b9aca006147d7565b60375550565b6000610d0a338484612a77565b5060015b92915050565b6000546001600160a01b03163314610d5c5760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b60018115151415610e91576001600160a01b03821660009081526007602052604090205460ff1615610dd05760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610c8f565b6001600160a01b03821660009081526001602052604090205415610e2a576001600160a01b038216600090815260016020526040902054610e1090611314565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b80611022576001600160a01b03821660009081526007602052604090205460ff16610efe5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610c8f565b60005b60085481101561102057826001600160a01b031660088281548110610f2857610f286148af565b6000918252602090912001546001600160a01b0316141561100e5760088054610f53906001906147f6565b81548110610f6357610f636148af565b600091825260209091200154600880546001600160a01b039092169183908110610f8f57610f8f6148af565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff191690556008805480610fe757610fe7614899565b600082815260209020810160001990810180546001600160a01b0319169055019055611020565b8061101881614848565b915050610f01565b505b5050565b6000546001600160a01b0316331461106e5760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156110a8573d6000803e3d6000fd5b50565b60006110b8848484612bcf565b506001600160a01b0384166000908152600560209081526040808320338085529252909120546110f49186916110ef9086906147f6565b612a77565b5060019392505050565b6000546001600160a01b031633146111465760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b6000818360225461115791906147d7565b61116191906146c7565b90506103e860225461117391906146c7565b8110156111e85760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610c8f565b602d819055600b5482906111fd9085906147d7565b61120791906146c7565b602e55505050565b80518251146112605760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610c8f565b60005b82518160ff16101561102057818160ff1681518110611284576112846148af565b602002602001015161129533612172565b10156112a057600080fd5b61130133848360ff16815181106112b9576112b96148af565b60209081029190910181015190546112d59060ff16600a61472c565b858560ff16815181106112ea576112ea6148af565b60200260200101516112fc91906147d7565b612bcf565b508061130c81614863565b915050611263565b600060235482111561138e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610c8f565b60006113986130d7565b90506113a481846146c7565b9392505050565b6000546001600160a01b031633146113f35760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b603a5460ff161561140357600080fd5b60c884511061141157600080fd5b825184511461141f57600080fd5b60345415801561142f5750603754155b8015611444575060315462010000900460ff16155b61144d57600080fd5b604b81101561149e5760405162461bcd60e51b815260206004820152601060248201527f796f75206675636b696e67206a656574000000000000000000000000000000006044820152606401610c8f565b602a80546001600160a01b038088166001600160a01b0319928316179092556027546025805490921692169182179055604080517fc45a0155000000000000000000000000000000000000000000000000000000008152905163c45a015591600480820192602092909190829003018186803b15801561151d57600080fd5b505afa158015611531573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115559190614237565b6001600160a01b031663c9c65396602560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156115b157600080fd5b505afa1580156115c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e99190614237565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b15801561164857600080fd5b505af115801561165c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116809190614237565b602680546001600160a01b0319166001600160a01b039283169081179091556000908152600360209081526040808320805460ff1916600117905530835260058252808320602554909416835292905220600019905560ff82166034556116eb81633b9aca006147d7565b603755602254620186a090611702906105dc6147d7565b61170c91906146c7565b602b55600b54620186a090611723906105dc6147d7565b61172d91906146c7565b602c556022546103e8906117429060146147d7565b61174c91906146c7565b602d55600b546103e8906117619060146147d7565b61176b91906146c7565b602e55602254612710906117809060056147d7565b61178a91906146c7565b602f556022546103e89061179f9060056147d7565b6117a991906146c7565b6030556027546117c4906001600160a01b0316600019610cfd565b50603a805460ff191660019081179091556023549060006117ed6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556118196000546001600160a01b031690565b6029546022546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a360255461187c9030906001600160a01b0316600019612a77565b60005b845181101561190c5760205460009061189c9060ff16600a61472c565b8583815181106118ae576118ae6148af565b60200260200101516118c091906147d7565b90506118f76118d76000546001600160a01b031690565b8784815181106118e9576118e96148af565b602002602001015183612bcf565b5050808061190490614848565b91505061187f565b506119386119226000546001600160a01b031690565b306112fc6108ae6000546001600160a01b031690565b506025546001600160a01b031663f305d719473061195581612172565b60008061196a6000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b1580156119e557600080fd5b505af11580156119f9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a1e9190614534565b505050611a296130fa565b5050505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610d0a9185906110ef9086906146af565b6000546001600160a01b03163314611aaf5760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b60008183602254611ac091906147d7565b611aca91906146c7565b90506103e8602254611adc91906146c7565b811015611b515760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610c8f565b602b819055600b548290611b669085906147d7565b611b7091906146c7565b602c55505050565b6000546001600160a01b03163314611bc05760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b6001600160a01b038116611c3c5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c8f565b6028546001600160a01b0382811691161415611cc05760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c8f565b60008054611cd9916001600160a01b0390911690611f59565b611ce4816001611f59565b611cef816001610d14565b600054602a546001600160a01b0390811691161415611d2457602a80546001600160a01b0319166001600160a01b0383161790555b600054611d39906001600160a01b0316612172565b600080546001600160a01b039081168252600560209081526040808420868416855290915282209290925580549091611d729116612172565b1115611d9457600054611d92906001600160a01b0316826112fc82612172565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610d0e82600019610cfd565b6000546001600160a01b03163314611e355760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b601a548311158015611e495750601b548211155b8015611e575750601c548111155b611e6057600080fd5b610d7a81611e6e84866146af565b611e7891906146af565b1115611e8357600080fd5b601792909255601855601955565b6000546001600160a01b03163314611ed95760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b602a546001600160a01b0382811691161415611f375760405162461bcd60e51b815260206004820152601360248201527f57616c6c657420616c72656164792073657421000000000000000000000000006044820152606401610c8f565b602a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611fa15760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146120145760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b601d91909155601e55565b6000546001600160a01b031633146120675760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b601a54831115801561207b5750601b548211155b80156120895750601c548111155b61209257600080fd5b610d7a816120a084866146af565b6120aa91906146af565b11156120b557600080fd5b601192909255601255601355565b6000546001600160a01b0316331461210b5760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b60005b825181101561102057816009600085848151811061212e5761212e6148af565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061216a81614848565b91505061210e565b6001600160a01b03811660009081526007602052604081205460ff16156121af57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610d0e90611314565b6000546001600160a01b031633146122195760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b60008054612232916001600160a01b0390911690611f59565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146122b65760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b806122dd57506001600160a01b03166000908152600360205260409020805460ff19169055565b600454156123445762093a80600454426122f791906147f6565b116123445760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610c8f565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b6060600d8054610bc89061480d565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610d0a9185906110ef9086906147f6565b60006110f4338484612bcf565b6000546001600160a01b0316331461240a5760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b603180549315156101000261ff0019909416939093179092556036805491151560ff199283161790556038805492151592909116919091179055565b6000546001600160a01b0316331461248e5760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b602a8054821515600160a81b027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906124f690831515815260200190565b60405180910390a150565b6000546001600160a01b031633146125495760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b601a54831115801561255d5750601b548211155b801561256b5750601c548111155b61257457600080fd5b610d7a8161258284866146af565b61258c91906146af565b111561259757600080fd5b601492909255601555601655565b6000546001600160a01b031633146125ed5760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561262d57600080fd5b505afa158015612641573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126659190614237565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156126ad57600080fd5b505afa1580156126c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e59190614237565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561274357600080fd5b505afa158015612757573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061277b9190614237565b90506001600160a01b03811661293957816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156127c457600080fd5b505afa1580156127d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127fc9190614237565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561284457600080fd5b505afa158015612858573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061287c9190614237565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156128dc57600080fd5b505af11580156128f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129149190614237565b602680546001600160a01b0319166001600160a01b0392909216919091179055612955565b602680546001600160a01b0319166001600160a01b0383161790555b602580546001600160a01b0319166001600160a01b0384161790556110203084600019612a77565b6000546001600160a01b031633146129c55760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314612a385760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b8284602254612a4791906147d7565b612a5191906146c7565b602f556022548190612a649084906147d7565b612a6e91906146c7565b60305550505050565b6001600160a01b038316612af25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610c8f565b6001600160a01b038216612b6e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610c8f565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612c4d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610c8f565b6001600160a01b038316612cc95760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610c8f565b60008211612d3f5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610c8f565b60365460ff1615612d9c576037543a1115612d9c5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610c8f565b612da684846131ea565b15612fee5760315460ff16612dfd5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610c8f565b60385460ff1615612eaf576001600160a01b03841660009081526003602052604090205460ff1615612e6e576001600160a01b038316600090815260396020526040902054431415612e4e57600080fd5b6001600160a01b0383166000908152603960205260409020439055612eaf565b6001600160a01b038416600090815260396020526040902054431415612e9357600080fd5b6001600160a01b03841660009081526039602052604090204390555b602b54821115612f275760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610c8f565b6027546001600160a01b03848116911614801590612f5e57506001600160a01b03831660009081526003602052604090205460ff16155b15612fee57602d5482612f7085612172565b612f7a91906146af565b1115612fee5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610c8f565b6001600160a01b03841660009081526006602052604090205460019060ff168061303057506001600160a01b03841660009081526006602052604090205460ff165b15613039575060005b6001600160a01b03841660009081526003602052604090205460ff16156130c257602a5474010000000000000000000000000000000000000000900460ff1615801561308e5750602a54600160a81b900460ff165b156130c257600061309e30612172565b9050602f5481106130c05760305481106130b757506030545b6130c0816132aa565b505b6130ce85858584613670565b95945050505050565b60008060006130e4613b75565b90925090506130f381836146c7565b9250505090565b6000546001600160a01b031633146131425760405162461bcd60e51b815260206004820181905260248201526000805160206148f18339815191526044820152606401610c8f565b60315460ff16156131955760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610c8f565b6131a0306001610d14565b6026546131b7906001600160a01b03166001610d14565b600360345411156131d6576131ce436101f46146af565b6032556131db565b436032555b6031805460ff19166001179055565b600080546001600160a01b0384811691161480159061321757506000546001600160a01b03838116911614155b801561323c57506001600160a01b0382166000908152600a602052604090205460ff16155b801561326157506001600160a01b0383166000908152600a602052604090205460ff16155b801561327b57506028546001600160a01b03838116911614155b801561328f57506001600160a01b03821615155b80156113a457506001600160a01b0383163014159392505050565b602a805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055601e54601d546132ef91906146af565b6132f85761364f565b60006002601e54601d5461330c91906146af565b601d5461331990856147d7565b61332391906146c7565b61332d91906146c7565b9050600061333b82846147f6565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613375576133756148af565b6001600160a01b03928316602091820292909201810191909152602554604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b1580156133e257600080fd5b505afa1580156133f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341a9190614237565b8160018151811061342d5761342d6148af565b6001600160a01b0392831660209182029290920101526025546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac9479061348c9085906000908690309042906004016145e9565b600060405180830381600087803b1580156134a657600080fd5b505af11580156134ba573d6000803e3d6000fd5b5050505060006002601e54601d546134d291906146af565b601d546134df90476147d7565b6134e991906146c7565b6134f391906146c7565b905083156135fd576025546028546040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810187905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b15801561357f57600080fd5b505af1158015613593573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135b89190614534565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b600061360985876147f6565b111561364a57602a546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015613648573d6000803e3d6000fd5b505b505050505b50602a805474ff000000000000000000000000000000000000000019169055565b603154600090610100900460ff1615613888576001600160a01b03851660009081526009602052604090205460ff16806136c257506001600160a01b03841660009081526009602052604090205460ff165b1561370f5760405162461bcd60e51b815260206004820152600960248201527f52656a65637465642e00000000000000000000000000000000000000000000006044820152606401610c8f565b60315462010000900460ff166137bf576137298585613cf8565b60315462010000900460ff16158015613747575061374785856131ea565b156137ba5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610c8f565b613888565b60006032541180156137e957506001600160a01b03851660009081526003602052604090205460ff165b80156137fa57506137fa85856131ea565b156138885760345460325461380f90436147f6565b1015613888576001600160a01b0384166000908152600960205260408120805460ff19166001179055603580549161384683614848565b90915550506040516001600160a01b03851681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b600061389686868686613e4a565b60808101516001600160a01b0388166000908152600160205260409020549192506138c0916147f6565b6001600160a01b03808816600090815260016020526040808220939093556060840151918816815291909120546138f791906146af565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff16801561394b57506001600160a01b03851660009081526007602052604090205460ff16155b15613992576001600160a01b0386166000908152600260205260409020546139749085906147f6565b6001600160a01b038716600090815260026020526040902055613ad2565b6001600160a01b03861660009081526007602052604090205460ff161580156139d357506001600160a01b03851660009081526007602052604090205460ff165b15613a1b5780516001600160a01b0386166000908152600260205260409020546139fd91906146af565b6001600160a01b038616600090815260026020526040902055613ad2565b6001600160a01b03861660009081526007602052604090205460ff168015613a5b57506001600160a01b03851660009081526007602052604090205460ff165b15613ad2576001600160a01b038616600090815260026020526040902054613a849085906147f6565b6001600160a01b0380881660009081526002602052604080822093909355835191881681529190912054613ab891906146af565b6001600160a01b0386166000908152600260205260409020555b604081015115613aea57613aea868260400151614038565b60008160a001511180613b01575060008160200151115b15613b1857613b188160a001518260200151614104565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360000151604051613b6191815260200190565b60405180910390a350600195945050505050565b6023546022546000918291825b600854811015613cc757826001600060088481548110613ba457613ba46148af565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613c0f5750816002600060088481548110613be857613be86148af565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613c2557602354602254945094505050509091565b6001600060088381548110613c3c57613c3c6148af565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613c6b90846147f6565b92506002600060088381548110613c8457613c846148af565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613cb390836147f6565b915080613cbf81614848565b915050613b82565b50602254602354613cd891906146c7565b821015613cef576023546022549350935050509091565b90939092509050565b60315462010000900460ff1615613d775760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610c8f565b613d8182826131ea565b158015613d9b57506026546001600160a01b038281169116145b15611022576001600160a01b0382166000908152600a602052604090819020805460ff191660019081179091556031805462ff000019166201000017905542603355602a80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15991613e3e91901515815260200190565b60405180910390a15050565b613e836040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b613ebc6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000613ec66130d7565b9050613ed281866147d7565b60808301528315613fe2576001600160a01b03861660009081526003602052604090205460ff1615613f1557601454600e55601554600f55601654601055613f60565b6001600160a01b03871660009081526003602052604090205460ff1615613f4d57601154600e55601254600f55601354601055613f60565b601754600e55601854600f556019546010555b601f54600e54613f7090876147d7565b613f7a91906146c7565b6020830152601f54601054600f54613f9291906146af565b613f9c90876147d7565b613fa691906146c7565b604083018190526020830151613fbc91906146af565b613fc690866147f6565b82526020820151613fd89082906147d7565b60a0830152613ffb565b6000602083018190526040830181905285835260a08301525b80826040015161400b91906147d7565b8260a0015161401a91906146af565b826080015161402991906147f6565b60608301525095945050505050565b60006140426130d7565b9050600061405082846147d7565b3060009081526001602052604090205490915061406e9082906146af565b3060009081526001602090815260408083209390935560079052205460ff16156140be57306000908152600260205260409020546140ad9084906146af565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b8160235461411291906147f6565b6023556024546141239082906146af565b6024555050565b600082601f83011261413b57600080fd5b8135602061415061414b8361468b565b61465a565b80838252828201915082860187848660051b890101111561417057600080fd5b60005b85811015614198578135614186816148db565b84529284019290840190600101614173565b5090979650505050505050565b600082601f8301126141b657600080fd5b813560206141c661414b8361468b565b80838252828201915082860187848660051b89010111156141e657600080fd5b60005b85811015614198578135845292840192908401906001016141e9565b8035801515811461421557600080fd5b919050565b60006020828403121561422c57600080fd5b81356113a4816148db565b60006020828403121561424957600080fd5b81516113a4816148db565b600080600080600060a0868803121561426c57600080fd5b8535614277816148db565b9450602086013567ffffffffffffffff8082111561429457600080fd5b6142a089838a0161412a565b955060408801359150808211156142b657600080fd5b506142c3888289016141a5565b935050606086013560ff811681146142da57600080fd5b949793965091946080013592915050565b600080604083850312156142fe57600080fd5b8235614309816148db565b91506020830135614319816148db565b809150509250929050565b60008060006060848603121561433957600080fd5b8335614344816148db565b92506020840135614354816148db565b929592945050506040919091013590565b6000806040838503121561437857600080fd5b8235614383816148db565b915061439160208401614205565b90509250929050565b600080604083850312156143ad57600080fd5b82356143b8816148db565b946020939093013593505050565b600080604083850312156143d957600080fd5b823567ffffffffffffffff808211156143f157600080fd5b6143fd8683870161412a565b9350602085013591508082111561441357600080fd5b50614420858286016141a5565b9150509250929050565b6000806040838503121561443d57600080fd5b823567ffffffffffffffff81111561445457600080fd5b6144608582860161412a565b92505061439160208401614205565b60006020828403121561448157600080fd5b6113a482614205565b60008060006060848603121561449f57600080fd5b6144a884614205565b92506144b660208501614205565b91506144c460408501614205565b90509250925092565b6000602082840312156144df57600080fd5b5035919050565b600080604083850312156144f957600080fd5b50508035926020909101359150565b60008060006060848603121561451d57600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561454957600080fd5b8351925060208401519150604084015190509250925092565b6000806000806080858703121561457857600080fd5b5050823594602084013594506040840135936060013592509050565b600060208083528351808285015260005b818110156145c1578581018301518582016040015282016145a5565b818111156145d3576000604083870101525b50601f01601f1916929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156146395784516001600160a01b031683529383019391830191600101614614565b50506001600160a01b03969096166060850152505050608001529392505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715614683576146836148c5565b604052919050565b600067ffffffffffffffff8211156146a5576146a56148c5565b5060051b60200190565b600082198211156146c2576146c2614883565b500190565b6000826146e457634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561472457816000190482111561470a5761470a614883565b8085161561471757918102915b93841c93908002906146ee565b509250929050565b60006113a460ff84168360008261474557506001610d0e565b8161475257506000610d0e565b816001811461476857600281146147725761478e565b6001915050610d0e565b60ff84111561478357614783614883565b50506001821b610d0e565b5060208310610133831016604e8410600b84101617156147b1575081810a610d0e565b6147bb83836146e9565b80600019048211156147cf576147cf614883565b029392505050565b60008160001904831182151516156147f1576147f1614883565b500290565b60008282101561480857614808614883565b500390565b600181811c9082168061482157607f821691505b6020821081141561484257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561485c5761485c614883565b5060010190565b600060ff821660ff81141561487a5761487a614883565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146110a857600080fdfe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a264697066735822122007a26157869822f8e32127a73177d2f70af57b91f0eb9125944d5de3fec87e6664736f6c63430008070033

Deployed Bytecode Sourcemap

8203:27391:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10202:64;;;;;;;;;;-1:-1:-1;10202:64:0;;;;-1:-1:-1;;;;;10202:64:0;;;;;;-1:-1:-1;;;;;8001:55:1;;;7983:74;;7971:2;7956:18;10202:64:0;;;;;;;;17260:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10073:35::-;;;;;;;;;;-1:-1:-1;10073:35:0;;;;-1:-1:-1;;;;;10073:35:0;;;20818:154;;;;;;;;;;-1:-1:-1;20818:154:0;;;;;:::i;:::-;;:::i;:::-;;17936:161;;;;;;;;;;-1:-1:-1;17936:161:0;;;;;:::i;:::-;;:::i;:::-;;;9200:14:1;;9193:22;9175:41;;9163:2;9148:18;17936:161:0;9035:187:1;25090:87:0;;;;;;;;;;-1:-1:-1;25159:10:0;;25090:87;;;19449:25:1;;;19437:2;19422:18;25090:87:0;19303:177:1;24176:906:0;;;;;;;;;;-1:-1:-1;24176:906:0;;;;;:::i;:::-;;:::i;8986:30::-;;;;;;;;;;;;;;;;17013:83;;;;;;;;;;-1:-1:-1;17086:7:0;;17013:83;;35011:107;;;;;;;;;;;;;:::i;9064:34::-;;;;;;;;;;;;;;;;18233:266;;;;;;;;;;-1:-1:-1;18233:266:0;;;;;:::i;:::-;;:::i;23002:340::-;;;;;;;;;;-1:-1:-1;23002:340:0;;;;;:::i;:::-;;:::i;30185:373::-;;;;;;;;;;-1:-1:-1;30185:373:0;;;;;:::i;:::-;;:::i;25517:250::-;;;;;;;;;;-1:-1:-1;25517:250:0;;;;;:::i;:::-;;:::i;13095:1916::-;;;;;;;;;;-1:-1:-1;13095:1916:0;;;;;:::i;:::-;;:::i;17102:71::-;;;;;;;;;;-1:-1:-1;17161:9:0;;;17102:71;;17161:9;;;;20982:36:1;;20955:18;17102:71:0;20840:184:1;9727:36:0;;;;;;;;;;;;;;;;18507:215;;;;;;;;;;-1:-1:-1;18507:215:0;;;;;:::i;:::-;;:::i;22654:340::-;;;;;;;;;;-1:-1:-1;22654:340:0;;;;;:::i;:::-;;:::i;10115:21::-;;;;;;;;;;-1:-1:-1;10115:21:0;;;;-1:-1:-1;;;;;10115:21:0;;;9404:51;;;;;;;;;;;;;;;;10425:41;;;;;;;;;;-1:-1:-1;10425:41:0;;;;-1:-1:-1;;;10425:41:0;;;;;;9770:36;;;;;;;;;;;;;;;;15651:807;;;;;;;;;;-1:-1:-1;15651:807:0;;;;;:::i;:::-;;:::i;10777:36::-;;;;;;;;;;-1:-1:-1;10777:36:0;;;;;;;;;;;20084:123;;;;;;;;;;-1:-1:-1;20084:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;20172:27:0;20148:4;20172:27;;;:18;:27;;;;;;;;;20084:123;18105:120;;;;;;;;;;-1:-1:-1;18105:120:0;;;;;:::i;:::-;;:::i;22023:455::-;;;;;;;;;;-1:-1:-1;22023:455:0;;;;;:::i;:::-;;:::i;10273:64::-;;;;;;;;;;-1:-1:-1;10273:64:0;;;;-1:-1:-1;;;;;10273:64:0;;;23647:202;;;;;;;;;;-1:-1:-1;23647:202:0;;;;;:::i;:::-;;:::i;10514:28::-;;;;;;;;;;;;;;;;24036:132;;;;;;;;;;-1:-1:-1;24036:132:0;;;;;:::i;:::-;;:::i;22486:160::-;;;;;;;;;;-1:-1:-1;22486:160:0;;;;;:::i;:::-;;:::i;9023:34::-;;;;;;;;;;;;;;;;21133:435;;;;;;;;;;-1:-1:-1;21133:435:0;;;;;:::i;:::-;;:::i;9524:55::-;;;;;;;;;;;;;;;;20355:229;;;;;;;;;;-1:-1:-1;20355:229:0;;;;;:::i;:::-;;:::i;17555:198::-;;;;;;;;;;-1:-1:-1;17555:198:0;;;;;:::i;:::-;;:::i;16466:194::-;;;;;;;;;;;;;:::i;19524:424::-;;;;;;;;;;-1:-1:-1;19524:424:0;;;;;:::i;:::-;;:::i;9308:38::-;;;;;;;;;;;;;;;;19956:120;;;;;;;;;;-1:-1:-1;19956:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;20048:20:0;20024:4;20048:20;;;:11;:20;;;;;;;;;19956:120;17337:71;;;;;;;;;;-1:-1:-1;17380:7:0;15629:6;-1:-1:-1;;;;;15629:6:0;17337:71;;20215:132;;;;;;;;;;-1:-1:-1;20215:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;20308:31:0;20284:4;20308:31;;;:22;:31;;;;;;;;;20215:132;17179:75;;;;;;;;;;;;;:::i;18730:225::-;;;;;;;;;;-1:-1:-1;18730:225:0;;;;;:::i;:::-;;:::i;17761:167::-;;;;;;;;;;-1:-1:-1;17761:167:0;;;;;:::i;:::-;;:::i;20592:218::-;;;;;;;;;;-1:-1:-1;20592:218:0;;;;;:::i;:::-;;:::i;9267:34::-;;;;;;;;;;;;;;;;23857:171;;;;;;;;;;-1:-1:-1;23857:171:0;;;;;:::i;:::-;;:::i;9211:47::-;;;;;;;;;;;;;;;;9353:38;;;;;;;;;;;;;;;;9107:43;;;;;;;;;;;;;;;;10164:29;;;;;;;;;;-1:-1:-1;10164:29:0;;;;-1:-1:-1;;;;;10164:29:0;;;9157:47;;;;;;;;;;;;;;;;17414:133;;;;;;;;;;-1:-1:-1;17414:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;17516:19:0;;;17498:7;17516:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;17414:133;10938:32;;;;;;;;;;;;;;;;21576:439;;;;;;;;;;-1:-1:-1;21576:439:0;;;;;:::i;:::-;;:::i;9462:55::-;;;;;;;;;;;;;;;;18963:553;;;;;;;;;;-1:-1:-1;18963:553:0;;;;;:::i;:::-;;:::i;20980:141::-;;;;;;;;;;-1:-1:-1;20980:141:0;;;;;:::i;:::-;;:::i;10588:30::-;;;;;;;;;;;;;;;;23350:289;;;;;;;;;;-1:-1:-1;23350:289:0;;;;;:::i;:::-;;:::i;17260:71::-;17299:13;17323:5;17316:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17260:71;:::o;20818:154::-;11754:6;;-1:-1:-1;;;;;11754:6:0;189:10;11754:22;11746:67;;;;-1:-1:-1;;;11746:67:0;;16790:2:1;11746:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;11746:67:0;;;;;;;;;20902:2:::1;20895:3;:9;;20887:38;;;::::0;-1:-1:-1;;;20887:38:0;;14583:2:1;20887:38:0::1;::::0;::::1;14565:21:1::0;14622:2;14602:18;;;14595:30;14661:18;14641;;;14634:46;14697:18;;20887:38:0::1;14381:340:1::0;20887:38:0::1;20952:12;:3:::0;20958:6:::1;20952:12;:::i;:::-;20936:13;:28:::0;-1:-1:-1;20818:154:0:o;17936:161::-;18011:4;18028:39;189:10;18051:7;18060:6;18028:8;:39::i;:::-;-1:-1:-1;18085:4:0;17936:161;;;;;:::o;24176:906::-;11754:6;;-1:-1:-1;;;;;11754:6:0;189:10;11754:22;11746:67;;;;-1:-1:-1;;;11746:67:0;;16790:2:1;11746:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;11746:67:0;16588:356:1;11746:67:0;24281:4:::1;24270:15:::0;::::1;;;24266:809;;;-1:-1:-1::0;;;;;24311:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24310:21;24302:62;;;::::0;-1:-1:-1;;;24302:62:0;;15276:2:1;24302:62:0::1;::::0;::::1;15258:21:1::0;15315:2;15295:18;;;15288:30;15354;15334:18;;;15327:58;15402:18;;24302:62:0::1;15074:352:1::0;24302:62:0::1;-1:-1:-1::0;;;;;24382:16:0;::::1;24401:1;24382:16:::0;;;:7:::1;:16;::::0;;;;;:20;24379:116:::1;;-1:-1:-1::0;;;;;24462:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;24442:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;24423:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;24379:116:::1;-1:-1:-1::0;;;;;;24509:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;24509:27:0::1;24532:4;24509:27:::0;;::::1;::::0;;;24551:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;24551:23:0::1;::::0;;::::1;::::0;;24176:906::o;24266:809::-:1;24596:16:::0;24592:483:::1;;-1:-1:-1::0;;;;;24637:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24629:61;;;::::0;-1:-1:-1;;;24629:61:0;;12624:2:1;24629:61:0::1;::::0;::::1;12606:21:1::0;12663:2;12643:18;;;12636:30;12702;12682:18;;;12675:58;12750:18;;24629:61:0::1;12422:352:1::0;24629:61:0::1;24710:9;24705:359;24729:9;:16:::0;24725:20;::::1;24705:359;;;24791:7;-1:-1:-1::0;;;;;24775:23:0::1;:9;24785:1;24775:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;24775:12:0::1;:23;24771:278;;;24838:9;24848:16:::0;;:20:::1;::::0;24867:1:::1;::::0;24848:20:::1;:::i;:::-;24838:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;24823:9:::1;:12:::0;;-1:-1:-1;;;;;24838:31:0;;::::1;::::0;24833:1;;24823:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;24823:46:0::1;-1:-1:-1::0;;;;;24823:46:0;;::::1;;::::0;;24892:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;24935:11:::1;:20:::0;;;;:28;;-1:-1:-1;;24935:28:0::1;::::0;;24986:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;24986:15:0;;;;;-1:-1:-1;;;;;;24986:15:0::1;::::0;;;;;25024:5:::1;;24771:278;24747:3:::0;::::1;::::0;::::1;:::i;:::-;;;;24705:359;;;;24592:483;24176:906:::0;;:::o;35011:107::-;11754:6;;-1:-1:-1;;;;;11754:6:0;189:10;11754:22;11746:67;;;;-1:-1:-1;;;11746:67:0;;16790:2:1;11746:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;11746:67:0;16588:356:1;11746:67:0;15602:7;15629:6;;35062:48:::1;::::0;-1:-1:-1;;;;;15629:6:0;;;;35088:21:::1;35062:48:::0;::::1;;;::::0;35088:21;;35062:48;15602:7;35062:48;35088:21;15629:6;35062:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;35011:107::o:0;18233:266::-;18331:4;18348:36;18358:6;18366:9;18377:6;18348:9;:36::i;:::-;-1:-1:-1;;;;;;18426:19:0;;;;;;:11;:19;;;;;;;;189:10;18426:33;;;;;;;;;18395:74;;18404:6;;18426:42;;18462:6;;18426:42;:::i;:::-;18395:8;:74::i;:::-;-1:-1:-1;18487:4:0;18233:266;;;;;:::o;23002:340::-;11754:6;;-1:-1:-1;;;;;11754:6:0;189:10;11754:22;11746:67;;;;-1:-1:-1;;;11746:67:0;;16790:2:1;11746:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;11746:67:0;16588:356:1;11746:67:0;23092:13:::1;23130:7;23119;23109;;:17;;;;:::i;:::-;23108:29;;;;:::i;:::-;23092:45;;23176:4;23166:7;;:14;;;;:::i;:::-;23156:5;:25;;23148:88;;;::::0;-1:-1:-1;;;23148:88:0;;13811:2:1;23148:88:0::1;::::0;::::1;13793:21:1::0;13850:2;13830:18;;;13823:30;13889:34;13869:18;;;13862:62;13960:20;13940:18;;;13933:48;13998:19;;23148:88:0::1;13609:414:1::0;23148:88:0::1;23247:14;:22:::0;;;23299:14:::1;::::0;23327:7;;23299:24:::1;::::0;23316:7;;23299:24:::1;:::i;:::-;23298:36;;;;:::i;:::-;23280:15;:54:::0;-1:-1:-1;;;23002:340:0:o;30185:373::-;30310:7;:14;30291:8;:15;:33;30283:67;;;;-1:-1:-1;;;30283:67:0;;17561:2:1;30283:67:0;;;17543:21:1;17600:2;17580:18;;;17573:30;17639:23;17619:18;;;17612:51;17680:18;;30283:67:0;17359:345:1;30283:67:0;30366:7;30361:190;30383:8;:15;30379:1;:19;;;30361:190;;;30453:7;30461:1;30453:10;;;;;;;;;;:::i;:::-;;;;;;;30428:21;30438:10;30428:9;:21::i;:::-;:35;;30420:44;;;;;;30479:60;30489:10;30501:8;30510:1;30501:11;;;;;;;;;;:::i;:::-;;;;;;;;;;;;30529:9;;30525:13;;30529:9;;30525:2;:13;:::i;:::-;30514:7;30522:1;30514:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;30479:9;:60::i;:::-;-1:-1:-1;30400:3:0;;;;:::i;:::-;;;;30361:190;;25517:250;25583:7;25622;;25611;:18;;25603:73;;;;-1:-1:-1;;;25603:73:0;;11045:2:1;25603:73:0;;;11027:21:1;11084:2;11064:18;;;11057:30;11123:34;11103:18;;;11096:62;11194:12;11174:18;;;11167:40;11224:19;;25603:73:0;10843:406:1;25603:73:0;25687:19;25710:10;:8;:10::i;:::-;25687:33;-1:-1:-1;25738:21:0;25687:33;25738:7;:21;:::i;:::-;25731:28;25517:250;-1:-1:-1;;;25517:250:0:o;13095:1916::-;11754:6;;-1:-1:-1;;;;;11754:6:0;189:10;11754:22;11746:67;;;;-1:-1:-1;;;11746:67:0;;16790:2:1;11746:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;11746:67:0;16588:356:1;11746:67:0;13271:19:::1;::::0;::::1;;13270:20;13262:29;;;::::0;::::1;;13328:3;13310:8;:15;:21;13302:30;;;::::0;::::1;;13370:7;:14;13351:8;:15;:33;13343:42;;;::::0;::::1;;13404:13;::::0;:18;:40;::::1;;;-1:-1:-1::0;13426:13:0::1;::::0;:18;13404:40:::1;:61;;;;-1:-1:-1::0;13449:16:0::1;::::0;;;::::1;;;13448:17;13404:61;13396:70;;;::::0;::::1;;13492:2;13485:3;:9;;13477:38;;;::::0;-1:-1:-1;;;13477:38:0;;14583:2:1;13477:38:0::1;::::0;::::1;14565:21:1::0;14622:2;14602:18;;;14595:30;14661:18;14641;;;14634:46;14697:18;;13477:38:0::1;14381:340:1::0;13477:38:0::1;13528:16;:40:::0;;-1:-1:-1;;;;;13528:40:0;;::::1;-1:-1:-1::0;;;;;;13528:40:0;;::::1;;::::0;;;13612:14:::1;::::0;13581:9:::1;:46:::0;;;;::::1;13612:14:::0;::::1;13581:46:::0;;::::1;::::0;;13665:19:::1;::::0;;;;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;13612:14;13665:19;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13647:49:0::1;;13697:9;;;;;;;;;-1:-1:-1::0;;;;;13697:9:0::1;-1:-1:-1::0;;;;;13697:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13647:82;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;8321:15:1;;;13647:82:0::1;::::0;::::1;8303:34:1::0;13723:4:0::1;8353:18:1::0;;;8346:43;8215:18;;13647:82:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13638:6;:91:::0;;-1:-1:-1;;;;;;13638:91:0::1;-1:-1:-1::0;;;;;13638:91:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;13740:15:0;;;:7:::1;:15;::::0;;;;;;;:22;;-1:-1:-1;;13740:22:0::1;-1:-1:-1::0;13740:22:0::1;::::0;;13793:4:::1;13773:26:::0;;:11:::1;:26:::0;;;;;13808:9:::1;::::0;;;::::1;13773:46:::0;;;;;;-1:-1:-1;;13773:66:0;;13740:22:::1;13860::::0;::::1;:13;:22:::0;13909:12:::1;:3:::0;13915:6:::1;13909:12;:::i;:::-;13893:13;:28:::0;13948:7:::1;::::0;13966:6:::1;::::0;13948:14:::1;::::0;13958:4:::1;13948:14;:::i;:::-;13947:25;;;;:::i;:::-;13932:12;:40:::0;14000:14:::1;::::0;14025:6:::1;::::0;14000:21:::1;::::0;14017:4:::1;14000:21;:::i;:::-;13999:32;;;;:::i;:::-;13983:13;:48:::0;14060:7:::1;::::0;14076:4:::1;::::0;14060:12:::1;::::0;14070:2:::1;14060:12;:::i;:::-;14059:21;;;;:::i;:::-;14042:14;:38:::0;14110:14:::1;::::0;14133:4:::1;::::0;14110:19:::1;::::0;14127:2:::1;14110:19;:::i;:::-;14109:28;;;;:::i;:::-;14091:15;:46:::0;14165:7:::1;::::0;14180:5:::1;::::0;14165:11:::1;::::0;14175:1:::1;14165:11;:::i;:::-;14164:21;;;;:::i;:::-;14148:13;:37:::0;14210:7:::1;::::0;14225:4:::1;::::0;14210:11:::1;::::0;14220:1:::1;14210:11;:::i;:::-;14209:20;;;;:::i;:::-;14196:10;:33:::0;14250:14:::1;::::0;14242:42:::1;::::0;-1:-1:-1;;;;;14250:14:0::1;-1:-1:-1::0;;14242:7:0::1;:42::i;:::-;-1:-1:-1::0;14297:19:0::1;:26:::0;;-1:-1:-1;;14297:26:0::1;14319:4;14297:26:::0;;::::1;::::0;;;14353:7:::1;::::0;;14297:19:::1;14342:7;15602::::0;15629:6;-1:-1:-1;;;;;15629:6:0;;15564:79;14342:7:::1;-1:-1:-1::0;;;;;14334:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;14334:16:0;:26;14391:7:::1;15602::::0;15629:6;-1:-1:-1;;;;;15629:6:0;;15564:79;14391:7:::1;14385:4;::::0;14400:7:::1;::::0;14376:32:::1;::::0;19449:25:1;;;-1:-1:-1;;;;;14376:32:0;;::::1;::::0;14385:4;;::::1;::::0;14376:32:::1;::::0;19437:2:1;19422:18;14376:32:0::1;;;;;;;14453:9;::::0;14421:62:::1;::::0;14438:4:::1;::::0;-1:-1:-1;;;;;14453:9:0::1;-1:-1:-1::0;;14421:8:0::1;:62::i;:::-;14500:9;14496:168;14519:8;:15;14515:1;:19;14496:168;;;14589:9;::::0;14555:14:::1;::::0;14585:13:::1;::::0;14589:9:::1;;14585:2;:13;:::i;:::-;14572:7;14580:1;14572:10;;;;;;;;:::i;:::-;;;;;;;:26;;;;:::i;:::-;14555:43;;14613:39;14623:7;15602::::0;15629:6;-1:-1:-1;;;;;15629:6:0;;15564:79;14623:7:::1;14632:8;14641:1;14632:11;;;;;;;;:::i;:::-;;;;;;;14645:6;14613:9;:39::i;:::-;;14540:124;14536:3;;;;;:::i;:::-;;;;14496:168;;;;14676:53;14686:7;15602::::0;15629:6;-1:-1:-1;;;;;15629:6:0;;15564:79;14686:7:::1;14703:4;14710:18;14720:7;15602::::0;15629:6;-1:-1:-1;;;;;15629:6:0;;15564:79;14676:53:::1;-1:-1:-1::0;14756:9:0::1;::::0;-1:-1:-1;;;;;14756:9:0::1;:25;14789:21;14834:4;14854:24;14834:4:::0;14854:9:::1;:24::i;:::-;14893:1;14910::::0;14927:7:::1;15602::::0;15629:6;-1:-1:-1;;;;;15629:6:0;;15564:79;14927:7:::1;14756:219;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;8782:15:1;;;14756:219:0::1;::::0;::::1;8764:34:1::0;8814:18;;;8807:34;;;;8857:18;;;8850:34;;;;8900:18;;;8893:34;8964:15;;;8943:19;;;8936:44;14949:15:0::1;8996:19:1::0;;;8989:35;8675:19;;14756:219:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;14988:15;:13;:15::i;:::-;13095:1916:::0;;;;;:::o;18507:215::-;189:10;18595:4;18644:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18644:34:0;;;;;;;;;;18595:4;;18612:80;;18635:7;;18644:47;;18681:10;;18644:47;:::i;22654:340::-;11754:6;;-1:-1:-1;;;;;11754:6:0;189:10;11754:22;11746:67;;;;-1:-1:-1;;;11746:67:0;;16790:2:1;11746:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;11746:67:0;16588:356:1;11746:67:0;22743:13:::1;22781:7;22770;22760;;:17;;;;:::i;:::-;22759:29;;;;:::i;:::-;22743:45;;22827:4;22817:7;;:14;;;;:::i;:::-;22807:5;:25;;22799:93;;;::::0;-1:-1:-1;;;22799:93:0;;12981:2:1;22799:93:0::1;::::0;::::1;12963:21:1::0;13020:2;13000:18;;;12993:30;13059:34;13039:18;;;13032:62;13130:25;13110:18;;;13103:53;13173:19;;22799:93:0::1;12779:419:1::0;22799:93:0::1;22903:12;:20:::0;;;22951:14:::1;::::0;22979:7;;22951:24:::1;::::0;22968:7;;22951:24:::1;:::i;:::-;22950:36;;;;:::i;:::-;22934:13;:52:::0;-1:-1:-1;;;22654:340:0:o;15651:807::-;11754:6;;-1:-1:-1;;;;;11754:6:0;189:10;11754:22;11746:67;;;;-1:-1:-1;;;11746:67:0;;16790:2:1;11746:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;11746:67:0;16588:356:1;11746:67:0;-1:-1:-1;;;;;15732:22:0;::::1;15724:96;;;::::0;-1:-1:-1;;;15724:96:0;;19075:2:1;15724:96:0::1;::::0;::::1;19057:21:1::0;19114:2;19094:18;;;19087:30;19153:34;19133:18;;;19126:62;19224:31;19204:18;;;19197:59;19273:19;;15724:96:0::1;18873:425:1::0;15724:96:0::1;15851:4;::::0;-1:-1:-1;;;;;15839:16:0;;::::1;15851:4:::0;::::1;15839:16;;15831:90;;;::::0;-1:-1:-1;;;15831:90:0;;19075:2:1;15831:90:0::1;::::0;::::1;19057:21:1::0;19114:2;19094:18;;;19087:30;19153:34;19133:18;;;19126:62;19224:31;19204:18;;;19197:59;19273:19;;15831:90:0::1;18873:425:1::0;15831:90:0::1;15951:6;::::0;;15932:33:::1;::::0;-1:-1:-1;;;;;15951:6:0;;::::1;::::0;15932:18:::1;:33::i;:::-;15976:34;15995:8;16005:4;15976:18;:34::i;:::-;16021:37;16043:8;16053:4;16021:21;:37::i;:::-;16111:6;::::0;16083:16:::1;::::0;-1:-1:-1;;;;;16083:16:0;;::::1;16111:6:::0;::::1;16083:35;16079:90;;;16133:16;:36:::0;;-1:-1:-1;;;;;;16133:36:0::1;-1:-1:-1::0;;;;;16133:36:0;::::1;;::::0;;16079:90:::1;16232:6;::::0;16222:17:::1;::::0;-1:-1:-1;;;;;16232:6:0::1;16222:9;:17::i;:::-;16190:19;16202:6:::0;;-1:-1:-1;;;;;16202:6:0;;::::1;16190:19:::0;;:11:::1;:19;::::0;;;;;;;:29;;::::1;::::0;;;;;;;:49;;;;16263:6;;16190:19;;16253:17:::1;::::0;16263:6:::1;16253:9;:17::i;:::-;:21;16250:99;;;16301:6;::::0;16291:46:::1;::::0;-1:-1:-1;;;;;16301:6:0::1;16309:8:::0;16319:17:::1;16301:6:::0;16319:9:::1;:17::i;16291:46::-;;16250:99;16369:6;:17:::0;;-1:-1:-1;;;;;;16369:17:0::1;-1:-1:-1::0;;;;;16369:17:0;::::1;::::0;;::::1;::::0;;16402:38:::1;::::0;16369:17;;;;16402:38:::1;::::0;16369:6;16402:38:::1;15651:807:::0;:::o;18105:120::-;18158:4;18182:35;18190:7;-1:-1:-1;;18182:7:0;:35::i;22023:455::-;11754:6;;-1:-1:-1;;;;;11754:6:0;189:10;11754:22;11746:67;;;;-1:-1:-1;;;11746:67:0;;16790:2:1;11746:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;11746:67:0;16588:356:1;11746:67:0;22153:13:::1;;22142:7;:24;;:73;;;;;22200:15;;22187:9;:28;;22142:73;:122;;;;;22249:15;;22236:9;:28;;22142:122;22134:149;;;::::0;::::1;;22337:4;22324:9:::0;22302:19:::1;22312:9:::0;22302:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;22294:48;;;::::0;::::1;;22353:19;:29:::0;;;;22393:21:::1;:33:::0;22437:21:::1;:33:::0;22023:455::o;23647:202::-;11754:6;;-1:-1:-1;;;;;11754:6:0;189:10;11754:22;11746:67;;;;-1:-1:-1;;;11746:67:0;;16790:2:1;11746:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;11746:67:0;16588:356:1;11746:67:0;23740:16:::1;::::0;-1:-1:-1;;;;;23740:29:0;;::::1;:16:::0;::::1;:29;;23732:61;;;::::0;-1:-1:-1;;;23732:61:0;;14928:2:1;23732:61:0::1;::::0;::::1;14910:21:1::0;14967:2;14947:18;;;14940:30;15006:21;14986:18;;;14979:49;15045:18;;23732:61:0::1;14726:343:1::0;23732:61:0::1;23804:16;:37:::0;;-1:-1:-1;;;;;;23804:37:0::1;-1:-1:-1::0;;;;;23804:37:0;;;::::1;::::0;;;::::1;::::0;;23647:202::o;24036:132::-;11754:6;;-1:-1:-1;;;;;11754:6:0;189:10;11754:22;11746:67;;;;-1:-1:-1;;;11746:67:0;;16790:2:1;11746:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;11746:67:0;16588:356:1;11746:67:0;-1:-1:-1;;;;;24123:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:37;;-1:-1:-1;;24123:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24036:132::o;22486:160::-;11754:6;;-1:-1:-1;;;;;11754:6:0;189:10;11754:22;11746:67;;;;-1:-1:-1;;;11746:67:0;;16790:2:1;11746:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;11746:67:0;16588:356:1;11746:67:0;22573:15:::1;:27:::0;;;;22611:15:::1;:27:::0;22486:160::o;21133:435::-;11754:6;;-1:-1:-1;;;;;11754:6:0;189:10;11754:22;11746:67;;;;-1:-1:-1;;;11746:67:0;;16790:2:1;11746:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;11746:67:0;16588:356:1;11746:67:0;21258:13:::1;;21247:7;:24;;:73;;;;;21305:15;;21292:9;:28;;21247:73;:122;;;;;21354:15;;21341:9;:28;;21247:122;21239:149;;;::::0;::::1;;21442:4;21429:9:::0;21407:19:::1;21417:9:::0;21407:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;21399:48;;;::::0;::::1;;21458:14;:24:::0;;;;21493:16:::1;:28:::0;21532:16:::1;:28:::0;21133:435::o;20355:229::-;11754:6;;-1:-1:-1;;;;;11754:6:0;189:10;11754:22;11746:67;;;;-1:-1:-1;;;11746:67:0;;16790:2:1;11746:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;11746:67:0;16588:356:1;11746:67:0;20469:6:::1;20464:113;20485:7;:14;20481:1;:18;20464:113;;;20558:7;20521:22;:34;20544:7;20552:1;20544:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;20521:34:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;20521:34:0;:44;;-1:-1:-1;;20521:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20501:3;::::1;::::0;::::1;:::i;:::-;;;;20464:113;;17555:198:::0;-1:-1:-1;;;;;17645:20:0;;17621:7;17645:20;;;:11;:20;;;;;;;;17641:49;;;-1:-1:-1;;;;;;17674:16:0;;;;;:7;:16;;;;;;;17555:198::o;17641:49::-;-1:-1:-1;;;;;17728:16:0;;;;;;:7;:16;;;;;;17708:37;;:19;:37::i;16466:194::-;11754:6;;-1:-1:-1;;;;;11754:6:0;189:10;11754:22;11746:67;;;;-1:-1:-1;;;11746:67:0;;16790:2:1;11746:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;11746:67:0;16588:356:1;11746:67:0;16552:6:::1;::::0;;16533:33:::1;::::0;-1:-1:-1;;;;;16552:6:0;;::::1;::::0;16533:18:::1;:33::i;:::-;16594:1;16577:19:::0;;-1:-1:-1;;;;;;16577:19:0::1;::::0;;16612:40:::1;::::0;16594:1;;16612:40:::1;::::0;16594:1;;16612:40:::1;16466:194::o:0;19524:424::-;11754:6;;-1:-1:-1;;;;;11754:6:0;189:10;11754:22;11746:67;;;;-1:-1:-1;;;11746:67:0;;16790:2:1;11746:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;11746:67:0;16588:356:1;11746:67:0;19605:16;19601:340:::1;;-1:-1:-1::0;;;;;;19638:13:0::1;19654:5;19638:13:::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;19638:21:0::1;::::0;;24176:906::o;19601:340::-:1;19696:17;::::0;:22;19692:153:::1;;19785:7;19765:17;;19747:15;:35;;;;:::i;:::-;:45;19739:90;;;::::0;-1:-1:-1;;;19739:90:0;;12263:2:1;19739:90:0::1;::::0;::::1;12245:21:1::0;;;12282:18;;;12275:30;12341:34;12321:18;;;12314:62;12393:18;;19739:90:0::1;12061:356:1::0;19739:90:0::1;-1:-1:-1::0;;;;;19859:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;:20;;-1:-1:-1;;19859:20:0::1;19875:4;19859:20;::::0;;19914:15:::1;19894:17;:35:::0;19524:424;;:::o;17179:75::-;17220:13;17244:7;17237:14;;;;;:::i;18730:225::-;189:10;18823:4;18872:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18872:34:0;;;;;;;;;;18823:4;;18840:85;;18863:7;;18872:52;;18909:15;;18872:52;:::i;17761:167::-;17839:4;17856:42;189:10;17880:9;17891:6;17856:9;:42::i;20592:218::-;11754:6;;-1:-1:-1;;;;;11754:6:0;189:10;11754:22;11746:67;;;;-1:-1:-1;;;11746:67:0;;16790:2:1;11746:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;11746:67:0;16588:356:1;11746:67:0;20701:16:::1;:28:::0;;;::::1;;;;-1:-1:-1::0;;20701:28:0;;::::1;::::0;;;::::1;::::0;;;20740:14:::1;:24:::0;;;::::1;;-1:-1:-1::0;;20740:24:0;;::::1;;::::0;;20775:15:::1;:27:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;20592:218::o;23857:171::-;11754:6;;-1:-1:-1;;;;;11754:6:0;189:10;11754:22;11746:67;;;;-1:-1:-1;;;11746:67:0;;16790:2:1;11746:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;11746:67:0;16588:356:1;11746:67:0;23934:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;23934:32:0::1;::::0;;;::::1;;::::0;;23982:38:::1;::::0;::::1;::::0;::::1;::::0;23958:8;9200:14:1;9193:22;9175:41;;9163:2;9148:18;;9035:187;23982:38:0::1;;;;;;;;23857:171:::0;:::o;21576:439::-;11754:6;;-1:-1:-1;;;;;11754:6:0;189:10;11754:22;11746:67;;;;-1:-1:-1;;;11746:67:0;;16790:2:1;11746:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;11746:67:0;16588:356:1;11746:67:0;21702:13:::1;;21691:7;:24;;:73;;;;;21749:15;;21736:9;:28;;21691:73;:122;;;;;21798:15;;21785:9;:28;;21691:122;21683:149;;;::::0;::::1;;21886:4;21873:9:::0;21851:19:::1;21861:9:::0;21851:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;21843:48;;;::::0;::::1;;21902:15;:25:::0;;;;21938:17:::1;:29:::0;21978:17:::1;:29:::0;21576:439::o;18963:553::-;11754:6;;-1:-1:-1;;;;;11754:6:0;189:10;11754:22;11746:67;;;;-1:-1:-1;;;11746:67:0;;16790:2:1;11746:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;11746:67:0;16588:356:1;11746:67:0;19036:29:::1;19087:9;19036:61;;19108:16;19145:10;-1:-1:-1::0;;;;;19145:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19127:47:0::1;;19183:4;19190:10;-1:-1:-1::0;;;;;19190:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19127:81;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;8321:15:1;;;19127:81:0::1;::::0;::::1;8303:34:1::0;8373:15;;8353:18;;;8346:43;8215:18;;19127:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19108:100:::0;-1:-1:-1;;;;;;19223:22:0;::::1;19219:207;;19289:10;-1:-1:-1::0;;;;;19289:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19271:50:0::1;;19330:4;19337:10;-1:-1:-1::0;;;;;19337:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19271:84;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;8321:15:1;;;19271:84:0::1;::::0;::::1;8303:34:1::0;8373:15;;8353:18;;;8346:43;8215:18;;19271:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19262:6;:93:::0;;-1:-1:-1;;;;;;19262:93:0::1;-1:-1:-1::0;;;;;19262:93:0;;;::::1;::::0;;;::::1;::::0;;19219:207:::1;;;19397:6;:17:::0;;-1:-1:-1;;;;;;19397:17:0::1;-1:-1:-1::0;;;;;19397:17:0;::::1;;::::0;;19219:207:::1;19436:9;:22:::0;;-1:-1:-1;;;;;;19436:22:0::1;-1:-1:-1::0;;;;;19436:22:0;::::1;;::::0;;19469:39:::1;19486:4;19493:9:::0;-1:-1:-1;;19469:8:0::1;:39::i;20980:141::-:0;11754:6;;-1:-1:-1;;;;;11754:6:0;189:10;11754:22;11746:67;;;;-1:-1:-1;;;11746:67:0;;16790:2:1;11746:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;11746:67:0;16588:356:1;11746:67:0;-1:-1:-1;;;;;21072:31:0;;;::::1;;::::0;;;:22:::1;:31;::::0;;;;:41;;-1:-1:-1;;21072:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20980:141::o;23350:289::-;11754:6;;-1:-1:-1;;;;;11754:6:0;189:10;11754:22;11746:67;;;;-1:-1:-1;;;11746:67:0;;16790:2:1;11746:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;11746:67:0;16588:356:1;11746:67:0;23550:16:::1;23530;23520:7;;:26;;;;:::i;:::-;23519:47;;;;:::i;:::-;23503:13;:63:::0;23591:7:::1;::::0;23618:13;;23591:23:::1;::::0;23601:13;;23591:23:::1;:::i;:::-;23590:41;;;;:::i;:::-;23577:10;:54:::0;-1:-1:-1;;;;23350:289:0:o;25779:342::-;-1:-1:-1;;;;;25874:20:0;;25866:69;;;;-1:-1:-1;;;25866:69:0;;18317:2:1;25866:69:0;;;18299:21:1;18356:2;18336:18;;;18329:30;18395:34;18375:18;;;18368:62;18466:6;18446:18;;;18439:34;18490:19;;25866:69:0;18115:400:1;25866:69:0;-1:-1:-1;;;;;25954:21:0;;25946:68;;;;-1:-1:-1;;;25946:68:0;;11456:2:1;25946:68:0;;;11438:21:1;11495:2;11475:18;;;11468:30;11534:34;11514:18;;;11507:62;11605:4;11585:18;;;11578:32;11627:19;;25946:68:0;11254:398:1;25946:68:0;-1:-1:-1;;;;;26027:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;26080:33;;19449:25:1;;;26080:33:0;;19422:18:1;26080:33:0;;;;;;;25779:342;;;:::o;26129:1900::-;26208:4;-1:-1:-1;;;;;26233:18:0;;26225:68;;;;-1:-1:-1;;;26225:68:0;;17911:2:1;26225:68:0;;;17893:21:1;17950:2;17930:18;;;17923:30;17989:34;17969:18;;;17962:62;18060:7;18040:18;;;18033:35;18085:19;;26225:68:0;17709:401:1;26225:68:0;-1:-1:-1;;;;;26312:16:0;;26304:64;;;;-1:-1:-1;;;26304:64:0;;10288:2:1;26304:64:0;;;10270:21:1;10327:2;10307:18;;;10300:30;10366:34;10346:18;;;10339:62;10437:5;10417:18;;;10410:33;10460:19;;26304:64:0;10086:399:1;26304:64:0;26396:1;26387:6;:10;26379:64;;;;-1:-1:-1;;;26379:64:0;;17151:2:1;26379:64:0;;;17133:21:1;17190:2;17170:18;;;17163:30;17229:34;17209:18;;;17202:62;17300:11;17280:18;;;17273:39;17329:19;;26379:64:0;16949:405:1;26379:64:0;26458:14;;;;26454:112;;;26512:13;;26497:11;:28;;26489:65;;;;-1:-1:-1;;;26489:65:0;;14230:2:1;26489:65:0;;;14212:21:1;14269:2;14249:18;;;14242:30;14308:26;14288:18;;;14281:54;14352:18;;26489:65:0;14028:348:1;26489:65:0;26579:20;26590:4;26596:2;26579:10;:20::i;:::-;26576:776;;;26620:14;;;;26616:89;;26655:34;;-1:-1:-1;;;26655:34:0;;10692:2:1;26655:34:0;;;10674:21:1;10731:2;10711:18;;;10704:30;10770:26;10750:18;;;10743:54;10814:18;;26655:34:0;10490:348:1;26616:89:0;26723:15;;;;26719:347;;;-1:-1:-1;;;;;26763:13:0;;;;;;:7;:13;;;;;;;;26759:292;;;-1:-1:-1;;;;;26808:13:0;;;;;;:9;:13;;;;;;26825:12;26808:29;;26800:38;;;;;;-1:-1:-1;;;;;26861:13:0;;;;;;:9;:13;;;;;26877:12;26861:28;;26759:292;;;-1:-1:-1;;;;;26946:15:0;;;;;;:9;:15;;;;;;26965:12;26946:31;;26938:40;;;;;;-1:-1:-1;;;;;27001:15:0;;;;;;:9;:15;;;;;27019:12;27001:30;;26759:292;27098:12;;27088:6;:22;;27080:75;;;;-1:-1:-1;;;27080:75:0;;15970:2:1;27080:75:0;;;15952:21:1;16009:2;15989:18;;;15982:30;16048:34;16028:18;;;16021:62;16119:10;16099:18;;;16092:38;16147:19;;27080:75:0;15768:404:1;27080:75:0;27179:14;;-1:-1:-1;;;;;27173:20:0;;;27179:14;;27173:20;;;;:36;;-1:-1:-1;;;;;;27198:11:0;;;;;;:7;:11;;;;;;;;27197:12;27173:36;27170:171;;;27264:14;;27254:6;27238:13;27248:2;27238:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;27230:95;;;;-1:-1:-1;;;27230:95:0;;16379:2:1;27230:95:0;;;16361:21:1;16418:2;16398:18;;;16391:30;16457:34;16437:18;;;16430:62;16528:12;16508:18;;;16501:40;16558:19;;27230:95:0;16177:406:1;27230:95:0;-1:-1:-1;;;;;27397:24:0;;27364:12;27397:24;;;:18;:24;;;;;;27379:4;;27397:24;;;:50;;-1:-1:-1;;;;;;27425:22:0;;;;;;:18;:22;;;;;;;;27397:50;27394:96;;;-1:-1:-1;27473:5:0;27394:96;-1:-1:-1;;;;;27506:11:0;;;;;;:7;:11;;;;;;;;27502:457;;;27539:16;;;;;;;27538:17;:59;;;;-1:-1:-1;27576:21:0;;-1:-1:-1;;;27576:21:0;;;;27538:59;27534:408;;;27632:28;27663:24;27681:4;27663:9;:24::i;:::-;27632:55;;27734:13;;27710:20;:37;27706:221;;27799:10;;27775:20;:34;27772:77;;-1:-1:-1;27836:10:0;;27772:77;27871:36;27886:20;27871:14;:36::i;:::-;27613:329;27534:408;27977:44;27995:4;28001:2;28005:6;28013:7;27977:17;:44::i;:::-;27970:51;26129:1900;-1:-1:-1;;;;;26129:1900:0:o;34132:161::-;34174:7;34195:15;34212;34231:19;:17;:19::i;:::-;34194:56;;-1:-1:-1;34194:56:0;-1:-1:-1;34268:17:0;34194:56;;34268:17;:::i;:::-;34261:24;;;;34132:161;:::o;29778:399::-;11754:6;;-1:-1:-1;;;;;11754:6:0;189:10;11754:22;11746:67;;;;-1:-1:-1;;;11746:67:0;;16790:2:1;11746:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;11746:67:0;16588:356:1;11746:67:0;29842:14:::1;::::0;::::1;;29841:15;29833:52;;;::::0;-1:-1:-1;;;29833:52:0;;18722:2:1;29833:52:0::1;::::0;::::1;18704:21:1::0;18761:2;18741:18;;;18734:30;18800:26;18780:18;;;18773:54;18844:18;;29833:52:0::1;18520:348:1::0;29833:52:0::1;29896:42;29926:4;29933;29896:21;:42::i;:::-;29971:6;::::0;29949:35:::1;::::0;-1:-1:-1;;;;;29971:6:0::1;::::0;29949:21:::1;:35::i;:::-;30015:1;29999:13;;:17;29995:143;;;30048:18;:12;30063:3;30048:18;:::i;:::-;30033:12;:33:::0;29995:143:::1;;;30114:12;30099;:27:::0;29995:143:::1;30148:14;:21:::0;;-1:-1:-1;;30148:21:0::1;30165:4;30148:21;::::0;;29778:399::o;25185:324::-;25254:4;15629:6;;-1:-1:-1;;;;;25278:15:0;;;15629:6;;25278:15;;;;:45;;-1:-1:-1;15602:7:0;15629:6;-1:-1:-1;;;;;25310:13:0;;;15629:6;;25310:13;;25278:45;:84;;;;-1:-1:-1;;;;;;25341:21:0;;;;;;:17;:21;;;;;;;;25340:22;25278:84;:125;;;;-1:-1:-1;;;;;;25380:23:0;;;;;;:17;:23;;;;;;;;25379:24;25278:125;:152;;;;-1:-1:-1;25426:4:0;;-1:-1:-1;;;;;25420:10:0;;;25426:4;;25420:10;;25278:152;:185;;;;-1:-1:-1;;;;;;25447:16:0;;;;25278:185;:223;;;;-1:-1:-1;;;;;;25480:21:0;;25496:4;25480:21;;25271:230;25185:324;-1:-1:-1;;;25185:324:0:o;28037:1278::-;11628:16;:23;;-1:-1:-1;;11628:23:0;;;;;28145:15:::1;::::0;28127::::1;::::0;:33:::1;::::0;28145:15;28127:33:::1;:::i;:::-;28123:64;;28180:7;;28123:64;28197:17;28300:1;28280:15;;28262;;:33;;;;:::i;:::-;28242:15;::::0;28219:38:::1;::::0;:20;:38:::1;:::i;:::-;28218:78;;;;:::i;:::-;28217:84;;;;:::i;:::-;28197:104:::0;-1:-1:-1;28314:20:0::1;28337:32;28197:104:::0;28337:20;:32:::1;:::i;:::-;28406:16;::::0;;28420:1:::1;28406:16:::0;;;;;::::1;::::0;;28314:55;;-1:-1:-1;28382:21:0::1;::::0;28406:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;28406:16:0::1;28382:40;;28451:4;28433;28438:1;28433:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28433:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;28477:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;28433:7;;28477:16;;;;;:9;:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28467:4;28472:1;28467:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28467:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;28506:9:::1;::::0;:191:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:191:::1;::::0;28581:12;;28506:9:::1;::::0;28624:4;;28651::::1;::::0;28671:15:::1;::::0;28506:191:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28712:24;28823:1;28803:15;;28785;;:33;;;;:::i;:::-;28765:15;::::0;28741:39:::1;::::0;:21:::1;:39;:::i;:::-;28740:79;;;;:::i;:::-;28739:85;;;;:::i;:::-;28712:112:::0;-1:-1:-1;28841:13:0;;28837:344:::1;;28871:9;::::0;29042:4:::1;::::0;28871:224:::1;::::0;;;;28948:4:::1;28871:224;::::0;::::1;8764:34:1::0;8814:18;;;8807:34;;;28871:9:0::1;8857:18:1::0;;;8850:34;;;8900:18;;;8893:34;-1:-1:-1;;;;;29042:4:0;;::::1;8943:19:1::0;;;8936:44;29065:15:0::1;8996:19:1::0;;;8989:35;28871:9:0;::::1;::::0;:25:::1;::::0;28904:16;;8675:19:1;;28871:224:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;29115:54:0::1;::::0;;20718:25:1;;;20774:2;20759:18;;20752:34;;;20802:18;;;20795:34;;;29115:54:0::1;::::0;-1:-1:-1;20706:2:1;20691:18;29115:54:0::1;;;;;;;28837:344;29230:1;29195:32;29218:9:::0;29195:20;:32:::1;:::i;:::-;:36;29191:117;;;29248:16;::::0;:48:::1;::::0;-1:-1:-1;;;;;29248:16:0;;::::1;::::0;29274:21:::1;29248:48:::0;::::1;;;::::0;:16:::1;:48:::0;:16;:48;29274:21;29248:16;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;29191:117;28112:1203;;;;11662:1;-1:-1:-1::0;11674:16:0;:24;;-1:-1:-1;;11674:24:0;;;28037:1278::o;30772:1880::-;30895:16;;30874:4;;30895:16;;;;;30891:851;;;-1:-1:-1;;;;;20308:31:0;;20284:4;20308:31;;;:22;:31;;;;;;;;30931:56;;;-1:-1:-1;;;;;;20308:31:0;;20284:4;20308:31;;;:22;:31;;;;;;;;30962:25;30927:116;;;31008:19;;-1:-1:-1;;;31008:19:0;;15633:2:1;31008:19:0;;;15615:21:1;15672:1;15652:18;;;15645:29;15710:11;15690:18;;;15683:39;15739:18;;31008:19:0;15431:332:1;30927:116:0;31064:16;;;;;;;31059:672;;31101:28;31120:4;31126:2;31101:18;:28::i;:::-;31153:16;;;;;;;31152:17;:41;;;;;31173:20;31184:4;31190:2;31173:10;:20::i;:::-;31148:137;;;31218:47;;-1:-1:-1;;;31218:47:0;;13405:2:1;31218:47:0;;;13387:21:1;13444:2;13424:18;;;13417:30;13483:34;13463:18;;;13456:62;13554:7;13534:18;;;13527:35;13579:19;;31218:47:0;13203:401:1;31148:137:0;31059:672;;;31344:1;31329:12;;:16;:55;;;;-1:-1:-1;;;;;;31371:13:0;;;;;;:7;:13;;;;;;;;31329:55;:101;;;;;31410:20;31421:4;31427:2;31410:10;:20::i;:::-;31325:391;;;31507:13;;31492:12;;31477:27;;:12;:27;:::i;:::-;:43;31473:224;;;-1:-1:-1;;;;;31549:26:0;;;;;;:22;:26;;;;;:33;;-1:-1:-1;;31549:33:0;31578:4;31549:33;;;31609:13;:16;;;;;;:::i;:::-;;;;-1:-1:-1;;31657:16:0;;-1:-1:-1;;;;;8001:55:1;;7983:74;;31657:16:0;;7971:2:1;7956:18;31657:16:0;;;;;;;31473:224;31754:25;31782:38;31793:4;31799:2;31803:7;31812;31782:10;:38::i;:::-;31865:14;;;;-1:-1:-1;;;;;31849:13:0;;;;;;:7;:13;;;;;;31754:66;;-1:-1:-1;31849:30:0;;;:::i;:::-;-1:-1:-1;;;;;31833:13:0;;;;;;;:7;:13;;;;;;:46;;;;31918:22;;;;31904:11;;;;;;;;;;:36;;31918:22;31904:36;:::i;:::-;-1:-1:-1;;;;;31890:11:0;;;;;;;:7;:11;;;;;;;;:50;;;;31957:17;;;;;:11;:17;;;;;;;:37;;;;-1:-1:-1;;;;;;31979:15:0;;;;;;:11;:15;;;;;;;;31978:16;31957:37;31953:416;;;-1:-1:-1;;;;;32027:13:0;;;;;;:7;:13;;;;;;:23;;32043:7;;32027:23;:::i;:::-;-1:-1:-1;;;;;32011:13:0;;;;;;:7;:13;;;;;:39;31953:416;;;-1:-1:-1;;;;;32073:17:0;;;;;;:11;:17;;;;;;;;32072:18;:37;;;;-1:-1:-1;;;;;;32094:15:0;;;;;;:11;:15;;;;;;;;32072:37;32068:301;;;32154:22;;-1:-1:-1;;;;;32140:11:0;;32154:22;32140:11;;;:7;:11;;;;;;:36;;32154:22;32140:36;:::i;:::-;-1:-1:-1;;;;;32126:11:0;;;;;;:7;:11;;;;;:50;32068:301;;;-1:-1:-1;;;;;32200:17:0;;;;;;:11;:17;;;;;;;;:36;;;;-1:-1:-1;;;;;;32221:15:0;;;;;;:11;:15;;;;;;;;32200:36;32196:173;;;-1:-1:-1;;;;;32269:13:0;;;;;;:7;:13;;;;;;:23;;32285:7;;32269:23;:::i;:::-;-1:-1:-1;;;;;32253:13:0;;;;;;;:7;:13;;;;;;:39;;;;32335:22;;32321:11;;;;;;;;;;:36;;32335:22;32321:36;:::i;:::-;-1:-1:-1;;;;;32307:11:0;;;;;;:7;:11;;;;;:50;32196:173;32385:17;;;;:21;32381:79;;32421:39;32436:4;32442:6;:17;;;32421:14;:39::i;:::-;32489:1;32475:6;:11;;;:15;:34;;;;32508:1;32494:6;:11;;;:15;32475:34;32471:91;;;32524:38;32537:6;:11;;;32550:6;:11;;;32524:12;:38::i;:::-;32595:2;-1:-1:-1;;;;;32580:42:0;32589:4;-1:-1:-1;;;;;32580:42:0;;32599:6;:22;;;32580:42;;;;19449:25:1;;19437:2;19422:18;;19303:177;32580:42:0;;;;;;;;-1:-1:-1;32640:4:0;;30772:1880;-1:-1:-1;;;;;30772:1880:0:o;34301:547::-;34399:7;;34435;;34352;;;;;34453:283;34477:9;:16;34473:20;;34453:283;;;34543:7;34519;:21;34527:9;34537:1;34527:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34527:12:0;34519:21;;;;;;;;;;;;;:31;;:66;;;34578:7;34554;:21;34562:9;34572:1;34562:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34562:12:0;34554:21;;;;;;;;;;;;;:31;34519:66;34515:97;;;34595:7;;34604;;34587:25;;;;;;;34301:547;;:::o;34515:97::-;34647:7;:21;34655:9;34665:1;34655:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34655:12:0;34647:21;;;;;;;;;;;;;34637:31;;:7;:31;:::i;:::-;34627:41;;34703:7;:21;34711:9;34721:1;34711:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34711:12:0;34703:21;;;;;;;;;;;;;34693:31;;:7;:31;:::i;:::-;34683:41;-1:-1:-1;34495:3:0;;;;:::i;:::-;;;;34453:283;;;;34770:7;;34760;;:17;;;;:::i;:::-;34750:7;:27;34746:58;;;34787:7;;34796;;34779:25;;;;;;34301:547;;:::o;34746:58::-;34823:7;;34832;;-1:-1:-1;34301:547:0;-1:-1:-1;34301:547:0:o;29331:439::-;29414:16;;;;;;;29413:17;29405:65;;;;-1:-1:-1;;;29405:65:0;;11859:2:1;29405:65:0;;;11841:21:1;11898:2;11878:18;;;11871:30;11937:34;11917:18;;;11910:62;12008:5;11988:18;;;11981:33;12031:19;;29405:65:0;11657:399:1;29405:65:0;29486:20;29497:4;29503:2;29486:10;:20::i;:::-;29485:21;:37;;;;-1:-1:-1;29516:6:0;;-1:-1:-1;;;;;29510:12:0;;;29516:6;;29510:12;29485:37;29481:282;;;-1:-1:-1;;;;;29539:23:0;;;;;;:17;:23;;;;;;;:30;;-1:-1:-1;;29539:30:0;29565:4;29539:30;;;;;;29584:16;:23;;-1:-1:-1;;29584:23:0;;;;;29637:15;29622:12;:30;29669:21;:28;;;;-1:-1:-1;;;29669:28:0;;;29717:34;;;;;;9200:14:1;;9193:22;9175:41;;9163:2;9148:18;;9035:187;29717:34:0;;;;;;;;29331:439;;:::o;32660:1464::-;32755:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32755:18:0;32786:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32786:25:0;32822:19;32844:10;:8;:10::i;:::-;32822:32;-1:-1:-1;32884:21:0;32822:32;32884:7;:21;:::i;:::-;32867:14;;;:38;32918:1071;;;;-1:-1:-1;;;;;32949:11:0;;;;;;:7;:11;;;;;;;;32945:561;;;32995:15;;32981:11;:29;33045:17;;33029:13;:33;33097:17;;33081:13;:33;32945:561;;;-1:-1:-1;;;;;33140:13:0;;;;;;:7;:13;;;;;;;;33136:370;;;33188:14;;33174:11;:28;33237:16;;33221:13;:32;33288:16;;33272:13;:32;33136:370;;;33359:19;;33345:11;:33;33413:21;;33397:13;:37;33469:21;;33453:13;:37;33136:370;33562:16;;33547:11;;33537:21;;:7;:21;:::i;:::-;33536:42;;;;:::i;:::-;33522:11;;;:56;33659:16;;33641:13;;33625;;:29;;33641:13;33625:29;:::i;:::-;33614:41;;:7;:41;:::i;:::-;33613:62;;;;:::i;:::-;33593:17;;;:82;;;33726:11;;;;:31;;33593:82;33726:31;:::i;:::-;33715:43;;:7;:43;:::i;:::-;33690:68;;33789:11;;;;:25;;33803:11;;33789:25;:::i;:::-;33775:11;;;:39;32918:1071;;;33861:1;33847:11;;;:15;;;33877:17;;;:21;;;33913:32;;;33962:11;;;:15;32918:1071;34079:11;34059:6;:17;;;:31;;;;:::i;:::-;34044:6;:11;;;:47;;;;:::i;:::-;34026:6;:14;;;:66;;;;:::i;:::-;34001:22;;;:91;-1:-1:-1;34001:22:0;32660:1464;-1:-1:-1;;;;;32660:1464:0:o;35130:461::-;35210:19;35233:10;:8;:10::i;:::-;35210:33;-1:-1:-1;35254:18:0;35275:24;35210:33;35275:10;:24;:::i;:::-;35351:4;35335:22;;;;:7;:22;;;;;;35254:45;;-1:-1:-1;35335:35:0;;35254:45;;35335:35;:::i;:::-;35326:4;35310:22;;;;:7;:22;;;;;;;;:60;;;;35384:11;:26;;;;;;35381:104;;;35466:4;35450:22;;;;:7;:22;;;;;;:35;;35475:10;;35450:35;:::i;:::-;35441:4;35425:22;;;;:7;:22;;;;;:60;35381:104;35501:43;;19449:25:1;;;35526:4:0;;-1:-1:-1;;;;;35501:43:0;;;;;19437:2:1;19422:18;35501:43:0;;;;;;;35199:392;;35130:461;;:::o;34860:143::-;34950:4;34940:7;;:14;;;;:::i;:::-;34930:7;:24;34978:10;;:17;;34991:4;;34978:17;:::i;:::-;34965:10;:30;-1:-1:-1;;34860:143:0:o;14:748:1:-;68:5;121:3;114:4;106:6;102:17;98:27;88:55;;139:1;136;129:12;88:55;175:6;162:20;201:4;225:60;241:43;281:2;241:43;:::i;:::-;225:60;:::i;:::-;307:3;331:2;326:3;319:15;359:2;354:3;350:12;343:19;;394:2;386:6;382:15;446:3;441:2;435;432:1;428:10;420:6;416:23;412:32;409:41;406:61;;;463:1;460;453:12;406:61;485:1;495:238;509:2;506:1;503:9;495:238;;;580:3;567:17;597:31;622:5;597:31;:::i;:::-;641:18;;679:12;;;;711;;;;527:1;520:9;495:238;;;-1:-1:-1;751:5:1;;14:748;-1:-1:-1;;;;;;;14:748:1:o;767:673::-;821:5;874:3;867:4;859:6;855:17;851:27;841:55;;892:1;889;882:12;841:55;928:6;915:20;954:4;978:60;994:43;1034:2;994:43;:::i;978:60::-;1060:3;1084:2;1079:3;1072:15;1112:2;1107:3;1103:12;1096:19;;1147:2;1139:6;1135:15;1199:3;1194:2;1188;1185:1;1181:10;1173:6;1169:23;1165:32;1162:41;1159:61;;;1216:1;1213;1206:12;1159:61;1238:1;1248:163;1262:2;1259:1;1256:9;1248:163;;;1319:17;;1307:30;;1357:12;;;;1389;;;;1280:1;1273:9;1248:163;;1445:160;1510:20;;1566:13;;1559:21;1549:32;;1539:60;;1595:1;1592;1585:12;1539:60;1445:160;;;:::o;1610:247::-;1669:6;1722:2;1710:9;1701:7;1697:23;1693:32;1690:52;;;1738:1;1735;1728:12;1690:52;1777:9;1764:23;1796:31;1821:5;1796:31;:::i;1862:251::-;1932:6;1985:2;1973:9;1964:7;1960:23;1956:32;1953:52;;;2001:1;1998;1991:12;1953:52;2033:9;2027:16;2052:31;2077:5;2052:31;:::i;2378:973::-;2529:6;2537;2545;2553;2561;2614:3;2602:9;2593:7;2589:23;2585:33;2582:53;;;2631:1;2628;2621:12;2582:53;2670:9;2657:23;2689:31;2714:5;2689:31;:::i;:::-;2739:5;-1:-1:-1;2795:2:1;2780:18;;2767:32;2818:18;2848:14;;;2845:34;;;2875:1;2872;2865:12;2845:34;2898:61;2951:7;2942:6;2931:9;2927:22;2898:61;:::i;:::-;2888:71;;3012:2;3001:9;2997:18;2984:32;2968:48;;3041:2;3031:8;3028:16;3025:36;;;3057:1;3054;3047:12;3025:36;;3080:63;3135:7;3124:8;3113:9;3109:24;3080:63;:::i;:::-;3070:73;;;3195:2;3184:9;3180:18;3167:32;3243:4;3234:7;3230:18;3221:7;3218:31;3208:59;;3263:1;3260;3253:12;3208:59;2378:973;;;;-1:-1:-1;2378:973:1;;3340:3;3325:19;3312:33;;2378:973;-1:-1:-1;;2378:973:1:o;3356:388::-;3424:6;3432;3485:2;3473:9;3464:7;3460:23;3456:32;3453:52;;;3501:1;3498;3491:12;3453:52;3540:9;3527:23;3559:31;3584:5;3559:31;:::i;:::-;3609:5;-1:-1:-1;3666:2:1;3651:18;;3638:32;3679:33;3638:32;3679:33;:::i;:::-;3731:7;3721:17;;;3356:388;;;;;:::o;3749:456::-;3826:6;3834;3842;3895:2;3883:9;3874:7;3870:23;3866:32;3863:52;;;3911:1;3908;3901:12;3863:52;3950:9;3937:23;3969:31;3994:5;3969:31;:::i;:::-;4019:5;-1:-1:-1;4076:2:1;4061:18;;4048:32;4089:33;4048:32;4089:33;:::i;:::-;3749:456;;4141:7;;-1:-1:-1;;;4195:2:1;4180:18;;;;4167:32;;3749:456::o;4210:315::-;4275:6;4283;4336:2;4324:9;4315:7;4311:23;4307:32;4304:52;;;4352:1;4349;4342:12;4304:52;4391:9;4378:23;4410:31;4435:5;4410:31;:::i;:::-;4460:5;-1:-1:-1;4484:35:1;4515:2;4500:18;;4484:35;:::i;:::-;4474:45;;4210:315;;;;;:::o;4530:::-;4598:6;4606;4659:2;4647:9;4638:7;4634:23;4630:32;4627:52;;;4675:1;4672;4665:12;4627:52;4714:9;4701:23;4733:31;4758:5;4733:31;:::i;:::-;4783:5;4835:2;4820:18;;;;4807:32;;-1:-1:-1;;;4530:315:1:o;4850:595::-;4968:6;4976;5029:2;5017:9;5008:7;5004:23;5000:32;4997:52;;;5045:1;5042;5035:12;4997:52;5085:9;5072:23;5114:18;5155:2;5147:6;5144:14;5141:34;;;5171:1;5168;5161:12;5141:34;5194:61;5247:7;5238:6;5227:9;5223:22;5194:61;:::i;:::-;5184:71;;5308:2;5297:9;5293:18;5280:32;5264:48;;5337:2;5327:8;5324:16;5321:36;;;5353:1;5350;5343:12;5321:36;;5376:63;5431:7;5420:8;5409:9;5405:24;5376:63;:::i;:::-;5366:73;;;4850:595;;;;;:::o;5450:416::-;5540:6;5548;5601:2;5589:9;5580:7;5576:23;5572:32;5569:52;;;5617:1;5614;5607:12;5569:52;5657:9;5644:23;5690:18;5682:6;5679:30;5676:50;;;5722:1;5719;5712:12;5676:50;5745:61;5798:7;5789:6;5778:9;5774:22;5745:61;:::i;:::-;5735:71;;;5825:35;5856:2;5845:9;5841:18;5825:35;:::i;5871:180::-;5927:6;5980:2;5968:9;5959:7;5955:23;5951:32;5948:52;;;5996:1;5993;5986:12;5948:52;6019:26;6035:9;6019:26;:::i;6056:316::-;6124:6;6132;6140;6193:2;6181:9;6172:7;6168:23;6164:32;6161:52;;;6209:1;6206;6199:12;6161:52;6232:26;6248:9;6232:26;:::i;:::-;6222:36;;6277:35;6308:2;6297:9;6293:18;6277:35;:::i;:::-;6267:45;;6331:35;6362:2;6351:9;6347:18;6331:35;:::i;:::-;6321:45;;6056:316;;;;;:::o;6377:180::-;6436:6;6489:2;6477:9;6468:7;6464:23;6460:32;6457:52;;;6505:1;6502;6495:12;6457:52;-1:-1:-1;6528:23:1;;6377:180;-1:-1:-1;6377:180:1:o;6562:248::-;6630:6;6638;6691:2;6679:9;6670:7;6666:23;6662:32;6659:52;;;6707:1;6704;6697:12;6659:52;-1:-1:-1;;6730:23:1;;;6800:2;6785:18;;;6772:32;;-1:-1:-1;6562:248:1:o;6815:316::-;6892:6;6900;6908;6961:2;6949:9;6940:7;6936:23;6932:32;6929:52;;;6977:1;6974;6967:12;6929:52;-1:-1:-1;;7000:23:1;;;7070:2;7055:18;;7042:32;;-1:-1:-1;7121:2:1;7106:18;;;7093:32;;6815:316;-1:-1:-1;6815:316:1:o;7136:306::-;7224:6;7232;7240;7293:2;7281:9;7272:7;7268:23;7264:32;7261:52;;;7309:1;7306;7299:12;7261:52;7338:9;7332:16;7322:26;;7388:2;7377:9;7373:18;7367:25;7357:35;;7432:2;7421:9;7417:18;7411:25;7401:35;;7136:306;;;;;:::o;7447:385::-;7533:6;7541;7549;7557;7610:3;7598:9;7589:7;7585:23;7581:33;7578:53;;;7627:1;7624;7617:12;7578:53;-1:-1:-1;;7650:23:1;;;7720:2;7705:18;;7692:32;;-1:-1:-1;7771:2:1;7756:18;;7743:32;;7822:2;7807:18;7794:32;;-1:-1:-1;7447:385:1;-1:-1:-1;7447:385:1:o;9484:597::-;9596:4;9625:2;9654;9643:9;9636:21;9686:6;9680:13;9729:6;9724:2;9713:9;9709:18;9702:34;9754:1;9764:140;9778:6;9775:1;9772:13;9764:140;;;9873:14;;;9869:23;;9863:30;9839:17;;;9858:2;9835:26;9828:66;9793:10;;9764:140;;;9922:6;9919:1;9916:13;9913:91;;;9992:1;9987:2;9978:6;9967:9;9963:22;9959:31;9952:42;9913:91;-1:-1:-1;10065:2:1;10044:15;-1:-1:-1;;10040:29:1;10025:45;;;;10072:2;10021:54;;9484:597;-1:-1:-1;;;9484:597:1:o;19485:1026::-;19747:4;19795:3;19784:9;19780:19;19826:6;19815:9;19808:25;19852:2;19890:6;19885:2;19874:9;19870:18;19863:34;19933:3;19928:2;19917:9;19913:18;19906:31;19957:6;19992;19986:13;20023:6;20015;20008:22;20061:3;20050:9;20046:19;20039:26;;20100:2;20092:6;20088:15;20074:29;;20121:1;20131:218;20145:6;20142:1;20139:13;20131:218;;;20210:13;;-1:-1:-1;;;;;20206:62:1;20194:75;;20324:15;;;;20289:12;;;;20167:1;20160:9;20131:218;;;-1:-1:-1;;;;;;;20405:55:1;;;;20400:2;20385:18;;20378:83;-1:-1:-1;;;20492:3:1;20477:19;20470:35;20366:3;19485:1026;-1:-1:-1;;;19485:1026:1:o;21029:275::-;21100:2;21094:9;21165:2;21146:13;;-1:-1:-1;;21142:27:1;21130:40;;21200:18;21185:34;;21221:22;;;21182:62;21179:88;;;21247:18;;:::i;:::-;21283:2;21276:22;21029:275;;-1:-1:-1;21029:275:1:o;21309:183::-;21369:4;21402:18;21394:6;21391:30;21388:56;;;21424:18;;:::i;:::-;-1:-1:-1;21469:1:1;21465:14;21481:4;21461:25;;21309:183::o;21497:128::-;21537:3;21568:1;21564:6;21561:1;21558:13;21555:39;;;21574:18;;:::i;:::-;-1:-1:-1;21610:9:1;;21497:128::o;21630:274::-;21670:1;21696;21686:189;;-1:-1:-1;;;21728:1:1;21721:88;21832:4;21829:1;21822:15;21860:4;21857:1;21850:15;21686:189;-1:-1:-1;21889:9:1;;21630:274::o;21909:422::-;21998:1;22041:5;21998:1;22055:270;22076:7;22066:8;22063:21;22055:270;;;22135:4;22131:1;22127:6;22123:17;22117:4;22114:27;22111:53;;;22144:18;;:::i;:::-;22194:7;22184:8;22180:22;22177:55;;;22214:16;;;;22177:55;22293:22;;;;22253:15;;;;22055:270;;;22059:3;21909:422;;;;;:::o;22336:140::-;22394:5;22423:47;22464:4;22454:8;22450:19;22444:4;22530:5;22560:8;22550:80;;-1:-1:-1;22601:1:1;22615:5;;22550:80;22649:4;22639:76;;-1:-1:-1;22686:1:1;22700:5;;22639:76;22731:4;22749:1;22744:59;;;;22817:1;22812:130;;;;22724:218;;22744:59;22774:1;22765:10;;22788:5;;;22812:130;22849:3;22839:8;22836:17;22833:43;;;22856:18;;:::i;:::-;-1:-1:-1;;22912:1:1;22898:16;;22927:5;;22724:218;;23026:2;23016:8;23013:16;23007:3;23001:4;22998:13;22994:36;22988:2;22978:8;22975:16;22970:2;22964:4;22961:12;22957:35;22954:77;22951:159;;;-1:-1:-1;23063:19:1;;;23095:5;;22951:159;23142:34;23167:8;23161:4;23142:34;:::i;:::-;23212:6;23208:1;23204:6;23200:19;23191:7;23188:32;23185:58;;;23223:18;;:::i;:::-;23261:20;;22481:806;-1:-1:-1;;;22481:806:1:o;23292:168::-;23332:7;23398:1;23394;23390:6;23386:14;23383:1;23380:21;23375:1;23368:9;23361:17;23357:45;23354:71;;;23405:18;;:::i;:::-;-1:-1:-1;23445:9:1;;23292:168::o;23465:125::-;23505:4;23533:1;23530;23527:8;23524:34;;;23538:18;;:::i;:::-;-1:-1:-1;23575:9:1;;23465:125::o;23595:437::-;23674:1;23670:12;;;;23717;;;23738:61;;23792:4;23784:6;23780:17;23770:27;;23738:61;23845:2;23837:6;23834:14;23814:18;23811:38;23808:218;;;-1:-1:-1;;;23879:1:1;23872:88;23983:4;23980:1;23973:15;24011:4;24008:1;24001:15;23808:218;;23595:437;;;:::o;24037:135::-;24076:3;-1:-1:-1;;24097:17:1;;24094:43;;;24117:18;;:::i;:::-;-1:-1:-1;24164:1:1;24153:13;;24037:135::o;24177:175::-;24214:3;24258:4;24251:5;24247:16;24287:4;24278:7;24275:17;24272:43;;;24295:18;;:::i;:::-;24344:1;24331:15;;24177:175;-1:-1:-1;;24177:175:1:o;24357:184::-;-1:-1:-1;;;24406:1:1;24399:88;24506:4;24503:1;24496:15;24530:4;24527:1;24520:15;24546:184;-1:-1:-1;;;24595:1:1;24588:88;24695:4;24692:1;24685:15;24719:4;24716:1;24709:15;24735:184;-1:-1:-1;;;24784:1:1;24777:88;24884:4;24881:1;24874:15;24908:4;24905:1;24898:15;24924:184;-1:-1:-1;;;24973:1:1;24966:88;25073:4;25070:1;25063:15;25097:4;25094:1;25087:15;25113:154;-1:-1:-1;;;;;25192:5:1;25188:54;25181:5;25178:65;25168:93;;25257:1;25254;25247:12

Swarm Source

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