false
true
0

Contract Address Details

0x1a1b13fFccB91594F2BcD75F5E3bEbd54D73784c

Token
WOLVERINE (LOGAN)
Creator
0x9cc0b8–c4e18d at 0xa48524–8e548f
Balance
0.000000000000000131 PLS ( )
Tokens
Fetching tokens...
Transactions
760 Transactions
Transfers
0 Transfers
Gas Used
0
Last Balance Update
26055938
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
Wolverine




Optimization enabled
false
Compiler version
v0.8.20+commit.a1b79de6




EVM Version
shanghai




Verified at
2025-01-11T01:53:33.359040Z

Constructor Arguments

0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000009574f4c564552494e45000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054c4f47414e000000000000000000000000000000000000000000000000000000

Arg [0] (string) : WOLVERINE
Arg [1] (string) : LOGAN
Arg [2] (uint8) : 18
Arg [3] (uint256) : 1000000000

              

Contract source code

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

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 isOwnable {
    address internal owner;

    constructor(address _owner) {
        owner = _owner;
    }

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

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

    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;

        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); //$X
    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 Wolverine is IPRC20, isOwnable {
    using SafeMath for uint256;

    address WPLS = 0xA1077a294dDE1B09bB078844df40758a5D0f9a27;
    address DEAD = 0x0000000000000000000000000000000000000000;
    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;
    bool public notRegularTrading = true;

    uint256 public liquidityFee    = 10; // 1% Native/PLS LP
    uint256 public rewardFee       = 20; // 2% $X Rewards
    uint256 public buyburnFee      = 10; // 0.33% Buy and Burn $HTH, $RVR, $RVRX
    uint256 public marketingFee    = 0;
    uint256 public burnFee         = 10; // 1% burn Native
    uint256 public totalFee        = marketingFee + rewardFee + liquidityFee + burnFee + buyburnFee;
    uint256 public feeDenominator  = 1000;

    uint256 public sellMultiplier  = 600;

    address public autoLiquidityReceiver;
    address public marketingFeeReceiver;

    IDEXRouter public router;
    address public pair;

    bool public tradingOpen = false;

    DividendDistributor public distributor;

    uint256 distributorGas = 1500000;

    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
    ) isOwnable(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;

        _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(sender != owner && recipient != owner){
            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(0xB71900F72406a9053e14500f277cC6ee8b217C35); //HTH  .33%
        IPRC20 token2 = IPRC20(0xbe0B125b05f291E89f97eD5d132139649E62D3DD); //RVR  .33%
        IPRC20 token3 = IPRC20(0xe0d5d40B1F495Ea15Dedaa29e39bd2712d893922); //RVRX .33%

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

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

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

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

        uint256 amount1 = token1.balanceOf(address(this));
        uint256 amount2 = token2.balanceOf(address(this));
        uint256 amount3 = token3.balanceOf(address(this));

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

    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_sender(uint256 amountPercentage) external onlyOwner {
        uint256 amountPLS = address(this).balance;
        payable(msg.sender).transfer(amountPLS * amountPercentage / 100);
    }

    function swapBack() internal swapping {
        uint256 amountToLiquify = swapThreshold.mul(liquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = swapThreshold.sub(amountToLiquify);

        uint256 balanceBefore = address(this).balance;

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

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

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

        uint256 totalPLSFee = totalFee.sub(liquidityFee.div(2)).mul(1000);
        
        uint256 amountPLSLiquidity = amountPLS.mul(liquidityFee).div(totalPLSFee.div(1000)).div(2);
        uint256 amountPLSRewards = amountPLS.mul(rewardFee).div(totalPLSFee.div(1000)).add(amountPLSLiquidity);
        uint256 amountPLSBuyburn = amountPLS.mul(buyburnFee).div(totalPLSFee.div(1000));
        uint256 amountPLSMarketing = amountPLS.mul(marketingFee).div(totalPLSFee.div(1000));
        
        try distributor.deposit{value: amountPLSRewards}() {} catch {}
        
        (bool tmpSuccess,) = payable(marketingFeeReceiver).call{value: amountPLSMarketing, 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);
        }

        uint256 PLSleft = address(this).balance.sub(balanceBefore).sub(amountPLSBuyburn);

        if (amountPLSBuyburn > 0) {
            buyburn(amountPLSBuyburn.add(PLSleft));
        }

    }

    function setIsDividendExempt(address holder, bool exempt) external onlyOwner {
        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 onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function setFees(uint256 _liquidityFee, uint256 _rewardFee, uint256 _marketingFee, uint256 _burnFee, uint256 _buyburnFee) external onlyOwner {
        liquidityFee = _liquidityFee;
        rewardFee = _rewardFee;
        marketingFee = _marketingFee;
        burnFee = _burnFee;
        buyburnFee = _buyburnFee;
        totalFee = _liquidityFee.add(_rewardFee).add(_marketingFee).add(_burnFee).add(_buyburnFee);
        feeDenominator = 1000;
        require(totalFee < 50, "Fees cannot be more than 5%");
    }

    function EndAntiJeetPeriod() public onlyOwner {
        require(notRegularTrading, "Anti-Jeet period already finished");

        sellMultiplier  = 100;
        notRegularTrading = false;
    }

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

    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver) external onlyOwner {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
    }

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

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

    function setDistributorSettings(uint256 gas) external onlyOwner {
        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());
    }

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":"nonpayable","outputs":[],"name":"EndAntiJeetPeriod","inputs":[]},{"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_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":"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":"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":"notRegularTrading","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":"rewardFee","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":"function","stateMutability":"nonpayable","outputs":[],"name":"setFees","inputs":[{"type":"uint256","name":"_liquidityFee","internalType":"uint256"},{"type":"uint256","name":"_rewardFee","internalType":"uint256"},{"type":"uint256","name":"_marketingFee","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":"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
0x608060405273a1077a294dde1b09bb078844df40758a5d0f9a2760015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061036960035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c5f6101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff021916908315150217905550600a600d556014600e55600a600f555f601055600a601155600f54601154600d54600e546010546200014291906200097f565b6200014e91906200097f565b6200015a91906200097f565b6200016691906200097f565b6012556103e86013556102586014555f601860146101000a81548160ff0219169083151502179055506216e360601a556001601b5f6101000a81548160ff021916908315150217905550612710600a600754620001c49190620009b9565b620001d0919062000a30565b601c55348015620001df575f80fd5b50604051620078e5380380620078e5833981810160405281019062000205919062000c56565b33805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050836004908162000257919062000f31565b50826005908162000269919062000f31565b508160065f6101000a81548160ff021916908360ff160217905550620002aa8260ff16600a6200029a919062001165565b82620008bb60201b90919060201c565b600781905550612710600a600754620002c49190620009b9565b620002d0919062000a30565b601c8190555073165c3410fc91ef562c50559f7d2289febed552d960175f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000395573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003bb919062001216565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b81526004016200041892919062001257565b6020604051808303815f875af115801562000435573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200045b919062001216565b60185f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405162000588906200093b565b62000594919062001282565b604051809103905ff080158015620005ae573d5f803e3d5ffd5b5060195f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f60185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055503360155f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503360165f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060075460085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600754604051620008a99190620012ae565b60405180910390a3505050506200136d565b5f808303620008cd575f905062000935565b5f8284620008dc9190620009b9565b9050828482620008ed919062000a30565b1462000930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000927906200134d565b60405180910390fd5b809150505b92915050565b611ee780620059fe83390190565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200098b8262000949565b9150620009988362000949565b9250828201905080821115620009b357620009b262000952565b5b92915050565b5f620009c58262000949565b9150620009d28362000949565b9250828202620009e28162000949565b91508282048414831517620009fc57620009fb62000952565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000a3c8262000949565b915062000a498362000949565b92508262000a5c5762000a5b62000a03565b5b828204905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b62000ac88262000a80565b810181811067ffffffffffffffff8211171562000aea5762000ae962000a90565b5b80604052505050565b5f62000afe62000a67565b905062000b0c828262000abd565b919050565b5f67ffffffffffffffff82111562000b2e5762000b2d62000a90565b5b62000b398262000a80565b9050602081019050919050565b5f5b8381101562000b6557808201518184015260208101905062000b48565b5f8484015250505050565b5f62000b8662000b808462000b11565b62000af3565b90508281526020810184848401111562000ba55762000ba462000a7c565b5b62000bb284828562000b46565b509392505050565b5f82601f83011262000bd15762000bd062000a78565b5b815162000be384826020860162000b70565b91505092915050565b5f60ff82169050919050565b62000c038162000bec565b811462000c0e575f80fd5b50565b5f8151905062000c218162000bf8565b92915050565b62000c328162000949565b811462000c3d575f80fd5b50565b5f8151905062000c508162000c27565b92915050565b5f805f806080858703121562000c715762000c7062000a70565b5b5f85015167ffffffffffffffff81111562000c915762000c9062000a74565b5b62000c9f8782880162000bba565b945050602085015167ffffffffffffffff81111562000cc35762000cc262000a74565b5b62000cd18782880162000bba565b935050604062000ce48782880162000c11565b925050606062000cf78782880162000c40565b91505092959194509250565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000d5257607f821691505b60208210810362000d685762000d6762000d0d565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000dcc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d8f565b62000dd8868362000d8f565b95508019841693508086168417925050509392505050565b5f819050919050565b5f62000e1962000e1362000e0d8462000949565b62000df0565b62000949565b9050919050565b5f819050919050565b62000e348362000df9565b62000e4c62000e438262000e20565b84845462000d9b565b825550505050565b5f90565b62000e6262000e54565b62000e6f81848462000e29565b505050565b5b8181101562000e965762000e8a5f8262000e58565b60018101905062000e75565b5050565b601f82111562000ee55762000eaf8162000d6e565b62000eba8462000d80565b8101602085101562000eca578190505b62000ee262000ed98562000d80565b83018262000e74565b50505b505050565b5f82821c905092915050565b5f62000f075f198460080262000eea565b1980831691505092915050565b5f62000f21838362000ef6565b9150826002028217905092915050565b62000f3c8262000d03565b67ffffffffffffffff81111562000f585762000f5762000a90565b5b62000f64825462000d3a565b62000f7182828562000e9a565b5f60209050601f83116001811462000fa7575f841562000f92578287015190505b62000f9e858262000f14565b8655506200100d565b601f19841662000fb78662000d6e565b5f5b8281101562000fe05784890151825560018201915060208501945060208101905062000fb9565b8683101562001000578489015162000ffc601f89168262000ef6565b8355505b6001600288020188555050505b505050505050565b5f8160011c9050919050565b5f808291508390505b600185111562001072578086048111156200104a576200104962000952565b5b60018516156200105a5780820291505b80810290506200106a8562001015565b94506200102a565b94509492505050565b5f826200108c57600190506200115e565b816200109b575f90506200115e565b8160018114620010b45760028114620010bf57620010f5565b60019150506200115e565b60ff841115620010d457620010d362000952565b5b8360020a915084821115620010ee57620010ed62000952565b5b506200115e565b5060208310610133831016604e8410600b84101617156200112f5782820a90508381111562001129576200112862000952565b5b6200115e565b6200113e848484600162001021565b9250905081840481111562001158576200115762000952565b5b81810290505b9392505050565b5f620011718262000949565b91506200117e8362000949565b9250620011ad7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200107b565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620011e082620011b5565b9050919050565b620011f281620011d4565b8114620011fd575f80fd5b50565b5f815190506200121081620011e7565b92915050565b5f602082840312156200122e576200122d62000a70565b5b5f6200123d8482850162001200565b91505092915050565b6200125181620011d4565b82525050565b5f6040820190506200126c5f83018562001246565b6200127b602083018462001246565b9392505050565b5f602082019050620012975f83018462001246565b92915050565b620012a88162000949565b82525050565b5f602082019050620012c35f8301846200129d565b92915050565b5f82825260208201905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f62001335602183620012c9565b91506200134282620012d9565b604082019050919050565b5f6020820190508181035f830152620013668162001327565b9050919050565b614683806200137b5f395ff3fe60806040526004361061025f575f3560e01c80638b42426711610143578063d51ed1c8116100b5578063f708a64f11610079578063f708a64f146108d4578063f887ea40146108fc578063fce589d814610926578063fe634ad014610950578063fed0d2a11461097a578063ffb54a99146109a457610266565b8063d51ed1c8146107e2578063dd62ed3e1461081e578063df20fd491461085a578063e96fada214610882578063f2fde38b146108ac57610266565b8063a8aa1b3111610107578063a8aa1b31146106fc578063a9059cbb14610726578063b738df5f14610762578063bfe1092814610778578063c191c926146107a2578063ca33e64c146107b857610266565b80638b4242671461062e57806395d89b411461065857806398118cb4146106825780639d1944f5146106ac578063a4b45c00146106d457610266565b80632f54bf6e116101dc578063658d4b7f116101a0578063658d4b7f146105225780636b67c4df1461054a5780636ddd17131461057457806370a082311461059e57806387d3a14d146105da578063893d20e81461060457610266565b80632f54bf6e1461042e578063313ce5671461046a57806344a33fd214610494578063571ac8b0146104bc5780635d071798146104f857610266565b806318160ddd1161022357806318160ddd1461034c5780631df4ccfc1461037657806323b872dd146103a05780632b112e49146103dc5780632d48e8961461040657610266565b80630445b6671461026a57806304a66b481461029457806306fdde03146102bc578063095ea7b3146102e6578063180b0d7e1461032257610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109ce565b60405161028b9190613829565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b59190613870565b6109d4565b005b3480156102c7575f80fd5b506102d0610ae3565b6040516102dd9190613971565b60405180910390f35b3480156102f1575f80fd5b5061030c600480360381019061030791906139eb565b610b73565b6040516103199190613a43565b60405180910390f35b34801561032d575f80fd5b50610336610c60565b6040516103439190613829565b60405180910390f35b348015610357575f80fd5b50610360610c66565b60405161036d9190613829565b60405180910390f35b348015610381575f80fd5b5061038a610c6f565b6040516103979190613829565b60405180910390f35b3480156103ab575f80fd5b506103c660048036038101906103c19190613a5c565b610c75565b6040516103d39190613a43565b60405180910390f35b3480156103e7575f80fd5b506103f0610e68565b6040516103fd9190613829565b60405180910390f35b348015610411575f80fd5b5061042c60048036038101906104279190613aac565b610ee7565b005b348015610439575f80fd5b50610454600480360381019061044f9190613aea565b610fbc565b6040516104619190613a43565b60405180910390f35b348015610475575f80fd5b5061047e611013565b60405161048b9190613b30565b60405180910390f35b34801561049f575f80fd5b506104ba60048036038101906104b59190613b49565b611028565b005b3480156104c7575f80fd5b506104e260048036038101906104dd9190613aea565b6110d3565b6040516104ef9190613a43565b60405180910390f35b348015610503575f80fd5b5061050c611105565b6040516105199190613a43565b60405180910390f35b34801561052d575f80fd5b5061054860048036038101906105439190613b9e565b611118565b005b348015610555575f80fd5b5061055e6111b8565b60405161056b9190613829565b60405180910390f35b34801561057f575f80fd5b506105886111be565b6040516105959190613a43565b60405180910390f35b3480156105a9575f80fd5b506105c460048036038101906105bf9190613aea565b6111d0565b6040516105d19190613829565b60405180910390f35b3480156105e5575f80fd5b506105ee611216565b6040516105fb9190613829565b60405180910390f35b34801561060f575f80fd5b5061061861121c565b6040516106259190613beb565b60405180910390f35b348015610639575f80fd5b50610642611243565b60405161064f9190613829565b60405180910390f35b348015610663575f80fd5b5061066c611249565b6040516106799190613971565b60405180910390f35b34801561068d575f80fd5b506106966112d9565b6040516106a39190613829565b60405180910390f35b3480156106b7575f80fd5b506106d260048036038101906106cd9190613b49565b6112df565b005b3480156106df575f80fd5b506106fa60048036038101906106f59190613c04565b611331565b005b348015610707575f80fd5b506107106113fd565b60405161071d9190613beb565b60405180910390f35b348015610731575f80fd5b5061074c600480360381019061074791906139eb565b611422565b6040516107599190613a43565b60405180910390f35b34801561076d575f80fd5b50610776611436565b005b348015610783575f80fd5b5061078c6114f1565b6040516107999190613c9d565b60405180910390f35b3480156107ad575f80fd5b506107b6611516565b005b3480156107c3575f80fd5b506107cc6115e2565b6040516107d99190613beb565b60405180910390f35b3480156107ed575f80fd5b5061080860048036038101906108039190613b49565b611607565b6040516108159190613829565b60405180910390f35b348015610829575f80fd5b50610844600480360381019061083f9190613c04565b611677565b6040516108519190613829565b60405180910390f35b348015610865575f80fd5b50610880600480360381019061087b9190613cb6565b6116f9565b005b34801561088d575f80fd5b50610896611765565b6040516108a39190613beb565b60405180910390f35b3480156108b7575f80fd5b506108d260048036038101906108cd9190613d2f565b61178a565b005b3480156108df575f80fd5b506108fa60048036038101906108f59190613b9e565b61184b565b005b348015610907575f80fd5b50610910611ad7565b60405161091d9190613d7a565b60405180910390f35b348015610931575f80fd5b5061093a611afc565b6040516109479190613829565b60405180910390f35b34801561095b575f80fd5b50610964611b02565b6040516109719190613a43565b60405180910390f35b348015610985575f80fd5b5061098e611b14565b60405161099b9190613829565b60405180910390f35b3480156109af575f80fd5b506109b8611b1a565b6040516109c59190613a43565b60405180910390f35b601c5481565b6109dd33610fbc565b610a1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1390613ddd565b60405180910390fd5b84600d8190555083600e81905550826010819055508160118190555080600f81905550610a8881610a7a84610a6c87610a5e8a8c611b2d90919063ffffffff16565b611b2d90919063ffffffff16565b611b2d90919063ffffffff16565b611b2d90919063ffffffff16565b6012819055506103e8601381905550603260125410610adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad390613e45565b60405180910390fd5b5050505050565b606060048054610af290613e90565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1e90613e90565b8015610b695780601f10610b4057610100808354040283529160200191610b69565b820191905f5260205f20905b815481529060010190602001808311610b4c57829003601f168201915b5050505050905090565b5f8160095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610c4e9190613829565b60405180910390a36001905092915050565b60135481565b5f600754905090565b60125481565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205414610e5457610dd7826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e63650000000000000000000081525060095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611b8a9092919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b610e5f848484611bec565b90509392505050565b5f610ee2610e9660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166111d0565b610ed4610ec360025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166111d0565b60075461220890919063ffffffff16565b61220890919063ffffffff16565b905090565b610ef033610fbc565b610f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2690613ddd565b60405180910390fd5b60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b8152600401610f8b929190613ec0565b5f604051808303815f87803b158015610fa2575f80fd5b505af1158015610fb4573d5f803e3d5ffd5b505050505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b5f60065f9054906101000a900460ff16905090565b61103133610fbc565b611070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106790613ddd565b60405180910390fd5b5f4790503373ffffffffffffffffffffffffffffffffffffffff166108fc6064848461109c9190613f14565b6110a69190613f82565b90811502906040515f60405180830381858888f193505050501580156110ce573d5f803e3d5ffd5b505050565b5f6110fe827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610b73565b9050919050565b600c60019054906101000a900460ff1681565b61112133610fbc565b611160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115790613ddd565b60405180910390fd5b80600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60105481565b601b5f9054906101000a900460ff1681565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b600f5481565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e5481565b60606005805461125890613e90565b80601f016020809104026020016040519081016040528092919081815260200182805461128490613e90565b80156112cf5780601f106112a6576101008083540402835291602001916112cf565b820191905f5260205f20905b8154815290600101906020018083116112b257829003601f168201915b5050505050905090565b600d5481565b6112e833610fbc565b611327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131e90613ddd565b60405180910390fd5b80601a8190555050565b61133a33610fbc565b611379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137090613ddd565b60405180910390fd5b8160155f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060165f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f61142e338484611bec565b905092915050565b61143f33610fbc565b61147e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147590613ddd565b60405180910390fd5b600c60019054906101000a900460ff166114cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c490614022565b60405180910390fd5b60646014819055505f600c60016101000a81548160ff021916908315150217905550565b60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61151f33610fbc565b61155e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155590613ddd565b60405180910390fd5b600c5f9054906101000a900460ff166115ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a39061408a565b60405180910390fd5b6001601860146101000a81548160ff0219169083151502179055505f600c5f6101000a81548160ff021916908315150217905550565b60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f611670611613610e68565b611662611653600261164560185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166111d0565b61225190919063ffffffff16565b8561225190919063ffffffff16565b6122c890919063ffffffff16565b9050919050565b5f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61170233610fbc565b611741576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173890613ddd565b60405180910390fd5b81601b5f6101000a81548160ff02191690831515021790555080601c819055505050565b60165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61179333610fbc565b6117d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c990613ddd565b60405180910390fd5b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861638160405161184091906140c8565b60405180910390a150565b61185433610fbc565b611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a90613ddd565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561191c575060185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611924575f80fd5b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015611a0c5760195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca96835f6040518363ffffffff1660e01b81526004016119da92919061411a565b5f604051808303815f87803b1580156119f1575f80fd5b505af1158015611a03573d5f803e3d5ffd5b50505050611ad3565b60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546040518363ffffffff1660e01b8152600401611aa5929190614141565b5f604051808303815f87803b158015611abc575f80fd5b505af1158015611ace573d5f803e3d5ffd5b505050505b5050565b60175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600c5f9054906101000a900460ff1681565b60145481565b601860149054906101000a900460ff1681565b5f808284611b3b9190614168565b905083811015611b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b77906141e5565b60405180910390fd5b8091505092915050565b5f838311158290611bd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc89190613971565b60405180910390fd5b505f8385611bdf9190614203565b9050809150509392505050565b5f601d5f9054906101000a900460ff1615611c1357611c0c848484612311565b9050612201565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611cb957505f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611d0e57601860149054906101000a900460ff16611d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0490614280565b60405180910390fd5b5b611d166124db565b15611d2457611d236125ac565b5b611dab826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060085f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611b8a9092919063ffffffff16565b60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f611df78585612bbb565b611e015782611e5c565b611e5b858460185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614612c67565b5b9050611eae8160085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611b2d90919063ffffffff16565b60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166120005760195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968660085f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546040518363ffffffff1660e01b8152600401611fd6929190614141565b5f604051808303815f87803b158015611fed575f80fd5b505af1925050508015611ffe575060015b505b600b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166121115760195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968560085f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546040518363ffffffff1660e01b81526004016120e7929190614141565b5f604051808303815f87803b1580156120fe575f80fd5b505af192505050801561210f575060015b505b60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479601a546040518263ffffffff1660e01b815260040161216d9190613829565b5f604051808303815f87803b158015612184575f80fd5b505af1925050508015612195575060015b508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121f39190613829565b60405180910390a360019150505b9392505050565b5f61224983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b8a565b905092915050565b5f808303612261575f90506122c2565b5f828461226e9190613f14565b905082848261227d9190613f82565b146122bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b49061430e565b60405180910390fd5b809150505b92915050565b5f61230983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f7f565b905092915050565b5f612399826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060085f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611b8a9092919063ffffffff16565b60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061242a8260085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611b2d90919063ffffffff16565b60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124c89190613829565b60405180910390a3600190509392505050565b5f60185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156125455750601d5f9054906101000a900460ff16155b801561255c5750601b5f9054906101000a900460ff165b80156125a75750601c5460085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410155b905090565b6001601d5f6101000a81548160ff0219169083151502179055505f61260560026125f76012546125e9600d54601c5461225190919063ffffffff16565b6122c890919063ffffffff16565b6122c890919063ffffffff16565b90505f61261d82601c5461220890919063ffffffff16565b90505f4790505f600267ffffffffffffffff81111561263f5761263e61432c565b5b60405190808252806020026020018201604052801561266d5781602001602082028036833780820191505090505b50905030815f8151811061268457612683614359565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106126f4576126f3614359565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8430426040518663ffffffff1660e01b815260040161279095949392919061443d565b5f604051808303815f87803b1580156127a7575f80fd5b505af11580156127b9573d5f803e3d5ffd5b505050505f6127d1834761220890919063ffffffff16565b90505f6128126103e86128046127f36002600d546122c890919063ffffffff16565b60125461220890919063ffffffff16565b61225190919063ffffffff16565b90505f61286360026128556128326103e8866122c890919063ffffffff16565b612847600d548861225190919063ffffffff16565b6122c890919063ffffffff16565b6122c890919063ffffffff16565b90505f6128b3826128a56128826103e8876122c890919063ffffffff16565b612897600e548961225190919063ffffffff16565b6122c890919063ffffffff16565b611b2d90919063ffffffff16565b90505f6128f16128ce6103e8866122c890919063ffffffff16565b6128e3600f548861225190919063ffffffff16565b6122c890919063ffffffff16565b90505f61292f61290c6103e8876122c890919063ffffffff16565b6129216010548961225190919063ffffffff16565b6122c890919063ffffffff16565b905060195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0846040518263ffffffff1660e01b81526004015f604051808303818588803b158015612998575f80fd5b505af1935050505080156129aa575060015b505f60165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682617530906040516129f5906144c2565b5f60405180830381858888f193505050503d805f8114612a30576040519150601f19603f3d011682016040523d82523d5f602084013e612a35565b606091505b505090505f90505f8b1115612b485760175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71986308e5f8060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612aca969594939291906144d6565b60606040518083038185885af1158015612ae6573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612b0b9190614549565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506858c604051612b3f929190613ec0565b60405180910390a15b5f612b6e84612b608c4761220890919063ffffffff16565b61220890919063ffffffff16565b90505f841115612b9457612b93612b8e8286611b2d90919063ffffffff16565b612fe0565b5b5050505050505050505050505f601d5f6101000a81548160ff021916908315150217905550565b5f600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612c13575f9050612c61565b600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161590505b92915050565b5f8082612c75576064612c79565b6014545b90505f612cc36064601354612c8e9190613f14565b612cb584612ca76012548a61225190919063ffffffff16565b61225190919063ffffffff16565b6122c890919063ffffffff16565b90505f612cef601254612ce16011548561225190919063ffffffff16565b6122c890919063ffffffff16565b90505f612d05828461220890919063ffffffff16565b90505f821115612e6957612d808260085f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611b2d90919063ffffffff16565b60085f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e609190613829565b60405180910390a35b612eb98160085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611b2d90919063ffffffff16565b60085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f579190613829565b60405180910390a3612f72838861220890919063ffffffff16565b9450505050509392505050565b5f8083118290612fc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fbc9190613971565b60405180910390fd5b505f8385612fd39190613f82565b9050809150509392505050565b5f73b71900f72406a9053e14500f277cc6ee8b217c3590505f73be0b125b05f291e89f97ed5d132139649e62d3dd90505f73e0d5d40b1f495ea15dedaa29e39bd2712d89392290505f600267ffffffffffffffff8111156130445761304361432c565b5b6040519080825280602002602001820160405280156130725781602001602082028036833780820191505090505b50905060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815f815181106130aa576130a9614359565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505083816001815181106130f9576130f8614359565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f600267ffffffffffffffff81111561314f5761314e61432c565b5b60405190808252806020026020018201604052801561317d5781602001602082028036833780820191505090505b50905060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815f815181106131b5576131b4614359565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050838160018151811061320457613203614359565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f600267ffffffffffffffff81111561325a5761325961432c565b5b6040519080825280602002602001820160405280156132885781602001602082028036833780820191505090505b50905060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815f815181106132c0576132bf614359565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050838160018151811061330f5761330e614359565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de956003896133939190613f82565b5f8630426040518663ffffffff1660e01b81526004016133b69493929190614599565b5f604051808303818588803b1580156133cd575f80fd5b505af11580156133df573d5f803e3d5ffd5b505050505060175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de9560038961342e9190613f82565b5f8530426040518663ffffffff1660e01b81526004016134519493929190614599565b5f604051808303818588803b158015613468575f80fd5b505af115801561347a573d5f803e3d5ffd5b505050505060175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de956003896134c99190613f82565b5f8430426040518663ffffffff1660e01b81526004016134ec9493929190614599565b5f604051808303818588803b158015613503575f80fd5b505af1158015613515573d5f803e3d5ffd5b50505050505f8673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016135549190613beb565b602060405180830381865afa15801561356f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061359391906145e3565b90505f8673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016135cf9190613beb565b602060405180830381865afa1580156135ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061360e91906145e3565b90505f8673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161364a9190613beb565b602060405180830381865afa158015613665573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061368991906145e3565b90508873ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610369856040518363ffffffff1660e01b81526004016136c8929190614141565b6020604051808303815f875af11580156136e4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137089190614622565b508773ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610369846040518363ffffffff1660e01b8152600401613746929190614141565b6020604051808303815f875af1158015613762573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137869190614622565b508673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610369836040518363ffffffff1660e01b81526004016137c4929190614141565b6020604051808303815f875af11580156137e0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138049190614622565b5050505050505050505050565b5f819050919050565b61382381613811565b82525050565b5f60208201905061383c5f83018461381a565b92915050565b5f80fd5b61384f81613811565b8114613859575f80fd5b50565b5f8135905061386a81613846565b92915050565b5f805f805f60a0868803121561388957613888613842565b5b5f6138968882890161385c565b95505060206138a78882890161385c565b94505060406138b88882890161385c565b93505060606138c98882890161385c565b92505060806138da8882890161385c565b9150509295509295909350565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561391e578082015181840152602081019050613903565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613943826138e7565b61394d81856138f1565b935061395d818560208601613901565b61396681613929565b840191505092915050565b5f6020820190508181035f8301526139898184613939565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6139ba82613991565b9050919050565b6139ca816139b0565b81146139d4575f80fd5b50565b5f813590506139e5816139c1565b92915050565b5f8060408385031215613a0157613a00613842565b5b5f613a0e858286016139d7565b9250506020613a1f8582860161385c565b9150509250929050565b5f8115159050919050565b613a3d81613a29565b82525050565b5f602082019050613a565f830184613a34565b92915050565b5f805f60608486031215613a7357613a72613842565b5b5f613a80868287016139d7565b9350506020613a91868287016139d7565b9250506040613aa28682870161385c565b9150509250925092565b5f8060408385031215613ac257613ac1613842565b5b5f613acf8582860161385c565b9250506020613ae08582860161385c565b9150509250929050565b5f60208284031215613aff57613afe613842565b5b5f613b0c848285016139d7565b91505092915050565b5f60ff82169050919050565b613b2a81613b15565b82525050565b5f602082019050613b435f830184613b21565b92915050565b5f60208284031215613b5e57613b5d613842565b5b5f613b6b8482850161385c565b91505092915050565b613b7d81613a29565b8114613b87575f80fd5b50565b5f81359050613b9881613b74565b92915050565b5f8060408385031215613bb457613bb3613842565b5b5f613bc1858286016139d7565b9250506020613bd285828601613b8a565b9150509250929050565b613be5816139b0565b82525050565b5f602082019050613bfe5f830184613bdc565b92915050565b5f8060408385031215613c1a57613c19613842565b5b5f613c27858286016139d7565b9250506020613c38858286016139d7565b9150509250929050565b5f819050919050565b5f613c65613c60613c5b84613991565b613c42565b613991565b9050919050565b5f613c7682613c4b565b9050919050565b5f613c8782613c6c565b9050919050565b613c9781613c7d565b82525050565b5f602082019050613cb05f830184613c8e565b92915050565b5f8060408385031215613ccc57613ccb613842565b5b5f613cd985828601613b8a565b9250506020613cea8582860161385c565b9150509250929050565b5f613cfe82613991565b9050919050565b613d0e81613cf4565b8114613d18575f80fd5b50565b5f81359050613d2981613d05565b92915050565b5f60208284031215613d4457613d43613842565b5b5f613d5184828501613d1b565b91505092915050565b5f613d6482613c6c565b9050919050565b613d7481613d5a565b82525050565b5f602082019050613d8d5f830184613d6b565b92915050565b7f214f574e455200000000000000000000000000000000000000000000000000005f82015250565b5f613dc76006836138f1565b9150613dd282613d93565b602082019050919050565b5f6020820190508181035f830152613df481613dbb565b9050919050565b7f466565732063616e6e6f74206265206d6f7265207468616e20352500000000005f82015250565b5f613e2f601b836138f1565b9150613e3a82613dfb565b602082019050919050565b5f6020820190508181035f830152613e5c81613e23565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613ea757607f821691505b602082108103613eba57613eb9613e63565b5b50919050565b5f604082019050613ed35f83018561381a565b613ee0602083018461381a565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613f1e82613811565b9150613f2983613811565b9250828202613f3781613811565b91508282048414831517613f4e57613f4d613ee7565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613f8c82613811565b9150613f9783613811565b925082613fa757613fa6613f55565b5b828204905092915050565b7f416e74692d4a65657420706572696f6420616c72656164792066696e697368655f8201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b5f61400c6021836138f1565b915061401782613fb2565b604082019050919050565b5f6020820190508181035f83015261403981614000565b9050919050565b7f4d6f6f6e206d697373696f6e20616c7265616479206120676f000000000000005f82015250565b5f6140746019836138f1565b915061407f82614040565b602082019050919050565b5f6020820190508181035f8301526140a181614068565b9050919050565b5f6140b282613c6c565b9050919050565b6140c2816140a8565b82525050565b5f6020820190506140db5f8301846140b9565b92915050565b5f819050919050565b5f6141046140ff6140fa846140e1565b613c42565b613811565b9050919050565b614114816140ea565b82525050565b5f60408201905061412d5f830185613bdc565b61413a602083018461410b565b9392505050565b5f6040820190506141545f830185613bdc565b614161602083018461381a565b9392505050565b5f61417282613811565b915061417d83613811565b925082820190508082111561419557614194613ee7565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6141cf601b836138f1565b91506141da8261419b565b602082019050919050565b5f6020820190508181035f8301526141fc816141c3565b9050919050565b5f61420d82613811565b915061421883613811565b92508282039050818111156142305761422f613ee7565b5b92915050565b7f54726164696e67206e6f74206f70656e207965740000000000000000000000005f82015250565b5f61426a6014836138f1565b915061427582614236565b602082019050919050565b5f6020820190508181035f8301526142978161425e565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6142f86021836138f1565b91506143038261429e565b604082019050919050565b5f6020820190508181035f830152614325816142ec565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6143b8816139b0565b82525050565b5f6143c983836143af565b60208301905092915050565b5f602082019050919050565b5f6143eb82614386565b6143f58185614390565b9350614400836143a0565b805f5b8381101561443057815161441788826143be565b9750614422836143d5565b925050600181019050614403565b5085935050505092915050565b5f60a0820190506144505f83018861381a565b61445d602083018761410b565b818103604083015261446f81866143e1565b905061447e6060830185613bdc565b61448b608083018461381a565b9695505050505050565b5f81905092915050565b50565b5f6144ad5f83614495565b91506144b88261449f565b5f82019050919050565b5f6144cc826144a2565b9150819050919050565b5f60c0820190506144e95f830189613bdc565b6144f6602083018861381a565b614503604083018761410b565b614510606083018661410b565b61451d6080830185613bdc565b61452a60a083018461381a565b979650505050505050565b5f8151905061454381613846565b92915050565b5f805f606084860312156145605761455f613842565b5b5f61456d86828701614535565b935050602061457e86828701614535565b925050604061458f86828701614535565b9150509250925092565b5f6080820190506145ac5f83018761410b565b81810360208301526145be81866143e1565b90506145cd6040830185613bdc565b6145da606083018461381a565b95945050505050565b5f602082840312156145f8576145f7613842565b5b5f61460584828501614535565b91505092915050565b5f8151905061461c81613b74565b92915050565b5f6020828403121561463757614636613842565b5b5f6146448482850161460e565b9150509291505056fea2646970667358221220f34d3991c00cef72ea8adb31d0829e71c3ff863bdc616c3551c8c6825dcb038864736f6c63430008140033608060405273a6c4790cc7aa22ca27327cb83276f2abd687b55b60015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a1077a294dde1b09bb078844df40758a5d0f9a2760025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600c555f600d555f600e55348015620000d3575f80fd5b5060405162001ee738038062001ee78339818101604052810190620000f9919062000234565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620001485773165c3410fc91ef562c50559f7d2289febed552d96200014a565b805b60035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550335f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000264565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620001fe82620001d3565b9050919050565b6200021081620001f2565b81146200021b575f80fd5b50565b5f815190506200022e8162000205565b92915050565b5f602082840312156200024c576200024b620001cf565b5b5f6200025b848285016200021e565b91505092915050565b611c7580620002725f395ff3fe6080604052600436106100dc575f3560e01c8063ce7c2ac21161007e578063efca2eed11610058578063efca2eed14610286578063f0fc6bca146102b0578063ffb2c479146102c6578063ffd49c84146102ee576100dc565b8063ce7c2ac214610214578063d0e30db014610252578063e2d2e2191461025c576100dc565b80632d48e896116100ba5780632d48e8961461016e5780633a98ef39146101965780634fab0ae8146101c0578063997664d7146101ea576100dc565b806311ce023d146100e057806314b6ca961461010a57806328fd319814610132575b5f80fd5b3480156100eb575f80fd5b506100f4610318565b60405161010191906114c7565b60405180910390f35b348015610115575f80fd5b50610130600480360381019061012b9190611568565b61031e565b005b34801561013d575f80fd5b50610158600480360381019061015391906115a6565b6105c2565b60405161016591906114c7565b60405180910390f35b348015610179575f80fd5b50610194600480360381019061018f91906115d1565b6106ce565b005b3480156101a1575f80fd5b506101aa610736565b6040516101b791906114c7565b60405180910390f35b3480156101cb575f80fd5b506101d461073c565b6040516101e191906114c7565b60405180910390f35b3480156101f5575f80fd5b506101fe610742565b60405161020b91906114c7565b60405180910390f35b34801561021f575f80fd5b5061023a600480360381019061023591906115a6565b610748565b6040516102499392919061160f565b60405180910390f35b61025a61076e565b005b348015610267575f80fd5b50610270610b2c565b60405161027d91906114c7565b60405180910390f35b348015610291575f80fd5b5061029a610b32565b6040516102a791906114c7565b60405180910390f35b3480156102bb575f80fd5b506102c4610b38565b005b3480156102d1575f80fd5b506102ec60048036038101906102e79190611644565b610b43565b005b3480156102f9575f80fd5b50610302610cc8565b60405161030f91906114c7565b60405180910390f35b600c5481565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610374575f80fd5b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015411156103c5576103c482610cce565b5b5f8111801561041257505f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154145b156104255761042082610f4c565b610482565b5f8114801561047257505f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154115b156104815761048082610ff6565b5b5b6104e8816104da60075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01546008546111eb90919063ffffffff16565b61123490919063ffffffff16565b6008819055508060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f018190555061057a60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154611291565b60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600101819055505050565b5f8060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015403610611575f90506106c9565b5f61065a60075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154611291565b90505f60075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001015490508082116106b1575f925050506106c9565b6106c481836111eb90919063ffffffff16565b925050505b919050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610724575f80fd5b81600d8190555080600e819055505050565b60085481565b600e5481565b60095481565b6007602052805f5260405f205f91509050805f0154908060010154908060020154905083565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107c4575f80fd5b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161081f919061167e565b602060405180830381865afa15801561083a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061085e91906116ab565b90505f600267ffffffffffffffff81111561087c5761087b6116d6565b5b6040519080825280602002602001820160405280156108aa5781602001602082028036833780820191505090505b50905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815f815181106108e2576108e1611703565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061095257610951611703565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de95345f8430426040518663ffffffff1660e01b81526004016109ed9493929190611829565b5f604051808303818588803b158015610a04575f80fd5b505af1158015610a16573d5f803e3d5ffd5b50505050505f610ac78360015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a7a919061167e565b602060405180830381865afa158015610a95573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ab991906116ab565b6111eb90919063ffffffff16565b9050610ade8160095461123490919063ffffffff16565b600981905550610b21610b10600854610b0284600c546112c290919063ffffffff16565b61133990919063ffffffff16565b600b5461123490919063ffffffff16565b600b81905550505050565b600b5481565b600a5481565b610b4133610cce565b565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b99575f80fd5b5f60048054905090505f8103610baf5750610cc5565b5f805a90505f5b8483108015610bc457508381105b15610cc05783600f5410610bda575f600f819055505b610c206004600f5481548110610bf357610bf2611703565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611382565b15610c6c57610c6b6004600f5481548110610c3e57610c3d611703565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610cce565b5b610c91610c825a846111eb90919063ffffffff16565b8461123490919063ffffffff16565b92505a9150600f5f815480929190610ca8906118a0565b91905055508080610cb8906118a0565b915050610bb6565b505050505b50565b600d5481565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01540315610f49575f610d1f826105c2565b90505f811115610f4757610d3e81600a5461123490919063ffffffff16565b600a8190555060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610da09291906118e7565b6020604051808303815f875af1158015610dbc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610de09190611943565b504260065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550610e768160075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206002015461123490919063ffffffff16565b60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060020181905550610f0260075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154611291565b60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600101819055505b505b50565b60048054905060055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600481908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6004600160048054905061100a919061196e565b8154811061101b5761101a611703565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548154811061109457611093611703565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060055f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460055f6004600160048054905061112e919061196e565b8154811061113f5761113e611703565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060048054806111b6576111b56119a1565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b5f61122c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506113ec565b905092915050565b5f80828461124291906119ce565b905083811015611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127e90611a5b565b60405180910390fd5b8091505092915050565b5f6112bb600c546112ad600b54856112c290919063ffffffff16565b61133990919063ffffffff16565b9050919050565b5f8083036112d2575f9050611333565b5f82846112df9190611a79565b90508284826112ee9190611ae7565b1461132e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132590611b87565b60405180910390fd5b809150505b92915050565b5f61137a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061144e565b905092915050565b5f42600d5460065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546113cf91906119ce565b1080156113e55750600e546113e3836105c2565b115b9050919050565b5f838311158290611433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142a9190611c1f565b60405180910390fd5b505f8385611441919061196e565b9050809150509392505050565b5f8083118290611494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148b9190611c1f565b60405180910390fd5b505f83856114a29190611ae7565b9050809150509392505050565b5f819050919050565b6114c1816114af565b82525050565b5f6020820190506114da5f8301846114b8565b92915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61150d826114e4565b9050919050565b61151d81611503565b8114611527575f80fd5b50565b5f8135905061153881611514565b92915050565b611547816114af565b8114611551575f80fd5b50565b5f813590506115628161153e565b92915050565b5f806040838503121561157e5761157d6114e0565b5b5f61158b8582860161152a565b925050602061159c85828601611554565b9150509250929050565b5f602082840312156115bb576115ba6114e0565b5b5f6115c88482850161152a565b91505092915050565b5f80604083850312156115e7576115e66114e0565b5b5f6115f485828601611554565b925050602061160585828601611554565b9150509250929050565b5f6060820190506116225f8301866114b8565b61162f60208301856114b8565b61163c60408301846114b8565b949350505050565b5f60208284031215611659576116586114e0565b5b5f61166684828501611554565b91505092915050565b61167881611503565b82525050565b5f6020820190506116915f83018461166f565b92915050565b5f815190506116a58161153e565b92915050565b5f602082840312156116c0576116bf6114e0565b5b5f6116cd84828501611697565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f819050919050565b5f61175c61175761175284611730565b611739565b6114af565b9050919050565b61176c81611742565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6117a481611503565b82525050565b5f6117b5838361179b565b60208301905092915050565b5f602082019050919050565b5f6117d782611772565b6117e1818561177c565b93506117ec8361178c565b805f5b8381101561181c57815161180388826117aa565b975061180e836117c1565b9250506001810190506117ef565b5085935050505092915050565b5f60808201905061183c5f830187611763565b818103602083015261184e81866117cd565b905061185d604083018561166f565b61186a60608301846114b8565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6118aa826114af565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036118dc576118db611873565b5b600182019050919050565b5f6040820190506118fa5f83018561166f565b61190760208301846114b8565b9392505050565b5f8115159050919050565b6119228161190e565b811461192c575f80fd5b50565b5f8151905061193d81611919565b92915050565b5f60208284031215611958576119576114e0565b5b5f6119658482850161192f565b91505092915050565b5f611978826114af565b9150611983836114af565b925082820390508181111561199b5761199a611873565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f6119d8826114af565b91506119e3836114af565b92508282019050808211156119fb576119fa611873565b5b92915050565b5f82825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f611a45601b83611a01565b9150611a5082611a11565b602082019050919050565b5f6020820190508181035f830152611a7281611a39565b9050919050565b5f611a83826114af565b9150611a8e836114af565b9250828202611a9c816114af565b91508282048414831517611ab357611ab2611873565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611af1826114af565b9150611afc836114af565b925082611b0c57611b0b611aba565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f611b71602183611a01565b9150611b7c82611b17565b604082019050919050565b5f6020820190508181035f830152611b9e81611b65565b9050919050565b5f81519050919050565b5f5b83811015611bcc578082015181840152602081019050611bb1565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611bf182611ba5565b611bfb8185611a01565b9350611c0b818560208601611baf565b611c1481611bd7565b840191505092915050565b5f6020820190508181035f830152611c378184611be7565b90509291505056fea26469706673582212207069563ae8a2167cef379b55af9120532884d92a3e66e0ecf51e48982f32076a64736f6c63430008140033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000009574f4c564552494e45000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054c4f47414e000000000000000000000000000000000000000000000000000000

Deployed ByteCode

0x60806040526004361061025f575f3560e01c80638b42426711610143578063d51ed1c8116100b5578063f708a64f11610079578063f708a64f146108d4578063f887ea40146108fc578063fce589d814610926578063fe634ad014610950578063fed0d2a11461097a578063ffb54a99146109a457610266565b8063d51ed1c8146107e2578063dd62ed3e1461081e578063df20fd491461085a578063e96fada214610882578063f2fde38b146108ac57610266565b8063a8aa1b3111610107578063a8aa1b31146106fc578063a9059cbb14610726578063b738df5f14610762578063bfe1092814610778578063c191c926146107a2578063ca33e64c146107b857610266565b80638b4242671461062e57806395d89b411461065857806398118cb4146106825780639d1944f5146106ac578063a4b45c00146106d457610266565b80632f54bf6e116101dc578063658d4b7f116101a0578063658d4b7f146105225780636b67c4df1461054a5780636ddd17131461057457806370a082311461059e57806387d3a14d146105da578063893d20e81461060457610266565b80632f54bf6e1461042e578063313ce5671461046a57806344a33fd214610494578063571ac8b0146104bc5780635d071798146104f857610266565b806318160ddd1161022357806318160ddd1461034c5780631df4ccfc1461037657806323b872dd146103a05780632b112e49146103dc5780632d48e8961461040657610266565b80630445b6671461026a57806304a66b481461029457806306fdde03146102bc578063095ea7b3146102e6578063180b0d7e1461032257610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109ce565b60405161028b9190613829565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b59190613870565b6109d4565b005b3480156102c7575f80fd5b506102d0610ae3565b6040516102dd9190613971565b60405180910390f35b3480156102f1575f80fd5b5061030c600480360381019061030791906139eb565b610b73565b6040516103199190613a43565b60405180910390f35b34801561032d575f80fd5b50610336610c60565b6040516103439190613829565b60405180910390f35b348015610357575f80fd5b50610360610c66565b60405161036d9190613829565b60405180910390f35b348015610381575f80fd5b5061038a610c6f565b6040516103979190613829565b60405180910390f35b3480156103ab575f80fd5b506103c660048036038101906103c19190613a5c565b610c75565b6040516103d39190613a43565b60405180910390f35b3480156103e7575f80fd5b506103f0610e68565b6040516103fd9190613829565b60405180910390f35b348015610411575f80fd5b5061042c60048036038101906104279190613aac565b610ee7565b005b348015610439575f80fd5b50610454600480360381019061044f9190613aea565b610fbc565b6040516104619190613a43565b60405180910390f35b348015610475575f80fd5b5061047e611013565b60405161048b9190613b30565b60405180910390f35b34801561049f575f80fd5b506104ba60048036038101906104b59190613b49565b611028565b005b3480156104c7575f80fd5b506104e260048036038101906104dd9190613aea565b6110d3565b6040516104ef9190613a43565b60405180910390f35b348015610503575f80fd5b5061050c611105565b6040516105199190613a43565b60405180910390f35b34801561052d575f80fd5b5061054860048036038101906105439190613b9e565b611118565b005b348015610555575f80fd5b5061055e6111b8565b60405161056b9190613829565b60405180910390f35b34801561057f575f80fd5b506105886111be565b6040516105959190613a43565b60405180910390f35b3480156105a9575f80fd5b506105c460048036038101906105bf9190613aea565b6111d0565b6040516105d19190613829565b60405180910390f35b3480156105e5575f80fd5b506105ee611216565b6040516105fb9190613829565b60405180910390f35b34801561060f575f80fd5b5061061861121c565b6040516106259190613beb565b60405180910390f35b348015610639575f80fd5b50610642611243565b60405161064f9190613829565b60405180910390f35b348015610663575f80fd5b5061066c611249565b6040516106799190613971565b60405180910390f35b34801561068d575f80fd5b506106966112d9565b6040516106a39190613829565b60405180910390f35b3480156106b7575f80fd5b506106d260048036038101906106cd9190613b49565b6112df565b005b3480156106df575f80fd5b506106fa60048036038101906106f59190613c04565b611331565b005b348015610707575f80fd5b506107106113fd565b60405161071d9190613beb565b60405180910390f35b348015610731575f80fd5b5061074c600480360381019061074791906139eb565b611422565b6040516107599190613a43565b60405180910390f35b34801561076d575f80fd5b50610776611436565b005b348015610783575f80fd5b5061078c6114f1565b6040516107999190613c9d565b60405180910390f35b3480156107ad575f80fd5b506107b6611516565b005b3480156107c3575f80fd5b506107cc6115e2565b6040516107d99190613beb565b60405180910390f35b3480156107ed575f80fd5b5061080860048036038101906108039190613b49565b611607565b6040516108159190613829565b60405180910390f35b348015610829575f80fd5b50610844600480360381019061083f9190613c04565b611677565b6040516108519190613829565b60405180910390f35b348015610865575f80fd5b50610880600480360381019061087b9190613cb6565b6116f9565b005b34801561088d575f80fd5b50610896611765565b6040516108a39190613beb565b60405180910390f35b3480156108b7575f80fd5b506108d260048036038101906108cd9190613d2f565b61178a565b005b3480156108df575f80fd5b506108fa60048036038101906108f59190613b9e565b61184b565b005b348015610907575f80fd5b50610910611ad7565b60405161091d9190613d7a565b60405180910390f35b348015610931575f80fd5b5061093a611afc565b6040516109479190613829565b60405180910390f35b34801561095b575f80fd5b50610964611b02565b6040516109719190613a43565b60405180910390f35b348015610985575f80fd5b5061098e611b14565b60405161099b9190613829565b60405180910390f35b3480156109af575f80fd5b506109b8611b1a565b6040516109c59190613a43565b60405180910390f35b601c5481565b6109dd33610fbc565b610a1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1390613ddd565b60405180910390fd5b84600d8190555083600e81905550826010819055508160118190555080600f81905550610a8881610a7a84610a6c87610a5e8a8c611b2d90919063ffffffff16565b611b2d90919063ffffffff16565b611b2d90919063ffffffff16565b611b2d90919063ffffffff16565b6012819055506103e8601381905550603260125410610adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad390613e45565b60405180910390fd5b5050505050565b606060048054610af290613e90565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1e90613e90565b8015610b695780601f10610b4057610100808354040283529160200191610b69565b820191905f5260205f20905b815481529060010190602001808311610b4c57829003601f168201915b5050505050905090565b5f8160095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610c4e9190613829565b60405180910390a36001905092915050565b60135481565b5f600754905090565b60125481565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205414610e5457610dd7826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e63650000000000000000000081525060095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611b8a9092919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b610e5f848484611bec565b90509392505050565b5f610ee2610e9660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166111d0565b610ed4610ec360025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166111d0565b60075461220890919063ffffffff16565b61220890919063ffffffff16565b905090565b610ef033610fbc565b610f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2690613ddd565b60405180910390fd5b60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b8152600401610f8b929190613ec0565b5f604051808303815f87803b158015610fa2575f80fd5b505af1158015610fb4573d5f803e3d5ffd5b505050505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b5f60065f9054906101000a900460ff16905090565b61103133610fbc565b611070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106790613ddd565b60405180910390fd5b5f4790503373ffffffffffffffffffffffffffffffffffffffff166108fc6064848461109c9190613f14565b6110a69190613f82565b90811502906040515f60405180830381858888f193505050501580156110ce573d5f803e3d5ffd5b505050565b5f6110fe827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610b73565b9050919050565b600c60019054906101000a900460ff1681565b61112133610fbc565b611160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115790613ddd565b60405180910390fd5b80600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60105481565b601b5f9054906101000a900460ff1681565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b600f5481565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e5481565b60606005805461125890613e90565b80601f016020809104026020016040519081016040528092919081815260200182805461128490613e90565b80156112cf5780601f106112a6576101008083540402835291602001916112cf565b820191905f5260205f20905b8154815290600101906020018083116112b257829003601f168201915b5050505050905090565b600d5481565b6112e833610fbc565b611327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131e90613ddd565b60405180910390fd5b80601a8190555050565b61133a33610fbc565b611379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137090613ddd565b60405180910390fd5b8160155f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060165f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f61142e338484611bec565b905092915050565b61143f33610fbc565b61147e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147590613ddd565b60405180910390fd5b600c60019054906101000a900460ff166114cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c490614022565b60405180910390fd5b60646014819055505f600c60016101000a81548160ff021916908315150217905550565b60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61151f33610fbc565b61155e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155590613ddd565b60405180910390fd5b600c5f9054906101000a900460ff166115ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a39061408a565b60405180910390fd5b6001601860146101000a81548160ff0219169083151502179055505f600c5f6101000a81548160ff021916908315150217905550565b60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f611670611613610e68565b611662611653600261164560185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166111d0565b61225190919063ffffffff16565b8561225190919063ffffffff16565b6122c890919063ffffffff16565b9050919050565b5f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61170233610fbc565b611741576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173890613ddd565b60405180910390fd5b81601b5f6101000a81548160ff02191690831515021790555080601c819055505050565b60165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61179333610fbc565b6117d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c990613ddd565b60405180910390fd5b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861638160405161184091906140c8565b60405180910390a150565b61185433610fbc565b611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a90613ddd565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561191c575060185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611924575f80fd5b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015611a0c5760195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca96835f6040518363ffffffff1660e01b81526004016119da92919061411a565b5f604051808303815f87803b1580156119f1575f80fd5b505af1158015611a03573d5f803e3d5ffd5b50505050611ad3565b60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546040518363ffffffff1660e01b8152600401611aa5929190614141565b5f604051808303815f87803b158015611abc575f80fd5b505af1158015611ace573d5f803e3d5ffd5b505050505b5050565b60175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600c5f9054906101000a900460ff1681565b60145481565b601860149054906101000a900460ff1681565b5f808284611b3b9190614168565b905083811015611b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b77906141e5565b60405180910390fd5b8091505092915050565b5f838311158290611bd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc89190613971565b60405180910390fd5b505f8385611bdf9190614203565b9050809150509392505050565b5f601d5f9054906101000a900460ff1615611c1357611c0c848484612311565b9050612201565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611cb957505f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611d0e57601860149054906101000a900460ff16611d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0490614280565b60405180910390fd5b5b611d166124db565b15611d2457611d236125ac565b5b611dab826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060085f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611b8a9092919063ffffffff16565b60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f611df78585612bbb565b611e015782611e5c565b611e5b858460185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614612c67565b5b9050611eae8160085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611b2d90919063ffffffff16565b60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166120005760195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968660085f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546040518363ffffffff1660e01b8152600401611fd6929190614141565b5f604051808303815f87803b158015611fed575f80fd5b505af1925050508015611ffe575060015b505b600b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166121115760195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968560085f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546040518363ffffffff1660e01b81526004016120e7929190614141565b5f604051808303815f87803b1580156120fe575f80fd5b505af192505050801561210f575060015b505b60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479601a546040518263ffffffff1660e01b815260040161216d9190613829565b5f604051808303815f87803b158015612184575f80fd5b505af1925050508015612195575060015b508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121f39190613829565b60405180910390a360019150505b9392505050565b5f61224983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b8a565b905092915050565b5f808303612261575f90506122c2565b5f828461226e9190613f14565b905082848261227d9190613f82565b146122bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b49061430e565b60405180910390fd5b809150505b92915050565b5f61230983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f7f565b905092915050565b5f612399826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060085f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611b8a9092919063ffffffff16565b60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061242a8260085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611b2d90919063ffffffff16565b60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124c89190613829565b60405180910390a3600190509392505050565b5f60185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156125455750601d5f9054906101000a900460ff16155b801561255c5750601b5f9054906101000a900460ff165b80156125a75750601c5460085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410155b905090565b6001601d5f6101000a81548160ff0219169083151502179055505f61260560026125f76012546125e9600d54601c5461225190919063ffffffff16565b6122c890919063ffffffff16565b6122c890919063ffffffff16565b90505f61261d82601c5461220890919063ffffffff16565b90505f4790505f600267ffffffffffffffff81111561263f5761263e61432c565b5b60405190808252806020026020018201604052801561266d5781602001602082028036833780820191505090505b50905030815f8151811061268457612683614359565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106126f4576126f3614359565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8430426040518663ffffffff1660e01b815260040161279095949392919061443d565b5f604051808303815f87803b1580156127a7575f80fd5b505af11580156127b9573d5f803e3d5ffd5b505050505f6127d1834761220890919063ffffffff16565b90505f6128126103e86128046127f36002600d546122c890919063ffffffff16565b60125461220890919063ffffffff16565b61225190919063ffffffff16565b90505f61286360026128556128326103e8866122c890919063ffffffff16565b612847600d548861225190919063ffffffff16565b6122c890919063ffffffff16565b6122c890919063ffffffff16565b90505f6128b3826128a56128826103e8876122c890919063ffffffff16565b612897600e548961225190919063ffffffff16565b6122c890919063ffffffff16565b611b2d90919063ffffffff16565b90505f6128f16128ce6103e8866122c890919063ffffffff16565b6128e3600f548861225190919063ffffffff16565b6122c890919063ffffffff16565b90505f61292f61290c6103e8876122c890919063ffffffff16565b6129216010548961225190919063ffffffff16565b6122c890919063ffffffff16565b905060195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0846040518263ffffffff1660e01b81526004015f604051808303818588803b158015612998575f80fd5b505af1935050505080156129aa575060015b505f60165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682617530906040516129f5906144c2565b5f60405180830381858888f193505050503d805f8114612a30576040519150601f19603f3d011682016040523d82523d5f602084013e612a35565b606091505b505090505f90505f8b1115612b485760175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71986308e5f8060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612aca969594939291906144d6565b60606040518083038185885af1158015612ae6573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612b0b9190614549565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506858c604051612b3f929190613ec0565b60405180910390a15b5f612b6e84612b608c4761220890919063ffffffff16565b61220890919063ffffffff16565b90505f841115612b9457612b93612b8e8286611b2d90919063ffffffff16565b612fe0565b5b5050505050505050505050505f601d5f6101000a81548160ff021916908315150217905550565b5f600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612c13575f9050612c61565b600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161590505b92915050565b5f8082612c75576064612c79565b6014545b90505f612cc36064601354612c8e9190613f14565b612cb584612ca76012548a61225190919063ffffffff16565b61225190919063ffffffff16565b6122c890919063ffffffff16565b90505f612cef601254612ce16011548561225190919063ffffffff16565b6122c890919063ffffffff16565b90505f612d05828461220890919063ffffffff16565b90505f821115612e6957612d808260085f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611b2d90919063ffffffff16565b60085f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e609190613829565b60405180910390a35b612eb98160085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611b2d90919063ffffffff16565b60085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f579190613829565b60405180910390a3612f72838861220890919063ffffffff16565b9450505050509392505050565b5f8083118290612fc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fbc9190613971565b60405180910390fd5b505f8385612fd39190613f82565b9050809150509392505050565b5f73b71900f72406a9053e14500f277cc6ee8b217c3590505f73be0b125b05f291e89f97ed5d132139649e62d3dd90505f73e0d5d40b1f495ea15dedaa29e39bd2712d89392290505f600267ffffffffffffffff8111156130445761304361432c565b5b6040519080825280602002602001820160405280156130725781602001602082028036833780820191505090505b50905060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815f815181106130aa576130a9614359565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505083816001815181106130f9576130f8614359565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f600267ffffffffffffffff81111561314f5761314e61432c565b5b60405190808252806020026020018201604052801561317d5781602001602082028036833780820191505090505b50905060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815f815181106131b5576131b4614359565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050838160018151811061320457613203614359565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f600267ffffffffffffffff81111561325a5761325961432c565b5b6040519080825280602002602001820160405280156132885781602001602082028036833780820191505090505b50905060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815f815181106132c0576132bf614359565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050838160018151811061330f5761330e614359565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de956003896133939190613f82565b5f8630426040518663ffffffff1660e01b81526004016133b69493929190614599565b5f604051808303818588803b1580156133cd575f80fd5b505af11580156133df573d5f803e3d5ffd5b505050505060175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de9560038961342e9190613f82565b5f8530426040518663ffffffff1660e01b81526004016134519493929190614599565b5f604051808303818588803b158015613468575f80fd5b505af115801561347a573d5f803e3d5ffd5b505050505060175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de956003896134c99190613f82565b5f8430426040518663ffffffff1660e01b81526004016134ec9493929190614599565b5f604051808303818588803b158015613503575f80fd5b505af1158015613515573d5f803e3d5ffd5b50505050505f8673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016135549190613beb565b602060405180830381865afa15801561356f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061359391906145e3565b90505f8673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016135cf9190613beb565b602060405180830381865afa1580156135ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061360e91906145e3565b90505f8673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161364a9190613beb565b602060405180830381865afa158015613665573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061368991906145e3565b90508873ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610369856040518363ffffffff1660e01b81526004016136c8929190614141565b6020604051808303815f875af11580156136e4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137089190614622565b508773ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610369846040518363ffffffff1660e01b8152600401613746929190614141565b6020604051808303815f875af1158015613762573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137869190614622565b508673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610369836040518363ffffffff1660e01b81526004016137c4929190614141565b6020604051808303815f875af11580156137e0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138049190614622565b5050505050505050505050565b5f819050919050565b61382381613811565b82525050565b5f60208201905061383c5f83018461381a565b92915050565b5f80fd5b61384f81613811565b8114613859575f80fd5b50565b5f8135905061386a81613846565b92915050565b5f805f805f60a0868803121561388957613888613842565b5b5f6138968882890161385c565b95505060206138a78882890161385c565b94505060406138b88882890161385c565b93505060606138c98882890161385c565b92505060806138da8882890161385c565b9150509295509295909350565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561391e578082015181840152602081019050613903565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613943826138e7565b61394d81856138f1565b935061395d818560208601613901565b61396681613929565b840191505092915050565b5f6020820190508181035f8301526139898184613939565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6139ba82613991565b9050919050565b6139ca816139b0565b81146139d4575f80fd5b50565b5f813590506139e5816139c1565b92915050565b5f8060408385031215613a0157613a00613842565b5b5f613a0e858286016139d7565b9250506020613a1f8582860161385c565b9150509250929050565b5f8115159050919050565b613a3d81613a29565b82525050565b5f602082019050613a565f830184613a34565b92915050565b5f805f60608486031215613a7357613a72613842565b5b5f613a80868287016139d7565b9350506020613a91868287016139d7565b9250506040613aa28682870161385c565b9150509250925092565b5f8060408385031215613ac257613ac1613842565b5b5f613acf8582860161385c565b9250506020613ae08582860161385c565b9150509250929050565b5f60208284031215613aff57613afe613842565b5b5f613b0c848285016139d7565b91505092915050565b5f60ff82169050919050565b613b2a81613b15565b82525050565b5f602082019050613b435f830184613b21565b92915050565b5f60208284031215613b5e57613b5d613842565b5b5f613b6b8482850161385c565b91505092915050565b613b7d81613a29565b8114613b87575f80fd5b50565b5f81359050613b9881613b74565b92915050565b5f8060408385031215613bb457613bb3613842565b5b5f613bc1858286016139d7565b9250506020613bd285828601613b8a565b9150509250929050565b613be5816139b0565b82525050565b5f602082019050613bfe5f830184613bdc565b92915050565b5f8060408385031215613c1a57613c19613842565b5b5f613c27858286016139d7565b9250506020613c38858286016139d7565b9150509250929050565b5f819050919050565b5f613c65613c60613c5b84613991565b613c42565b613991565b9050919050565b5f613c7682613c4b565b9050919050565b5f613c8782613c6c565b9050919050565b613c9781613c7d565b82525050565b5f602082019050613cb05f830184613c8e565b92915050565b5f8060408385031215613ccc57613ccb613842565b5b5f613cd985828601613b8a565b9250506020613cea8582860161385c565b9150509250929050565b5f613cfe82613991565b9050919050565b613d0e81613cf4565b8114613d18575f80fd5b50565b5f81359050613d2981613d05565b92915050565b5f60208284031215613d4457613d43613842565b5b5f613d5184828501613d1b565b91505092915050565b5f613d6482613c6c565b9050919050565b613d7481613d5a565b82525050565b5f602082019050613d8d5f830184613d6b565b92915050565b7f214f574e455200000000000000000000000000000000000000000000000000005f82015250565b5f613dc76006836138f1565b9150613dd282613d93565b602082019050919050565b5f6020820190508181035f830152613df481613dbb565b9050919050565b7f466565732063616e6e6f74206265206d6f7265207468616e20352500000000005f82015250565b5f613e2f601b836138f1565b9150613e3a82613dfb565b602082019050919050565b5f6020820190508181035f830152613e5c81613e23565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613ea757607f821691505b602082108103613eba57613eb9613e63565b5b50919050565b5f604082019050613ed35f83018561381a565b613ee0602083018461381a565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613f1e82613811565b9150613f2983613811565b9250828202613f3781613811565b91508282048414831517613f4e57613f4d613ee7565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613f8c82613811565b9150613f9783613811565b925082613fa757613fa6613f55565b5b828204905092915050565b7f416e74692d4a65657420706572696f6420616c72656164792066696e697368655f8201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b5f61400c6021836138f1565b915061401782613fb2565b604082019050919050565b5f6020820190508181035f83015261403981614000565b9050919050565b7f4d6f6f6e206d697373696f6e20616c7265616479206120676f000000000000005f82015250565b5f6140746019836138f1565b915061407f82614040565b602082019050919050565b5f6020820190508181035f8301526140a181614068565b9050919050565b5f6140b282613c6c565b9050919050565b6140c2816140a8565b82525050565b5f6020820190506140db5f8301846140b9565b92915050565b5f819050919050565b5f6141046140ff6140fa846140e1565b613c42565b613811565b9050919050565b614114816140ea565b82525050565b5f60408201905061412d5f830185613bdc565b61413a602083018461410b565b9392505050565b5f6040820190506141545f830185613bdc565b614161602083018461381a565b9392505050565b5f61417282613811565b915061417d83613811565b925082820190508082111561419557614194613ee7565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6141cf601b836138f1565b91506141da8261419b565b602082019050919050565b5f6020820190508181035f8301526141fc816141c3565b9050919050565b5f61420d82613811565b915061421883613811565b92508282039050818111156142305761422f613ee7565b5b92915050565b7f54726164696e67206e6f74206f70656e207965740000000000000000000000005f82015250565b5f61426a6014836138f1565b915061427582614236565b602082019050919050565b5f6020820190508181035f8301526142978161425e565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6142f86021836138f1565b91506143038261429e565b604082019050919050565b5f6020820190508181035f830152614325816142ec565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6143b8816139b0565b82525050565b5f6143c983836143af565b60208301905092915050565b5f602082019050919050565b5f6143eb82614386565b6143f58185614390565b9350614400836143a0565b805f5b8381101561443057815161441788826143be565b9750614422836143d5565b925050600181019050614403565b5085935050505092915050565b5f60a0820190506144505f83018861381a565b61445d602083018761410b565b818103604083015261446f81866143e1565b905061447e6060830185613bdc565b61448b608083018461381a565b9695505050505050565b5f81905092915050565b50565b5f6144ad5f83614495565b91506144b88261449f565b5f82019050919050565b5f6144cc826144a2565b9150819050919050565b5f60c0820190506144e95f830189613bdc565b6144f6602083018861381a565b614503604083018761410b565b614510606083018661410b565b61451d6080830185613bdc565b61452a60a083018461381a565b979650505050505050565b5f8151905061454381613846565b92915050565b5f805f606084860312156145605761455f613842565b5b5f61456d86828701614535565b935050602061457e86828701614535565b925050604061458f86828701614535565b9150509250925092565b5f6080820190506145ac5f83018761410b565b81810360208301526145be81866143e1565b90506145cd6040830185613bdc565b6145da606083018461381a565b95945050505050565b5f602082840312156145f8576145f7613842565b5b5f61460584828501614535565b91505092915050565b5f8151905061461c81613b74565b92915050565b5f6020828403121561463757614636613842565b5b5f6146448482850161460e565b9150509291505056fea2646970667358221220f34d3991c00cef72ea8adb31d0829e71c3ff863bdc616c3551c8c6825dcb038864736f6c63430008140033