false
true
0

Contract Address Details

0x31cAfdf1207F1cD874fde65D7eb9eA7c0919a503

Token
Maverick (MAV)
Creator
0x1f4946–8fb658 at 0xf788e5–daf867
Balance
17,816,432.409796151735398005 PLS ( )
Tokens
Fetching tokens...
Transactions
2,020 Transactions
Transfers
0 Transfers
Gas Used
0
Last Balance Update
25942377
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
MAV




Optimization enabled
true
Compiler version
v0.8.28+commit.7893614a




Optimization runs
200
EVM Version
shanghai




Verified at
2024-12-18T05:03:48.089336Z

Constructor Arguments

0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000121eac000000000000000000000000000000000000000000000000000000000000000084d6176657269636b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034d41560000000000000000000000000000000000000000000000000000000000

Arg [0] (string) : Maverick
Arg [1] (string) : MAV
Arg [2] (uint8) : 18
Arg [3] (uint256) : 19000000

              

Contract source code

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;

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

/**
 * PRC20 standard interface.
 */
interface IPRC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    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);
}

abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

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

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

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

interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
}

contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    IPRC20 RWRD = IPRC20(0xA6C4790cc7Aa22CA27327Cb83276F2aBD687B55b); // Setting reward to address turns this into a reflection fee instead
    address WPLS = 0xA1077a294dDE1B09bB078844df40758a5D0f9a27;
    IDEXRouter router;

    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;

    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

    uint256 public minPeriod = 0;
    uint256 public minDistribution = 0;

    uint256 currentIndex;

    bool initialized;
    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == _token); _;
    }

    constructor (address _router) {
        router = _router != address(0)
            ? IDEXRouter(_router)
            : IDEXRouter(0x165C3410fC91EF562C50559f7d2289fEbed552d9);
        _token = msg.sender;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override onlyToken {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
    }

    function setShare(address shareholder, uint256 amount) external override onlyToken {
        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }

        if(amount > 0 && shares[shareholder].amount == 0){
            addShareholder(shareholder);
        }else if(amount == 0 && shares[shareholder].amount > 0){
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function deposit() external payable override onlyToken {
        uint256 balanceBefore = RWRD.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = WPLS;
        path[1] = address(RWRD);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amount = RWRD.balanceOf(address(this)).sub(balanceBefore);

        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

    function process(uint256 gas) external override onlyToken {
        uint256 shareholderCount = shareholders.length;

        if(shareholderCount == 0) { return; }

        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();

        uint256 iterations = 0;

        while(gasUsed < gas && iterations < shareholderCount) {
            if(currentIndex >= shareholderCount){
                currentIndex = 0;
            }

            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }
    
    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
                && getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }

        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            RWRD.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }
    }
    
    function claimDividend() external {
        distributeDividend(msg.sender);
    }

    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }

        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
}

contract MAV is IPRC20, Auth {
    using SafeMath for uint256;

    address WPLS = 0xA1077a294dDE1B09bB078844df40758a5D0f9a27;
    address DEAD = 0x0000000000000000000000000000000000000369;
    address ZERO = 0x0000000000000000000000000000000000000369;

    string private _name;
    string private _symbol;
    uint8 private _decimals;
    uint256 private _totalSupply;

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isDividendExempt;

    bool public notliftoff = true;

    uint256 public liquidityFee    = 10;
    uint256 public reflectionFee   = 5; // 1% $X Rewards
    uint256 public buyburnFee      = 25; // 1% Buy and Burn $X , 1% Buy and Burn $1Swap
    uint256 public marketingFee    = 0;
    uint256 public devFee          = 0;
    uint256 public burnFee         = 10; // 1% burn $HB
    uint256 public totalFee        = marketingFee + reflectionFee + liquidityFee + devFee + burnFee + buyburnFee;
    uint256 public feeDenominator  = 1000;

    uint256 public sellMultiplier  = 100;

    address public autoLiquidityReceiver;
    address public marketingFeeReceiver;
    address public devFeeReceiver;

    uint256 targetLiquidity = 100;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public router;
    address public pair;

    bool public tradingOpen = false;

    DividendDistributor public distributor;
    uint256 distributorGas = 1000000;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply * 10 / 10000;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor (
        string memory tokenName, 
        string memory tokenSymbol, 
        uint8 tokenDecimals, 
        uint256 tokenTotalSupply
    ) Auth(msg.sender) {
        _name = tokenName;
        _symbol = tokenSymbol;
        _decimals = tokenDecimals; 
        _totalSupply = tokenTotalSupply.mul(10**uint256(tokenDecimals));
        swapThreshold = _totalSupply * 10 / 10000;
        router = IDEXRouter(0x165C3410fC91EF562C50559f7d2289fEbed552d9);
        pair = IDEXFactory(router.factory()).createPair(WPLS, address(this));
        _allowances[address(this)][address(router)] = type(uint256).max;

        distributor = new DividendDistributor(address(router));

        isFeeExempt[msg.sender] = true;

        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;

        autoLiquidityReceiver = msg.sender;
        marketingFeeReceiver = msg.sender;
        devFeeReceiver = msg.sender;

        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable { }

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

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

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

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }


    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        if(!authorizations[sender] && !authorizations[recipient]){
            require(tradingOpen,"Trading not open yet");
        }

        if(shouldSwapBack()){ swapBack(); }

        //Exchange tokens
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

        uint256 amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, amount,(recipient == pair)) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);

        // Dividend tracker
        if(!isDividendExempt[sender]) {
            try distributor.setShare(sender, _balances[sender]) {} catch {}
        }

        if(!isDividendExempt[recipient]) {
            try distributor.setShare(recipient, _balances[recipient]) {} catch {} 
        }

        try distributor.process(distributorGas) {} catch {}

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }
    
    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function shouldTakeFee(address sender, address recipient) internal view returns (bool) {
        if (isFeeExempt[recipient]){
            return false;
        }
        return !isFeeExempt[sender];
    }

    function buyburn(uint256 amount) internal {
        IPRC20 token1 = IPRC20(0xbe0B125b05f291E89f97eD5d132139649E62D3DD); //RVR
        IPRC20 token2 = IPRC20(0xe0d5d40B1F495Ea15Dedaa29e39bd2712d893922); //RVRX
        IPRC20 token3 = IPRC20(0xB71900F72406a9053e14500f277cC6ee8b217C35); //HTH
        IPRC20 token4 = IPRC20(0xef8e9b5F8608F11f398A8685D95A8e9b6831153a); //BNK
        IPRC20 token5 = IPRC20(0x94534EeEe131840b1c0F61847c572228bdfDDE93); //PTGC

        address[] memory path = new address[](2);
        path[0] = WPLS;
        path[1] = address(token1);

        address[] memory path2 = new address[](2);
        path2[0] = WPLS;
        path2[1] = address(token2);

        address[] memory path3 = new address[](2);
        path3[0] = WPLS;
        path3[1] = address(token3);

        address[] memory path4 = new address[](2);
        path4[0] = WPLS;
        path4[1] = address(token4);

        address[] memory path5 = new address[](2);
        path5[0] = WPLS;
        path5[1] = address(token5);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount/5}(
            0,
            path,
            address(this),
            block.timestamp
        );

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount/5}(
            0,
            path2,
            address(this),
            block.timestamp
        );

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount/5}(
            0,
            path3,
            address(this),
            block.timestamp
        );

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount/5}(
            0,
            path4,
            address(this),
            block.timestamp
        );

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount/5}(
            0,
            path5,
            address(this),
            block.timestamp
        );

        uint256 amount1 = token1.balanceOf(address(this));
        uint256 amount2 = token2.balanceOf(address(this));
        uint256 amount3 = token3.balanceOf(address(this));
        uint256 amount4 = token4.balanceOf(address(this));
        uint256 amount5 = token5.balanceOf(address(this));

        token1.transfer(address(0x0000000000000000000000000000000000000369), amount1);
        token2.transfer(address(0x0000000000000000000000000000000000000369), amount2);
        token3.transfer(address(0x0000000000000000000000000000000000000369), amount3);
        token4.transfer(address(0x0000000000000000000000000000000000000369), amount4);
        token5.transfer(address(0x0000000000000000000000000000000000000369), amount5);
    }

    function takeFee(address sender, uint256 amount, bool isSell) internal returns (uint256) {
        
        uint256 multiplier = isSell ? sellMultiplier : 100;
        uint256 feeAmount = amount.mul(totalFee).mul(multiplier).div(feeDenominator * 100);
        uint256 burnAmount = feeAmount.mul(burnFee).div(totalFee);

        uint256 remainingAmount = feeAmount.sub(burnAmount);

        if (burnAmount > 0){
        _balances[DEAD] = _balances[DEAD].add(burnAmount);
        emit Transfer(sender, DEAD, burnAmount);
        }

        _balances[address(this)] = _balances[address(this)].add(remainingAmount);
        emit Transfer(sender, address(this), remainingAmount);

        return amount.sub(feeAmount);
    }

    function shouldSwapBack() internal view returns (bool) {
        return msg.sender != pair
        && !inSwap
        && swapEnabled
        && _balances[address(this)] >= swapThreshold;
    }

    function clearStuckBalance(uint256 amountPercentage) external authorized {
        uint256 amountPLS = address(this).balance;
        payable(marketingFeeReceiver).transfer(amountPLS * amountPercentage / 100);
    }

    function clearStuckBalance_sender(uint256 amountPercentage) external authorized {
        uint256 amountPLS = address(this).balance;
        payable(msg.sender).transfer(amountPLS * amountPercentage / 100);
    }

    function set_sell_multiplier(uint256 Multiplier) external onlyOwner{
        sellMultiplier = Multiplier;        
    }

    function swapBack() internal swapping {
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
        uint256 amountToLiquify = swapThreshold.mul(dynamicLiquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = swapThreshold.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WPLS;

        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountPLS = address(this).balance.sub(balanceBefore);

        uint256 totalPLSFee = totalFee.sub(dynamicLiquidityFee.div(2));
        
        uint256 amountPLSLiquidity = amountPLS.mul(dynamicLiquidityFee).div(totalPLSFee).div(2);
        uint256 amountPLSReflection = amountPLS.mul(reflectionFee).div(totalPLSFee);
        uint256 amountPLSBuyburn = amountPLS.mul(buyburnFee).div(totalPLSFee);
        uint256 amountPLSMarketing = amountPLS.mul(marketingFee).div(totalPLSFee);
        uint256 amountPLSDev = amountPLS.mul(devFee).div(totalPLSFee);

        try distributor.deposit{value: amountPLSReflection}() {} catch {}

        if (amountPLSBuyburn > 0) {
            buyburn(amountPLSBuyburn);
        }    

        (bool tmpSuccess,) = payable(marketingFeeReceiver).call{value: amountPLSMarketing, gas: 30000}("");
        (tmpSuccess,) = payable(devFeeReceiver).call{value: amountPLSDev, gas: 30000}("");
        
        // Supress warning msg
        tmpSuccess = false;

        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountPLSLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountPLSLiquidity, amountToLiquify);
        }
    }

    function setIsDividendExempt(address holder, bool exempt) external authorized {
        require(holder != address(this) && holder != pair);
        isDividendExempt[holder] = exempt;
        if(exempt){
            distributor.setShare(holder, 0);
        }else{
            distributor.setShare(holder, _balances[holder]);
        }
    }

    function setIsFeeExempt(address holder, bool exempt) external authorized {
        isFeeExempt[holder] = exempt;
    }

    function setFees(uint256 _liquidityFee, uint256 _reflectionFee, uint256 _marketingFee, uint256 _devFee, uint256 _burnFee, uint256 _buyburnFee) external authorized {
        liquidityFee = _liquidityFee;
        reflectionFee = _reflectionFee;
        marketingFee = _marketingFee;
        devFee = _devFee;
        burnFee = _burnFee;
        buyburnFee = _buyburnFee;
        totalFee = _liquidityFee.add(_reflectionFee).add(_marketingFee).add(_devFee).add(_burnFee);
        feeDenominator = 1000;
        require(totalFee < 5, "Fees cannot be more than 5%");
    }

    function liftoff() public onlyOwner {
        require(notliftoff, "Moon mission already a go");
        tradingOpen = true;

        notliftoff = false;
    }

    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver, address _devFeeReceiver ) external authorized {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
        devFeeReceiver = _devFeeReceiver;
    }

    function setSwapBackSettings(bool _enabled, uint256 _amount) external authorized {
        swapEnabled = _enabled;
        swapThreshold = _amount;
    }

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external authorized {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external authorized {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
    }

    function setDistributorSettings(uint256 gas) external authorized {
        distributorGas = gas;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return accuracy.mul(balanceOf(pair).mul(2)).div(getCirculatingSupply());
    }

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }

event AutoLiquify(uint256 amountPLS, uint256 amountBOG);

}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"string","name":"tokenName","internalType":"string"},{"type":"string","name":"tokenSymbol","internalType":"string"},{"type":"uint8","name":"tokenDecimals","internalType":"uint8"},{"type":"uint256","name":"tokenTotalSupply","internalType":"uint256"}]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"AutoLiquify","inputs":[{"type":"uint256","name":"amountPLS","internalType":"uint256","indexed":false},{"type":"uint256","name":"amountBOG","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approveMax","inputs":[{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"autoLiquidityReceiver","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"burnFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"buyburnFee","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"clearStuckBalance","inputs":[{"type":"uint256","name":"amountPercentage","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"clearStuckBalance_sender","inputs":[{"type":"uint256","name":"amountPercentage","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"devFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"devFeeReceiver","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract DividendDistributor"}],"name":"distributor","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"feeDenominator","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getCirculatingSupply","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getLiquidityBacking","inputs":[{"type":"uint256","name":"accuracy","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getOwner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isAuthorized","inputs":[{"type":"address","name":"adr","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isOverLiquified","inputs":[{"type":"uint256","name":"target","internalType":"uint256"},{"type":"uint256","name":"accuracy","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isOwner","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"liftoff","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"liquidityFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"marketingFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"marketingFeeReceiver","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"notliftoff","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"pair","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"reflectionFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IDEXRouter"}],"name":"router","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"sellMultiplier","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setDistributionCriteria","inputs":[{"type":"uint256","name":"_minPeriod","internalType":"uint256"},{"type":"uint256","name":"_minDistribution","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setDistributorSettings","inputs":[{"type":"uint256","name":"gas","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setFeeReceivers","inputs":[{"type":"address","name":"_autoLiquidityReceiver","internalType":"address"},{"type":"address","name":"_marketingFeeReceiver","internalType":"address"},{"type":"address","name":"_devFeeReceiver","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setFees","inputs":[{"type":"uint256","name":"_liquidityFee","internalType":"uint256"},{"type":"uint256","name":"_reflectionFee","internalType":"uint256"},{"type":"uint256","name":"_marketingFee","internalType":"uint256"},{"type":"uint256","name":"_devFee","internalType":"uint256"},{"type":"uint256","name":"_burnFee","internalType":"uint256"},{"type":"uint256","name":"_buyburnFee","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsDividendExempt","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsFeeExempt","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setSwapBackSettings","inputs":[{"type":"bool","name":"_enabled","internalType":"bool"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTargetLiquidity","inputs":[{"type":"uint256","name":"_target","internalType":"uint256"},{"type":"uint256","name":"_denominator","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"set_sell_multiplier","inputs":[{"type":"uint256","name":"Multiplier","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"swapEnabled","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"swapThreshold","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"tradingOpen","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"adr","internalType":"address payable"}]},{"type":"receive","stateMutability":"payable"}]
              

Contract Creation Code

Verify & Publish
0x6080604052600280546001600160a01b031990811673a1077a294dde1b09bb078844df40758a5d0f9a271790915560038054821661036990811790915560048054909216179055600d805460ff19166001179055600a600e8190556005600f819055601960108190555f601181905560128190556013849055909291829061008790836104c1565b61009191906104c1565b61009b91906104c1565b6100a591906104c1565b6100af91906104c1565b6014556103e860155560646016819055601a819055601b55601d805460ff60a01b19169055620f4240601f556020805460ff19166001179055600854612710906100fa90600a6104d4565b61010491906104eb565b602155348015610112575f5ffd5b50604051614303380380614303833981016040819052610131916105bc565b5f80546001600160a01b0319163390811782558152600160208190526040909120805460ff19169091179055600561016985826106c3565b50600661017684826106c3565b506007805460ff191660ff841690811790915561019f9061019890600a610860565b8290610415565b6008819055612710906101b390600a6104d4565b6101bd91906104eb565b602155601c80546001600160a01b03191673165c3410fc91ef562c50559f7d2289febed552d99081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015610222573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102469190610872565b6002546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c65396906044016020604051808303815f875af1158015610294573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b89190610872565b601d80546001600160a01b0319166001600160a01b03928316179055305f908152600a60209081526040808320601c8054861685529252918290205f199055549051911690610306906104a0565b6001600160a01b039091168152602001604051809103905ff08015801561032f573d5f5f3e3d5ffd5b50601e80546001600160a01b03199081166001600160a01b0393841617909155335f818152600b60209081526040808320805460ff199081166001908117909255601d5488168552600c84528285208054821683179055308552828520805482168317905560035490971684528184208054909716179095556017805485168417905560188054851684179055601980549094168317909355600854828252600984528482208190559351938452909290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050610898565b5f825f0361042457505f61049a565b5f61042f83856104d4565b90508261043c85836104eb565b146104975760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840160405180910390fd5b90505b92915050565b610f8b8061337883390190565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561049a5761049a6104ad565b808202811582820484141761049a5761049a6104ad565b5f8261050557634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261052d575f5ffd5b81516001600160401b038111156105465761054661050a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156105745761057461050a565b60405281815283820160200185101561058b575f5ffd5b5f5b828110156105a95760208186018101518383018201520161058d565b505f918101602001919091529392505050565b5f5f5f5f608085870312156105cf575f5ffd5b84516001600160401b038111156105e4575f5ffd5b6105f08782880161051e565b602087015190955090506001600160401b0381111561060d575f5ffd5b6106198782880161051e565b935050604085015160ff8116811461062f575f5ffd5b6060959095015193969295505050565b600181811c9082168061065357607f821691505b60208210810361067157634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156106be57805f5260205f20601f840160051c8101602085101561069c5750805b601f840160051c820191505b818110156106bb575f81556001016106a8565b50505b505050565b81516001600160401b038111156106dc576106dc61050a565b6106f0816106ea845461063f565b84610677565b6020601f821160018114610722575f831561070b5750848201515b5f19600385901b1c1916600184901b1784556106bb565b5f84815260208120601f198516915b828110156107515787850151825560209485019460019092019101610731565b508482101561076e57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6001815b60018411156107b85780850481111561079c5761079c6104ad565b60018416156107aa57908102905b60019390931c928002610781565b935093915050565b5f826107ce5750600161049a565b816107da57505f61049a565b81600181146107f057600281146107fa57610816565b600191505061049a565b60ff84111561080b5761080b6104ad565b50506001821b61049a565b5060208310610133831016604e8410600b8410161715610839575081810a61049a565b6108455f19848461077d565b805f1904821115610858576108586104ad565b029392505050565b5f61086b83836107c0565b9392505050565b5f60208284031215610882575f5ffd5b81516001600160a01b0381168114610497575f5ffd5b612ad3806108a55f395ff3fe60806040526004361061028e575f3560e01c8063893d20e811610155578063dd62ed3e116100be578063f887ea4011610078578063f887ea40146107af578063fce589d8146107ce578063fe634ad0146107e3578063fe9fbb80146107fc578063fed0d2a11461081b578063ffb54a9914610830575f5ffd5b8063dd62ed3e146106d0578063df20fd4914610714578063e96fada214610733578063ec72d65f14610752578063f2fde38b14610771578063f708a64f14610790575f5ffd5b8063bfe109281161010f578063bfe1092814610621578063c191c92614610640578063ca33e64c14610654578063d51ed1c814610673578063d7c0103214610692578063dab84ee7146106b1575f5ffd5b8063893d20e81461056b57806395d89b411461059b57806398118cb4146105af5780639d1944f5146105c4578063a8aa1b31146105e3578063a9059cbb14610602575f5ffd5b80632f54bf6e116101f75780636b67c4df116101b15780636b67c4df146104c05780636ddd1713146104d557806370a08231146104ee57806383ad79941461052257806386f6c3c11461053757806387d3a14d14610556575f5ffd5b80632f54bf6e14610400578063313ce5671461042d57806344a33fd21461044e578063571ac8b01461046d578063658d4b7f1461048c5780636827e764146104ab575f5ffd5b80631da1db5e116102485780631da1db5e146103595780631df4ccfc1461037a578063201e79911461038f57806323b872dd146103ae5780632b112e49146103cd5780632d48e896146103e1575f5ffd5b80630445b6671461029957806306fdde03146102c1578063095ea7b3146102e25780631161ae3914610311578063180b0d7e1461033057806318160ddd14610345575f5ffd5b3661029557005b5f5ffd5b3480156102a4575f5ffd5b506102ae60215481565b6040519081526020015b60405180910390f35b3480156102cc575f5ffd5b506102d5610850565b6040516102b8919061263e565b3480156102ed575f5ffd5b506103016102fc3660046126a0565b6108e0565b60405190151581526020016102b8565b34801561031c575f5ffd5b5061030161032b3660046126ca565b61094c565b34801561033b575f5ffd5b506102ae60155481565b348015610350575f5ffd5b506008546102ae565b348015610364575f5ffd5b506103786103733660046126ea565b61095f565b005b348015610385575f5ffd5b506102ae60145481565b34801561039a575f5ffd5b506103786103a93660046126ca565b6109de565b3480156103b9575f5ffd5b506103016103c8366004612701565b610a0e565b3480156103d8575f5ffd5b506102ae610acc565b3480156103ec575f5ffd5b506103786103fb3660046126ca565b610b1c565b34801561040b575f5ffd5b5061030161041a36600461273f565b5f546001600160a01b0391821691161490565b348015610438575f5ffd5b5060075460405160ff90911681526020016102b8565b348015610459575f5ffd5b506103786104683660046126ea565b610ba6565b348015610478575f5ffd5b5061030161048736600461273f565b610bdc565b348015610497575f5ffd5b506103786104a6366004612767565b610be8565b3480156104b6575f5ffd5b506102ae60125481565b3480156104cb575f5ffd5b506102ae60115481565b3480156104e0575f5ffd5b506020546103019060ff1681565b3480156104f9575f5ffd5b506102ae61050836600461273f565b6001600160a01b03165f9081526009602052604090205490565b34801561052d575f5ffd5b506102ae600f5481565b348015610542575f5ffd5b5061037861055136600461279e565b610c37565b348015610561575f5ffd5b506102ae60105481565b348015610576575f5ffd5b505f546001600160a01b03165b6040516001600160a01b0390911681526020016102b8565b3480156105a6575f5ffd5b506102d5610cec565b3480156105ba575f5ffd5b506102ae600e5481565b3480156105cf575f5ffd5b506103786105de3660046126ea565b610cfb565b3480156105ee575f5ffd5b50601d54610583906001600160a01b031681565b34801561060d575f5ffd5b5061030161061c3660046126a0565b610d25565b34801561062c575f5ffd5b50601e54610583906001600160a01b031681565b34801561064b575f5ffd5b50610378610d31565b34801561065f575f5ffd5b50601754610583906001600160a01b031681565b34801561067e575f5ffd5b506102ae61068d3660046126ea565b610dcb565b34801561069d575f5ffd5b506103786106ac3660046127dd565b610e10565b3480156106bc575f5ffd5b50601954610583906001600160a01b031681565b3480156106db575f5ffd5b506102ae6106ea366004612825565b6001600160a01b039182165f908152600a6020908152604080832093909416825291909152205490565b34801561071f575f5ffd5b5061037861072e366004612851565b610e74565b34801561073e575f5ffd5b50601854610583906001600160a01b031681565b34801561075d575f5ffd5b5061037861076c3660046126ea565b610eb0565b34801561077c575f5ffd5b5061037861078b36600461273f565b610ede565b34801561079b575f5ffd5b506103786107aa366004612767565b610f72565b3480156107ba575f5ffd5b50601c54610583906001600160a01b031681565b3480156107d9575f5ffd5b506102ae60135481565b3480156107ee575f5ffd5b50600d546103019060ff1681565b348015610807575f5ffd5b5061030161081636600461273f565b611072565b348015610826575f5ffd5b506102ae60165481565b34801561083b575f5ffd5b50601d5461030190600160a01b900460ff1681565b60606005805461085f9061286d565b80601f016020809104026020016040519081016040528092919081815260200182805461088b9061286d565b80156108d65780601f106108ad576101008083540402835291602001916108d6565b820191905f5260205f20905b8154815290600101906020018083116108b957829003601f168201915b5050505050905090565b335f818152600a602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061093a9086815260200190565b60405180910390a35060015b92915050565b5f8261095783610dcb565b119392505050565b61096833611072565b61098d5760405162461bcd60e51b8152600401610984906128a5565b60405180910390fd5b60185447906001600160a01b03166108fc60646109aa85856128de565b6109b491906128f5565b6040518115909202915f818181858888f193505050501580156109d9573d5f5f3e3d5ffd5b505050565b6109e733611072565b610a035760405162461bcd60e51b8152600401610984906128a5565b601a91909155601b55565b6001600160a01b0383165f908152600a602090815260408083203384529091528120545f1914610ab7576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387165f908152600a82528381203382529091529190912054610a9391849061108f565b6001600160a01b0385165f908152600a602090815260408083203384529091529020555b610ac28484846110c7565b90505b9392505050565b6004546001600160a01b03165f90815260096020526040812054610b17906003546001600160a01b03165f90815260096020526040902054610b119060085490611424565b90611424565b905090565b610b2533611072565b610b415760405162461bcd60e51b8152600401610984906128a5565b601e546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b5f604051808303815f87803b158015610b8c575f5ffd5b505af1158015610b9e573d5f5f3e3d5ffd5b505050505050565b610baf33611072565b610bcb5760405162461bcd60e51b8152600401610984906128a5565b47336108fc60646109aa85856128de565b5f610946825f196108e0565b610bf133611072565b610c0d5760405162461bcd60e51b8152600401610984906128a5565b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b610c4033611072565b610c5c5760405162461bcd60e51b8152600401610984906128a5565b600e869055600f8590556011849055601283905560138290556010819055610c9282610c8c858188818c8c611465565b90611465565b60148190556103e8601555600511610b9e5760405162461bcd60e51b815260206004820152601b60248201527f466565732063616e6e6f74206265206d6f7265207468616e20352500000000006044820152606401610984565b60606006805461085f9061286d565b610d0433611072565b610d205760405162461bcd60e51b8152600401610984906128a5565b601f55565b5f610ac53384846110c7565b5f546001600160a01b03163314610d5a5760405162461bcd60e51b815260040161098490612914565b600d5460ff16610dac5760405162461bcd60e51b815260206004820152601960248201527f4d6f6f6e206d697373696f6e20616c7265616479206120676f000000000000006044820152606401610984565b601d805460ff60a01b1916600160a01b179055600d805460ff19169055565b5f610946610dd7610acc565b601d546001600160a01b03165f90815260096020526040902054610e0a90610e03906002905b906114c3565b85906114c3565b90611541565b610e1933611072565b610e355760405162461bcd60e51b8152600401610984906128a5565b601780546001600160a01b039485166001600160a01b031991821617909155601880549385169382169390931790925560198054919093169116179055565b610e7d33611072565b610e995760405162461bcd60e51b8152600401610984906128a5565b6020805460ff191692151592909217909155602155565b5f546001600160a01b03163314610ed95760405162461bcd60e51b815260040161098490612914565b601655565b5f546001600160a01b03163314610f075760405162461bcd60e51b815260040161098490612914565b5f80546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b610f7b33611072565b610f975760405162461bcd60e51b8152600401610984906128a5565b6001600160a01b0382163014801590610fbe5750601d546001600160a01b03838116911614155b610fc6575f5ffd5b6001600160a01b0382165f908152600c60205260409020805460ff1916821580159190911790915561102a57601e54604051630a5b654b60e11b81526001600160a01b0384811660048301525f6024830152909116906314b6ca9690604401610b75565b601e546001600160a01b038381165f8181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401610b75565b6001600160a01b03165f9081526001602052604090205460ff1690565b5f81848411156110b25760405162461bcd60e51b8152600401610984919061263e565b505f6110be8486612934565b95945050505050565b6022545f9060ff16156110e6576110df848484611582565b9050610ac5565b6001600160a01b0384165f9081526001602052604090205460ff1615801561112657506001600160a01b0383165f9081526001602052604090205460ff16155b1561117b57601d54600160a01b900460ff1661117b5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610984565b611183611652565b156111905761119061169f565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387165f908152600990915291909120546111e191849061108f565b6001600160a01b0385165f908152600960205260408120919091556112068585611aa8565b611210578261122e565b601d5461122e90869085906001600160a01b03888116911614611aef565b6001600160a01b0385165f908152600960205260409020549091506112539082611465565b6001600160a01b038086165f908152600960209081526040808320949094559188168152600c909152205460ff166112f257601e546001600160a01b038681165f8181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca96906044015f604051808303815f87803b1580156112df575f5ffd5b505af19250505080156112f0575060015b505b6001600160a01b0384165f908152600c602052604090205460ff1661137e57601e546001600160a01b038581165f8181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca96906044015f604051808303815f87803b15801561136b575f5ffd5b505af192505050801561137c575060015b505b601e54601f546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916113b69160040190815260200190565b5f604051808303815f87803b1580156113cd575f5ffd5b505af19250505080156113de575060015b50836001600160a01b0316856001600160a01b03165f516020612a7e5f395f51905f528360405161141191815260200190565b60405180910390a3506001949350505050565b5f610ac583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061108f565b5f806114718385612947565b905083811015610ac55760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610984565b5f825f036114d257505f610946565b5f6114dd83856128de565b9050826114ea85836128f5565b14610ac55760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610984565b5f610ac583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611c46565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386165f9081526009909152918220546115d291849061108f565b6001600160a01b038086165f9081526009602052604080822093909355908516815220546116009083611465565b6001600160a01b038085165f8181526009602052604090819020939093559151908616905f516020612a7e5f395f51905f52906116409086815260200190565b60405180910390a35060019392505050565b601d545f906001600160a01b03163314801590611672575060225460ff16155b8015611680575060205460ff165b8015610b17575050602154305f90815260096020526040902054101590565b6022805460ff19166001179055601a54601b545f916116bd9161094c565b6116c957600e546116cb565b5f5b90505f6116ee6002610e0a601454610e0a866021546114c390919063ffffffff16565b90505f6117068260215461142490919063ffffffff16565b6040805160028082526060820183529293505f92909160208301908036833701905050905030815f8151811061173e5761173e61295a565b6001600160a01b03928316602091820292909201015260025482519116908290600190811061176f5761176f61295a565b6001600160a01b039283166020918202929092010152601c5460405163791ac94760e01b81524792919091169063791ac947906117b89086905f908790309042906004016129b1565b5f604051808303815f87803b1580156117cf575f5ffd5b505af11580156117e1573d5f5f3e3d5ffd5b505050505f6117f9824761142490919063ffffffff16565b90505f61181361180a886002611541565b60145490611424565b90505f6118276002610e0a8481878d6114c3565b90505f61184383610e0a600f54876114c390919063ffffffff16565b90505f61185f84610e0a601054886114c390919063ffffffff16565b90505f61187b85610e0a601154896114c390919063ffffffff16565b90505f61189786610e0a6012548a6114c390919063ffffffff16565b9050601e5f9054906101000a90046001600160a01b03166001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004015f604051808303818588803b1580156118e6575f5ffd5b505af1935050505080156118f8575060015b5082156119085761190883611c72565b6018546040515f916001600160a01b03169061753090859084818181858888f193505050503d805f8114611957576040519150601f19603f3d011682016040523d82523d5f602084013e61195c565b606091505b50506019546040519192506001600160a01b0316906175309084905f818181858888f193505050503d805f81146119ae576040519150601f19603f3d011682016040523d82523d5f602084013e6119b3565b606091505b505f9250508c159050611a8f57601c5460175460405163f305d71960e01b8152306004820152602481018f90525f6044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990889060c40160606040518083038185885af1158015611a2d573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611a5291906129ec565b505060408051888152602081018f90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506022805460ff191690555050505050505050505050565b6001600160a01b0381165f908152600b602052604081205460ff1615611acf57505f610946565b50506001600160a01b03165f908152600b602052604090205460ff161590565b5f5f82611afd576064611b01565b6016545b90505f611b2f6015546064611b1691906128de565b610e0a84610dfd6014548a6114c390919063ffffffff16565b90505f611b4d601454610e0a601354856114c390919063ffffffff16565b90505f611b5a8383611424565b90508115611bd2576003546001600160a01b03165f90815260096020526040902054611b869083611465565b600380546001600160a01b039081165f90815260096020908152604091829020949094559154915185815291811692908b16915f516020612a7e5f395f51905f52910160405180910390a35b305f90815260096020526040902054611beb9082611465565b305f81815260096020526040908190209290925590516001600160a01b038a16905f516020612a7e5f395f51905f5290611c289085815260200190565b60405180910390a3611c3a8784611424565b98975050505050505050565b5f8183611c665760405162461bcd60e51b8152600401610984919061263e565b505f6110be84866128f5565b73be0b125b05f291e89f97ed5d132139649e62d3dd73e0d5d40b1f495ea15dedaa29e39bd2712d89392273b71900f72406a9053e14500f277cc6ee8b217c3573ef8e9b5f8608f11f398a8685d95a8e9b6831153a7394534eeee131840b1c0f61847c572228bdfdde935f6002604051908082528060200260200182016040528015611d07578160200160208202803683370190505b5060025481519192506001600160a01b03169082905f90611d2a57611d2a61295a565b60200260200101906001600160a01b031690816001600160a01b0316815250508581600181518110611d5e57611d5e61295a565b6001600160a01b03929092166020928302919091018201526040805160028082526060820183525f939192909183019080368337505060025482519293506001600160a01b0316918391505f90611db757611db761295a565b60200260200101906001600160a01b031690816001600160a01b0316815250508581600181518110611deb57611deb61295a565b6001600160a01b03929092166020928302919091018201526040805160028082526060820183525f939192909183019080368337505060025482519293506001600160a01b0316918391505f90611e4457611e4461295a565b60200260200101906001600160a01b031690816001600160a01b0316815250508581600181518110611e7857611e7861295a565b6001600160a01b03929092166020928302919091018201526040805160028082526060820183525f939192909183019080368337505060025482519293506001600160a01b0316918391505f90611ed157611ed161295a565b60200260200101906001600160a01b031690816001600160a01b0316815250508581600181518110611f0557611f0561295a565b6001600160a01b03929092166020928302919091018201526040805160028082526060820183525f939192909183019080368337505060025482519293506001600160a01b0316918391505f90611f5e57611f5e61295a565b60200260200101906001600160a01b031690816001600160a01b0316815250508581600181518110611f9257611f9261295a565b6001600160a01b039283166020918202929092010152601c541663b6f9de95611fbc60058e6128f5565b5f8830426040518663ffffffff1660e01b8152600401611fdf9493929190612a17565b5f604051808303818588803b158015611ff6575f5ffd5b505af1158015612008573d5f5f3e3d5ffd5b5050601c546001600160a01b0316925063b6f9de95915061202c905060058e6128f5565b5f8730426040518663ffffffff1660e01b815260040161204f9493929190612a17565b5f604051808303818588803b158015612066575f5ffd5b505af1158015612078573d5f5f3e3d5ffd5b5050601c546001600160a01b0316925063b6f9de95915061209c905060058e6128f5565b5f8630426040518663ffffffff1660e01b81526004016120bf9493929190612a17565b5f604051808303818588803b1580156120d6575f5ffd5b505af11580156120e8573d5f5f3e3d5ffd5b5050601c546001600160a01b0316925063b6f9de95915061210c905060058e6128f5565b5f8530426040518663ffffffff1660e01b815260040161212f9493929190612a17565b5f604051808303818588803b158015612146575f5ffd5b505af1158015612158573d5f5f3e3d5ffd5b5050601c546001600160a01b0316925063b6f9de95915061217c905060058e6128f5565b5f8430426040518663ffffffff1660e01b815260040161219f9493929190612a17565b5f604051808303818588803b1580156121b6575f5ffd5b505af11580156121c8573d5f5f3e3d5ffd5b50506040516370a0823160e01b81523060048201525f93506001600160a01b038e1692506370a082319150602401602060405180830381865afa158015612211573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122359190612a4b565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038c16906370a0823190602401602060405180830381865afa15801561227c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122a09190612a4b565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038c16906370a0823190602401602060405180830381865afa1580156122e7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061230b9190612a4b565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038c16906370a0823190602401602060405180830381865afa158015612352573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123769190612a4b565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038c16906370a0823190602401602060405180830381865afa1580156123bd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123e19190612a4b565b90508e6001600160a01b031663a9059cbb610369876040518363ffffffff1660e01b81526004016124279291906001600160a01b03929092168252602082015260400190565b6020604051808303815f875af1158015612443573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124679190612a62565b5060405163a9059cbb60e01b81526103696004820152602481018590526001600160a01b038f169063a9059cbb906044016020604051808303815f875af11580156124b4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124d89190612a62565b5060405163a9059cbb60e01b81526103696004820152602481018490526001600160a01b038e169063a9059cbb906044016020604051808303815f875af1158015612525573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125499190612a62565b5060405163a9059cbb60e01b81526103696004820152602481018390526001600160a01b038d169063a9059cbb906044016020604051808303815f875af1158015612596573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125ba9190612a62565b5060405163a9059cbb60e01b81526103696004820152602481018290526001600160a01b038c169063a9059cbb906044016020604051808303815f875af1158015612607573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061262b9190612a62565b5050505050505050505050505050505050565b602081525f82518060208401525f5b8181101561266a576020818601810151604086840101520161264d565b505f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b038116811461269d575f5ffd5b50565b5f5f604083850312156126b1575f5ffd5b82356126bc81612689565b946020939093013593505050565b5f5f604083850312156126db575f5ffd5b50508035926020909101359150565b5f602082840312156126fa575f5ffd5b5035919050565b5f5f5f60608486031215612713575f5ffd5b833561271e81612689565b9250602084013561272e81612689565b929592945050506040919091013590565b5f6020828403121561274f575f5ffd5b8135610ac581612689565b801515811461269d575f5ffd5b5f5f60408385031215612778575f5ffd5b823561278381612689565b915060208301356127938161275a565b809150509250929050565b5f5f5f5f5f5f60c087890312156127b3575f5ffd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b5f5f5f606084860312156127ef575f5ffd5b83356127fa81612689565b9250602084013561280a81612689565b9150604084013561281a81612689565b809150509250925092565b5f5f60408385031215612836575f5ffd5b823561284181612689565b9150602083013561279381612689565b5f5f60408385031215612862575f5ffd5b82356126bc8161275a565b600181811c9082168061288157607f821691505b60208210810361289f57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610946576109466128ca565b5f8261290f57634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526006908201526510a7aba722a960d11b604082015260600190565b81810381811115610946576109466128ca565b80820180821115610946576109466128ca565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602084019350602083015f5b828110156129a75781516001600160a01b0316865260209586019590910190600101612980565b5093949350505050565b85815284602082015260a060408201525f6129cf60a083018661296e565b6001600160a01b0394909416606083015250608001529392505050565b5f5f5f606084860312156129fe575f5ffd5b5050815160208301516040909301519094929350919050565b848152608060208201525f612a2f608083018661296e565b6001600160a01b03949094166040830152506060015292915050565b5f60208284031215612a5b575f5ffd5b5051919050565b5f60208284031215612a72575f5ffd5b8151610ac58161275a56feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220e16353b0c949e59dc68201ad506d13959e0d6aaeb67189112208ef152dac448e64736f6c634300081c00336080604052600180546001600160a01b031990811673a6c4790cc7aa22ca27327cb83276f2abd687b55b179091556002805490911673a1077a294dde1b09bb078844df40758a5d0f9a271790556ec097ce7bc90715b34b9f1000000000600c555f600d819055600e55348015610073575f5ffd5b50604051610f8b380380610f8b833981016040819052610092916100eb565b6001600160a01b0381166100ba5773165c3410fc91ef562c50559f7d2289febed552d96100bc565b805b600380546001600160a01b03929092166001600160a01b03199283161790555f80549091163317905550610118565b5f602082840312156100fb575f5ffd5b81516001600160a01b0381168114610111575f5ffd5b9392505050565b610e66806101255f395ff3fe6080604052600436106100d9575f3560e01c8063ce7c2ac21161007c578063efca2eed11610057578063efca2eed14610215578063f0fc6bca1461022a578063ffb2c4791461023e578063ffd49c841461025d575f5ffd5b8063ce7c2ac2146101a3578063d0e30db0146101f8578063e2d2e21914610200575f5ffd5b80632d48e896116100b75780632d48e896146101455780633a98ef39146101645780634fab0ae814610179578063997664d71461018e575f5ffd5b806311ce023d146100dd57806314b6ca961461010557806328fd319814610126575b5f5ffd5b3480156100e8575f5ffd5b506100f2600c5481565b6040519081526020015b60405180910390f35b348015610110575f5ffd5b5061012461011f366004610c1e565b610272565b005b348015610131575f5ffd5b506100f2610140366004610c46565b6103e0565b348015610150575f5ffd5b5061012461015f366004610c5f565b610466565b34801561016f575f5ffd5b506100f260085481565b348015610184575f5ffd5b506100f2600e5481565b348015610199575f5ffd5b506100f260095481565b3480156101ae575f5ffd5b506101dd6101bd366004610c46565b60076020525f908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016100fc565b610124610486565b34801561020b575f5ffd5b506100f2600b5481565b348015610220575f5ffd5b506100f2600a5481565b348015610235575f5ffd5b506101246106a6565b348015610249575f5ffd5b50610124610258366004610c7f565b6106b1565b348015610268575f5ffd5b506100f2600d5481565b5f546001600160a01b03163314610287575f5ffd5b6001600160a01b0382165f90815260076020526040902054156102ad576102ad826107ac565b5f811180156102d157506001600160a01b0382165f90815260076020526040902054155b1561033657600480546001600160a01b0384165f818152600560205260408120839055600183018455929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319169091179055610368565b8015801561035a57506001600160a01b0382165f9081526007602052604090205415155b1561036857610368826108c3565b6001600160a01b0382165f90815260076020526040902054600854610398918391610392916109d3565b90610a1d565b6008556001600160a01b0382165f9081526007602052604090208190556103be81610a80565b6001600160a01b039092165f9081526007602052604090206001019190915550565b6001600160a01b0381165f90815260076020526040812054810361040557505f919050565b6001600160a01b0382165f9081526007602052604081205461042690610a80565b6001600160a01b0384165f9081526007602052604090206001015490915080821161045457505f9392505050565b61045e82826109d3565b949350505050565b5f546001600160a01b0316331461047b575f5ffd5b600d91909155600e55565b5f546001600160a01b0316331461049b575f5ffd5b6001546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa1580156104e1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105059190610c96565b6040805160028082526060820183529293505f929091602083019080368337505060025482519293506001600160a01b0316918391505f9061054957610549610cad565b6001600160a01b039283166020918202929092010152600180548351921691839190811061057957610579610cad565b6001600160a01b03928316602091820292909201015260035460405163b6f9de9560e01b815291169063b6f9de959034906105be905f90869030904290600401610cc1565b5f604051808303818588803b1580156105d5575f5ffd5b505af11580156105e7573d5f5f3e3d5ffd5b50506001546040516370a0823160e01b81523060048201525f945061066493508692506001600160a01b03909116906370a0823190602401602060405180830381865afa15801561063a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061065e9190610c96565b906109d3565b6009549091506106749082610a1d565b600955600854600c5461069e916106959161068f9085610a9c565b90610b1a565b600b5490610a1d565b600b55505050565b6106af336107ac565b565b5f546001600160a01b031633146106c6575f5ffd5b6004545f8190036106d5575050565b5f805a90505f5b84831080156106ea57508381105b156107a55783600f54106106fd575f600f555b61072e6004600f548154811061071557610715610cad565b5f918252602090912001546001600160a01b0316610b5b565b15610764576107646004600f548154811061074b5761074b610cad565b5f918252602090912001546001600160a01b03166107ac565b6107796107725a84906109d3565b8490610a1d565b92505a600f80549193505f61078d83610d3e565b9190505550808061079d90610d3e565b9150506106dc565b5050505050565b6001600160a01b0381165f9081526007602052604081205490036107cd5750565b5f6107d7826103e0565b905080156108bf57600a546107ec9082610a1d565b600a5560015460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af115801561083f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108639190610d56565b506001600160a01b0382165f90815260066020908152604080832042905560079091529020600201546108969082610a1d565b6001600160a01b0383165f9081526007602052604090206002810191909155546103be90610a80565b5050565b600480546108d390600190610d75565b815481106108e3576108e3610cad565b5f9182526020808320909101546001600160a01b038481168452600590925260409092205460048054929093169291811061092057610920610cad565b5f91825260208083209190910180546001600160a01b0319166001600160a01b0394851617905591831681526005918290526040812054600480549193929161096b90600190610d75565b8154811061097b5761097b610cad565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205560048054806109b0576109b0610d88565b5f8281526020902081015f1990810180546001600160a01b031916905501905550565b5f610a1483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610b9f565b90505b92915050565b5f80610a298385610d9c565b905083811015610a145760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b5f610a17600c5461068f600b5485610a9c90919063ffffffff16565b5f825f03610aab57505f610a17565b5f610ab68385610daf565b905082610ac38583610dc6565b14610a145760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a77565b5f610a1483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610bd7565b600d546001600160a01b0382165f9081526006602052604081205490914291610b849190610d9c565b108015610a175750600e54610b98836103e0565b1192915050565b5f8184841115610bc25760405162461bcd60e51b8152600401610a779190610de5565b505f610bce8486610d75565b95945050505050565b5f8183610bf75760405162461bcd60e51b8152600401610a779190610de5565b505f610bce8486610dc6565b80356001600160a01b0381168114610c19575f5ffd5b919050565b5f5f60408385031215610c2f575f5ffd5b610c3883610c03565b946020939093013593505050565b5f60208284031215610c56575f5ffd5b610a1482610c03565b5f5f60408385031215610c70575f5ffd5b50508035926020909101359150565b5f60208284031215610c8f575f5ffd5b5035919050565b5f60208284031215610ca6575f5ffd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b5f608082018683526080602084015280865180835260a0850191506020880192505f5b81811015610d0b5783516001600160a01b0316835260209384019390920191600101610ce4565b50506001600160a01b0395909516604084015250506060015292915050565b634e487b7160e01b5f52601160045260245ffd5b5f60018201610d4f57610d4f610d2a565b5060010190565b5f60208284031215610d66575f5ffd5b81518015158114610a14575f5ffd5b81810381811115610a1757610a17610d2a565b634e487b7160e01b5f52603160045260245ffd5b80820180821115610a1757610a17610d2a565b8082028115828204841417610a1757610a17610d2a565b5f82610de057634e487b7160e01b5f52601260045260245ffd5b500490565b602081525f82518060208401525f5b81811015610e115760208186018101516040868401015201610df4565b505f604082850101526040601f19601f8301168401019150509291505056fea26469706673582212203b8ffd37a0c90e21f7a1d40c6de5e61b74db6e19a82af6c291af51fd9c03d8ec64736f6c634300081c0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000121eac000000000000000000000000000000000000000000000000000000000000000084d6176657269636b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034d41560000000000000000000000000000000000000000000000000000000000

Deployed ByteCode

0x60806040526004361061028e575f3560e01c8063893d20e811610155578063dd62ed3e116100be578063f887ea4011610078578063f887ea40146107af578063fce589d8146107ce578063fe634ad0146107e3578063fe9fbb80146107fc578063fed0d2a11461081b578063ffb54a9914610830575f5ffd5b8063dd62ed3e146106d0578063df20fd4914610714578063e96fada214610733578063ec72d65f14610752578063f2fde38b14610771578063f708a64f14610790575f5ffd5b8063bfe109281161010f578063bfe1092814610621578063c191c92614610640578063ca33e64c14610654578063d51ed1c814610673578063d7c0103214610692578063dab84ee7146106b1575f5ffd5b8063893d20e81461056b57806395d89b411461059b57806398118cb4146105af5780639d1944f5146105c4578063a8aa1b31146105e3578063a9059cbb14610602575f5ffd5b80632f54bf6e116101f75780636b67c4df116101b15780636b67c4df146104c05780636ddd1713146104d557806370a08231146104ee57806383ad79941461052257806386f6c3c11461053757806387d3a14d14610556575f5ffd5b80632f54bf6e14610400578063313ce5671461042d57806344a33fd21461044e578063571ac8b01461046d578063658d4b7f1461048c5780636827e764146104ab575f5ffd5b80631da1db5e116102485780631da1db5e146103595780631df4ccfc1461037a578063201e79911461038f57806323b872dd146103ae5780632b112e49146103cd5780632d48e896146103e1575f5ffd5b80630445b6671461029957806306fdde03146102c1578063095ea7b3146102e25780631161ae3914610311578063180b0d7e1461033057806318160ddd14610345575f5ffd5b3661029557005b5f5ffd5b3480156102a4575f5ffd5b506102ae60215481565b6040519081526020015b60405180910390f35b3480156102cc575f5ffd5b506102d5610850565b6040516102b8919061263e565b3480156102ed575f5ffd5b506103016102fc3660046126a0565b6108e0565b60405190151581526020016102b8565b34801561031c575f5ffd5b5061030161032b3660046126ca565b61094c565b34801561033b575f5ffd5b506102ae60155481565b348015610350575f5ffd5b506008546102ae565b348015610364575f5ffd5b506103786103733660046126ea565b61095f565b005b348015610385575f5ffd5b506102ae60145481565b34801561039a575f5ffd5b506103786103a93660046126ca565b6109de565b3480156103b9575f5ffd5b506103016103c8366004612701565b610a0e565b3480156103d8575f5ffd5b506102ae610acc565b3480156103ec575f5ffd5b506103786103fb3660046126ca565b610b1c565b34801561040b575f5ffd5b5061030161041a36600461273f565b5f546001600160a01b0391821691161490565b348015610438575f5ffd5b5060075460405160ff90911681526020016102b8565b348015610459575f5ffd5b506103786104683660046126ea565b610ba6565b348015610478575f5ffd5b5061030161048736600461273f565b610bdc565b348015610497575f5ffd5b506103786104a6366004612767565b610be8565b3480156104b6575f5ffd5b506102ae60125481565b3480156104cb575f5ffd5b506102ae60115481565b3480156104e0575f5ffd5b506020546103019060ff1681565b3480156104f9575f5ffd5b506102ae61050836600461273f565b6001600160a01b03165f9081526009602052604090205490565b34801561052d575f5ffd5b506102ae600f5481565b348015610542575f5ffd5b5061037861055136600461279e565b610c37565b348015610561575f5ffd5b506102ae60105481565b348015610576575f5ffd5b505f546001600160a01b03165b6040516001600160a01b0390911681526020016102b8565b3480156105a6575f5ffd5b506102d5610cec565b3480156105ba575f5ffd5b506102ae600e5481565b3480156105cf575f5ffd5b506103786105de3660046126ea565b610cfb565b3480156105ee575f5ffd5b50601d54610583906001600160a01b031681565b34801561060d575f5ffd5b5061030161061c3660046126a0565b610d25565b34801561062c575f5ffd5b50601e54610583906001600160a01b031681565b34801561064b575f5ffd5b50610378610d31565b34801561065f575f5ffd5b50601754610583906001600160a01b031681565b34801561067e575f5ffd5b506102ae61068d3660046126ea565b610dcb565b34801561069d575f5ffd5b506103786106ac3660046127dd565b610e10565b3480156106bc575f5ffd5b50601954610583906001600160a01b031681565b3480156106db575f5ffd5b506102ae6106ea366004612825565b6001600160a01b039182165f908152600a6020908152604080832093909416825291909152205490565b34801561071f575f5ffd5b5061037861072e366004612851565b610e74565b34801561073e575f5ffd5b50601854610583906001600160a01b031681565b34801561075d575f5ffd5b5061037861076c3660046126ea565b610eb0565b34801561077c575f5ffd5b5061037861078b36600461273f565b610ede565b34801561079b575f5ffd5b506103786107aa366004612767565b610f72565b3480156107ba575f5ffd5b50601c54610583906001600160a01b031681565b3480156107d9575f5ffd5b506102ae60135481565b3480156107ee575f5ffd5b50600d546103019060ff1681565b348015610807575f5ffd5b5061030161081636600461273f565b611072565b348015610826575f5ffd5b506102ae60165481565b34801561083b575f5ffd5b50601d5461030190600160a01b900460ff1681565b60606005805461085f9061286d565b80601f016020809104026020016040519081016040528092919081815260200182805461088b9061286d565b80156108d65780601f106108ad576101008083540402835291602001916108d6565b820191905f5260205f20905b8154815290600101906020018083116108b957829003601f168201915b5050505050905090565b335f818152600a602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061093a9086815260200190565b60405180910390a35060015b92915050565b5f8261095783610dcb565b119392505050565b61096833611072565b61098d5760405162461bcd60e51b8152600401610984906128a5565b60405180910390fd5b60185447906001600160a01b03166108fc60646109aa85856128de565b6109b491906128f5565b6040518115909202915f818181858888f193505050501580156109d9573d5f5f3e3d5ffd5b505050565b6109e733611072565b610a035760405162461bcd60e51b8152600401610984906128a5565b601a91909155601b55565b6001600160a01b0383165f908152600a602090815260408083203384529091528120545f1914610ab7576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387165f908152600a82528381203382529091529190912054610a9391849061108f565b6001600160a01b0385165f908152600a602090815260408083203384529091529020555b610ac28484846110c7565b90505b9392505050565b6004546001600160a01b03165f90815260096020526040812054610b17906003546001600160a01b03165f90815260096020526040902054610b119060085490611424565b90611424565b905090565b610b2533611072565b610b415760405162461bcd60e51b8152600401610984906128a5565b601e546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b5f604051808303815f87803b158015610b8c575f5ffd5b505af1158015610b9e573d5f5f3e3d5ffd5b505050505050565b610baf33611072565b610bcb5760405162461bcd60e51b8152600401610984906128a5565b47336108fc60646109aa85856128de565b5f610946825f196108e0565b610bf133611072565b610c0d5760405162461bcd60e51b8152600401610984906128a5565b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b610c4033611072565b610c5c5760405162461bcd60e51b8152600401610984906128a5565b600e869055600f8590556011849055601283905560138290556010819055610c9282610c8c858188818c8c611465565b90611465565b60148190556103e8601555600511610b9e5760405162461bcd60e51b815260206004820152601b60248201527f466565732063616e6e6f74206265206d6f7265207468616e20352500000000006044820152606401610984565b60606006805461085f9061286d565b610d0433611072565b610d205760405162461bcd60e51b8152600401610984906128a5565b601f55565b5f610ac53384846110c7565b5f546001600160a01b03163314610d5a5760405162461bcd60e51b815260040161098490612914565b600d5460ff16610dac5760405162461bcd60e51b815260206004820152601960248201527f4d6f6f6e206d697373696f6e20616c7265616479206120676f000000000000006044820152606401610984565b601d805460ff60a01b1916600160a01b179055600d805460ff19169055565b5f610946610dd7610acc565b601d546001600160a01b03165f90815260096020526040902054610e0a90610e03906002905b906114c3565b85906114c3565b90611541565b610e1933611072565b610e355760405162461bcd60e51b8152600401610984906128a5565b601780546001600160a01b039485166001600160a01b031991821617909155601880549385169382169390931790925560198054919093169116179055565b610e7d33611072565b610e995760405162461bcd60e51b8152600401610984906128a5565b6020805460ff191692151592909217909155602155565b5f546001600160a01b03163314610ed95760405162461bcd60e51b815260040161098490612914565b601655565b5f546001600160a01b03163314610f075760405162461bcd60e51b815260040161098490612914565b5f80546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b610f7b33611072565b610f975760405162461bcd60e51b8152600401610984906128a5565b6001600160a01b0382163014801590610fbe5750601d546001600160a01b03838116911614155b610fc6575f5ffd5b6001600160a01b0382165f908152600c60205260409020805460ff1916821580159190911790915561102a57601e54604051630a5b654b60e11b81526001600160a01b0384811660048301525f6024830152909116906314b6ca9690604401610b75565b601e546001600160a01b038381165f8181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401610b75565b6001600160a01b03165f9081526001602052604090205460ff1690565b5f81848411156110b25760405162461bcd60e51b8152600401610984919061263e565b505f6110be8486612934565b95945050505050565b6022545f9060ff16156110e6576110df848484611582565b9050610ac5565b6001600160a01b0384165f9081526001602052604090205460ff1615801561112657506001600160a01b0383165f9081526001602052604090205460ff16155b1561117b57601d54600160a01b900460ff1661117b5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610984565b611183611652565b156111905761119061169f565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387165f908152600990915291909120546111e191849061108f565b6001600160a01b0385165f908152600960205260408120919091556112068585611aa8565b611210578261122e565b601d5461122e90869085906001600160a01b03888116911614611aef565b6001600160a01b0385165f908152600960205260409020549091506112539082611465565b6001600160a01b038086165f908152600960209081526040808320949094559188168152600c909152205460ff166112f257601e546001600160a01b038681165f8181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca96906044015f604051808303815f87803b1580156112df575f5ffd5b505af19250505080156112f0575060015b505b6001600160a01b0384165f908152600c602052604090205460ff1661137e57601e546001600160a01b038581165f8181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca96906044015f604051808303815f87803b15801561136b575f5ffd5b505af192505050801561137c575060015b505b601e54601f546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916113b69160040190815260200190565b5f604051808303815f87803b1580156113cd575f5ffd5b505af19250505080156113de575060015b50836001600160a01b0316856001600160a01b03165f516020612a7e5f395f51905f528360405161141191815260200190565b60405180910390a3506001949350505050565b5f610ac583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061108f565b5f806114718385612947565b905083811015610ac55760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610984565b5f825f036114d257505f610946565b5f6114dd83856128de565b9050826114ea85836128f5565b14610ac55760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610984565b5f610ac583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611c46565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386165f9081526009909152918220546115d291849061108f565b6001600160a01b038086165f9081526009602052604080822093909355908516815220546116009083611465565b6001600160a01b038085165f8181526009602052604090819020939093559151908616905f516020612a7e5f395f51905f52906116409086815260200190565b60405180910390a35060019392505050565b601d545f906001600160a01b03163314801590611672575060225460ff16155b8015611680575060205460ff165b8015610b17575050602154305f90815260096020526040902054101590565b6022805460ff19166001179055601a54601b545f916116bd9161094c565b6116c957600e546116cb565b5f5b90505f6116ee6002610e0a601454610e0a866021546114c390919063ffffffff16565b90505f6117068260215461142490919063ffffffff16565b6040805160028082526060820183529293505f92909160208301908036833701905050905030815f8151811061173e5761173e61295a565b6001600160a01b03928316602091820292909201015260025482519116908290600190811061176f5761176f61295a565b6001600160a01b039283166020918202929092010152601c5460405163791ac94760e01b81524792919091169063791ac947906117b89086905f908790309042906004016129b1565b5f604051808303815f87803b1580156117cf575f5ffd5b505af11580156117e1573d5f5f3e3d5ffd5b505050505f6117f9824761142490919063ffffffff16565b90505f61181361180a886002611541565b60145490611424565b90505f6118276002610e0a8481878d6114c3565b90505f61184383610e0a600f54876114c390919063ffffffff16565b90505f61185f84610e0a601054886114c390919063ffffffff16565b90505f61187b85610e0a601154896114c390919063ffffffff16565b90505f61189786610e0a6012548a6114c390919063ffffffff16565b9050601e5f9054906101000a90046001600160a01b03166001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004015f604051808303818588803b1580156118e6575f5ffd5b505af1935050505080156118f8575060015b5082156119085761190883611c72565b6018546040515f916001600160a01b03169061753090859084818181858888f193505050503d805f8114611957576040519150601f19603f3d011682016040523d82523d5f602084013e61195c565b606091505b50506019546040519192506001600160a01b0316906175309084905f818181858888f193505050503d805f81146119ae576040519150601f19603f3d011682016040523d82523d5f602084013e6119b3565b606091505b505f9250508c159050611a8f57601c5460175460405163f305d71960e01b8152306004820152602481018f90525f6044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990889060c40160606040518083038185885af1158015611a2d573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611a5291906129ec565b505060408051888152602081018f90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506022805460ff191690555050505050505050505050565b6001600160a01b0381165f908152600b602052604081205460ff1615611acf57505f610946565b50506001600160a01b03165f908152600b602052604090205460ff161590565b5f5f82611afd576064611b01565b6016545b90505f611b2f6015546064611b1691906128de565b610e0a84610dfd6014548a6114c390919063ffffffff16565b90505f611b4d601454610e0a601354856114c390919063ffffffff16565b90505f611b5a8383611424565b90508115611bd2576003546001600160a01b03165f90815260096020526040902054611b869083611465565b600380546001600160a01b039081165f90815260096020908152604091829020949094559154915185815291811692908b16915f516020612a7e5f395f51905f52910160405180910390a35b305f90815260096020526040902054611beb9082611465565b305f81815260096020526040908190209290925590516001600160a01b038a16905f516020612a7e5f395f51905f5290611c289085815260200190565b60405180910390a3611c3a8784611424565b98975050505050505050565b5f8183611c665760405162461bcd60e51b8152600401610984919061263e565b505f6110be84866128f5565b73be0b125b05f291e89f97ed5d132139649e62d3dd73e0d5d40b1f495ea15dedaa29e39bd2712d89392273b71900f72406a9053e14500f277cc6ee8b217c3573ef8e9b5f8608f11f398a8685d95a8e9b6831153a7394534eeee131840b1c0f61847c572228bdfdde935f6002604051908082528060200260200182016040528015611d07578160200160208202803683370190505b5060025481519192506001600160a01b03169082905f90611d2a57611d2a61295a565b60200260200101906001600160a01b031690816001600160a01b0316815250508581600181518110611d5e57611d5e61295a565b6001600160a01b03929092166020928302919091018201526040805160028082526060820183525f939192909183019080368337505060025482519293506001600160a01b0316918391505f90611db757611db761295a565b60200260200101906001600160a01b031690816001600160a01b0316815250508581600181518110611deb57611deb61295a565b6001600160a01b03929092166020928302919091018201526040805160028082526060820183525f939192909183019080368337505060025482519293506001600160a01b0316918391505f90611e4457611e4461295a565b60200260200101906001600160a01b031690816001600160a01b0316815250508581600181518110611e7857611e7861295a565b6001600160a01b03929092166020928302919091018201526040805160028082526060820183525f939192909183019080368337505060025482519293506001600160a01b0316918391505f90611ed157611ed161295a565b60200260200101906001600160a01b031690816001600160a01b0316815250508581600181518110611f0557611f0561295a565b6001600160a01b03929092166020928302919091018201526040805160028082526060820183525f939192909183019080368337505060025482519293506001600160a01b0316918391505f90611f5e57611f5e61295a565b60200260200101906001600160a01b031690816001600160a01b0316815250508581600181518110611f9257611f9261295a565b6001600160a01b039283166020918202929092010152601c541663b6f9de95611fbc60058e6128f5565b5f8830426040518663ffffffff1660e01b8152600401611fdf9493929190612a17565b5f604051808303818588803b158015611ff6575f5ffd5b505af1158015612008573d5f5f3e3d5ffd5b5050601c546001600160a01b0316925063b6f9de95915061202c905060058e6128f5565b5f8730426040518663ffffffff1660e01b815260040161204f9493929190612a17565b5f604051808303818588803b158015612066575f5ffd5b505af1158015612078573d5f5f3e3d5ffd5b5050601c546001600160a01b0316925063b6f9de95915061209c905060058e6128f5565b5f8630426040518663ffffffff1660e01b81526004016120bf9493929190612a17565b5f604051808303818588803b1580156120d6575f5ffd5b505af11580156120e8573d5f5f3e3d5ffd5b5050601c546001600160a01b0316925063b6f9de95915061210c905060058e6128f5565b5f8530426040518663ffffffff1660e01b815260040161212f9493929190612a17565b5f604051808303818588803b158015612146575f5ffd5b505af1158015612158573d5f5f3e3d5ffd5b5050601c546001600160a01b0316925063b6f9de95915061217c905060058e6128f5565b5f8430426040518663ffffffff1660e01b815260040161219f9493929190612a17565b5f604051808303818588803b1580156121b6575f5ffd5b505af11580156121c8573d5f5f3e3d5ffd5b50506040516370a0823160e01b81523060048201525f93506001600160a01b038e1692506370a082319150602401602060405180830381865afa158015612211573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122359190612a4b565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038c16906370a0823190602401602060405180830381865afa15801561227c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122a09190612a4b565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038c16906370a0823190602401602060405180830381865afa1580156122e7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061230b9190612a4b565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038c16906370a0823190602401602060405180830381865afa158015612352573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123769190612a4b565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038c16906370a0823190602401602060405180830381865afa1580156123bd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123e19190612a4b565b90508e6001600160a01b031663a9059cbb610369876040518363ffffffff1660e01b81526004016124279291906001600160a01b03929092168252602082015260400190565b6020604051808303815f875af1158015612443573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124679190612a62565b5060405163a9059cbb60e01b81526103696004820152602481018590526001600160a01b038f169063a9059cbb906044016020604051808303815f875af11580156124b4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124d89190612a62565b5060405163a9059cbb60e01b81526103696004820152602481018490526001600160a01b038e169063a9059cbb906044016020604051808303815f875af1158015612525573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125499190612a62565b5060405163a9059cbb60e01b81526103696004820152602481018390526001600160a01b038d169063a9059cbb906044016020604051808303815f875af1158015612596573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125ba9190612a62565b5060405163a9059cbb60e01b81526103696004820152602481018290526001600160a01b038c169063a9059cbb906044016020604051808303815f875af1158015612607573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061262b9190612a62565b5050505050505050505050505050505050565b602081525f82518060208401525f5b8181101561266a576020818601810151604086840101520161264d565b505f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b038116811461269d575f5ffd5b50565b5f5f604083850312156126b1575f5ffd5b82356126bc81612689565b946020939093013593505050565b5f5f604083850312156126db575f5ffd5b50508035926020909101359150565b5f602082840312156126fa575f5ffd5b5035919050565b5f5f5f60608486031215612713575f5ffd5b833561271e81612689565b9250602084013561272e81612689565b929592945050506040919091013590565b5f6020828403121561274f575f5ffd5b8135610ac581612689565b801515811461269d575f5ffd5b5f5f60408385031215612778575f5ffd5b823561278381612689565b915060208301356127938161275a565b809150509250929050565b5f5f5f5f5f5f60c087890312156127b3575f5ffd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b5f5f5f606084860312156127ef575f5ffd5b83356127fa81612689565b9250602084013561280a81612689565b9150604084013561281a81612689565b809150509250925092565b5f5f60408385031215612836575f5ffd5b823561284181612689565b9150602083013561279381612689565b5f5f60408385031215612862575f5ffd5b82356126bc8161275a565b600181811c9082168061288157607f821691505b60208210810361289f57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610946576109466128ca565b5f8261290f57634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526006908201526510a7aba722a960d11b604082015260600190565b81810381811115610946576109466128ca565b80820180821115610946576109466128ca565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602084019350602083015f5b828110156129a75781516001600160a01b0316865260209586019590910190600101612980565b5093949350505050565b85815284602082015260a060408201525f6129cf60a083018661296e565b6001600160a01b0394909416606083015250608001529392505050565b5f5f5f606084860312156129fe575f5ffd5b5050815160208301516040909301519094929350919050565b848152608060208201525f612a2f608083018661296e565b6001600160a01b03949094166040830152506060015292915050565b5f60208284031215612a5b575f5ffd5b5051919050565b5f60208284031215612a72575f5ffd5b8151610ac58161275a56feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220e16353b0c949e59dc68201ad506d13959e0d6aaeb67189112208ef152dac448e64736f6c634300081c0033