ETH Price: $3,498.35 (+2.77%)
Gas: 3 Gwei

Token

BULLBTC (BTC)
 

Overview

Max Total Supply

1,000,000,000 BTC

Holders

75

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
14,400.010508917988832319 BTC

Value
$0.00
0x841df42983f8a2d95fe7f8d0628b700c560d1d72
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:
BTC

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-25
*/

/*

Website: http://bullbtc.vip
Twitter: https://x.com/BULLBTCERC
Telegram: https://t.me/bullbtcportal

*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.20;

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 payable) {
        return payable(address(msg.sender));
    }

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor ()  {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

}

interface IDexFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    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 BTC is Context, IERC20, Ownable {

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

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

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

    string public constant _name ="BULLBTC";
    string public constant _symbol = "BTC";
    uint8 private constant _decimals = 18;

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

    uint256 sDenominator = 1000;

    uint256 public numTokensSellToAddToLiquidity = _tTotal.mul(5).div(sDenominator);

    uint256 public _maxTxAmount = 4000000 * 10**_decimals;
    uint256 public _walletMax = 4000000 * 10**_decimals; 

    bool public EnableTransactionLimit = true;
    bool public checkWalletLimit = true;

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

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

    uint256 private _burnRate;

    IDexRouter public pcsV2Router;
    address public pcsV2Pair;

    address private MarketingWallet;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;    
    bool public swapProtection = true;
    bool public swingTradeProtected = true;

    bool tradingEnable;
    bool LimitDynamic = false;
    uint256 public launchedTime;
    uint256 public nextLimitIncrease;

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    struct BuyFee{
        uint256 setTaxFee;
        uint256 setMarketingFee;
    }

    struct SellFee{
        uint256 setTaxFee;
        uint256 setMarketingFee;
    }

    BuyFee public buyFee;
    SellFee public sellFee;

    constructor ()  {       

        MarketingWallet = _msgSender();
        
        _rOwned[_msgSender()] = _rTotal;

        buyFee.setTaxFee = 10;
        buyFee.setMarketingFee = 20;

        sellFee.setTaxFee = 10;
        sellFee.setMarketingFee = 20;

        _burnRate = 50;
                
        IDexRouter _pcsV2Router = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
          
        pcsV2Pair = IDexFactory(_pcsV2Router.factory())
            .createPair(address(this), _pcsV2Router.WETH());

        pcsV2Router = _pcsV2Router;
        
        _isExcludedFromFee[_msgSender()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[address(dead)] = true;

        isWalletLimitExempt[_msgSender()] = true;
        isWalletLimitExempt[address(dead)] = true;
        isWalletLimitExempt[pcsV2Pair] = true;
        isWalletLimitExempt[address(this)] = true;

        isTxLimitExempt[_msgSender()] = true;
        isTxLimitExempt[address(this)] = true;

        excludeFromReward(address(dead));

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

    function decimals() public pure 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);
    }

    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;
            }
        }
    }
    
    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 rLiquidity = tMarketing.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        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(address sender,uint256 tMarketing) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tMarketing.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tMarketing);
        if(tMarketing > 0) emit Transfer(sender, address(this), tMarketing);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(sDenominator);
    }

    function calculateMarketingFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_MarketingFee).div(sDenominator);
    }
  
    function removeAllFee() private {
        uint subtotal = _taxFee.add(_MarketingFee);
        if(subtotal == 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 _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from zero address");
        require(spender != address(0), "ERC20: approve to zero address");

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0));
        require(to != address(0));
        require(amount > 0);

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

        if(block.timestamp > nextLimitIncrease && LimitDynamic) {
            uint newLimitTx = _maxTxAmount.mul(100).div(sDenominator); 
            uint newLimitWallet = _walletMax.mul(100).div(sDenominator); 
            _maxTxAmount = _maxTxAmount.add(newLimitTx);
            _walletMax = _walletMax.add(newLimitWallet);
            nextLimitIncrease = block.timestamp + 12 hours;
        }

        if(!isTxLimitExempt[from] && !isTxLimitExempt[to] && EnableTransactionLimit) {
            require(amount <= _maxTxAmount, "Exceeds max Tx");
        }

        if(checkWalletLimit && !isWalletLimitExempt[to]) {
            require(balanceOf(to).add(amount) <= _walletMax,"Exceeds Wallet Limit.");
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            !inSwapAndLiquify &&
            to == pcsV2Pair &&
            swapAndLiquifyEnabled &&
            overMinTokenBalance
        ) {            
            swapAndLiquify(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 swapAndLiquify(uint contractSwapTokens) private lockTheSwap {

        if(swapProtection) contractSwapTokens = numTokensSellToAddToLiquidity;

        uint tokensForBurn = contractSwapTokens.mul(_burnRate).div(sDenominator);
        contractSwapTokens = contractSwapTokens.sub(tokensForBurn);

        if(tokensForBurn > 0) {
            _tokenTransferNoFee(address(this), address(dead) ,tokensForBurn);
        }
        if(contractSwapTokens > 0) {
            swapTokensForETH(contractSwapTokens, 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),
            block.timestamp
        );
    }
    
    //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 (sender == pcsV2Pair) {
                    setBuy();
                }
                if (recipient == pcsV2Pair) {
                    if(block.timestamp <= launchedTime + 96 hours) {
                        setDynamicTax();
                    } else {
                        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);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeMarketing(sender,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);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeMarketing(sender,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);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeMarketing(sender,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);
        _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(sender,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 setDynamicTax() private {
        uint timePassed = block.timestamp - launchedTime;
        if(timePassed < 24 hours) {
            _taxFee = 20;  //2
            _MarketingFee = 480; //48
        }
        else if (timePassed < 48 hours) {
            _taxFee = 20;
            _MarketingFee = 230;
        }
        else if (timePassed < 72 hours) {
            _taxFee = 20;
            _MarketingFee = 80;
        }
        else if (timePassed <= 96 hours) {
            _taxFee = 10;
            _MarketingFee = 20;
        }
    }
    
    function excludeFromFee(address account) external onlyOwner() {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) external onlyOwner() {
        _isExcludedFromFee[account] = false;
    }

    function setMFeeWallet(address payable newFeeWallet) external onlyOwner() {
        MarketingWallet = newFeeWallet;
    }

    function setSwapSetting(bool _swapEnable, bool _protected, uint256 _swapthreshold) external {
        require(msg.sender == MarketingWallet);
        swapAndLiquifyEnabled = _swapEnable;
        swapProtection = _protected;
        numTokensSellToAddToLiquidity = _swapthreshold;
    }

    function setBurnRate(uint _Brate) external {
        require(msg.sender == MarketingWallet);
        _burnRate = _Brate;
    }

    function sellProtection(bool _status) external {
        require(msg.sender == MarketingWallet);
        swingTradeProtected = _status;
    }
    
    function dynamicLimit(bool _status) external {
        require(msg.sender == MarketingWallet);
        LimitDynamic = _status;
    }

    function recoverFunds() external {
        require(msg.sender == MarketingWallet);
        (bool os,) = payable(msg.sender).call{value: address(this).balance}("");
        require(os);
    }

    function clearStuckTokens(address tokenAddress, address _recipient, uint256 tokenAmount) external {
        require(msg.sender == MarketingWallet);
        if(tokenAddress == address(this)) {
            _tokenTransferNoFee(address(this), _recipient ,tokenAmount);
        }         
        else {
            (bool os,) = address(tokenAddress).call(abi.encodeWithSignature("transfer(address,uint256)",_recipient,tokenAmount));
            if(!os) revert('Failed');
        }
    }

    function setMaxWalletLimit(uint256 newLimit) external onlyOwner() {
        _walletMax = newLimit;
    }

    function setTxLimit(uint256 newLimit) external onlyOwner() {
        _maxTxAmount = newLimit;
    }

    function ExcludeWalletLimit(address _adr,bool _status) external onlyOwner {
        isWalletLimitExempt[_adr] = _status;
    }

    function ExcludeTxLimit(address _adr,bool _status) external onlyOwner {
        isTxLimitExempt[_adr] = _status;
    }

    function setLimits(bool _walletlimit, bool txlimit) external onlyOwner {
        EnableTransactionLimit = txlimit;
        checkWalletLimit = _walletlimit;
    }

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

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

    function openTrade() external onlyOwner {
        require(!tradingEnable,"Already Enabled!");
        tradingEnable = true;
        launchedTime = block.timestamp;
        nextLimitIncrease = block.timestamp + 12 hours;
        LimitDynamic = true;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"EnableTransactionLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_adr","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"ExcludeTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_adr","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"ExcludeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_maxTxAmount","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":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","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":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"clearStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"bool","name":"_status","type":"bool"}],"name":"dynamicLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","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":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"nextLimitIncrease","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"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":"bool","name":"_status","type":"bool"}],"name":"sellProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_Brate","type":"uint256"}],"name":"setBurnRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newReflection","type":"uint256"},{"internalType":"uint256","name":"_newMarketing","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_walletlimit","type":"bool"},{"internalType":"bool","name":"txlimit","type":"bool"}],"name":"setLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newFeeWallet","type":"address"}],"name":"setMFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newReflection","type":"uint256"},{"internalType":"uint256","name":"_newMarketing","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapEnable","type":"bool"},{"internalType":"bool","name":"_protected","type":"bool"},{"internalType":"uint256","name":"_swapthreshold","type":"uint256"}],"name":"setSwapSetting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapProtection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swingTradeProtected","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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"}]

6080604052620000126012600a62000b04565b6200002290633b9aca0062000b14565b600a81905562000034905f1962000b42565b62000041905f1962000b58565b600b556103e8600c819055600a5462000069919062000062906005620004a4565b9062000537565b600d556200007a6012600a62000b04565b6200008990623d090062000b14565b600e556200009a6012600a62000b04565b620000a990623d090062000b14565b600f556010805461010161ffff199091161790555f6011819055601281905560138190556014556018805464ff00ffffff60a81b19166201010160a81b179055348015620000f5575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601880546001600160a01b03191633908117909155600b545f9182526001602090815260409283902091909155600a601b8190556014601c819055601d91909155601e556032601555815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a0155926004808401938290030181865afa158015620001c9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001ef919062000b6e565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200023b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000261919062000b6e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015620002ac573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002d2919062000b6e565b601780546001600160a01b03199081166001600160a01b039384161790915560168054909116918316919091179055600160045f6200030e3390565b6001600160a01b0316815260208082019290925260409081015f908120805494151560ff199586161790553081526004909252812080548316600190811790915561dead82527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd805490931681179092556008906200038a3390565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff1996871617905560089093527f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd093342998054851660019081179091556017549091168352818320805485168217905530835290822080549093168117909255600790620004173390565b6001600160a01b0316815260208082019290925260409081015f908120805494151560ff1995861617905530815260079092529020805490911660011790556200046361dead62000580565b600a5460405190815233905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35062000c28565b5f825f03620004b557505f62000531565b5f620004c2838562000b14565b905082620004d1858362000b96565b146200052e5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b5f6200052e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200071460201b60201c565b5f546001600160a01b03163314620005db5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000525565b6001600160a01b0381165f9081526005602052604090205460ff1615620006555760405162461bcd60e51b815260206004820152602760248201527f4163636f756e7420697320616c7265616479206578636c756465642066726f6d604482015266081c995dd85c9960ca1b606482015260840162000525565b6001600160a01b0381165f9081526001602052604090205415620006af576001600160a01b0381165f9081526001602052604090205462000696906200074e565b6001600160a01b0382165f908152600260205260409020555b6001600160a01b03165f818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b5f8183620007375760405162461bcd60e51b815260040162000525919062000bac565b505f62000745848662000b96565b95945050505050565b5f600b54821115620007a35760405162461bcd60e51b815260206004820152601e60248201527f416d74206d757374206265206c657373207468616e20746f74207265666c0000604482015260640162000525565b5f620007ae620007c3565b9050620007bc838262000537565b9392505050565b5f8080620007d0620007e8565b9092509050620007e1828262000537565b9250505090565b600b54600a545f918291825b60065481101562000947578260015f6006848154811062000819576200081962000bf9565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205411806200088557508160025f600684815481106200085f576200085f62000bf9565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b156200089c57600b54600a54945094505050509091565b620008e560015f60068481548110620008b957620008b962000bf9565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205484906200097a565b92506200093060025f6006848154811062000904576200090462000bf9565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205483906200097a565b9150806200093e8162000c0d565b915050620007f4565b50600a54600b54620009599162000537565b8210156200097157600b54600a549350935050509091565b90939092509050565b5f6200052e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250620009c360201b60201c565b5f8184841115620009e95760405162461bcd60e51b815260040162000525919062000bac565b505f62000745848662000b58565b634e487b7160e01b5f52601160045260245ffd5b600181815b8085111562000a4b57815f190482111562000a2f5762000a2f620009f7565b8085161562000a3d57918102915b93841c939080029062000a10565b509250929050565b5f8262000a635750600162000531565b8162000a7157505f62000531565b816001811462000a8a576002811462000a955762000ab5565b600191505062000531565b60ff84111562000aa95762000aa9620009f7565b50506001821b62000531565b5060208310610133831016604e8410600b841016171562000ada575081810a62000531565b62000ae6838362000a0b565b805f190482111562000afc5762000afc620009f7565b029392505050565b5f6200052e60ff84168362000a53565b8082028115828204841417620005315762000531620009f7565b634e487b7160e01b5f52601260045260245ffd5b5f8262000b535762000b5362000b2e565b500690565b81810381811115620005315762000531620009f7565b5f6020828403121562000b7f575f80fd5b81516001600160a01b03811681146200052e575f80fd5b5f8262000ba75762000ba762000b2e565b500490565b5f6020808352835180828501525f5b8181101562000bd95785810183015185820160400152820162000bbb565b505f604082860101526040601f19601f8301168501019250505092915050565b634e487b7160e01b5f52603260045260245ffd5b5f6001820162000c215762000c21620009f7565b5060010190565b612e7e8062000c365f395ff3fe608060405260043610610374575f3560e01c80637c46160f116101c8578063b09f1266116100fd578063ea2f0b371161009d578063f872858a1161006d578063f872858a14610a98578063fb0ecfa414610ab6578063fb201b1d14610ad5578063fdd24dfe14610ae9575f80fd5b8063ea2f0b3714610a26578063f2fde38b14610a45578063f3e39c7c14610a64578063f52eb89c14610a83575f80fd5b8063d0dd0b32116100d8578063d0dd0b321461097c578063d12a76881461099b578063d28d8852146109b0578063dd62ed3e146109e2575f80fd5b8063b09f12661461090c578063b79550be1461093a578063c867d60b1461094e575f80fd5b80638da5cb5b11610168578063a364d86111610143578063a364d8611461089a578063a457c2d7146108b9578063a9059cbb146108d8578063af465a27146108f7575f80fd5b80638da5cb5b1461083457806395d89b41146108505780639d34a30d1461087b575f80fd5b806385261485116101a357806385261485146107965780638627479c146107af57806388f82020146107cf5780638b42507f14610806575f80fd5b80637c46160f1461074d5780637d1db4a51461076c578063807c2d9c14610781575f80fd5b806339509351116102a957806352390c02116102495780636ac9a870116102195780636ac9a870146106dc57806370a08231146106fb578063715018a61461071a578063728d41c91461072e575f80fd5b806352390c02146106525780635342acb4146106715780635804f1e4146106a85780635c85974f146106bd575f80fd5b80634549b039116102845780634549b039146105da57806347062402146105f95780634a74bb02146106135780635214329014610633575f80fd5b8063395093511461057d5780633bd5d1731461059c578063437823ec146105bb575f80fd5b806323b872dd116103145780632d838119116102ef5780632d83811914610505578063313ce567146105245780633685d4191461053f57806338ec0b111461055e575f80fd5b806323b872dd146104805780632b14ca561461049f5780632d6abf87146104ce575f80fd5b806313114a9d1161034f57806313114a9d1461041057806313ea1d891461042e57806318160ddd1461044d578063189d165e14610461575f80fd5b806306fdde031461037f578063095ea7b3146103c057806310b4bbbd146103ef575f80fd5b3661037b57005b5f80fd5b34801561038a575f80fd5b5060408051808201909152600781526642554c4c42544360c81b60208201525b6040516103b79190612a66565b60405180910390f35b3480156103cb575f80fd5b506103df6103da366004612aac565b610b09565b60405190151581526020016103b7565b3480156103fa575f80fd5b5061040e610409366004612aea565b610b1f565b005b34801561041b575f80fd5b506009545b6040519081526020016103b7565b348015610439575f80fd5b5061040e610448366004612b03565b610b53565b348015610458575f80fd5b50600a54610420565b34801561046c575f80fd5b5061040e61047b366004612b36565b610baf565b34801561048b575f80fd5b506103df61049a366004612b4d565b610bca565b3480156104aa575f80fd5b50601d54601e546104b9919082565b604080519283526020830191909152016103b7565b3480156104d9575f80fd5b506016546104ed906001600160a01b031681565b6040516001600160a01b0390911681526020016103b7565b348015610510575f80fd5b5061042061051f366004612b36565b610c31565b34801561052f575f80fd5b50604051601281526020016103b7565b34801561054a575f80fd5b5061040e610559366004612b8b565b610ca0565b348015610569575f80fd5b5061040e610578366004612b03565b610e41565b348015610588575f80fd5b506103df610597366004612aac565b610e94565b3480156105a7575f80fd5b5061040e6105b6366004612b36565b610ec9565b3480156105c6575f80fd5b5061040e6105d5366004612b8b565b610faf565b3480156105e5575f80fd5b506104206105f4366004612ba6565b610ffb565b348015610604575f80fd5b50601b54601c546104b9919082565b34801561061e575f80fd5b506018546103df90600160a81b900460ff1681565b34801561063e575f80fd5b506017546104ed906001600160a01b031681565b34801561065d575f80fd5b5061040e61066c366004612b8b565b611085565b34801561067c575f80fd5b506103df61068b366004612b8b565b6001600160a01b03165f9081526004602052604090205460ff1690565b3480156106b3575f80fd5b5061042060195481565b3480156106c8575f80fd5b5061040e6106d7366004612b36565b6111e2565b3480156106e7575f80fd5b5061040e6106f6366004612bc7565b611210565b348015610706575f80fd5b50610420610715366004612b8b565b611244565b348015610725575f80fd5b5061040e6112a0565b348015610739575f80fd5b5061040e610748366004612b36565b611311565b348015610758575f80fd5b5061040e610767366004612be7565b61133f565b348015610777575f80fd5b50610420600e5481565b34801561078c575f80fd5b50610420600f5481565b3480156107a1575f80fd5b506010546103df9060ff1681565b3480156107ba575f80fd5b506018546103df90600160b81b900460ff1681565b3480156107da575f80fd5b506103df6107e9366004612b8b565b6001600160a01b03165f9081526005602052604090205460ff1690565b348015610811575f80fd5b506103df610820366004612b8b565b60076020525f908152604090205460ff1681565b34801561083f575f80fd5b505f546001600160a01b03166104ed565b34801561085b575f80fd5b5060408051808201909152600381526242544360e81b60208201526103aa565b348015610886575f80fd5b5061040e610895366004612b4d565b61138e565b3480156108a5575f80fd5b5061040e6108b4366004612aea565b61149a565b3480156108c4575f80fd5b506103df6108d3366004612aac565b6114ce565b3480156108e3575f80fd5b506103df6108f2366004612aac565b61151b565b348015610902575f80fd5b50610420600a5481565b348015610917575f80fd5b506103aa6040518060400160405280600381526020016242544360e81b81525081565b348015610945575f80fd5b5061040e611527565b348015610959575f80fd5b506103df610968366004612b8b565b60086020525f908152604090205460ff1681565b348015610987575f80fd5b5061040e610996366004612b8b565b611591565b3480156109a6575f80fd5b50610420600d5481565b3480156109bb575f80fd5b506103aa6040518060400160405280600781526020016642554c4c42544360c81b81525081565b3480156109ed575f80fd5b506104206109fc366004612c20565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b348015610a31575f80fd5b5061040e610a40366004612b8b565b6115dc565b348015610a50575f80fd5b5061040e610a5f366004612b8b565b611625565b348015610a6f575f80fd5b5061040e610a7e366004612c57565b61170c565b348015610a8e575f80fd5b50610420601a5481565b348015610aa3575f80fd5b506010546103df90610100900460ff1681565b348015610ac1575f80fd5b5061040e610ad0366004612bc7565b61175b565b348015610ae0575f80fd5b5061040e61178f565b348015610af4575f80fd5b506018546103df90600160b01b900460ff1681565b5f610b15338484611842565b5060015b92915050565b6018546001600160a01b03163314610b35575f80fd5b60188054911515600160b81b0260ff60b81b19909216919091179055565b5f546001600160a01b03163314610b855760405162461bcd60e51b8152600401610b7c90612c71565b60405180910390fd5b6001600160a01b03919091165f908152600760205260409020805460ff1916911515919091179055565b6018546001600160a01b03163314610bc5575f80fd5b601555565b5f610bd684848461194e565b610c278433610c2285604051806060016040528060288152602001612dfc602891396001600160a01b038a165f9081526003602090815260408083203384529091529020549190611c87565b611842565b5060019392505050565b5f600b54821115610c845760405162461bcd60e51b815260206004820152601e60248201527f416d74206d757374206265206c657373207468616e20746f74207265666c00006044820152606401610b7c565b5f610c8d611cbf565b9050610c998382611ce0565b9392505050565b5f546001600160a01b03163314610cc95760405162461bcd60e51b8152600401610b7c90612c71565b6001600160a01b0381165f9081526005602052604090205460ff16610d235760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e48195e18db1d59195960821b6044820152606401610b7c565b5f5b600654811015610e3d57816001600160a01b031660068281548110610d4c57610d4c612ca6565b5f918252602090912001546001600160a01b031603610e2b5760068054610d7590600190612cce565b81548110610d8557610d85612ca6565b5f91825260209091200154600680546001600160a01b039092169183908110610db057610db0612ca6565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610e0757610e07612ce1565b5f8281526020902081015f1990810180546001600160a01b03191690550190555050565b80610e3581612cf5565b915050610d25565b5050565b5f546001600160a01b03163314610e6a5760405162461bcd60e51b8152600401610b7c90612c71565b6001600160a01b03919091165f908152600860205260409020805460ff1916911515919091179055565b335f8181526003602090815260408083206001600160a01b03871684529091528120549091610b15918590610c229086611d21565b335f8181526005602052604090205460ff1615610f3d5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610b7c565b5f610f4783611d7f565b505050506001600160a01b0384165f90815260016020526040902054919250610f7291905082611dc7565b6001600160a01b0383165f90815260016020526040902055600b54610f979082611dc7565b600b55600954610fa79084611d21565b600955505050565b5f546001600160a01b03163314610fd85760405162461bcd60e51b8152600401610b7c90612c71565b6001600160a01b03165f908152600460205260409020805460ff19166001179055565b5f600a5483111561104e5760405162461bcd60e51b815260206004820152601c60248201527f416d74206d757374206265206c657373207468616e20737570706c79000000006044820152606401610b7c565b8161106c575f61105d84611d7f565b50939550610b19945050505050565b5f61107684611d7f565b50929550610b19945050505050565b5f546001600160a01b031633146110ae5760405162461bcd60e51b8152600401610b7c90612c71565b6001600160a01b0381165f9081526005602052604090205460ff16156111265760405162461bcd60e51b815260206004820152602760248201527f4163636f756e7420697320616c7265616479206578636c756465642066726f6d604482015266081c995dd85c9960ca1b6064820152608401610b7c565b6001600160a01b0381165f908152600160205260409020541561117d576001600160a01b0381165f9081526001602052604090205461116490610c31565b6001600160a01b0382165f908152600260205260409020555b6001600160a01b03165f818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b5f546001600160a01b0316331461120b5760405162461bcd60e51b8152600401610b7c90612c71565b600e55565b5f546001600160a01b031633146112395760405162461bcd60e51b8152600401610b7c90612c71565b601d91909155601e55565b6001600160a01b0381165f9081526005602052604081205460ff161561127f57506001600160a01b03165f9081526002602052604090205490565b6001600160a01b0382165f90815260016020526040902054610b1990610c31565b5f546001600160a01b031633146112c95760405162461bcd60e51b8152600401610b7c90612c71565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b0316331461133a5760405162461bcd60e51b8152600401610b7c90612c71565b600f55565b6018546001600160a01b03163314611355575f80fd5b60188054921515600160b01b0260ff60b01b19941515600160a81b029490941661ffff60a81b1990931692909217929092179055600d55565b6018546001600160a01b031633146113a4575f80fd5b306001600160a01b038416036113c4576113bf308383611e08565b505050565b6040516001600160a01b038381166024830152604482018390525f919085169060640160408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b1790525161141c9190612d0d565b5f604051808303815f865af19150503d805f8114611455576040519150601f19603f3d011682016040523d82523d5f602084013e61145a565b606091505b50509050806114945760405162461bcd60e51b815260206004820152600660248201526511985a5b195960d21b6044820152606401610b7c565b50505050565b6018546001600160a01b031633146114b0575f80fd5b60188054911515600160c81b0260ff60c81b19909216919091179055565b5f610b153384610c2285604051806060016040528060258152602001612e2460259139335f9081526003602090815260408083206001600160a01b038d1684529091529020549190611c87565b5f610b1533848461194e565b6018546001600160a01b0316331461153d575f80fd5b6040515f90339047908381818185875af1925050503d805f811461157c576040519150601f19603f3d011682016040523d82523d5f602084013e611581565b606091505b505090508061158e575f80fd5b50565b5f546001600160a01b031633146115ba5760405162461bcd60e51b8152600401610b7c90612c71565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b031633146116055760405162461bcd60e51b8152600401610b7c90612c71565b6001600160a01b03165f908152600460205260409020805460ff19169055565b5f546001600160a01b0316331461164e5760405162461bcd60e51b8152600401610b7c90612c71565b6001600160a01b0381166116b35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b7c565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b031633146117355760405162461bcd60e51b8152600401610b7c90612c71565b601080549215156101000261ff00199215159290921661ffff1990931692909217179055565b5f546001600160a01b031633146117845760405162461bcd60e51b8152600401610b7c90612c71565b601b91909155601c55565b5f546001600160a01b031633146117b85760405162461bcd60e51b8152600401610b7c90612c71565b601854600160c01b900460ff16156118055760405162461bcd60e51b815260206004820152601060248201526f416c726561647920456e61626c65642160801b6044820152606401610b7c565b6018805460ff60c01b1916600160c01b17905542601981905561182a9061a8c0612d28565b601a556018805460ff60c81b1916600160c81b179055565b6001600160a01b0383166118985760405162461bcd60e51b815260206004820181905260248201527f45524332303a20617070726f76652066726f6d207a65726f20616464726573736044820152606401610b7c565b6001600160a01b0382166118ee5760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20617070726f766520746f207a65726f206164647265737300006044820152606401610b7c565b6001600160a01b038381165f8181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611960575f80fd5b6001600160a01b038216611972575f80fd5b5f811161197d575f80fd5b601854600160c01b900460ff16611a08576001600160a01b0383165f9081526004602052604090205460ff16806119cb57506001600160a01b0382165f9081526004602052604090205460ff165b611a085760405162461bcd60e51b815260206004820152600e60248201526d151c98591a5b99c814185d5cd95960921b6044820152606401610b7c565b601a5442118015611a225750601854600160c81b900460ff165b15611a9e575f611a4a600c54611a446064600e54611f8e90919063ffffffff16565b90611ce0565b90505f611a69600c54611a446064600f54611f8e90919063ffffffff16565b600e54909150611a799083611d21565b600e55600f54611a899082611d21565b600f55611a984261a8c0612d28565b601a5550505b6001600160a01b0383165f9081526007602052604090205460ff16158015611ade57506001600160a01b0382165f9081526007602052604090205460ff16155b8015611aec575060105460ff165b15611b3457600e54811115611b345760405162461bcd60e51b815260206004820152600e60248201526d08af0c6cacac8e640dac2f040a8f60931b6044820152606401610b7c565b601054610100900460ff168015611b6357506001600160a01b0382165f9081526008602052604090205460ff16155b15611bc457600f54611b7e82611b7885611244565b90611d21565b1115611bc45760405162461bcd60e51b815260206004820152601560248201527422bc31b2b2b239902bb0b63632ba102634b6b4ba1760591b6044820152606401610b7c565b5f611bce30611244565b600d5460185491925082101590600160a01b900460ff16158015611bff57506017546001600160a01b038581169116145b8015611c145750601854600160a81b900460ff165b8015611c1d5750805b15611c2b57611c2b8261200c565b6001600160a01b0385165f9081526004602052604090205460019060ff1680611c6b57506001600160a01b0385165f9081526004602052604090205460ff165b15611c7357505f5b611c7f868686846120a0565b505050505050565b5f8184841115611caa5760405162461bcd60e51b8152600401610b7c9190612a66565b505f611cb68486612cce565b95945050505050565b5f805f611cca612281565b9092509050611cd98282611ce0565b9250505090565b5f610c9983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506123fa565b5f80611d2d8385612d28565b905083811015610c995760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b7c565b5f805f805f805f805f611d918a612426565b9250925092505f805f611dad8d8686611da8611cbf565b612464565b919f909e50909c50959a5093985091965092945050505050565b5f610c9983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c87565b5f611e11611cbf565b90505f611e1e8383611f8e565b6001600160a01b0386165f90815260016020526040902054909150611e439082611dc7565b6001600160a01b038087165f908152600160205260408082209390935590861681522054611e719082611d21565b6001600160a01b038086165f9081526001602090815260408083209490945591881681526005909152205460ff1615611edf576001600160a01b0385165f90815260026020526040902054611ec69084611dc7565b6001600160a01b0386165f908152600260205260409020555b6001600160a01b0384165f9081526005602052604090205460ff1615611f3a576001600160a01b0384165f90815260026020526040902054611f219084611d21565b6001600160a01b0385165f908152600260205260409020555b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051611f7f91815260200190565b60405180910390a35050505050565b5f825f03611f9d57505f610b19565b5f611fa88385612d3b565b905082611fb58583612d52565b14610c995760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b7c565b6018805460ff60a01b1916600160a01b1790819055600160b01b900460ff16156120355750600d545b5f612051600c54611a4460155485611f8e90919063ffffffff16565b905061205d8282611dc7565b91508015612072576120723061dead83611e08565b811561208f5760185461208f9083906001600160a01b03166124b0565b50506018805460ff60a01b19169055565b6120a8612601565b801561211f576017546001600160a01b03908116908516036120d5576120d5601b54601155601c54601355565b6017546001600160a01b039081169084160361211f576019546120fb9062054600612d28565b421161210e5761210961263c565b61211f565b61211f601d54601155601e54601355565b6001600160a01b0384165f9081526005602052604090205460ff16801561215e57506001600160a01b0383165f9081526005602052604090205460ff16155b156121735761216e8484846126ad565b61226b565b6001600160a01b0384165f9081526005602052604090205460ff161580156121b257506001600160a01b0383165f9081526005602052604090205460ff165b156121c25761216e8484846127cd565b6001600160a01b0384165f9081526005602052604090205460ff1615801561220257506001600160a01b0383165f9081526005602052604090205460ff16155b156122125761216e848484612870565b6001600160a01b0384165f9081526005602052604090205460ff16801561225057506001600160a01b0383165f9081526005602052604090205460ff165b156122605761216e8484846128b0565b61226b848484612870565b8061149457611494601254601155601454601355565b600b54600a545f918291825b6006548110156123ca578260015f600684815481106122ae576122ae612ca6565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054118061231657508160025f600684815481106122f0576122f0612ca6565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b1561232c57600b54600a54945094505050509091565b61237060015f6006848154811061234557612345612ca6565b5f9182526020808320909101546001600160a01b031683528201929092526040019020548490611dc7565b92506123b660025f6006848154811061238b5761238b612ca6565b5f9182526020808320909101546001600160a01b031683528201929092526040019020548390611dc7565b9150806123c281612cf5565b91505061228d565b50600a54600b546123da91611ce0565b8210156123f157600b54600a549350935050509091565b90939092509050565b5f818361241a5760405162461bcd60e51b8152600401610b7c9190612a66565b505f611cb68486612d52565b5f805f806124338561291e565b90505f61243f8661293a565b90505f612456826124508986611dc7565b90611dc7565b979296509094509092505050565b5f8080806124728886611f8e565b90505f61247f8887611f8e565b90505f61248c8888611f8e565b90505f61249d826124508686611dc7565b939b939a50919850919650505050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106124e3576124e3612ca6565b6001600160a01b03928316602091820292909201810191909152601654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561253a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061255e9190612d71565b8160018151811061257157612571612ca6565b6001600160a01b0392831660209182029290920101526016546125979130911685611842565b60165460405163791ac94760e01b81526001600160a01b039091169063791ac947906125cf9086905f90869088904290600401612d8c565b5f604051808303815f87803b1580156125e6575f80fd5b505af11580156125f8573d5f803e3d5ffd5b50505050505050565b5f612619601354601154611d2190919063ffffffff16565b9050805f036126255750565b5060118054601255601380546014555f9182905555565b5f6019544261264b9190612cce565b9050620151808110156126665760146011556101e060135550565b6202a30081101561267e57601460115560e660135550565b6203f480811015612696576014601155605060135550565b62054600811161158e57600a601155601460135550565b5f805f805f806126bc87611d7f565b6001600160a01b038f165f90815260026020526040902054959b509399509197509550935091506126ed9088611dc7565b6001600160a01b038a165f9081526002602090815260408083209390935560019052205461271b9087611dc7565b6001600160a01b03808b165f9081526001602052604080822093909355908a16815220546127499086611d21565b6001600160a01b0389165f9081526001602052604090205561276b8982612956565b6127758483612a20565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516127ba91815260200190565b60405180910390a3505050505050505050565b5f805f805f806127dc87611d7f565b6001600160a01b038f165f90815260016020526040902054959b5093995091975095509350915061280d9087611dc7565b6001600160a01b03808b165f90815260016020908152604080832094909455918b168152600290915220546128429084611d21565b6001600160a01b0389165f908152600260209081526040808320939093556001905220546127499086611d21565b5f805f805f8061287f87611d7f565b6001600160a01b038f165f90815260016020526040902054959b5093995091975095509350915061271b9087611dc7565b5f805f805f806128bf87611d7f565b6001600160a01b038f165f90815260026020526040902054959b509399509197509550935091506128f09088611dc7565b6001600160a01b038a165f9081526002602090815260408083209390935560019052205461280d9087611dc7565b5f610b19600c54611a4460115485611f8e90919063ffffffff16565b5f610b19600c54611a4460135485611f8e90919063ffffffff16565b5f61295f611cbf565b90505f61296c8383611f8e565b305f908152600160205260409020549091506129889082611d21565b305f9081526001602090815260408083209390935560059052205460ff16156129d457305f908152600260205260409020546129c49084611d21565b305f908152600260205260409020555b82156114945760405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b600b54612a2d9083611dc7565b600b55600954612a3d9082611d21565b6009555050565b5f5b83811015612a5e578181015183820152602001612a46565b50505f910152565b602081525f8251806020840152612a84816040850160208701612a44565b601f01601f19169190910160400192915050565b6001600160a01b038116811461158e575f80fd5b5f8060408385031215612abd575f80fd5b8235612ac881612a98565b946020939093013593505050565b80358015158114612ae5575f80fd5b919050565b5f60208284031215612afa575f80fd5b610c9982612ad6565b5f8060408385031215612b14575f80fd5b8235612b1f81612a98565b9150612b2d60208401612ad6565b90509250929050565b5f60208284031215612b46575f80fd5b5035919050565b5f805f60608486031215612b5f575f80fd5b8335612b6a81612a98565b92506020840135612b7a81612a98565b929592945050506040919091013590565b5f60208284031215612b9b575f80fd5b8135610c9981612a98565b5f8060408385031215612bb7575f80fd5b82359150612b2d60208401612ad6565b5f8060408385031215612bd8575f80fd5b50508035926020909101359150565b5f805f60608486031215612bf9575f80fd5b612c0284612ad6565b9250612c1060208501612ad6565b9150604084013590509250925092565b5f8060408385031215612c31575f80fd5b8235612c3c81612a98565b91506020830135612c4c81612a98565b809150509250929050565b5f8060408385031215612c68575f80fd5b612b1f83612ad6565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b81810381811115610b1957610b19612cba565b634e487b7160e01b5f52603160045260245ffd5b5f60018201612d0657612d06612cba565b5060010190565b5f8251612d1e818460208701612a44565b9190910192915050565b80820180821115610b1957610b19612cba565b8082028115828204841417610b1957610b19612cba565b5f82612d6c57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612d81575f80fd5b8151610c9981612a98565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612dda5784516001600160a01b031683529383019391830191600101612db5565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220aebd22fb6076534592af53ed1aa904c623cf0e81ca3c55082886c227f6e68c2f64736f6c63430008150033

Deployed Bytecode

0x608060405260043610610374575f3560e01c80637c46160f116101c8578063b09f1266116100fd578063ea2f0b371161009d578063f872858a1161006d578063f872858a14610a98578063fb0ecfa414610ab6578063fb201b1d14610ad5578063fdd24dfe14610ae9575f80fd5b8063ea2f0b3714610a26578063f2fde38b14610a45578063f3e39c7c14610a64578063f52eb89c14610a83575f80fd5b8063d0dd0b32116100d8578063d0dd0b321461097c578063d12a76881461099b578063d28d8852146109b0578063dd62ed3e146109e2575f80fd5b8063b09f12661461090c578063b79550be1461093a578063c867d60b1461094e575f80fd5b80638da5cb5b11610168578063a364d86111610143578063a364d8611461089a578063a457c2d7146108b9578063a9059cbb146108d8578063af465a27146108f7575f80fd5b80638da5cb5b1461083457806395d89b41146108505780639d34a30d1461087b575f80fd5b806385261485116101a357806385261485146107965780638627479c146107af57806388f82020146107cf5780638b42507f14610806575f80fd5b80637c46160f1461074d5780637d1db4a51461076c578063807c2d9c14610781575f80fd5b806339509351116102a957806352390c02116102495780636ac9a870116102195780636ac9a870146106dc57806370a08231146106fb578063715018a61461071a578063728d41c91461072e575f80fd5b806352390c02146106525780635342acb4146106715780635804f1e4146106a85780635c85974f146106bd575f80fd5b80634549b039116102845780634549b039146105da57806347062402146105f95780634a74bb02146106135780635214329014610633575f80fd5b8063395093511461057d5780633bd5d1731461059c578063437823ec146105bb575f80fd5b806323b872dd116103145780632d838119116102ef5780632d83811914610505578063313ce567146105245780633685d4191461053f57806338ec0b111461055e575f80fd5b806323b872dd146104805780632b14ca561461049f5780632d6abf87146104ce575f80fd5b806313114a9d1161034f57806313114a9d1461041057806313ea1d891461042e57806318160ddd1461044d578063189d165e14610461575f80fd5b806306fdde031461037f578063095ea7b3146103c057806310b4bbbd146103ef575f80fd5b3661037b57005b5f80fd5b34801561038a575f80fd5b5060408051808201909152600781526642554c4c42544360c81b60208201525b6040516103b79190612a66565b60405180910390f35b3480156103cb575f80fd5b506103df6103da366004612aac565b610b09565b60405190151581526020016103b7565b3480156103fa575f80fd5b5061040e610409366004612aea565b610b1f565b005b34801561041b575f80fd5b506009545b6040519081526020016103b7565b348015610439575f80fd5b5061040e610448366004612b03565b610b53565b348015610458575f80fd5b50600a54610420565b34801561046c575f80fd5b5061040e61047b366004612b36565b610baf565b34801561048b575f80fd5b506103df61049a366004612b4d565b610bca565b3480156104aa575f80fd5b50601d54601e546104b9919082565b604080519283526020830191909152016103b7565b3480156104d9575f80fd5b506016546104ed906001600160a01b031681565b6040516001600160a01b0390911681526020016103b7565b348015610510575f80fd5b5061042061051f366004612b36565b610c31565b34801561052f575f80fd5b50604051601281526020016103b7565b34801561054a575f80fd5b5061040e610559366004612b8b565b610ca0565b348015610569575f80fd5b5061040e610578366004612b03565b610e41565b348015610588575f80fd5b506103df610597366004612aac565b610e94565b3480156105a7575f80fd5b5061040e6105b6366004612b36565b610ec9565b3480156105c6575f80fd5b5061040e6105d5366004612b8b565b610faf565b3480156105e5575f80fd5b506104206105f4366004612ba6565b610ffb565b348015610604575f80fd5b50601b54601c546104b9919082565b34801561061e575f80fd5b506018546103df90600160a81b900460ff1681565b34801561063e575f80fd5b506017546104ed906001600160a01b031681565b34801561065d575f80fd5b5061040e61066c366004612b8b565b611085565b34801561067c575f80fd5b506103df61068b366004612b8b565b6001600160a01b03165f9081526004602052604090205460ff1690565b3480156106b3575f80fd5b5061042060195481565b3480156106c8575f80fd5b5061040e6106d7366004612b36565b6111e2565b3480156106e7575f80fd5b5061040e6106f6366004612bc7565b611210565b348015610706575f80fd5b50610420610715366004612b8b565b611244565b348015610725575f80fd5b5061040e6112a0565b348015610739575f80fd5b5061040e610748366004612b36565b611311565b348015610758575f80fd5b5061040e610767366004612be7565b61133f565b348015610777575f80fd5b50610420600e5481565b34801561078c575f80fd5b50610420600f5481565b3480156107a1575f80fd5b506010546103df9060ff1681565b3480156107ba575f80fd5b506018546103df90600160b81b900460ff1681565b3480156107da575f80fd5b506103df6107e9366004612b8b565b6001600160a01b03165f9081526005602052604090205460ff1690565b348015610811575f80fd5b506103df610820366004612b8b565b60076020525f908152604090205460ff1681565b34801561083f575f80fd5b505f546001600160a01b03166104ed565b34801561085b575f80fd5b5060408051808201909152600381526242544360e81b60208201526103aa565b348015610886575f80fd5b5061040e610895366004612b4d565b61138e565b3480156108a5575f80fd5b5061040e6108b4366004612aea565b61149a565b3480156108c4575f80fd5b506103df6108d3366004612aac565b6114ce565b3480156108e3575f80fd5b506103df6108f2366004612aac565b61151b565b348015610902575f80fd5b50610420600a5481565b348015610917575f80fd5b506103aa6040518060400160405280600381526020016242544360e81b81525081565b348015610945575f80fd5b5061040e611527565b348015610959575f80fd5b506103df610968366004612b8b565b60086020525f908152604090205460ff1681565b348015610987575f80fd5b5061040e610996366004612b8b565b611591565b3480156109a6575f80fd5b50610420600d5481565b3480156109bb575f80fd5b506103aa6040518060400160405280600781526020016642554c4c42544360c81b81525081565b3480156109ed575f80fd5b506104206109fc366004612c20565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b348015610a31575f80fd5b5061040e610a40366004612b8b565b6115dc565b348015610a50575f80fd5b5061040e610a5f366004612b8b565b611625565b348015610a6f575f80fd5b5061040e610a7e366004612c57565b61170c565b348015610a8e575f80fd5b50610420601a5481565b348015610aa3575f80fd5b506010546103df90610100900460ff1681565b348015610ac1575f80fd5b5061040e610ad0366004612bc7565b61175b565b348015610ae0575f80fd5b5061040e61178f565b348015610af4575f80fd5b506018546103df90600160b01b900460ff1681565b5f610b15338484611842565b5060015b92915050565b6018546001600160a01b03163314610b35575f80fd5b60188054911515600160b81b0260ff60b81b19909216919091179055565b5f546001600160a01b03163314610b855760405162461bcd60e51b8152600401610b7c90612c71565b60405180910390fd5b6001600160a01b03919091165f908152600760205260409020805460ff1916911515919091179055565b6018546001600160a01b03163314610bc5575f80fd5b601555565b5f610bd684848461194e565b610c278433610c2285604051806060016040528060288152602001612dfc602891396001600160a01b038a165f9081526003602090815260408083203384529091529020549190611c87565b611842565b5060019392505050565b5f600b54821115610c845760405162461bcd60e51b815260206004820152601e60248201527f416d74206d757374206265206c657373207468616e20746f74207265666c00006044820152606401610b7c565b5f610c8d611cbf565b9050610c998382611ce0565b9392505050565b5f546001600160a01b03163314610cc95760405162461bcd60e51b8152600401610b7c90612c71565b6001600160a01b0381165f9081526005602052604090205460ff16610d235760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e48195e18db1d59195960821b6044820152606401610b7c565b5f5b600654811015610e3d57816001600160a01b031660068281548110610d4c57610d4c612ca6565b5f918252602090912001546001600160a01b031603610e2b5760068054610d7590600190612cce565b81548110610d8557610d85612ca6565b5f91825260209091200154600680546001600160a01b039092169183908110610db057610db0612ca6565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610e0757610e07612ce1565b5f8281526020902081015f1990810180546001600160a01b03191690550190555050565b80610e3581612cf5565b915050610d25565b5050565b5f546001600160a01b03163314610e6a5760405162461bcd60e51b8152600401610b7c90612c71565b6001600160a01b03919091165f908152600860205260409020805460ff1916911515919091179055565b335f8181526003602090815260408083206001600160a01b03871684529091528120549091610b15918590610c229086611d21565b335f8181526005602052604090205460ff1615610f3d5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610b7c565b5f610f4783611d7f565b505050506001600160a01b0384165f90815260016020526040902054919250610f7291905082611dc7565b6001600160a01b0383165f90815260016020526040902055600b54610f979082611dc7565b600b55600954610fa79084611d21565b600955505050565b5f546001600160a01b03163314610fd85760405162461bcd60e51b8152600401610b7c90612c71565b6001600160a01b03165f908152600460205260409020805460ff19166001179055565b5f600a5483111561104e5760405162461bcd60e51b815260206004820152601c60248201527f416d74206d757374206265206c657373207468616e20737570706c79000000006044820152606401610b7c565b8161106c575f61105d84611d7f565b50939550610b19945050505050565b5f61107684611d7f565b50929550610b19945050505050565b5f546001600160a01b031633146110ae5760405162461bcd60e51b8152600401610b7c90612c71565b6001600160a01b0381165f9081526005602052604090205460ff16156111265760405162461bcd60e51b815260206004820152602760248201527f4163636f756e7420697320616c7265616479206578636c756465642066726f6d604482015266081c995dd85c9960ca1b6064820152608401610b7c565b6001600160a01b0381165f908152600160205260409020541561117d576001600160a01b0381165f9081526001602052604090205461116490610c31565b6001600160a01b0382165f908152600260205260409020555b6001600160a01b03165f818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b5f546001600160a01b0316331461120b5760405162461bcd60e51b8152600401610b7c90612c71565b600e55565b5f546001600160a01b031633146112395760405162461bcd60e51b8152600401610b7c90612c71565b601d91909155601e55565b6001600160a01b0381165f9081526005602052604081205460ff161561127f57506001600160a01b03165f9081526002602052604090205490565b6001600160a01b0382165f90815260016020526040902054610b1990610c31565b5f546001600160a01b031633146112c95760405162461bcd60e51b8152600401610b7c90612c71565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b0316331461133a5760405162461bcd60e51b8152600401610b7c90612c71565b600f55565b6018546001600160a01b03163314611355575f80fd5b60188054921515600160b01b0260ff60b01b19941515600160a81b029490941661ffff60a81b1990931692909217929092179055600d55565b6018546001600160a01b031633146113a4575f80fd5b306001600160a01b038416036113c4576113bf308383611e08565b505050565b6040516001600160a01b038381166024830152604482018390525f919085169060640160408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b1790525161141c9190612d0d565b5f604051808303815f865af19150503d805f8114611455576040519150601f19603f3d011682016040523d82523d5f602084013e61145a565b606091505b50509050806114945760405162461bcd60e51b815260206004820152600660248201526511985a5b195960d21b6044820152606401610b7c565b50505050565b6018546001600160a01b031633146114b0575f80fd5b60188054911515600160c81b0260ff60c81b19909216919091179055565b5f610b153384610c2285604051806060016040528060258152602001612e2460259139335f9081526003602090815260408083206001600160a01b038d1684529091529020549190611c87565b5f610b1533848461194e565b6018546001600160a01b0316331461153d575f80fd5b6040515f90339047908381818185875af1925050503d805f811461157c576040519150601f19603f3d011682016040523d82523d5f602084013e611581565b606091505b505090508061158e575f80fd5b50565b5f546001600160a01b031633146115ba5760405162461bcd60e51b8152600401610b7c90612c71565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b031633146116055760405162461bcd60e51b8152600401610b7c90612c71565b6001600160a01b03165f908152600460205260409020805460ff19169055565b5f546001600160a01b0316331461164e5760405162461bcd60e51b8152600401610b7c90612c71565b6001600160a01b0381166116b35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b7c565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b031633146117355760405162461bcd60e51b8152600401610b7c90612c71565b601080549215156101000261ff00199215159290921661ffff1990931692909217179055565b5f546001600160a01b031633146117845760405162461bcd60e51b8152600401610b7c90612c71565b601b91909155601c55565b5f546001600160a01b031633146117b85760405162461bcd60e51b8152600401610b7c90612c71565b601854600160c01b900460ff16156118055760405162461bcd60e51b815260206004820152601060248201526f416c726561647920456e61626c65642160801b6044820152606401610b7c565b6018805460ff60c01b1916600160c01b17905542601981905561182a9061a8c0612d28565b601a556018805460ff60c81b1916600160c81b179055565b6001600160a01b0383166118985760405162461bcd60e51b815260206004820181905260248201527f45524332303a20617070726f76652066726f6d207a65726f20616464726573736044820152606401610b7c565b6001600160a01b0382166118ee5760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20617070726f766520746f207a65726f206164647265737300006044820152606401610b7c565b6001600160a01b038381165f8181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611960575f80fd5b6001600160a01b038216611972575f80fd5b5f811161197d575f80fd5b601854600160c01b900460ff16611a08576001600160a01b0383165f9081526004602052604090205460ff16806119cb57506001600160a01b0382165f9081526004602052604090205460ff165b611a085760405162461bcd60e51b815260206004820152600e60248201526d151c98591a5b99c814185d5cd95960921b6044820152606401610b7c565b601a5442118015611a225750601854600160c81b900460ff165b15611a9e575f611a4a600c54611a446064600e54611f8e90919063ffffffff16565b90611ce0565b90505f611a69600c54611a446064600f54611f8e90919063ffffffff16565b600e54909150611a799083611d21565b600e55600f54611a899082611d21565b600f55611a984261a8c0612d28565b601a5550505b6001600160a01b0383165f9081526007602052604090205460ff16158015611ade57506001600160a01b0382165f9081526007602052604090205460ff16155b8015611aec575060105460ff165b15611b3457600e54811115611b345760405162461bcd60e51b815260206004820152600e60248201526d08af0c6cacac8e640dac2f040a8f60931b6044820152606401610b7c565b601054610100900460ff168015611b6357506001600160a01b0382165f9081526008602052604090205460ff16155b15611bc457600f54611b7e82611b7885611244565b90611d21565b1115611bc45760405162461bcd60e51b815260206004820152601560248201527422bc31b2b2b239902bb0b63632ba102634b6b4ba1760591b6044820152606401610b7c565b5f611bce30611244565b600d5460185491925082101590600160a01b900460ff16158015611bff57506017546001600160a01b038581169116145b8015611c145750601854600160a81b900460ff165b8015611c1d5750805b15611c2b57611c2b8261200c565b6001600160a01b0385165f9081526004602052604090205460019060ff1680611c6b57506001600160a01b0385165f9081526004602052604090205460ff165b15611c7357505f5b611c7f868686846120a0565b505050505050565b5f8184841115611caa5760405162461bcd60e51b8152600401610b7c9190612a66565b505f611cb68486612cce565b95945050505050565b5f805f611cca612281565b9092509050611cd98282611ce0565b9250505090565b5f610c9983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506123fa565b5f80611d2d8385612d28565b905083811015610c995760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b7c565b5f805f805f805f805f611d918a612426565b9250925092505f805f611dad8d8686611da8611cbf565b612464565b919f909e50909c50959a5093985091965092945050505050565b5f610c9983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c87565b5f611e11611cbf565b90505f611e1e8383611f8e565b6001600160a01b0386165f90815260016020526040902054909150611e439082611dc7565b6001600160a01b038087165f908152600160205260408082209390935590861681522054611e719082611d21565b6001600160a01b038086165f9081526001602090815260408083209490945591881681526005909152205460ff1615611edf576001600160a01b0385165f90815260026020526040902054611ec69084611dc7565b6001600160a01b0386165f908152600260205260409020555b6001600160a01b0384165f9081526005602052604090205460ff1615611f3a576001600160a01b0384165f90815260026020526040902054611f219084611d21565b6001600160a01b0385165f908152600260205260409020555b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051611f7f91815260200190565b60405180910390a35050505050565b5f825f03611f9d57505f610b19565b5f611fa88385612d3b565b905082611fb58583612d52565b14610c995760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b7c565b6018805460ff60a01b1916600160a01b1790819055600160b01b900460ff16156120355750600d545b5f612051600c54611a4460155485611f8e90919063ffffffff16565b905061205d8282611dc7565b91508015612072576120723061dead83611e08565b811561208f5760185461208f9083906001600160a01b03166124b0565b50506018805460ff60a01b19169055565b6120a8612601565b801561211f576017546001600160a01b03908116908516036120d5576120d5601b54601155601c54601355565b6017546001600160a01b039081169084160361211f576019546120fb9062054600612d28565b421161210e5761210961263c565b61211f565b61211f601d54601155601e54601355565b6001600160a01b0384165f9081526005602052604090205460ff16801561215e57506001600160a01b0383165f9081526005602052604090205460ff16155b156121735761216e8484846126ad565b61226b565b6001600160a01b0384165f9081526005602052604090205460ff161580156121b257506001600160a01b0383165f9081526005602052604090205460ff165b156121c25761216e8484846127cd565b6001600160a01b0384165f9081526005602052604090205460ff1615801561220257506001600160a01b0383165f9081526005602052604090205460ff16155b156122125761216e848484612870565b6001600160a01b0384165f9081526005602052604090205460ff16801561225057506001600160a01b0383165f9081526005602052604090205460ff165b156122605761216e8484846128b0565b61226b848484612870565b8061149457611494601254601155601454601355565b600b54600a545f918291825b6006548110156123ca578260015f600684815481106122ae576122ae612ca6565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054118061231657508160025f600684815481106122f0576122f0612ca6565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b1561232c57600b54600a54945094505050509091565b61237060015f6006848154811061234557612345612ca6565b5f9182526020808320909101546001600160a01b031683528201929092526040019020548490611dc7565b92506123b660025f6006848154811061238b5761238b612ca6565b5f9182526020808320909101546001600160a01b031683528201929092526040019020548390611dc7565b9150806123c281612cf5565b91505061228d565b50600a54600b546123da91611ce0565b8210156123f157600b54600a549350935050509091565b90939092509050565b5f818361241a5760405162461bcd60e51b8152600401610b7c9190612a66565b505f611cb68486612d52565b5f805f806124338561291e565b90505f61243f8661293a565b90505f612456826124508986611dc7565b90611dc7565b979296509094509092505050565b5f8080806124728886611f8e565b90505f61247f8887611f8e565b90505f61248c8888611f8e565b90505f61249d826124508686611dc7565b939b939a50919850919650505050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106124e3576124e3612ca6565b6001600160a01b03928316602091820292909201810191909152601654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561253a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061255e9190612d71565b8160018151811061257157612571612ca6565b6001600160a01b0392831660209182029290920101526016546125979130911685611842565b60165460405163791ac94760e01b81526001600160a01b039091169063791ac947906125cf9086905f90869088904290600401612d8c565b5f604051808303815f87803b1580156125e6575f80fd5b505af11580156125f8573d5f803e3d5ffd5b50505050505050565b5f612619601354601154611d2190919063ffffffff16565b9050805f036126255750565b5060118054601255601380546014555f9182905555565b5f6019544261264b9190612cce565b9050620151808110156126665760146011556101e060135550565b6202a30081101561267e57601460115560e660135550565b6203f480811015612696576014601155605060135550565b62054600811161158e57600a601155601460135550565b5f805f805f806126bc87611d7f565b6001600160a01b038f165f90815260026020526040902054959b509399509197509550935091506126ed9088611dc7565b6001600160a01b038a165f9081526002602090815260408083209390935560019052205461271b9087611dc7565b6001600160a01b03808b165f9081526001602052604080822093909355908a16815220546127499086611d21565b6001600160a01b0389165f9081526001602052604090205561276b8982612956565b6127758483612a20565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516127ba91815260200190565b60405180910390a3505050505050505050565b5f805f805f806127dc87611d7f565b6001600160a01b038f165f90815260016020526040902054959b5093995091975095509350915061280d9087611dc7565b6001600160a01b03808b165f90815260016020908152604080832094909455918b168152600290915220546128429084611d21565b6001600160a01b0389165f908152600260209081526040808320939093556001905220546127499086611d21565b5f805f805f8061287f87611d7f565b6001600160a01b038f165f90815260016020526040902054959b5093995091975095509350915061271b9087611dc7565b5f805f805f806128bf87611d7f565b6001600160a01b038f165f90815260026020526040902054959b509399509197509550935091506128f09088611dc7565b6001600160a01b038a165f9081526002602090815260408083209390935560019052205461280d9087611dc7565b5f610b19600c54611a4460115485611f8e90919063ffffffff16565b5f610b19600c54611a4460135485611f8e90919063ffffffff16565b5f61295f611cbf565b90505f61296c8383611f8e565b305f908152600160205260409020549091506129889082611d21565b305f9081526001602090815260408083209390935560059052205460ff16156129d457305f908152600260205260409020546129c49084611d21565b305f908152600260205260409020555b82156114945760405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b600b54612a2d9083611dc7565b600b55600954612a3d9082611d21565b6009555050565b5f5b83811015612a5e578181015183820152602001612a46565b50505f910152565b602081525f8251806020840152612a84816040850160208701612a44565b601f01601f19169190910160400192915050565b6001600160a01b038116811461158e575f80fd5b5f8060408385031215612abd575f80fd5b8235612ac881612a98565b946020939093013593505050565b80358015158114612ae5575f80fd5b919050565b5f60208284031215612afa575f80fd5b610c9982612ad6565b5f8060408385031215612b14575f80fd5b8235612b1f81612a98565b9150612b2d60208401612ad6565b90509250929050565b5f60208284031215612b46575f80fd5b5035919050565b5f805f60608486031215612b5f575f80fd5b8335612b6a81612a98565b92506020840135612b7a81612a98565b929592945050506040919091013590565b5f60208284031215612b9b575f80fd5b8135610c9981612a98565b5f8060408385031215612bb7575f80fd5b82359150612b2d60208401612ad6565b5f8060408385031215612bd8575f80fd5b50508035926020909101359150565b5f805f60608486031215612bf9575f80fd5b612c0284612ad6565b9250612c1060208501612ad6565b9150604084013590509250925092565b5f8060408385031215612c31575f80fd5b8235612c3c81612a98565b91506020830135612c4c81612a98565b809150509250929050565b5f8060408385031215612c68575f80fd5b612b1f83612ad6565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b81810381811115610b1957610b19612cba565b634e487b7160e01b5f52603160045260245ffd5b5f60018201612d0657612d06612cba565b5060010190565b5f8251612d1e818460208701612a44565b9190910192915050565b80820180821115610b1957610b19612cba565b8082028115828204841417610b1957610b19612cba565b5f82612d6c57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612d81575f80fd5b8151610c9981612a98565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612dda5784516001600160a01b031683529383019391830191600101612db5565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220aebd22fb6076534592af53ed1aa904c623cf0e81ca3c55082886c227f6e68c2f64736f6c63430008150033

Deployed Bytecode Sourcemap

4274:22612:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7735:83;;;;;;;;;;-1:-1:-1;7805:5:0;;;;;;;;;;;;-1:-1:-1;;;7805:5:0;;;;7735:83;;;;;;;:::i;:::-;;;;;;;;8647:161;;;;;;;;;;-1:-1:-1;8647:161:0;;;;;:::i;:::-;;:::i;:::-;;;1291:14:1;;1284:22;1266:41;;1254:2;1239:18;8647:161:0;1126:187:1;24533:144:0;;;;;;;;;;-1:-1:-1;24533:144:0;;;;;:::i;:::-;;:::i;:::-;;9768:87;;;;;;;;;;-1:-1:-1;9837:10:0;;9768:87;;;1814:25:1;;;1802:2;1787:18;9768:87:0;1668:177:1;25892:120:0;;;;;;;;;;-1:-1:-1;25892:120:0;;;;;:::i;:::-;;:::i;8012:95::-;;;;;;;;;;-1:-1:-1;8092:7:0;;8012:95;;24396:129;;;;;;;;;;-1:-1:-1;24396:129:0;;;;;:::i;:::-;;:::i;8816:313::-;;;;;;;;;;-1:-1:-1;8816:313:0;;;;;:::i;:::-;;:::i;6548:22::-;;;;;;;;;;-1:-1:-1;6548:22:0;;;;;;;;;;;;;2990:25:1;;;3046:2;3031:18;;3024:34;;;;2963:18;6548:22:0;2816:248:1;5813:29:0;;;;;;;;;;-1:-1:-1;5813:29:0;;;;-1:-1:-1;;;;;5813:29:0;;;;;;-1:-1:-1;;;;;3251:32:1;;;3233:51;;3221:2;3206:18;5813:29:0;3069:221:1;10689:241:0;;;;;;;;;;-1:-1:-1;10689:241:0;;;;;:::i;:::-;;:::i;7921:83::-;;;;;;;;;;-1:-1:-1;7921:83:0;;5099:2;3437:36:1;;3425:2;3410:18;7921:83:0;3295:184:1;11291:468:0;;;;;;;;;;-1:-1:-1;11291:468:0;;;;;:::i;:::-;;:::i;25756:128::-;;;;;;;;;;-1:-1:-1;25756:128:0;;;;;:::i;:::-;;:::i;9137:218::-;;;;;;;;;;-1:-1:-1;9137:218:0;;;;;:::i;:::-;;:::i;9863:377::-;;;;;;;;;;-1:-1:-1;9863:377:0;;;;;:::i;:::-;;:::i;23718:115::-;;;;;;;;;;-1:-1:-1;23718:115:0;;;;;:::i;:::-;;:::i;10248:433::-;;;;;;;;;;-1:-1:-1;10248:433:0;;;;;:::i;:::-;;:::i;6521:20::-;;;;;;;;;;-1:-1:-1;6521:20:0;;;;;;;;;5950:40;;;;;;;;;;-1:-1:-1;5950:40:0;;;;-1:-1:-1;;;5950:40:0;;;;;;5849:24;;;;;;;;;;-1:-1:-1;5849:24:0;;;;-1:-1:-1;;;;;5849:24:0;;;10938:345;;;;;;;;;;-1:-1:-1;10938:345:0;;;;;:::i;:::-;;:::i;15356:123::-;;;;;;;;;;-1:-1:-1;15356:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;15444:27:0;15420:4;15444:27;;;:18;:27;;;;;;;;;15356:123;6145:27;;;;;;;;;;;;;;;;25647:101;;;;;;;;;;-1:-1:-1;25647:101:0;;;;;:::i;:::-;;:::i;26405:208::-;;;;;;;;;;-1:-1:-1;26405:208:0;;;;;:::i;:::-;;:::i;8115:198::-;;;;;;;;;;-1:-1:-1;8115:198:0;;;;;:::i;:::-;;:::i;3300:148::-;;;;;;;;;;;;;:::i;25533:106::-;;;;;;;;;;-1:-1:-1;25533:106:0;;;;;:::i;:::-;;:::i;24098:290::-;;;;;;;;;;-1:-1:-1;24098:290:0;;;;;:::i;:::-;;:::i;5353:53::-;;;;;;;;;;;;;;;;5413:51;;;;;;;;;;;;;;;;5474:41;;;;;;;;;;-1:-1:-1;5474:41:0;;;;;;;;6041:38;;;;;;;;;;-1:-1:-1;6041:38:0;;;;-1:-1:-1;;;6041:38:0;;;;;;9640:120;;;;;;;;;;-1:-1:-1;9640:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;9732:20:0;9708:4;9732:20;;;:11;:20;;;;;;;;;9640:120;4767:48;;;;;;;;;;-1:-1:-1;4767:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;3086:79;;;;;;;;;;-1:-1:-1;3124:7:0;3151:6;-1:-1:-1;;;;;3151:6:0;3086:79;;7826:87;;;;;;;;;;-1:-1:-1;7898:7:0;;;;;;;;;;;;-1:-1:-1;;;7898:7:0;;;;7826:87;;25034:491;;;;;;;;;;-1:-1:-1;25034:491:0;;;;;:::i;:::-;;:::i;24689:135::-;;;;;;;;;;-1:-1:-1;24689:135:0;;;;;:::i;:::-;;:::i;9363:269::-;;;;;;;;;;-1:-1:-1;9363:269:0;;;;;:::i;:::-;;:::i;8321:167::-;;;;;;;;;;-1:-1:-1;8321:167:0;;;;;:::i;:::-;;:::i;5110:54::-;;;;;;;;;;;;;;;;5019:38;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5019:38:0;;;;;24832:194;;;;;;;;;;;;;:::i;4822:52::-;;;;;;;;;;-1:-1:-1;4822:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23967:123;;;;;;;;;;-1:-1:-1;23967:123:0;;;;;:::i;:::-;;:::i;5265:79::-;;;;;;;;;;;;;;;;4973:39;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4973:39:0;;;;;8496:143;;;;;;;;;;-1:-1:-1;8496:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;8604:18:0;;;8577:7;8604:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8496:143;23845:114;;;;;;;;;;-1:-1:-1;23845:114:0;;;;;:::i;:::-;;:::i;3456:244::-;;;;;;;;;;-1:-1:-1;3456:244:0;;;;;:::i;:::-;;:::i;26020:164::-;;;;;;;;;;-1:-1:-1;26020:164:0;;;;;:::i;:::-;;:::i;6179:32::-;;;;;;;;;;;;;;;;5522:35;;;;;;;;;;-1:-1:-1;5522:35:0;;;;;;;;;;;26192:205;;;;;;;;;;-1:-1:-1;26192:205:0;;;;;:::i;:::-;;:::i;26621:260::-;;;;;;;;;;;;;:::i;6001:33::-;;;;;;;;;;-1:-1:-1;6001:33:0;;;;-1:-1:-1;;;6001:33:0;;;;;;8647:161;8722:4;8739:39;2488:10;8762:7;8771:6;8739:8;:39::i;:::-;-1:-1:-1;8796:4:0;8647:161;;;;;:::o;24533:144::-;24613:15;;-1:-1:-1;;;;;24613:15:0;24599:10;:29;24591:38;;;;;;24640:19;:29;;;;;-1:-1:-1;;;24640:29:0;-1:-1:-1;;;;24640:29:0;;;;;;;;;24533:144::o;25892:120::-;3213:6;;-1:-1:-1;;;;;3213:6:0;2488:10;3213:22;3205:67;;;;-1:-1:-1;;;3205:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;25973:21:0;;;::::1;;::::0;;;:15:::1;:21;::::0;;;;:31;;-1:-1:-1;;25973:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25892:120::o;24396:129::-;24472:15;;-1:-1:-1;;;;;24472:15:0;24458:10;:29;24450:38;;;;;;24499:9;:18;24396:129::o;8816:313::-;8914:4;8931:36;8941:6;8949:9;8960:6;8931:9;:36::i;:::-;8978:121;8987:6;2488:10;9009:89;9047:6;9009:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9009:19:0;;;;;;:11;:19;;;;;;;;2488:10;9009:33;;;;;;;;;;:37;:89::i;:::-;8978:8;:121::i;:::-;-1:-1:-1;9117:4:0;8816:313;;;;;:::o;10689:241::-;10755:7;10794;;10783;:18;;10775:61;;;;-1:-1:-1;;;10775:61:0;;6240:2:1;10775:61:0;;;6222:21:1;6279:2;6259:18;;;6252:30;6318:32;6298:18;;;6291:60;6368:18;;10775:61:0;6038:354:1;10775:61:0;10847:19;10870:10;:8;:10::i;:::-;10847:33;-1:-1:-1;10898:24:0;:7;10847:33;10898:11;:24::i;:::-;10891:31;10689:241;-1:-1:-1;;;10689:241:0:o;11291:468::-;3213:6;;-1:-1:-1;;;;;3213:6:0;2488:10;3213:22;3205:67;;;;-1:-1:-1;;;3205:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11373:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;11365:49;;;::::0;-1:-1:-1;;;11365:49:0;;6599:2:1;11365:49:0::1;::::0;::::1;6581:21:1::0;6638:2;6618:18;;;6611:30;-1:-1:-1;;;6657:18:1;;;6650:46;6713:18;;11365:49:0::1;6397:340:1::0;11365:49:0::1;11430:9;11425:327;11449:9;:16:::0;11445:20;::::1;11425:327;;;11507:7;-1:-1:-1::0;;;;;11491:23:0::1;:9;11501:1;11491:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;11491:12:0::1;:23:::0;11487:254:::1;;11550:9;11560:16:::0;;:20:::1;::::0;11579:1:::1;::::0;11560:20:::1;:::i;:::-;11550:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;11535:9:::1;:12:::0;;-1:-1:-1;;;;;11550:31:0;;::::1;::::0;11545:1;;11535:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;11535:46:0::1;-1:-1:-1::0;;;;;11535:46:0;;::::1;;::::0;;11600:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;11639:11:::1;:20:::0;;;;:28;;-1:-1:-1;;11639:28:0::1;::::0;;11686:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;11686:15:0;;;;;-1:-1:-1;;;;;;11686:15:0::1;::::0;;;;;11425:327:::1;11291:468:::0;:::o;11487:254::-:1;11467:3:::0;::::1;::::0;::::1;:::i;:::-;;;;11425:327;;;;11291:468:::0;:::o;25756:128::-;3213:6;;-1:-1:-1;;;;;3213:6:0;2488:10;3213:22;3205:67;;;;-1:-1:-1;;;3205:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25841:25:0;;;::::1;;::::0;;;:19:::1;:25;::::0;;;;:35;;-1:-1:-1;;25841:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25756:128::o;9137:218::-;2488:10;9225:4;9274:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;9274:34:0;;;;;;;;;;9225:4;;9242:83;;9265:7;;9274:50;;9313:10;9274:38;:50::i;9863:377::-;2488:10;9915:14;9964:19;;;:11;:19;;;;;;;;9963:20;9955:77;;;;-1:-1:-1;;;9955:77:0;;7613:2:1;9955:77:0;;;7595:21:1;7652:2;7632:18;;;7625:30;7691:34;7671:18;;;7664:62;-1:-1:-1;;;7742:18:1;;;7735:42;7794:19;;9955:77:0;7411:408:1;9955:77:0;10044:15;10068:19;10079:7;10068:10;:19::i;:::-;-1:-1:-1;;;;;;;;;10116:15:0;;;;;;:7;:15;;;;;;10043:44;;-1:-1:-1;10116:28:0;;:15;-1:-1:-1;10043:44:0;10116:19;:28::i;:::-;-1:-1:-1;;;;;10098:15:0;;;;;;:7;:15;;;;;:46;10165:7;;:20;;10177:7;10165:11;:20::i;:::-;10155:7;:30;10209:10;;:23;;10224:7;10209:14;:23::i;:::-;10196:10;:36;-1:-1:-1;;;9863:377:0:o;23718:115::-;3213:6;;-1:-1:-1;;;;;3213:6:0;2488:10;3213:22;3205:67;;;;-1:-1:-1;;;3205:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23791:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;23791:34:0::1;23821:4;23791:34;::::0;;23718:115::o;10248:433::-;10338:7;10377;;10366;:18;;10358:59;;;;-1:-1:-1;;;10358:59:0;;8026:2:1;10358:59:0;;;8008:21:1;8065:2;8045:18;;;8038:30;8104;8084:18;;;8077:58;8152:18;;10358:59:0;7824:352:1;10358:59:0;10433:17;10428:246;;10468:15;10492:19;10503:7;10492:10;:19::i;:::-;-1:-1:-1;10467:44:0;;-1:-1:-1;10526:14:0;;-1:-1:-1;;;;;10526:14:0;10428:246;10575:23;10606:19;10617:7;10606:10;:19::i;:::-;-1:-1:-1;10573:52:0;;-1:-1:-1;10640:22:0;;-1:-1:-1;;;;;10640:22:0;10938:345;3213:6;;-1:-1:-1;;;;;3213:6:0;2488:10;3213:22;3205:67;;;;-1:-1:-1;;;3205:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11021:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;11020:21;11012:73;;;::::0;-1:-1:-1;;;11012:73:0;;8383:2:1;11012:73:0::1;::::0;::::1;8365:21:1::0;8422:2;8402:18;;;8395:30;8461:34;8441:18;;;8434:62;-1:-1:-1;;;8512:18:1;;;8505:37;8559:19;;11012:73:0::1;8181:403:1::0;11012:73:0::1;-1:-1:-1::0;;;;;11099:16:0;::::1;11118:1;11099:16:::0;;;:7:::1;:16;::::0;;;;;:20;11096:108:::1;;-1:-1:-1::0;;;;;11175:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;11155:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;11136:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;11096:108:::1;-1:-1:-1::0;;;;;11214:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;11214:27:0::1;11237:4;11214:27:::0;;::::1;::::0;;;11252:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;11252:23:0::1;::::0;;::::1;::::0;;10938:345::o;25647:101::-;3213:6;;-1:-1:-1;;;;;3213:6:0;2488:10;3213:22;3205:67;;;;-1:-1:-1;;;3205:67:0;;;;;;;:::i;:::-;25717:12:::1;:23:::0;25647:101::o;26405:208::-;3213:6;;-1:-1:-1;;;;;3213:6:0;2488:10;3213:22;3205:67;;;;-1:-1:-1;;;3205:67:0;;;;;;;:::i;:::-;26521:7:::1;:34:::0;;;;26566:23;:39;26405:208::o;8115:198::-;-1:-1:-1;;;;;8205:20:0;;8181:7;8205:20;;;:11;:20;;;;;;;;8201:49;;;-1:-1:-1;;;;;;8234:16:0;;;;;:7;:16;;;;;;;8115:198::o;8201:49::-;-1:-1:-1;;;;;8288:16:0;;;;;;:7;:16;;;;;;8268:37;;:19;:37::i;3300:148::-;3213:6;;-1:-1:-1;;;;;3213:6:0;2488:10;3213:22;3205:67;;;;-1:-1:-1;;;3205:67:0;;;;;;;:::i;:::-;3407:1:::1;3391:6:::0;;3370:40:::1;::::0;-1:-1:-1;;;;;3391:6:0;;::::1;::::0;3370:40:::1;::::0;3407:1;;3370:40:::1;3438:1;3421:19:::0;;-1:-1:-1;;;;;;3421:19:0::1;::::0;;3300:148::o;25533:106::-;3213:6;;-1:-1:-1;;;;;3213:6:0;2488:10;3213:22;3205:67;;;;-1:-1:-1;;;3205:67:0;;;;;;;:::i;:::-;25610:10:::1;:21:::0;25533:106::o;24098:290::-;24223:15;;-1:-1:-1;;;;;24223:15:0;24209:10;:29;24201:38;;;;;;24250:21;:35;;24296:27;;;-1:-1:-1;;;24296:27:0;-1:-1:-1;;;;24250:35:0;;;-1:-1:-1;;;24250:35:0;24296:27;;;;-1:-1:-1;;;;24296:27:0;;;;;;;;;;;;;24334:29;:46;24098:290::o;25034:491::-;25165:15;;-1:-1:-1;;;;;25165:15:0;25151:10;:29;25143:38;;;;;;25219:4;-1:-1:-1;;;;;25195:29:0;;;25192:326;;25241:59;25269:4;25276:10;25288:11;25241:19;:59::i;:::-;25034:491;;;:::o;25192:326::-;25391:75;;-1:-1:-1;;;;;8781:32:1;;;25391:75:0;;;8763:51:1;8830:18;;;8823:34;;;25352:7:0;;25364:26;;;;8736:18:1;;25391:75:0;;;-1:-1:-1;;25391:75:0;;;;;;;;;;;;;;-1:-1:-1;;;;;25391:75:0;-1:-1:-1;;;25391:75:0;;;25364:103;;;25391:75;25364:103;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25351:116;;;25486:2;25482:24;;25490:16;;-1:-1:-1;;;25490:16:0;;9362:2:1;25490:16:0;;;9344:21:1;9401:1;9381:18;;;9374:29;-1:-1:-1;;;9419:18:1;;;9412:36;9465:18;;25490:16:0;9160:329:1;25482:24:0;25336:182;25034:491;;;:::o;24689:135::-;24767:15;;-1:-1:-1;;;;;24767:15:0;24753:10;:29;24745:38;;;;;;24794:12;:22;;;;;-1:-1:-1;;;24794:22:0;-1:-1:-1;;;;24794:22:0;;;;;;;;;24689:135::o;9363:269::-;9456:4;9473:129;2488:10;9496:7;9505:96;9544:15;9505:96;;;;;;;;;;;;;;;;;2488:10;9505:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;9505:34:0;;;;;;;;;;;;:38;:96::i;8321:167::-;8399:4;8416:42;2488:10;8440:9;8451:6;8416:9;:42::i;24832:194::-;24898:15;;-1:-1:-1;;;;;24898:15:0;24884:10;:29;24876:38;;;;;;24938:58;;24926:7;;24946:10;;24970:21;;24926:7;24938:58;24926:7;24938:58;24970:21;24946:10;24938:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24925:71;;;25015:2;25007:11;;;;;;24865:161;24832:194::o;23967:123::-;3213:6;;-1:-1:-1;;;;;3213:6:0;2488:10;3213:22;3205:67;;;;-1:-1:-1;;;3205:67:0;;;;;;;:::i;:::-;24052:15:::1;:30:::0;;-1:-1:-1;;;;;;24052:30:0::1;-1:-1:-1::0;;;;;24052:30:0;;;::::1;::::0;;;::::1;::::0;;23967:123::o;23845:114::-;3213:6;;-1:-1:-1;;;;;3213:6:0;2488:10;3213:22;3205:67;;;;-1:-1:-1;;;3205:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23916:27:0::1;23946:5;23916:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;23916:35:0::1;::::0;;23845:114::o;3456:244::-;3213:6;;-1:-1:-1;;;;;3213:6:0;2488:10;3213:22;3205:67;;;;-1:-1:-1;;;3205:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3545:22:0;::::1;3537:73;;;::::0;-1:-1:-1;;;3537:73:0;;9906:2:1;3537:73:0::1;::::0;::::1;9888:21:1::0;9945:2;9925:18;;;9918:30;9984:34;9964:18;;;9957:62;-1:-1:-1;;;10035:18:1;;;10028:36;10081:19;;3537:73:0::1;9704:402:1::0;3537:73:0::1;3647:6;::::0;;3626:38:::1;::::0;-1:-1:-1;;;;;3626:38:0;;::::1;::::0;3647:6;::::1;::::0;3626:38:::1;::::0;::::1;3675:6;:17:::0;;-1:-1:-1;;;;;;3675:17:0::1;-1:-1:-1::0;;;;;3675:17:0;;;::::1;::::0;;;::::1;::::0;;3456:244::o;26020:164::-;3213:6;;-1:-1:-1;;;;;3213:6:0;2488:10;3213:22;3205:67;;;;-1:-1:-1;;;3205:67:0;;;;;;;:::i;:::-;26102:22:::1;:32:::0;;26145:31;::::1;;26102:32;26145:31;-1:-1:-1::0;;26102:32:0;::::1;;26145:31:::0;;;;-1:-1:-1;;26145:31:0;;;;;;;::::1;::::0;;26020:164::o;26192:205::-;3213:6;;-1:-1:-1;;;;;3213:6:0;2488:10;3213:22;3205:67;;;;-1:-1:-1;;;3205:67:0;;;;;;;:::i;:::-;26307:6:::1;:33:::0;;;;26351:22;:38;26192:205::o;26621:260::-;3213:6;;-1:-1:-1;;;;;3213:6:0;2488:10;3213:22;3205:67;;;;-1:-1:-1;;;3205:67:0;;;;;;;:::i;:::-;26681:13:::1;::::0;-1:-1:-1;;;26681:13:0;::::1;;;26680:14;26672:42;;;::::0;-1:-1:-1;;;26672:42:0;;10313:2:1;26672:42:0::1;::::0;::::1;10295:21:1::0;10352:2;10332:18;;;10325:30;-1:-1:-1;;;10371:18:1;;;10364:46;10427:18;;26672:42:0::1;10111:340:1::0;26672:42:0::1;26725:13;:20:::0;;-1:-1:-1;;;;26725:20:0::1;-1:-1:-1::0;;;26725:20:0::1;::::0;;26771:15:::1;26756:12;:30:::0;;;26817:26:::1;::::0;26835:8:::1;26817:26;:::i;:::-;26797:17;:46:::0;26854:12:::1;:19:::0;;-1:-1:-1;;;;26854:19:0::1;-1:-1:-1::0;;;26854:19:0::1;::::0;;26621:260::o;15487:329::-;-1:-1:-1;;;;;15580:19:0;;15572:64;;;;-1:-1:-1;;;15572:64:0;;10788:2:1;15572:64:0;;;10770:21:1;;;10807:18;;;10800:30;10866:34;10846:18;;;10839:62;10918:18;;15572:64:0;10586:356:1;15572:64:0;-1:-1:-1;;;;;15655:21:0;;15647:64;;;;-1:-1:-1;;;15647:64:0;;11149:2:1;15647:64:0;;;11131:21:1;11188:2;11168:18;;;11161:30;11227:32;11207:18;;;11200:60;11277:18;;15647:64:0;10947:354:1;15647:64:0;-1:-1:-1;;;;;15724:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15776:32;;1814:25:1;;;15776:32:0;;1787:18:1;15776:32:0;;;;;;;15487:329;;;:::o;15824:1842::-;-1:-1:-1;;;;;15946:18:0;;15938:27;;;;;;-1:-1:-1;;;;;15984:16:0;;15976:25;;;;;;16029:1;16020:6;:10;16012:19;;;;;;16048:13;;-1:-1:-1;;;16048:13:0;;;;16044:124;;-1:-1:-1;;;;;16086:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;16114:22:0;;;;;;:18;:22;;;;;;;;16086:50;16078:77;;;;-1:-1:-1;;;16078:77:0;;11508:2:1;16078:77:0;;;11490:21:1;11547:2;11527:18;;;11520:30;-1:-1:-1;;;11566:18:1;;;11559:44;11620:18;;16078:77:0;11306:338:1;16078:77:0;16201:17;;16183:15;:35;:51;;;;-1:-1:-1;16222:12:0;;-1:-1:-1;;;16222:12:0;;;;16183:51;16180:393;;;16251:15;16269:39;16295:12;;16269:21;16286:3;16269:12;;:16;;:21;;;;:::i;:::-;:25;;:39::i;:::-;16251:57;;16324:19;16346:37;16370:12;;16346:19;16361:3;16346:10;;:14;;:19;;;;:::i;:37::-;16414:12;;16324:59;;-1:-1:-1;16414:28:0;;16431:10;16414:16;:28::i;:::-;16399:12;:43;16470:10;;:30;;16485:14;16470;:30::i;:::-;16457:10;:43;16535:26;:15;16553:8;16535:26;:::i;:::-;16515:17;:46;-1:-1:-1;;16180:393:0;-1:-1:-1;;;;;16589:21:0;;;;;;:15;:21;;;;;;;;16588:22;:46;;;;-1:-1:-1;;;;;;16615:19:0;;;;;;:15;:19;;;;;;;;16614:20;16588:46;:72;;;;-1:-1:-1;16638:22:0;;;;16588:72;16585:153;;;16695:12;;16685:6;:22;;16677:49;;;;-1:-1:-1;;;16677:49:0;;11851:2:1;16677:49:0;;;11833:21:1;11890:2;11870:18;;;11863:30;-1:-1:-1;;;11909:18:1;;;11902:44;11963:18;;16677:49:0;11649:338:1;16677:49:0;16753:16;;;;;;;:44;;;;-1:-1:-1;;;;;;16774:23:0;;;;;;:19;:23;;;;;;;;16773:24;16753:44;16750:148;;;16851:10;;16822:25;16840:6;16822:13;16832:2;16822:9;:13::i;:::-;:17;;:25::i;:::-;:39;;16814:72;;;;-1:-1:-1;;;16814:72:0;;12194:2:1;16814:72:0;;;12176:21:1;12233:2;12213:18;;;12206:30;-1:-1:-1;;;12252:18:1;;;12245:51;12313:18;;16814:72:0;11992:345:1;16814:72:0;16910:28;16941:24;16959:4;16941:9;:24::i;:::-;17037:29;;17096:16;;16910:55;;-1:-1:-1;17013:53:0;;;;-1:-1:-1;;;17096:16:0;;;;17095:17;:49;;;;-1:-1:-1;17135:9:0;;-1:-1:-1;;;;;17129:15:0;;;17135:9;;17129:15;17095:49;:87;;;;-1:-1:-1;17161:21:0;;-1:-1:-1;;;17161:21:0;;;;17095:87;:123;;;;;17199:19;17095:123;17077:228;;;17257:36;17272:20;17257:14;:36::i;:::-;-1:-1:-1;;;;;17513:24:0;;17386:12;17513:24;;;:18;:24;;;;;;17401:4;;17513:24;;;:50;;-1:-1:-1;;;;;;17541:22:0;;;;;;:18;:22;;;;;;;;17513:50;17510:96;;;-1:-1:-1;17589:5:0;17510:96;17618:38;17633:4;17638:2;17641:6;17648:7;17618:14;:38::i;:::-;15927:1739;;;15824:1842;;;:::o;1237:192::-;1323:7;1359:12;1351:6;;;;1343:29;;;;-1:-1:-1;;;1343:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1383:9:0;1395:5;1399:1;1395;:5;:::i;:::-;1383:17;1237:192;-1:-1:-1;;;;;1237:192:0:o;13165:163::-;13206:7;13227:15;13244;13263:19;:17;:19::i;:::-;13226:56;;-1:-1:-1;13226:56:0;-1:-1:-1;13300:20:0;13226:56;;13300:11;:20::i;:::-;13293:27;;;;13165:163;:::o;1701:132::-;1759:7;1786:39;1790:1;1793;1786:39;;;;;;;;;;;;;;;;;:3;:39::i;904:181::-;962:7;;994:5;998:1;994;:5;:::i;:::-;982:17;;1023:1;1018;:6;;1010:46;;;;-1:-1:-1;;;1010:46:0;;12544:2:1;1010:46:0;;;12526:21:1;12583:2;12563:18;;;12556:30;12622:29;12602:18;;;12595:57;12669:18;;1010:46:0;12342:351:1;11963:419:0;12022:7;12031;12040;12049;12058;12067;12088:23;12113:12;12127:18;12149:20;12161:7;12149:11;:20::i;:::-;12087:82;;;;;;12181:15;12198:23;12223:12;12239:50;12251:7;12260:4;12266:10;12278;:8;:10::i;:::-;12239:11;:50::i;:::-;12180:109;;;;-1:-1:-1;12180:109:0;;-1:-1:-1;12340:15:0;;-1:-1:-1;12357:4:0;;-1:-1:-1;12363:10:0;;-1:-1:-1;11963:419:0;;-1:-1:-1;;;;;11963:419:0:o;1093:136::-;1151:7;1178:43;1182:1;1185;1178:43;;;;;;;;;;;;;;;;;:3;:43::i;22529:606::-;22628:19;22651:10;:8;:10::i;:::-;22628:33;-1:-1:-1;22674:15:0;22692:23;:6;22628:33;22692:10;:23::i;:::-;-1:-1:-1;;;;;22749:15:0;;;;;;:7;:15;;;;;;22674:41;;-1:-1:-1;22749:28:0;;22674:41;22749:19;:28::i;:::-;-1:-1:-1;;;;;22731:15:0;;;;;;;:7;:15;;;;;;:46;;;;22809:18;;;;;;;:31;;22832:7;22809:22;:31::i;:::-;-1:-1:-1;;;;;22788:18:0;;;;;;;:7;:18;;;;;;;;:52;;;;22866:19;;;;;:11;:19;;;;;;;22862:97;;;-1:-1:-1;;;;;22920:15:0;;;;;;:7;:15;;;;;;:27;;22940:6;22920:19;:27::i;:::-;-1:-1:-1;;;;;22902:15:0;;;;;;:7;:15;;;;;:45;22862:97;-1:-1:-1;;;;;22974:22:0;;;;;;:11;:22;;;;;;;;22970:106;;;-1:-1:-1;;;;;23034:18:0;;;;;;:7;:18;;;;;;:30;;23057:6;23034:22;:30::i;:::-;-1:-1:-1;;;;;23013:18:0;;;;;;:7;:18;;;;;:51;22970:106;23109:9;-1:-1:-1;;;;;23092:35:0;23101:6;-1:-1:-1;;;;;23092:35:0;;23120:6;23092:35;;;;1814:25:1;;1802:2;1787:18;;1668:177;23092:35:0;;;;;;;;22617:518;;22529:606;;;:::o;1437:256::-;1495:7;1525:1;1530;1525:6;1521:47;;-1:-1:-1;1555:1:0;1548:8;;1521:47;1580:9;1592:5;1596:1;1592;:5;:::i;:::-;1580:17;-1:-1:-1;1625:1:0;1616:5;1620:1;1580:17;1616:5;:::i;:::-;:10;1608:56;;;;-1:-1:-1;;;1608:56:0;;13295:2:1;1608:56:0;;;13277:21:1;13334:2;13314:18;;;13307:30;13373:34;13353:18;;;13346:62;-1:-1:-1;;;13424:18:1;;;13417:31;13465:19;;1608:56:0;13093:397:1;17674:555:0;6252:16;:23;;-1:-1:-1;;;;6252:23:0;-1:-1:-1;;;6252:23:0;;;;;-1:-1:-1;;;17759:14:0;::::1;6252:23:::0;17759:14:::1;17756:69;;;-1:-1:-1::0;17796:29:0::1;::::0;17756:69:::1;17838:18;17859:51;17897:12;;17859:33;17882:9;;17859:18;:22;;:33;;;;:::i;:51::-;17838:72:::0;-1:-1:-1;17942:37:0::1;:18:::0;17838:72;17942:22:::1;:37::i;:::-;17921:58:::0;-1:-1:-1;17995:17:0;;17992:113:::1;;18029:64;18057:4;4387:42;18079:13;18029:19;:64::i;:::-;18118:22:::0;;18115:107:::1;;18194:15;::::0;18157:53:::1;::::0;18174:18;;-1:-1:-1;;;;;18194:15:0::1;18157:16;:53::i;:::-;-1:-1:-1::0;;6298:16:0;:24;;-1:-1:-1;;;;6298:24:0;;;17674:555::o;18931:1234::-;19052:14;:12;:14::i;:::-;19087:7;19083:393;;;19130:9;;-1:-1:-1;;;;;19130:9:0;;;19120:19;;;;19116:76;;19164:8;15140:6;:16;15130:7;:26;15183:22;;15167:13;:38;15093:120;19164:8;19227:9;;-1:-1:-1;;;;;19227:9:0;;;19214:22;;;;19210:249;;19283:12;;:23;;19298:8;19283:23;:::i;:::-;19264:15;:42;19261:179;;19335:15;:13;:15::i;:::-;19261:179;;;19407:9;15273:7;:17;15263:7;:27;15317:23;;15301:13;:39;15225:123;19407:9;-1:-1:-1;;;;;19503:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;19527:22:0;;;;;;:11;:22;;;;;;;;19526:23;19503:46;19499:597;;;19566:48;19588:6;19596:9;19607:6;19566:21;:48::i;:::-;19499:597;;;-1:-1:-1;;;;;19637:19:0;;;;;;:11;:19;;;;;;;;19636:20;:46;;;;-1:-1:-1;;;;;;19660:22:0;;;;;;:11;:22;;;;;;;;19636:46;19632:464;;;19699:46;19719:6;19727:9;19738:6;19699:19;:46::i;19632:464::-;-1:-1:-1;;;;;19768:19:0;;;;;;:11;:19;;;;;;;;19767:20;:47;;;;-1:-1:-1;;;;;;19792:22:0;;;;;;:11;:22;;;;;;;;19791:23;19767:47;19763:333;;;19831:44;19849:6;19857:9;19868:6;19831:17;:44::i;19763:333::-;-1:-1:-1;;;;;19897:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;19920:22:0;;;;;;:11;:22;;;;;;;;19897:45;19893:203;;;19959:48;19981:6;19989:9;20000:6;19959:21;:48::i;19893:203::-;20040:44;20058:6;20066:9;20077:6;20040:17;:44::i;:::-;20120:7;20116:41;;20142:15;15014;;15004:7;:25;15056:21;;15040:13;:37;14960:125;13336:561;13433:7;;13469;;13386;;;;;13493:289;13517:9;:16;13513:20;;13493:289;;;13583:7;13559;:21;13567:9;13577:1;13567:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;13567:12:0;13559:21;;;;;;;;;;;;;:31;;:66;;;13618:7;13594;:21;13602:9;13612:1;13602:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;13602:12:0;13594:21;;;;;;;;;;;;;:31;13559:66;13555:97;;;13635:7;;13644;;13627:25;;;;;;;13336:561;;:::o;13555:97::-;13677:34;13689:7;:21;13697:9;13707:1;13697:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;13697:12:0;13689:21;;;;;;;;;;;;;13677:7;;:11;:34::i;:::-;13667:44;;13736:34;13748:7;:21;13756:9;13766:1;13756:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;13756:12:0;13748:21;;;;;;;;;;;;;13736:7;;:11;:34::i;:::-;13726:44;-1:-1:-1;13535:3:0;;;;:::i;:::-;;;;13493:289;;;-1:-1:-1;13818:7:0;;13806;;:20;;:11;:20::i;:::-;13796:7;:30;13792:61;;;13836:7;;13845;;13828:25;;;;;;13336:561;;:::o;13792:61::-;13872:7;;13881;;-1:-1:-1;13336:561:0;-1:-1:-1;13336:561:0:o;1841:191::-;1927:7;1962:12;1955:5;1947:28;;;;-1:-1:-1;;;1947:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1986:9:0;1998:5;2002:1;1998;:5;:::i;12390:330::-;12450:7;12459;12468;12488:12;12503:24;12519:7;12503:15;:24::i;:::-;12488:39;;12538:18;12559:30;12581:7;12559:21;:30::i;:::-;12538:51;-1:-1:-1;12600:23:0;12626:33;12538:51;12626:17;:7;12638:4;12626:11;:17::i;:::-;:21;;:33::i;:::-;12600:59;12695:4;;-1:-1:-1;12701:10:0;;-1:-1:-1;12390:330:0;;-1:-1:-1;;;12390:330:0:o;12728:429::-;12843:7;;;;12899:24;:7;12911:11;12899;:24::i;:::-;12881:42;-1:-1:-1;12934:12:0;12949:21;:4;12958:11;12949:8;:21::i;:::-;12934:36;-1:-1:-1;12981:18:0;13002:27;:10;13017:11;13002:14;:27::i;:::-;12981:48;-1:-1:-1;13040:23:0;13066:33;12981:48;13066:17;:7;13078:4;13066:11;:17::i;:33::-;13118:7;;;;-1:-1:-1;13144:4:0;;-1:-1:-1;12728:429:0;;-1:-1:-1;;;;;;;12728:429:0:o;18245:601::-;18414:16;;;18428:1;18414:16;;;;;;;;18390:21;;18414:16;;;;;;;;;;-1:-1:-1;18414:16:0;18390:40;;18459:4;18441;18446:1;18441:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18441:23:0;;;:7;;;;;;;;;;:23;;;;18485:11;;:18;;;-1:-1:-1;;;18485:18:0;;;;:11;;;;;:16;;:18;;;;;18441:7;;18485:18;;;;;:11;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18475:4;18480:1;18475:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18475:28:0;;;:7;;;;;;;;;:28;18548:11;;18516:58;;18533:4;;18548:11;18562;18516:8;:58::i;:::-;18613:11;;:225;;-1:-1:-1;;;18613:225:0;;-1:-1:-1;;;;;18613:11:0;;;;:62;;:225;;18690:11;;18613;;18760:4;;18787:9;;18812:15;;18613:225;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18319:527;18245:601;;:::o;14673:275::-;14716:13;14732:26;14744:13;;14732:7;;:11;;:26;;;;:::i;:::-;14716:42;;14772:8;14784:1;14772:13;14769:25;;14787:7;14673:275::o;14769:25::-;-1:-1:-1;14833:7:0;;;14815:15;:25;14875:13;;;14851:21;:37;-1:-1:-1;14901:11:0;;;;14923:17;14673:275::o;23143:563::-;23187:15;23223:12;;23205:15;:30;;;;:::i;:::-;23187:48;;23262:8;23249:10;:21;23246:453;;;23297:2;23287:7;:12;23335:3;23319:13;:19;24865:161;24832:194::o;23246:453::-;23387:8;23374:10;:21;23370:329;;;23422:2;23412:7;:12;23455:3;23439:13;:19;24865:161;24832:194::o;23370:329::-;23502:8;23489:10;:21;23485:214;;;23537:2;23527:7;:12;23570:2;23554:13;:18;24865:161;24832:194::o;23485:214::-;23617:8;23603:10;:22;23599:100;;23652:2;23642:7;:12;23685:2;23669:13;:18;23176:530;23143:563::o;21291:573::-;21394:15;21411:23;21436:12;21450:23;21475:12;21489:18;21511:19;21522:7;21511:10;:19::i;:::-;-1:-1:-1;;;;;21559:15:0;;;;;;:7;:15;;;;;;21393:137;;-1:-1:-1;21393:137:0;;-1:-1:-1;21393:137:0;;-1:-1:-1;21393:137:0;-1:-1:-1;21393:137:0;-1:-1:-1;21393:137:0;-1:-1:-1;21559:28:0;;21579:7;21559:19;:28::i;:::-;-1:-1:-1;;;;;21541:15:0;;;;;;:7;:15;;;;;;;;:46;;;;21616:7;:15;;;;:28;;21636:7;21616:19;:28::i;:::-;-1:-1:-1;;;;;21598:15:0;;;;;;;:7;:15;;;;;;:46;;;;21676:18;;;;;;;:39;;21699:15;21676:22;:39::i;:::-;-1:-1:-1;;;;;21655:18:0;;;;;;:7;:18;;;;;:60;21729:33;21744:6;21751:10;21729:14;:33::i;:::-;21773:23;21785:4;21791;21773:11;:23::i;:::-;21829:9;-1:-1:-1;;;;;21812:44:0;21821:6;-1:-1:-1;;;;;21812:44:0;;21840:15;21812:44;;;;1814:25:1;;1802:2;1787:18;;1668:177;21812:44:0;;;;;;;;21382:482;;;;;;21291:573;;;:::o;20690:593::-;20791:15;20808:23;20833:12;20847:23;20872:12;20886:18;20908:19;20919:7;20908:10;:19::i;:::-;-1:-1:-1;;;;;20956:15:0;;;;;;:7;:15;;;;;;20790:137;;-1:-1:-1;20790:137:0;;-1:-1:-1;20790:137:0;;-1:-1:-1;20790:137:0;-1:-1:-1;20790:137:0;-1:-1:-1;20790:137:0;-1:-1:-1;20956:28:0;;20790:137;20956:19;:28::i;:::-;-1:-1:-1;;;;;20938:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;21016:18;;;;;:7;:18;;;;;:39;;21039:15;21016:22;:39::i;:::-;-1:-1:-1;;;;;20995:18:0;;;;;;:7;:18;;;;;;;;:60;;;;21087:7;:18;;;;:39;;21110:15;21087:22;:39::i;20173:509::-;20272:15;20289:23;20314:12;20328:23;20353:12;20367:18;20389:19;20400:7;20389:10;:19::i;:::-;-1:-1:-1;;;;;20437:15:0;;;;;;:7;:15;;;;;;20271:137;;-1:-1:-1;20271:137:0;;-1:-1:-1;20271:137:0;;-1:-1:-1;20271:137:0;-1:-1:-1;20271:137:0;-1:-1:-1;20271:137:0;-1:-1:-1;20437:28:0;;20271:137;20437:19;:28::i;21872:649::-;21975:15;21992:23;22017:12;22031:23;22056:12;22070:18;22092:19;22103:7;22092:10;:19::i;:::-;-1:-1:-1;;;;;22140:15:0;;;;;;:7;:15;;;;;;21974:137;;-1:-1:-1;21974:137:0;;-1:-1:-1;21974:137:0;;-1:-1:-1;21974:137:0;-1:-1:-1;21974:137:0;-1:-1:-1;21974:137:0;-1:-1:-1;22140:28:0;;22160:7;22140:19;:28::i;:::-;-1:-1:-1;;;;;22122:15:0;;;;;;:7;:15;;;;;;;;:46;;;;22197:7;:15;;;;:28;;22217:7;22197:19;:28::i;14369:137::-;14433:7;14460:38;14485:12;;14460:20;14472:7;;14460;:11;;:20;;;;:::i;14514:149::-;14584:7;14611:44;14642:12;;14611:26;14623:13;;14611:7;:11;;:26;;;;:::i;13909:448::-;13987:19;14010:10;:8;:10::i;:::-;13987:33;-1:-1:-1;14031:18:0;14052:27;:10;13987:33;14052:14;:27::i;:::-;14131:4;14115:22;;;;:7;:22;;;;;;14031:48;;-1:-1:-1;14115:38:0;;14031:48;14115:26;:38::i;:::-;14106:4;14090:22;;;;:7;:22;;;;;;;;:63;;;;14167:11;:26;;;;;;14164:107;;;14249:4;14233:22;;;;:7;:22;;;;;;:38;;14260:10;14233:26;:38::i;:::-;14224:4;14208:22;;;;:7;:22;;;;;:63;14164:107;14285:14;;14282:67;;14306:43;;1814:25:1;;;14331:4:0;;-1:-1:-1;;;;;14306:43:0;;;;;1802:2:1;1787:18;14306:43:0;;;;;;;13976:381;;13909:448;;:::o;11808:147::-;11886:7;;:17;;11898:4;11886:11;:17::i;:::-;11876:7;:27;11927:10;;:20;;11942:4;11927:14;:20::i;:::-;11914:10;:33;-1:-1:-1;;11808:147:0:o;14:250:1:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:1;238:16;;231:27;14:250::o;269:396::-;418:2;407:9;400:21;381:4;450:6;444:13;493:6;488:2;477:9;473:18;466:34;509:79;581:6;576:2;565:9;561:18;556:2;548:6;544:15;509:79;:::i;:::-;649:2;628:15;-1:-1:-1;;624:29:1;609:45;;;;656:2;605:54;;269:396;-1:-1:-1;;269:396:1:o;670:131::-;-1:-1:-1;;;;;745:31:1;;735:42;;725:70;;791:1;788;781:12;806:315;874:6;882;935:2;923:9;914:7;910:23;906:32;903:52;;;951:1;948;941:12;903:52;990:9;977:23;1009:31;1034:5;1009:31;:::i;:::-;1059:5;1111:2;1096:18;;;;1083:32;;-1:-1:-1;;;806:315:1:o;1318:160::-;1383:20;;1439:13;;1432:21;1422:32;;1412:60;;1468:1;1465;1458:12;1412:60;1318:160;;;:::o;1483:180::-;1539:6;1592:2;1580:9;1571:7;1567:23;1563:32;1560:52;;;1608:1;1605;1598:12;1560:52;1631:26;1647:9;1631:26;:::i;1850:315::-;1915:6;1923;1976:2;1964:9;1955:7;1951:23;1947:32;1944:52;;;1992:1;1989;1982:12;1944:52;2031:9;2018:23;2050:31;2075:5;2050:31;:::i;:::-;2100:5;-1:-1:-1;2124:35:1;2155:2;2140:18;;2124:35;:::i;:::-;2114:45;;1850:315;;;;;:::o;2170:180::-;2229:6;2282:2;2270:9;2261:7;2257:23;2253:32;2250:52;;;2298:1;2295;2288:12;2250:52;-1:-1:-1;2321:23:1;;2170:180;-1:-1:-1;2170:180:1:o;2355:456::-;2432:6;2440;2448;2501:2;2489:9;2480:7;2476:23;2472:32;2469:52;;;2517:1;2514;2507:12;2469:52;2556:9;2543:23;2575:31;2600:5;2575:31;:::i;:::-;2625:5;-1:-1:-1;2682:2:1;2667:18;;2654:32;2695:33;2654:32;2695:33;:::i;:::-;2355:456;;2747:7;;-1:-1:-1;;;2801:2:1;2786:18;;;;2773:32;;2355:456::o;3484:247::-;3543:6;3596:2;3584:9;3575:7;3571:23;3567:32;3564:52;;;3612:1;3609;3602:12;3564:52;3651:9;3638:23;3670:31;3695:5;3670:31;:::i;3736:248::-;3801:6;3809;3862:2;3850:9;3841:7;3837:23;3833:32;3830:52;;;3878:1;3875;3868:12;3830:52;3914:9;3901:23;3891:33;;3943:35;3974:2;3963:9;3959:18;3943:35;:::i;4197:248::-;4265:6;4273;4326:2;4314:9;4305:7;4301:23;4297:32;4294:52;;;4342:1;4339;4332:12;4294:52;-1:-1:-1;;4365:23:1;;;4435:2;4420:18;;;4407:32;;-1:-1:-1;4197:248:1:o;4450:316::-;4521:6;4529;4537;4590:2;4578:9;4569:7;4565:23;4561:32;4558:52;;;4606:1;4603;4596:12;4558:52;4629:26;4645:9;4629:26;:::i;:::-;4619:36;;4674:35;4705:2;4694:9;4690:18;4674:35;:::i;:::-;4664:45;;4756:2;4745:9;4741:18;4728:32;4718:42;;4450:316;;;;;:::o;5031:388::-;5099:6;5107;5160:2;5148:9;5139:7;5135:23;5131:32;5128:52;;;5176:1;5173;5166:12;5128:52;5215:9;5202:23;5234:31;5259:5;5234:31;:::i;:::-;5284:5;-1:-1:-1;5341:2:1;5326:18;;5313:32;5354:33;5313:32;5354:33;:::i;:::-;5406:7;5396:17;;;5031:388;;;;;:::o;5424:248::-;5486:6;5494;5547:2;5535:9;5526:7;5522:23;5518:32;5515:52;;;5563:1;5560;5553:12;5515:52;5586:26;5602:9;5586:26;:::i;5677:356::-;5879:2;5861:21;;;5898:18;;;5891:30;5957:34;5952:2;5937:18;;5930:62;6024:2;6009:18;;5677:356::o;6742:127::-;6803:10;6798:3;6794:20;6791:1;6784:31;6834:4;6831:1;6824:15;6858:4;6855:1;6848:15;6874:127;6935:10;6930:3;6926:20;6923:1;6916:31;6966:4;6963:1;6956:15;6990:4;6987:1;6980:15;7006:128;7073:9;;;7094:11;;;7091:37;;;7108:18;;:::i;7139:127::-;7200:10;7195:3;7191:20;7188:1;7181:31;7231:4;7228:1;7221:15;7255:4;7252:1;7245:15;7271:135;7310:3;7331:17;;;7328:43;;7351:18;;:::i;:::-;-1:-1:-1;7398:1:1;7387:13;;7271:135::o;8868:287::-;8997:3;9035:6;9029:13;9051:66;9110:6;9105:3;9098:4;9090:6;9086:17;9051:66;:::i;:::-;9133:16;;;;;8868:287;-1:-1:-1;;8868:287:1:o;10456:125::-;10521:9;;;10542:10;;;10539:36;;;10555:18;;:::i;12698:168::-;12771:9;;;12802;;12819:15;;;12813:22;;12799:37;12789:71;;12840:18;;:::i;12871:217::-;12911:1;12937;12927:132;;12981:10;12976:3;12972:20;12969:1;12962:31;13016:4;13013:1;13006:15;13044:4;13041:1;13034:15;12927:132;-1:-1:-1;13073:9:1;;12871:217::o;13627:251::-;13697:6;13750:2;13738:9;13729:7;13725:23;13721:32;13718:52;;;13766:1;13763;13756:12;13718:52;13798:9;13792:16;13817:31;13842:5;13817:31;:::i;13883:980::-;14145:4;14193:3;14182:9;14178:19;14224:6;14213:9;14206:25;14250:2;14288:6;14283:2;14272:9;14268:18;14261:34;14331:3;14326:2;14315:9;14311:18;14304:31;14355:6;14390;14384:13;14421:6;14413;14406:22;14459:3;14448:9;14444:19;14437:26;;14498:2;14490:6;14486:15;14472:29;;14519:1;14529:195;14543:6;14540:1;14537:13;14529:195;;;14608:13;;-1:-1:-1;;;;;14604:39:1;14592:52;;14699:15;;;;14664:12;;;;14640:1;14558:9;14529:195;;;-1:-1:-1;;;;;;;14780:32:1;;;;14775:2;14760:18;;14753:60;-1:-1:-1;;;14844:3:1;14829:19;14822:35;14741:3;13883:980;-1:-1:-1;;;13883:980:1:o

Swarm Source

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