ETH Price: $3,449.12 (-2.42%)
Gas: 3 Gwei

Token

Ring of Pyro (RING)
 

Overview

Max Total Supply

100,000 RING

Holders

208

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
125 RING

Value
$0.00
0x69de5e18113ee6ea8a69cb46cabda371d5e581d6
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:
RingOfPyro

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-22
*/

/*
https://t.me/RINGofPYRO
ringofpyro.com
https://twitter.com/ringofpyro

$RING Ring of Pyro - V3
The ⭕️ Burn: Contract X.

1% BURN OF $RING
1% AUTO LP
2% BURN $PYRO
2% BURN "CONTRACT X"
2% MKTG

"CONTRACT X" to be variable to be called at anytime,
subject to community votes,
we burn the token we want and/or subject to fees.
*/

// SPDX-License-Identifier: MIT

pragma solidity >=0.7.0 <0.8.0;
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}

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

interface IUniswapV2Router01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

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

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    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");
        _;
    }
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

contract RingOfPyro is Context, IERC20, Ownable {
    using SafeMath for uint256;

    uint256 public _totalBurned;
    uint256 public _totalPyroBurned;
    uint256 public _totalContractXBurned;
    address public contractXaddress;
    bool private swapping = false;
    bool public burnMode = false;
    bool public pyroMode = false;
    bool public contractXMode = false;
    bool public liqMode = true;

    address payable public contractXdead = payable(0x000000000000000000000000000000000000dEaD);
    address payable public dead = payable(0x000000000000000000000000000000000000dEaD);
    address public PYRO = 0x89568569DA9C83CB35E59F92f5Df2F6CA829EEeE;
    address public migrator = 0x4f84943645c16DE8007aecAc2B33120191DD3a8d;
    address payable public mktg = payable(0x9C3543BF2d6f46bFdd3a0789628bba6a2B5DA7de);
    address payable public RING = payable(0x858Ff8811Bf1355047f817D09f3e0D800E7054aa);

    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private bots;

    address[] private _excluded;  
    bool public tradingLive = false;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 100000 * 1e9;

    string private _name = "Ring of Pyro";
    string private _symbol = "RING";
    uint8 private _decimals = 9;

    uint256 public j_burnFee = 0; 
    uint256 public _taxes = 8;
    uint256 public j_jeetTax;
    uint256 public jeetBuy = 0;
    uint256 public jeetSell = 0;

    uint256 private _previousBurnFee = j_burnFee;
    uint256 private _previousTaxes = _taxes;
    uint256 private j_previousJeetTax = j_jeetTax;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    
    uint256 public j_maxtxn;
    uint256 public _maxWalletAmount;
    uint256 public swapAmount = 70 * 1e9;

    uint256 liqDivisor = 8;  
    uint256 pyroDivisor = 4; 
    uint256 contractXDivisor = 4; 
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _tOwned[address(RING)] = _tTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[RING] = true;
        _isExcludedFromFee[mktg] = true;
        _isExcludedFromFee[dead] = true;
        _isExcludedFromFee[migrator] = true;
        _isExcludedFromFee[address(this)] = true;
        emit Transfer(address(0), address(RING), _tTotal);
    }

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

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

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

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

    function 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 totalBurned() public view returns (uint256) {
        return _totalBurned;
    }

    function burning(address _sender, uint tokensToBurn) private {  
        require( tokensToBurn <= balanceOf(_sender));
        _tOwned[_sender] = _tOwned[_sender].sub(tokensToBurn);
        _tTotal = _tTotal.sub(tokensToBurn);
        _totalBurned = _totalBurned.add(tokensToBurn);
        emit Transfer(_sender, address(0), tokensToBurn);
    }     
    
    function excludeFromFee(address account) external {
        require(_msgSender() == RING);
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) external {
        require(_msgSender() == RING);
        _isExcludedFromFee[account] = false;
    }
       
    function setMaxTxAmount(uint256 maxTxAmount) external {
        require(_msgSender() == RING);
        j_maxtxn = maxTxAmount * 1e9;
    }

    function setMaxWallet(uint256 maxWallet) external {
        require(_msgSender() == RING);
        _maxWalletAmount = maxWallet * 1e9;
    }
    
    function setSwapThresholdAmount(uint256 SwapThresholdAmount) external {
        require(_msgSender() == RING);
        swapAmount = SwapThresholdAmount * 1e9;
    }
    
    function claimETH (address walletaddress) external {
        require(_msgSender() == RING);
        payable(walletaddress).transfer(address(this).balance);
    }
    
    function clearStuckBalance (address payable walletaddress) external {
        require(_msgSender() == RING);
        walletaddress.transfer(address(this).balance);
    }
    
    function blacklist (address _address) external {
        require(_msgSender() == RING);
        bots[_address] = true;
    }
    
    function removeFromBlacklist (address _address) external {
        require(_msgSender() == RING);
        bots[_address] = false;
    }
    
    function getIsBlacklistedStatus (address _address) external view returns (bool) {
        return bots[_address];
    }
    
    function allowTrades() external onlyOwner {
        require(!tradingLive,"trading is already open");
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        _approve(address(this), address(uniswapV2Router), _tTotal);

        uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,address(RING),block.timestamp);
        _maxWalletAmount = 2000 * 1e9; //2%
        j_maxtxn = 2000 * 1e9; //2% 

        tradingLive = true;
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
        contractXaddress = (0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE);
    }

    function setSwapAndLiquifyEnabled (bool _enabled) external {
        require(_msgSender() == RING);
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}
    
    function removeAllFee() private {
        if(j_burnFee == 0 && _taxes == 0) return;
        
        _previousBurnFee = j_burnFee;
        _previousTaxes = _taxes;
        
        j_burnFee = 0;
        _taxes = 0;
    }
    
    function restoreAllFee() private {
        j_burnFee = _previousBurnFee;
        _taxes = _previousTaxes;
    }
    
    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 the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if (from != owner() && to != owner() && from != address(this) && to != address(this)) {
            if (from == uniswapV2Pair && to != address(uniswapV2Router) && ((!_isExcludedFromFee[from] || !_isExcludedFromFee[to]))) {
                require(balanceOf(to).add(amount) <= _maxWalletAmount, "You are being greedy. Exceeding Max Wallet.");
                require(amount <= j_maxtxn, "Slow down buddy...there is a max transaction");
            }
            if (from == uniswapV2Pair && to != address(uniswapV2Router) && !bots[to] && !bots[from]) {
                j_burnFee;
                _taxes;
                j_jeetTax = jeetBuy;
            }
                
            if (to == uniswapV2Pair && from != address(uniswapV2Router) && !bots[to] && !bots[from]) {
                j_burnFee;
                _taxes;
                j_jeetTax = jeetSell;
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));        
        if(contractTokenBalance >= j_maxtxn){
            contractTokenBalance = j_maxtxn;
        }
        
        bool overMinTokenBalance = contractTokenBalance >= swapAmount;
        if (overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled) {
            contractTokenBalance = swapAmount;
            swapAndLiquify(contractTokenBalance);
        }

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

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 tokensForLiq = (contractTokenBalance.div(liqDivisor));
        uint256 restOfTokens = (contractTokenBalance.sub(tokensForLiq));
        uint256 tokensForPyro = (contractTokenBalance.div(pyroDivisor));
        uint256 tokensForContractX = (contractTokenBalance.div(contractXDivisor));

        if (pyroMode && tokensForPyro > 0) {
            exchangeForPyro(tokensForPyro);
        }

        if (contractXMode && tokensForContractX > 0) {
            exchangeForContractX(tokensForContractX);
        }

        uint256 half = tokensForLiq.div(2);
        uint256 otherHalf = tokensForLiq.sub(half);
        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(half);
        uint256 newBalance = address(this).balance.sub(initialETHBalance);
        if (liqMode) {
            addLiquidity(otherHalf, newBalance);
        }

        uint256 nextBalance = address(this).balance;
        swapTokensForEth(restOfTokens);
        uint256 newestBalance = address(this).balance.sub(nextBalance);
        
        sendETHToFee(newestBalance);   
        
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            RING,
            block.timestamp
        );
    }       
        
    function _transferAgain(address sender, address recipient, uint256 amount, bool takeFee) private {
        require(!bots[sender] && !bots[recipient]);
        if(!tradingLive){
            require(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient], "Trading is not active yet.");
        } 

        if (!takeFee) { 
                removeAllFee();
        }
        
        uint256 tokensToBurn = amount.mul(j_burnFee).div(100);
        uint256 totalTaxTokens = amount.mul(_taxes.add(j_jeetTax)).div(100);

        uint256 tokensToTransfer = amount.sub(totalTaxTokens.add(tokensToBurn));

        uint256 amountPreBurn = amount.sub(tokensToBurn);
        if (burnMode) {
        burning(sender, tokensToBurn);
        }
        
        _tOwned[sender] = _tOwned[sender].sub(amountPreBurn);
        _tOwned[recipient] = _tOwned[recipient].add(tokensToTransfer);
        _tOwned[address(this)] = _tOwned[address(this)].add(totalTaxTokens);
        
        if(burnMode && sender != uniswapV2Pair && sender != address(this) && sender != address(uniswapV2Router) && (recipient == address(uniswapV2Router) || recipient == uniswapV2Pair)) {
            burning(uniswapV2Pair, tokensToBurn);
        }
        
        emit Transfer(sender, recipient, tokensToTransfer);
        if (totalTaxTokens > 0) {
            emit Transfer(sender, address(this), totalTaxTokens);
        }
        restoreAllFee();
    }

    //this is the last step down from the jeet taxes going to normal
    function beginJeetOne() external {
        require(_msgSender() == RING);
        jeetSell = 8;
    }

    //the first step down from jeet taxes
    function beginJeetTwo() external {
        require(_msgSender() == RING);
        contractXMode = true;
        pyroMode = true;
        burnMode = true;
        j_burnFee = 1;
        _taxes = 7;
        jeetSell = 0;
    }

    function exchangeForPyro(uint256 amount) private {
    	if (amount > 0) {
    	    swapRingForPyro(amount);
            _totalPyroBurned = _totalPyroBurned.add(amount);
	    }
    }

    function exchangeForContractX(uint256 amount) private {
    	if (amount > 0) {
    	    swapRingForContractX(amount);
            _totalContractXBurned = _totalContractXBurned.add(amount);
	    }
    }

    function enablePYRO(bool enabled) external {
        pyroMode = enabled;
        require(_msgSender() == RING);
    }

    function enableContractX(bool enabled) external {
        contractXMode = enabled;
        require(_msgSender() == RING);
    }

    function enableBurnMode(bool enabled) external {
        require(_msgSender() == RING);
        burnMode = enabled;
    }
    
    function enableLiqMode(bool enabled) external {
        require(_msgSender() == RING);
        liqMode = enabled;
    }

    function manualSwap() external {
        require(_msgSender() == RING);
        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance > 0) {
            swapTokensForEth(contractBalance);
        }
    }

    function manualSend() external {
        require(_msgSender() == RING);
        uint256 contractETHBalance = address(this).balance;
        if (contractETHBalance > 0) {
            sendETHToFee(contractETHBalance);
        }
    }

    function sendETHToFee(uint256 amount) private {
        uint256 transferAmt = amount.div(2);
        RING.transfer(transferAmt);
        mktg.transfer(amount.sub(transferAmt));
    }   

    function swapRingForContractX(uint256 tokenAmount) private {
        address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        path[2] = address(contractXaddress);

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

        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of Tokens
            path,
            contractXdead, // Burn address
            block.timestamp
        );
    }

    function swapRingForPyro(uint256 tokenAmount) private {
        address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        path[2] = address(PYRO);

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

        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of Tokens
            path,
            dead, // Burn address
            block.timestamp
        );
    }

    function setContractXaddress(address payable walletAddress, address payable walletDeadAddress) external {
        require(_msgSender() == RING);
        contractXaddress = walletAddress;
        contractXdead = walletDeadAddress;
    }
    
    function setPyroAddress(address payable walletAddress, address payable walletDeadAddress) external {
        require(_msgSender() == RING);
        PYRO = walletAddress;
        dead = walletDeadAddress;
    }

    function setMktg(address payable _address) external {
        require(_msgSender() == RING || _msgSender() == mktg);
        mktg = _address;
    }

    function changeContractX(address payable j_dead, address addressOfContractX) external {
        require(_msgSender() == RING);
        contractXaddress = addressOfContractX;
        contractXdead = j_dead;
    }
    
    function changePYRO(address payable j_dead, address PYROaddress) external {
        require(_msgSender() == RING);
        PYRO = PYROaddress;
        dead = j_dead;
    }

    function changeTax(uint256 burn, uint256 jeetbuy, uint256 jeetsell, uint256 taxes, uint256 _liqDivisor, uint256 _pyroDivide, uint256 _contractXDivide) external {
        require(_msgSender() == RING);
        j_burnFee = burn;
        jeetBuy = jeetbuy;
        jeetSell = jeetsell;
        _taxes = taxes;
        liqDivisor = _liqDivisor;
        pyroDivisor = _pyroDivide;
        contractXDivisor = _contractXDivide;
    }

    function airdrop(address recipient, uint256 amount) external {
        require(_msgSender() == RING);

        removeAllFee();
        _transfer(_msgSender(), recipient, amount * 10**9);
        restoreAllFee();
    }
    
    function airdropInternal(address recipient, uint256 amount) internal {
        removeAllFee();
        _transfer(_msgSender(), recipient, amount);
        restoreAllFee();
    }
    
    function airdropArray(address[] calldata newholders, uint256[] calldata amounts) external {
        require(_msgSender() == RING);

        uint256 iterator = 0;
        require(newholders.length == amounts.length, "must be the same length");
        while(iterator < newholders.length){
            airdropInternal(newholders[iterator], amounts[iterator] * 10**9);
            iterator += 1;
        }
    }
}

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":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"PYRO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RING","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalContractXBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalPyroBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"newholders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdropArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"allowTrades","outputs":[],"stateMutability":"nonpayable","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":"beginJeetOne","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"beginJeetTwo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"j_dead","type":"address"},{"internalType":"address","name":"addressOfContractX","type":"address"}],"name":"changeContractX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"j_dead","type":"address"},{"internalType":"address","name":"PYROaddress","type":"address"}],"name":"changePYRO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"jeetbuy","type":"uint256"},{"internalType":"uint256","name":"jeetsell","type":"uint256"},{"internalType":"uint256","name":"taxes","type":"uint256"},{"internalType":"uint256","name":"_liqDivisor","type":"uint256"},{"internalType":"uint256","name":"_pyroDivide","type":"uint256"},{"internalType":"uint256","name":"_contractXDivide","type":"uint256"}],"name":"changeTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"walletaddress","type":"address"}],"name":"claimETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"walletaddress","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractXMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractXaddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractXdead","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dead","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enableBurnMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enableContractX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enableLiqMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enablePYRO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getIsBlacklistedStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","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":[],"name":"j_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"j_jeetTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"j_maxtxn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jeetBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jeetSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"migrator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mktg","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pyroMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"walletAddress","type":"address"},{"internalType":"address payable","name":"walletDeadAddress","type":"address"}],"name":"setContractXaddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_address","type":"address"}],"name":"setMktg","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"walletAddress","type":"address"},{"internalType":"address payable","name":"walletDeadAddress","type":"address"}],"name":"setPyroAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"SwapThresholdAmount","type":"uint256"}],"name":"setSwapThresholdAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6005805464ffffffffff60a01b1916600160c01b179055600680546001600160a01b031990811661dead9081179092556007805482169092179091556008805482167389568569da9c83cb35e59f92f5df2f6ca829eeee179055600980548216734f84943645c16de8007aecac2b33120191dd3a8d179055600a80548216739c3543bf2d6f46bfdd3a0789628bba6a2b5da7de179055600b805490911673858ff8811bf1355047f817d09f3e0d800e7054aa1790556011805460ff19169055655af3107a400060125560c0604052600c60808190526b52696e67206f66205079726f60a01b60a0908152620000f89160139190620002fa565b506040805180820190915260048082526352494e4760e01b60209092019182526200012691601491620002fa565b506015805460ff1916600917905560006016819055600860178190556019829055601a829055601b91909155601c819055601854601d55601f805460ff60a81b1916600160a81b17905564104c533c00602255602355600460248190556025553480156200019357600080fd5b506000620001a0620002e7565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601254600b546001600160a01b03166000908152600c6020526040812091909155600190600e906200021b620002eb565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600b805483168252600e8552838220805487166001908117909155600a54841683528483208054881682179055600754841683528483208054881682179055600954841683528483208054881682179055308352848320805490971617909555935460125483519081529251911693927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef928290030190a3620003a6565b3390565b6000546001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200033257600085556200037d565b82601f106200034d57805160ff19168380011785556200037d565b828001600101855582156200037d579182015b828111156200037d57825182559160200191906001019062000360565b506200038b9291506200038f565b5090565b5b808211156200038b576000815560010162000390565b6133e180620003b66000396000f3fe6080604052600436106103f35760003560e01c806378de776f11610208578063c03d724211610118578063e7dfb411116100ab578063f79cb4eb1161007a578063f79cb4eb14610dc9578063f9f92be414610e17578063fc67364114610e4a578063fd01bd4c14610e76578063ff37656e14610e8b576103fa565b8063e7dfb41114610d42578063ea2f0b3714610d57578063ec28438a14610d8a578063f429389014610db4576103fa565b8063d89135cd116100e7578063d89135cd14610cc8578063dd62ed3e14610cdd578063e2c3e4b814610d18578063e674dfd714610d2d576103fa565b8063c03d724214610b66578063c49b9a8014610b92578063c97f269c14610bbe578063d4a3883f14610bf9576103fa565b806392700d4c1161019b578063a457c2d71161016a578063a457c2d714610ab5578063a8c4a13f14610aee578063a9059cbb14610b03578063aa9bae8814610b3c578063b8157fcf14610b51576103fa565b806392700d4c14610a3b57806395d89b4114610a50578063992ce15714610a655780639f6dcf3314610a7a576103fa565b80638a545232116101d75780638a545232146109c35780638ba4cc3c146109d85780638da5cb5b14610a115780638ea7815314610a26576103fa565b806378de776f146109845780637cd07e47146109995780637e66c0b91461095157806381486bf1146109ae576103fa565b80633987764f1161030357806351bc3c85116102965780635d0044ca116102655780635d0044ca146108ca5780636c0a24eb146108f457806370a082311461090957806371d8a1d11461093c578063764d72bf14610951576103fa565b806351bc3c851461083a5780635342acb41461084f578063537df3b61461088257806358e1320c146108b5576103fa565b80634a74bb02116102d25780634a74bb02146107a95780634b5de117146107be5780634de08a21146107d35780634f69a4fe1461080e576103fa565b80633987764f14610737578063437823ec1461074c57806346cb43041461077f57806349bd5a5e14610794576103fa565b80631884ed451161038657806329e04b4a1161035557806329e04b4a1461067f5780632e8fa821146106a9578063313ce567146106be57806336cf7c87146106e957806339509351146106fe576103fa565b80631884ed45146105c8578063233296f0146105fb57806323b872dd14610610578063243aa6f414610653576103fa565b806311704f52116103c257806311704f5214610530578063143c72ef146105455780631694505e1461058257806318160ddd146105b3576103fa565b806306fdde03146103ff578063084e4f8a14610489578063095ea7b3146104d05780630a920f2014610509576103fa565b366103fa57005b600080fd5b34801561040b57600080fd5b50610414610ea0565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561044e578181015183820152602001610436565b50505050905090810190601f16801561047b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561049557600080fd5b506104bc600480360360208110156104ac57600080fd5b50356001600160a01b0316610f36565b604080519115158252519081900360200190f35b3480156104dc57600080fd5b506104bc600480360360408110156104f357600080fd5b506001600160a01b038135169060200135610f54565b34801561051557600080fd5b5061051e610f72565b60408051918252519081900360200190f35b34801561053c57600080fd5b506104bc610f78565b34801561055157600080fd5b506105806004803603604081101561056857600080fd5b506001600160a01b0381358116916020013516610f81565b005b34801561058e57600080fd5b50610597610fd6565b604080516001600160a01b039092168252519081900360200190f35b3480156105bf57600080fd5b5061051e610fe5565b3480156105d457600080fd5b50610580600480360360208110156105eb57600080fd5b50356001600160a01b0316610feb565b34801561060757600080fd5b5061051e611059565b34801561061c57600080fd5b506104bc6004803603606081101561063357600080fd5b506001600160a01b0381358116916020810135909116906040013561105f565b34801561065f57600080fd5b506105806004803603602081101561067657600080fd5b503515156110e6565b34801561068b57600080fd5b50610580600480360360208110156106a257600080fd5b5035611127565b3480156106b557600080fd5b5061051e611159565b3480156106ca57600080fd5b506106d361115f565b6040805160ff9092168252519081900360200190f35b3480156106f557600080fd5b50610597611168565b34801561070a57600080fd5b506104bc6004803603604081101561072157600080fd5b506001600160a01b038135169060200135611177565b34801561074357600080fd5b506104bc6111c5565b34801561075857600080fd5b506105806004803603602081101561076f57600080fd5b50356001600160a01b03166111d5565b34801561078b57600080fd5b5061051e611220565b3480156107a057600080fd5b50610597611226565b3480156107b557600080fd5b506104bc611235565b3480156107ca57600080fd5b506104bc611245565b3480156107df57600080fd5b50610580600480360360408110156107f657600080fd5b506001600160a01b0381358116916020013516611255565b34801561081a57600080fd5b506105806004803603602081101561083157600080fd5b503515156112ad565b34801561084657600080fd5b506105806112f2565b34801561085b57600080fd5b506104bc6004803603602081101561087257600080fd5b50356001600160a01b0316611335565b34801561088e57600080fd5b50610580600480360360208110156108a557600080fd5b50356001600160a01b0316611353565b3480156108c157600080fd5b5061051e61139b565b3480156108d657600080fd5b50610580600480360360208110156108ed57600080fd5b50356113a1565b34801561090057600080fd5b5061051e6113d3565b34801561091557600080fd5b5061051e6004803603602081101561092c57600080fd5b50356001600160a01b03166113d9565b34801561094857600080fd5b5061051e6113f4565b34801561095d57600080fd5b506105806004803603602081101561097457600080fd5b50356001600160a01b03166113fa565b34801561099057600080fd5b506104bc61145a565b3480156109a557600080fd5b5061059761146a565b3480156109ba57600080fd5b5061051e611479565b3480156109cf57600080fd5b5061058061147f565b3480156109e457600080fd5b50610580600480360360408110156109fb57600080fd5b506001600160a01b0381351690602001356114e9565b348015610a1d57600080fd5b50610597611538565b348015610a3257600080fd5b506104bc611547565b348015610a4757600080fd5b5061051e611557565b348015610a5c57600080fd5b5061041461155d565b348015610a7157600080fd5b5061051e6115be565b348015610a8657600080fd5b5061058060048036036040811015610a9d57600080fd5b506001600160a01b03813581169160200135166115c4565b348015610ac157600080fd5b506104bc60048036036040811015610ad857600080fd5b506001600160a01b03813516906020013561161c565b348015610afa57600080fd5b50610597611684565b348015610b0f57600080fd5b506104bc60048036036040811015610b2657600080fd5b506001600160a01b038135169060200135611693565b348015610b4857600080fd5b506105806116a7565b348015610b5d57600080fd5b506105806116d5565b348015610b7257600080fd5b5061058060048036036020811015610b8957600080fd5b50351515611ac7565b348015610b9e57600080fd5b5061058060048036036020811015610bb557600080fd5b50351515611b0c565b348015610bca57600080fd5b5061058060048036036040811015610be157600080fd5b506001600160a01b0381358116916020013516611b86565b348015610c0557600080fd5b5061058060048036036040811015610c1c57600080fd5b810190602081018135640100000000811115610c3757600080fd5b820183602082011115610c4957600080fd5b80359060200191846020830284011164010000000083111715610c6b57600080fd5b919390929091602081019035640100000000811115610c8957600080fd5b820183602082011115610c9b57600080fd5b80359060200191846020830284011164010000000083111715610cbd57600080fd5b509092509050611bdb565b348015610cd457600080fd5b5061051e611cac565b348015610ce957600080fd5b5061051e60048036036040811015610d0057600080fd5b506001600160a01b0381358116916020013516611cb2565b348015610d2457600080fd5b50610597611cdd565b348015610d3957600080fd5b50610597611cec565b348015610d4e57600080fd5b50610597611cfb565b348015610d6357600080fd5b5061058060048036036020811015610d7a57600080fd5b50356001600160a01b0316611d0a565b348015610d9657600080fd5b5061058060048036036020811015610dad57600080fd5b5035611d52565b348015610dc057600080fd5b50610580611d84565b348015610dd557600080fd5b50610580600480360360e0811015610dec57600080fd5b5080359060208101359060408101359060608101359060808101359060a08101359060c00135611dbb565b348015610e2357600080fd5b5061058060048036036020811015610e3a57600080fd5b50356001600160a01b0316611e02565b348015610e5657600080fd5b5061058060048036036020811015610e6d57600080fd5b50351515611e4d565b348015610e8257600080fd5b5061051e611e78565b348015610e9757600080fd5b50610597611e7e565b60138054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f2c5780601f10610f0157610100808354040283529160200191610f2c565b820191906000526020600020905b815481529060010190602001808311610f0f57829003601f168201915b5050505050905090565b6001600160a01b03166000908152600f602052604090205460ff1690565b6000610f68610f61611e8d565b8484611e91565b5060015b92915050565b60175481565b60115460ff1681565b600b546001600160a01b0316610f95611e8d565b6001600160a01b031614610fa857600080fd5b600880546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b601e546001600160a01b031681565b60125490565b600b546001600160a01b0316610fff611e8d565b6001600160a01b0316148061102e5750600a546001600160a01b0316611023611e8d565b6001600160a01b0316145b61103757600080fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60205481565b600061106c848484611f7d565b6110dc84611078611e8d565b6110d7856040518060600160405280602881526020016132c1602891396001600160a01b038a166000908152600d60205260408120906110b6611e8d565b6001600160a01b03168152602081019190915260400160002054919061239f565b611e91565b5060019392505050565b6005805460ff60b81b1916600160b81b83151502179055600b546001600160a01b0316611111611e8d565b6001600160a01b03161461112457600080fd5b50565b600b546001600160a01b031661113b611e8d565b6001600160a01b03161461114e57600080fd5b633b9aca0002602255565b60225481565b60155460ff1690565b6007546001600160a01b031681565b6000610f68611184611e8d565b846110d785600d6000611195611e8d565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612436565b600554600160b01b900460ff1681565b600b546001600160a01b03166111e9611e8d565b6001600160a01b0316146111fc57600080fd5b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b601a5481565b601f546001600160a01b031681565b601f54600160a81b900460ff1681565b600554600160c01b900460ff1681565b600b546001600160a01b0316611269611e8d565b6001600160a01b03161461127c57600080fd5b600880546001600160a01b039283166001600160a01b03199182161790915560078054939092169216919091179055565b600b546001600160a01b03166112c1611e8d565b6001600160a01b0316146112d457600080fd5b60058054911515600160a81b0260ff60a81b19909216919091179055565b600b546001600160a01b0316611306611e8d565b6001600160a01b03161461131957600080fd5b6000611324306113d9565b905080156111245761112481612497565b6001600160a01b03166000908152600e602052604090205460ff1690565b600b546001600160a01b0316611367611e8d565b6001600160a01b03161461137a57600080fd5b6001600160a01b03166000908152600f60205260409020805460ff19169055565b60185481565b600b546001600160a01b03166113b5611e8d565b6001600160a01b0316146113c857600080fd5b633b9aca0002602155565b60215481565b6001600160a01b03166000908152600c602052604090205490565b60165481565b600b546001600160a01b031661140e611e8d565b6001600160a01b03161461142157600080fd5b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015611456573d6000803e3d6000fd5b5050565b600554600160b81b900460ff1681565b6009546001600160a01b031681565b60035481565b600b546001600160a01b0316611493611e8d565b6001600160a01b0316146114a657600080fd5b6005805460ff60a81b1960ff60b01b1960ff60b81b19909216600160b81b1791909116600160b01b1716600160a81b179055600160165560076017556000601a55565b600b546001600160a01b03166114fd611e8d565b6001600160a01b03161461151057600080fd5b61151861263e565b611530611523611e8d565b8383633b9aca0002611f7d565b611456612670565b6000546001600160a01b031690565b600554600160a81b900460ff1681565b60195481565b60148054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f2c5780601f10610f0157610100808354040283529160200191610f2c565b60045481565b600b546001600160a01b03166115d8611e8d565b6001600160a01b0316146115eb57600080fd5b600580546001600160a01b039283166001600160a01b03199182161790915560068054939092169216919091179055565b6000610f68611629611e8d565b846110d78560405180606001604052806025815260200161338760259139600d6000611653611e8d565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919061239f565b6005546001600160a01b031681565b6000610f686116a0611e8d565b8484611f7d565b600b546001600160a01b03166116bb611e8d565b6001600160a01b0316146116ce57600080fd5b6008601a55565b6116dd611e8d565b6000546001600160a01b0390811691161461173f576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60115460ff1615611797576040805162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e000000000000000000604482015290519081900360640190fd5b601e80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a0155916004808301926020929190829003018186803b1580156117f757600080fd5b505afa15801561180b573d6000803e3d6000fd5b505050506040513d602081101561182157600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b15801561187157600080fd5b505afa158015611885573d6000803e3d6000fd5b505050506040513d602081101561189b57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b1580156118ed57600080fd5b505af1158015611901573d6000803e3d6000fd5b505050506040513d602081101561191757600080fd5b5051601f80546001600160a01b0319166001600160a01b03928316179055601e546012546119489230921690611e91565b601e546001600160a01b031663f305d7194730611964816113d9565b600b54604080516001600160e01b031960e088901b1681526001600160a01b03948516600482015260248101939093526000604484018190526064840152921660848201524260a4820152905160c480830192606092919082900301818588803b1580156119d157600080fd5b505af11580156119e5573d6000803e3d6000fd5b50505050506040513d60608110156119fc57600080fd5b50506501d1a94a2000602181905560209081556011805460ff19166001179055601f54601e546040805163095ea7b360e01b81526001600160a01b03928316600482015260001960248201529051919092169263095ea7b392604480820193918290030181600087803b158015611a7257600080fd5b505af1158015611a86573d6000803e3d6000fd5b505050506040513d6020811015611a9c57600080fd5b5050600580546001600160a01b0319167395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce17905550565b600b546001600160a01b0316611adb611e8d565b6001600160a01b031614611aee57600080fd5b60058054911515600160c01b0260ff60c01b19909216919091179055565b600b546001600160a01b0316611b20611e8d565b6001600160a01b031614611b3357600080fd5b601f8054821515600160a81b810260ff60a81b199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b600b546001600160a01b0316611b9a611e8d565b6001600160a01b031614611bad57600080fd5b600580546001600160a01b039384166001600160a01b03199182161790915560068054929093169116179055565b600b546001600160a01b0316611bef611e8d565b6001600160a01b031614611c0257600080fd5b6000838214611c58576040805162461bcd60e51b815260206004820152601760248201527f6d757374206265207468652073616d65206c656e677468000000000000000000604482015290519081900360640190fd5b83811015611ca557611c9d858583818110611c6f57fe5b905060200201356001600160a01b0316848484818110611c8b57fe5b90506020020135633b9aca000261267e565b600101611c58565b5050505050565b60025490565b6001600160a01b039182166000908152600d6020908152604080832093909416825291909152205490565b600a546001600160a01b031681565b6008546001600160a01b031681565b6006546001600160a01b031681565b600b546001600160a01b0316611d1e611e8d565b6001600160a01b031614611d3157600080fd5b6001600160a01b03166000908152600e60205260409020805460ff19169055565b600b546001600160a01b0316611d66611e8d565b6001600160a01b031614611d7957600080fd5b633b9aca0002602055565b600b546001600160a01b0316611d98611e8d565b6001600160a01b031614611dab57600080fd5b4780156111245761112481612698565b600b546001600160a01b0316611dcf611e8d565b6001600160a01b031614611de257600080fd5b601696909655601994909455601a92909255601755602355602455602555565b600b546001600160a01b0316611e16611e8d565b6001600160a01b031614611e2957600080fd5b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b6005805460ff60b01b1916600160b01b83151502179055600b546001600160a01b0316611111611e8d565b60025481565b600b546001600160a01b031681565b3390565b6001600160a01b038316611ed65760405162461bcd60e51b81526004018080602001828103825260248152602001806133376024913960400191505060405180910390fd5b6001600160a01b038216611f1b5760405162461bcd60e51b81526004018080602001828103825260228152602001806132536022913960400191505060405180910390fd5b6001600160a01b038084166000818152600d6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316611fc25760405162461bcd60e51b81526004018080602001828103825260258152602001806133126025913960400191505060405180910390fd5b6001600160a01b0382166120075760405162461bcd60e51b81526004018080602001828103825260238152602001806132306023913960400191505060405180910390fd5b600081116120465760405162461bcd60e51b81526004018080602001828103825260298152602001806132e96029913960400191505060405180910390fd5b61204e611538565b6001600160a01b0316836001600160a01b0316141580156120885750612072611538565b6001600160a01b0316826001600160a01b031614155b801561209d57506001600160a01b0383163014155b80156120b257506001600160a01b0382163014155b156122c557601f546001600160a01b0384811691161480156120e25750601e546001600160a01b03838116911614155b801561212a57506001600160a01b0383166000908152600e602052604090205460ff16158061212a57506001600160a01b0382166000908152600e602052604090205460ff16155b156121c3576021546121458261213f856113d9565b90612436565b11156121825760405162461bcd60e51b815260040180806020018281038252602b815260200180613275602b913960400191505060405180910390fd5b6020548111156121c35760405162461bcd60e51b815260040180806020018281038252602c81526020018061335b602c913960400191505060405180910390fd5b601f546001600160a01b0384811691161480156121ee5750601e546001600160a01b03838116911614155b801561221357506001600160a01b0382166000908152600f602052604090205460ff16155b801561223857506001600160a01b0383166000908152600f602052604090205460ff16155b15612244576019546018555b601f546001600160a01b03838116911614801561226f5750601e546001600160a01b03848116911614155b801561229457506001600160a01b0382166000908152600f602052604090205460ff16155b80156122b957506001600160a01b0383166000908152600f602052604090205460ff16155b156122c557601a546018555b60006122d0306113d9565b905060205481106122e057506020545b602254811080159081906122fe5750601f54600160a01b900460ff16155b80156123185750601f546001600160a01b03868116911614155b801561232d5750601f54600160a81b900460ff165b1561234057602254915061234082612727565b6001600160a01b0385166000908152600e602052604090205460019060ff168061238257506001600160a01b0385166000908152600e602052604090205460ff165b1561238b575060005b612397868686846128a9565b505050505050565b6000818484111561242e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156123f35781810151838201526020016123db565b50505050905090810190601f1680156124205780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015612490576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124c657fe5b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561251a57600080fd5b505afa15801561252e573d6000803e3d6000fd5b505050506040513d602081101561254457600080fd5b505181518290600190811061255557fe5b6001600160a01b039283166020918202929092010152601e5461257b9130911684611e91565b601e5460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b838110156126015781810151838201526020016125e9565b505050509050019650505050505050600060405180830381600087803b15801561262a57600080fd5b505af1158015612397573d6000803e3d6000fd5b60165415801561264e5750601754155b156126585761266e565b60168054601b5560178054601c55600091829055555b565b601b54601655601c54601755565b61268661263e565b611530612691611e8d565b8383611f7d565b60006126a5826002612bff565b600b546040519192506001600160a01b03169082156108fc029083906000818181858888f193505050501580156126e0573d6000803e3d6000fd5b50600a546001600160a01b03166108fc6126fa8484612c41565b6040518115909202916000818181858888f19350505050158015612722573d6000803e3d6000fd5b505050565b601f805460ff60a01b1916600160a01b17905560235460009061274b908390612bff565b905060006127598383612c41565b9050600061277260245485612bff90919063ffffffff16565b9050600061278b60255486612bff90919063ffffffff16565b600554909150600160b01b900460ff1680156127a75750600082115b156127b5576127b582612c83565b600554600160b81b900460ff1680156127ce5750600081115b156127dc576127dc81612ca5565b60006127e9856002612bff565b905060006127f78683612c41565b90504761280383612497565b600061280f4783612c41565b600554909150600160c01b900460ff161561282e5761282e8382612cc7565b4761283888612497565b60006128444783612c41565b905061284f81612698565b604080518781526020810185905280820187905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15050601f805460ff60a01b19169055505050505050505050565b6001600160a01b0384166000908152600f602052604090205460ff161580156128eb57506001600160a01b0383166000908152600f602052604090205460ff16155b6128f457600080fd5b60115460ff1661298e576001600160a01b0384166000908152600e602052604090205460ff168061293d57506001600160a01b0383166000908152600e602052604090205460ff165b61298e576040805162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e000000000000604482015290519081900360640190fd5b8061299b5761299b61263e565b60006129bd60646129b760165486612d8590919063ffffffff16565b90612bff565b905060006129e760646129b76129e060185460175461243690919063ffffffff16565b8790612d85565b905060006129ff6129f88385612436565b8690612c41565b90506000612a0d8685612c41565b600554909150600160a81b900460ff1615612a2c57612a2c8885612dde565b6001600160a01b0388166000908152600c6020526040902054612a4f9082612c41565b6001600160a01b03808a166000908152600c60205260408082209390935590891681522054612a7e9083612436565b6001600160a01b0388166000908152600c6020526040808220929092553081522054612aaa9084612436565b306000908152600c6020526040902055600554600160a81b900460ff168015612ae15750601f546001600160a01b03898116911614155b8015612af657506001600160a01b0388163014155b8015612b105750601e546001600160a01b03898116911614155b8015612b405750601e546001600160a01b0388811691161480612b405750601f546001600160a01b038881169116145b15612b5b57601f54612b5b906001600160a01b031685612dde565b866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a38215612bed5760408051848152905130916001600160a01b038b16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35b612bf5612670565b5050505050505050565b600061249083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e94565b600061249083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061239f565b801561112457612c9281612ef9565b600354612c9f9082612436565b60035550565b801561112457612cb481613094565b600454612cc19082612436565b60045550565b601e54612cdf9030906001600160a01b031684611e91565b601e54600b546040805163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b158015612d5457600080fd5b505af1158015612d68573d6000803e3d6000fd5b50505050506040513d6060811015612d7f57600080fd5b50505050565b600082612d9457506000610f6c565b82820282848281612da157fe5b04146124905760405162461bcd60e51b81526004018080602001828103825260218152602001806132a06021913960400191505060405180910390fd5b612de7826113d9565b811115612df357600080fd5b6001600160a01b0382166000908152600c6020526040902054612e169082612c41565b6001600160a01b0383166000908152600c6020526040902055601254612e3c9082612c41565b601255600254612e4c9082612436565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60008183612ee35760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156123f35781810151838201526020016123db565b506000838581612eef57fe5b0495945050505050565b60408051600380825260808201909252600091602082016060803683370190505090503081600081518110612f2a57fe5b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612f7e57600080fd5b505afa158015612f92573d6000803e3d6000fd5b505050506040513d6020811015612fa857600080fd5b5051815182906001908110612fb957fe5b6001600160a01b039283166020918202929092010152600854825191169082906002908110612fe457fe5b6001600160a01b039283166020918202929092010152601e5461300a9130911684611e91565b601e54600754604051635c11d79560e01b8152600481018581526000602483018190526001600160a01b0393841660648401819052426084850181905260a060448601908152885160a487015288519690971696635c11d795968a9694958a9590929160c490910190602087810191028083838b83156126015781810151838201526020016125e9565b604080516003808252608082019092526000916020820160608036833701905050905030816000815181106130c557fe5b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561311957600080fd5b505afa15801561312d573d6000803e3d6000fd5b505050506040513d602081101561314357600080fd5b505181518290600190811061315457fe5b6001600160a01b03928316602091820292909201015260055482519116908290600290811061317f57fe5b6001600160a01b039283166020918202929092010152601e546131a59130911684611e91565b601e54600654604051635c11d79560e01b8152600481018581526000602483018190526001600160a01b0393841660648401819052426084850181905260a060448601908152885160a487015288519690971696635c11d795968a9694958a9590929160c490910190602087810191028083838b83156126015781810151838201526020016125e956fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373596f7520617265206265696e67206772656564792e20457863656564696e67204d61782057616c6c65742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373536c6f7720646f776e2062756464792e2e2e74686572652069732061206d6178207472616e73616374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208603b90dc698d5ef971f19933073ddc615af926f1bd30295fdaf9e064d45f32664736f6c63430007060033

