ETH Price: $2,802.91 (+2.99%)
 

Overview

Max Total Supply

994,856,104,297.297542052597383378 RIP

Holders

23

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
8,844,132,980.350136713875271022 RIP

Value
$0.00
0x0178af82192597976951f09cd1075d9f2975806f
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:
RippleInu

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*                                                                

        ██████  ██ ██████  ██████  ██      ███████     ██ ███    ██ ██    ██ 
        ██   ██ ██ ██   ██ ██   ██ ██      ██          ██ ████   ██ ██    ██ 
        ██████  ██ ██████  ██████  ██      █████       ██ ██ ██  ██ ██    ██ 
        ██   ██ ██ ██      ██      ██      ██          ██ ██  ██ ██ ██    ██ 
        ██   ██ ██ ██      ██      ███████ ███████     ██ ██   ████  ██████  

* About this Project: A new meme coin birthed by fans of the XRP community. Ripple Inu is Hyper-deflationary with an
                      automatic 2% Reflection and 2% Burn system. One of Ripple Inu's key utility is the building of a thriving,
                      supportive and engaging community that spreads the awareness of XRP, creating that ripple effect.                                                                     
                                                                       
* Website: https://rippleinu.wixsite.com/ripple-inu
* Telegram: https://t.me/+7hfLcCZLIIU1MjIx
* Twitter: https://twitter.com/RIPPLEINUXRP

*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

interface IERC20 {

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}
    
library SafeMath {
  
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

   
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }


    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}


library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}


library Address {
  
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

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

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

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

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

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

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

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}


interface IUniswapV2Router02 is IUniswapV2Router01 {

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

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}


