ETH Price: $2,454.38 (+0.13%)

Token

Catcoin OG (CATS)
 

Overview

Max Total Supply

1,000,000,000 CATS

Holders

125

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
17,237.148315278717415545 CATS

Value
$0.00
0x6c6091bafff99a23e3681d24820f6188a0550dd5
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:
CATS

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-12-14
*/

/*
Telegram : https://t.me/Catcoin_OG
Twitter  : https://x.com/CatcoinOG 
Website  : http://catcoin-og.com
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.21;

interface IERC20Errors {
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
    error ERC20InvalidSender(address sender);
    error ERC20InvalidReceiver(address receiver);
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);
    error ERC20InvalidApprover(address approver);
    error ERC20InvalidSpender(address spender);
    error ERC20TransferFailed();
    error ERC20ZeroTransfer();
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
    
library SafeMath {
  
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

abstract contract Ownable is Context {

    address private _owner;

    error OwnableUnauthorizedAccount(address account);

    error OwnableInvalidOwner(address owner);

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IDexFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

}

contract CATS is Context, IERC20, Ownable, IERC20Errors {

    using SafeMath for uint256;
    
    address constant dead = 0x000000000000000000000000000000000000dEaD;
    address constant zero = 0x000000000000000000000000000000000000dEaD;
    
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping(address => bool) public isExcludedFromMaxTxn;
    mapping(address => bool) public isExcludedFromMaxHoldLimit;
    
    mapping (address => bool) public AutomaticMarketPair;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
    
    address private router;

    uint256 private constant MAX = ~uint256(0);
    
    uint256 private _tFeeTotal;

    string private _name = "Catcoin OG";
    string private _symbol = "CATS";
    uint8 private _decimals = 18;

    uint256 public _tTotal = 1_000_000_000 * 10 ** _decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal)); 

    uint256 public TokenSwapThreshold = _tTotal.mul(1).div(100);

    uint256 public maxTx = _tTotal.mul(15).div(1000);
    uint256 public maxWallet = _tTotal.mul(15).div(1000);

    uint256 private _taxFee = 0;                           
    uint256 private _previousTaxFee = _taxFee;

    uint256 private _MarketingFee = 0;
    uint256 private _previousMarketingFee = _MarketingFee;

    address public marketingWallet;

    struct BuyFee{
        uint256 setTaxFee;
        uint256 setMarketingFee;
    }

    struct SellFee{
        uint256 setTaxFee;
        uint256 setMarketingFee;     
    }

    BuyFee public buyFee;
    SellFee public sellFee;

    IDexRouter public pcsV2Router;
    address public pcsV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;  
      
    bool public swapByLimit = true;
    bool public iswalletLimit = true;
    bool public isTxLimit = true;

    bool public TradeEnabled;
    uint256 public launchedAt;
    
    event SwapAndLiquifyEnabledUpdated(bool enabled);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor () Ownable(_msgSender())
    {    
        marketingWallet = msg.sender;

        _rOwned[msg.sender] = _rTotal;

        buyFee.setTaxFee = 2;
        buyFee.setMarketingFee = 28;
        
        sellFee.setTaxFee = 2;
        sellFee.setMarketingFee = 28;
                
        IDexRouter _pcsV2Router = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        pcsV2Pair = IDexFactory(_pcsV2Router.factory())
            .createPair(address(this), _pcsV2Router.WETH());

        pcsV2Router = _pcsV2Router;

        _allowances[address(this)][address(pcsV2Router)] = MAX;

        AutomaticMarketPair[pcsV2Pair] = true;

        excludeFromReward(address(dead));

        //exclude owner and this contract from fee
        _isExcludedFromFee[msg.sender] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[address(_pcsV2Router)] = true;
        _isExcludedFromFee[address(dead)] = true;

        //exclude owner and this contract from txn limit
        isExcludedFromMaxTxn[msg.sender] = true;
        isExcludedFromMaxTxn[address(this)] = true;
        isExcludedFromMaxTxn[address(_pcsV2Router)] = true;
        isExcludedFromMaxTxn[address(dead)] = true;

        // exclude addresses from max tx
        isExcludedFromMaxHoldLimit[msg.sender] = true;
        isExcludedFromMaxHoldLimit[address(this)] = true;
        isExcludedFromMaxHoldLimit[address(_pcsV2Router)] = true;
        isExcludedFromMaxHoldLimit[pcsV2Pair] = true;
        isExcludedFromMaxHoldLimit[address(dead)] = true;

        emit Transfer(address(0), msg.sender, _tTotal);
    }

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

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

    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 allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

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

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

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amt must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amt must be less than tot refl");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    //to recieve ETH from pcsV2Router when swaping
    receive() external payable {}

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tMarketing) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tMarketing, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tMarketing);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tMarketing = calculateMarketingFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tMarketing);
        return (tTransferAmount, tFee, tMarketing);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tMarketing, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rMarketing = tMarketing.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rMarketing);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private 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.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeMarketing(uint256 tMarketing) private {
        uint256 currentRate =  _getRate();
        uint256 rMarketing = tMarketing.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rMarketing);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tMarketing);        
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function calculateMarketingFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_MarketingFee).div(
            10**2
        );
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _MarketingFee == 0) return; 
        
        _previousTaxFee = _taxFee;
        _previousMarketingFee = _MarketingFee;
        
        _taxFee = 0;
        _MarketingFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _MarketingFee = _previousMarketingFee;
    }

    function setBuy() private {
        _taxFee = buyFee.setTaxFee;
        _MarketingFee = buyFee.setMarketingFee;
    }
    
    function setSell() private {
        _taxFee = sellFee.setTaxFee;
        _MarketingFee = sellFee.setMarketingFee;
    }

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

    function _checkMaxWalletAmount(address to, uint256 amount) private view {
        if (  !isExcludedFromMaxHoldLimit[to] && iswalletLimit) {
            require(
                balanceOf(to).add(amount) <= maxWallet,
                "ERC20: amount exceed max holding limit"
            );
        }
    }

    function _approve(address owner, address spender, uint256 amount) private {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        if(amount == 0) {
            revert ERC20ZeroTransfer();
        }

        if(!TradeEnabled) {
            require(_isExcludedFromFee[from] || _isExcludedFromFee[to], "Trading Paused"); 
        }

        if (!isExcludedFromMaxTxn[from] && !isExcludedFromMaxTxn[to] && isTxLimit ) {
            require(amount <= maxTx, "ERC20: max txn limit exceeds");
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool overMinTokenBalance = contractTokenBalance >= TokenSwapThreshold;
        if (
            !inSwapAndLiquify &&
            overMinTokenBalance &&
            AutomaticMarketPair[to] &&
            swapAndLiquifyEnabled && 
            !_isExcludedFromFee[from] &&
            !_isExcludedFromFee[to]
        ) {
            
            swapAndUpdate(contractTokenBalance);
            
        }

        //indicates if fee should be deducted from transfer
        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }

        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapAndUpdate(uint _contractBalance) private lockTheSwap {

        if(_contractBalance == 0) return;
        if(swapByLimit) _contractBalance = TokenSwapThreshold;

        swapTokensForEth(_contractBalance,marketingWallet);

    }


    function swapTokensForEth(uint256 tokenAmount, address recipient) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = pcsV2Router.WETH();

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

        // make the swap
        pcsV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(recipient), // The contract
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }
   
    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        
            removeAllFee();

            if (takeFee){
                if (AutomaticMarketPair[sender]) {
                    setBuy();
                }
                if (AutomaticMarketPair[recipient]) {
                    setSell();
                }
            } 
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing) = _getValues(tAmount);
        _checkMaxWalletAmount(recipient, tTransferAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeMarketing(tMarketing);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing) = _getValues(tAmount);
        _checkMaxWalletAmount(recipient, tTransferAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeMarketing(tMarketing);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing) = _getValues(tAmount);
        _checkMaxWalletAmount(recipient, tTransferAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeMarketing(tMarketing);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing) = _getValues(tAmount);
        _checkMaxWalletAmount(recipient, tTransferAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeMarketing(tMarketing);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _tokenTransferNoFee(address sender, address recipient, uint256 amount) private {
        uint256 currentRate =  _getRate();  
        uint256 rAmount = amount.mul(currentRate);   

        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rAmount); 
        
        if (_isExcluded[sender]) {
            _tOwned[sender] = _tOwned[sender].sub(amount);
        } 
        if (_isExcluded[recipient]) {
            _tOwned[recipient] = _tOwned[recipient].add(amount);
        } 
        emit Transfer(sender, recipient, amount);
    }

    function excludeFromReward(address account) public onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded from reward");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Already excluded");
        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 excludeFromFee(address account) external onlyOwner() {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) external onlyOwner() {
        _isExcludedFromFee[account] = false;
    }

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

    function setSwapByLimit(bool _enabled) external onlyOwner {
        swapByLimit = _enabled;
    }

    function setMarketingWallet(address newWallet) external onlyOwner {
        marketingWallet = newWallet;
    }
    
    function setMaxWalletEnabled(bool _enabled) external onlyOwner {
        iswalletLimit = _enabled;
    }

    function setMaxTxEnabled(bool _enabled) external onlyOwner {
        isTxLimit = _enabled;
    }

    function setMaxBagelLimit(uint _value) external onlyOwner {
        maxWallet = _value;
    }

    function setMaxTxLimit(uint _value) external onlyOwner {
        maxTx = _value;
    }

    function excludeFromMaxTransaction(address _user,bool _status) external onlyOwner {
        isExcludedFromMaxTxn[_user] = _status;
    }

    function excludeFromMaxBag(address _user,bool _status) external onlyOwner {
        isExcludedFromMaxHoldLimit[_user] = _status;
    }

    function setNumTokensSellToAddToMarketing(uint _value) public onlyOwner {
        TokenSwapThreshold = _value;
    }

    function setBuyFee(uint _newtax, uint _newMarketing) public onlyOwner {
        buyFee.setTaxFee = _newtax;
        buyFee.setMarketingFee = _newMarketing;
    }

    function setSellFee(uint _newtax, uint _newMarketing) public onlyOwner {      
        sellFee.setTaxFee = _newtax;
        sellFee.setMarketingFee = _newMarketing;
    }

    function openTrade() external onlyOwner() {
        require(!TradeEnabled,"Trade Already Started");
        TradeEnabled = true;
        launchedAt = block.timestamp;
    }

    function recoverFunds() public {
        require(msg.sender == marketingWallet,"Unauthorized!");
        (bool os,) = payable(msg.sender).call{value: address(this).balance}("");
        if(!os) revert ERC20TransferFailed();
    }

    function recoverTokens(address tokenAddress, uint256 tokenAmount) public  {
        require(msg.sender == marketingWallet,"Unauthorized!");
        if(tokenAddress == address(this)) {
            _tokenTransferNoFee(address(this),msg.sender,tokenAmount);
        }
        else{
            (bool os,) = tokenAddress.call(abi.encodeWithSignature("transfer(address,uint256)", msg.sender,tokenAmount));
            if(!os) revert ERC20TransferFailed();
        }
    }


}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"ERC20TransferFailed","type":"error"},{"inputs":[],"name":"ERC20ZeroTransfer","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":[{"internalType":"address","name":"","type":"address"}],"name":"AutomaticMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TokenSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TradeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"setTaxFee","type":"uint256"},{"internalType":"uint256","name":"setMarketingFee","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":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"excludeFromMaxBag","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromMaxHoldLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromMaxTxn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTxLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"iswalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pcsV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pcsV2Router","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recoverFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"setTaxFee","type":"uint256"},{"internalType":"uint256","name":"setMarketingFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newtax","type":"uint256"},{"internalType":"uint256","name":"_newMarketing","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setMaxBagelLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setMaxTxEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setMaxWalletEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setNumTokensSellToAddToMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newtax","type":"uint256"},{"internalType":"uint256","name":"_newMarketing","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapByLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapByLimit","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":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526040518060400160405280600a81526020017f436174636f696e204f4700000000000000000000000000000000000000000000815250600c90816200004a9190620016ce565b506040518060400160405280600481526020017f4341545300000000000000000000000000000000000000000000000000000000815250600d9081620000919190620016ce565b506012600e5f6101000a81548160ff021916908360ff160217905550600e5f9054906101000a900460ff16600a620000ca91906200193b565b633b9aca00620000db91906200198b565b600f55600f545f19620000ef919062001a02565b5f19620000fd919062001a39565b6010556200012d60646200011e6001600f5462000b6560201b90919060201c565b62000be560201b90919060201c565b6011556200015d6103e86200014e600f805462000b6560201b90919060201c565b62000be560201b90919060201c565b6012556200018d6103e86200017e600f805462000b6560201b90919060201c565b62000be560201b90919060201c565b6013555f6014556014546015555f6016556016546017556001601e60156101000a81548160ff0219169083151502179055506001601e60166101000a81548160ff0219169083151502179055506001601e60176101000a81548160ff0219169083151502179055506001601e60186101000a81548160ff0219169083151502179055503480156200021c575f80fd5b506200022d62000c3660201b60201c565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620002a0575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040162000297919062001ab6565b60405180910390fd5b620002b18162000c3d60201b60201c565b503360185f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060105460015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600260195f0181905550601c6019600101819055506002601b5f0181905550601c601b600101819055505f737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003c2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003e8919062001b04565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200044e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000474919062001b04565b6040518363ffffffff1660e01b81526004016200049392919062001b34565b6020604051808303815f875af1158015620004b0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004d6919062001b04565b601e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f1960035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600160065f601e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506200067d61dead62000cfe60201b60201c565b600160075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160045f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160045f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160055f601e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160055f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600f5460405162000b56919062001b70565b60405180910390a35062001e31565b5f80830362000b77575f905062000bdf565b5f828462000b8691906200198b565b905082848262000b97919062001b8b565b1462000bda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bd19062001c46565b60405180910390fd5b809150505b92915050565b5f62000c2e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000f2960201b60201c565b905092915050565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000d0e62000f8f60201b60201c565b60085f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161562000d9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d929062001cda565b60405180910390fd5b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054111562000e715762000e2f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546200103160201b60201c565b60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b600160085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600981908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f808311829062000f72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f69919062001d74565b60405180910390fd5b505f838562000f82919062001b8b565b9050809150509392505050565b62000f9f62000c3660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000fc5620010aa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200102f5762000ff162000c3660201b60201c565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040162001026919062001ab6565b60405180910390fd5b565b5f6010548211156200107a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620010719062001de4565b60405180910390fd5b5f6200108b620010d160201b60201c565b9050620010a2818462000be560201b90919060201c565b915050919050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f805f620010e46200110460201b60201c565b91509150620010fd818362000be560201b90919060201c565b9250505090565b5f805f60105490505f600f5490505f5b60098054905081101562001371578260015f600984815481106200113d576200113c62001e04565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205411806200122657508160025f60098481548110620011c257620011c162001e04565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054115b156200123f57601054600f5494509450505050620013ae565b620012cf60015f600984815481106200125d576200125c62001e04565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205484620013b260201b90919060201c565b92506200136160025f60098481548110620012ef57620012ee62001e04565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483620013b260201b90919060201c565b9150808060010191505062001114565b506200138b600f5460105462000be560201b90919060201c565b821015620013a557601054600f54935093505050620013ae565b81819350935050505b9091565b5f620013fb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506200140360201b60201c565b905092915050565b5f8383111582906200144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001444919062001d74565b60405180910390fd5b505f83856200145d919062001a39565b9050809150509392505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620014e657607f821691505b602082108103620014fc57620014fb620014a1565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620015607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262001523565b6200156c868362001523565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620015b6620015b0620015aa8462001584565b6200158d565b62001584565b9050919050565b5f819050919050565b620015d18362001596565b620015e9620015e082620015bd565b8484546200152f565b825550505050565b5f90565b620015ff620015f1565b6200160c818484620015c6565b505050565b5b818110156200163357620016275f82620015f5565b60018101905062001612565b5050565b601f82111562001682576200164c8162001502565b620016578462001514565b8101602085101562001667578190505b6200167f620016768562001514565b83018262001611565b50505b505050565b5f82821c905092915050565b5f620016a45f198460080262001687565b1980831691505092915050565b5f620016be838362001693565b9150826002028217905092915050565b620016d9826200146a565b67ffffffffffffffff811115620016f557620016f462001474565b5b620017018254620014ce565b6200170e82828562001637565b5f60209050601f83116001811462001744575f84156200172f578287015190505b6200173b8582620016b1565b865550620017aa565b601f198416620017548662001502565b5f5b828110156200177d5784890151825560018201915060208501945060208101905062001756565b868310156200179d578489015162001799601f89168262001693565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156200183c57808604811115620018145762001813620017b2565b5b6001851615620018245780820291505b80810290506200183485620017df565b9450620017f4565b94509492505050565b5f8262001856576001905062001928565b8162001865575f905062001928565b81600181146200187e57600281146200188957620018bf565b600191505062001928565b60ff8411156200189e576200189d620017b2565b5b8360020a915084821115620018b857620018b7620017b2565b5b5062001928565b5060208310610133831016604e8410600b8410161715620018f95782820a905083811115620018f357620018f2620017b2565b5b62001928565b620019088484846001620017eb565b92509050818404811115620019225762001921620017b2565b5b81810290505b9392505050565b5f60ff82169050919050565b5f620019478262001584565b915062001954836200192f565b9250620019837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001845565b905092915050565b5f620019978262001584565b9150620019a48362001584565b9250828202620019b48162001584565b91508282048414831517620019ce57620019cd620017b2565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62001a0e8262001584565b915062001a1b8362001584565b92508262001a2e5762001a2d620019d5565b5b828206905092915050565b5f62001a458262001584565b915062001a528362001584565b925082820390508181111562001a6d5762001a6c620017b2565b5b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62001a9e8262001a73565b9050919050565b62001ab08162001a92565b82525050565b5f60208201905062001acb5f83018462001aa5565b92915050565b5f80fd5b62001ae08162001a92565b811462001aeb575f80fd5b50565b5f8151905062001afe8162001ad5565b92915050565b5f6020828403121562001b1c5762001b1b62001ad1565b5b5f62001b2b8482850162001aee565b91505092915050565b5f60408201905062001b495f83018562001aa5565b62001b58602083018462001aa5565b9392505050565b62001b6a8162001584565b82525050565b5f60208201905062001b855f83018462001b5f565b92915050565b5f62001b978262001584565b915062001ba48362001584565b92508262001bb75762001bb6620019d5565b5b828204905092915050565b5f82825260208201905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f62001c2e60218362001bc2565b915062001c3b8262001bd2565b604082019050919050565b5f6020820190508181035f83015262001c5f8162001c20565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465642066726f6d5f8201527f2072657761726400000000000000000000000000000000000000000000000000602082015250565b5f62001cc260278362001bc2565b915062001ccf8262001c66565b604082019050919050565b5f6020820190508181035f83015262001cf38162001cb4565b9050919050565b5f5b8381101562001d1957808201518184015260208101905062001cfc565b5f8484015250505050565b5f601f19601f8301169050919050565b5f62001d40826200146a565b62001d4c818562001bc2565b935062001d5e81856020860162001cfa565b62001d698162001d24565b840191505092915050565b5f6020820190508181035f83015262001d8e818462001d34565b905092915050565b7f416d74206d757374206265206c657373207468616e20746f74207265666c00005f82015250565b5f62001dcc601e8362001bc2565b915062001dd98262001d96565b602082019050919050565b5f6020820190508181035f83015262001dfd8162001dbe565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6157bc8062001e3f5f395ff3fe608060405260043610610378575f3560e01c80635d098b38116101d0578063a9059cbb11610101578063e172786b1161009f578063f387f3a01161006e578063f387f3a014610cd5578063f8b45b0514610d11578063fb0ecfa414610d3b578063fb201b1d14610d635761037f565b8063e172786b14610c33578063e43888a314610c5d578063ea2f0b3714610c85578063f2fde38b14610cad5761037f565b8063bf56b371116100db578063bf56b37114610b7b578063c49b9a8014610ba5578063dd62ed3e14610bcd578063e11c3e8314610c095761037f565b8063a9059cbb14610aff578063af465a2714610b3b578063b79550be14610b655761037f565b806375f0a8741161016e57806395d89b411161014857806395d89b4114610a3557806399b102b514610a5f578063a457c2d714610a9b578063a614ff7514610ad75761037f565b806375f0a874146109a557806388f82020146109cf5780638da5cb5b14610a0b5761037f565b806370a08231116101aa57806370a0823114610901578063715018a61461093d5780637437681e146109535780637571336a1461097d5761037f565b80635d098b381461088957806364f5a5bb146108b15780636ac9a870146108d95761037f565b8063313ce567116102aa5780634a74bb02116102485780635342acb4116102225780635342acb4146107d3578063541958ff1461080f57806355cda0d714610837578063585a71ed146108615761037f565b80634a74bb0214610757578063521432901461078157806352390c02146107ab5761037f565b80633bd5d173116102845780633bd5d173146106a0578063437823ec146106c85780634549b039146106f0578063470624021461072c5761037f565b8063313ce567146106125780633685d4191461063c57806339509351146106645761037f565b806310808a8f1161031757806323b872dd116102f157806323b872dd146105455780632b14ca56146105815780632d6abf87146105ac5780632d838119146105d65761037f565b806310808a8f146104c957806313114a9d146104f157806318160ddd1461051b5761037f565b80630634f438116103535780630634f43814610411578063069c9fae1461043b57806306fdde0314610463578063095ea7b31461048d5761037f565b80629cb0e9146103835780630270d749146103bf578063036d3e38146103e95761037f565b3661037f57005b5f80fd5b34801561038e575f80fd5b506103a960048036038101906103a491906148df565b610d79565b6040516103b69190614924565b60405180910390f35b3480156103ca575f80fd5b506103d3610d96565b6040516103e09190614924565b60405180910390f35b3480156103f4575f80fd5b5061040f600480360381019061040a9190614970565b610da9565b005b34801561041c575f80fd5b50610425610dbb565b6040516104329190614924565b60405180910390f35b348015610446575f80fd5b50610461600480360381019061045c919061499b565b610dce565b005b34801561046e575f80fd5b50610477610fd4565b6040516104849190614a63565b60405180910390f35b348015610498575f80fd5b506104b360048036038101906104ae919061499b565b611064565b6040516104c09190614924565b60405180910390f35b3480156104d4575f80fd5b506104ef60048036038101906104ea9190614aad565b611081565b005b3480156104fc575f80fd5b506105056110a6565b6040516105129190614ae7565b60405180910390f35b348015610526575f80fd5b5061052f6110af565b60405161053c9190614ae7565b60405180910390f35b348015610550575f80fd5b5061056b60048036038101906105669190614b00565b6110b8565b6040516105789190614924565b60405180910390f35b34801561058c575f80fd5b5061059561118c565b6040516105a3929190614b50565b60405180910390f35b3480156105b7575f80fd5b506105c061119d565b6040516105cd9190614bd2565b60405180910390f35b3480156105e1575f80fd5b506105fc60048036038101906105f79190614970565b6111c2565b6040516106099190614ae7565b60405180910390f35b34801561061d575f80fd5b5061062661122e565b6040516106339190614c06565b60405180910390f35b348015610647575f80fd5b50610662600480360381019061065d91906148df565b611243565b005b34801561066f575f80fd5b5061068a6004803603810190610685919061499b565b6114e7565b6040516106979190614924565b60405180910390f35b3480156106ab575f80fd5b506106c660048036038101906106c19190614970565b611595565b005b3480156106d3575f80fd5b506106ee60048036038101906106e991906148df565b611707565b005b3480156106fb575f80fd5b5061071660048036038101906107119190614c1f565b611767565b6040516107239190614ae7565b60405180910390f35b348015610737575f80fd5b506107406117e8565b60405161074e929190614b50565b60405180910390f35b348015610762575f80fd5b5061076b6117f9565b6040516107789190614924565b60405180910390f35b34801561078c575f80fd5b5061079561180c565b6040516107a29190614c6c565b60405180910390f35b3480156107b6575f80fd5b506107d160048036038101906107cc91906148df565b611831565b005b3480156107de575f80fd5b506107f960048036038101906107f491906148df565b611a48565b6040516108069190614924565b60405180910390f35b34801561081a575f80fd5b5061083560048036038101906108309190614aad565b611a9a565b005b348015610842575f80fd5b5061084b611abf565b6040516108589190614924565b60405180910390f35b34801561086c575f80fd5b5061088760048036038101906108829190614c85565b611ad2565b005b348015610894575f80fd5b506108af60048036038101906108aa91906148df565b611b32565b005b3480156108bc575f80fd5b506108d760048036038101906108d29190614970565b611b7d565b005b3480156108e4575f80fd5b506108ff60048036038101906108fa9190614cc3565b611b8f565b005b34801561090c575f80fd5b50610927600480360381019061092291906148df565b611bae565b6040516109349190614ae7565b60405180910390f35b348015610948575f80fd5b50610951611c91565b005b34801561095e575f80fd5b50610967611ca4565b6040516109749190614ae7565b60405180910390f35b348015610988575f80fd5b506109a3600480360381019061099e9190614c85565b611caa565b005b3480156109b0575f80fd5b506109b9611d0a565b6040516109c69190614c6c565b60405180910390f35b3480156109da575f80fd5b506109f560048036038101906109f091906148df565b611d2f565b604051610a029190614924565b60405180910390f35b348015610a16575f80fd5b50610a1f611d81565b604051610a2c9190614c6c565b60405180910390f35b348015610a40575f80fd5b50610a49611da8565b604051610a569190614a63565b60405180910390f35b348015610a6a575f80fd5b50610a856004803603810190610a8091906148df565b611e38565b604051610a929190614924565b60405180910390f35b348015610aa6575f80fd5b50610ac16004803603810190610abc919061499b565b611e55565b604051610ace9190614924565b60405180910390f35b348015610ae2575f80fd5b50610afd6004803603810190610af89190614aad565b611f1d565b005b348015610b0a575f80fd5b50610b256004803603810190610b20919061499b565b611f42565b604051610b329190614924565b60405180910390f35b348015610b46575f80fd5b50610b4f611f5f565b604051610b5c9190614ae7565b60405180910390f35b348015610b70575f80fd5b50610b79611f65565b005b348015610b86575f80fd5b50610b8f612096565b604051610b9c9190614ae7565b60405180910390f35b348015610bb0575f80fd5b50610bcb6004803603810190610bc69190614aad565b61209c565b005b348015610bd8575f80fd5b50610bf36004803603810190610bee9190614d01565b6120f8565b604051610c009190614ae7565b60405180910390f35b348015610c14575f80fd5b50610c1d61217a565b604051610c2a9190614924565b60405180910390f35b348015610c3e575f80fd5b50610c4761218d565b604051610c549190614ae7565b60405180910390f35b348015610c68575f80fd5b50610c836004803603810190610c7e9190614970565b612193565b005b348015610c90575f80fd5b50610cab6004803603810190610ca691906148df565b6121a5565b005b348015610cb8575f80fd5b50610cd36004803603810190610cce91906148df565b612204565b005b348015610ce0575f80fd5b50610cfb6004803603810190610cf691906148df565b612288565b604051610d089190614924565b60405180910390f35b348015610d1c575f80fd5b50610d256122a5565b604051610d329190614ae7565b60405180910390f35b348015610d46575f80fd5b50610d616004803603810190610d5c9190614cc3565b6122ab565b005b348015610d6e575f80fd5b50610d776122ca565b005b6005602052805f5260405f205f915054906101000a900460ff1681565b601e60199054906101000a900460ff1681565b610db1612346565b8060118190555050565b601e60169054906101000a900460ff1681565b60185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5490614d89565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ea057610e9b3033836123cd565b610fd0565b5f8273ffffffffffffffffffffffffffffffffffffffff163383604051602401610ecb929190614da7565b6040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610f559190614e12565b5f604051808303815f865af19150503d805f8114610f8e576040519150601f19603f3d011682016040523d82523d5f602084013e610f93565b606091505b5050905080610fce576040517ff27f64e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b5050565b6060600c8054610fe390614e55565b80601f016020809104026020016040519081016040528092919081815260200182805461100f90614e55565b801561105a5780601f106110315761010080835404028352916020019161105a565b820191905f5260205f20905b81548152906001019060200180831161103d57829003601f168201915b5050505050905090565b5f61107761107061273e565b8484612745565b6001905092915050565b611089612346565b80601e60166101000a81548160ff02191690831515021790555050565b5f600b54905090565b5f600f54905090565b5f6110c484848461290c565b611181846110d061273e565b61117c8560405180606001604052806028815260200161573a6028913960035f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61113361273e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612e209092919063ffffffff16565b612745565b600190509392505050565b601b805f0154908060010154905082565b601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f601054821115611208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ff90614ecf565b60405180910390fd5b5f611211612e82565b90506112268184612eab90919063ffffffff16565b915050919050565b5f600e5f9054906101000a900460ff16905090565b61124b612346565b60085f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166112d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cb90614f37565b60405180910390fd5b5f5b6009805490508110156114e3578173ffffffffffffffffffffffffffffffffffffffff166009828154811061130e5761130d614f55565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036114d657600960016009805490506113659190614faf565b8154811061137657611375614f55565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600982815481106113b2576113b1614f55565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600980548061149f5761149e614fe2565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556114e3565b80806001019150506112d6565b5050565b5f61158b6114f361273e565b846115868560035f61150361273e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ef490919063ffffffff16565b612745565b6001905092915050565b5f61159e61273e565b905060085f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561162a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116219061507f565b60405180910390fd5b5f61163483612f51565b5050505050905061168b8160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612fa690919063ffffffff16565b60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506116e181601054612fa690919063ffffffff16565b6010819055506116fc83600b54612ef490919063ffffffff16565b600b81905550505050565b61170f612346565b600160075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f600f548311156117ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a4906150e7565b60405180910390fd5b816117cc575f6117bc84612f51565b50505050509050809150506117e2565b5f6117d684612f51565b50505050915050809150505b92915050565b6019805f0154908060010154905082565b601e60159054906101000a900460ff1681565b601e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611839612346565b60085f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156118c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ba90615175565b60405180910390fd5b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205411156119905761194e60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546111c2565b60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b600160085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600981908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b611aa2612346565b80601e60186101000a81548160ff02191690831515021790555050565b601e60189054906101000a900460ff1681565b611ada612346565b8060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611b3a612346565b8060185f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b85612346565b8060128190555050565b611b97612346565b81601b5f018190555080601b600101819055505050565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611c435760025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050611c8c565b611c8960015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546111c2565b90505b919050565b611c99612346565b611ca25f612fef565b565b60125481565b611cb2612346565b8060045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600d8054611db790614e55565b80601f0160208091040260200160405190810160405280929190818152602001828054611de390614e55565b8015611e2e5780601f10611e0557610100808354040283529160200191611e2e565b820191905f5260205f20905b815481529060010190602001808311611e1157829003601f168201915b5050505050905090565b6004602052805f5260405f205f915054906101000a900460ff1681565b5f611f13611e6161273e565b84611f0e856040518060600160405280602581526020016157626025913960035f611e8a61273e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612e209092919063ffffffff16565b612745565b6001905092915050565b611f25612346565b80601e60176101000a81548160ff02191690831515021790555050565b5f611f55611f4e61273e565b848461290c565b6001905092915050565b600f5481565b60185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611feb90614d89565b60405180910390fd5b5f3373ffffffffffffffffffffffffffffffffffffffff1647604051612019906151b6565b5f6040518083038185875af1925050503d805f8114612053576040519150601f19603f3d011682016040523d82523d5f602084013e612058565b606091505b5050905080612093576040517ff27f64e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b601f5481565b6120a4612346565b80601e60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516120ed9190614924565b60405180910390a150565b5f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b601e60179054906101000a900460ff1681565b60115481565b61219b612346565b8060138190555050565b6121ad612346565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b61220c612346565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361227c575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016122739190614c6c565b60405180910390fd5b61228581612fef565b50565b6006602052805f5260405f205f915054906101000a900460ff1681565b60135481565b6122b3612346565b8160195f0181905550806019600101819055505050565b6122d2612346565b601e60199054906101000a900460ff1615612322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231990615214565b60405180910390fd5b6001601e60196101000a81548160ff02191690831515021790555042601f81905550565b61234e61273e565b73ffffffffffffffffffffffffffffffffffffffff1661236c611d81565b73ffffffffffffffffffffffffffffffffffffffff16146123cb5761238f61273e565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016123c29190614c6c565b60405180910390fd5b565b5f6123d6612e82565b90505f6123ec82846130b090919063ffffffff16565b905061243e8160015f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612fa690919063ffffffff16565b60015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506124cf8160015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ef490919063ffffffff16565b60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156125f1576125af8360025f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612fa690919063ffffffff16565b60025f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156126d2576126908360025f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ef490919063ffffffff16565b60025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161272f9190614ae7565b60405180910390a35050505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127b5575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016127ac9190614c6c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612825575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161281c9190614c6c565b60405180910390fd5b8060035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128ff9190614ae7565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361297c575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016129739190614c6c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129ec575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016129e39190614c6c565b60405180910390fd5b5f8103612a25576040517f67c8957700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601e60199054906101000a900460ff16612b145760075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612ad4575060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0a9061527c565b60405180910390fd5b5b60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612bb2575060045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612bca5750601e60189054906101000a900460ff165b15612c1557601254811115612c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0b906152e4565b60405180910390fd5b5b5f612c1f30611bae565b90505f6011548210159050601e60149054906101000a900460ff16158015612c445750805b8015612c96575060065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015612cae5750601e60159054906101000a900460ff165b8015612d01575060075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612d54575060075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612d6357612d6282613127565b5b5f6001905060075f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612e03575060075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612e0c575f90505b612e18868686846131ae565b505050505050565b5f838311158290612e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5e9190614a63565b60405180910390fd5b505f8385612e759190614faf565b9050809150509392505050565b5f805f612e8d613558565b91509150612ea48183612eab90919063ffffffff16565b9250505090565b5f612eec83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506137ed565b905092915050565b5f808284612f029190615302565b905083811015612f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3e9061537f565b60405180910390fd5b8091505092915050565b5f805f805f805f805f612f638a61384e565b9250925092505f805f612f7f8d8686612f7a612e82565b6138a4565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b5f612fe783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e20565b905092915050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f8083036130c0575f9050613121565b5f82846130cd919061539d565b90508284826130dc919061540b565b1461311c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613113906154ab565b60405180910390fd5b809150505b92915050565b6001601e60146101000a81548160ff0219169083151502179055505f81031561319157601e60169054906101000a900460ff16156131655760115490505b6131908160185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613928565b5b5f601e60146101000a81548160ff02191690831515021790555050565b6131b6613b98565b801561326d5760065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561321457613213613bd1565b5b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561326c5761326b613bea565b5b5b60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561330a575060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561331f5761331a848484613c03565b613544565b60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156133bc575060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156133d1576133cc848484613e5e565b613543565b60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561346f575060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156134845761347f8484846140b9565b613542565b60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015613520575060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561353557613530848484614283565b613541565b6135408484846140b9565b5b5b5b5b806135525761355161456f565b5b50505050565b5f805f60105490505f600f5490505f5b6009805490508110156137b0578260015f6009848154811061358d5761358c614f55565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054118061367257508160025f6009848154811061360e5761360d614f55565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054115b1561368957601054600f54945094505050506137e9565b61371460015f600984815481106136a3576136a2614f55565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205484612fa690919063ffffffff16565b92506137a160025f600984815481106137305761372f614f55565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483612fa690919063ffffffff16565b91508080600101915050613568565b506137c8600f54601054612eab90919063ffffffff16565b8210156137e057601054600f549350935050506137e9565b81819350935050505b9091565b5f8083118290613833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161382a9190614a63565b60405180910390fd5b505f8385613841919061540b565b9050809150509392505050565b5f805f8061385b85614583565b90505f613867866145b3565b90505f61388f82613881858a612fa690919063ffffffff16565b612fa690919063ffffffff16565b90508083839550955095505050509193909250565b5f805f806138bb85896130b090919063ffffffff16565b90505f6138d186896130b090919063ffffffff16565b90505f6138e787896130b090919063ffffffff16565b90505f61390f826139018587612fa690919063ffffffff16565b612fa690919063ffffffff16565b9050838184965096509650505050509450945094915050565b5f600267ffffffffffffffff811115613944576139436154c9565b5b6040519080825280602002602001820160405280156139725781602001602082028036833780820191505090505b50905030815f8151811061398957613988614f55565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a2d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a51919061550a565b81600181518110613a6557613a64614f55565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613acb30601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685612745565b601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8486426040518663ffffffff1660e01b8152600401613b2d959493929190615625565b5f604051808303815f87803b158015613b44575f80fd5b505af1158015613b56573d5f803e3d5ffd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78382604051613b8b92919061567d565b60405180910390a1505050565b5f601454148015613baa57505f601654145b613bcf576014546015819055506016546017819055505f6014819055505f6016819055505b565b60195f0154601481905550601960010154601681905550565b601b5f0154601481905550601b60010154601681905550565b5f805f805f80613c1287612f51565b955095509550955095509550613c2888846145e3565b613c788760025f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612fa690919063ffffffff16565b60025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613d098660015f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612fa690919063ffffffff16565b60015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613d9a8560015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ef490919063ffffffff16565b60015f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613de4816146af565b613dee8483614847565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613e4b9190614ae7565b60405180910390a3505050505050505050565b5f805f805f80613e6d87612f51565b955095509550955095509550613e8388846145e3565b613ed38660015f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612fa690919063ffffffff16565b60015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613f648360025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ef490919063ffffffff16565b60025f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613ff58560015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ef490919063ffffffff16565b60015f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061403f816146af565b6140498483614847565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516140a69190614ae7565b60405180910390a3505050505050505050565b5f805f805f806140c887612f51565b9550955095509550955095506140de88846145e3565b61412e8660015f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612fa690919063ffffffff16565b60015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506141bf8560015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ef490919063ffffffff16565b60015f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550614209816146af565b6142138483614847565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516142709190614ae7565b60405180910390a3505050505050505050565b5f805f805f8061429287612f51565b9550955095509550955095506142a888846145e3565b6142f88760025f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612fa690919063ffffffff16565b60025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506143898660015f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612fa690919063ffffffff16565b60015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061441a8360025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ef490919063ffffffff16565b60025f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506144ab8560015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ef490919063ffffffff16565b60015f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506144f5816146af565b6144ff8483614847565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161455c9190614ae7565b60405180910390a3505050505050505050565b601554601481905550601754601681905550565b5f6145ac606461459e601454856130b090919063ffffffff16565b612eab90919063ffffffff16565b9050919050565b5f6145dc60646145ce601654856130b090919063ffffffff16565b612eab90919063ffffffff16565b9050919050565b60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156146465750601e60179054906101000a900460ff165b156146ab576013546146698261465b85611bae565b612ef490919063ffffffff16565b11156146aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016146a19061571b565b60405180910390fd5b5b5050565b5f6146b8612e82565b90505f6146ce82846130b090919063ffffffff16565b90506147208160015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ef490919063ffffffff16565b60015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615614842576148008360025f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ef490919063ffffffff16565b60025f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b505050565b61485c82601054612fa690919063ffffffff16565b60108190555061487781600b54612ef490919063ffffffff16565b600b819055505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6148ae82614885565b9050919050565b6148be816148a4565b81146148c8575f80fd5b50565b5f813590506148d9816148b5565b92915050565b5f602082840312156148f4576148f3614881565b5b5f614901848285016148cb565b91505092915050565b5f8115159050919050565b61491e8161490a565b82525050565b5f6020820190506149375f830184614915565b92915050565b5f819050919050565b61494f8161493d565b8114614959575f80fd5b50565b5f8135905061496a81614946565b92915050565b5f6020828403121561498557614984614881565b5b5f6149928482850161495c565b91505092915050565b5f80604083850312156149b1576149b0614881565b5b5f6149be858286016148cb565b92505060206149cf8582860161495c565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614a105780820151818401526020810190506149f5565b5f8484015250505050565b5f601f19601f8301169050919050565b5f614a35826149d9565b614a3f81856149e3565b9350614a4f8185602086016149f3565b614a5881614a1b565b840191505092915050565b5f6020820190508181035f830152614a7b8184614a2b565b905092915050565b614a8c8161490a565b8114614a96575f80fd5b50565b5f81359050614aa781614a83565b92915050565b5f60208284031215614ac257614ac1614881565b5b5f614acf84828501614a99565b91505092915050565b614ae18161493d565b82525050565b5f602082019050614afa5f830184614ad8565b92915050565b5f805f60608486031215614b1757614b16614881565b5b5f614b24868287016148cb565b9350506020614b35868287016148cb565b9250506040614b468682870161495c565b9150509250925092565b5f604082019050614b635f830185614ad8565b614b706020830184614ad8565b9392505050565b5f819050919050565b5f614b9a614b95614b9084614885565b614b77565b614885565b9050919050565b5f614bab82614b80565b9050919050565b5f614bbc82614ba1565b9050919050565b614bcc81614bb2565b82525050565b5f602082019050614be55f830184614bc3565b92915050565b5f60ff82169050919050565b614c0081614beb565b82525050565b5f602082019050614c195f830184614bf7565b92915050565b5f8060408385031215614c3557614c34614881565b5b5f614c428582860161495c565b9250506020614c5385828601614a99565b9150509250929050565b614c66816148a4565b82525050565b5f602082019050614c7f5f830184614c5d565b92915050565b5f8060408385031215614c9b57614c9a614881565b5b5f614ca8858286016148cb565b9250506020614cb985828601614a99565b9150509250929050565b5f8060408385031215614cd957614cd8614881565b5b5f614ce68582860161495c565b9250506020614cf78582860161495c565b9150509250929050565b5f8060408385031215614d1757614d16614881565b5b5f614d24858286016148cb565b9250506020614d35858286016148cb565b9150509250929050565b7f556e617574686f72697a656421000000000000000000000000000000000000005f82015250565b5f614d73600d836149e3565b9150614d7e82614d3f565b602082019050919050565b5f6020820190508181035f830152614da081614d67565b9050919050565b5f604082019050614dba5f830185614c5d565b614dc76020830184614ad8565b9392505050565b5f81519050919050565b5f81905092915050565b5f614dec82614dce565b614df68185614dd8565b9350614e068185602086016149f3565b80840191505092915050565b5f614e1d8284614de2565b915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680614e6c57607f821691505b602082108103614e7f57614e7e614e28565b5b50919050565b7f416d74206d757374206265206c657373207468616e20746f74207265666c00005f82015250565b5f614eb9601e836149e3565b9150614ec482614e85565b602082019050919050565b5f6020820190508181035f830152614ee681614ead565b9050919050565b7f416c7265616479206578636c75646564000000000000000000000000000000005f82015250565b5f614f216010836149e3565b9150614f2c82614eed565b602082019050919050565b5f6020820190508181035f830152614f4e81614f15565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614fb98261493d565b9150614fc48361493d565b9250828203905081811115614fdc57614fdb614f82565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c20745f8201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b5f615069602c836149e3565b91506150748261500f565b604082019050919050565b5f6020820190508181035f8301526150968161505d565b9050919050565b7f416d74206d757374206265206c657373207468616e20737570706c79000000005f82015250565b5f6150d1601c836149e3565b91506150dc8261509d565b602082019050919050565b5f6020820190508181035f8301526150fe816150c5565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465642066726f6d5f8201527f2072657761726400000000000000000000000000000000000000000000000000602082015250565b5f61515f6027836149e3565b915061516a82615105565b604082019050919050565b5f6020820190508181035f83015261518c81615153565b9050919050565b50565b5f6151a15f83614dd8565b91506151ac82615193565b5f82019050919050565b5f6151c082615196565b9150819050919050565b7f547261646520416c7265616479205374617274656400000000000000000000005f82015250565b5f6151fe6015836149e3565b9150615209826151ca565b602082019050919050565b5f6020820190508181035f83015261522b816151f2565b9050919050565b7f54726164696e67205061757365640000000000000000000000000000000000005f82015250565b5f615266600e836149e3565b915061527182615232565b602082019050919050565b5f6020820190508181035f8301526152938161525a565b9050919050565b7f45524332303a206d61782074786e206c696d69742065786365656473000000005f82015250565b5f6152ce601c836149e3565b91506152d98261529a565b602082019050919050565b5f6020820190508181035f8301526152fb816152c2565b9050919050565b5f61530c8261493d565b91506153178361493d565b925082820190508082111561532f5761532e614f82565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f615369601b836149e3565b915061537482615335565b602082019050919050565b5f6020820190508181035f8301526153968161535d565b9050919050565b5f6153a78261493d565b91506153b28361493d565b92508282026153c08161493d565b915082820484148315176153d7576153d6614f82565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6154158261493d565b91506154208361493d565b9250826154305761542f6153de565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6154956021836149e3565b91506154a08261543b565b604082019050919050565b5f6020820190508181035f8301526154c281615489565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050615504816148b5565b92915050565b5f6020828403121561551f5761551e614881565b5b5f61552c848285016154f6565b91505092915050565b5f819050919050565b5f61555861555361554e84615535565b614b77565b61493d565b9050919050565b6155688161553e565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6155a0816148a4565b82525050565b5f6155b18383615597565b60208301905092915050565b5f602082019050919050565b5f6155d38261556e565b6155dd8185615578565b93506155e883615588565b805f5b838110156156185781516155ff88826155a6565b975061560a836155bd565b9250506001810190506155eb565b5085935050505092915050565b5f60a0820190506156385f830188614ad8565b615645602083018761555f565b818103604083015261565781866155c9565b90506156666060830185614c5d565b6156736080830184614ad8565b9695505050505050565b5f6040820190506156905f830185614ad8565b81810360208301526156a281846155c9565b90509392505050565b7f45524332303a20616d6f756e7420657863656564206d617820686f6c64696e675f8201527f206c696d69740000000000000000000000000000000000000000000000000000602082015250565b5f6157056026836149e3565b9150615710826156ab565b604082019050919050565b5f6020820190508181035f830152615732816156f9565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220336dfb717ec2812c05d3e912f52df4531960d51ae88643c6470d97404dbc57a764736f6c63430008170033

Deployed Bytecode

0x608060405260043610610378575f3560e01c80635d098b38116101d0578063a9059cbb11610101578063e172786b1161009f578063f387f3a01161006e578063f387f3a014610cd5578063f8b45b0514610d11578063fb0ecfa414610d3b578063fb201b1d14610d635761037f565b8063e172786b14610c33578063e43888a314610c5d578063ea2f0b3714610c85578063f2fde38b14610cad5761037f565b8063bf56b371116100db578063bf56b37114610b7b578063c49b9a8014610ba5578063dd62ed3e14610bcd578063e11c3e8314610c095761037f565b8063a9059cbb14610aff578063af465a2714610b3b578063b79550be14610b655761037f565b806375f0a8741161016e57806395d89b411161014857806395d89b4114610a3557806399b102b514610a5f578063a457c2d714610a9b578063a614ff7514610ad75761037f565b806375f0a874146109a557806388f82020146109cf5780638da5cb5b14610a0b5761037f565b806370a08231116101aa57806370a0823114610901578063715018a61461093d5780637437681e146109535780637571336a1461097d5761037f565b80635d098b381461088957806364f5a5bb146108b15780636ac9a870146108d95761037f565b8063313ce567116102aa5780634a74bb02116102485780635342acb4116102225780635342acb4146107d3578063541958ff1461080f57806355cda0d714610837578063585a71ed146108615761037f565b80634a74bb0214610757578063521432901461078157806352390c02146107ab5761037f565b80633bd5d173116102845780633bd5d173146106a0578063437823ec146106c85780634549b039146106f0578063470624021461072c5761037f565b8063313ce567146106125780633685d4191461063c57806339509351146106645761037f565b806310808a8f1161031757806323b872dd116102f157806323b872dd146105455780632b14ca56146105815780632d6abf87146105ac5780632d838119146105d65761037f565b806310808a8f146104c957806313114a9d146104f157806318160ddd1461051b5761037f565b80630634f438116103535780630634f43814610411578063069c9fae1461043b57806306fdde0314610463578063095ea7b31461048d5761037f565b80629cb0e9146103835780630270d749146103bf578063036d3e38146103e95761037f565b3661037f57005b5f80fd5b34801561038e575f80fd5b506103a960048036038101906103a491906148df565b610d79565b6040516103b69190614924565b60405180910390f35b3480156103ca575f80fd5b506103d3610d96565b6040516103e09190614924565b60405180910390f35b3480156103f4575f80fd5b5061040f600480360381019061040a9190614970565b610da9565b005b34801561041c575f80fd5b50610425610dbb565b6040516104329190614924565b60405180910390f35b348015610446575f80fd5b50610461600480360381019061045c919061499b565b610dce565b005b34801561046e575f80fd5b50610477610fd4565b6040516104849190614a63565b60405180910390f35b348015610498575f80fd5b506104b360048036038101906104ae919061499b565b611064565b6040516104c09190614924565b60405180910390f35b3480156104d4575f80fd5b506104ef60048036038101906104ea9190614aad565b611081565b005b3480156104fc575f80fd5b506105056110a6565b6040516105129190614ae7565b60405180910390f35b348015610526575f80fd5b5061052f6110af565b60405161053c9190614ae7565b60405180910390f35b348015610550575f80fd5b5061056b60048036038101906105669190614b00565b6110b8565b6040516105789190614924565b60405180910390f35b34801561058c575f80fd5b5061059561118c565b6040516105a3929190614b50565b60405180910390f35b3480156105b7575f80fd5b506105c061119d565b6040516105cd9190614bd2565b60405180910390f35b3480156105e1575f80fd5b506105fc60048036038101906105f79190614970565b6111c2565b6040516106099190614ae7565b60405180910390f35b34801561061d575f80fd5b5061062661122e565b6040516106339190614c06565b60405180910390f35b348015610647575f80fd5b50610662600480360381019061065d91906148df565b611243565b005b34801561066f575f80fd5b5061068a6004803603810190610685919061499b565b6114e7565b6040516106979190614924565b60405180910390f35b3480156106ab575f80fd5b506106c660048036038101906106c19190614970565b611595565b005b3480156106d3575f80fd5b506106ee60048036038101906106e991906148df565b611707565b005b3480156106fb575f80fd5b5061071660048036038101906107119190614c1f565b611767565b6040516107239190614ae7565b60405180910390f35b348015610737575f80fd5b506107406117e8565b60405161074e929190614b50565b60405180910390f35b348015610762575f80fd5b5061076b6117f9565b6040516107789190614924565b60405180910390f35b34801561078c575f80fd5b5061079561180c565b6040516107a29190614c6c565b60405180910390f35b3480156107b6575f80fd5b506107d160048036038101906107cc91906148df565b611831565b005b3480156107de575f80fd5b506107f960048036038101906107f491906148df565b611a48565b6040516108069190614924565b60405180910390f35b34801561081a575f80fd5b5061083560048036038101906108309190614aad565b611a9a565b005b348015610842575f80fd5b5061084b611abf565b6040516108589190614924565b60405180910390f35b34801561086c575f80fd5b5061088760048036038101906108829190614c85565b611ad2565b005b348015610894575f80fd5b506108af60048036038101906108aa91906148df565b611b32565b005b3480156108bc575f80fd5b506108d760048036038101906108d29190614970565b611b7d565b005b3480156108e4575f80fd5b506108ff60048036038101906108fa9190614cc3565b611b8f565b005b34801561090c575f80fd5b50610927600480360381019061092291906148df565b611bae565b6040516109349190614ae7565b60405180910390f35b348015610948575f80fd5b50610951611c91565b005b34801561095e575f80fd5b50610967611ca4565b6040516109749190614ae7565b60405180910390f35b348015610988575f80fd5b506109a3600480360381019061099e9190614c85565b611caa565b005b3480156109b0575f80fd5b506109b9611d0a565b6040516109c69190614c6c565b60405180910390f35b3480156109da575f80fd5b506109f560048036038101906109f091906148df565b611d2f565b604051610a029190614924565b60405180910390f35b348015610a16575f80fd5b50610a1f611d81565b604051610a2c9190614c6c565b60405180910390f35b348015610a40575f80fd5b50610a49611da8565b604051610a569190614a63565b60405180910390f35b348015610a6a575f80fd5b50610a856004803603810190610a8091906148df565b611e38565b604051610a929190614924565b60405180910390f35b348015610aa6575f80fd5b50610ac16004803603810190610abc919061499b565b611e55565b604051610ace9190614924565b60405180910390f35b348015610ae2575f80fd5b50610afd6004803603810190610af89190614aad565b611f1d565b005b348015610b0a575f80fd5b50610b256004803603810190610b20919061499b565b611f42565b604051610b329190614924565b60405180910390f35b348015610b46575f80fd5b50610b4f611f5f565b604051610b5c9190614ae7565b60405180910390f35b348015610b70575f80fd5b50610b79611f65565b005b348015610b86575f80fd5b50610b8f612096565b604051610b9c9190614ae7565b60405180910390f35b348015610bb0575f80fd5b50610bcb6004803603810190610bc69190614aad565b61209c565b005b348015610bd8575f80fd5b50610bf36004803603810190610bee9190614d01565b6120f8565b604051610c009190614ae7565b60405180910390f35b348015610c14575f80fd5b50610c1d61217a565b604051610c2a9190614924565b60405180910390f35b348015610c3e575f80fd5b50610c4761218d565b604051610c549190614ae7565b60405180910390f35b348015610c68575f80fd5b50610c836004803603810190610c7e9190614970565b612193565b005b348015610c90575f80fd5b50610cab6004803603810190610ca691906148df565b6121a5565b005b348015610cb8575f80fd5b50610cd36004803603810190610cce91906148df565b612204565b005b348015610ce0575f80fd5b50610cfb6004803603810190610cf691906148df565b612288565b604051610d089190614924565b60405180910390f35b348015610d1c575f80fd5b50610d256122a5565b604051610d329190614ae7565b60405180910390f35b348015610d46575f80fd5b50610d616004803603810190610d5c9190614cc3565b6122ab565b005b348015610d6e575f80fd5b50610d776122ca565b005b6005602052805f5260405f205f915054906101000a900460ff1681565b601e60199054906101000a900460ff1681565b610db1612346565b8060118190555050565b601e60169054906101000a900460ff1681565b60185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5490614d89565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ea057610e9b3033836123cd565b610fd0565b5f8273ffffffffffffffffffffffffffffffffffffffff163383604051602401610ecb929190614da7565b6040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610f559190614e12565b5f604051808303815f865af19150503d805f8114610f8e576040519150601f19603f3d011682016040523d82523d5f602084013e610f93565b606091505b5050905080610fce576040517ff27f64e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b5050565b6060600c8054610fe390614e55565b80601f016020809104026020016040519081016040528092919081815260200182805461100f90614e55565b801561105a5780601f106110315761010080835404028352916020019161105a565b820191905f5260205f20905b81548152906001019060200180831161103d57829003601f168201915b5050505050905090565b5f61107761107061273e565b8484612745565b6001905092915050565b611089612346565b80601e60166101000a81548160ff02191690831515021790555050565b5f600b54905090565b5f600f54905090565b5f6110c484848461290c565b611181846110d061273e565b61117c8560405180606001604052806028815260200161573a6028913960035f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61113361273e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612e209092919063ffffffff16565b612745565b600190509392505050565b601b805f0154908060010154905082565b601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f601054821115611208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ff90614ecf565b60405180910390fd5b5f611211612e82565b90506112268184612eab90919063ffffffff16565b915050919050565b5f600e5f9054906101000a900460ff16905090565b61124b612346565b60085f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166112d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cb90614f37565b60405180910390fd5b5f5b6009805490508110156114e3578173ffffffffffffffffffffffffffffffffffffffff166009828154811061130e5761130d614f55565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036114d657600960016009805490506113659190614faf565b8154811061137657611375614f55565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600982815481106113b2576113b1614f55565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600980548061149f5761149e614fe2565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556114e3565b80806001019150506112d6565b5050565b5f61158b6114f361273e565b846115868560035f61150361273e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ef490919063ffffffff16565b612745565b6001905092915050565b5f61159e61273e565b905060085f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561162a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116219061507f565b60405180910390fd5b5f61163483612f51565b5050505050905061168b8160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612fa690919063ffffffff16565b60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506116e181601054612fa690919063ffffffff16565b6010819055506116fc83600b54612ef490919063ffffffff16565b600b81905550505050565b61170f612346565b600160075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f600f548311156117ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a4906150e7565b60405180910390fd5b816117cc575f6117bc84612f51565b50505050509050809150506117e2565b5f6117d684612f51565b50505050915050809150505b92915050565b6019805f0154908060010154905082565b601e60159054906101000a900460ff1681565b601e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611839612346565b60085f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156118c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ba90615175565b60405180910390fd5b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205411156119905761194e60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546111c2565b60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b600160085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600981908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b611aa2612346565b80601e60186101000a81548160ff02191690831515021790555050565b601e60189054906101000a900460ff1681565b611ada612346565b8060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611b3a612346565b8060185f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b85612346565b8060128190555050565b611b97612346565b81601b5f018190555080601b600101819055505050565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611c435760025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050611c8c565b611c8960015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546111c2565b90505b919050565b611c99612346565b611ca25f612fef565b565b60125481565b611cb2612346565b8060045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600d8054611db790614e55565b80601f0160208091040260200160405190810160405280929190818152602001828054611de390614e55565b8015611e2e5780601f10611e0557610100808354040283529160200191611e2e565b820191905f5260205f20905b815481529060010190602001808311611e1157829003601f168201915b5050505050905090565b6004602052805f5260405f205f915054906101000a900460ff1681565b5f611f13611e6161273e565b84611f0e856040518060600160405280602581526020016157626025913960035f611e8a61273e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612e209092919063ffffffff16565b612745565b6001905092915050565b611f25612346565b80601e60176101000a81548160ff02191690831515021790555050565b5f611f55611f4e61273e565b848461290c565b6001905092915050565b600f5481565b60185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611feb90614d89565b60405180910390fd5b5f3373ffffffffffffffffffffffffffffffffffffffff1647604051612019906151b6565b5f6040518083038185875af1925050503d805f8114612053576040519150601f19603f3d011682016040523d82523d5f602084013e612058565b606091505b5050905080612093576040517ff27f64e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b601f5481565b6120a4612346565b80601e60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516120ed9190614924565b60405180910390a150565b5f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b601e60179054906101000a900460ff1681565b60115481565b61219b612346565b8060138190555050565b6121ad612346565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b61220c612346565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361227c575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016122739190614c6c565b60405180910390fd5b61228581612fef565b50565b6006602052805f5260405f205f915054906101000a900460ff1681565b60135481565b6122b3612346565b8160195f0181905550806019600101819055505050565b6122d2612346565b601e60199054906101000a900460ff1615612322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231990615214565b60405180910390fd5b6001601e60196101000a81548160ff02191690831515021790555042601f81905550565b61234e61273e565b73ffffffffffffffffffffffffffffffffffffffff1661236c611d81565b73ffffffffffffffffffffffffffffffffffffffff16146123cb5761238f61273e565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016123c29190614c6c565b60405180910390fd5b565b5f6123d6612e82565b90505f6123ec82846130b090919063ffffffff16565b905061243e8160015f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612fa690919063ffffffff16565b60015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506124cf8160015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ef490919063ffffffff16565b60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156125f1576125af8360025f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612fa690919063ffffffff16565b60025f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156126d2576126908360025f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ef490919063ffffffff16565b60025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161272f9190614ae7565b60405180910390a35050505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127b5575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016127ac9190614c6c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612825575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161281c9190614c6c565b60405180910390fd5b8060035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128ff9190614ae7565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361297c575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016129739190614c6c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129ec575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016129e39190614c6c565b60405180910390fd5b5f8103612a25576040517f67c8957700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601e60199054906101000a900460ff16612b145760075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612ad4575060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0a9061527c565b60405180910390fd5b5b60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612bb2575060045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612bca5750601e60189054906101000a900460ff165b15612c1557601254811115612c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0b906152e4565b60405180910390fd5b5b5f612c1f30611bae565b90505f6011548210159050601e60149054906101000a900460ff16158015612c445750805b8015612c96575060065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015612cae5750601e60159054906101000a900460ff165b8015612d01575060075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612d54575060075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612d6357612d6282613127565b5b5f6001905060075f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612e03575060075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612e0c575f90505b612e18868686846131ae565b505050505050565b5f838311158290612e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5e9190614a63565b60405180910390fd5b505f8385612e759190614faf565b9050809150509392505050565b5f805f612e8d613558565b91509150612ea48183612eab90919063ffffffff16565b9250505090565b5f612eec83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506137ed565b905092915050565b5f808284612f029190615302565b905083811015612f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3e9061537f565b60405180910390fd5b8091505092915050565b5f805f805f805f805f612f638a61384e565b9250925092505f805f612f7f8d8686612f7a612e82565b6138a4565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b5f612fe783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e20565b905092915050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f8083036130c0575f9050613121565b5f82846130cd919061539d565b90508284826130dc919061540b565b1461311c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613113906154ab565b60405180910390fd5b809150505b92915050565b6001601e60146101000a81548160ff0219169083151502179055505f81031561319157601e60169054906101000a900460ff16156131655760115490505b6131908160185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613928565b5b5f601e60146101000a81548160ff02191690831515021790555050565b6131b6613b98565b801561326d5760065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561321457613213613bd1565b5b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561326c5761326b613bea565b5b5b60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561330a575060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561331f5761331a848484613c03565b613544565b60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156133bc575060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156133d1576133cc848484613e5e565b613543565b60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561346f575060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156134845761347f8484846140b9565b613542565b60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015613520575060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561353557613530848484614283565b613541565b6135408484846140b9565b5b5b5b5b806135525761355161456f565b5b50505050565b5f805f60105490505f600f5490505f5b6009805490508110156137b0578260015f6009848154811061358d5761358c614f55565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054118061367257508160025f6009848154811061360e5761360d614f55565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054115b1561368957601054600f54945094505050506137e9565b61371460015f600984815481106136a3576136a2614f55565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205484612fa690919063ffffffff16565b92506137a160025f600984815481106137305761372f614f55565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483612fa690919063ffffffff16565b91508080600101915050613568565b506137c8600f54601054612eab90919063ffffffff16565b8210156137e057601054600f549350935050506137e9565b81819350935050505b9091565b5f8083118290613833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161382a9190614a63565b60405180910390fd5b505f8385613841919061540b565b9050809150509392505050565b5f805f8061385b85614583565b90505f613867866145b3565b90505f61388f82613881858a612fa690919063ffffffff16565b612fa690919063ffffffff16565b90508083839550955095505050509193909250565b5f805f806138bb85896130b090919063ffffffff16565b90505f6138d186896130b090919063ffffffff16565b90505f6138e787896130b090919063ffffffff16565b90505f61390f826139018587612fa690919063ffffffff16565b612fa690919063ffffffff16565b9050838184965096509650505050509450945094915050565b5f600267ffffffffffffffff811115613944576139436154c9565b5b6040519080825280602002602001820160405280156139725781602001602082028036833780820191505090505b50905030815f8151811061398957613988614f55565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a2d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a51919061550a565b81600181518110613a6557613a64614f55565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613acb30601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685612745565b601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8486426040518663ffffffff1660e01b8152600401613b2d959493929190615625565b5f604051808303815f87803b158015613b44575f80fd5b505af1158015613b56573d5f803e3d5ffd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78382604051613b8b92919061567d565b60405180910390a1505050565b5f601454148015613baa57505f601654145b613bcf576014546015819055506016546017819055505f6014819055505f6016819055505b565b60195f0154601481905550601960010154601681905550565b601b5f0154601481905550601b60010154601681905550565b5f805f805f80613c1287612f51565b955095509550955095509550613c2888846145e3565b613c788760025f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612fa690919063ffffffff16565b60025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613d098660015f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612fa690919063ffffffff16565b60015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613d9a8560015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ef490919063ffffffff16565b60015f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613de4816146af565b613dee8483614847565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613e4b9190614ae7565b60405180910390a3505050505050505050565b5f805f805f80613e6d87612f51565b955095509550955095509550613e8388846145e3565b613ed38660015f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612fa690919063ffffffff16565b60015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613f648360025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ef490919063ffffffff16565b60025f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613ff58560015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ef490919063ffffffff16565b60015f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061403f816146af565b6140498483614847565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516140a69190614ae7565b60405180910390a3505050505050505050565b5f805f805f806140c887612f51565b9550955095509550955095506140de88846145e3565b61412e8660015f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612fa690919063ffffffff16565b60015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506141bf8560015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ef490919063ffffffff16565b60015f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550614209816146af565b6142138483614847565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516142709190614ae7565b60405180910390a3505050505050505050565b5f805f805f8061429287612f51565b9550955095509550955095506142a888846145e3565b6142f88760025f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612fa690919063ffffffff16565b60025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506143898660015f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612fa690919063ffffffff16565b60015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061441a8360025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ef490919063ffffffff16565b60025f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506144ab8560015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ef490919063ffffffff16565b60015f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506144f5816146af565b6144ff8483614847565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161455c9190614ae7565b60405180910390a3505050505050505050565b601554601481905550601754601681905550565b5f6145ac606461459e601454856130b090919063ffffffff16565b612eab90919063ffffffff16565b9050919050565b5f6145dc60646145ce601654856130b090919063ffffffff16565b612eab90919063ffffffff16565b9050919050565b60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156146465750601e60179054906101000a900460ff165b156146ab576013546146698261465b85611bae565b612ef490919063ffffffff16565b11156146aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016146a19061571b565b60405180910390fd5b5b5050565b5f6146b8612e82565b90505f6146ce82846130b090919063ffffffff16565b90506147208160015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ef490919063ffffffff16565b60015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615614842576148008360025f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ef490919063ffffffff16565b60025f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b505050565b61485c82601054612fa690919063ffffffff16565b60108190555061487781600b54612ef490919063ffffffff16565b600b819055505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6148ae82614885565b9050919050565b6148be816148a4565b81146148c8575f80fd5b50565b5f813590506148d9816148b5565b92915050565b5f602082840312156148f4576148f3614881565b5b5f614901848285016148cb565b91505092915050565b5f8115159050919050565b61491e8161490a565b82525050565b5f6020820190506149375f830184614915565b92915050565b5f819050919050565b61494f8161493d565b8114614959575f80fd5b50565b5f8135905061496a81614946565b92915050565b5f6020828403121561498557614984614881565b5b5f6149928482850161495c565b91505092915050565b5f80604083850312156149b1576149b0614881565b5b5f6149be858286016148cb565b92505060206149cf8582860161495c565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614a105780820151818401526020810190506149f5565b5f8484015250505050565b5f601f19601f8301169050919050565b5f614a35826149d9565b614a3f81856149e3565b9350614a4f8185602086016149f3565b614a5881614a1b565b840191505092915050565b5f6020820190508181035f830152614a7b8184614a2b565b905092915050565b614a8c8161490a565b8114614a96575f80fd5b50565b5f81359050614aa781614a83565b92915050565b5f60208284031215614ac257614ac1614881565b5b5f614acf84828501614a99565b91505092915050565b614ae18161493d565b82525050565b5f602082019050614afa5f830184614ad8565b92915050565b5f805f60608486031215614b1757614b16614881565b5b5f614b24868287016148cb565b9350506020614b35868287016148cb565b9250506040614b468682870161495c565b9150509250925092565b5f604082019050614b635f830185614ad8565b614b706020830184614ad8565b9392505050565b5f819050919050565b5f614b9a614b95614b9084614885565b614b77565b614885565b9050919050565b5f614bab82614b80565b9050919050565b5f614bbc82614ba1565b9050919050565b614bcc81614bb2565b82525050565b5f602082019050614be55f830184614bc3565b92915050565b5f60ff82169050919050565b614c0081614beb565b82525050565b5f602082019050614c195f830184614bf7565b92915050565b5f8060408385031215614c3557614c34614881565b5b5f614c428582860161495c565b9250506020614c5385828601614a99565b9150509250929050565b614c66816148a4565b82525050565b5f602082019050614c7f5f830184614c5d565b92915050565b5f8060408385031215614c9b57614c9a614881565b5b5f614ca8858286016148cb565b9250506020614cb985828601614a99565b9150509250929050565b5f8060408385031215614cd957614cd8614881565b5b5f614ce68582860161495c565b9250506020614cf78582860161495c565b9150509250929050565b5f8060408385031215614d1757614d16614881565b5b5f614d24858286016148cb565b9250506020614d35858286016148cb565b9150509250929050565b7f556e617574686f72697a656421000000000000000000000000000000000000005f82015250565b5f614d73600d836149e3565b9150614d7e82614d3f565b602082019050919050565b5f6020820190508181035f830152614da081614d67565b9050919050565b5f604082019050614dba5f830185614c5d565b614dc76020830184614ad8565b9392505050565b5f81519050919050565b5f81905092915050565b5f614dec82614dce565b614df68185614dd8565b9350614e068185602086016149f3565b80840191505092915050565b5f614e1d8284614de2565b915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680614e6c57607f821691505b602082108103614e7f57614e7e614e28565b5b50919050565b7f416d74206d757374206265206c657373207468616e20746f74207265666c00005f82015250565b5f614eb9601e836149e3565b9150614ec482614e85565b602082019050919050565b5f6020820190508181035f830152614ee681614ead565b9050919050565b7f416c7265616479206578636c75646564000000000000000000000000000000005f82015250565b5f614f216010836149e3565b9150614f2c82614eed565b602082019050919050565b5f6020820190508181035f830152614f4e81614f15565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614fb98261493d565b9150614fc48361493d565b9250828203905081811115614fdc57614fdb614f82565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c20745f8201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b5f615069602c836149e3565b91506150748261500f565b604082019050919050565b5f6020820190508181035f8301526150968161505d565b9050919050565b7f416d74206d757374206265206c657373207468616e20737570706c79000000005f82015250565b5f6150d1601c836149e3565b91506150dc8261509d565b602082019050919050565b5f6020820190508181035f8301526150fe816150c5565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465642066726f6d5f8201527f2072657761726400000000000000000000000000000000000000000000000000602082015250565b5f61515f6027836149e3565b915061516a82615105565b604082019050919050565b5f6020820190508181035f83015261518c81615153565b9050919050565b50565b5f6151a15f83614dd8565b91506151ac82615193565b5f82019050919050565b5f6151c082615196565b9150819050919050565b7f547261646520416c7265616479205374617274656400000000000000000000005f82015250565b5f6151fe6015836149e3565b9150615209826151ca565b602082019050919050565b5f6020820190508181035f83015261522b816151f2565b9050919050565b7f54726164696e67205061757365640000000000000000000000000000000000005f82015250565b5f615266600e836149e3565b915061527182615232565b602082019050919050565b5f6020820190508181035f8301526152938161525a565b9050919050565b7f45524332303a206d61782074786e206c696d69742065786365656473000000005f82015250565b5f6152ce601c836149e3565b91506152d98261529a565b602082019050919050565b5f6020820190508181035f8301526152fb816152c2565b9050919050565b5f61530c8261493d565b91506153178361493d565b925082820190508082111561532f5761532e614f82565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f615369601b836149e3565b915061537482615335565b602082019050919050565b5f6020820190508181035f8301526153968161535d565b9050919050565b5f6153a78261493d565b91506153b28361493d565b92508282026153c08161493d565b915082820484148315176153d7576153d6614f82565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6154158261493d565b91506154208361493d565b9250826154305761542f6153de565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6154956021836149e3565b91506154a08261543b565b604082019050919050565b5f6020820190508181035f8301526154c281615489565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050615504816148b5565b92915050565b5f6020828403121561551f5761551e614881565b5b5f61552c848285016154f6565b91505092915050565b5f819050919050565b5f61555861555361554e84615535565b614b77565b61493d565b9050919050565b6155688161553e565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6155a0816148a4565b82525050565b5f6155b18383615597565b60208301905092915050565b5f602082019050919050565b5f6155d38261556e565b6155dd8185615578565b93506155e883615588565b805f5b838110156156185781516155ff88826155a6565b975061560a836155bd565b9250506001810190506155eb565b5085935050505092915050565b5f60a0820190506156385f830188614ad8565b615645602083018761555f565b818103604083015261565781866155c9565b90506156666060830185614c5d565b6156736080830184614ad8565b9695505050505050565b5f6040820190506156905f830185614ad8565b81810360208301526156a281846155c9565b90509392505050565b7f45524332303a20616d6f756e7420657863656564206d617820686f6c64696e675f8201527f206c696d69740000000000000000000000000000000000000000000000000000602082015250565b5f6157056026836149e3565b9150615710826156ab565b604082019050919050565b5f6020820190508181035f830152615732816156f9565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220336dfb717ec2812c05d3e912f52df4531960d51ae88643c6470d97404dbc57a764736f6c63430008170033

Deployed Bytecode Sourcemap

5069:22352:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5564:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7154:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26035:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7041:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26939:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9398:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10310:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25095:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11431:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9675:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10479:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6856:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;6887:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12352:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9584:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24185:468;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10800:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11526:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24665:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11911:433;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6829:20;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;6984:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6923:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23832:345;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16161:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25440:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7117:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25891:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25202:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25649:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26333:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9778:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3873:103;;;;;;;;;;;;;:::i;:::-;;6273:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25745:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6602:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11303:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3604:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9489;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5505:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11026:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25326:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9984:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6083:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26698:233;;;;;;;;;;;;;:::i;:::-;;7185:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24914:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10159:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7078:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6205:59;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25546:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24792:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3984:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5635:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6328;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26161:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26514:176;;;;;;;;;;;;;:::i;:::-;;5564:58;;;;;;;;;;;;;;;;;;;;;;:::o;7154:24::-;;;;;;;;;;;;;:::o;26035:118::-;3563:13;:11;:13::i;:::-;26139:6:::1;26118:18;:27;;;;26035:118:::0;:::o;7041:30::-;;;;;;;;;;;;;:::o;26939:475::-;27046:15;;;;;;;;;;;27032:29;;:10;:29;;;27024:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;27116:4;27092:29;;:12;:29;;;27089:318;;27138:57;27166:4;27172:10;27183:11;27138:19;:57::i;:::-;27089:318;;;27237:7;27249:12;:17;;27320:10;27331:11;27267:76;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27249:95;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27236:108;;;27363:2;27359:36;;27374:21;;;;;;;;;;;;;;27359:36;27221:186;27089:318;26939:475;;:::o;9398:83::-;9435:13;9468:5;9461:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9398:83;:::o;10310:161::-;10385:4;10402:39;10411:12;:10;:12::i;:::-;10425:7;10434:6;10402:8;:39::i;:::-;10459:4;10452:11;;10310:161;;;;:::o;25095:99::-;3563:13;:11;:13::i;:::-;25178:8:::1;25164:11;;:22;;;;;;;;;;;;;;;;;;25095:99:::0;:::o;11431:87::-;11473:7;11500:10;;11493:17;;11431:87;:::o;9675:95::-;9728:7;9755;;9748:14;;9675:95;:::o;10479:313::-;10577:4;10594:36;10604:6;10612:9;10623:6;10594:9;:36::i;:::-;10641:121;10650:6;10658:12;:10;:12::i;:::-;10672:89;10710:6;10672:89;;;;;;;;;;;;;;;;;:11;:19;10684:6;10672:19;;;;;;;;;;;;;;;:33;10692:12;:10;:12::i;:::-;10672:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10641:8;:121::i;:::-;10780:4;10773:11;;10479:313;;;;;:::o;6856:22::-;;;;;;;;;;;;;;:::o;6887:29::-;;;;;;;;;;;;;:::o;12352:241::-;12418:7;12457;;12446;:18;;12438:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;12510:19;12533:10;:8;:10::i;:::-;12510:33;;12561:24;12573:11;12561:7;:11;;:24;;;;:::i;:::-;12554:31;;;12352:241;;;:::o;9584:83::-;9625:5;9650:9;;;;;;;;;;;9643:16;;9584:83;:::o;24185:468::-;3563:13;:11;:13::i;:::-;24267:11:::1;:20;24279:7;24267:20;;;;;;;;;;;;;;;;;;;;;;;;;24259:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;24324:9;24319:327;24343:9;:16;;;;24339:1;:20;24319:327;;;24401:7;24385:23;;:9;24395:1;24385:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;::::0;24381:254:::1;;24444:9;24473:1;24454:9;:16;;;;:20;;;;:::i;:::-;24444:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24429:9;24439:1;24429:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;24513:1;24494:7;:16;24502:7;24494:16;;;;;;;;;;;;;;;:20;;;;24556:5;24533:11;:20;24545:7;24533:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;24580:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;24614:5;;24381:254;24361:3;;;;;;;24319:327;;;;24185:468:::0;:::o;10800:218::-;10888:4;10905:83;10914:12;:10;:12::i;:::-;10928:7;10937:50;10976:10;10937:11;:25;10949:12;:10;:12::i;:::-;10937:25;;;;;;;;;;;;;;;:34;10963:7;10937:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;10905:8;:83::i;:::-;11006:4;10999:11;;10800:218;;;;:::o;11526:377::-;11578:14;11595:12;:10;:12::i;:::-;11578:29;;11627:11;:19;11639:6;11627:19;;;;;;;;;;;;;;;;;;;;;;;;;11626:20;11618:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;11707:15;11731:19;11742:7;11731:10;:19::i;:::-;11706:44;;;;;;;11779:28;11799:7;11779;:15;11787:6;11779:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;11761:7;:15;11769:6;11761:15;;;;;;;;;;;;;;;:46;;;;11828:20;11840:7;11828;;:11;;:20;;;;:::i;:::-;11818:7;:30;;;;11872:23;11887:7;11872:10;;:14;;:23;;;;:::i;:::-;11859:10;:36;;;;11567:336;;11526:377;:::o;24665:115::-;3563:13;:11;:13::i;:::-;24768:4:::1;24738:18;:27;24757:7;24738:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;24665:115:::0;:::o;11911:433::-;12001:7;12040;;12029;:18;;12021:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;12096:17;12091:246;;12131:15;12155:19;12166:7;12155:10;:19::i;:::-;12130:44;;;;;;;12196:7;12189:14;;;;;12091:246;12238:23;12269:19;12280:7;12269:10;:19::i;:::-;12236:52;;;;;;;12310:15;12303:22;;;11911:433;;;;;:::o;6829:20::-;;;;;;;;;;;;;;:::o;6984:40::-;;;;;;;;;;;;;:::o;6923:24::-;;;;;;;;;;;;;:::o;23832:345::-;3563:13;:11;:13::i;:::-;23915:11:::1;:20;23927:7;23915:20;;;;;;;;;;;;;;;;;;;;;;;;;23914:21;23906:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24012:1;23993:7;:16;24001:7;23993:16;;;;;;;;;;;;;;;;:20;23990:108;;;24049:37;24069:7;:16;24077:7;24069:16;;;;;;;;;;;;;;;;24049:19;:37::i;:::-;24030:7;:16;24038:7;24030:16;;;;;;;;;;;;;;;:56;;;;23990:108;24131:4;24108:11;:20;24120:7;24108:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;24146:9;24161:7;24146:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23832:345:::0;:::o;16161:123::-;16225:4;16249:18;:27;16268:7;16249:27;;;;;;;;;;;;;;;;;;;;;;;;;16242:34;;16161:123;;;:::o;25440:98::-;3563:13;:11;:13::i;:::-;25522:8:::1;25510:9;;:20;;;;;;;;;;;;;;;;;;25440:98:::0;:::o;7117:28::-;;;;;;;;;;;;;:::o;25891:136::-;3563:13;:11;:13::i;:::-;26012:7:::1;25976:26;:33;26003:5;25976:33;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;25891:136:::0;;:::o;25202:112::-;3563:13;:11;:13::i;:::-;25297:9:::1;25279:15;;:27;;;;;;;;;;;;;;;;;;25202:112:::0;:::o;25649:88::-;3563:13;:11;:13::i;:::-;25723:6:::1;25715:5;:14;;;;25649:88:::0;:::o;26333:173::-;3563:13;:11;:13::i;:::-;26441:7:::1;26421;:17;;:27;;;;26485:13;26459:7;:23;;:39;;;;26333:173:::0;;:::o;9778:198::-;9844:7;9868:11;:20;9880:7;9868:20;;;;;;;;;;;;;;;;;;;;;;;;;9864:49;;;9897:7;:16;9905:7;9897:16;;;;;;;;;;;;;;;;9890:23;;;;9864:49;9931:37;9951:7;:16;9959:7;9951:16;;;;;;;;;;;;;;;;9931:19;:37::i;:::-;9924:44;;9778:198;;;;:::o;3873:103::-;3563:13;:11;:13::i;:::-;3938:30:::1;3965:1;3938:18;:30::i;:::-;3873:103::o:0;6273:48::-;;;;:::o;25745:138::-;3563:13;:11;:13::i;:::-;25868:7:::1;25838:20;:27;25859:5;25838:27;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;25745:138:::0;;:::o;6602:30::-;;;;;;;;;;;;;:::o;11303:120::-;11371:4;11395:11;:20;11407:7;11395:20;;;;;;;;;;;;;;;;;;;;;;;;;11388:27;;11303:120;;;:::o;3604:87::-;3650:7;3677:6;;;;;;;;;;;3670:13;;3604:87;:::o;9489:::-;9528:13;9561:7;9554:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9489:87;:::o;5505:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;11026:269::-;11119:4;11136:129;11145:12;:10;:12::i;:::-;11159:7;11168:96;11207:15;11168:96;;;;;;;;;;;;;;;;;:11;:25;11180:12;:10;:12::i;:::-;11168:25;;;;;;;;;;;;;;;:34;11194:7;11168:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11136:8;:129::i;:::-;11283:4;11276:11;;11026:269;;;;:::o;25326:106::-;3563:13;:11;:13::i;:::-;25416:8:::1;25400:13;;:24;;;;;;;;;;;;;;;;;;25326:106:::0;:::o;9984:167::-;10062:4;10079:42;10089:12;:10;:12::i;:::-;10103:9;10114:6;10079:9;:42::i;:::-;10139:4;10132:11;;9984:167;;;;:::o;6083:56::-;;;;:::o;26698:233::-;26762:15;;;;;;;;;;;26748:29;;:10;:29;;;26740:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;26806:7;26826:10;26818:24;;26850:21;26818:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26805:71;;;26891:2;26887:36;;26902:21;;;;;;;;;;;;;;26887:36;26729:202;26698:233::o;7185:25::-;;;;:::o;24914:173::-;3563:13;:11;:13::i;:::-;25017:8:::1;24993:21;;:32;;;;;;;;;;;;;;;;;;25041:38;25070:8;25041:38;;;;;;:::i;:::-;;;;;;;;24914:173:::0;:::o;10159:143::-;10240:7;10267:11;:18;10279:5;10267:18;;;;;;;;;;;;;;;:27;10286:7;10267:27;;;;;;;;;;;;;;;;10260:34;;10159:143;;;;:::o;7078:32::-;;;;;;;;;;;;;:::o;6205:59::-;;;;:::o;25546:95::-;3563:13;:11;:13::i;:::-;25627:6:::1;25615:9;:18;;;;25546:95:::0;:::o;24792:114::-;3563:13;:11;:13::i;:::-;24893:5:::1;24863:18;:27;24882:7;24863:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;24792:114:::0;:::o;3984:220::-;3563:13;:11;:13::i;:::-;4089:1:::1;4069:22;;:8;:22;;::::0;4065:93:::1;;4143:1;4115:31;;;;;;;;;;;:::i;:::-;;;;;;;;4065:93;4168:28;4187:8;4168:18;:28::i;:::-;3984:220:::0;:::o;5635:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;6328:::-;;;;:::o;26161:164::-;3563:13;:11;:13::i;:::-;26261:7:::1;26242:6;:16;;:26;;;;26304:13;26279:6;:22;;:38;;;;26161:164:::0;;:::o;26514:176::-;3563:13;:11;:13::i;:::-;26576:12:::1;;;;;;;;;;;26575:13;26567:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;26639:4;26624:12;;:19;;;;;;;;;;;;;;;;;;26667:15;26654:10;:28;;;;26514:176::o:0;3699:166::-;3770:12;:10;:12::i;:::-;3759:23;;:7;:5;:7::i;:::-;:23;;;3755:103;;3833:12;:10;:12::i;:::-;3806:40;;;;;;;;;;;:::i;:::-;;;;;;;;3755:103;3699:166::o;23218:606::-;23317:19;23340:10;:8;:10::i;:::-;23317:33;;23363:15;23381:23;23392:11;23381:6;:10;;:23;;;;:::i;:::-;23363:41;;23438:28;23458:7;23438;:15;23446:6;23438:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;23420:7;:15;23428:6;23420:15;;;;;;;;;;;;;;;:46;;;;23498:31;23521:7;23498;:18;23506:9;23498:18;;;;;;;;;;;;;;;;:22;;:31;;;;:::i;:::-;23477:7;:18;23485:9;23477:18;;;;;;;;;;;;;;;:52;;;;23555:11;:19;23567:6;23555:19;;;;;;;;;;;;;;;;;;;;;;;;;23551:97;;;23609:27;23629:6;23609:7;:15;23617:6;23609:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;23591:7;:15;23599:6;23591:15;;;;;;;;;;;;;;;:45;;;;23551:97;23663:11;:22;23675:9;23663:22;;;;;;;;;;;;;;;;;;;;;;;;;23659:106;;;23723:30;23746:6;23723:7;:18;23731:9;23723:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;23702:7;:18;23710:9;23702:18;;;;;;;;;;;;;;;:51;;;;23659:106;23798:9;23781:35;;23790:6;23781:35;;;23809:6;23781:35;;;;;;:::i;:::-;;;;;;;;23306:518;;23218:606;;;:::o;2841:98::-;2894:7;2921:10;2914:17;;2841:98;:::o;16611:382::-;16717:1;16700:19;;:5;:19;;;16696:91;;16772:1;16743:32;;;;;;;;;;;:::i;:::-;;;;;;;;16696:91;16820:1;16801:21;;:7;:21;;;16797:92;;16874:1;16846:31;;;;;;;;;;;:::i;:::-;;;;;;;;16797:92;16931:6;16901:11;:18;16913:5;16901:18;;;;;;;;;;;;;;;:27;16920:7;16901:27;;;;;;;;;;;;;;;:36;;;;16969:7;16953:32;;16962:5;16953:32;;;16978:6;16953:32;;;;;;:::i;:::-;;;;;;;;16611:382;;;:::o;17001:1538::-;17135:1;17119:18;;:4;:18;;;17115:88;;17188:1;17161:30;;;;;;;;;;;:::i;:::-;;;;;;;;17115:88;17231:1;17217:16;;:2;:16;;;17213:88;;17286:1;17257:32;;;;;;;;;;;:::i;:::-;;;;;;;;17213:88;17324:1;17314:6;:11;17311:69;;17349:19;;;;;;;;;;;;;;17311:69;17396:12;;;;;;;;;;;17392:123;;17433:18;:24;17452:4;17433:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;17461:18;:22;17480:2;17461:22;;;;;;;;;;;;;;;;;;;;;;;;;17433:50;17425:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;17392:123;17532:20;:26;17553:4;17532:26;;;;;;;;;;;;;;;;;;;;;;;;;17531:27;:56;;;;;17563:20;:24;17584:2;17563:24;;;;;;;;;;;;;;;;;;;;;;;;;17562:25;17531:56;:69;;;;;17591:9;;;;;;;;;;;17531:69;17527:159;;;17636:5;;17626:6;:15;;17618:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;17527:159;17698:28;17729:24;17747:4;17729:9;:24::i;:::-;17698:55;;17774:24;17825:18;;17801:20;:42;;17774:69;;17873:16;;;;;;;;;;;17872:17;:53;;;;;17906:19;17872:53;:93;;;;;17942:19;:23;17962:2;17942:23;;;;;;;;;;;;;;;;;;;;;;;;;17872:93;:131;;;;;17982:21;;;;;;;;;;;17872:131;:174;;;;;18022:18;:24;18041:4;18022:24;;;;;;;;;;;;;;;;;;;;;;;;;18021:25;17872:174;:214;;;;;18064:18;:22;18083:2;18064:22;;;;;;;;;;;;;;;;;;;;;;;;;18063:23;17872:214;17854:334;;;18127:35;18141:20;18127:13;:35::i;:::-;17854:334;18261:12;18276:4;18261:19;;18388:18;:24;18407:4;18388:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;18416:18;:22;18435:2;18416:22;;;;;;;;;;;;;;;;;;;;;;;;;18388:50;18385:96;;;18464:5;18454:15;;18385:96;18493:38;18508:4;18513:2;18516:6;18523:7;18493:14;:38::i;:::-;17104:1435;;;17001:1538;;;:::o;1694:192::-;1780:7;1813:1;1808;:6;;1816:12;1800:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1840:9;1856:1;1852;:5;;;;:::i;:::-;1840:17;;1877:1;1870:8;;;1694:192;;;;;:::o;14047:163::-;14088:7;14109:15;14126;14145:19;:17;:19::i;:::-;14108:56;;;;14182:20;14194:7;14182;:11;;:20;;;;:::i;:::-;14175:27;;;;14047:163;:::o;2158:132::-;2216:7;2243:39;2247:1;2250;2243:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2236:46;;2158:132;;;;:::o;1361:181::-;1419:7;1439:9;1455:1;1451;:5;;;;:::i;:::-;1439:17;;1480:1;1475;:6;;1467:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1533:1;1526:8;;;1361:181;;;;:::o;12845:419::-;12904:7;12913;12922;12931;12940;12949;12970:23;12995:12;13009:18;13031:20;13043:7;13031:11;:20::i;:::-;12969:82;;;;;;13063:15;13080:23;13105:12;13121:50;13133:7;13142:4;13148:10;13160;:8;:10::i;:::-;13121:11;:50::i;:::-;13062:109;;;;;;13190:7;13199:15;13216:4;13222:15;13239:4;13245:10;13182:74;;;;;;;;;;;;;;;;;;12845:419;;;;;;;:::o;1550:136::-;1608:7;1635:43;1639:1;1642;1635:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1628:50;;1550:136;;;;:::o;4212:191::-;4286:16;4305:6;;;;;;;;;;;4286:25;;4331:8;4322:6;;:17;;;;;;;;;;;;;;;;;;4386:8;4355:40;;4376:8;4355:40;;;;;;;;;;;;4275:128;4212:191;:::o;1894:256::-;1952:7;1987:1;1982;:6;1978:47;;2012:1;2005:8;;;;1978:47;2037:9;2053:1;2049;:5;;;;:::i;:::-;2037:17;;2082:1;2077;2073;:5;;;;:::i;:::-;:10;2065:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2141:1;2134:8;;;1894:256;;;;;:::o;18547:248::-;7658:4;7639:16;;:23;;;;;;;;;;;;;;;;;;18649:1:::1;18629:16;:21:::0;18626:33;18652:7:::1;18626:33;18672:11;;;;;;;;;;;18669:53;;;18704:18;;18685:37;;18669:53;18735:50;18752:16;18769:15;;;;;;;;;;;18735:16;:50::i;:::-;7673:1;7704:5:::0;7685:16;;:24;;;;;;;;;;;;;;;;;;18547:248;:::o;19567:1075::-;19688:14;:12;:14::i;:::-;19723:7;19719:236;;;19754:19;:27;19774:6;19754:27;;;;;;;;;;;;;;;;;;;;;;;;;19750:84;;;19806:8;:6;:8::i;:::-;19750:84;19856:19;:30;19876:9;19856:30;;;;;;;;;;;;;;;;;;;;;;;;;19852:88;;;19911:9;:7;:9::i;:::-;19852:88;19719:236;19980:11;:19;19992:6;19980:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;20004:11;:22;20016:9;20004:22;;;;;;;;;;;;;;;;;;;;;;;;;20003:23;19980:46;19976:597;;;20043:48;20065:6;20073:9;20084:6;20043:21;:48::i;:::-;19976:597;;;20114:11;:19;20126:6;20114:19;;;;;;;;;;;;;;;;;;;;;;;;;20113:20;:46;;;;;20137:11;:22;20149:9;20137:22;;;;;;;;;;;;;;;;;;;;;;;;;20113:46;20109:464;;;20176:46;20196:6;20204:9;20215:6;20176:19;:46::i;:::-;20109:464;;;20245:11;:19;20257:6;20245:19;;;;;;;;;;;;;;;;;;;;;;;;;20244:20;:47;;;;;20269:11;:22;20281:9;20269:22;;;;;;;;;;;;;;;;;;;;;;;;;20268:23;20244:47;20240:333;;;20308:44;20326:6;20334:9;20345:6;20308:17;:44::i;:::-;20240:333;;;20374:11;:19;20386:6;20374:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;20397:11;:22;20409:9;20397:22;;;;;;;;;;;;;;;;;;;;;;;;;20374:45;20370:203;;;20436:48;20458:6;20466:9;20477:6;20436:21;:48::i;:::-;20370:203;;;20517:44;20535:6;20543:9;20554:6;20517:17;:44::i;:::-;20370:203;20240:333;20109:464;19976:597;20597:7;20593:41;;20619:15;:13;:15::i;:::-;20593:41;19567:1075;;;;:::o;14218:561::-;14268:7;14277;14297:15;14315:7;;14297:25;;14333:15;14351:7;;14333:25;;14380:9;14375:289;14399:9;:16;;;;14395:1;:20;14375:289;;;14465:7;14441;:21;14449:9;14459:1;14449:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14441:21;;;;;;;;;;;;;;;;:31;:66;;;;14500:7;14476;:21;14484:9;14494:1;14484:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14476:21;;;;;;;;;;;;;;;;:31;14441:66;14437:97;;;14517:7;;14526;;14509:25;;;;;;;;;14437:97;14559:34;14571:7;:21;14579:9;14589:1;14579:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14571:21;;;;;;;;;;;;;;;;14559:7;:11;;:34;;;;:::i;:::-;14549:44;;14618:34;14630:7;:21;14638:9;14648:1;14638:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14630:21;;;;;;;;;;;;;;;;14618:7;:11;;:34;;;;:::i;:::-;14608:44;;14417:3;;;;;;;14375:289;;;;14688:20;14700:7;;14688;;:11;;:20;;;;:::i;:::-;14678:7;:30;14674:61;;;14718:7;;14727;;14710:25;;;;;;;;14674:61;14754:7;14763;14746:25;;;;;;14218:561;;;:::o;2298:191::-;2384:7;2416:1;2412;:5;2419:12;2404:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2443:9;2459:1;2455;:5;;;;:::i;:::-;2443:17;;2480:1;2473:8;;;2298:191;;;;;:::o;13272:330::-;13332:7;13341;13350;13370:12;13385:24;13401:7;13385:15;:24::i;:::-;13370:39;;13420:18;13441:30;13463:7;13441:21;:30::i;:::-;13420:51;;13482:23;13508:33;13530:10;13508:17;13520:4;13508:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;13482:59;;13560:15;13577:4;13583:10;13552:42;;;;;;;;;13272:330;;;;;:::o;13610:429::-;13725:7;13734;13743;13763:15;13781:24;13793:11;13781:7;:11;;:24;;;;:::i;:::-;13763:42;;13816:12;13831:21;13840:11;13831:4;:8;;:21;;;;:::i;:::-;13816:36;;13863:18;13884:27;13899:11;13884:10;:14;;:27;;;;:::i;:::-;13863:48;;13922:23;13948:33;13970:10;13948:17;13960:4;13948:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;13922:59;;14000:7;14009:15;14026:4;13992:39;;;;;;;;;;13610:429;;;;;;;;:::o;18805:678::-;18950:21;18988:1;18974:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18950:40;;19019:4;19001;19006:1;19001:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;19045:11;;;;;;;;;;;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19035:4;19040:1;19035:7;;;;;;;;:::i;:::-;;;;;;;:28;;;;;;;;;;;19076:58;19093:4;19108:11;;;;;;;;;;;19122;19076:8;:58::i;:::-;19173:11;;;;;;;;;;;:62;;;19250:11;19276:1;19320:4;19347:9;19388:15;19173:241;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19440:35;19457:11;19470:4;19440:35;;;;;;;:::i;:::-;;;;;;;;18879:604;18805:678;;:::o;15502:251::-;15559:1;15548:7;;:12;:34;;;;;15581:1;15564:13;;:18;15548:34;15584:7;15545:46;15630:7;;15612:15;:25;;;;15672:13;;15648:21;:37;;;;15716:1;15706:7;:11;;;;15744:1;15728:13;:17;;;;15502:251;:::o;15898:120::-;15945:6;:16;;;15935:7;:26;;;;15988:6;:22;;;15972:13;:38;;;;15898:120::o;16030:123::-;16078:7;:17;;;16068:7;:27;;;;16122:7;:23;;;16106:13;:39;;;;16030:123::o;21874:626::-;21977:15;21994:23;22019:12;22033:23;22058:12;22072:18;22094:19;22105:7;22094:10;:19::i;:::-;21976:137;;;;;;;;;;;;22124:49;22146:9;22157:15;22124:21;:49::i;:::-;22202:28;22222:7;22202;:15;22210:6;22202:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;22184:7;:15;22192:6;22184:15;;;;;;;;;;;;;;;:46;;;;22259:28;22279:7;22259;:15;22267:6;22259:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;22241:7;:15;22249:6;22241:15;;;;;;;;;;;;;;;:46;;;;22319:39;22342:15;22319:7;:18;22327:9;22319:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;22298:7;:18;22306:9;22298:18;;;;;;;;;;;;;;;:60;;;;22372:26;22387:10;22372:14;:26::i;:::-;22409:23;22421:4;22427;22409:11;:23::i;:::-;22465:9;22448:44;;22457:6;22448:44;;;22476:15;22448:44;;;;;;:::i;:::-;;;;;;;;21965:535;;;;;;21874:626;;;:::o;21220:646::-;21321:15;21338:23;21363:12;21377:23;21402:12;21416:18;21438:19;21449:7;21438:10;:19::i;:::-;21320:137;;;;;;;;;;;;21468:49;21490:9;21501:15;21468:21;:49::i;:::-;21546:28;21566:7;21546;:15;21554:6;21546:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;21528:7;:15;21536:6;21528:15;;;;;;;;;;;;;;;:46;;;;21606:39;21629:15;21606:7;:18;21614:9;21606:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;21585:7;:18;21593:9;21585:18;;;;;;;;;;;;;;;:60;;;;21677:39;21700:15;21677:7;:18;21685:9;21677:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;21656:7;:18;21664:9;21656:18;;;;;;;;;;;;;;;:60;;;;21738:26;21753:10;21738:14;:26::i;:::-;21775:23;21787:4;21793;21775:11;:23::i;:::-;21831:9;21814:44;;21823:6;21814:44;;;21842:15;21814:44;;;;;;:::i;:::-;;;;;;;;21309:557;;;;;;21220:646;;;:::o;20650:562::-;20749:15;20766:23;20791:12;20805:23;20830:12;20844:18;20866:19;20877:7;20866:10;:19::i;:::-;20748:137;;;;;;;;;;;;20896:49;20918:9;20929:15;20896:21;:49::i;:::-;20974:28;20994:7;20974;:15;20982:6;20974:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;20956:7;:15;20964:6;20956:15;;;;;;;;;;;;;;;:46;;;;21034:39;21057:15;21034:7;:18;21042:9;21034:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;21013:7;:18;21021:9;21013:18;;;;;;;;;;;;;;;:60;;;;21084:26;21099:10;21084:14;:26::i;:::-;21121:23;21133:4;21139;21121:11;:23::i;:::-;21177:9;21160:44;;21169:6;21160:44;;;21188:15;21160:44;;;;;;:::i;:::-;;;;;;;;20737:475;;;;;;20650:562;;;:::o;22508:702::-;22611:15;22628:23;22653:12;22667:23;22692:12;22706:18;22728:19;22739:7;22728:10;:19::i;:::-;22610:137;;;;;;;;;;;;22758:49;22780:9;22791:15;22758:21;:49::i;:::-;22836:28;22856:7;22836;:15;22844:6;22836:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;22818:7;:15;22826:6;22818:15;;;;;;;;;;;;;;;:46;;;;22893:28;22913:7;22893;:15;22901:6;22893:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;22875:7;:15;22883:6;22875:15;;;;;;;;;;;;;;;:46;;;;22953:39;22976:15;22953:7;:18;22961:9;22953:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;22932:7;:18;22940:9;22932:18;;;;;;;;;;;;;;;:60;;;;23024:39;23047:15;23024:7;:18;23032:9;23024:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;23003:7;:18;23011:9;23003:18;;;;;;;;;;;;;;;:60;;;;23082:26;23097:10;23082:14;:26::i;:::-;23119:23;23131:4;23137;23119:11;:23::i;:::-;23175:9;23158:44;;23167:6;23158:44;;;23186:15;23158:44;;;;;;:::i;:::-;;;;;;;;22599:611;;;;;;22508:702;;;:::o;15765:125::-;15819:15;;15809:7;:25;;;;15861:21;;15845:13;:37;;;;15765:125::o;15162:154::-;15226:7;15253:55;15292:5;15253:20;15265:7;;15253;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;15246:62;;15162:154;;;:::o;15324:166::-;15394:7;15421:61;15466:5;15421:26;15433:13;;15421:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;15414:68;;15324:166;;;:::o;16292:311::-;16382:26;:30;16409:2;16382:30;;;;;;;;;;;;;;;;;;;;;;;;;16381:31;:48;;;;;16416:13;;;;;;;;;;;16381:48;16375:221;;;16501:9;;16472:25;16490:6;16472:13;16482:2;16472:9;:13::i;:::-;:17;;:25;;;;:::i;:::-;:38;;16446:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;16375:221;16292:311;;:::o;14791:363::-;14854:19;14877:10;:8;:10::i;:::-;14854:33;;14898:18;14919:27;14934:11;14919:10;:14;;:27;;;;:::i;:::-;14898:48;;14982:38;15009:10;14982:7;:22;14998:4;14982:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;14957:7;:22;14973:4;14957:22;;;;;;;;;;;;;;;:63;;;;15034:11;:26;15054:4;15034:26;;;;;;;;;;;;;;;;;;;;;;;;;15031:107;;;15100:38;15127:10;15100:7;:22;15116:4;15100:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;15075:7;:22;15091:4;15075:22;;;;;;;;;;;;;;;:63;;;;15031:107;14843:311;;14791:363;:::o;12690:147::-;12768:17;12780:4;12768:7;;:11;;:17;;;;:::i;:::-;12758:7;:27;;;;12809:20;12824:4;12809:10;;:14;;:20;;;;:::i;:::-;12796:10;:33;;;;12690:147;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:90::-;1210:7;1253:5;1246:13;1239:21;1228:32;;1176:90;;;:::o;1272:109::-;1353:21;1368:5;1353:21;:::i;:::-;1348:3;1341:34;1272:109;;:::o;1387:210::-;1474:4;1512:2;1501:9;1497:18;1489:26;;1525:65;1587:1;1576:9;1572:17;1563:6;1525:65;:::i;:::-;1387:210;;;;:::o;1603:77::-;1640:7;1669:5;1658:16;;1603:77;;;:::o;1686:122::-;1759:24;1777:5;1759:24;:::i;:::-;1752:5;1749:35;1739:63;;1798:1;1795;1788:12;1739:63;1686:122;:::o;1814:139::-;1860:5;1898:6;1885:20;1876:29;;1914:33;1941:5;1914:33;:::i;:::-;1814:139;;;;:::o;1959:329::-;2018:6;2067:2;2055:9;2046:7;2042:23;2038:32;2035:119;;;2073:79;;:::i;:::-;2035:119;2193:1;2218:53;2263:7;2254:6;2243:9;2239:22;2218:53;:::i;:::-;2208:63;;2164:117;1959:329;;;;:::o;2294:474::-;2362:6;2370;2419:2;2407:9;2398:7;2394:23;2390:32;2387:119;;;2425:79;;:::i;:::-;2387:119;2545:1;2570:53;2615:7;2606:6;2595:9;2591:22;2570:53;:::i;:::-;2560:63;;2516:117;2672:2;2698:53;2743:7;2734:6;2723:9;2719:22;2698:53;:::i;:::-;2688:63;;2643:118;2294:474;;;;;:::o;2774:99::-;2826:6;2860:5;2854:12;2844:22;;2774:99;;;:::o;2879:169::-;2963:11;2997:6;2992:3;2985:19;3037:4;3032:3;3028:14;3013:29;;2879:169;;;;:::o;3054:246::-;3135:1;3145:113;3159:6;3156:1;3153:13;3145:113;;;3244:1;3239:3;3235:11;3229:18;3225:1;3220:3;3216:11;3209:39;3181:2;3178:1;3174:10;3169:15;;3145:113;;;3292:1;3283:6;3278:3;3274:16;3267:27;3116:184;3054:246;;;:::o;3306:102::-;3347:6;3398:2;3394:7;3389:2;3382:5;3378:14;3374:28;3364:38;;3306:102;;;:::o;3414:377::-;3502:3;3530:39;3563:5;3530:39;:::i;:::-;3585:71;3649:6;3644:3;3585:71;:::i;:::-;3578:78;;3665:65;3723:6;3718:3;3711:4;3704:5;3700:16;3665:65;:::i;:::-;3755:29;3777:6;3755:29;:::i;:::-;3750:3;3746:39;3739:46;;3506:285;3414:377;;;;:::o;3797:313::-;3910:4;3948:2;3937:9;3933:18;3925:26;;3997:9;3991:4;3987:20;3983:1;3972:9;3968:17;3961:47;4025:78;4098:4;4089:6;4025:78;:::i;:::-;4017:86;;3797:313;;;;:::o;4116:116::-;4186:21;4201:5;4186:21;:::i;:::-;4179:5;4176:32;4166:60;;4222:1;4219;4212:12;4166:60;4116:116;:::o;4238:133::-;4281:5;4319:6;4306:20;4297:29;;4335:30;4359:5;4335:30;:::i;:::-;4238:133;;;;:::o;4377:323::-;4433:6;4482:2;4470:9;4461:7;4457:23;4453:32;4450:119;;;4488:79;;:::i;:::-;4450:119;4608:1;4633:50;4675:7;4666:6;4655:9;4651:22;4633:50;:::i;:::-;4623:60;;4579:114;4377:323;;;;:::o;4706:118::-;4793:24;4811:5;4793:24;:::i;:::-;4788:3;4781:37;4706:118;;:::o;4830:222::-;4923:4;4961:2;4950:9;4946:18;4938:26;;4974:71;5042:1;5031:9;5027:17;5018:6;4974:71;:::i;:::-;4830:222;;;;:::o;5058:619::-;5135:6;5143;5151;5200:2;5188:9;5179:7;5175:23;5171:32;5168:119;;;5206:79;;:::i;:::-;5168:119;5326:1;5351:53;5396:7;5387:6;5376:9;5372:22;5351:53;:::i;:::-;5341:63;;5297:117;5453:2;5479:53;5524:7;5515:6;5504:9;5500:22;5479:53;:::i;:::-;5469:63;;5424:118;5581:2;5607:53;5652:7;5643:6;5632:9;5628:22;5607:53;:::i;:::-;5597:63;;5552:118;5058:619;;;;;:::o;5683:332::-;5804:4;5842:2;5831:9;5827:18;5819:26;;5855:71;5923:1;5912:9;5908:17;5899:6;5855:71;:::i;:::-;5936:72;6004:2;5993:9;5989:18;5980:6;5936:72;:::i;:::-;5683:332;;;;;:::o;6021:60::-;6049:3;6070:5;6063:12;;6021:60;;;:::o;6087:142::-;6137:9;6170:53;6188:34;6197:24;6215:5;6197:24;:::i;:::-;6188:34;:::i;:::-;6170:53;:::i;:::-;6157:66;;6087:142;;;:::o;6235:126::-;6285:9;6318:37;6349:5;6318:37;:::i;:::-;6305:50;;6235:126;;;:::o;6367:144::-;6435:9;6468:37;6499:5;6468:37;:::i;:::-;6455:50;;6367:144;;;:::o;6517:167::-;6622:55;6671:5;6622:55;:::i;:::-;6617:3;6610:68;6517:167;;:::o;6690:258::-;6801:4;6839:2;6828:9;6824:18;6816:26;;6852:89;6938:1;6927:9;6923:17;6914:6;6852:89;:::i;:::-;6690:258;;;;:::o;6954:86::-;6989:7;7029:4;7022:5;7018:16;7007:27;;6954:86;;;:::o;7046:112::-;7129:22;7145:5;7129:22;:::i;:::-;7124:3;7117:35;7046:112;;:::o;7164:214::-;7253:4;7291:2;7280:9;7276:18;7268:26;;7304:67;7368:1;7357:9;7353:17;7344:6;7304:67;:::i;:::-;7164:214;;;;:::o;7384:468::-;7449:6;7457;7506:2;7494:9;7485:7;7481:23;7477:32;7474:119;;;7512:79;;:::i;:::-;7474:119;7632:1;7657:53;7702:7;7693:6;7682:9;7678:22;7657:53;:::i;:::-;7647:63;;7603:117;7759:2;7785:50;7827:7;7818:6;7807:9;7803:22;7785:50;:::i;:::-;7775:60;;7730:115;7384:468;;;;;:::o;7858:118::-;7945:24;7963:5;7945:24;:::i;:::-;7940:3;7933:37;7858:118;;:::o;7982:222::-;8075:4;8113:2;8102:9;8098:18;8090:26;;8126:71;8194:1;8183:9;8179:17;8170:6;8126:71;:::i;:::-;7982:222;;;;:::o;8210:468::-;8275:6;8283;8332:2;8320:9;8311:7;8307:23;8303:32;8300:119;;;8338:79;;:::i;:::-;8300:119;8458:1;8483:53;8528:7;8519:6;8508:9;8504:22;8483:53;:::i;:::-;8473:63;;8429:117;8585:2;8611:50;8653:7;8644:6;8633:9;8629:22;8611:50;:::i;:::-;8601:60;;8556:115;8210:468;;;;;:::o;8684:474::-;8752:6;8760;8809:2;8797:9;8788:7;8784:23;8780:32;8777:119;;;8815:79;;:::i;:::-;8777:119;8935:1;8960:53;9005:7;8996:6;8985:9;8981:22;8960:53;:::i;:::-;8950:63;;8906:117;9062:2;9088:53;9133:7;9124:6;9113:9;9109:22;9088:53;:::i;:::-;9078:63;;9033:118;8684:474;;;;;:::o;9164:::-;9232:6;9240;9289:2;9277:9;9268:7;9264:23;9260:32;9257:119;;;9295:79;;:::i;:::-;9257:119;9415:1;9440:53;9485:7;9476:6;9465:9;9461:22;9440:53;:::i;:::-;9430:63;;9386:117;9542:2;9568:53;9613:7;9604:6;9593:9;9589:22;9568:53;:::i;:::-;9558:63;;9513:118;9164:474;;;;;:::o;9644:163::-;9784:15;9780:1;9772:6;9768:14;9761:39;9644:163;:::o;9813:366::-;9955:3;9976:67;10040:2;10035:3;9976:67;:::i;:::-;9969:74;;10052:93;10141:3;10052:93;:::i;:::-;10170:2;10165:3;10161:12;10154:19;;9813:366;;;:::o;10185:419::-;10351:4;10389:2;10378:9;10374:18;10366:26;;10438:9;10432:4;10428:20;10424:1;10413:9;10409:17;10402:47;10466:131;10592:4;10466:131;:::i;:::-;10458:139;;10185:419;;;:::o;10610:332::-;10731:4;10769:2;10758:9;10754:18;10746:26;;10782:71;10850:1;10839:9;10835:17;10826:6;10782:71;:::i;:::-;10863:72;10931:2;10920:9;10916:18;10907:6;10863:72;:::i;:::-;10610:332;;;;;:::o;10948:98::-;10999:6;11033:5;11027:12;11017:22;;10948:98;;;:::o;11052:147::-;11153:11;11190:3;11175:18;;11052:147;;;;:::o;11205:386::-;11309:3;11337:38;11369:5;11337:38;:::i;:::-;11391:88;11472:6;11467:3;11391:88;:::i;:::-;11384:95;;11488:65;11546:6;11541:3;11534:4;11527:5;11523:16;11488:65;:::i;:::-;11578:6;11573:3;11569:16;11562:23;;11313:278;11205:386;;;;:::o;11597:271::-;11727:3;11749:93;11838:3;11829:6;11749:93;:::i;:::-;11742:100;;11859:3;11852:10;;11597:271;;;;:::o;11874:180::-;11922:77;11919:1;11912:88;12019:4;12016:1;12009:15;12043:4;12040:1;12033:15;12060:320;12104:6;12141:1;12135:4;12131:12;12121:22;;12188:1;12182:4;12178:12;12209:18;12199:81;;12265:4;12257:6;12253:17;12243:27;;12199:81;12327:2;12319:6;12316:14;12296:18;12293:38;12290:84;;12346:18;;:::i;:::-;12290:84;12111:269;12060:320;;;:::o;12386:180::-;12526:32;12522:1;12514:6;12510:14;12503:56;12386:180;:::o;12572:366::-;12714:3;12735:67;12799:2;12794:3;12735:67;:::i;:::-;12728:74;;12811:93;12900:3;12811:93;:::i;:::-;12929:2;12924:3;12920:12;12913:19;;12572:366;;;:::o;12944:419::-;13110:4;13148:2;13137:9;13133:18;13125:26;;13197:9;13191:4;13187:20;13183:1;13172:9;13168:17;13161:47;13225:131;13351:4;13225:131;:::i;:::-;13217:139;;12944:419;;;:::o;13369:166::-;13509:18;13505:1;13497:6;13493:14;13486:42;13369:166;:::o;13541:366::-;13683:3;13704:67;13768:2;13763:3;13704:67;:::i;:::-;13697:74;;13780:93;13869:3;13780:93;:::i;:::-;13898:2;13893:3;13889:12;13882:19;;13541:366;;;:::o;13913:419::-;14079:4;14117:2;14106:9;14102:18;14094:26;;14166:9;14160:4;14156:20;14152:1;14141:9;14137:17;14130:47;14194:131;14320:4;14194:131;:::i;:::-;14186:139;;13913:419;;;:::o;14338:180::-;14386:77;14383:1;14376:88;14483:4;14480:1;14473:15;14507:4;14504:1;14497:15;14524:180;14572:77;14569:1;14562:88;14669:4;14666:1;14659:15;14693:4;14690:1;14683:15;14710:194;14750:4;14770:20;14788:1;14770:20;:::i;:::-;14765:25;;14804:20;14822:1;14804:20;:::i;:::-;14799:25;;14848:1;14845;14841:9;14833:17;;14872:1;14866:4;14863:11;14860:37;;;14877:18;;:::i;:::-;14860:37;14710:194;;;;:::o;14910:180::-;14958:77;14955:1;14948:88;15055:4;15052:1;15045:15;15079:4;15076:1;15069:15;15096:231;15236:34;15232:1;15224:6;15220:14;15213:58;15305:14;15300:2;15292:6;15288:15;15281:39;15096:231;:::o;15333:366::-;15475:3;15496:67;15560:2;15555:3;15496:67;:::i;:::-;15489:74;;15572:93;15661:3;15572:93;:::i;:::-;15690:2;15685:3;15681:12;15674:19;;15333:366;;;:::o;15705:419::-;15871:4;15909:2;15898:9;15894:18;15886:26;;15958:9;15952:4;15948:20;15944:1;15933:9;15929:17;15922:47;15986:131;16112:4;15986:131;:::i;:::-;15978:139;;15705:419;;;:::o;16130:178::-;16270:30;16266:1;16258:6;16254:14;16247:54;16130:178;:::o;16314:366::-;16456:3;16477:67;16541:2;16536:3;16477:67;:::i;:::-;16470:74;;16553:93;16642:3;16553:93;:::i;:::-;16671:2;16666:3;16662:12;16655:19;;16314:366;;;:::o;16686:419::-;16852:4;16890:2;16879:9;16875:18;16867:26;;16939:9;16933:4;16929:20;16925:1;16914:9;16910:17;16903:47;16967:131;17093:4;16967:131;:::i;:::-;16959:139;;16686:419;;;:::o;17111:226::-;17251:34;17247:1;17239:6;17235:14;17228:58;17320:9;17315:2;17307:6;17303:15;17296:34;17111:226;:::o;17343:366::-;17485:3;17506:67;17570:2;17565:3;17506:67;:::i;:::-;17499:74;;17582:93;17671:3;17582:93;:::i;:::-;17700:2;17695:3;17691:12;17684:19;;17343:366;;;:::o;17715:419::-;17881:4;17919:2;17908:9;17904:18;17896:26;;17968:9;17962:4;17958:20;17954:1;17943:9;17939:17;17932:47;17996:131;18122:4;17996:131;:::i;:::-;17988:139;;17715:419;;;:::o;18140:114::-;;:::o;18260:398::-;18419:3;18440:83;18521:1;18516:3;18440:83;:::i;:::-;18433:90;;18532:93;18621:3;18532:93;:::i;:::-;18650:1;18645:3;18641:11;18634:18;;18260:398;;;:::o;18664:379::-;18848:3;18870:147;19013:3;18870:147;:::i;:::-;18863:154;;19034:3;19027:10;;18664:379;;;:::o;19049:171::-;19189:23;19185:1;19177:6;19173:14;19166:47;19049:171;:::o;19226:366::-;19368:3;19389:67;19453:2;19448:3;19389:67;:::i;:::-;19382:74;;19465:93;19554:3;19465:93;:::i;:::-;19583:2;19578:3;19574:12;19567:19;;19226:366;;;:::o;19598:419::-;19764:4;19802:2;19791:9;19787:18;19779:26;;19851:9;19845:4;19841:20;19837:1;19826:9;19822:17;19815:47;19879:131;20005:4;19879:131;:::i;:::-;19871:139;;19598:419;;;:::o;20023:164::-;20163:16;20159:1;20151:6;20147:14;20140:40;20023:164;:::o;20193:366::-;20335:3;20356:67;20420:2;20415:3;20356:67;:::i;:::-;20349:74;;20432:93;20521:3;20432:93;:::i;:::-;20550:2;20545:3;20541:12;20534:19;;20193:366;;;:::o;20565:419::-;20731:4;20769:2;20758:9;20754:18;20746:26;;20818:9;20812:4;20808:20;20804:1;20793:9;20789:17;20782:47;20846:131;20972:4;20846:131;:::i;:::-;20838:139;;20565:419;;;:::o;20990:178::-;21130:30;21126:1;21118:6;21114:14;21107:54;20990:178;:::o;21174:366::-;21316:3;21337:67;21401:2;21396:3;21337:67;:::i;:::-;21330:74;;21413:93;21502:3;21413:93;:::i;:::-;21531:2;21526:3;21522:12;21515:19;;21174:366;;;:::o;21546:419::-;21712:4;21750:2;21739:9;21735:18;21727:26;;21799:9;21793:4;21789:20;21785:1;21774:9;21770:17;21763:47;21827:131;21953:4;21827:131;:::i;:::-;21819:139;;21546:419;;;:::o;21971:191::-;22011:3;22030:20;22048:1;22030:20;:::i;:::-;22025:25;;22064:20;22082:1;22064:20;:::i;:::-;22059:25;;22107:1;22104;22100:9;22093:16;;22128:3;22125:1;22122:10;22119:36;;;22135:18;;:::i;:::-;22119:36;21971:191;;;;:::o;22168:177::-;22308:29;22304:1;22296:6;22292:14;22285:53;22168:177;:::o;22351:366::-;22493:3;22514:67;22578:2;22573:3;22514:67;:::i;:::-;22507:74;;22590:93;22679:3;22590:93;:::i;:::-;22708:2;22703:3;22699:12;22692:19;;22351:366;;;:::o;22723:419::-;22889:4;22927:2;22916:9;22912:18;22904:26;;22976:9;22970:4;22966:20;22962:1;22951:9;22947:17;22940:47;23004:131;23130:4;23004:131;:::i;:::-;22996:139;;22723:419;;;:::o;23148:410::-;23188:7;23211:20;23229:1;23211:20;:::i;:::-;23206:25;;23245:20;23263:1;23245:20;:::i;:::-;23240:25;;23300:1;23297;23293:9;23322:30;23340:11;23322:30;:::i;:::-;23311:41;;23501:1;23492:7;23488:15;23485:1;23482:22;23462:1;23455:9;23435:83;23412:139;;23531:18;;:::i;:::-;23412:139;23196:362;23148:410;;;;:::o;23564:180::-;23612:77;23609:1;23602:88;23709:4;23706:1;23699:15;23733:4;23730:1;23723:15;23750:185;23790:1;23807:20;23825:1;23807:20;:::i;:::-;23802:25;;23841:20;23859:1;23841:20;:::i;:::-;23836:25;;23880:1;23870:35;;23885:18;;:::i;:::-;23870:35;23927:1;23924;23920:9;23915:14;;23750:185;;;;:::o;23941:220::-;24081:34;24077:1;24069:6;24065:14;24058:58;24150:3;24145:2;24137:6;24133:15;24126:28;23941:220;:::o;24167:366::-;24309:3;24330:67;24394:2;24389:3;24330:67;:::i;:::-;24323:74;;24406:93;24495:3;24406:93;:::i;:::-;24524:2;24519:3;24515:12;24508:19;;24167:366;;;:::o;24539:419::-;24705:4;24743:2;24732:9;24728:18;24720:26;;24792:9;24786:4;24782:20;24778:1;24767:9;24763:17;24756:47;24820:131;24946:4;24820:131;:::i;:::-;24812:139;;24539:419;;;:::o;24964:180::-;25012:77;25009:1;25002:88;25109:4;25106:1;25099:15;25133:4;25130:1;25123:15;25150:143;25207:5;25238:6;25232:13;25223:22;;25254:33;25281:5;25254:33;:::i;:::-;25150:143;;;;:::o;25299:351::-;25369:6;25418:2;25406:9;25397:7;25393:23;25389:32;25386:119;;;25424:79;;:::i;:::-;25386:119;25544:1;25569:64;25625:7;25616:6;25605:9;25601:22;25569:64;:::i;:::-;25559:74;;25515:128;25299:351;;;;:::o;25656:85::-;25701:7;25730:5;25719:16;;25656:85;;;:::o;25747:158::-;25805:9;25838:61;25856:42;25865:32;25891:5;25865:32;:::i;:::-;25856:42;:::i;:::-;25838:61;:::i;:::-;25825:74;;25747:158;;;:::o;25911:147::-;26006:45;26045:5;26006:45;:::i;:::-;26001:3;25994:58;25911:147;;:::o;26064:114::-;26131:6;26165:5;26159:12;26149:22;;26064:114;;;:::o;26184:184::-;26283:11;26317:6;26312:3;26305:19;26357:4;26352:3;26348:14;26333:29;;26184:184;;;;:::o;26374:132::-;26441:4;26464:3;26456:11;;26494:4;26489:3;26485:14;26477:22;;26374:132;;;:::o;26512:108::-;26589:24;26607:5;26589:24;:::i;:::-;26584:3;26577:37;26512:108;;:::o;26626:179::-;26695:10;26716:46;26758:3;26750:6;26716:46;:::i;:::-;26794:4;26789:3;26785:14;26771:28;;26626:179;;;;:::o;26811:113::-;26881:4;26913;26908:3;26904:14;26896:22;;26811:113;;;:::o;26960:732::-;27079:3;27108:54;27156:5;27108:54;:::i;:::-;27178:86;27257:6;27252:3;27178:86;:::i;:::-;27171:93;;27288:56;27338:5;27288:56;:::i;:::-;27367:7;27398:1;27383:284;27408:6;27405:1;27402:13;27383:284;;;27484:6;27478:13;27511:63;27570:3;27555:13;27511:63;:::i;:::-;27504:70;;27597:60;27650:6;27597:60;:::i;:::-;27587:70;;27443:224;27430:1;27427;27423:9;27418:14;;27383:284;;;27387:14;27683:3;27676:10;;27084:608;;;26960:732;;;;:::o;27698:831::-;27961:4;27999:3;27988:9;27984:19;27976:27;;28013:71;28081:1;28070:9;28066:17;28057:6;28013:71;:::i;:::-;28094:80;28170:2;28159:9;28155:18;28146:6;28094:80;:::i;:::-;28221:9;28215:4;28211:20;28206:2;28195:9;28191:18;28184:48;28249:108;28352:4;28343:6;28249:108;:::i;:::-;28241:116;;28367:72;28435:2;28424:9;28420:18;28411:6;28367:72;:::i;:::-;28449:73;28517:3;28506:9;28502:19;28493:6;28449:73;:::i;:::-;27698:831;;;;;;;;:::o;28535:483::-;28706:4;28744:2;28733:9;28729:18;28721:26;;28757:71;28825:1;28814:9;28810:17;28801:6;28757:71;:::i;:::-;28875:9;28869:4;28865:20;28860:2;28849:9;28845:18;28838:48;28903:108;29006:4;28997:6;28903:108;:::i;:::-;28895:116;;28535:483;;;;;:::o;29024:225::-;29164:34;29160:1;29152:6;29148:14;29141:58;29233:8;29228:2;29220:6;29216:15;29209:33;29024:225;:::o;29255:366::-;29397:3;29418:67;29482:2;29477:3;29418:67;:::i;:::-;29411:74;;29494:93;29583:3;29494:93;:::i;:::-;29612:2;29607:3;29603:12;29596:19;;29255:366;;;:::o;29627:419::-;29793:4;29831:2;29820:9;29816:18;29808:26;;29880:9;29874:4;29870:20;29866:1;29855:9;29851:17;29844:47;29908:131;30034:4;29908:131;:::i;:::-;29900:139;;29627:419;;;:::o

Swarm Source

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