Deployed Bytecode

0x6080604052600436106103f35760003560e01c806378de776f11610208578063c03d724211610118578063e7dfb411116100ab578063f79cb4eb1161007a578063f79cb4eb14610dc9578063f9f92be414610e17578063fc67364114610e4a578063fd01bd4c14610e76578063ff37656e14610e8b576103fa565b8063e7dfb41114610d42578063ea2f0b3714610d57578063ec28438a14610d8a578063f429389014610db4576103fa565b8063d89135cd116100e7578063d89135cd14610cc8578063dd62ed3e14610cdd578063e2c3e4b814610d18578063e674dfd714610d2d576103fa565b8063c03d724214610b66578063c49b9a8014610b92578063c97f269c14610bbe578063d4a3883f14610bf9576103fa565b806392700d4c1161019b578063a457c2d71161016a578063a457c2d714610ab5578063a8c4a13f14610aee578063a9059cbb14610b03578063aa9bae8814610b3c578063b8157fcf14610b51576103fa565b806392700d4c14610a3b57806395d89b4114610a50578063992ce15714610a655780639f6dcf3314610a7a576103fa565b80638a545232116101d75780638a545232146109c35780638ba4cc3c146109d85780638da5cb5b14610a115780638ea7815314610a26576103fa565b806378de776f146109845780637cd07e47146109995780637e66c0b91461095157806381486bf1146109ae576103fa565b80633987764f1161030357806351bc3c85116102965780635d0044ca116102655780635d0044ca146108ca5780636c0a24eb146108f457806370a082311461090957806371d8a1d11461093c578063764d72bf14610951576103fa565b806351bc3c851461083a5780635342acb41461084f578063537df3b61461088257806358e1320c146108b5576103fa565b80634a74bb02116102d25780634a74bb02146107a95780634b5de117146107be5780634de08a21146107d35780634f69a4fe1461080e576103fa565b80633987764f14610737578063437823ec1461074c57806346cb43041461077f57806349bd5a5e14610794576103fa565b80631884ed451161038657806329e04b4a1161035557806329e04b4a1461067f5780632e8fa821146106a9578063313ce567146106be57806336cf7c87146106e957806339509351146106fe576103fa565b80631884ed45146105c8578063233296f0146105fb57806323b872dd14610610578063243aa6f414610653576103fa565b806311704f52116103c257806311704f5214610530578063143c72ef146105455780631694505e1461058257806318160ddd146105b3576103fa565b806306fdde03146103ff578063084e4f8a14610489578063095ea7b3146104d05780630a920f2014610509576103fa565b366103fa57005b600080fd5b34801561040b57600080fd5b50610414610ea0565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561044e578181015183820152602001610436565b50505050905090810190601f16801561047b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561049557600080fd5b506104bc600480360360208110156104ac57600080fd5b50356001600160a01b0316610f36565b604080519115158252519081900360200190f35b3480156104dc57600080fd5b506104bc600480360360408110156104f357600080fd5b506001600160a01b038135169060200135610f54565b34801561051557600080fd5b5061051e610f72565b60408051918252519081900360200190f35b34801561053c57600080fd5b506104bc610f78565b34801561055157600080fd5b506105806004803603604081101561056857600080fd5b506001600160a01b0381358116916020013516610f81565b005b34801561058e57600080fd5b50610597610fd6565b604080516001600160a01b039092168252519081900360200190f35b3480156105bf57600080fd5b5061051e610fe5565b3480156105d457600080fd5b50610580600480360360208110156105eb57600080fd5b50356001600160a01b0316610feb565b34801561060757600080fd5b5061051e611059565b34801561061c57600080fd5b506104bc6004803603606081101561063357600080fd5b506001600160a01b0381358116916020810135909116906040013561105f565b34801561065f57600080fd5b506105806004803603602081101561067657600080fd5b503515156110e6565b34801561068b57600080fd5b50610580600480360360208110156106a257600080fd5b5035611127565b3480156106b557600080fd5b5061051e611159565b3480156106ca57600080fd5b506106d361115f565b6040805160ff9092168252519081900360200190f35b3480156106f557600080fd5b50610597611168565b34801561070a57600080fd5b506104bc6004803603604081101561072157600080fd5b506001600160a01b038135169060200135611177565b34801561074357600080fd5b506104bc6111c5565b34801561075857600080fd5b506105806004803603602081101561076f57600080fd5b50356001600160a01b03166111d5565b34801561078b57600080fd5b5061051e611220565b3480156107a057600080fd5b50610597611226565b3480156107b557600080fd5b506104bc611235565b3480156107ca57600080fd5b506104bc611245565b3480156107df57600080fd5b50610580600480360360408110156107f657600080fd5b506001600160a01b0381358116916020013516611255565b34801561081a57600080fd5b506105806004803603602081101561083157600080fd5b503515156112ad565b34801561084657600080fd5b506105806112f2565b34801561085b57600080fd5b506104bc6004803603602081101561087257600080fd5b50356001600160a01b0316611335565b34801561088e57600080fd5b50610580600480360360208110156108a557600080fd5b50356001600160a01b0316611353565b3480156108c157600080fd5b5061051e61139b565b3480156108d657600080fd5b50610580600480360360208110156108ed57600080fd5b50356113a1565b34801561090057600080fd5b5061051e6113d3565b34801561091557600080fd5b5061051e6004803603602081101561092c57600080fd5b50356001600160a01b03166113d9565b34801561094857600080fd5b5061051e6113f4565b34801561095d57600080fd5b506105806004803603602081101561097457600080fd5b50356001600160a01b03166113fa565b34801561099057600080fd5b506104bc61145a565b3480156109a557600080fd5b5061059761146a565b3480156109ba57600080fd5b5061051e611479565b3480156109cf57600080fd5b5061058061147f565b3480156109e457600080fd5b50610580600480360360408110156109fb57600080fd5b506001600160a01b0381351690602001356114e9565b348015610a1d57600080fd5b50610597611538565b348015610a3257600080fd5b506104bc611547565b348015610a4757600080fd5b5061051e611557565b348015610a5c57600080fd5b5061041461155d565b348015610a7157600080fd5b5061051e6115be565b348015610a8657600080fd5b5061058060048036036040811015610a9d57600080fd5b506001600160a01b03813581169160200135166115c4565b348015610ac157600080fd5b506104bc60048036036040811015610ad857600080fd5b506001600160a01b03813516906020013561161c565b348015610afa57600080fd5b50610597611684565b348015610b0f57600080fd5b506104bc60048036036040811015610b2657600080fd5b506001600160a01b038135169060200135611693565b348015610b4857600080fd5b506105806116a7565b348015610b5d57600080fd5b506105806116d5565b348015610b7257600080fd5b5061058060048036036020811015610b8957600080fd5b50351515611ac7565b348015610b9e57600080fd5b5061058060048036036020811015610bb557600080fd5b50351515611b0c565b348015610bca57600080fd5b5061058060048036036040811015610be157600080fd5b506001600160a01b0381358116916020013516611b86565b348015610c0557600080fd5b5061058060048036036040811015610c1c57600080fd5b810190602081018135640100000000811115610c3757600080fd5b820183602082011115610c4957600080fd5b80359060200191846020830284011164010000000083111715610c6b57600080fd5b919390929091602081019035640100000000811115610c8957600080fd5b820183602082011115610c9b57600080fd5b80359060200191846020830284011164010000000083111715610cbd57600080fd5b509092509050611bdb565b348015610cd457600080fd5b5061051e611cac565b348015610ce957600080fd5b5061051e60048036036040811015610d0057600080fd5b506001600160a01b0381358116916020013516611cb2565b348015610d2457600080fd5b50610597611cdd565b348015610d3957600080fd5b50610597611cec565b348015610d4e57600080fd5b50610597611cfb565b348015610d6357600080fd5b5061058060048036036020811015610d7a57600080fd5b50356001600160a01b0316611d0a565b348015610d9657600080fd5b5061058060048036036020811015610dad57600080fd5b5035611d52565b348015610dc057600080fd5b50610580611d84565b348015610dd557600080fd5b50610580600480360360e0811015610dec57600080fd5b5080359060208101359060408101359060608101359060808101359060a08101359060c00135611dbb565b348015610e2357600080fd5b5061058060048036036020811015610e3a57600080fd5b50356001600160a01b0316611e02565b348015610e5657600080fd5b5061058060048036036020811015610e6d57600080fd5b50351515611e4d565b348015610e8257600080fd5b5061051e611e78565b348015610e9757600080fd5b50610597611e7e565b60138054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f2c5780601f10610f0157610100808354040283529160200191610f2c565b820191906000526020600020905b815481529060010190602001808311610f0f57829003601f168201915b5050505050905090565b6001600160a01b03166000908152600f602052604090205460ff1690565b6000610f68610f61611e8d565b8484611e91565b5060015b92915050565b60175481565b60115460ff1681565b600b546001600160a01b0316610f95611e8d565b6001600160a01b031614610fa857600080fd5b600880546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b601e546001600160a01b031681565b60125490565b600b546001600160a01b0316610fff611e8d565b6001600160a01b0316148061102e5750600a546001600160a01b0316611023611e8d565b6001600160a01b0316145b61103757600080fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60205481565b600061106c848484611f7d565b6110dc84611078611e8d565b6110d7856040518060600160405280602881526020016132c1602891396001600160a01b038a166000908152600d60205260408120906110b6611e8d565b6001600160a01b03168152602081019190915260400160002054919061239f565b611e91565b5060019392505050565b6005805460ff60b81b1916600160b81b83151502179055600b546001600160a01b0316611111611e8d565b6001600160a01b03161461112457600080fd5b50565b600b546001600160a01b031661113b611e8d565b6001600160a01b03161461114e57600080fd5b633b9aca0002602255565b60225481565b60155460ff1690565b6007546001600160a01b031681565b6000610f68611184611e8d565b846110d785600d6000611195611e8d565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612436565b600554600160b01b900460ff1681565b600b546001600160a01b03166111e9611e8d565b6001600160a01b0316146111fc57600080fd5b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b601a5481565b601f546001600160a01b031681565b601f54600160a81b900460ff1681565b600554600160c01b900460ff1681565b600b546001600160a01b0316611269611e8d565b6001600160a01b03161461127c57600080fd5b600880546001600160a01b039283166001600160a01b03199182161790915560078054939092169216919091179055565b600b546001600160a01b03166112c1611e8d565b6001600160a01b0316146112d457600080fd5b60058054911515600160a81b0260ff60a81b19909216919091179055565b600b546001600160a01b0316611306611e8d565b6001600160a01b03161461131957600080fd5b6000611324306113d9565b905080156111245761112481612497565b6001600160a01b03166000908152600e602052604090205460ff1690565b600b546001600160a01b0316611367611e8d565b6001600160a01b03161461137a57600080fd5b6001600160a01b03166000908152600f60205260409020805460ff19169055565b60185481565b600b546001600160a01b03166113b5611e8d565b6001600160a01b0316146113c857600080fd5b633b9aca0002602155565b60215481565b6001600160a01b03166000908152600c602052604090205490565b60165481565b600b546001600160a01b031661140e611e8d565b6001600160a01b03161461142157600080fd5b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015611456573d6000803e3d6000fd5b5050565b600554600160b81b900460ff1681565b6009546001600160a01b031681565b60035481565b600b546001600160a01b0316611493611e8d565b6001600160a01b0316146114a657600080fd5b6005805460ff60a81b1960ff60b01b1960ff60b81b19909216600160b81b1791909116600160b01b1716600160a81b179055600160165560076017556000601a55565b600b546001600160a01b03166114fd611e8d565b6001600160a01b03161461151057600080fd5b61151861263e565b611530611523611e8d565b8383633b9aca0002611f7d565b611456612670565b6000546001600160a01b031690565b600554600160a81b900460ff1681565b60195481565b60148054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f2c5780601f10610f0157610100808354040283529160200191610f2c565b60045481565b600b546001600160a01b03166115d8611e8d565b6001600160a01b0316146115eb57600080fd5b600580546001600160a01b039283166001600160a01b03199182161790915560068054939092169216919091179055565b6000610f68611629611e8d565b846110d78560405180606001604052806025815260200161338760259139600d6000611653611e8d565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919061239f565b6005546001600160a01b031681565b6000610f686116a0611e8d565b8484611f7d565b600b546001600160a01b03166116bb611e8d565b6001600160a01b0316146116ce57600080fd5b6008601a55565b6116dd611e8d565b6000546001600160a01b0390811691161461173f576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60115460ff1615611797576040805162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e000000000000000000604482015290519081900360640190fd5b601e80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a0155916004808301926020929190829003018186803b1580156117f757600080fd5b505afa15801561180b573d6000803e3d6000fd5b505050506040513d602081101561182157600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b15801561187157600080fd5b505afa158015611885573d6000803e3d6000fd5b505050506040513d602081101561189b57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b1580156118ed57600080fd5b505af1158015611901573d6000803e3d6000fd5b505050506040513d602081101561191757600080fd5b5051601f80546001600160a01b0319166001600160a01b03928316179055601e546012546119489230921690611e91565b601e546001600160a01b031663f305d7194730611964816113d9565b600b54604080516001600160e01b031960e088901b1681526001600160a01b03948516600482015260248101939093526000604484018190526064840152921660848201524260a4820152905160c480830192606092919082900301818588803b1580156119d157600080fd5b505af11580156119e5573d6000803e3d6000fd5b50505050506040513d60608110156119fc57600080fd5b50506501d1a94a2000602181905560209081556011805460ff19166001179055601f54601e546040805163095ea7b360e01b81526001600160a01b03928316600482015260001960248201529051919092169263095ea7b392604480820193918290030181600087803b158015611a7257600080fd5b505af1158015611a86573d6000803e3d6000fd5b505050506040513d6020811015611a9c57600080fd5b5050600580546001600160a01b0319167395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce17905550565b600b546001600160a01b0316611adb611e8d565b6001600160a01b031614611aee57600080fd5b60058054911515600160c01b0260ff60c01b19909216919091179055565b600b546001600160a01b0316611b20611e8d565b6001600160a01b031614611b3357600080fd5b601f8054821515600160a81b810260ff60a81b199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b600b546001600160a01b0316611b9a611e8d565b6001600160a01b031614611bad57600080fd5b600580546001600160a01b039384166001600160a01b03199182161790915560068054929093169116179055565b600b546001600160a01b0316611bef611e8d565b6001600160a01b031614611c0257600080fd5b6000838214611c58576040805162461bcd60e51b815260206004820152601760248201527f6d757374206265207468652073616d65206c656e677468000000000000000000604482015290519081900360640190fd5b83811015611ca557611c9d858583818110611c6f57fe5b905060200201356001600160a01b0316848484818110611c8b57fe5b90506020020135633b9aca000261267e565b600101611c58565b5050505050565b60025490565b6001600160a01b039182166000908152600d6020908152604080832093909416825291909152205490565b600a546001600160a01b031681565b6008546001600160a01b031681565b6006546001600160a01b031681565b600b546001600160a01b0316611d1e611e8d565b6001600160a01b031614611d3157600080fd5b6001600160a01b03166000908152600e60205260409020805460ff19169055565b600b546001600160a01b0316611d66611e8d565b6001600160a01b031614611d7957600080fd5b633b9aca0002602055565b600b546001600160a01b0316611d98611e8d565b6001600160a01b031614611dab57600080fd5b4780156111245761112481612698565b600b546001600160a01b0316611dcf611e8d565b6001600160a01b031614611de257600080fd5b601696909655601994909455601a92909255601755602355602455602555565b600b546001600160a01b0316611e16611e8d565b6001600160a01b031614611e2957600080fd5b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b6005805460ff60b01b1916600160b01b83151502179055600b546001600160a01b0316611111611e8d565b60025481565b600b546001600160a01b031681565b3390565b6001600160a01b038316611ed65760405162461bcd60e51b81526004018080602001828103825260248152602001806133376024913960400191505060405180910390fd5b6001600160a01b038216611f1b5760405162461bcd60e51b81526004018080602001828103825260228152602001806132536022913960400191505060405180910390fd5b6001600160a01b038084166000818152600d6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316611fc25760405162461bcd60e51b81526004018080602001828103825260258152602001806133126025913960400191505060405180910390fd5b6001600160a01b0382166120075760405162461bcd60e51b81526004018080602001828103825260238152602001806132306023913960400191505060405180910390fd5b600081116120465760405162461bcd60e51b81526004018080602001828103825260298152602001806132e96029913960400191505060405180910390fd5b61204e611538565b6001600160a01b0316836001600160a01b0316141580156120885750612072611538565b6001600160a01b0316826001600160a01b031614155b801561209d57506001600160a01b0383163014155b80156120b257506001600160a01b0382163014155b156122c557601f546001600160a01b0384811691161480156120e25750601e546001600160a01b03838116911614155b801561212a57506001600160a01b0383166000908152600e602052604090205460ff16158061212a57506001600160a01b0382166000908152600e602052604090205460ff16155b156121c3576021546121458261213f856113d9565b90612436565b11156121825760405162461bcd60e51b815260040180806020018281038252602b815260200180613275602b913960400191505060405180910390fd5b6020548111156121c35760405162461bcd60e51b815260040180806020018281038252602c81526020018061335b602c913960400191505060405180910390fd5b601f546001600160a01b0384811691161480156121ee5750601e546001600160a01b03838116911614155b801561221357506001600160a01b0382166000908152600f602052604090205460ff16155b801561223857506001600160a01b0383166000908152600f602052604090205460ff16155b15612244576019546018555b601f546001600160a01b03838116911614801561226f5750601e546001600160a01b03848116911614155b801561229457506001600160a01b0382166000908152600f602052604090205460ff16155b80156122b957506001600160a01b0383166000908152600f602052604090205460ff16155b156122c557601a546018555b60006122d0306113d9565b905060205481106122e057506020545b602254811080159081906122fe5750601f54600160a01b900460ff16155b80156123185750601f546001600160a01b03868116911614155b801561232d5750601f54600160a81b900460ff165b1561234057602254915061234082612727565b6001600160a01b0385166000908152600e602052604090205460019060ff168061238257506001600160a01b0385166000908152600e602052604090205460ff165b1561238b575060005b612397868686846128a9565b505050505050565b6000818484111561242e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156123f35781810151838201526020016123db565b50505050905090810190601f1680156124205780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015612490576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124c657fe5b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561251a57600080fd5b505afa15801561252e573d6000803e3d6000fd5b505050506040513d602081101561254457600080fd5b505181518290600190811061255557fe5b6001600160a01b039283166020918202929092010152601e5461257b9130911684611e91565b601e5460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b838110156126015781810151838201526020016125e9565b505050509050019650505050505050600060405180830381600087803b15801561262a57600080fd5b505af1158015612397573d6000803e3d6000fd5b60165415801561264e5750601754155b156126585761266e565b60168054601b5560178054601c55600091829055555b565b601b54601655601c54601755565b61268661263e565b611530612691611e8d565b8383611f7d565b60006126a5826002612bff565b600b546040519192506001600160a01b03169082156108fc029083906000818181858888f193505050501580156126e0573d6000803e3d6000fd5b50600a546001600160a01b03166108fc6126fa8484612c41565b6040518115909202916000818181858888f19350505050158015612722573d6000803e3d6000fd5b505050565b601f805460ff60a01b1916600160a01b17905560235460009061274b908390612bff565b905060006127598383612c41565b9050600061277260245485612bff90919063ffffffff16565b9050600061278b60255486612bff90919063ffffffff16565b600554909150600160b01b900460ff1680156127a75750600082115b156127b5576127b582612c83565b600554600160b81b900460ff1680156127ce5750600081115b156127dc576127dc81612ca5565b60006127e9856002612bff565b905060006127f78683612c41565b90504761280383612497565b600061280f4783612c41565b600554909150600160c01b900460ff161561282e5761282e8382612cc7565b4761283888612497565b60006128444783612c41565b905061284f81612698565b604080518781526020810185905280820187905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15050601f805460ff60a01b19169055505050505050505050565b6001600160a01b0384166000908152600f602052604090205460ff161580156128eb57506001600160a01b0383166000908152600f602052604090205460ff16155b6128f457600080fd5b60115460ff1661298e576001600160a01b0384166000908152600e602052604090205460ff168061293d57506001600160a01b0383166000908152600e602052604090205460ff165b61298e576040805162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e000000000000604482015290519081900360640190fd5b8061299b5761299b61263e565b60006129bd60646129b760165486612d8590919063ffffffff16565b90612bff565b905060006129e760646129b76129e060185460175461243690919063ffffffff16565b8790612d85565b905060006129ff6129f88385612436565b8690612c41565b90506000612a0d8685612c41565b600554909150600160a81b900460ff1615612a2c57612a2c8885612dde565b6001600160a01b0388166000908152600c6020526040902054612a4f9082612c41565b6001600160a01b03808a166000908152600c60205260408082209390935590891681522054612a7e9083612436565b6001600160a01b0388166000908152600c6020526040808220929092553081522054612aaa9084612436565b306000908152600c6020526040902055600554600160a81b900460ff168015612ae15750601f546001600160a01b03898116911614155b8015612af657506001600160a01b0388163014155b8015612b105750601e546001600160a01b03898116911614155b8015612b405750601e546001600160a01b0388811691161480612b405750601f546001600160a01b038881169116145b15612b5b57601f54612b5b906001600160a01b031685612dde565b866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a38215612bed5760408051848152905130916001600160a01b038b16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35b612bf5612670565b5050505050505050565b600061249083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e94565b600061249083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061239f565b801561112457612c9281612ef9565b600354612c9f9082612436565b60035550565b801561112457612cb481613094565b600454612cc19082612436565b60045550565b601e54612cdf9030906001600160a01b031684611e91565b601e54600b546040805163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b158015612d5457600080fd5b505af1158015612d68573d6000803e3d6000fd5b50505050506040513d6060811015612d7f57600080fd5b50505050565b600082612d9457506000610f6c565b82820282848281612da157fe5b04146124905760405162461bcd60e51b81526004018080602001828103825260218152602001806132a06021913960400191505060405180910390fd5b612de7826113d9565b811115612df357600080fd5b6001600160a01b0382166000908152600c6020526040902054612e169082612c41565b6001600160a01b0383166000908152600c6020526040902055601254612e3c9082612c41565b601255600254612e4c9082612436565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60008183612ee35760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156123f35781810151838201526020016123db565b506000838581612eef57fe5b0495945050505050565b60408051600380825260808201909252600091602082016060803683370190505090503081600081518110612f2a57fe5b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612f7e57600080fd5b505afa158015612f92573d6000803e3d6000fd5b505050506040513d6020811015612fa857600080fd5b5051815182906001908110612fb957fe5b6001600160a01b039283166020918202929092010152600854825191169082906002908110612fe457fe5b6001600160a01b039283166020918202929092010152601e5461300a9130911684611e91565b601e54600754604051635c11d79560e01b8152600481018581526000602483018190526001600160a01b0393841660648401819052426084850181905260a060448601908152885160a487015288519690971696635c11d795968a9694958a9590929160c490910190602087810191028083838b83156126015781810151838201526020016125e9565b604080516003808252608082019092526000916020820160608036833701905050905030816000815181106130c557fe5b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561311957600080fd5b505afa15801561312d573d6000803e3d6000fd5b505050506040513d602081101561314357600080fd5b505181518290600190811061315457fe5b6001600160a01b03928316602091820292909201015260055482519116908290600290811061317f57fe5b6001600160a01b039283166020918202929092010152601e546131a59130911684611e91565b601e54600654604051635c11d79560e01b8152600481018581526000602483018190526001600160a01b0393841660648401819052426084850181905260a060448601908152885160a487015288519690971696635c11d795968a9694958a9590929160c490910190602087810191028083838b83156126015781810151838201526020016125e956fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373596f7520617265206265696e67206772656564792e20457863656564696e67204d61782057616c6c65742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373536c6f7720646f776e2062756464792e2e2e74686572652069732061206d6178207472616e73616374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208603b90dc698d5ef971f19933073ddc615af926f1bd30295fdaf9e064d45f32664736f6c63430007060033