contract RippleInu is Context, IERC20, Ownable {

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


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

    address public router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    
    uint256 private constant MAX = ~uint256(0);
    
    uint256 private _tFeeTotal;

    uint256 public constant MAX_TAX_FEE = 250;  //25% Max fee

    string public constant _name ="Ripple Inu";
    string public constant _symbol = "RIP";
    uint8 private constant _decimals = 18;

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

    uint256 public numTokensSellToAddToLiquidity = 5000 * 10**_decimals;
	
	uint256 public _walletMax =  _tTotal.mul(1).div(100);     //1%
	bool public checkWalletLimit = true;

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

    uint256 private _burnFee = 0;
    uint256 private _previousBurnFee = _burnFee;

    uint256 private _LiquidityFee = 0;
    uint256 private _previousLiquidityFee = _LiquidityFee;

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

    uint256 private _DeveloperFee = 0;
    uint256 private _previousDeveloperFee = _DeveloperFee;

    uint256 public AmountForLiquidity;
    uint256 public AmountForMarketing;
    uint256 public AmountForDeveloper;

    address public MarketingWallet = address(0xf0D298c38E86671021f44E3f15b9c6377A095FA7);
    address public DeveloperWallet = address(0xEA5f064c70f3107C62cd83BF7eC86752F151BA8f); 
    address public LiquidityReciever;

    struct BuyFee{
        uint256 setTaxFee;
        uint256 setBurnFee;
        uint256 setLiquidityFee;
        uint256 setMarketingFee;
        uint256 setDeveloperFee;     
    }

    struct SellFee{
        uint256 setTaxFee;
        uint256 setBurnFee;
        uint256 setLiquidityFee;
        uint256 setMarketingFee;
        uint256 setDeveloperFee;     
    }

    BuyFee public buyFee;
    SellFee public sellFee;

    IUniswapV2Router02 public pcsV2Router;
    address public pcsV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;    
    
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor ()  {       
        
        _rOwned[msg.sender] = _rTotal;

        LiquidityReciever = msg.sender;

        buyFee.setTaxFee = 20;
        buyFee.setBurnFee = 20;
        buyFee.setLiquidityFee = 30;
        buyFee.setMarketingFee = 20;
        buyFee.setDeveloperFee = 10;
        
        sellFee.setTaxFee = 20;
        sellFee.setBurnFee = 20;
        sellFee.setLiquidityFee = 30;
        sellFee.setMarketingFee = 20;
        sellFee.setDeveloperFee = 10;
                
        IUniswapV2Router02 _pcsV2Router = IUniswapV2Router02(router);
            // Create a uniswap pair for this new token
        pcsV2Pair = IUniswapV2Factory(_pcsV2Router.factory())
            .createPair(address(this), _pcsV2Router.WETH());

        // set the rest of the contract variables
        pcsV2Router = _pcsV2Router;

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

        AutomaticMarketPair[pcsV2Pair] = true;
        
        _isExcludedFromFee[msg.sender] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[address(zero)] = true;
        _isExcludedFromFee[address(dead)] = true;

        isWalletLimitExempt[msg.sender] = true;
        isWalletLimitExempt[address(pcsV2Pair)] = true;
        isWalletLimitExempt[address(this)] = true;

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

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

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

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

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

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

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

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

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

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

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

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

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

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

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

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

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

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

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
    
    function excludeFromFee(address account) public onlyOwner() {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner() {
        _isExcludedFromFee[account] = false;
    }

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

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

    function setLiquidityWallet(address payable newFeeWallet) external onlyOwner {
        LiquidityReciever = newFeeWallet;
    }

    function setDeveloperWallet(address payable newFeeWallet) external onlyOwner {
        DeveloperWallet = newFeeWallet;
    }
    
    //to recieve ETH from pcsV2Router when swaping
    receive() external payable {}

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

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

    function _getTValues(uint256 tAmount) private returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

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

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);

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

    function burnFeeTransfer(uint256 _amount) private {
        uint tBurnFee = _amount.mul(_burnFee).div(10**3);
        uint256 currentRate =  _getRate();
        if (tBurnFee > 0) {
            uint256 rBurnFee = tBurnFee * currentRate;
            _tTotal = _tTotal - tBurnFee;
            _rTotal = _rTotal - rBurnFee;
        }
    }

    function calculateLiquidityFee(uint256 _amount) private returns (uint256) {

        AmountForLiquidity += _amount.mul(_LiquidityFee).div(10**3);
        AmountForMarketing += _amount.mul(_MarketingFee).div(10**3);
        AmountForDeveloper += _amount.mul(_DeveloperFee).div(10**3);
        burnFeeTransfer(_amount);

        return _amount.mul(_LiquidityFee + _MarketingFee + _DeveloperFee + _burnFee).div(
            10**3
        );
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _burnFee == 0 && _LiquidityFee == 0 && _MarketingFee == 0 && _DeveloperFee == 0) return; 
        
        _previousTaxFee = _taxFee;
        _previousBurnFee = _burnFee;
        _previousLiquidityFee = _LiquidityFee;
        _previousMarketingFee = _MarketingFee;
        _previousDeveloperFee = _DeveloperFee;
        
        _taxFee = 0;
        _burnFee = 0;
        _LiquidityFee = 0;
        _MarketingFee = 0;
        _DeveloperFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _burnFee = _previousBurnFee;
        _LiquidityFee = _previousLiquidityFee;
        _MarketingFee = _previousMarketingFee;
        _DeveloperFee = _previousDeveloperFee;
    }

    function setBuy () private {
        _taxFee = buyFee.setTaxFee;
        _burnFee = buyFee.setBurnFee;
        _LiquidityFee = buyFee.setLiquidityFee;
        _MarketingFee = buyFee.setMarketingFee;
        _DeveloperFee = buyFee.setDeveloperFee;
    }
    
    function setSell() private {
        _taxFee = sellFee.setTaxFee;
        _burnFee = sellFee.setBurnFee;
        _LiquidityFee = sellFee.setLiquidityFee;
        _MarketingFee = sellFee.setMarketingFee;
        _DeveloperFee = sellFee.setDeveloperFee;
    }

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

    function setNumTokensSellToAddToLiquidity(uint _value) public onlyOwner {
        numTokensSellToAddToLiquidity = _value;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from zero address");
        require(spender != address(0), "ERC20: approve to zero address");

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

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

        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            !inSwapAndLiquify &&
            overMinTokenBalance &&
            AutomaticMarketPair[to] &&
            swapAndLiquifyEnabled
        ) {
            
            swapAndLiquify();
            
        }

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

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

    function sendToMarketing(uint _token) private {
        uint initalBalance = address(this).balance;
        swapTokensForETH(_token);
        uint recievedBalance = address(this).balance.sub(initalBalance);
        payable(MarketingWallet).transfer(recievedBalance);     
        AmountForMarketing = AmountForMarketing.sub(_token);
    }

    function sendToDeveloper(uint _token) private {
        uint initalBalance = address(this).balance;
        swapTokensForETH(_token);
        uint recievedBalance = address(this).balance.sub(initalBalance);
        payable(DeveloperWallet).transfer(recievedBalance);       
        AmountForDeveloper = AmountForDeveloper.sub(_token);
    }

    function swapForLiquify(uint _token) private {
        uint half = _token.div(2);
        uint otherhalf = _token.sub(half);

        uint initalBalance = address(this).balance;
        swapTokensForETH(half);
        uint recievedBalance = address(this).balance.sub(initalBalance);
        addLiquidity(otherhalf,recievedBalance);
        AmountForLiquidity = AmountForLiquidity.sub(_token);
        emit SwapAndLiquify(half, recievedBalance, otherhalf);
    }  

    function swapAndLiquify() private lockTheSwap {
        if(AmountForMarketing > 0) sendToMarketing(AmountForMarketing);
        if(AmountForDeveloper > 0) sendToDeveloper(AmountForDeveloper);
        if(AmountForLiquidity > 0) swapForLiquify(AmountForLiquidity);
    }
    
    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] = pcsV2Router.WETH();

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {

        // add the liquidity
        pcsV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            LiquidityReciever,
            block.timestamp
        );
    }


    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        
            removeAllFee();

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

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

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

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

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

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

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

    function setBuyFee(uint _newtax, uint _newBurn, uint _newliquidity, uint _newMarketing, uint _newDeveloper) public onlyOwner {
        uint subtotal = _newtax.add(_newBurn).add(_newliquidity).add(_newMarketing).add(_newDeveloper);
        require(subtotal <= MAX_TAX_FEE,"Error: Max 25% Tax Limit Exceeded!!");
        buyFee.setTaxFee = _newtax;
        buyFee.setBurnFee = _newBurn;
        buyFee.setLiquidityFee = _newliquidity;
        buyFee.setMarketingFee = _newMarketing;
        buyFee.setDeveloperFee = _newDeveloper;
    }

    function setSellFee(uint _newtax, uint _newBurn, uint _newliquidity, uint _newMarketing, uint _newDeveloper) public onlyOwner {      
        uint subtotal = _newtax.add(_newBurn).add(_newliquidity).add(_newMarketing).add(_newDeveloper);
        require(subtotal <= MAX_TAX_FEE,"Error: Max 25% Tax Limit Exceeded!!");
        sellFee.setTaxFee = _newtax;
        sellFee.setBurnFee = _newBurn;
        sellFee.setLiquidityFee = _newliquidity;
        sellFee.setMarketingFee = _newMarketing;
        sellFee.setDeveloperFee = _newDeveloper;
    }

    function setRouterAddress(address newAddress) public onlyOwner {
        IUniswapV2Router02 _pcsV2Router = IUniswapV2Router02(newAddress);
        pcsV2Router = _pcsV2Router;
        _allowances[address(this)][address(pcsV2Router)] = MAX;
    }

    function setMarketPair(address _pair, bool _status) public onlyOwner {
        AutomaticMarketPair[_pair] = _status;
    }

    function ExcludeWalletLimit(address _adr,bool _status) public onlyOwner {
        require(isWalletLimitExempt[_adr] != _status,"Not Changed!!");
        isWalletLimitExempt[_adr] = _status;
    }

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

    function enableWalletLimit(bool _status) public onlyOwner {
        checkWalletLimit = _status;
    }

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

    function recoverBEP20(address tokenAddress, uint256 tokenAmount) public onlyOwner {
        IERC20(tokenAddress).transfer(owner(), tokenAmount);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"AmountForDeveloper","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AmountForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AmountForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"AutomaticMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DeveloperWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_adr","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"ExcludeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"LiquidityReciever","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TAX_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MarketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"setTaxFee","type":"uint256"},{"internalType":"uint256","name":"setBurnFee","type":"uint256"},{"internalType":"uint256","name":"setLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"setMarketingFee","type":"uint256"},{"internalType":"uint256","name":"setDeveloperFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"enableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pcsV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pcsV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverBEP20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recoverFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"setTaxFee","type":"uint256"},{"internalType":"uint256","name":"setBurnFee","type":"uint256"},{"internalType":"uint256","name":"setLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"setMarketingFee","type":"uint256"},{"internalType":"uint256","name":"setDeveloperFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newtax","type":"uint256"},{"internalType":"uint256","name":"_newBurn","type":"uint256"},{"internalType":"uint256","name":"_newliquidity","type":"uint256"},{"internalType":"uint256","name":"_newMarketing","type":"uint256"},{"internalType":"uint256","name":"_newDeveloper","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newFeeWallet","type":"address"}],"name":"setDeveloperWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newFeeWallet","type":"address"}],"name":"setLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newFeeWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newtax","type":"uint256"},{"internalType":"uint256","name":"_newBurn","type":"uint256"},{"internalType":"uint256","name":"_newliquidity","type":"uint256"},{"internalType":"uint256","name":"_newMarketing","type":"uint256"},{"internalType":"uint256","name":"_newDeveloper","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","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":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055620000386012600a620006e1565b620000499064e8d4a51000620007a0565b600b8190556200005c90600019620007dc565b6200006a90600019620007c2565b600c556200007b6012600a620006e1565b6200008990611388620007a0565b600d55620000c36064620000af6001600b54620004e460201b620019dd1790919060201c565b6200057860201b62001a5c1790919060201c565b600e55600f805460ff191660011790556000601081905560118190556012819055601381905560148190556015819055601681905560178190556018819055601955601d80546001600160a01b031990811673f0d298c38e86671021f44e3f15b9c6377a095fa717909155601e805490911673ea5f064c70f3107c62cd83bf7ec86752f151ba8f179055602b805460ff60a81b1916600160a81b1790553480156200016d57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600c543360008181526001602090815260409182902093909355601f80546001600160a01b03191690921790915560148083556021819055601e60228190556023829055600a602481905560258390556026839055602791909155602891909155602955600954815163c45a015560e01b815291516001600160a01b0390911692839263c45a01559260048083019392829003018186803b1580156200025457600080fd5b505afa15801562000269573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028f9190620005fe565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002d857600080fd5b505afa158015620002ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003139190620005fe565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200035c57600080fd5b505af115801562000371573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003979190620005fe565b602b80546001600160a01b039283166001600160a01b0319918216178255602a8054858516921682179055306000818152600360209081526040808320948352938152838220600019905584548616825260048152838220805460ff1990811660019081179092553380855260058452868520805483168417905585855286852080548316841790557f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc80548316841790557f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba80548316841790558085526006845286852080548316841790559654909716835284832080548816821790559282528382208054909616909217909455600b5491519182529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3506200081f565b600082620004f55750600062000572565b6000620005038385620007a0565b90508262000512858362000681565b146200056f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b60006200056f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620005c260201b60201c565b60008183620005e65760405162461bcd60e51b815260040162000566919062000629565b506000620005f5848662000681565b95945050505050565b6000602082840312156200061157600080fd5b81516001600160a01b03811681146200056f57600080fd5b600060208083528351808285015260005b8181101562000658578581018301518582016040015282016200063a565b818111156200066b576000604083870101525b50601f01601f1916929092016040019392505050565b60008262000693576200069362000809565b500490565b600181815b80851115620006d9578160001904821115620006bd57620006bd620007f3565b80851615620006cb57918102915b93841c93908002906200069d565b509250929050565b60006200056f60ff841683600082620006fd5750600162000572565b816200070c5750600062000572565b8160018114620007255760028114620007305762000750565b600191505062000572565b60ff841115620007445762000744620007f3565b50506001821b62000572565b5060208310610133831016604e8410600b841016171562000775575081810a62000572565b62000781838362000698565b8060001904821115620007985762000798620007f3565b029392505050565b6000816000190483118215151615620007bd57620007bd620007f3565b500290565b600082821015620007d757620007d7620007f3565b500390565b600082620007ee57620007ee62000809565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b613119806200082f6000396000f3fe6080604052600436106103905760003560e01c80635ea4a8dd116101dc578063c16dd4a411610102578063efa08806116100a0578063f872858a1161006f578063f872858a14610b4a578063f887ea4014610b64578063f8f6329014610b84578063fa0e16fc14610ba457600080fd5b8063efa0880614610aba578063f0f165af14610ada578063f2fde38b14610afa578063f387f3a014610b1a57600080fd5b8063d12a7688116100dc578063d12a768814610a08578063d28d885214610a1e578063dd62ed3e14610a54578063ea2f0b3714610a9a57600080fd5b8063c16dd4a414610998578063c49b9a80146109b8578063c867d60b146109d857600080fd5b80638da5cb5b1161017a578063a9059cbb11610149578063a9059cbb1461091e578063af465a271461093e578063b09f126614610954578063b79550be1461098357600080fd5b80638da5cb5b1461089457806395d89b41146108b2578063a457c2d7146108de578063a71e0618146108fe57600080fd5b8063715018a6116101b6578063715018a614610810578063728d41c914610825578063807c2d9c1461084557806388f820201461085b57600080fd5b80635ea4a8dd146107b05780636cd56878146107d057806370a08231146107f057600080fd5b80633685d419116102c1578063470624021161025f578063521432901161022e578063521432901461071757806352390c02146107375780635342acb4146107575780635d098b381461079057600080fd5b8063470624021461069a5780634761bea9146106c15780634974d88f146106d65780634a74bb02146106f657600080fd5b80633bd5d1731161029b5780633bd5d1731461061a57806341cb87fc1461063a578063437823ec1461065a5780634549b0391461067a57600080fd5b80633685d419146105ba57806338ec0b11146105da57806339509351146105fa57600080fd5b806323b872dd1161032e5780632b14ca56116103085780632b14ca561461050f5780632d6abf871461055e5780632d8381191461057e578063313ce5671461059e57600080fd5b806323b872dd146104ad5780632598cdb2146104cd578063296f0a0c146104ed57600080fd5b806310bb8a7a1161036a57806310bb8a7a1461044957806313114a9d1461046d57806313b05fda1461048257806318160ddd1461049857600080fd5b806306fdde031461039c578063095ea7b3146103e15780630bd11c461461041157600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b5060408051808201909152600a815269526970706c6520496e7560b01b60208201525b6040516103d89190612e68565b60405180910390f35b3480156103ed57600080fd5b506104016103fc366004612d5b565b610bba565b60405190151581526020016103d8565b34801561041d57600080fd5b50601f54610431906001600160a01b031681565b6040516001600160a01b0390911681526020016103d8565b34801561045557600080fd5b5061045f601a5481565b6040519081526020016103d8565b34801561047957600080fd5b50600a5461045f565b34801561048e57600080fd5b5061045f601c5481565b3480156104a457600080fd5b50600b5461045f565b3480156104b957600080fd5b506104016104c8366004612cec565b610bd1565b3480156104d957600080fd5b50601d54610431906001600160a01b031681565b3480156104f957600080fd5b5061050d610508366004612c79565b610c3a565b005b34801561051b57600080fd5b50602554602654602754602854602954610536949392919085565b604080519586526020860194909452928401919091526060830152608082015260a0016103d8565b34801561056a57600080fd5b50602a54610431906001600160a01b031681565b34801561058a57600080fd5b5061045f610599366004612dc1565b610c8f565b3480156105aa57600080fd5b50604051601281526020016103d8565b3480156105c657600080fd5b5061050d6105d5366004612c79565b610d00565b3480156105e657600080fd5b5061050d6105f5366004612d2d565b610eaa565b34801561060657600080fd5b50610401610615366004612d5b565b610f5e565b34801561062657600080fd5b5061050d610635366004612dc1565b610f94565b34801561064657600080fd5b5061050d610655366004612c79565b61107e565b34801561066657600080fd5b5061050d610675366004612c79565b6110e7565b34801561068657600080fd5b5061045f610695366004612dda565b611135565b3480156106a657600080fd5b50602054602154602254602354602454610536949392919085565b3480156106cd57600080fd5b5061045f60fa81565b3480156106e257600080fd5b5061050d6106f1366004612d87565b6111c2565b34801561070257600080fd5b50602b5461040190600160a81b900460ff1681565b34801561072357600080fd5b50602b54610431906001600160a01b031681565b34801561074357600080fd5b5061050d610752366004612c79565b6111ff565b34801561076357600080fd5b50610401610772366004612c79565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561079c57600080fd5b5061050d6107ab366004612c79565b611362565b3480156107bc57600080fd5b5061050d6107cb366004612e2d565b6113ae565b3480156107dc57600080fd5b5061050d6107eb366004612c79565b61142d565b3480156107fc57600080fd5b5061045f61080b366004612c79565b611479565b34801561081c57600080fd5b5061050d6114d8565b34801561083157600080fd5b5061050d610840366004612dc1565b61154c565b34801561085157600080fd5b5061045f600e5481565b34801561086757600080fd5b50610401610876366004612c79565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156108a057600080fd5b506000546001600160a01b0316610431565b3480156108be57600080fd5b5060408051808201909152600381526205249560ec1b60208201526103cb565b3480156108ea57600080fd5b506104016108f9366004612d5b565b61157b565b34801561090a57600080fd5b5061050d610919366004612e2d565b6115ca565b34801561092a57600080fd5b50610401610939366004612d5b565b611643565b34801561094a57600080fd5b5061045f600b5481565b34801561096057600080fd5b506103cb6040518060400160405280600381526020016205249560ec1b81525081565b34801561098f57600080fd5b5061050d611650565b3480156109a457600080fd5b5061050d6109b3366004612d2d565b6116d2565b3480156109c457600080fd5b5061050d6109d3366004612d87565b611727565b3480156109e457600080fd5b506104016109f3366004612c79565b60066020526000908152604090205460ff1681565b348015610a1457600080fd5b5061045f600d5481565b348015610a2a57600080fd5b506103cb6040518060400160405280600a815260200169526970706c6520496e7560b01b81525081565b348015610a6057600080fd5b5061045f610a6f366004612cb3565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610aa657600080fd5b5061050d610ab5366004612c79565b6117a9565b348015610ac657600080fd5b5061050d610ad5366004612d5b565b6117f4565b348015610ae657600080fd5b5061050d610af5366004612dc1565b6118c4565b348015610b0657600080fd5b5061050d610b15366004612c79565b6118f3565b348015610b2657600080fd5b50610401610b35366004612c79565b60046020526000908152604090205460ff1681565b348015610b5657600080fd5b50600f546104019060ff1681565b348015610b7057600080fd5b50600954610431906001600160a01b031681565b348015610b9057600080fd5b50601e54610431906001600160a01b031681565b348015610bb057600080fd5b5061045f601b5481565b6000610bc7338484611a9e565b5060015b92915050565b6000610bde848484611bab565b610c308433610c2b85604051806060016040528060288152602001613097602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611e22565b611a9e565b5060019392505050565b6000546001600160a01b03163314610c6d5760405162461bcd60e51b8152600401610c6490612f00565b60405180910390fd5b601f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000600c54821115610ce35760405162461bcd60e51b815260206004820152601e60248201527f416d74206d757374206265206c657373207468616e20746f74207265666c00006044820152606401610c64565b6000610ced611e5c565b9050610cf98382611a5c565b9392505050565b6000546001600160a01b03163314610d2a5760405162461bcd60e51b8152600401610c6490612f00565b6001600160a01b03811660009081526007602052604090205460ff16610d855760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e48195e18db1d59195960821b6044820152606401610c64565b60005b600854811015610ea657816001600160a01b031660088281548110610daf57610daf61305d565b6000918252602090912001546001600160a01b03161415610e945760088054610dda90600190612fff565b81548110610dea57610dea61305d565b600091825260209091200154600880546001600160a01b039092169183908110610e1657610e1661305d565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600790925220805460ff191690556008805480610e6e57610e6e613047565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610e9e81613016565b915050610d88565b5050565b6000546001600160a01b03163314610ed45760405162461bcd60e51b8152600401610c6490612f00565b6001600160a01b03821660009081526006602052604090205460ff1615158115151415610f335760405162461bcd60e51b815260206004820152600d60248201526c4e6f74204368616e676564212160981b6044820152606401610c64565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610bc7918590610c2b9086611e7f565b3360008181526007602052604090205460ff16156110095760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610c64565b600061101483611ede565b505050506001600160a01b03841660009081526001602052604090205491925061104091905082611f2d565b6001600160a01b038316600090815260016020526040902055600c546110669082611f2d565b600c55600a546110769084611e7f565b600a55505050565b6000546001600160a01b031633146110a85760405162461bcd60e51b8152600401610c6490612f00565b602a80546001600160a01b039092166001600160a01b031990921682179055306000908152600360209081526040808320938352929052206000199055565b6000546001600160a01b031633146111115760405162461bcd60e51b8152600401610c6490612f00565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6000600b548311156111895760405162461bcd60e51b815260206004820152601c60248201527f416d74206d757374206265206c657373207468616e20737570706c79000000006044820152606401610c64565b816111a857600061119984611ede565b50939550610bcb945050505050565b60006111b384611ede565b50929550610bcb945050505050565b6000546001600160a01b031633146111ec5760405162461bcd60e51b8152600401610c6490612f00565b600f805460ff1916911515919091179055565b6000546001600160a01b031633146112295760405162461bcd60e51b8152600401610c6490612f00565b6001600160a01b03811660009081526007602052604090205460ff16156112a25760405162461bcd60e51b815260206004820152602760248201527f4163636f756e7420697320616c7265616479206578636c756465642066726f6d604482015266081c995dd85c9960ca1b6064820152608401610c64565b6001600160a01b038116600090815260016020526040902054156112fc576001600160a01b0381166000908152600160205260409020546112e290610c8f565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b0316331461138c5760405162461bcd60e51b8152600401610c6490612f00565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113d85760405162461bcd60e51b8152600401610c6490612f00565b60006113f2826113ec858188818c8c611e7f565b90611e7f565b905060fa8111156114155760405162461bcd60e51b8152600401610c6490612ebd565b50602594909455602692909255602755602855602955565b6000546001600160a01b031633146114575760405162461bcd60e51b8152600401610c6490612f00565b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526007602052604081205460ff16156114b657506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610bcb90610c8f565b6000546001600160a01b031633146115025760405162461bcd60e51b8152600401610c6490612f00565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146115765760405162461bcd60e51b8152600401610c6490612f00565b600e55565b6000610bc73384610c2b856040518060600160405280602581526020016130bf602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190611e22565b6000546001600160a01b031633146115f45760405162461bcd60e51b8152600401610c6490612f00565b6000611608826113ec858188818c8c611e7f565b905060fa81111561162b5760405162461bcd60e51b8152600401610c6490612ebd565b50602094909455602192909255602255602355602455565b6000610bc7338484611bab565b6000546001600160a01b0316331461167a5760405162461bcd60e51b8152600401610c6490612f00565b604051600090339047908381818185875af1925050503d80600081146116bc576040519150601f19603f3d011682016040523d82523d6000602084013e6116c1565b606091505b50509050806116cf57600080fd5b50565b6000546001600160a01b031633146116fc5760405162461bcd60e51b8152600401610c6490612f00565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117515760405162461bcd60e51b8152600401610c6490612f00565b602b8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061179e90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146117d35760405162461bcd60e51b8152600401610c6490612f00565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6000546001600160a01b0316331461181e5760405162461bcd60e51b8152600401610c6490612f00565b816001600160a01b031663a9059cbb61183f6000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b15801561188757600080fd5b505af115801561189b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118bf9190612da4565b505050565b6000546001600160a01b031633146118ee5760405162461bcd60e51b8152600401610c6490612f00565b600d55565b6000546001600160a01b0316331461191d5760405162461bcd60e51b8152600401610c6490612f00565b6001600160a01b0381166119825760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c64565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000826119ec57506000610bcb565b60006119f88385612fe0565b905082611a058583612fbe565b14610cf95760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c64565b6000610cf983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611f6f565b6001600160a01b038316611af45760405162461bcd60e51b815260206004820181905260248201527f45524332303a20617070726f76652066726f6d207a65726f20616464726573736044820152606401610c64565b6001600160a01b038216611b4a5760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20617070726f766520746f207a65726f206164647265737300006044820152606401610c64565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611c0b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a207472616e736665722066726f6d207a65726f206164647265736044820152607360f81b6064820152608401610c64565b6001600160a01b038216611c615760405162461bcd60e51b815260206004820152601f60248201527f45524332303a207472616e7366657220746f207a65726f2061646472657373006044820152606401610c64565b60008111611cc35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c64565b6000611cce30611479565b600d54602b5491925082101590600160a01b900460ff16158015611cef5750805b8015611d1357506001600160a01b03841660009081526004602052604090205460ff165b8015611d285750602b54600160a81b900460ff165b15611d3557611d35611f9d565b6001600160a01b03851660009081526005602052604090205460019060ff1680611d7757506001600160a01b03851660009081526005602052604090205460ff165b15611d80575060005b600f5460ff168015611dab57506001600160a01b03851660009081526006602052604090205460ff16155b15611e0e57600e54611dc0856113ec88611479565b1115611e0e5760405162461bcd60e51b815260206004820152601b60248201527f4d61782057616c6c6574204c696d6974204578636565646564212100000000006044820152606401610c64565b611e1a86868684611ff8565b505050505050565b60008184841115611e465760405162461bcd60e51b8152600401610c649190612e68565b506000611e538486612fff565b95945050505050565b6000806000611e69612210565b9092509050611e788282611a5c565b9250505090565b600080611e8c8385612fa6565b905083811015610cf95760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c64565b6000806000806000806000806000611ef58a612392565b9250925092506000806000611f138d8686611f0e611e5c565b6123d4565b919f909e50909c50959a5093985091965092945050505050565b6000610cf983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e22565b60008183611f905760405162461bcd60e51b8152600401610c649190612e68565b506000611e538486612fbe565b602b805460ff60a01b1916600160a01b179055601b5415611fc357611fc3601b54612424565b601c5415611fd657611fd6601c5461248b565b601a5415611fe957611fe9601a546124f2565b602b805460ff60a01b19169055565b612000612589565b801561208e576001600160a01b03841660009081526004602052604090205460ff161561204a5761204a602054601055602154601255602254601455602354601655602454601855565b6001600160a01b03831660009081526004602052604090205460ff161561208e5761208e602554601055602654601255602754601455602854601655602954601855565b6001600160a01b03841660009081526007602052604090205460ff1680156120cf57506001600160a01b03831660009081526007602052604090205460ff16155b156120e4576120df8484846125fb565b6121e2565b6001600160a01b03841660009081526007602052604090205460ff1615801561212557506001600160a01b03831660009081526007602052604090205460ff165b15612135576120df848484612721565b6001600160a01b03841660009081526007602052604090205460ff1615801561217757506001600160a01b03831660009081526007602052604090205460ff16155b15612187576120df8484846127ca565b6001600160a01b03841660009081526007602052604090205460ff1680156121c757506001600160a01b03831660009081526007602052604090205460ff165b156121d7576120df84848461280e565b6121e28484846127ca565b8061220a5761220a601154601055601354601255601554601455601754601655601954601855565b50505050565b600c54600b546000918291825b6008548110156123625782600160006008848154811061223f5761223f61305d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806122aa57508160026000600884815481106122835761228361305d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156122c057600c54600b54945094505050509091565b61230660016000600884815481106122da576122da61305d565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611f2d565b925061234e60026000600884815481106123225761232261305d565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611f2d565b91508061235a81613016565b91505061221d565b50600b54600c5461237291611a5c565b82101561238957600c54600b549350935050509091565b90939092509050565b6000806000806123a185612881565b905060006123ae866128a4565b905060006123c6826123c08986611f2d565b90611f2d565b979296509094509092505050565b60008080806123e388866119dd565b905060006123f188876119dd565b905060006123ff88886119dd565b90506000612411826123c08686611f2d565b939b939a50919850919650505050505050565b4761242e82612973565b600061243a4783611f2d565b601d546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612475573d6000803e3d6000fd5b50601b546124839084611f2d565b601b55505050565b4761249582612973565b60006124a14783611f2d565b601e546040519192506001600160a01b03169082156108fc029083906000818181858888f193505050501580156124dc573d6000803e3d6000fd5b50601c546124ea9084611f2d565b601c55505050565b60006124ff826002611a5c565b9050600061250d8383611f2d565b90504761251983612973565b60006125254783611f2d565b90506125318382612abb565b601a5461253e9086611f2d565b601a5560408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b6010541580156125995750601254155b80156125a55750601454155b80156125b15750601654155b80156125bd5750601854155b156125c457565b6010805460115560128054601355601480546015556016805460175560188054601955600094859055928490559083905582905555565b60008060008060008061260d87611ede565b6001600160a01b038f16600090815260026020526040902054959b5093995091975095509350915061263f9088611f2d565b6001600160a01b038a1660009081526002602090815260408083209390935560019052205461266e9087611f2d565b6001600160a01b03808b1660009081526001602052604080822093909355908a168152205461269d9086611e7f565b6001600160a01b0389166000908152600160205260409020556126bf81612b66565b6126c98483612bee565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161270e91815260200190565b60405180910390a3505050505050505050565b60008060008060008061273387611ede565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506127659087611f2d565b6001600160a01b03808b16600090815260016020908152604080832094909455918b1681526002909152205461279b9084611e7f565b6001600160a01b03891660009081526002602090815260408083209390935560019052205461269d9086611e7f565b6000806000806000806127dc87611ede565b6001600160a01b038f16600090815260016020526040902054959b5093995091975095509350915061266e9087611f2d565b60008060008060008061282087611ede565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506128529088611f2d565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546127659087611f2d565b6000610bcb6103e861289e601054856119dd90919063ffffffff16565b90611a5c565b60006128c16103e861289e601454856119dd90919063ffffffff16565b601a60008282546128d29190612fa6565b90915550506016546128ed906103e89061289e9085906119dd565b601b60008282546128fe9190612fa6565b9091555050601854612919906103e89061289e9085906119dd565b601c600082825461292a9190612fa6565b90915550612939905082612c12565b610bcb6103e861289e6012546018546016546014546129589190612fa6565b6129629190612fa6565b61296c9190612fa6565b85906119dd565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106129a8576129a861305d565b6001600160a01b03928316602091820292909201810191909152602a54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156129fc57600080fd5b505afa158015612a10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a349190612c96565b81600181518110612a4757612a4761305d565b6001600160a01b039283166020918202929092010152602a5460405163791ac94760e01b815291169063791ac94790612a8d908590600090869030904290600401612f35565b600060405180830381600087803b158015612aa757600080fd5b505af1158015611e1a573d6000803e3d6000fd5b602a54601f5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b158015612b2657600080fd5b505af1158015612b3a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b5f9190612dff565b5050505050565b6000612b70611e5c565b90506000612b7e83836119dd565b30600090815260016020526040902054909150612b9b9082611e7f565b3060009081526001602090815260408083209390935560079052205460ff16156118bf5730600090815260026020526040902054612bd99084611e7f565b30600090815260026020526040902055505050565b600c54612bfb9083611f2d565b600c55600a54612c0b9082611e7f565b600a555050565b6000612c2f6103e861289e601254856119dd90919063ffffffff16565b90506000612c3b611e5c565b905081156118bf576000612c4f8284612fe0565b905082600b54612c5f9190612fff565b600b55600c54612c70908290612fff565b600c5550505050565b600060208284031215612c8b57600080fd5b8135610cf981613073565b600060208284031215612ca857600080fd5b8151610cf981613073565b60008060408385031215612cc657600080fd5b8235612cd181613073565b91506020830135612ce181613073565b809150509250929050565b600080600060608486031215612d0157600080fd5b8335612d0c81613073565b92506020840135612d1c81613073565b929592945050506040919091013590565b60008060408385031215612d4057600080fd5b8235612d4b81613073565b91506020830135612ce181613088565b60008060408385031215612d6e57600080fd5b8235612d7981613073565b946020939093013593505050565b600060208284031215612d9957600080fd5b8135610cf981613088565b600060208284031215612db657600080fd5b8151610cf981613088565b600060208284031215612dd357600080fd5b5035919050565b60008060408385031215612ded57600080fd5b823591506020830135612ce181613088565b600080600060608486031215612e1457600080fd5b8351925060208401519150604084015190509250925092565b600080600080600060a08688031215612e4557600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b81811015612e9557858101830151858201604001528201612e79565b81811115612ea7576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f4572726f723a204d61782032352520546178204c696d6974204578636565646560408201526264212160e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612f855784516001600160a01b031683529383019391830191600101612f60565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612fb957612fb9613031565b500190565b600082612fdb57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612ffa57612ffa613031565b500290565b60008282101561301157613011613031565b500390565b600060001982141561302a5761302a613031565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146116cf57600080fd5b80151581146116cf57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e8a4d106e9eb7200001159ba444d8dfa4e3d42178192caab596cac1c3e58ba5764736f6c63430008070033

Deployed Bytecode

0x6080604052600436106103905760003560e01c80635ea4a8dd116101dc578063c16dd4a411610102578063efa08806116100a0578063f872858a1161006f578063f872858a14610b4a578063f887ea4014610b64578063f8f6329014610b84578063fa0e16fc14610ba457600080fd5b8063efa0880614610aba578063f0f165af14610ada578063f2fde38b14610afa578063f387f3a014610b1a57600080fd5b8063d12a7688116100dc578063d12a768814610a08578063d28d885214610a1e578063dd62ed3e14610a54578063ea2f0b3714610a9a57600080fd5b8063c16dd4a414610998578063c49b9a80146109b8578063c867d60b146109d857600080fd5b80638da5cb5b1161017a578063a9059cbb11610149578063a9059cbb1461091e578063af465a271461093e578063b09f126614610954578063b79550be1461098357600080fd5b80638da5cb5b1461089457806395d89b41146108b2578063a457c2d7146108de578063a71e0618146108fe57600080fd5b8063715018a6116101b6578063715018a614610810578063728d41c914610825578063807c2d9c1461084557806388f820201461085b57600080fd5b80635ea4a8dd146107b05780636cd56878146107d057806370a08231146107f057600080fd5b80633685d419116102c1578063470624021161025f578063521432901161022e578063521432901461071757806352390c02146107375780635342acb4146107575780635d098b381461079057600080fd5b8063470624021461069a5780634761bea9146106c15780634974d88f146106d65780634a74bb02146106f657600080fd5b80633bd5d1731161029b5780633bd5d1731461061a57806341cb87fc1461063a578063437823ec1461065a5780634549b0391461067a57600080fd5b80633685d419146105ba57806338ec0b11146105da57806339509351146105fa57600080fd5b806323b872dd1161032e5780632b14ca56116103085780632b14ca561461050f5780632d6abf871461055e5780632d8381191461057e578063313ce5671461059e57600080fd5b806323b872dd146104ad5780632598cdb2146104cd578063296f0a0c146104ed57600080fd5b806310bb8a7a1161036a57806310bb8a7a1461044957806313114a9d1461046d57806313b05fda1461048257806318160ddd1461049857600080fd5b806306fdde031461039c578063095ea7b3146103e15780630bd11c461461041157600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b5060408051808201909152600a815269526970706c6520496e7560b01b60208201525b6040516103d89190612e68565b60405180910390f35b3480156103ed57600080fd5b506104016103fc366004612d5b565b610bba565b60405190151581526020016103d8565b34801561041d57600080fd5b50601f54610431906001600160a01b031681565b6040516001600160a01b0390911681526020016103d8565b34801561045557600080fd5b5061045f601a5481565b6040519081526020016103d8565b34801561047957600080fd5b50600a5461045f565b34801561048e57600080fd5b5061045f601c5481565b3480156104a457600080fd5b50600b5461045f565b3480156104b957600080fd5b506104016104c8366004612cec565b610bd1565b3480156104d957600080fd5b50601d54610431906001600160a01b031681565b3480156104f957600080fd5b5061050d610508366004612c79565b610c3a565b005b34801561051b57600080fd5b50602554602654602754602854602954610536949392919085565b604080519586526020860194909452928401919091526060830152608082015260a0016103d8565b34801561056a57600080fd5b50602a54610431906001600160a01b031681565b34801561058a57600080fd5b5061045f610599366004612dc1565b610c8f565b3480156105aa57600080fd5b50604051601281526020016103d8565b3480156105c657600080fd5b5061050d6105d5366004612c79565b610d00565b3480156105e657600080fd5b5061050d6105f5366004612d2d565b610eaa565b34801561060657600080fd5b50610401610615366004612d5b565b610f5e565b34801561062657600080fd5b5061050d610635366004612dc1565b610f94565b34801561064657600080fd5b5061050d610655366004612c79565b61107e565b34801561066657600080fd5b5061050d610675366004612c79565b6110e7565b34801561068657600080fd5b5061045f610695366004612dda565b611135565b3480156106a657600080fd5b50602054602154602254602354602454610536949392919085565b3480156106cd57600080fd5b5061045f60fa81565b3480156106e257600080fd5b5061050d6106f1366004612d87565b6111c2565b34801561070257600080fd5b50602b5461040190600160a81b900460ff1681565b34801561072357600080fd5b50602b54610431906001600160a01b031681565b34801561074357600080fd5b5061050d610752366004612c79565b6111ff565b34801561076357600080fd5b50610401610772366004612c79565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561079c57600080fd5b5061050d6107ab366004612c79565b611362565b3480156107bc57600080fd5b5061050d6107cb366004612e2d565b6113ae565b3480156107dc57600080fd5b5061050d6107eb366004612c79565b61142d565b3480156107fc57600080fd5b5061045f61080b366004612c79565b611479565b34801561081c57600080fd5b5061050d6114d8565b34801561083157600080fd5b5061050d610840366004612dc1565b61154c565b34801561085157600080fd5b5061045f600e5481565b34801561086757600080fd5b50610401610876366004612c79565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156108a057600080fd5b506000546001600160a01b0316610431565b3480156108be57600080fd5b5060408051808201909152600381526205249560ec1b60208201526103cb565b3480156108ea57600080fd5b506104016108f9366004612d5b565b61157b565b34801561090a57600080fd5b5061050d610919366004612e2d565b6115ca565b34801561092a57600080fd5b50610401610939366004612d5b565b611643565b34801561094a57600080fd5b5061045f600b5481565b34801561096057600080fd5b506103cb6040518060400160405280600381526020016205249560ec1b81525081565b34801561098f57600080fd5b5061050d611650565b3480156109a457600080fd5b5061050d6109b3366004612d2d565b6116d2565b3480156109c457600080fd5b5061050d6109d3366004612d87565b611727565b3480156109e457600080fd5b506104016109f3366004612c79565b60066020526000908152604090205460ff1681565b348015610a1457600080fd5b5061045f600d5481565b348015610a2a57600080fd5b506103cb6040518060400160405280600a815260200169526970706c6520496e7560b01b81525081565b348015610a6057600080fd5b5061045f610a6f366004612cb3565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610aa657600080fd5b5061050d610ab5366004612c79565b6117a9565b348015610ac657600080fd5b5061050d610ad5366004612d5b565b6117f4565b348015610ae657600080fd5b5061050d610af5366004612dc1565b6118c4565b348015610b0657600080fd5b5061050d610b15366004612c79565b6118f3565b348015610b2657600080fd5b50610401610b35366004612c79565b60046020526000908152604090205460ff1681565b348015610b5657600080fd5b50600f546104019060ff1681565b348015610b7057600080fd5b50600954610431906001600160a01b031681565b348015610b9057600080fd5b50601e54610431906001600160a01b031681565b348015610bb057600080fd5b5061045f601b5481565b6000610bc7338484611a9e565b5060015b92915050565b6000610bde848484611bab565b610c308433610c2b85604051806060016040528060288152602001613097602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611e22565b611a9e565b5060019392505050565b6000546001600160a01b03163314610c6d5760405162461bcd60e51b8152600401610c6490612f00565b60405180910390fd5b601f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000600c54821115610ce35760405162461bcd60e51b815260206004820152601e60248201527f416d74206d757374206265206c657373207468616e20746f74207265666c00006044820152606401610c64565b6000610ced611e5c565b9050610cf98382611a5c565b9392505050565b6000546001600160a01b03163314610d2a5760405162461bcd60e51b8152600401610c6490612f00565b6001600160a01b03811660009081526007602052604090205460ff16610d855760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e48195e18db1d59195960821b6044820152606401610c64565b60005b600854811015610ea657816001600160a01b031660088281548110610daf57610daf61305d565b6000918252602090912001546001600160a01b03161415610e945760088054610dda90600190612fff565b81548110610dea57610dea61305d565b600091825260209091200154600880546001600160a01b039092169183908110610e1657610e1661305d565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600790925220805460ff191690556008805480610e6e57610e6e613047565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610e9e81613016565b915050610d88565b5050565b6000546001600160a01b03163314610ed45760405162461bcd60e51b8152600401610c6490612f00565b6001600160a01b03821660009081526006602052604090205460ff1615158115151415610f335760405162461bcd60e51b815260206004820152600d60248201526c4e6f74204368616e676564212160981b6044820152606401610c64565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610bc7918590610c2b9086611e7f565b3360008181526007602052604090205460ff16156110095760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610c64565b600061101483611ede565b505050506001600160a01b03841660009081526001602052604090205491925061104091905082611f2d565b6001600160a01b038316600090815260016020526040902055600c546110669082611f2d565b600c55600a546110769084611e7f565b600a55505050565b6000546001600160a01b031633146110a85760405162461bcd60e51b8152600401610c6490612f00565b602a80546001600160a01b039092166001600160a01b031990921682179055306000908152600360209081526040808320938352929052206000199055565b6000546001600160a01b031633146111115760405162461bcd60e51b8152600401610c6490612f00565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6000600b548311156111895760405162461bcd60e51b815260206004820152601c60248201527f416d74206d757374206265206c657373207468616e20737570706c79000000006044820152606401610c64565b816111a857600061119984611ede565b50939550610bcb945050505050565b60006111b384611ede565b50929550610bcb945050505050565b6000546001600160a01b031633146111ec5760405162461bcd60e51b8152600401610c6490612f00565b600f805460ff1916911515919091179055565b6000546001600160a01b031633146112295760405162461bcd60e51b8152600401610c6490612f00565b6001600160a01b03811660009081526007602052604090205460ff16156112a25760405162461bcd60e51b815260206004820152602760248201527f4163636f756e7420697320616c7265616479206578636c756465642066726f6d604482015266081c995dd85c9960ca1b6064820152608401610c64565b6001600160a01b038116600090815260016020526040902054156112fc576001600160a01b0381166000908152600160205260409020546112e290610c8f565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b0316331461138c5760405162461bcd60e51b8152600401610c6490612f00565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113d85760405162461bcd60e51b8152600401610c6490612f00565b60006113f2826113ec858188818c8c611e7f565b90611e7f565b905060fa8111156114155760405162461bcd60e51b8152600401610c6490612ebd565b50602594909455602692909255602755602855602955565b6000546001600160a01b031633146114575760405162461bcd60e51b8152600401610c6490612f00565b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526007602052604081205460ff16156114b657506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610bcb90610c8f565b6000546001600160a01b031633146115025760405162461bcd60e51b8152600401610c6490612f00565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146115765760405162461bcd60e51b8152600401610c6490612f00565b600e55565b6000610bc73384610c2b856040518060600160405280602581526020016130bf602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190611e22565b6000546001600160a01b031633146115f45760405162461bcd60e51b8152600401610c6490612f00565b6000611608826113ec858188818c8c611e7f565b905060fa81111561162b5760405162461bcd60e51b8152600401610c6490612ebd565b50602094909455602192909255602255602355602455565b6000610bc7338484611bab565b6000546001600160a01b0316331461167a5760405162461bcd60e51b8152600401610c6490612f00565b604051600090339047908381818185875af1925050503d80600081146116bc576040519150601f19603f3d011682016040523d82523d6000602084013e6116c1565b606091505b50509050806116cf57600080fd5b50565b6000546001600160a01b031633146116fc5760405162461bcd60e51b8152600401610c6490612f00565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117515760405162461bcd60e51b8152600401610c6490612f00565b602b8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061179e90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146117d35760405162461bcd60e51b8152600401610c6490612f00565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6000546001600160a01b0316331461181e5760405162461bcd60e51b8152600401610c6490612f00565b816001600160a01b031663a9059cbb61183f6000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b15801561188757600080fd5b505af115801561189b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118bf9190612da4565b505050565b6000546001600160a01b031633146118ee5760405162461bcd60e51b8152600401610c6490612f00565b600d55565b6000546001600160a01b0316331461191d5760405162461bcd60e51b8152600401610c6490612f00565b6001600160a01b0381166119825760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c64565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000826119ec57506000610bcb565b60006119f88385612fe0565b905082611a058583612fbe565b14610cf95760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c64565b6000610cf983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611f6f565b6001600160a01b038316611af45760405162461bcd60e51b815260206004820181905260248201527f45524332303a20617070726f76652066726f6d207a65726f20616464726573736044820152606401610c64565b6001600160a01b038216611b4a5760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20617070726f766520746f207a65726f206164647265737300006044820152606401610c64565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611c0b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a207472616e736665722066726f6d207a65726f206164647265736044820152607360f81b6064820152608401610c64565b6001600160a01b038216611c615760405162461bcd60e51b815260206004820152601f60248201527f45524332303a207472616e7366657220746f207a65726f2061646472657373006044820152606401610c64565b60008111611cc35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c64565b6000611cce30611479565b600d54602b5491925082101590600160a01b900460ff16158015611cef5750805b8015611d1357506001600160a01b03841660009081526004602052604090205460ff165b8015611d285750602b54600160a81b900460ff165b15611d3557611d35611f9d565b6001600160a01b03851660009081526005602052604090205460019060ff1680611d7757506001600160a01b03851660009081526005602052604090205460ff165b15611d80575060005b600f5460ff168015611dab57506001600160a01b03851660009081526006602052604090205460ff16155b15611e0e57600e54611dc0856113ec88611479565b1115611e0e5760405162461bcd60e51b815260206004820152601b60248201527f4d61782057616c6c6574204c696d6974204578636565646564212100000000006044820152606401610c64565b611e1a86868684611ff8565b505050505050565b60008184841115611e465760405162461bcd60e51b8152600401610c649190612e68565b506000611e538486612fff565b95945050505050565b6000806000611e69612210565b9092509050611e788282611a5c565b9250505090565b600080611e8c8385612fa6565b905083811015610cf95760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c64565b6000806000806000806000806000611ef58a612392565b9250925092506000806000611f138d8686611f0e611e5c565b6123d4565b919f909e50909c50959a5093985091965092945050505050565b6000610cf983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e22565b60008183611f905760405162461bcd60e51b8152600401610c649190612e68565b506000611e538486612fbe565b602b805460ff60a01b1916600160a01b179055601b5415611fc357611fc3601b54612424565b601c5415611fd657611fd6601c5461248b565b601a5415611fe957611fe9601a546124f2565b602b805460ff60a01b19169055565b612000612589565b801561208e576001600160a01b03841660009081526004602052604090205460ff161561204a5761204a602054601055602154601255602254601455602354601655602454601855565b6001600160a01b03831660009081526004602052604090205460ff161561208e5761208e602554601055602654601255602754601455602854601655602954601855565b6001600160a01b03841660009081526007602052604090205460ff1680156120cf57506001600160a01b03831660009081526007602052604090205460ff16155b156120e4576120df8484846125fb565b6121e2565b6001600160a01b03841660009081526007602052604090205460ff1615801561212557506001600160a01b03831660009081526007602052604090205460ff165b15612135576120df848484612721565b6001600160a01b03841660009081526007602052604090205460ff1615801561217757506001600160a01b03831660009081526007602052604090205460ff16155b15612187576120df8484846127ca565b6001600160a01b03841660009081526007602052604090205460ff1680156121c757506001600160a01b03831660009081526007602052604090205460ff165b156121d7576120df84848461280e565b6121e28484846127ca565b8061220a5761220a601154601055601354601255601554601455601754601655601954601855565b50505050565b600c54600b546000918291825b6008548110156123625782600160006008848154811061223f5761223f61305d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806122aa57508160026000600884815481106122835761228361305d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156122c057600c54600b54945094505050509091565b61230660016000600884815481106122da576122da61305d565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611f2d565b925061234e60026000600884815481106123225761232261305d565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611f2d565b91508061235a81613016565b91505061221d565b50600b54600c5461237291611a5c565b82101561238957600c54600b549350935050509091565b90939092509050565b6000806000806123a185612881565b905060006123ae866128a4565b905060006123c6826123c08986611f2d565b90611f2d565b979296509094509092505050565b60008080806123e388866119dd565b905060006123f188876119dd565b905060006123ff88886119dd565b90506000612411826123c08686611f2d565b939b939a50919850919650505050505050565b4761242e82612973565b600061243a4783611f2d565b601d546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612475573d6000803e3d6000fd5b50601b546124839084611f2d565b601b55505050565b4761249582612973565b60006124a14783611f2d565b601e546040519192506001600160a01b03169082156108fc029083906000818181858888f193505050501580156124dc573d6000803e3d6000fd5b50601c546124ea9084611f2d565b601c55505050565b60006124ff826002611a5c565b9050600061250d8383611f2d565b90504761251983612973565b60006125254783611f2d565b90506125318382612abb565b601a5461253e9086611f2d565b601a5560408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b6010541580156125995750601254155b80156125a55750601454155b80156125b15750601654155b80156125bd5750601854155b156125c457565b6010805460115560128054601355601480546015556016805460175560188054601955600094859055928490559083905582905555565b60008060008060008061260d87611ede565b6001600160a01b038f16600090815260026020526040902054959b5093995091975095509350915061263f9088611f2d565b6001600160a01b038a1660009081526002602090815260408083209390935560019052205461266e9087611f2d565b6001600160a01b03808b1660009081526001602052604080822093909355908a168152205461269d9086611e7f565b6001600160a01b0389166000908152600160205260409020556126bf81612b66565b6126c98483612bee565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161270e91815260200190565b60405180910390a3505050505050505050565b60008060008060008061273387611ede565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506127659087611f2d565b6001600160a01b03808b16600090815260016020908152604080832094909455918b1681526002909152205461279b9084611e7f565b6001600160a01b03891660009081526002602090815260408083209390935560019052205461269d9086611e7f565b6000806000806000806127dc87611ede565b6001600160a01b038f16600090815260016020526040902054959b5093995091975095509350915061266e9087611f2d565b60008060008060008061282087611ede565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506128529088611f2d565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546127659087611f2d565b6000610bcb6103e861289e601054856119dd90919063ffffffff16565b90611a5c565b60006128c16103e861289e601454856119dd90919063ffffffff16565b601a60008282546128d29190612fa6565b90915550506016546128ed906103e89061289e9085906119dd565b601b60008282546128fe9190612fa6565b9091555050601854612919906103e89061289e9085906119dd565b601c600082825461292a9190612fa6565b90915550612939905082612c12565b610bcb6103e861289e6012546018546016546014546129589190612fa6565b6129629190612fa6565b61296c9190612fa6565b85906119dd565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106129a8576129a861305d565b6001600160a01b03928316602091820292909201810191909152602a54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156129fc57600080fd5b505afa158015612a10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a349190612c96565b81600181518110612a4757612a4761305d565b6001600160a01b039283166020918202929092010152602a5460405163791ac94760e01b815291169063791ac94790612a8d908590600090869030904290600401612f35565b600060405180830381600087803b158015612aa757600080fd5b505af1158015611e1a573d6000803e3d6000fd5b602a54601f5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b158015612b2657600080fd5b505af1158015612b3a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b5f9190612dff565b5050505050565b6000612b70611e5c565b90506000612b7e83836119dd565b30600090815260016020526040902054909150612b9b9082611e7f565b3060009081526001602090815260408083209390935560079052205460ff16156118bf5730600090815260026020526040902054612bd99084611e7f565b30600090815260026020526040902055505050565b600c54612bfb9083611f2d565b600c55600a54612c0b9082611e7f565b600a555050565b6000612c2f6103e861289e601254856119dd90919063ffffffff16565b90506000612c3b611e5c565b905081156118bf576000612c4f8284612fe0565b905082600b54612c5f9190612fff565b600b55600c54612c70908290612fff565b600c5550505050565b600060208284031215612c8b57600080fd5b8135610cf981613073565b600060208284031215612ca857600080fd5b8151610cf981613073565b60008060408385031215612cc657600080fd5b8235612cd181613073565b91506020830135612ce181613073565b809150509250929050565b600080600060608486031215612d0157600080fd5b8335612d0c81613073565b92506020840135612d1c81613073565b929592945050506040919091013590565b60008060408385031215612d4057600080fd5b8235612d4b81613073565b91506020830135612ce181613088565b60008060408385031215612d6e57600080fd5b8235612d7981613073565b946020939093013593505050565b600060208284031215612d9957600080fd5b8135610cf981613088565b600060208284031215612db657600080fd5b8151610cf981613088565b600060208284031215612dd357600080fd5b5035919050565b60008060408385031215612ded57600080fd5b823591506020830135612ce181613088565b600080600060608486031215612e1457600080fd5b8351925060208401519150604084015190509250925092565b600080600080600060a08688031215612e4557600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b81811015612e9557858101830151858201604001528201612e79565b81811115612ea7576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f4572726f723a204d61782032352520546178204c696d6974204578636565646560408201526264212160e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612f855784516001600160a01b031683529383019391830191600101612f60565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612fb957612fb9613031565b500190565b600082612fdb57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612ffa57612ffa613031565b500290565b60008282101561301157613011613031565b500390565b600060001982141561302a5761302a613031565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146116cf57600080fd5b80151581146116cf57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e8a4d106e9eb7200001159ba444d8dfa4e3d42178192caab596cac1c3e58ba5764736f6c63430008070033

Deployed Bytecode Sourcemap

14966:24990:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19631:83;;;;;;;;;;-1:-1:-1;19701:5:0;;;;;;;;;;;;-1:-1:-1;;;19701:5:0;;;;19631:83;;;;;;;:::i;:::-;;;;;;;;20543:161;;;;;;;;;;-1:-1:-1;20543:161:0;;;;;:::i;:::-;;:::i;:::-;;;5582:14:1;;5575:22;5557:41;;5545:2;5530:18;20543:161:0;5417:187:1;17256:32:0;;;;;;;;;;-1:-1:-1;17256:32:0;;;;-1:-1:-1;;;;;17256:32:0;;;;;;-1:-1:-1;;;;;4482:32:1;;;4464:51;;4452:2;4437:18;17256:32:0;4318:203:1;16951:33:0;;;;;;;;;;;;;;;;;;;12994:25:1;;;12982:2;12967:18;16951:33:0;12848:177:1;21664:87:0;;;;;;;;;;-1:-1:-1;21733:10:0;;21664:87;;17031:33;;;;;;;;;;;;;;;;19908:95;;;;;;;;;;-1:-1:-1;19988:7:0;;19908:95;;20712:313;;;;;;;;;;-1:-1:-1;20712:313:0;;;;;:::i;:::-;;:::i;17073:84::-;;;;;;;;;;-1:-1:-1;17073:84:0;;;;-1:-1:-1;;;;;17073:84:0;;;24220:128;;;;;;;;;;-1:-1:-1;24220:128:0;;;;;:::i;:::-;;:::i;:::-;;17711:22;;;;;;;;;;-1:-1:-1;17711:22:0;;;;;;;;;;;;;;;;;;;;;;14598:25:1;;;14654:2;14639:18;;14632:34;;;;14682:18;;;14675:34;;;;14740:2;14725:18;;14718:34;14783:3;14768:19;;14761:35;14585:3;14570:19;17711:22:0;14339:463:1;17742:37:0;;;;;;;;;;-1:-1:-1;17742:37:0;;;;-1:-1:-1;;;;;17742:37:0;;;22580:241;;;;;;;;;;-1:-1:-1;22580:241:0;;;;;:::i;:::-;;:::i;19817:83::-;;;;;;;;;;-1:-1:-1;19817:83:0;;16127:2;14949:36:1;;14937:2;14922:18;19817:83:0;14807:184:1;23182:468:0;;;;;;;;;;-1:-1:-1;23182:468:0;;;;;:::i;:::-;;:::i;39207:198::-;;;;;;;;;;-1:-1:-1;39207:198:0;;;;;:::i;:::-;;:::i;21033:218::-;;;;;;;;;;-1:-1:-1;21033:218:0;;;;;:::i;:::-;;:::i;21759:377::-;;;;;;;;;;-1:-1:-1;21759:377:0;;;;;:::i;:::-;;:::i;38819:248::-;;;;;;;;;;-1:-1:-1;38819:248:0;;;;;:::i;:::-;;:::i;23662:113::-;;;;;;;;;;-1:-1:-1;23662:113:0;;;;;:::i;:::-;;:::i;22144:428::-;;;;;;;;;;-1:-1:-1;22144:428:0;;;;;:::i;:::-;;:::i;17684:20::-;;;;;;;;;;-1:-1:-1;17684:20:0;;;;;;;;;;;;;;;;;;15933:41;;;;;;;;;;;;15971:3;15933:41;;39527:103;;;;;;;;;;-1:-1:-1;39527:103:0;;;;;:::i;:::-;;:::i;17847:40::-;;;;;;;;;;-1:-1:-1;17847:40:0;;;;-1:-1:-1;;;17847:40:0;;;;;;17786:24;;;;;;;;;;-1:-1:-1;17786:24:0;;;;-1:-1:-1;;;;;17786:24:0;;;22829:345;;;;;;;;;;-1:-1:-1;22829:345:0;;;;;:::i;:::-;;:::i;29366:123::-;;;;;;;;;;-1:-1:-1;29366:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;29454:27:0;29430:4;29454:27;;;:18;:27;;;;;;;;;29366:123;24086:126;;;;;;;;;;-1:-1:-1;24086:126:0;;;;;:::i;:::-;;:::i;38257:554::-;;;;;;;;;;-1:-1:-1;38257:554:0;;;;;:::i;:::-;;:::i;24356:126::-;;;;;;;;;;-1:-1:-1;24356:126:0;;;;;:::i;:::-;;:::i;20011:198::-;;;;;;;;;;-1:-1:-1;20011:198:0;;;;;:::i;:::-;;:::i;9038:148::-;;;;;;;;;;;;;:::i;39413:106::-;;;;;;;;;;-1:-1:-1;39413:106:0;;;;;:::i;:::-;;:::i;16334:52::-;;;;;;;;;;;;;;;;21536:120;;;;;;;;;;-1:-1:-1;21536:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;21628:20:0;21604:4;21628:20;;;:11;:20;;;;;;;;;21536:120;8824:79;;;;;;;;;;-1:-1:-1;8862:7:0;8889:6;-1:-1:-1;;;;;8889:6:0;8824:79;;19722:87;;;;;;;;;;-1:-1:-1;19794:7:0;;;;;;;;;;;;-1:-1:-1;;;19794:7:0;;;;19722:87;;21259:269;;;;;;;;;;-1:-1:-1;21259:269:0;;;;;:::i;:::-;;:::i;37707:542::-;;;;;;;;;;-1:-1:-1;37707:542:0;;;;;:::i;:::-;;:::i;20217:167::-;;;;;;;;;;-1:-1:-1;20217:167:0;;;;;:::i;:::-;;:::i;16138:57::-;;;;;;;;;;;;;;;;16047:38;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16047:38:0;;;;;39638:153;;;;;;;;;;;;;:::i;39075:124::-;;;;;;;;;;-1:-1:-1;39075:124:0;;;;;:::i;:::-;;:::i;23907:171::-;;;;;;;;;;-1:-1:-1;23907:171:0;;;;;:::i;:::-;;:::i;15617:52::-;;;;;;;;;;-1:-1:-1;15617:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16260:67;;;;;;;;;;;;;;;;15998:42;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15998:42:0;;;;;20392:143;;;;;;;;;;-1:-1:-1;20392:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;20500:18:0;;;20473:7;20500:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20392:143;23787:112;;;;;;;;;;-1:-1:-1;23787:112:0;;;;;:::i;:::-;;:::i;39799:152::-;;;;;;;;;;-1:-1:-1;39799:152:0;;;;;:::i;:::-;;:::i;29497:129::-;;;;;;;;;;-1:-1:-1;29497:129:0;;;;;:::i;:::-;;:::i;9194:244::-;;;;;;;;;;-1:-1:-1;9194:244:0;;;;;:::i;:::-;;:::i;15499:52::-;;;;;;;;;;-1:-1:-1;15499:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16399:35;;;;;;;;;;-1:-1:-1;16399:35:0;;;;;;;;15764:66;;;;;;;;;;-1:-1:-1;15764:66:0;;;;-1:-1:-1;;;;;15764:66:0;;;17164:84;;;;;;;;;;-1:-1:-1;17164:84:0;;;;-1:-1:-1;;;;;17164:84:0;;;16991:33;;;;;;;;;;;;;;;;20543:161;20618:4;20635:39;3845:10;20658:7;20667:6;20635:8;:39::i;:::-;-1:-1:-1;20692:4:0;20543:161;;;;;:::o;20712:313::-;20810:4;20827:36;20837:6;20845:9;20856:6;20827:9;:36::i;:::-;20874:121;20883:6;3845:10;20905:89;20943:6;20905:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20905:19:0;;;;;;:11;:19;;;;;;;;3845:10;20905:33;;;;;;;;;;:37;:89::i;:::-;20874:8;:121::i;:::-;-1:-1:-1;21013:4:0;20712:313;;;;;:::o;24220:128::-;8951:6;;-1:-1:-1;;;;;8951:6:0;3845:10;8951:22;8943:67;;;;-1:-1:-1;;;8943:67:0;;;;;;;:::i;:::-;;;;;;;;;24308:17:::1;:32:::0;;-1:-1:-1;;;;;;24308:32:0::1;-1:-1:-1::0;;;;;24308:32:0;;;::::1;::::0;;;::::1;::::0;;24220:128::o;22580:241::-;22646:7;22685;;22674;:18;;22666:61;;;;-1:-1:-1;;;22666:61:0;;10744:2:1;22666:61:0;;;10726:21:1;10783:2;10763:18;;;10756:30;10822:32;10802:18;;;10795:60;10872:18;;22666:61:0;10542:354:1;22666:61:0;22738:19;22761:10;:8;:10::i;:::-;22738:33;-1:-1:-1;22789:24:0;:7;22738:33;22789:11;:24::i;:::-;22782:31;22580:241;-1:-1:-1;;;22580:241:0:o;23182:468::-;8951:6;;-1:-1:-1;;;;;8951:6:0;3845:10;8951:22;8943:67;;;;-1:-1:-1;;;8943:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23264:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23256:49;;;::::0;-1:-1:-1;;;23256:49:0;;10399:2:1;23256:49:0::1;::::0;::::1;10381:21:1::0;10438:2;10418:18;;;10411:30;-1:-1:-1;;;10457:18:1;;;10450:46;10513:18;;23256:49:0::1;10197:340:1::0;23256:49:0::1;23321:9;23316:327;23340:9;:16:::0;23336:20;::::1;23316:327;;;23398:7;-1:-1:-1::0;;;;;23382:23:0::1;:9;23392:1;23382:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;23382:12:0::1;:23;23378:254;;;23441:9;23451:16:::0;;:20:::1;::::0;23470:1:::1;::::0;23451:20:::1;:::i;:::-;23441:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;23426:9:::1;:12:::0;;-1:-1:-1;;;;;23441:31:0;;::::1;::::0;23436:1;;23426:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;23426:46:0::1;-1:-1:-1::0;;;;;23426:46:0;;::::1;;::::0;;23491:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;23530:11:::1;:20:::0;;;;:28;;-1:-1:-1;;23530:28:0::1;::::0;;23577:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;23577:15:0;;;;;-1:-1:-1;;;;;;23577:15:0::1;::::0;;;;;23316:327:::1;23182:468:::0;:::o;23378:254::-:1;23358:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23316:327;;;;23182:468:::0;:::o;39207:198::-;8951:6;;-1:-1:-1;;;;;8951:6:0;3845:10;8951:22;8943:67;;;;-1:-1:-1;;;8943:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39298:25:0;::::1;;::::0;;;:19:::1;:25;::::0;;;;;::::1;;:36;;::::0;::::1;;;;39290:61;;;::::0;-1:-1:-1;;;39290:61:0;;9697:2:1;39290:61:0::1;::::0;::::1;9679:21:1::0;9736:2;9716:18;;;9709:30;-1:-1:-1;;;9755:18:1;;;9748:43;9808:18;;39290:61:0::1;9495:337:1::0;39290:61:0::1;-1:-1:-1::0;;;;;39362:25:0;;;::::1;;::::0;;;:19:::1;:25;::::0;;;;:35;;-1:-1:-1;;39362:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39207:198::o;21033:218::-;3845:10;21121:4;21170:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21170:34:0;;;;;;;;;;21121:4;;21138:83;;21161:7;;21170:50;;21209:10;21170:38;:50::i;21759:377::-;3845:10;21811:14;21860:19;;;:11;:19;;;;;;;;21859:20;21851:77;;;;-1:-1:-1;;;21851:77:0;;12276:2:1;21851:77:0;;;12258:21:1;12315:2;12295:18;;;12288:30;12354:34;12334:18;;;12327:62;-1:-1:-1;;;12405:18:1;;;12398:42;12457:19;;21851:77:0;12074:408:1;21851:77:0;21940:15;21964:19;21975:7;21964:10;:19::i;:::-;-1:-1:-1;;;;;;;;;22012:15:0;;;;;;:7;:15;;;;;;21939:44;;-1:-1:-1;22012:28:0;;:15;-1:-1:-1;21939:44:0;22012:19;:28::i;:::-;-1:-1:-1;;;;;21994:15:0;;;;;;:7;:15;;;;;:46;22061:7;;:20;;22073:7;22061:11;:20::i;:::-;22051:7;:30;22105:10;;:23;;22120:7;22105:14;:23::i;:::-;22092:10;:36;-1:-1:-1;;;21759:377:0:o;38819:248::-;8951:6;;-1:-1:-1;;;;;8951:6:0;3845:10;8951:22;8943:67;;;;-1:-1:-1;;;8943:67:0;;;;;;;:::i;:::-;38968:11:::1;:26:::0;;-1:-1:-1;;;;;38968:26:0;;::::1;-1:-1:-1::0;;;;;;38968:26:0;;::::1;::::0;::::1;::::0;;39025:4:::1;38893:31;39005:26:::0;;;:11:::1;:26;::::0;;;;;;;:48;;;;;;;-1:-1:-1;;39005:54:0;;38819:248::o;23662:113::-;8951:6;;-1:-1:-1;;;;;8951:6:0;3845:10;8951:22;8943:67;;;;-1:-1:-1;;;8943:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23733:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;23733:34:0::1;23763:4;23733:34;::::0;;23662:113::o;22144:428::-;22229:7;22268;;22257;:18;;22249:59;;;;-1:-1:-1;;;22249:59:0;;7415:2:1;22249:59:0;;;7397:21:1;7454:2;7434:18;;;7427:30;7493;7473:18;;;7466:58;7541:18;;22249:59:0;7213:352:1;22249:59:0;22324:17;22319:246;;22359:15;22383:19;22394:7;22383:10;:19::i;:::-;-1:-1:-1;22358:44:0;;-1:-1:-1;22417:14:0;;-1:-1:-1;;;;;22417:14:0;22319:246;22466:23;22497:19;22508:7;22497:10;:19::i;:::-;-1:-1:-1;22464:52:0;;-1:-1:-1;22531:22:0;;-1:-1:-1;;;;;22531:22:0;39527:103;8951:6;;-1:-1:-1;;;;;8951:6:0;3845:10;8951:22;8943:67;;;;-1:-1:-1;;;8943:67:0;;;;;;;:::i;:::-;39596:16:::1;:26:::0;;-1:-1:-1;;39596:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39527:103::o;22829:345::-;8951:6;;-1:-1:-1;;;;;8951:6:0;3845:10;8951:22;8943:67;;;;-1:-1:-1;;;8943:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22912:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22911:21;22903:73;;;::::0;-1:-1:-1;;;22903:73:0;;7007:2:1;22903:73:0::1;::::0;::::1;6989:21:1::0;7046:2;7026:18;;;7019:30;7085:34;7065:18;;;7058:62;-1:-1:-1;;;7136:18:1;;;7129:37;7183:19;;22903:73:0::1;6805:403:1::0;22903:73:0::1;-1:-1:-1::0;;;;;22990:16:0;::::1;23009:1;22990:16:::0;;;:7:::1;:16;::::0;;;;;:20;22987:108:::1;;-1:-1:-1::0;;;;;23066:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;23046:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;23027:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;22987:108:::1;-1:-1:-1::0;;;;;23105:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;23105:27:0::1;23128:4;23105:27:::0;;::::1;::::0;;;23143:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;23143:23:0::1;::::0;;::::1;::::0;;22829:345::o;24086:126::-;8951:6;;-1:-1:-1;;;;;8951:6:0;3845:10;8951:22;8943:67;;;;-1:-1:-1;;;8943:67:0;;;;;;;:::i;:::-;24174:15:::1;:30:::0;;-1:-1:-1;;;;;;24174:30:0::1;-1:-1:-1::0;;;;;24174:30:0;;;::::1;::::0;;;::::1;::::0;;24086:126::o;38257:554::-;8951:6;;-1:-1:-1;;;;;8951:6:0;3845:10;8951:22;8943:67;;;;-1:-1:-1;;;8943:67:0;;;;;;;:::i;:::-;38400:13:::1;38416:78;38480:13:::0;38416:59:::1;38461:13:::0;38416:59;38442:13;38416:59;:7;38428:8;38416:11:::1;:21::i;:::-;:25:::0;::::1;:40::i;:78::-;38400:94;;15971:3;38513:8;:23;;38505:70;;;;-1:-1:-1::0;;;38505:70:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;38586:7:0::1;:27:::0;;;;38624:18;:29;;;;38664:23;:39;38714:23;:39;38764:23;:39;38257:554::o;24356:126::-;8951:6;;-1:-1:-1;;;;;8951:6:0;3845:10;8951:22;8943:67;;;;-1:-1:-1;;;8943:67:0;;;;;;;:::i;:::-;24444:15:::1;:30:::0;;-1:-1:-1;;;;;;24444:30:0::1;-1:-1:-1::0;;;;;24444:30:0;;;::::1;::::0;;;::::1;::::0;;24356:126::o;20011:198::-;-1:-1:-1;;;;;20101:20:0;;20077:7;20101:20;;;:11;:20;;;;;;;;20097:49;;;-1:-1:-1;;;;;;20130:16:0;;;;;:7;:16;;;;;;;20011:198::o;20097:49::-;-1:-1:-1;;;;;20184:16:0;;;;;;:7;:16;;;;;;20164:37;;:19;:37::i;9038:148::-;8951:6;;-1:-1:-1;;;;;8951:6:0;3845:10;8951:22;8943:67;;;;-1:-1:-1;;;8943:67:0;;;;;;;:::i;:::-;9145:1:::1;9129:6:::0;;9108:40:::1;::::0;-1:-1:-1;;;;;9129:6:0;;::::1;::::0;9108:40:::1;::::0;9145:1;;9108:40:::1;9176:1;9159:19:::0;;-1:-1:-1;;;;;;9159:19:0::1;::::0;;9038:148::o;39413:106::-;8951:6;;-1:-1:-1;;;;;8951:6:0;3845:10;8951:22;8943:67;;;;-1:-1:-1;;;8943:67:0;;;;;;;:::i;:::-;39490:10:::1;:21:::0;39413:106::o;21259:269::-;21352:4;21369:129;3845:10;21392:7;21401:96;21440:15;21401:96;;;;;;;;;;;;;;;;;3845:10;21401:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21401:34:0;;;;;;;;;;;;:38;:96::i;37707:542::-;8951:6;;-1:-1:-1;;;;;8951:6:0;3845:10;8951:22;8943:67;;;;-1:-1:-1;;;8943:67:0;;;;;;;:::i;:::-;37843:13:::1;37859:78;37923:13:::0;37859:59:::1;37904:13:::0;37859:59;37885:13;37859:59;:7;37871:8;37859:11:::1;:21::i;:78::-;37843:94;;15971:3;37956:8;:23;;37948:70;;;;-1:-1:-1::0;;;37948:70:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;38029:6:0::1;:26:::0;;;;38066:17;:28;;;;38105:22;:38;38154:22;:38;38203:22;:38;37707:542::o;20217:167::-;20295:4;20312:42;3845:10;20336:9;20347:6;20312:9;:42::i;39638:153::-;8951:6;;-1:-1:-1;;;;;8951:6:0;3845:10;8951:22;8943:67;;;;-1:-1:-1;;;8943:67:0;;;;;;;:::i;:::-;39703:58:::1;::::0;39691:7:::1;::::0;39711:10:::1;::::0;39735:21:::1;::::0;39691:7;39703:58;39691:7;39703:58;39735:21;39711:10;39703:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39690:71;;;39780:2;39772:11;;;::::0;::::1;;39679:112;39638:153::o:0;39075:124::-;8951:6;;-1:-1:-1;;;;;8951:6:0;3845:10;8951:22;8943:67;;;;-1:-1:-1;;;8943:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39155:26:0;;;::::1;;::::0;;;:19:::1;:26;::::0;;;;:36;;-1:-1:-1;;39155:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39075:124::o;23907:171::-;8951:6;;-1:-1:-1;;;;;8951:6:0;3845:10;8951:22;8943:67;;;;-1:-1:-1;;;8943:67:0;;;;;;;:::i;:::-;23984:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;23984:32:0::1;-1:-1:-1::0;;;;23984:32:0;;::::1;;::::0;;24032:38:::1;::::0;::::1;::::0;::::1;::::0;24008:8;5582:14:1;5575:22;5557:41;;5545:2;5530:18;;5417:187;24032:38:0::1;;;;;;;;23907:171:::0;:::o;23787:112::-;8951:6;;-1:-1:-1;;;;;8951:6:0;3845:10;8951:22;8943:67;;;;-1:-1:-1;;;8943:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23856:27:0::1;23886:5;23856:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;23856:35:0::1;::::0;;23787:112::o;39799:152::-;8951:6;;-1:-1:-1;;;;;8951:6:0;3845:10;8951:22;8943:67;;;;-1:-1:-1;;;8943:67:0;;;;;;;:::i;:::-;39899:12:::1;-1:-1:-1::0;;;;;39892:29:0::1;;39922:7;8862::::0;8889:6;-1:-1:-1;;;;;8889:6:0;;8824:79;39922:7:::1;39892:51;::::0;-1:-1:-1;;;;;;39892:51:0::1;::::0;;;;;;-1:-1:-1;;;;;4718:32:1;;;39892:51:0::1;::::0;::::1;4700::1::0;4767:18;;;4760:34;;;4673:18;;39892:51:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39799:152:::0;;:::o;29497:129::-;8951:6;;-1:-1:-1;;;;;8951:6:0;3845:10;8951:22;8943:67;;;;-1:-1:-1;;;8943:67:0;;;;;;;:::i;:::-;29580:29:::1;:38:::0;29497:129::o;9194:244::-;8951:6;;-1:-1:-1;;;;;8951:6:0;3845:10;8951:22;8943:67;;;;-1:-1:-1;;;8943:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9283:22:0;::::1;9275:73;;;::::0;-1:-1:-1;;;9275:73:0;;8128:2:1;9275:73:0::1;::::0;::::1;8110:21:1::0;8167:2;8147:18;;;8140:30;8206:34;8186:18;;;8179:62;-1:-1:-1;;;8257:18:1;;;8250:36;8303:19;;9275:73:0::1;7926:402:1::0;9275:73:0::1;9385:6;::::0;;9364:38:::1;::::0;-1:-1:-1;;;;;9364:38:0;;::::1;::::0;9385:6;::::1;::::0;9364:38:::1;::::0;::::1;9413:6;:17:::0;;-1:-1:-1;;;;;;9413:17:0::1;-1:-1:-1::0;;;;;9413:17:0;;;::::1;::::0;;;::::1;::::0;;9194:244::o;2794:256::-;2852:7;2882:6;2878:47;;-1:-1:-1;2912:1:0;2905:8;;2878:47;2937:9;2949:5;2953:1;2949;:5;:::i;:::-;2937:17;-1:-1:-1;2982:1:0;2973:5;2977:1;2937:17;2973:5;:::i;:::-;:10;2965:56;;;;-1:-1:-1;;;2965:56:0;;11103:2:1;2965:56:0;;;11085:21:1;11142:2;11122:18;;;11115:30;11181:34;11161:18;;;11154:62;-1:-1:-1;;;11232:18:1;;;11225:31;11273:19;;2965:56:0;10901:397:1;3058:132:0;3116:7;3143:39;3147:1;3150;3143:39;;;;;;;;;;;;;;;;;:3;:39::i;29634:329::-;-1:-1:-1;;;;;29727:19:0;;29719:64;;;;-1:-1:-1;;;29719:64:0;;12689:2:1;29719:64:0;;;12671:21:1;;;12708:18;;;12701:30;12767:34;12747:18;;;12740:62;12819:18;;29719:64:0;12487:356:1;29719:64:0;-1:-1:-1;;;;;29802:21:0;;29794:64;;;;-1:-1:-1;;;29794:64:0;;6648:2:1;29794:64:0;;;6630:21:1;6687:2;6667:18;;;6660:30;6726:32;6706:18;;;6699:60;6776:18;;29794:64:0;6446:354:1;29794:64:0;-1:-1:-1;;;;;29871:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;29923:32;;12994:25:1;;;29923:32:0;;12967:18:1;29923:32:0;;;;;;;29634:329;;;:::o;29971:1255::-;-1:-1:-1;;;;;30093:18:0;;30085:64;;;;-1:-1:-1;;;30085:64:0;;8891:2:1;30085:64:0;;;8873:21:1;8930:2;8910:18;;;8903:30;8969:34;8949:18;;;8942:62;-1:-1:-1;;;9020:18:1;;;9013:31;9061:19;;30085:64:0;8689:397:1;30085:64:0;-1:-1:-1;;;;;30168:16:0;;30160:60;;;;-1:-1:-1;;;30160:60:0;;10039:2:1;30160:60:0;;;10021:21:1;10078:2;10058:18;;;10051:30;10117:33;10097:18;;;10090:61;10168:18;;30160:60:0;9837:355:1;30160:60:0;30248:1;30239:6;:10;30231:64;;;;-1:-1:-1;;;30231:64:0;;11866:2:1;30231:64:0;;;11848:21:1;11905:2;11885:18;;;11878:30;11944:34;11924:18;;;11917:62;-1:-1:-1;;;11995:18:1;;;11988:39;12044:19;;30231:64:0;11664:405:1;30231:64:0;30308:28;30339:24;30357:4;30339:9;:24::i;:::-;30435:29;;30494:16;;30308:55;;-1:-1:-1;30411:53:0;;;;-1:-1:-1;;;30494:16:0;;;;30493:17;:53;;;;;30527:19;30493:53;:93;;;;-1:-1:-1;;;;;;30563:23:0;;;;;;:19;:23;;;;;;;;30493:93;:131;;;;-1:-1:-1;30603:21:0;;-1:-1:-1;;;30603:21:0;;;;30493:131;30475:232;;;30665:16;:14;:16::i;:::-;-1:-1:-1;;;;;30907:24:0;;30780:12;30907:24;;;:18;:24;;;;;;30795:4;;30907:24;;;:50;;-1:-1:-1;;;;;;30935:22:0;;;;;;:18;:22;;;;;;;;30907:50;30904:96;;;-1:-1:-1;30983:5:0;30904:96;31015:16;;;;:44;;;;-1:-1:-1;;;;;;31036:23:0;;;;;;:19;:23;;;;;;;;31035:24;31015:44;31012:154;;;31113:10;;31084:25;31102:6;31084:13;31094:2;31084:9;:13::i;:25::-;:39;;31076:78;;;;-1:-1:-1;;;31076:78:0;;7772:2:1;31076:78:0;;;7754:21:1;7811:2;7791:18;;;7784:30;7850:29;7830:18;;;7823:57;7897:18;;31076:78:0;7570:351:1;31076:78:0;31180:38;31195:4;31200:2;31203:6;31210:7;31180:14;:38::i;:::-;30074:1152;;;29971:1255;;;:::o;2594:192::-;2680:7;2716:12;2708:6;;;;2700:29;;;;-1:-1:-1;;;2700:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2740:9:0;2752:5;2756:1;2752;:5;:::i;:::-;2740:17;2594:192;-1:-1:-1;;;;;2594:192:0:o;25930:163::-;25971:7;25992:15;26009;26028:19;:17;:19::i;:::-;25991:56;;-1:-1:-1;25991:56:0;-1:-1:-1;26065:20:0;25991:56;;26065:11;:20::i;:::-;26058:27;;;;25930:163;:::o;2261:181::-;2319:7;;2351:5;2355:1;2351;:5;:::i;:::-;2339:17;;2380:1;2375;:6;;2367:46;;;;-1:-1:-1;;;2367:46:0;;8535:2:1;2367:46:0;;;8517:21:1;8574:2;8554:18;;;8547:30;8613:29;8593:18;;;8586:57;8660:18;;2367:46:0;8333:351:1;24738:414:0;24792:7;24801;24810;24819;24828;24837;24858:23;24883:12;24897:18;24919:20;24931:7;24919:11;:20::i;:::-;24857:82;;;;;;24951:15;24968:23;24993:12;25009:50;25021:7;25030:4;25036:10;25048;:8;:10::i;:::-;25009:11;:50::i;:::-;24950:109;;;;-1:-1:-1;24950:109:0;;-1:-1:-1;25110:15:0;;-1:-1:-1;25127:4:0;;-1:-1:-1;25133:10:0;;-1:-1:-1;24738:414:0;;-1:-1:-1;;;;;24738:414:0:o;2450:136::-;2508:7;2535:43;2539:1;2542;2535:43;;;;;;;;;;;;;;;;;:3;:43::i;3198:191::-;3284:7;3319:12;3312:5;3304:28;;;;-1:-1:-1;;;3304:28:0;;;;;;;;:::i;:::-;-1:-1:-1;3343:9:0;3355:5;3359:1;3355;:5;:::i;32421:272::-;18130:16;:23;;-1:-1:-1;;;;18130:23:0;-1:-1:-1;;;18130:23:0;;;32481:18:::1;::::0;:22;32478:62:::1;;32505:35;32521:18;;32505:15;:35::i;:::-;32554:18;::::0;:22;32551:62:::1;;32578:35;32594:18;;32578:15;:35::i;:::-;32627:18;::::0;:22;32624:61:::1;;32651:34;32666:18;;32651:14;:34::i;:::-;18176:16:::0;:24;;-1:-1:-1;;;;18176:24:0;;;32421:272::o;33682:1075::-;33803:14;:12;:14::i;:::-;33838:7;33834:236;;;-1:-1:-1;;;;;33869:27:0;;;;;;:19;:27;;;;;;;;33865:84;;;33921:8;28873:6;:16;28863:7;:26;28911:17;;28900:8;:28;28955:22;;28939:13;:38;29004:22;;28988:13;:38;29053:22;;29037:13;:38;28825:258;33921:8;-1:-1:-1;;;;;33971:30:0;;;;;;:19;:30;;;;;;;;33967:88;;;34026:9;29143:7;:17;29133:7;:27;29182:18;;29171:8;:29;29227:23;;-1:-1:-1;29211:39:0;29277:23;;29261:13;:39;29327:23;;29311:13;:39;29095:263;34026:9;-1:-1:-1;;;;;34095:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;34119:22:0;;;;;;:11;:22;;;;;;;;34118:23;34095:46;34091:597;;;34158:48;34180:6;34188:9;34199:6;34158:21;:48::i;:::-;34091:597;;;-1:-1:-1;;;;;34229:19:0;;;;;;:11;:19;;;;;;;;34228:20;:46;;;;-1:-1:-1;;;;;;34252:22:0;;;;;;:11;:22;;;;;;;;34228:46;34224:464;;;34291:46;34311:6;34319:9;34330:6;34291:19;:46::i;34224:464::-;-1:-1:-1;;;;;34360:19:0;;;;;;:11;:19;;;;;;;;34359:20;:47;;;;-1:-1:-1;;;;;;34384:22:0;;;;;;:11;:22;;;;;;;;34383:23;34359:47;34355:333;;;34423:44;34441:6;34449:9;34460:6;34423:17;:44::i;34355:333::-;-1:-1:-1;;;;;34489:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;34512:22:0;;;;;;:11;:22;;;;;;;;34489:45;34485:203;;;34551:48;34573:6;34581:9;34592:6;34551:21;:48::i;34485:203::-;34632:44;34650:6;34658:9;34669:6;34632:17;:44::i;:::-;34712:7;34708:41;;34734:15;28612;;28602:7;:25;28649:16;;28638:8;:27;28692:21;;28676:13;:37;28740:21;;28724:13;:37;28788:21;;28772:13;:37;28558:259;34734:15;33682:1075;;;;:::o;26101:561::-;26198:7;;26234;;26151;;;;;26258:289;26282:9;:16;26278:20;;26258:289;;;26348:7;26324;:21;26332:9;26342:1;26332:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26332:12:0;26324:21;;;;;;;;;;;;;:31;;:66;;;26383:7;26359;:21;26367:9;26377:1;26367:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26367:12:0;26359:21;;;;;;;;;;;;;:31;26324:66;26320:97;;;26400:7;;26409;;26392:25;;;;;;;26101:561;;:::o;26320:97::-;26442:34;26454:7;:21;26462:9;26472:1;26462:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26462:12:0;26454:21;;;;;;;;;;;;;26442:7;;:11;:34::i;:::-;26432:44;;26501:34;26513:7;:21;26521:9;26531:1;26521:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26521:12:0;26513:21;;;;;;;;;;;;;26501:7;;:11;:34::i;:::-;26491:44;-1:-1:-1;26300:3:0;;;;:::i;:::-;;;;26258:289;;;-1:-1:-1;26583:7:0;;26571;;:20;;:11;:20::i;:::-;26561:7;:30;26557:61;;;26601:7;;26610;;26593:25;;;;;;26101:561;;:::o;26557:61::-;26637:7;;26646;;-1:-1:-1;26101:561:0;-1:-1:-1;26101:561:0:o;25160:325::-;25215:7;25224;25233;25253:12;25268:24;25284:7;25268:15;:24::i;:::-;25253:39;;25303:18;25324:30;25346:7;25324:21;:30::i;:::-;25303:51;-1:-1:-1;25365:23:0;25391:33;25303:51;25391:17;:7;25403:4;25391:11;:17::i;:::-;:21;;:33::i;:::-;25365:59;25460:4;;-1:-1:-1;25466:10:0;;-1:-1:-1;25160:325:0;;-1:-1:-1;;;25160:325:0:o;25493:429::-;25608:7;;;;25664:24;:7;25676:11;25664;:24::i;:::-;25646:42;-1:-1:-1;25699:12:0;25714:21;:4;25723:11;25714:8;:21::i;:::-;25699:36;-1:-1:-1;25746:18:0;25767:27;:10;25782:11;25767:14;:27::i;:::-;25746:48;-1:-1:-1;25805:23:0;25831:33;25746:48;25831:17;:7;25843:4;25831:11;:17::i;:33::-;25883:7;;;;-1:-1:-1;25909:4:0;;-1:-1:-1;25493:429:0;;-1:-1:-1;;;;;;;25493:429:0:o;31234:344::-;31312:21;31344:24;31361:6;31344:16;:24::i;:::-;31379:20;31402:40;:21;31428:13;31402:25;:40::i;:::-;31461:15;;31453:50;;31379:63;;-1:-1:-1;;;;;;31461:15:0;;31453:50;;;;;31379:63;;31461:15;31453:50;31461:15;31453:50;31379:63;31461:15;31453:50;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31540:18:0;;:30;;31563:6;31540:22;:30::i;:::-;31519:18;:51;-1:-1:-1;;;31234:344:0:o;31586:346::-;31664:21;31696:24;31713:6;31696:16;:24::i;:::-;31731:20;31754:40;:21;31780:13;31754:25;:40::i;:::-;31813:15;;31805:50;;31731:63;;-1:-1:-1;;;;;;31813:15:0;;31805:50;;;;;31731:63;;31813:15;31805:50;31813:15;31805:50;31731:63;31813:15;31805:50;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31894:18:0;;:30;;31917:6;31894:22;:30::i;:::-;31873:18;:51;-1:-1:-1;;;31586:346:0:o;31940:471::-;31996:9;32008:13;:6;32019:1;32008:10;:13::i;:::-;31996:25;-1:-1:-1;32032:14:0;32049:16;:6;31996:25;32049:10;:16::i;:::-;32032:33;-1:-1:-1;32099:21:0;32131:22;32148:4;32131:16;:22::i;:::-;32164:20;32187:40;:21;32213:13;32187:25;:40::i;:::-;32164:63;;32238:39;32251:9;32261:15;32238:12;:39::i;:::-;32309:18;;:30;;32332:6;32309:22;:30::i;:::-;32288:18;:51;32355:48;;;14217:25:1;;;14273:2;14258:18;;14251:34;;;14301:18;;;14294:34;;;32355:48:0;;14205:2:1;14190:18;32355:48:0;;;;;;;31985:426;;;;31940:471;:::o;28021:525::-;28067:7;;:12;:29;;;;-1:-1:-1;28083:8:0;;:13;28067:29;:51;;;;-1:-1:-1;28100:13:0;;:18;28067:51;:73;;;;-1:-1:-1;28122:13:0;;:18;28067:73;:95;;;;-1:-1:-1;28144:13:0;;:18;28067:95;28064:107;;;28021:525::o;28064:107::-;28210:7;;;28192:15;:25;28247:8;;;28228:16;:27;28290:13;;;28266:21;:37;28338:13;;;28314:21;:37;28386:13;;;28362:21;:37;-1:-1:-1;28420:11:0;;;;28442:12;;;;28465:17;;;;28493;;;28521;28021:525::o;35869:566::-;35972:15;35989:23;36014:12;36028:23;36053:12;36067:18;36089:19;36100:7;36089:10;:19::i;:::-;-1:-1:-1;;;;;36137:15:0;;;;;;:7;:15;;;;;;35971:137;;-1:-1:-1;35971:137:0;;-1:-1:-1;35971:137:0;;-1:-1:-1;35971:137:0;-1:-1:-1;35971:137:0;-1:-1:-1;35971:137:0;-1:-1:-1;36137:28:0;;36157:7;36137:19;:28::i;:::-;-1:-1:-1;;;;;36119:15:0;;;;;;:7;:15;;;;;;;;:46;;;;36194:7;:15;;;;:28;;36214:7;36194:19;:28::i;:::-;-1:-1:-1;;;;;36176:15:0;;;;;;;:7;:15;;;;;;:46;;;;36254:18;;;;;;;:39;;36277:15;36254:22;:39::i;:::-;-1:-1:-1;;;;;36233:18:0;;;;;;:7;:18;;;;;:60;36307:26;36322:10;36307:14;:26::i;:::-;36344:23;36356:4;36362;36344:11;:23::i;:::-;36400:9;-1:-1:-1;;;;;36383:44:0;36392:6;-1:-1:-1;;;;;36383:44:0;;36411:15;36383:44;;;;12994:25:1;;12982:2;12967:18;;12848:177;36383:44:0;;;;;;;;35960:475;;;;;;35869:566;;;:::o;35275:586::-;35376:15;35393:23;35418:12;35432:23;35457:12;35471:18;35493:19;35504:7;35493:10;:19::i;:::-;-1:-1:-1;;;;;35541:15:0;;;;;;:7;:15;;;;;;35375:137;;-1:-1:-1;35375:137:0;;-1:-1:-1;35375:137:0;;-1:-1:-1;35375:137:0;-1:-1:-1;35375:137:0;-1:-1:-1;35375:137:0;-1:-1:-1;35541:28:0;;35375:137;35541:19;:28::i;:::-;-1:-1:-1;;;;;35523:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;35601:18;;;;;:7;:18;;;;;:39;;35624:15;35601:22;:39::i;:::-;-1:-1:-1;;;;;35580:18:0;;;;;;:7;:18;;;;;;;;:60;;;;35672:7;:18;;;;:39;;35695:15;35672:22;:39::i;34765:502::-;34864:15;34881:23;34906:12;34920:23;34945:12;34959:18;34981:19;34992:7;34981:10;:19::i;:::-;-1:-1:-1;;;;;35029:15:0;;;;;;:7;:15;;;;;;34863:137;;-1:-1:-1;34863:137:0;;-1:-1:-1;34863:137:0;;-1:-1:-1;34863:137:0;-1:-1:-1;34863:137:0;-1:-1:-1;34863:137:0;-1:-1:-1;35029:28:0;;34863:137;35029:19;:28::i;36443:642::-;36546:15;36563:23;36588:12;36602:23;36627:12;36641:18;36663:19;36674:7;36663:10;:19::i;:::-;-1:-1:-1;;;;;36711:15:0;;;;;;:7;:15;;;;;;36545:137;;-1:-1:-1;36545:137:0;;-1:-1:-1;36545:137:0;;-1:-1:-1;36545:137:0;-1:-1:-1;36545:137:0;-1:-1:-1;36545:137:0;-1:-1:-1;36711:28:0;;36731:7;36711:19;:28::i;:::-;-1:-1:-1;;;;;36693:15:0;;;;;;:7;:15;;;;;;;;:46;;;;36768:7;:15;;;;:28;;36788:7;36768:19;:28::i;27043:154::-;27107:7;27134:55;27173:5;27134:20;27146:7;;27134;:11;;:20;;;;:::i;:::-;:24;;:55::i;27556:453::-;27621:7;27665:37;27696:5;27665:26;27677:13;;27665:7;:11;;:26;;;;:::i;:37::-;27643:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;27747:13:0;;27735:37;;27766:5;;27735:26;;:7;;:11;:26::i;:37::-;27713:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;27817:13:0;;27805:37;;27836:5;;27805:26;;:7;;:11;:26::i;:37::-;27783:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;27853:24:0;;-1:-1:-1;27869:7:0;27853:15;:24::i;:::-;27897:104;27985:5;27897:69;27957:8;;27941:13;;27925;;27909;;:29;;;;:::i;:::-;:45;;;;:::i;:::-;:56;;;;:::i;:::-;27897:7;;:11;:69::i;32705:506::-;32855:16;;;32869:1;32855:16;;;;;;;;32831:21;;32855:16;;;;;;;;;;-1:-1:-1;32855:16:0;32831:40;;32900:4;32882;32887:1;32882:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32882:23:0;;;:7;;;;;;;;;;:23;;;;32926:11;;:18;;;-1:-1:-1;;;32926:18:0;;;;:11;;;;;:16;;:18;;;;;32882:7;;32926:18;;;;;:11;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32916:4;32921:1;32916:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32916:28:0;;;:7;;;;;;;;;:28;32983:11;;:220;;-1:-1:-1;;;32983:220:0;;:11;;;:62;;:220;;33060:11;;32983;;33130:4;;33157;;33177:15;;32983:220;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33220:379;33333:11;;33533:17;;33333:258;;-1:-1:-1;;;33333:258:0;;33401:4;33333:258;;;5146:34:1;5196:18;;;5189:34;;;33333:11:0;5239:18:1;;;5232:34;;;5282:18;;;5275:34;-1:-1:-1;;;;;33533:17:0;;;5325:19:1;;;5318:44;33565:15:0;5378:19:1;;;5371:35;33333:11:0;;;:27;;33368:9;;5080:19:1;;33333:258:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;33220:379;;:::o;26674:357::-;26737:19;26760:10;:8;:10::i;:::-;26737:33;-1:-1:-1;26781:18:0;26802:27;:10;26737:33;26802:14;:27::i;:::-;26881:4;26865:22;;;;:7;:22;;;;;;26781:48;;-1:-1:-1;26865:38:0;;26781:48;26865:26;:38::i;:::-;26856:4;26840:22;;;;:7;:22;;;;;;;;:63;;;;26917:11;:26;;;;;;26914:107;;;26999:4;26983:22;;;;:7;:22;;;;;;:38;;27010:10;26983:26;:38::i;:::-;26974:4;26958:22;;;;:7;:22;;;;;:63;26726:305;;26674:357;:::o;24583:147::-;24661:7;;:17;;24673:4;24661:11;:17::i;:::-;24651:7;:27;24702:10;;:20;;24717:4;24702:14;:20::i;:::-;24689:10;:33;-1:-1:-1;;24583:147:0:o;27205:343::-;27266:13;27282:32;27308:5;27282:21;27294:8;;27282:7;:11;;:21;;;;:::i;:32::-;27266:48;;27325:19;27348:10;:8;:10::i;:::-;27325:33;-1:-1:-1;27373:12:0;;27369:172;;27402:16;27421:22;27432:11;27421:8;:22;:::i;:::-;27402:41;;27478:8;27468:7;;:18;;;;:::i;:::-;27458:7;:28;27511:7;;:18;;27521:8;;27511:18;:::i;:::-;27501:7;:28;-1:-1:-1;27255:293:0;;27205:343;:::o;14:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:52;;;405:1;402;395:12;357:52;437:9;431:16;456:31;481:5;456:31;:::i;782:388::-;850:6;858;911:2;899:9;890:7;886:23;882:32;879:52;;;927:1;924;917:12;879:52;966:9;953:23;985:31;1010:5;985:31;:::i;:::-;1035:5;-1:-1:-1;1092:2:1;1077:18;;1064:32;1105:33;1064:32;1105:33;:::i;:::-;1157:7;1147:17;;;782:388;;;;;:::o;1175:456::-;1252:6;1260;1268;1321:2;1309:9;1300:7;1296:23;1292:32;1289:52;;;1337:1;1334;1327:12;1289:52;1376:9;1363:23;1395:31;1420:5;1395:31;:::i;:::-;1445:5;-1:-1:-1;1502:2:1;1487:18;;1474:32;1515:33;1474:32;1515:33;:::i;:::-;1175:456;;1567:7;;-1:-1:-1;;;1621:2:1;1606:18;;;;1593:32;;1175:456::o;1636:382::-;1701:6;1709;1762:2;1750:9;1741:7;1737:23;1733:32;1730:52;;;1778:1;1775;1768:12;1730:52;1817:9;1804:23;1836:31;1861:5;1836:31;:::i;:::-;1886:5;-1:-1:-1;1943:2:1;1928:18;;1915:32;1956:30;1915:32;1956:30;:::i;2023:315::-;2091:6;2099;2152:2;2140:9;2131:7;2127:23;2123:32;2120:52;;;2168:1;2165;2158:12;2120:52;2207:9;2194:23;2226:31;2251:5;2226:31;:::i;:::-;2276:5;2328:2;2313:18;;;;2300:32;;-1:-1:-1;;;2023:315:1:o;2343:241::-;2399:6;2452:2;2440:9;2431:7;2427:23;2423:32;2420:52;;;2468:1;2465;2458:12;2420:52;2507:9;2494:23;2526:28;2548:5;2526:28;:::i;2589:245::-;2656:6;2709:2;2697:9;2688:7;2684:23;2680:32;2677:52;;;2725:1;2722;2715:12;2677:52;2757:9;2751:16;2776:28;2798:5;2776:28;:::i;2839:180::-;2898:6;2951:2;2939:9;2930:7;2926:23;2922:32;2919:52;;;2967:1;2964;2957:12;2919:52;-1:-1:-1;2990:23:1;;2839:180;-1:-1:-1;2839:180:1:o;3024:309::-;3089:6;3097;3150:2;3138:9;3129:7;3125:23;3121:32;3118:52;;;3166:1;3163;3156:12;3118:52;3202:9;3189:23;3179:33;;3262:2;3251:9;3247:18;3234:32;3275:28;3297:5;3275:28;:::i;3338:306::-;3426:6;3434;3442;3495:2;3483:9;3474:7;3470:23;3466:32;3463:52;;;3511:1;3508;3501:12;3463:52;3540:9;3534:16;3524:26;;3590:2;3579:9;3575:18;3569:25;3559:35;;3634:2;3623:9;3619:18;3613:25;3603:35;;3338:306;;;;;:::o;3649:454::-;3744:6;3752;3760;3768;3776;3829:3;3817:9;3808:7;3804:23;3800:33;3797:53;;;3846:1;3843;3836:12;3797:53;-1:-1:-1;;3869:23:1;;;3939:2;3924:18;;3911:32;;-1:-1:-1;3990:2:1;3975:18;;3962:32;;4041:2;4026:18;;4013:32;;-1:-1:-1;4092:3:1;4077:19;4064:33;;-1:-1:-1;3649:454:1;-1:-1:-1;3649:454:1:o;5844:597::-;5956:4;5985:2;6014;6003:9;5996:21;6046:6;6040:13;6089:6;6084:2;6073:9;6069:18;6062:34;6114:1;6124:140;6138:6;6135:1;6132:13;6124:140;;;6233:14;;;6229:23;;6223:30;6199:17;;;6218:2;6195:26;6188:66;6153:10;;6124:140;;;6282:6;6279:1;6276:13;6273:91;;;6352:1;6347:2;6338:6;6327:9;6323:22;6319:31;6312:42;6273:91;-1:-1:-1;6425:2:1;6404:15;-1:-1:-1;;6400:29:1;6385:45;;;;6432:2;6381:54;;5844:597;-1:-1:-1;;;5844:597:1:o;9091:399::-;9293:2;9275:21;;;9332:2;9312:18;;;9305:30;9371:34;9366:2;9351:18;;9344:62;-1:-1:-1;;;9437:2:1;9422:18;;9415:33;9480:3;9465:19;;9091:399::o;11303:356::-;11505:2;11487:21;;;11524:18;;;11517:30;11583:34;11578:2;11563:18;;11556:62;11650:2;11635:18;;11303:356::o;13030:980::-;13292:4;13340:3;13329:9;13325:19;13371:6;13360:9;13353:25;13397:2;13435:6;13430:2;13419:9;13415:18;13408:34;13478:3;13473:2;13462:9;13458:18;13451:31;13502:6;13537;13531:13;13568:6;13560;13553:22;13606:3;13595:9;13591:19;13584:26;;13645:2;13637:6;13633:15;13619:29;;13666:1;13676:195;13690:6;13687:1;13684:13;13676:195;;;13755:13;;-1:-1:-1;;;;;13751:39:1;13739:52;;13846:15;;;;13811:12;;;;13787:1;13705:9;13676:195;;;-1:-1:-1;;;;;;;13927:32:1;;;;13922:2;13907:18;;13900:60;-1:-1:-1;;;13991:3:1;13976:19;13969:35;13888:3;13030:980;-1:-1:-1;;;13030:980:1:o;14996:128::-;15036:3;15067:1;15063:6;15060:1;15057:13;15054:39;;;15073:18;;:::i;:::-;-1:-1:-1;15109:9:1;;14996:128::o;15129:217::-;15169:1;15195;15185:132;;15239:10;15234:3;15230:20;15227:1;15220:31;15274:4;15271:1;15264:15;15302:4;15299:1;15292:15;15185:132;-1:-1:-1;15331:9:1;;15129:217::o;15351:168::-;15391:7;15457:1;15453;15449:6;15445:14;15442:1;15439:21;15434:1;15427:9;15420:17;15416:45;15413:71;;;15464:18;;:::i;:::-;-1:-1:-1;15504:9:1;;15351:168::o;15524:125::-;15564:4;15592:1;15589;15586:8;15583:34;;;15597:18;;:::i;:::-;-1:-1:-1;15634:9:1;;15524:125::o;15654:135::-;15693:3;-1:-1:-1;;15714:17:1;;15711:43;;;15734:18;;:::i;:::-;-1:-1:-1;15781:1:1;15770:13;;15654:135::o;15794:127::-;15855:10;15850:3;15846:20;15843:1;15836:31;15886:4;15883:1;15876:15;15910:4;15907:1;15900:15;15926:127;15987:10;15982:3;15978:20;15975:1;15968:31;16018:4;16015:1;16008:15;16042:4;16039:1;16032:15;16058:127;16119:10;16114:3;16110:20;16107:1;16100:31;16150:4;16147:1;16140:15;16174:4;16171:1;16164:15;16322:131;-1:-1:-1;;;;;16397:31:1;;16387:42;;16377:70;;16443:1;16440;16433:12;16458:118;16544:5;16537:13;16530:21;16523:5;16520:32;16510:60;;16566:1;16563;16556:12

Swarm Source

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