Deployed Bytecode Sourcemap

8739:20184:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11692:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15302:120;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15302:120:0;-1:-1:-1;;;;;15302:120:0;;:::i;:::-;;;;;;;;;;;;;;;;;;12398:161;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12398:161:0;;;;;;;;:::i;10236:25::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;9943:31;;;;;;;;;;;;;:::i;26843:213::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26843:213:0;;;;;;;;;;:::i;:::-;;10519:41;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;10519:41:0;;;;;;;;;;;;;;11969:95;;;;;;;;;;;;;:::i;27064:150::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27064:150:0;-1:-1:-1;;;;;27064:150:0;;:::i;10689:23::-;;;;;;;;;;;;;:::i;12567:313::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12567:313:0;;;;;;;;;;;;;;;;;:::i;24363:130::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24363:130:0;;;;:::i;14474:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14474:167:0;;:::i;10757:36::-;;;;;;;;;;;;;:::i;11878:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9260:81;;;;;;;;;;;;;:::i;12888:218::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12888:218:0;;;;;;;;:::i;9053:28::-;;;;;;;;;;;;;:::i;13858:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13858:143:0;-1:-1:-1;;;;;13858:143:0;;:::i;10332:27::-;;;;;;;;;;;;;:::i;10567:28::-;;;;;;;;;;;;;:::i;10636:40::-;;;;;;;;;;;;;:::i;9128:26::-;;;;;;;;;;;;;:::i;27449:175::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27449:175:0;;;;;;;;;;:::i;24501:124::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24501:124:0;;;;:::i;24767:235::-;;;;;;;;;;;;;:::i;16997:124::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16997:124:0;-1:-1:-1;;;;;16997:124:0;;:::i;15152:138::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15152:138:0;-1:-1:-1;;;;;15152:138:0;;:::i;10268:24::-;;;;;;;;;;;;;:::i;14319:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14319:143:0;;:::i;10719:31::-;;;;;;;;;;;;;:::i;17472:117::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17472:117:0;-1:-1:-1;;;;;17472:117:0;;:::i;10200:28::-;;;;;;;;;;;;;:::i;14829:172::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14829:172:0;-1:-1:-1;;;;;14829:172:0;;:::i;9088:33::-;;;;;;;;;;;;;:::i;9419:68::-;;;;;;;;;;;;;:::i;8863:31::-;;;;;;;;;;;;;:::i;23587:232::-;;;;;;;;;;;;;:::i;28075:223::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28075:223:0;;;;;;;;:::i;8400:79::-;;;;;;;;;;;;;:::i;9018:28::-;;;;;;;;;;;;;:::i;10299:26::-;;;;;;;;;;;;;:::i;11783:87::-;;;;;;;;;;;;;:::i;8901:36::-;;;;;;;;;;;;;:::i;27222:215::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27222:215:0;;;;;;;;;;:::i;13114:269::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13114:269:0;;;;;;;;:::i;8944:31::-;;;;;;;;;;;;;:::i;12072:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12072:167:0;;;;;;;;:::i;23432:104::-;;;;;;;;;;;;;:::i;15434:874::-;;;;;;;;;;;;;:::i;24637:122::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24637:122:0;;;;:::i;16316:204::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16316:204:0;;;;:::i;26592:239::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26592:239:0;;;;;;;;;;:::i;28503:417::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28503:417:0;;-1:-1:-1;28503:417:0;-1:-1:-1;28503:417:0;:::i;13391:91::-;;;;;;;;;;;;;:::i;12247:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12247:143:0;;;;;;;;;;:::i;9494:81::-;;;;;;;;;;;;;:::i;9348:64::-;;;;;;;;;;;;;:::i;9163:90::-;;;;;;;;;;;;;:::i;14013:142::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14013:142:0;-1:-1:-1;;;;;14013:142:0;;:::i;14170:141::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14170:141:0;;:::i;25010:237::-;;;;;;;;;;;;;:::i;27632:435::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27632:435:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15013:127::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15013:127:0;-1:-1:-1;;;;;15013:127:0;;:::i;24235:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24235:120:0;;;;:::i;8829:27::-;;;;;;;;;;;;;:::i;9582:81::-;;;;;;;;;;;;;:::i;11692:83::-;11762:5;11755:12;;;;;;;;-1:-1:-1;;11755:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11729:13;;11755:12;;11762:5;;11755:12;;11762:5;11755:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11692:83;:::o;15302:120::-;-1:-1:-1;;;;;15400:14:0;15376:4;15400:14;;;:4;:14;;;;;;;;;15302:120::o;12398:161::-;12473:4;12490:39;12499:12;:10;:12::i;:::-;12513:7;12522:6;12490:8;:39::i;:::-;-1:-1:-1;12547:4:0;12398:161;;;;;:::o;10236:25::-;;;;:::o;9943:31::-;;;;;;:::o;26843:213::-;26977:4;;-1:-1:-1;;;;;26977:4:0;26961:12;:10;:12::i;:::-;-1:-1:-1;;;;;26961:20:0;;26953:29;;;;;;26993:4;:20;;-1:-1:-1;;;;;26993:20:0;;;-1:-1:-1;;;;;;26993:20:0;;;;;;;27024:4;:24;;;;;;;;;;;26843:213::o;10519:41::-;;;-1:-1:-1;;;;;10519:41:0;;:::o;11969:95::-;12049:7;;11969:95;:::o;27064:150::-;27151:4;;-1:-1:-1;;;;;27151:4:0;27135:12;:10;:12::i;:::-;-1:-1:-1;;;;;27135:20:0;;:44;;;-1:-1:-1;27175:4:0;;-1:-1:-1;;;;;27175:4:0;27159:12;:10;:12::i;:::-;-1:-1:-1;;;;;27159:20:0;;27135:44;27127:53;;;;;;27191:4;:15;;-1:-1:-1;;;;;;27191:15:0;-1:-1:-1;;;;;27191:15:0;;;;;;;;;;27064:150::o;10689:23::-;;;;:::o;12567:313::-;12665:4;12682:36;12692:6;12700:9;12711:6;12682:9;:36::i;:::-;12729:121;12738:6;12746:12;:10;:12::i;:::-;12760:89;12798:6;12760:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12760:19:0;;;;;;:11;:19;;;;;;12780:12;:10;:12::i;:::-;-1:-1:-1;;;;;12760:33:0;;;;;;;;;;;;-1:-1:-1;12760:33:0;;;:89;:37;:89::i;:::-;12729:8;:121::i;:::-;-1:-1:-1;12868:4:0;12567:313;;;;;:::o;24363:130::-;24422:13;:23;;-1:-1:-1;;;;24422:23:0;-1:-1:-1;;;24422:23:0;;;;;;;24480:4;;-1:-1:-1;;;;;24480:4:0;24464:12;:10;:12::i;:::-;-1:-1:-1;;;;;24464:20:0;;24456:29;;;;;;24363:130;:::o;14474:167::-;14579:4;;-1:-1:-1;;;;;14579:4:0;14563:12;:10;:12::i;:::-;-1:-1:-1;;;;;14563:20:0;;14555:29;;;;;;14630:3;14608:25;14595:10;:38;14474:167::o;10757:36::-;;;;:::o;11878:83::-;11944:9;;;;11878:83;:::o;9260:81::-;;;-1:-1:-1;;;;;9260:81:0;;:::o;12888:218::-;12976:4;12993:83;13002:12;:10;:12::i;:::-;13016:7;13025:50;13064:10;13025:11;:25;13037:12;:10;:12::i;:::-;-1:-1:-1;;;;;13025:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;13025:25:0;;;:34;;;;;;;;;;;:38;:50::i;9053:28::-;;;-1:-1:-1;;;9053:28:0;;;;;:::o;13858:143::-;13943:4;;-1:-1:-1;;;;;13943:4:0;13927:12;:10;:12::i;:::-;-1:-1:-1;;;;;13927:20:0;;13919:29;;;;;;-1:-1:-1;;;;;13959:27:0;;;;;:18;:27;;;;;:34;;-1:-1:-1;;13959:34:0;13989:4;13959:34;;;13858:143::o;10332:27::-;;;;:::o;10567:28::-;;;-1:-1:-1;;;;;10567:28:0;;:::o;10636:40::-;;;-1:-1:-1;;;10636:40:0;;;;;:::o;9128:26::-;;;-1:-1:-1;;;9128:26:0;;;;;:::o;27449:175::-;27558:4;;-1:-1:-1;;;;;27558:4:0;27542:12;:10;:12::i;:::-;-1:-1:-1;;;;;27542:20:0;;27534:29;;;;;;27574:4;:18;;-1:-1:-1;;;;;27574:18:0;;;-1:-1:-1;;;;;;27574:18:0;;;;;;;27603:4;:13;;;;;;;;;;;;;;27449:175::o;24501:124::-;24583:4;;-1:-1:-1;;;;;24583:4:0;24567:12;:10;:12::i;:::-;-1:-1:-1;;;;;24567:20:0;;24559:29;;;;;;24599:8;:18;;;;;-1:-1:-1;;;24599:18:0;-1:-1:-1;;;;24599:18:0;;;;;;;;;24501:124::o;24767:235::-;24833:4;;-1:-1:-1;;;;;24833:4:0;24817:12;:10;:12::i;:::-;-1:-1:-1;;;;;24817:20:0;;24809:29;;;;;;24849:23;24875:24;24893:4;24875:9;:24::i;:::-;24849:50;-1:-1:-1;24914:19:0;;24910:85;;24950:33;24967:15;24950:16;:33::i;16997:124::-;-1:-1:-1;;;;;17086:27:0;17062:4;17086:27;;;:18;:27;;;;;;;;;16997:124::o;15152:138::-;15244:4;;-1:-1:-1;;;;;15244:4:0;15228:12;:10;:12::i;:::-;-1:-1:-1;;;;;15228:20:0;;15220:29;;;;;;-1:-1:-1;;;;;15260:14:0;15277:5;15260:14;;;:4;:14;;;;;:22;;-1:-1:-1;;15260:22:0;;;15152:138::o;10268:24::-;;;;:::o;14319:143::-;14404:4;;-1:-1:-1;;;;;14404:4:0;14388:12;:10;:12::i;:::-;-1:-1:-1;;;;;14388:20:0;;14380:29;;;;;;14451:3;14439:15;14420:16;:34;14319:143::o;10719:31::-;;;;:::o;17472:117::-;-1:-1:-1;;;;;17565:16:0;17538:7;17565:16;;;:7;:16;;;;;;;17472:117::o;10200:28::-;;;;:::o;14829:172::-;14932:4;;-1:-1:-1;;;;;14932:4:0;14916:12;:10;:12::i;:::-;-1:-1:-1;;;;;14916:20:0;;14908:29;;;;;;14948:45;;-1:-1:-1;;;;;14948:22:0;;;14971:21;14948:45;;;;;;;;;14971:21;14948:22;:45;;;;;;;;;;;;;;;;;;;;;14829:172;:::o;9088:33::-;;;-1:-1:-1;;;9088:33:0;;;;;:::o;9419:68::-;;;-1:-1:-1;;;;;9419:68:0;;:::o;8863:31::-;;;;:::o;23587:232::-;23655:4;;-1:-1:-1;;;;;23655:4:0;23639:12;:10;:12::i;:::-;-1:-1:-1;;;;;23639:20:0;;23631:29;;;;;;23671:13;:20;;-1:-1:-1;;;;;;;;;;;;23671:20:0;;;-1:-1:-1;;;23671:20:0;23702:15;;;;-1:-1:-1;;;23702:15:0;23728;-1:-1:-1;;;23728:15:0;;;23687:4;23702:8;23754:13;23787:1;23671:13;23778:10;23671:20;23799:8;:12;23587:232::o;28075:223::-;28171:4;;-1:-1:-1;;;;;28171:4:0;28155:12;:10;:12::i;:::-;-1:-1:-1;;;;;28155:20:0;;28147:29;;;;;;28189:14;:12;:14::i;:::-;28214:50;28224:12;:10;:12::i;:::-;28238:9;28249:6;28258:5;28249:14;28214:9;:50::i;:::-;28275:15;:13;:15::i;8400:79::-;8438:7;8465:6;-1:-1:-1;;;;;8465:6:0;8400:79;:::o;9018:28::-;;;-1:-1:-1;;;9018:28:0;;;;;:::o;10299:26::-;;;;:::o;11783:87::-;11855:7;11848:14;;;;;;;;-1:-1:-1;;11848:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11822:13;;11848:14;;11855:7;;11848:14;;11855:7;11848:14;;;;;;;;;;;;;;;;;;;;;;;;8901:36;;;;:::o;27222:215::-;27343:4;;-1:-1:-1;;;;;27343:4:0;27327:12;:10;:12::i;:::-;-1:-1:-1;;;;;27327:20:0;;27319:29;;;;;;27359:16;:37;;-1:-1:-1;;;;;27359:37:0;;;-1:-1:-1;;;;;;27359:37:0;;;;;;;27407:13;:22;;;;;;;;;;;;;;27222:215::o;13114:269::-;13207:4;13224:129;13233:12;:10;:12::i;:::-;13247:7;13256:96;13295:15;13256:96;;;;;;;;;;;;;;;;;:11;:25;13268:12;:10;:12::i;:::-;-1:-1:-1;;;;;13256:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;13256:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;8944:31::-;;;-1:-1:-1;;;;;8944:31:0;;:::o;12072:167::-;12150:4;12167:42;12177:12;:10;:12::i;:::-;12191:9;12202:6;12167:9;:42::i;23432:104::-;23500:4;;-1:-1:-1;;;;;23500:4:0;23484:12;:10;:12::i;:::-;-1:-1:-1;;;;;23484:20:0;;23476:29;;;;;;23527:1;23516:8;:12;23432:104::o;15434:874::-;8537:12;:10;:12::i;:::-;8527:6;;-1:-1:-1;;;;;8527:6:0;;;:22;;;8519:67;;;;;-1:-1:-1;;;8519:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15496:11:::1;::::0;::::1;;15495:12;15487:47;;;::::0;;-1:-1:-1;;;15487:47:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;15656:15;:34:::0;;-1:-1:-1;;;;;;15656:34:0::1;15602:42;15656:34:::0;;::::1;::::0;;;15735:26:::1;::::0;;-1:-1:-1;;;15735:26:0;;;;15602:42;;15735:24:::1;::::0;:26:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;15602:42;15735:26;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;15735:26:0;15789:23:::1;::::0;;-1:-1:-1;;;15789:23:0;;;;-1:-1:-1;;;;;15717:56:0;;::::1;::::0;::::1;::::0;15782:4:::1;::::0;15789:21;;::::1;::::0;::::1;::::0;:23:::1;::::0;;::::1;::::0;15735:26:::1;::::0;15789:23;;;;;;;;:21;:23;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;15789:23:0;15717:96:::1;::::0;;-1:-1:-1;;;;;;15717:96:0::1;::::0;;;;;;-1:-1:-1;;;;;15717:96:0;;::::1;;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;15789:23:::1;::::0;15717:96;;;;;;;-1:-1:-1;15717:96:0;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;15717:96:0;15701:13:::1;:112:::0;;-1:-1:-1;;;;;;15701:112:0::1;-1:-1:-1::0;;;;;15701:112:0;;::::1;;::::0;;15856:15:::1;::::0;15874:7:::1;::::0;15824:58:::1;::::0;15841:4:::1;::::0;15856:15:::1;::::0;15824:8:::1;:58::i;:::-;15895:15;::::0;-1:-1:-1;;;;;15895:15:0::1;:31;15934:21;15965:4;15971:24;15965:4:::0;15971:9:::1;:24::i;:::-;16008:4;::::0;15895:135:::1;::::0;;-1:-1:-1;;;;;;15895:135:0::1;::::0;;;;;;-1:-1:-1;;;;;15895:135:0;;::::1;;::::0;::::1;::::0;;;;;;;;15996:1:::1;15895:135:::0;;;;;;;;;;16008:4;::::1;15895:135:::0;;;;16014:15:::1;15895:135:::0;;;;;;;;;;;::::1;::::0;;;;;;;;;;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;16060:10:0::1;16041:16;:29:::0;;;15895:135:::1;16086:21:::0;;;16126:11:::1;:18:::0;;-1:-1:-1;;16126:18:0::1;-1:-1:-1::0;16126:18:0::1;::::0;;16162:13:::1;::::0;16193:15:::1;::::0;15895:135;16155:71;;-1:-1:-1;;;16155:71:0;;-1:-1:-1;;;;;16193:15:0;;::::1;16155:71;::::0;::::1;::::0;-1:-1:-1;;16155:71:0;;;;;;16162:13;;;::::1;::::0;16155:29:::1;::::0;:71;;;;;;;;;;;-1:-1:-1;16162:13:0;16155:71;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;16237:16:0::1;:63:::0;;-1:-1:-1;;;;;;16237:63:0::1;16257:42;16237:63;::::0;;-1:-1:-1;15434:874:0:o;24637:122::-;24718:4;;-1:-1:-1;;;;;24718:4:0;24702:12;:10;:12::i;:::-;-1:-1:-1;;;;;24702:20:0;;24694:29;;;;;;24734:7;:17;;;;;-1:-1:-1;;;24734:17:0;-1:-1:-1;;;;24734:17:0;;;;;;;;;24637:122::o;16316:204::-;16410:4;;-1:-1:-1;;;;;16410:4:0;16394:12;:10;:12::i;:::-;-1:-1:-1;;;;;16394:20:0;;16386:29;;;;;;16426:21;:32;;;;;-1:-1:-1;;;16426:32:0;;-1:-1:-1;;;;16426:32:0;;;;;;;;;;16474:38;;;;;;;;;;;;;;;;16316:204;:::o;26592:239::-;26731:4;;-1:-1:-1;;;;;26731:4:0;26715:12;:10;:12::i;:::-;-1:-1:-1;;;;;26715:20:0;;26707:29;;;;;;26747:16;:32;;-1:-1:-1;;;;;26747:32:0;;;-1:-1:-1;;;;;;26747:32:0;;;;;;;26790:13;:33;;;;;;;;;;;26592:239::o;28503:417::-;28628:4;;-1:-1:-1;;;;;28628:4:0;28612:12;:10;:12::i;:::-;-1:-1:-1;;;;;28612:20:0;;28604:29;;;;;;28646:16;28685:35;;;28677:71;;;;;-1:-1:-1;;;28677:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;28765:28;;;28759:154;;;28809:64;28825:10;;28836:8;28825:20;;;;;;;;;;;;;-1:-1:-1;;;;;28825:20:0;28847:7;;28855:8;28847:17;;;;;;;;;;;;;28867:5;28847:25;28809:15;:64::i;:::-;28900:1;28888:13;28759:154;;;28503:417;;;;;:::o;13391:91::-;13462:12;;13391:91;:::o;12247:143::-;-1:-1:-1;;;;;12355:18:0;;;12328:7;12355:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12247:143::o;9494:81::-;;;-1:-1:-1;;;;;9494:81:0;;:::o;9348:64::-;;;-1:-1:-1;;;;;9348:64:0;;:::o;9163:90::-;;;-1:-1:-1;;;;;9163:90:0;;:::o;14013:142::-;14096:4;;-1:-1:-1;;;;;14096:4:0;14080:12;:10;:12::i;:::-;-1:-1:-1;;;;;14080:20:0;;14072:29;;;;;;-1:-1:-1;;;;;14112:27:0;14142:5;14112:27;;;:18;:27;;;;;:35;;-1:-1:-1;;14112:35:0;;;14013:142::o;14170:141::-;14259:4;;-1:-1:-1;;;;;14259:4:0;14243:12;:10;:12::i;:::-;-1:-1:-1;;;;;14243:20:0;;14235:29;;;;;;14300:3;14286:17;14275:8;:28;14170:141::o;25010:237::-;25076:4;;-1:-1:-1;;;;;25076:4:0;25060:12;:10;:12::i;:::-;-1:-1:-1;;;;;25060:20:0;;25052:29;;;;;;25121:21;25157:22;;25153:87;;25196:32;25209:18;25196:12;:32::i;27632:435::-;27827:4;;-1:-1:-1;;;;;27827:4:0;27811:12;:10;:12::i;:::-;-1:-1:-1;;;;;27811:20:0;;27803:29;;;;;;27843:9;:16;;;;27870:7;:17;;;;27898:8;:19;;;;27928:6;:14;27953:10;:24;27988:11;:25;28024:16;:35;27632:435::o;15013:127::-;15095:4;;-1:-1:-1;;;;;15095:4:0;15079:12;:10;:12::i;:::-;-1:-1:-1;;;;;15079:20:0;;15071:29;;;;;;-1:-1:-1;;;;;15111:14:0;;;;;:4;:14;;;;;:21;;-1:-1:-1;;15111:21:0;15128:4;15111:21;;;15013:127::o;24235:120::-;24289:8;:18;;-1:-1:-1;;;;24289:18:0;-1:-1:-1;;;24289:18:0;;;;;;;24342:4;;-1:-1:-1;;;;;24342:4:0;24326:12;:10;:12::i;8829:27::-;;;;:::o;9582:81::-;;;-1:-1:-1;;;;;9582:81:0;;:::o;455:98::-;535:10;455:98;:::o;17129:335::-;-1:-1:-1;;;;;17222:19:0;;17214:68;;;;-1:-1:-1;;;17214:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17301:21:0;;17293:68;;;;-1:-1:-1;;;17293:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17372:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;17424:32;;;;;;;;;;;;;;;;;17129:335;;;:::o;17597:1904::-;-1:-1:-1;;;;;17685:18:0;;17677:68;;;;-1:-1:-1;;;17677:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17764:16:0;;17756:64;;;;-1:-1:-1;;;17756:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17848:1;17839:6;:10;17831:64;;;;-1:-1:-1;;;17831:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17920:7;:5;:7::i;:::-;-1:-1:-1;;;;;17912:15:0;:4;-1:-1:-1;;;;;17912:15:0;;;:32;;;;;17937:7;:5;:7::i;:::-;-1:-1:-1;;;;;17931:13:0;:2;-1:-1:-1;;;;;17931:13:0;;;17912:32;:57;;;;-1:-1:-1;;;;;;17948:21:0;;17964:4;17948:21;;17912:57;:80;;;;-1:-1:-1;;;;;;17973:19:0;;17987:4;17973:19;;17912:80;17908:902;;;18021:13;;-1:-1:-1;;;;;18013:21:0;;;18021:13;;18013:21;:55;;;;-1:-1:-1;18052:15:0;;-1:-1:-1;;;;;18038:30:0;;;18052:15;;18038:30;;18013:55;:115;;;;-1:-1:-1;;;;;;18075:24:0;;;;;;:18;:24;;;;;;;;18074:25;;:52;;-1:-1:-1;;;;;;18104:22:0;;;;;;:18;:22;;;;;;;;18103:23;18074:52;18009:351;;;18186:16;;18157:25;18175:6;18157:13;18167:2;18157:9;:13::i;:::-;:17;;:25::i;:::-;:45;;18149:101;;;;-1:-1:-1;;;18149:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18287:8;;18277:6;:18;;18269:75;;;;-1:-1:-1;;;18269:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18386:13;;-1:-1:-1;;;;;18378:21:0;;;18386:13;;18378:21;:55;;;;-1:-1:-1;18417:15:0;;-1:-1:-1;;;;;18403:30:0;;;18417:15;;18403:30;;18378:55;:68;;;;-1:-1:-1;;;;;;18438:8:0;;;;;;:4;:8;;;;;;;;18437:9;18378:68;:83;;;;-1:-1:-1;;;;;;18451:10:0;;;;;;:4;:10;;;;;;;;18450:11;18378:83;18374:196;;;18547:7;;18535:9;:19;18374:196;18612:13;;-1:-1:-1;;;;;18606:19:0;;;18612:13;;18606:19;:55;;;;-1:-1:-1;18645:15:0;;-1:-1:-1;;;;;18629:32:0;;;18645:15;;18629:32;;18606:55;:68;;;;-1:-1:-1;;;;;;18666:8:0;;;;;;:4;:8;;;;;;;;18665:9;18606:68;:83;;;;-1:-1:-1;;;;;;18679:10:0;;;;;;:4;:10;;;;;;;;18678:11;18606:83;18602:197;;;18775:8;;18763:9;:20;18602:197;18822:28;18853:24;18871:4;18853:9;:24::i;:::-;18822:55;;18923:8;;18899:20;:32;18896:94;;-1:-1:-1;18970:8:0;;18896:94;19061:10;;19037:34;;;;;;;19086:40;;-1:-1:-1;19110:16:0;;-1:-1:-1;;;19110:16:0;;;;19109:17;19086:40;:65;;;;-1:-1:-1;19138:13:0;;-1:-1:-1;;;;;19130:21:0;;;19138:13;;19130:21;;19086:65;:90;;;;-1:-1:-1;19155:21:0;;-1:-1:-1;;;19155:21:0;;;;19086:90;19082:207;;;19216:10;;19193:33;;19241:36;19256:20;19241:14;:36::i;:::-;-1:-1:-1;;;;;19342:24:0;;19301:12;19342:24;;;:18;:24;;;;;;19316:4;;19342:24;;;:50;;-1:-1:-1;;;;;;19370:22:0;;;;;;:18;:22;;;;;;;;19342:50;19339:96;;;-1:-1:-1;19418:5:0;19339:96;19455:38;19470:4;19475:2;19478:6;19485:7;19455:14;:38::i;:::-;17597:1904;;;;;;:::o;7258:190::-;7344:7;7380:12;7372:6;;;;7364:29;;;;-1:-1:-1;;;7364:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7416:5:0;;;7258:190::o;6927:179::-;6985:7;7017:5;;;7041:6;;;;7033:46;;;;;-1:-1:-1;;;7033:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7097:1;6927:179;-1:-1:-1;;;6927:179:0:o;20775:589::-;20925:16;;;20939:1;20925:16;;;;;;;;20901:21;;20925:16;;;;;;;;;;-1:-1:-1;20925:16:0;20901:40;;20970:4;20952;20957:1;20952:7;;;;;;;;-1:-1:-1;;;;;20952:23:0;;;:7;;;;;;;;;;:23;;;;20996:15;;:22;;;-1:-1:-1;;;20996:22:0;;;;:15;;;;;:20;;:22;;;;;20952:7;;20996:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20996:22:0;20986:7;;:4;;20991:1;;20986:7;;;;;;-1:-1:-1;;;;;20986:32:0;;;:7;;;;;;;;;:32;21063:15;;21031:62;;21048:4;;21063:15;21081:11;21031:8;:62::i;:::-;21132:15;;:224;;-1:-1:-1;;;21132:224:0;;;;;;;;:15;:224;;;;;;21310:4;21132:224;;;;;;21330:15;21132:224;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21132:15:0;;;;:66;;21213:11;;21283:4;;21310;21330:15;21132:224;;;;;;;;;;;;;;;;:15;:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16630:229;16676:9;;:14;:29;;;;-1:-1:-1;16694:6:0;;:11;16676:29;16673:41;;;16707:7;;16673:41;16753:9;;;16734:16;:28;16790:6;;;16773:14;:23;-1:-1:-1;16817:13:0;;;;16841:10;16630:229;:::o;16871:114::-;16927:16;;16915:9;:28;16963:14;;16954:6;:23;16871:114::o;28310:181::-;28390:14;:12;:14::i;:::-;28415:42;28425:12;:10;:12::i;:::-;28439:9;28450:6;28415:9;:42::i;25255:186::-;25312:19;25334:13;:6;25345:1;25334:10;:13::i;:::-;25358:4;;:26;;25312:35;;-1:-1:-1;;;;;;25358:4:0;;:26;;;;;25312:35;;25358:4;:26;:4;:26;25312:35;25358:4;:26;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25395:4:0;;-1:-1:-1;;;;;25395:4:0;:38;25409:23;:6;25420:11;25409:10;:23::i;:::-;25395:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25255:186;;:::o;19509:1258::-;11200:16;:23;;-1:-1:-1;;;;11200:23:0;-1:-1:-1;;;11200:23:0;;;19643:10:::1;::::0;11200:23;;19618:36:::1;::::0;:20;;:24:::1;:36::i;:::-;19594:61:::0;-1:-1:-1;19666:20:0::1;19690:38;:20:::0;19594:61;19690:24:::1;:38::i;:::-;19666:63;;19740:21;19765:37;19790:11;;19765:20;:24;;:37;;;;:::i;:::-;19740:63;;19814:26;19844:42;19869:16;;19844:20;:24;;:42;;;;:::i;:::-;19904:8;::::0;19814:73;;-1:-1:-1;;;;19904:8:0;::::1;;;:29:::0;::::1;;;;19932:1;19916:13;:17;19904:29;19900:92;;;19950:30;19966:13;19950:15;:30::i;:::-;20008:13;::::0;-1:-1:-1;;;20008:13:0;::::1;;;:39:::0;::::1;;;;20046:1;20025:18;:22;20008:39;20004:112;;;20064:40;20085:18;20064:20;:40::i;:::-;20128:12;20143:19;:12:::0;20160:1:::1;20143:16;:19::i;:::-;20128:34:::0;-1:-1:-1;20173:17:0::1;20193:22;:12:::0;20128:34;20193:16:::1;:22::i;:::-;20173:42:::0;-1:-1:-1;20254:21:0::1;20286:22;20303:4:::0;20286:16:::1;:22::i;:::-;20319:18;20340:44;:21;20366:17:::0;20340:25:::1;:44::i;:::-;20399:7;::::0;20319:65;;-1:-1:-1;;;;20399:7:0;::::1;;;20395:75;;;20423:35;20436:9;20447:10;20423:12;:35::i;:::-;20504:21;20536:30;20553:12:::0;20536:16:::1;:30::i;:::-;20577:21;20601:38;:21;20627:11:::0;20601:25:::1;:38::i;:::-;20577:62;;20660:27;20673:13;20660:12;:27::i;:::-;20716:43;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;;;::::1;-1:-1:-1::0;;11246:16:0;:24;;-1:-1:-1;;;;11246:24:0;;;-1:-1:-1;;;;;;;;;19509:1258:0:o;21905:1449::-;-1:-1:-1;;;;;22022:12:0;;;;;;:4;:12;;;;;;;;22021:13;:33;;;;-1:-1:-1;;;;;;22039:15:0;;;;;;:4;:15;;;;;;;;22038:16;22021:33;22013:42;;;;;;22070:11;;;;22066:141;;-1:-1:-1;;;;;22105:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;22135:29:0;;;;;;:18;:29;;;;;;;;22105:59;22097:98;;;;;-1:-1:-1;;;22097:98:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;22225:7;22220:60;;22254:14;:12;:14::i;:::-;22300:20;22323:30;22349:3;22323:21;22334:9;;22323:6;:10;;:21;;;;:::i;:::-;:25;;:30::i;:::-;22300:53;;22364:22;22389:42;22427:3;22389:33;22400:21;22411:9;;22400:6;;:10;;:21;;;;:::i;:::-;22389:6;;:10;:33::i;:42::-;22364:67;-1:-1:-1;22444:24:0;22471:44;22482:32;22364:67;22501:12;22482:18;:32::i;:::-;22471:6;;:10;:44::i;:::-;22444:71;-1:-1:-1;22528:21:0;22552:24;:6;22563:12;22552:10;:24::i;:::-;22591:8;;22528:48;;-1:-1:-1;;;;22591:8:0;;;;22587:66;;;22612:29;22620:6;22628:12;22612:7;:29::i;:::-;-1:-1:-1;;;;;22691:15:0;;;;;;:7;:15;;;;;;:34;;22711:13;22691:19;:34::i;:::-;-1:-1:-1;;;;;22673:15:0;;;;;;;:7;:15;;;;;;:52;;;;22757:18;;;;;;;:40;;22780:16;22757:22;:40::i;:::-;-1:-1:-1;;;;;22736:18:0;;;;;;:7;:18;;;;;;:61;;;;22849:4;22833:22;;;;:42;;22860:14;22833:26;:42::i;:::-;22824:4;22808:22;;;;:7;:22;;;;;:67;22899:8;;-1:-1:-1;;;22899:8:0;;;;:35;;;;-1:-1:-1;22921:13:0;;-1:-1:-1;;;;;22911:23:0;;;22921:13;;22911:23;;22899:35;:62;;;;-1:-1:-1;;;;;;22938:23:0;;22956:4;22938:23;;22899:62;:100;;;;-1:-1:-1;22983:15:0;;-1:-1:-1;;;;;22965:34:0;;;22983:15;;22965:34;;22899:100;:173;;;;-1:-1:-1;23025:15:0;;-1:-1:-1;;;;;23004:37:0;;;23025:15;;23004:37;;:67;;-1:-1:-1;23058:13:0;;-1:-1:-1;;;;;23045:26:0;;;23058:13;;23045:26;23004:67;22896:241;;;23097:13;;23089:36;;-1:-1:-1;;;;;23097:13:0;23112:12;23089:7;:36::i;:::-;23179:9;-1:-1:-1;;;;;23162:45:0;23171:6;-1:-1:-1;;;;;23162:45:0;;23190:16;23162:45;;;;;;;;;;;;;;;;;;23222:18;;23218:103;;23262:47;;;;;;;;23287:4;;-1:-1:-1;;;;;23262:47:0;;;;;;;;;;;;23218:103;23331:15;:13;:15::i;:::-;21905:1449;;;;;;;;:::o;7710:132::-;7768:7;7795:39;7799:1;7802;7795:39;;;;;;;;;;;;;;;;;:3;:39::i;7114:136::-;7172:7;7199:43;7203:1;7206;7199:43;;;;;;;;;;;;;;;;;:3;:43::i;23827:186::-;23888:10;;23884:122;;23912:23;23928:6;23912:15;:23::i;:::-;23969:16;;:28;;23990:6;23969:20;:28::i;:::-;23950:16;:47;23827:186;:::o;24021:206::-;24087:10;;24083:137;;24111:28;24132:6;24111:20;:28::i;:::-;24178:21;;:33;;24204:6;24178:25;:33::i;:::-;24154:21;:57;24021:206;:::o;21372:510::-;21552:15;;21520:62;;21537:4;;-1:-1:-1;;;;;21552:15:0;21570:11;21520:8;:62::i;:::-;21625:15;;21829:4;;21625:249;;;-1:-1:-1;;;21625:249:0;;21697:4;21625:249;;;;;;;;;;:15;:249;;;;;;;;;;-1:-1:-1;;;;;21829:4:0;;;21625:249;;;;21848:15;21625:249;;;;;;:15;;;;;:31;;21664:9;;21625:249;;;;;;;;;;;;;;;21664:9;21625:15;:249;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;21372:510:0:o;7456:246::-;7514:7;7538:6;7534:47;;-1:-1:-1;7568:1:0;7561:8;;7534:47;7603:5;;;7607:1;7603;:5;:1;7627:5;;;;;:10;7619:56;;;;-1:-1:-1;;;7619:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13490:351;13589:18;13599:7;13589:9;:18::i;:::-;13573:12;:34;;13564:44;;;;;;-1:-1:-1;;;;;13638:16:0;;;;;;:7;:16;;;;;;:34;;13659:12;13638:20;:34::i;:::-;-1:-1:-1;;;;;13619:16:0;;;;;;:7;:16;;;;;:53;13693:7;;:25;;13705:12;13693:11;:25::i;:::-;13683:7;:35;13744:12;;:30;;13761:12;13744:16;:30::i;:::-;13729:12;:45;13790:43;;;;;;;;13816:1;;-1:-1:-1;;;;;13790:43:0;;;;;;;;;;;;13490:351;;:::o;7850:189::-;7936:7;7971:12;7964:5;7956:28;;;;-1:-1:-1;;;7956:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7995:9;8011:1;8007;:5;;;;;;;7850:189;-1:-1:-1;;;;;7850:189:0:o;26035:549::-;26124:16;;;26138:1;26124:16;;;;;;;;;26100:21;;26124:16;;;;;;;;;;-1:-1:-1;26124:16:0;26100:40;;26169:4;26151;26156:1;26151:7;;;;;;;;-1:-1:-1;;;;;26151:23:0;;;:7;;;;;;;;;;:23;;;;26195:15;;:22;;;-1:-1:-1;;;26195:22:0;;;;:15;;;;;:20;;:22;;;;;26151:7;;26195:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26195:22:0;26185:7;;:4;;26190:1;;26185:7;;;;;;-1:-1:-1;;;;;26185:32:0;;;:7;;;;;;;;;:32;26246:4;;26228:7;;26246:4;;;26228;;26233:1;;26228:7;;;;;;-1:-1:-1;;;;;26228:23:0;;;:7;;;;;;;;;:23;26296:15;;26264:62;;26281:4;;26296:15;26314:11;26264:8;:62::i;:::-;26339:15;;26515:4;;26339:237;;-1:-1:-1;;;26339:237:0;;;;;;;;-1:-1:-1;26339:237:0;;;;;;-1:-1:-1;;;;;26515:4:0;;;26339:237;;;;;;26550:15;26339:237;;;;;;;;;;;;;;;;;;;;;:15;;;;;:69;;:237;;-1:-1:-1;;26339:237:0;;;;;;;;;;-1:-1:-1;26339:237:0;;;;;;;;-1:-1:-1;26339:237:0;;;;;;;;;;;;;;;;25452:575;25546:16;;;25560:1;25546:16;;;;;;;;;25522:21;;25546:16;;;;;;;;;;-1:-1:-1;25546:16:0;25522:40;;25591:4;25573;25578:1;25573:7;;;;;;;;-1:-1:-1;;;;;25573:23:0;;;:7;;;;;;;;;;:23;;;;25617:15;;:22;;;-1:-1:-1;;;25617:22:0;;;;:15;;;;;:20;;:22;;;;;25573:7;;25617:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25617:22:0;25607:7;;:4;;25612:1;;25607:7;;;;;;-1:-1:-1;;;;;25607:32:0;;;:7;;;;;;;;;:32;25668:16;;25650:7;;25668:16;;;25650:4;;25655:1;;25650:7;;;;;;-1:-1:-1;;;;;25650:35:0;;;:7;;;;;;;;;:35;25730:15;;25698:62;;25715:4;;25730:15;25748:11;25698:8;:62::i;:::-;25773:15;;25949:13;;25773:246;;-1:-1:-1;;;25773:246:0;;;;;;;;-1:-1:-1;25773:246:0;;;;;;-1:-1:-1;;;;;25949:13:0;;;25773:246;;;;;;25993:15;25773:246;;;;;;;;;;;;;;;;;;;;;:15;;;;;:69;;:246;;-1:-1:-1;;25773:246:0;;;;;;;;;;-1:-1:-1;25773:246:0;;;;;;;;-1:-1:-1;25773:246:0;;;;;;;;;;;;;;;

Swarm Source

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