ETH Price: $3,602.26 (+5.14%)

Token

Fomo2Moon (F2M)
 

Overview

Max Total Supply

54,060.1972111021 F2M

Holders

9,278

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 10 Decimals)

Balance
0.000000001 F2M

Value
$0.00
0x5ab0098795ea085bba835d3bd6fa4c4315238338
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Fomo2Moon (F2M) is initially inspired by the Mega-Popular Mega Millions and highly Advanced implementation of Blockchain Lottery that is built for Balanced Benefits, Sustainability, Maximum Excitement.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
F2m

Compiler Version
v0.4.25+commit.59dbf8f1

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-01-12
*/

pragma solidity ^0.4.24;

/*
*   gibmireinbier
*   0xA4a799086aE18D7db6C4b57f496B081b44888888
*   [email protected]
*/

interface WhitelistInterface {
    function joinNetwork(address[6] _contract) public;
    function isLimited(address _address, uint256 _invested) public view returns(bool);
}

interface NewTokenInterface {
    function swapToken(uint256 _amount, address _invester) public payable;
}

interface BankInterface {
    function joinNetwork(address[6] _contract) public;
    // Core functions
    function pushToBank(address _player) public payable;
}


interface DevTeamInterface {
    function setF2mAddress(address _address) public;
    function setLotteryAddress(address _address) public;
    function setCitizenAddress(address _address) public;
    function setBankAddress(address _address) public;
    function setRewardAddress(address _address) public;
    function setWhitelistAddress(address _address) public;

    function setupNetwork() public;
}

interface LotteryInterface {
    function joinNetwork(address[6] _contract) public;
    // call one time
    function activeFirstRound() public;
    // Core Functions
    function pushToPot() public payable;
    function finalizeable() public view returns(bool);
    // bounty
    function finalize() public;
    function buy(string _sSalt) public payable;
    function buyFor(string _sSalt, address _sender) public payable;
    //function withdraw() public;
    function withdrawFor(address _sender) public returns(uint256);

    function getRewardBalance(address _buyer) public view returns(uint256);
    function getTotalPot() public view returns(uint256);
    // EarlyIncome
    function getEarlyIncomeByAddress(address _buyer) public view returns(uint256);
    // included claimed amount
    // function getEarlyIncomeByAddressRound(address _buyer, uint256 _rId) public view returns(uint256);
    function getCurEarlyIncomeByAddress(address _buyer) public view returns(uint256);
    // function getCurEarlyIncomeByAddressRound(address _buyer, uint256 _rId) public view returns(uint256);
    function getCurRoundId() public view returns(uint256);
    // set endRound, prepare to upgrade new version
    function setLastRound(uint256 _lastRoundId) public;
    function getPInvestedSumByRound(uint256 _rId, address _buyer) public view returns(uint256);
    function cashoutable(address _address) public view returns(bool);
    function isLastRound() public view returns(bool);
}
interface CitizenInterface {
 
    function joinNetwork(address[6] _contract) public;
    /*----------  ADMINISTRATOR ONLY FUNCTIONS  ----------*/
    function devTeamWithdraw() public;

    /*----------  WRITE FUNCTIONS  ----------*/
    function updateUsername(string _sNewUsername) public;
    //Sources: Token contract, DApps
    function pushRefIncome(address _sender) public payable;
    function withdrawFor(address _sender) public payable returns(uint256);
    function devTeamReinvest() public returns(uint256);

    /*----------  READ FUNCTIONS  ----------*/
    function getRefWallet(address _address) public view returns(uint256);
}
/**
 * @title SafeMath
 * @dev Math operations with safety checks that revert on error
 */
library SafeMath {
    int256 constant private INT256_MIN = -2**255;

    /**
    * @dev Multiplies two unsigned integers, reverts on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b);

        return c;
    }

    /**
    * @dev Multiplies two signed integers, reverts on overflow.
    */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        require(!(a == -1 && b == INT256_MIN)); // This is the only case of overflow not detected by the check below

        int256 c = a * b;
        require(c / a == b);

        return c;
    }

    /**
    * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
    * @dev Integer division of two signed integers truncating the quotient, reverts on division by zero.
    */
    function div(int256 a, int256 b) internal pure returns (int256) {
        require(b != 0); // Solidity only automatically asserts when dividing by 0
        require(!(b == -1 && a == INT256_MIN)); // This is the only case of overflow

        int256 c = a / b;

        return c;
    }

    /**
    * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        uint256 c = a - b;

        return c;
    }

    /**
    * @dev Subtracts two signed integers, reverts on overflow.
    */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));

        return c;
    }

    /**
    * @dev Adds two unsigned integers, reverts on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);

        return c;
    }

    /**
    * @dev Adds two signed integers, reverts on overflow.
    */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));

        return c;
    }

    /**
    * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),
    * reverts when dividing by zero.
    */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0);
        return a % b;
    }
}
contract F2m{
    using SafeMath for *;

    // only token holder

    modifier onlyTokenHolders() {
        require(balances[msg.sender] > 0, "not own any token");
        _;
    }
    
    modifier onlyAdmin(){
        require(msg.sender == devTeam, "admin required");
        _;
    }

    modifier withdrawRight(){
        require((msg.sender == address(bankContract)), "Bank Only");
        _;
    }

    modifier swapNotActived() {
        require(swapActived == false, "swap actived, stop minting new tokens");
        _;
    }

    modifier buyable() {
        require(buyActived == true, "token sale not ready");
        _;
    }
    
    /*==============================
    =            EVENTS            =
    ==============================*/  
    // ERC20
    event Transfer(address indexed from, address indexed to, uint tokens);
    event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
    
    /*=====================================
    =                 ERC20               =
    =====================================*/
    uint256 public totalSupply;  
    string public name;  
    string public symbol;  
    uint32 public decimals;
    uint256 public unitRate;
    // Balances for each account
    mapping(address => uint256) balances;
 
    // Owner of account approves the transfer of an amount to another account
    mapping(address => mapping (address => uint256)) allowed;
    
   /*================================
    =            DATASETS            =
    ================================*/
    CitizenInterface public citizenContract;
    LotteryInterface public lotteryContract;
    BankInterface public bankContract;
    NewTokenInterface public newTokenContract;
    WhitelistInterface public whitelistContract;

    uint256 constant public ONE_HOUR= 3600;
    uint256 constant public ONE_DAY = 24 * ONE_HOUR; // seconds
    uint256 constant public FIRST_POT_MAXIMUM = 360 ether; // 800 * 45%
    uint256 constant public ROUND0_MIN_DURATION = ONE_DAY; // minimum
    uint256 constant public SWAP_DURATION = 30 * ONE_DAY;
    uint256 constant public BEFORE_SLEEP_DURAION = 7 * ONE_DAY;

    uint256 public HARD_TOTAL_SUPPLY = 8000000;

    uint256 constant public refPercent = 15;
    uint256 constant public divPercent = 10;
    uint256 constant public fundPercent = 2;

    //Start Price
    uint256 constant public startPrice = 0.002 ether;
    //Most Tolerable Break-Even Period (MTBEP)
    uint256 constant public BEP = 30;

    uint256 public potPercent = 45; // set to 0 in func disableRound0()

    // amount of shares for each address (scaled number)
    mapping(address => int256) public credit;
    mapping(address => uint256) public withdrawnAmount;
    mapping(address => uint256) public fromSellingAmount;

    mapping(address => uint256) public lastActiveDay;
    mapping(address => int256) public todayCredit;

    mapping(address => uint256) public pInvestedSum;

    uint256 public investedAmount;
    uint256 public totalBuyVolume;
    uint256 public totalSellVolume;
    uint256 public totalDividends;
    mapping(uint256 => uint256) public totalDividendsByRound;

    //Profit Per Share 
    uint256 public pps = 0;

    //log by round
    mapping(uint256 => uint256) rPps;
    mapping(address => mapping (uint256 => int256)) rCredit; 

    uint256 public deployedTime;
    uint256 public deployedDay;

    // on/off auto buy Token
    bool public autoBuy;

    bool public round0 = true; //raise for first round

    //pps added in day
    mapping(uint256 => uint256) public ppsInDay; //Avarage pps in a day
    mapping(uint256 => uint256) public divInDay;
    mapping(uint256 => uint256) public totalBuyVolumeInDay;
    mapping(uint256 => uint256) public totalSellVolumeInDay;

    address public devTeam; //Smart contract address

    uint256 public swapTime;
    bool public swapActived = false;
    bool public buyActived = false;

    /*=======================================
    =            PUBLIC FUNCTIONS            =
    =======================================*/
    constructor (address _devTeam)
        public
    {
        symbol = "F2M";  
        name = "Fomo2Moon";  
        decimals = 10;
        unitRate = 10**uint256(decimals);
        HARD_TOTAL_SUPPLY = HARD_TOTAL_SUPPLY * unitRate;
        totalSupply = 0; 
        //deployedTime = block.timestamp;
        DevTeamInterface(_devTeam).setF2mAddress(address(this));
        devTeam = _devTeam;
        autoBuy = true;
    }

    // _contract = [f2mAddress, bankAddress, citizenAddress, lotteryAddress, rewardAddress, whitelistAddress];
    function joinNetwork(address[6] _contract)
        public
    {
        require(address(citizenContract) == 0x0, "already setup");
        bankContract = BankInterface(_contract[1]);
        citizenContract = CitizenInterface(_contract[2]);
        lotteryContract = LotteryInterface(_contract[3]);
        whitelistContract = WhitelistInterface(_contract[5]);
    }
 
    function()
        public
        payable
    {
        // Thanks for Donation
    }

    // one time called, manuell called in case not reached 360ETH for totalPot
    function disableRound0() 
        public 
        onlyAdmin() 
    {
        require(buyActived && block.timestamp > ROUND0_MIN_DURATION.add(deployedTime), "too early to disable Round0");
        round0 = false;
        potPercent = 0;
    }

    function activeBuy()
        public
        onlyAdmin()
    {
        require(buyActived == false, "already actived");
        buyActived = true;
        deployedTime = block.timestamp;
        deployedDay = getToday();
    }

    // Dividends from all sources (DApps, Donate ...)
    function pushDividends() 
        public 
        payable 
    {
        // shared to fund and dividends only
        uint256 ethAmount = msg.value;
        uint256 dividends = ethAmount * divPercent / (divPercent + fundPercent);
        uint256 fund = ethAmount.sub(dividends);
        uint256 _buyPrice = getBuyPrice();
        distributeTax(fund, dividends, 0, 0);
        if (autoBuy) devTeamAutoBuy(0, _buyPrice);
    }

    function addFund(uint256 _fund)
        private
    {
        credit[devTeam] = credit[devTeam].sub(int256(_fund));
    }

    function addDividends(uint256 _dividends)
        private
    {
        if (_dividends == 0) return;
        totalDividends += _dividends;
        uint256 today = getToday();
        divInDay[today] = _dividends.add(divInDay[today]);

        if (totalSupply == 0) {
            addFund(_dividends);
        } else {
            // increased profit with each token
            // gib mir n bier
            addFund(_dividends % totalSupply);
            uint256 deltaShare = _dividends / totalSupply;
            pps = pps.add(deltaShare);

            // logs
            uint256 curRoundId = getCurRoundId();
            rPps[curRoundId] += deltaShare;
            totalDividendsByRound[curRoundId] += _dividends;
            ppsInDay[today] = deltaShare + ppsInDay[today];
        }
    }

    function addToRef(uint256 _toRef)
        private
    {
        if (_toRef == 0) return;
        address sender = msg.sender;
        citizenContract.pushRefIncome.value(_toRef)(sender);
    }

    function addToPot(uint256 _toPot)
        private
    {
        if (_toPot == 0) return;
        lotteryContract.pushToPot.value(_toPot)();
        uint256 _totalPot = lotteryContract.getTotalPot();

        // auto disable Round0 if reached 360ETH for first round
        if (_totalPot >= FIRST_POT_MAXIMUM) {
            round0 = false;
            potPercent = 0;
        }
    }

    function distributeTax(
        uint256 _fund,
        uint256 _dividends,
        uint256 _toRef,
        uint256 _toPot)
        private
    {
        addFund(_fund);
        addDividends(_dividends);
        addToRef(_toRef);
        addToPot(_toPot);
    }

    function updateCredit(address _owner, uint256 _currentEthAmount, uint256 _rDividends, uint256 _todayDividends) 
        private 
    {
        // basicly to keep ethBalance not changed, after token balances changed (minted or burned)
        // ethBalance = pps * tokens -credit
        uint256 curRoundId = getCurRoundId();
        credit[_owner] = int256(pps.mul(balances[_owner])).sub(int256(_currentEthAmount));
        // logs
        rCredit[_owner][curRoundId] = int256(rPps[curRoundId] * balances[_owner]) - int256(_rDividends);
        todayCredit[_owner] = int256(ppsInDay[getToday()] * balances[_owner]) - int256(_todayDividends);
    }

    function mintToken(address _buyer, uint256 _taxedAmount, uint256 _buyPrice) 
        private 
        swapNotActived()
        buyable()
        returns(uint256) 
    {
        uint256 revTokens = ethToToken(_taxedAmount, _buyPrice);
        investedAmount = investedAmount.add(_taxedAmount);
        // lottery ticket buy could be blocked without this
        // the 1% from ticket buy will increases tokenSellPrice when totalSupply capped
        if (revTokens + totalSupply > HARD_TOTAL_SUPPLY) 
            revTokens = HARD_TOTAL_SUPPLY.sub(totalSupply);
        balances[_buyer] = balances[_buyer].add(revTokens);
        totalSupply = totalSupply.add(revTokens);
        return revTokens;
    }

    function burnToken(address _seller, uint256 _tokenAmount) 
        private 
        returns (uint256) 
    {
        require(balances[_seller] >= _tokenAmount, "not enough to burn");
        uint256 revEthAmount = tokenToEth(_tokenAmount);
        investedAmount = investedAmount.sub(revEthAmount);
        balances[_seller] = balances[_seller].sub(_tokenAmount);
        totalSupply = totalSupply.sub(_tokenAmount);
        return revEthAmount;
    }

    function devTeamAutoBuy(uint256 _reserved, uint256 _buyPrice)
        private
    {
        uint256 _refClaim = citizenContract.devTeamReinvest();
        credit[devTeam] -= int256(_refClaim);
        uint256 _ethAmount = ethBalance(devTeam);
        if ((_ethAmount + _reserved) / _buyPrice + totalSupply > HARD_TOTAL_SUPPLY) return;

        uint256 _rDividends = getRDividends(devTeam);
        uint256 _todayDividends = getTodayDividendsByAddress(devTeam);
        mintToken(devTeam, _ethAmount, _buyPrice);
        updateCredit(devTeam, 0, _rDividends, _todayDividends);
    }

    function buy()
        public
        payable
    {
        address _buyer = msg.sender;
        buyFor(_buyer);
    }

    function checkLimit(address _buyer)
        private
        view
    {
        require(!round0 || !whitelistContract.isLimited(_buyer, pInvestedSum[_buyer]), "Limited");
    }

    function buyFor(address _buyer) 
        public 
        payable
    {
        //ADD Round0 WHITE LIST
        // tax = fund + dividends + toRef + toPot;
        updateLastActive(_buyer);
        uint256 _buyPrice = getBuyPrice();
        uint256 ethAmount = msg.value;
        pInvestedSum[_buyer] += ethAmount;
        checkLimit(_buyer);
        uint256 onePercent = ethAmount / 100;
        uint256 fund = onePercent.mul(fundPercent);
        uint256 dividends = onePercent.mul(divPercent);
        uint256 toRef = onePercent.mul(refPercent);
        uint256 toPot = onePercent.mul(potPercent);
        uint256 tax = fund + dividends + toRef + toPot;
        uint256 taxedAmount = ethAmount.sub(tax);
        
        totalBuyVolume = totalBuyVolume + ethAmount;
        totalBuyVolumeInDay[getToday()] += ethAmount;

        distributeTax(fund, dividends, toRef, toPot);
        if (autoBuy) devTeamAutoBuy(taxedAmount, _buyPrice);

        uint256 curEthBalance = ethBalance(_buyer);
        uint256 _rDividends = getRDividends(_buyer);
        uint256 _todayDividends = getTodayDividendsByAddress(_buyer);

        mintToken(_buyer, taxedAmount, _buyPrice);
        updateCredit(_buyer, curEthBalance, _rDividends, _todayDividends);
    }

    function sell(uint256 _tokenAmount)
        public
        onlyTokenHolders()
    {
        // tax = fund only
        updateLastActive(msg.sender);
        address seller = msg.sender;
        uint256 curEthBalance = ethBalance(seller);
        uint256 _rDividends = getRDividends(seller);
        uint256 _todayDividends = getTodayDividendsByAddress(seller);

        uint256 ethAmount = burnToken(seller, _tokenAmount);
        uint256 fund = ethAmount.mul(fundPercent) / 100;
        //uint256 tax = fund;
        uint256 taxedAmount = ethAmount.sub(fund);

        totalSellVolume = totalSellVolume + ethAmount;
        totalSellVolumeInDay[getToday()] += ethAmount;
        curEthBalance = curEthBalance.add(taxedAmount);
        fromSellingAmount[seller] += taxedAmount;
        
        updateCredit(seller, curEthBalance, _rDividends, _todayDividends);
        distributeTax(fund, 0, 0, 0);
    }

    function devTeamWithdraw()
        public
        returns(uint256)
    {
        address sender = msg.sender;
        require(sender == devTeam, "dev. Team only");
        uint256 amount = ethBalance(sender);
        if (amount == 0) return 0;
        credit[sender] += int256(amount);
        withdrawnAmount[sender] = amount.add(withdrawnAmount[sender]);
        devTeam.transfer(amount);
        return amount;
    }

    function withdrawFor(address sender)
        public
        withdrawRight()
        returns(uint256)
    {
        uint256 amount = ethBalance(sender);
        if (amount == 0) return 0;
        credit[sender] = credit[sender].add(int256(amount));
        withdrawnAmount[sender] = amount.add(withdrawnAmount[sender]);
        bankContract.pushToBank.value(amount)(sender);
        return amount;
    }

    function updateAllowed(address _from, address _to, uint256 _tokenAmount)
        private
    {
        require(balances[_from] >= _tokenAmount, "not enough to transfer");
        if (_from != msg.sender)
        allowed[_from][_to] = allowed[_from][_to].sub(_tokenAmount);
    }
    
    function transferFrom(address _from, address _to, uint256 _tokenAmount)
        public
        returns(bool)
    {   
        updateAllowed(_from, _to, _tokenAmount);
        updateLastActive(_from);
        updateLastActive(_to);
        // tax = 0

        uint256 curEthBalance_from = ethBalance(_from);
        uint256 _rDividends_from = getRDividends(_from);
        uint256 _todayDividends_from = getTodayDividendsByAddress(_from);

        uint256 curEthBalance_to = ethBalance(_to);
        uint256 _rDividends_to = getRDividends(_to);
        uint256 _todayDividends_to = getTodayDividendsByAddress(_to);

        uint256 taxedTokenAmount = _tokenAmount;
        balances[_from] -= taxedTokenAmount;
        balances[_to] += taxedTokenAmount;
        updateCredit(_from, curEthBalance_from, _rDividends_from, _todayDividends_from);
        updateCredit(_to, curEthBalance_to, _rDividends_to, _todayDividends_to);
        // distributeTax(tax, 0, 0, 0);
        // fire event
        emit Transfer(_from, _to, taxedTokenAmount);
        
        return true;
    }

    function transfer(address _to, uint256 _tokenAmount)
        public 
        returns (bool) 
    {
        transferFrom(msg.sender, _to, _tokenAmount);
        return true;
    }

    function approve(address spender, uint tokens) 
        public 
        returns (bool success) 
    {
        allowed[msg.sender][spender] = tokens;
        emit Approval(msg.sender, spender, tokens);
        return true;
    }

    function updateLastActive(address _sender) 
        private
    {
        if (lastActiveDay[_sender] != getToday()) {
            lastActiveDay[_sender] = getToday();
            todayCredit[_sender] = 0;
        }
    }
    
    /*----------  ADMINISTRATOR ONLY FUNCTIONS  ----------*/

    function setAutoBuy() 
        public
        onlyAdmin()
    {
        //require(buyActived && block.timestamp > ROUND0_MIN_DURATION.add(deployedTime), "too early to disable autoBuy");
        autoBuy = !autoBuy;
    }

    /*----------  HELPERS AND CALCULATORS  ----------*/
    function totalEthBalance()
        public
        view
        returns(uint256)
    {
        return address(this).balance;
    }
    
    function ethBalance(address _address)
        public
        view
        returns(uint256)
    {
        return (uint256) ((int256)(pps.mul(balances[_address])).sub(credit[_address]));
    }

    function getTotalDividendsByAddress(address _invester)
        public
        view
        returns(uint256)
    {

        return (ethBalance(_invester)) + (withdrawnAmount[_invester]) - (fromSellingAmount[_invester]);
    }

    function getTodayDividendsByAddress(address _invester)
        public
        view
        returns(uint256)
    {
        int256 _todayCredit = (getToday() == lastActiveDay[_invester]) ? todayCredit[_invester] : 0;
        return (uint256) ((int256)(ppsInDay[getToday()] * balances[_invester]) - _todayCredit);
    }
    
    /*==========================================
    =            public FUNCTIONS            =
    ==========================================*/

    /**
     * Return the sell price of 1 individual token.
     */
    function getSellPrice() 
        public 
        view 
        returns(uint256)
    {
        if (totalSupply == 0) {
            return 0;
        } else {
            return investedAmount / totalSupply;
        }
    }

    function getSellPriceAfterTax() 
        public 
        view 
        returns(uint256)
    {
        uint256 _sellPrice = getSellPrice();
        uint256 taxPercent = fundPercent;
        return _sellPrice * (100 - taxPercent) / 100;
    }
    
    /**
     * Return the buy price of 1 individual token.
     * Start Price + (7-day Average Dividend Payout) x BEP x HARD_TOTAL_SUPPLY / (Total No. of Circulating Tokens) / (HARD_TOTAL_SUPPLY - Total No. of Circulating Tokens + 1)
     */
    function getBuyPrice() 
        public 
        view 
        returns(uint256)
    {
        // average profit per share of a day in week
        uint256 taxPercent = fundPercent + potPercent + divPercent + refPercent;
        if (round0) return startPrice * (100 - taxPercent) / 100 / unitRate;
        uint256 avgPps = getAvgPps();
        uint256 _sellPrice = getSellPrice();
        uint256 _buyPrice = (startPrice / unitRate + avgPps * BEP * HARD_TOTAL_SUPPLY / (HARD_TOTAL_SUPPLY + unitRate - totalSupply)) * (100 - taxPercent) / 100;
        if (_buyPrice < _sellPrice) return _sellPrice;
        return _buyPrice;
    }

    function getBuyPriceAfterTax()
        public 
        view 
        returns(uint256)
    {
        // average profit per share of a day in week
        uint256 _buyPrice = getBuyPrice();
        uint256 taxPercent = fundPercent + potPercent + divPercent + refPercent;
        return _buyPrice * 100 / (100 - taxPercent);
    }

    function ethToToken(uint256 _ethAmount, uint256 _buyPrice)
        public
        pure
        returns(uint256)
    {
        return _ethAmount / _buyPrice;
    }

/*     function ethToTokenRest(uint256 _ethAmount, uint256 _buyPrice)
        public
        pure
        returns(uint256)
    {
        return _ethAmount % _buyPrice;
    } */
    
    function tokenToEth(uint256 _tokenAmount)
        public
        view
        returns(uint256)
    {
        uint256 sellPrice = getSellPrice();
        return _tokenAmount.mul(sellPrice);
    }
    
    function getToday() 
        public 
        view 
        returns (uint256) 
    {
        return (block.timestamp / ONE_DAY);
    }

    //Avarage Profit per Share in last 7 Days
    function getAvgPps() 
        public 
        view 
        returns (uint256) 
    {
        uint256 divSum = 0;
        uint256 _today = getToday();
        uint256 _fromDay = _today - 6;
        if (_fromDay < deployedDay) _fromDay = deployedDay;
        for (uint256 i = _fromDay; i <= _today; i++) {
            divSum = divSum.add(divInDay[i]);
        }
        if (totalSupply == 0) return 0;
        return divSum / (_today + 1 - _fromDay) / totalSupply;
    }

    function getTotalVolume() 
        public
        view
        returns(uint256)
    {
        return totalBuyVolume + totalSellVolume;
    }

    function getWeeklyBuyVolume() 
        public
        view
        returns(uint256)
    {
        uint256 _total = 0;
        uint256 _today = getToday();
        for (uint256 i = _today; i + 7 > _today; i--) {
            _total = _total + totalBuyVolumeInDay[i];
        }
        return _total;
    }

    function getWeeklySellVolume() 
        public
        view
        returns(uint256)
    {
        uint256 _total = 0;
        uint256 _today = getToday();
        for (uint256 i = _today; i + 7 > _today; i--) {
            _total = _total + totalSellVolumeInDay[i];
        }
        return _total;
    }

    function getWeeklyVolume()
        public
        view
        returns(uint256)
    {
        return getWeeklyBuyVolume() + getWeeklySellVolume();
    }

    function getTotalDividends()
        public
        view
        returns(uint256)
    {
        return totalDividends;
    }

    function getRDividends(address _invester)
        public
        view
        returns(uint256)
    {
        uint256 curRoundId = getCurRoundId();
        return uint256(int256(rPps[curRoundId] * balances[_invester]) - rCredit[_invester][curRoundId]);
    }

    function getWeeklyDividends()
        public
        view
        returns(uint256)
    {
        uint256 divSum = 0;
        uint256 _today = getToday();
        uint256 _fromDay = _today - 6;
        if (_fromDay < deployedDay) _fromDay = deployedDay;
        for (uint256 i = _fromDay; i <= _today; i++) {
            divSum = divSum.add(divInDay[i]);
        }
        
        return divSum;
    }

    function getMarketCap()
        public
        view
        returns(uint256)
    {
        return totalSupply.mul(getBuyPriceAfterTax());
    }

    function totalSupply()
        public
        view
        returns(uint)
    {
        return totalSupply;
    }

    function balanceOf(address tokenOwner)
        public
        view
        returns(uint256)
    {
        return balances[tokenOwner];
    }

    function myBalance() 
        public 
        view 
        returns(uint256)
    {
        return balances[msg.sender];
    }

    function myEthBalance() 
        public 
        view 
        returns(uint256) 
    {
        return ethBalance(msg.sender);
    }

    function myCredit() 
        public 
        view 
        returns(int256) 
    {
        return credit[msg.sender];
    }

    function getRound0MinDuration()
        public
        view
        returns(uint256)
    {
        if (!round0) return 0;
        if (block.timestamp > ROUND0_MIN_DURATION.add(deployedTime)) return 0;
        return ROUND0_MIN_DURATION + deployedTime - block.timestamp;
    }

    // Lottery

    function getCurRoundId()
        public
        view
        returns(uint256)
    {
        return lotteryContract.getCurRoundId();
    }

    //SWAP TOKEN, PUBLIC SWAP_DURAION SECONDS BEFORE
    function swapToken()
        public
        onlyTokenHolders()
    {
        require(swapActived, "swap not actived");
        address _invester = msg.sender;
        uint256 _tokenAmount = balances[_invester];
        // burn all token
        uint256 _ethAmount = burnToken(_invester, _tokenAmount);
        // swapToken function in new contract accepts only sender = this old contract
        newTokenContract.swapToken.value(_ethAmount)(_tokenAmount, _invester);
    }

    // start swapping, disable buy
    function setNewToken(address _newTokenAddress)
        public
        onlyAdmin()
    {
        bool _isLastRound = lotteryContract.isLastRound();
        require(_isLastRound, "too early");
        require(swapActived == false, "already set");
        swapTime = block.timestamp;
        swapActived = true;
        newTokenContract = NewTokenInterface(_newTokenAddress);
        autoBuy = false;
    }

    // after 90 days from swapTime, devteam withdraw whole eth.
    function sleep()
        public
    {
        require(swapActived, "swap not actived");
        require(swapTime + BEFORE_SLEEP_DURAION < block.timestamp, "too early");
        uint256 _ethAmount = address(this).balance;
        devTeam.transfer(_ethAmount);
        //ICE
    }

}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"pps","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getBuyPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"todayCredit","outputs":[{"name":"","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"swapActived","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bankContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"newTokenContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"tokens","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getTotalVolume","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"potPercent","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"withdrawnAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"sleep","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getSellPriceAfterTax","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ONE_HOUR","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenAmount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getAvgPps","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"unitRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"activeBuy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"autoBuy","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getWeeklyBuyVolume","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_contract","type":"address[6]"}],"name":"joinNetwork","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"SWAP_DURATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSellVolume","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"ppsInDay","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getSellPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"deployedTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"divPercent","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"deployedDay","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalEthBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"refPercent","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newTokenAddress","type":"address"}],"name":"setNewToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"buyActived","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"totalBuyVolumeInDay","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTotalDividends","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"BEP","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_invester","type":"address"}],"name":"getTotalDividendsByAddress","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_invester","type":"address"}],"name":"getTodayDividendsByAddress","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_buyer","type":"address"}],"name":"buyFor","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"round0","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenOwner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenAmount","type":"uint256"}],"name":"tokenToEth","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"fromSellingAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"divInDay","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"swapTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"whitelistContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ONE_DAY","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getMarketCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getWeeklyDividends","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalDividends","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"sender","type":"address"}],"name":"withdrawFor","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getToday","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"buy","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenAmount","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getRound0MinDuration","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lotteryContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getWeeklyVolume","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalBuyVolume","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_invester","type":"address"}],"name":"getRDividends","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"totalSellVolumeInDay","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pushDividends","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"fundPercent","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"disableRound0","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"myBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"citizenContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"devTeamWithdraw","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"totalDividendsByRound","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"BEFORE_SLEEP_DURAION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getWeeklySellVolume","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"devTeam","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"myCredit","outputs":[{"name":"","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"credit","outputs":[{"name":"","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"ethBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"myEthBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ROUND0_MIN_DURATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"lastActiveDay","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"swapToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenAmount","type":"uint256"}],"name":"sell","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"HARD_TOTAL_SUPPLY","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"investedAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getBuyPriceAfterTax","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurRoundId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"setAutoBuy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"startPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"pInvestedSum","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_ethAmount","type":"uint256"},{"name":"_buyPrice","type":"uint256"}],"name":"ethToToken","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"FIRST_POT_MAXIMUM","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_devTeam","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"tokenOwner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Approval","type":"event"}]

6080604052627a1200600c55602d600d5560006019556001601e60016101000a81548160ff0219169083151502179055506000602560006101000a81548160ff0219169083151502179055506000602560016101000a81548160ff0219169083151502179055503480156200007357600080fd5b5060405160208062005488833981018060405281019080805190602001909291905050506040805190810160405280600381526020017f46324d000000000000000000000000000000000000000000000000000000000081525060029080519060200190620000e4929190620002a3565b506040805190810160405280600981526020017f466f6d6f324d6f6f6e00000000000000000000000000000000000000000000008152506001908051906020019062000132929190620002a3565b50600a600360006101000a81548163ffffffff021916908363ffffffff160217905550600360009054906101000a900463ffffffff1663ffffffff16600a0a600481905550600454600c5402600c81905550600080819055508073ffffffffffffffffffffffffffffffffffffffff16634b74f16f306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156200022757600080fd5b505af11580156200023c573d6000803e3d6000fd5b5050505080602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601e60006101000a81548160ff0219169083151502179055505062000352565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002e657805160ff191683800117855562000317565b8280016001018555821562000317579182015b8281111562000316578251825591602001919060010190620002f9565b5b5090506200032691906200032a565b5090565b6200034f91905b808211156200034b57600081600090555060010162000331565b5090565b90565b61512680620003626000396000f300608060405260043610610408576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806218b1d31461040a578063018a25e814610435578063044cfe53146104605780630515ed1f146104b757806306fdde03146104e657806307c2e4491461057657806308c7398b146105cd578063095ea7b3146106245780630b9d98e9146106895780630c5e11a1146106b457806310b20139146106df578063133a473e1461073657806315b556df1461074d578063165035e21461077857806318160ddd146107a357806323b872dd146107ce57806327ec2c03146108535780632e8c90261461087e57806330db7654146108a9578063313ce567146108c057806334e2f9e6146108f75780633513cab2146109265780633865bf3a146109515780633e4a7aac146109a357806341e70fa6146109ce57806343af463e146109f957806343d32e9c14610a3a578063461ac01914610a65578063470ef61014610a90578063525f6e1d14610abb57806359194d0c14610ae657806359d5335b14610b115780635ed411e514610b3c578063660db5a514610b7f578063667d3a4b14610bae57806367ee5f0914610bef57806369188a2c14610c1a5780636a5c2cf214610c455780636bb9b9ab14610c9c5780636f0b518014610cf35780636f443a5014610d2957806370a0823114610d5857806370b2a30f14610daf578063729d6f3214610df05780637eb0fab914610e475780637fb181c114610e8857806384900b0414610eb3578063863e76db14610f0a57806390825c2814610f3557806395d89b4114610f6057806397e6c7f714610ff0578063997664d71461101b5780639eca672c14611046578063a4f3fa101461109d578063a6f2ae3a146110c8578063a9059cbb146110d2578063abbbf45114611137578063b29c662a14611162578063b520c7e7146111b9578063b9e5a03b146111e4578063bb4450841461120f578063bd15f1b514611266578063bdb66236146112a7578063c10a74bf146112b1578063c4882e44146112dc578063c9116b69146112f3578063cac497721461131e578063cb3d6b5f14611375578063ccb60c6a146113a0578063cf71d2bb146113e1578063cfe675871461140c578063d3dcc17514611437578063d52f71221461148e578063d5d44d80146114b9578063d8f3790f14611510578063d95ffc0814611567578063d9a6ba7014611592578063dc1ab379146115bd578063dc73e49c14611614578063e4849b321461162b578063e6dd515514611658578063eaab459714611683578063eb63e140146116ae578063eb95f0bf146116d9578063ed18838c14611704578063f1a9af891461171b578063f5f6a53814611746578063f80bbedc1461179d578063ffe1c0b0146117e8575b005b34801561041657600080fd5b5061041f611813565b6040518082815260200191505060405180910390f35b34801561044157600080fd5b5061044a611819565b6040518082815260200191505060405180910390f35b34801561046c57600080fd5b506104a1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118e6565b6040518082815260200191505060405180910390f35b3480156104c357600080fd5b506104cc6118fe565b604051808215151515815260200191505060405180910390f35b3480156104f257600080fd5b506104fb611911565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561053b578082015181840152602081019050610520565b50505050905090810190601f1680156105685780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561058257600080fd5b5061058b6119af565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105d957600080fd5b506105e26119d5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561063057600080fd5b5061066f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506119fb565b604051808215151515815260200191505060405180910390f35b34801561069557600080fd5b5061069e611aed565b6040518082815260200191505060405180910390f35b3480156106c057600080fd5b506106c9611afb565b6040518082815260200191505060405180910390f35b3480156106eb57600080fd5b50610720600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b01565b6040518082815260200191505060405180910390f35b34801561074257600080fd5b5061074b611b19565b005b34801561075957600080fd5b50610762611ca8565b6040518082815260200191505060405180910390f35b34801561078457600080fd5b5061078d611cd4565b6040518082815260200191505060405180910390f35b3480156107af57600080fd5b506107b8611cda565b6040518082815260200191505060405180910390f35b3480156107da57600080fd5b50610839600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ce3565b604051808215151515815260200191505060405180910390f35b34801561085f57600080fd5b50610868611e7a565b6040518082815260200191505060405180910390f35b34801561088a57600080fd5b50610893611f22565b6040518082815260200191505060405180910390f35b3480156108b557600080fd5b506108be611f28565b005b3480156108cc57600080fd5b506108d56120aa565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b34801561090357600080fd5b5061090c6120c0565b604051808215151515815260200191505060405180910390f35b34801561093257600080fd5b5061093b6120d3565b6040518082815260200191505060405180910390f35b34801561095d57600080fd5b506109a16004803603810190808060c00190600680602002604051908101604052809291908260066020028082843782019150505050509192919290505050612125565b005b3480156109af57600080fd5b506109b8612328565b6040518082815260200191505060405180910390f35b3480156109da57600080fd5b506109e3612334565b6040518082815260200191505060405180910390f35b348015610a0557600080fd5b50610a246004803603810190808035906020019092919050505061233a565b6040518082815260200191505060405180910390f35b348015610a4657600080fd5b50610a4f612352565b6040518082815260200191505060405180910390f35b348015610a7157600080fd5b50610a7a61237d565b6040518082815260200191505060405180910390f35b348015610a9c57600080fd5b50610aa5612383565b6040518082815260200191505060405180910390f35b348015610ac757600080fd5b50610ad0612388565b6040518082815260200191505060405180910390f35b348015610af257600080fd5b50610afb61238e565b6040518082815260200191505060405180910390f35b348015610b1d57600080fd5b50610b266123ad565b6040518082815260200191505060405180910390f35b348015610b4857600080fd5b50610b7d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123b2565b005b348015610b8b57600080fd5b50610b946126be565b604051808215151515815260200191505060405180910390f35b348015610bba57600080fd5b50610bd9600480360381019080803590602001909291905050506126d1565b6040518082815260200191505060405180910390f35b348015610bfb57600080fd5b50610c046126e9565b6040518082815260200191505060405180910390f35b348015610c2657600080fd5b50610c2f6126f3565b6040518082815260200191505060405180910390f35b348015610c5157600080fd5b50610c86600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126f8565b6040518082815260200191505060405180910390f35b348015610ca857600080fd5b50610cdd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061278c565b6040518082815260200191505060405180910390f35b610d27600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061288c565b005b348015610d3557600080fd5b50610d3e612a37565b604051808215151515815260200191505060405180910390f35b348015610d6457600080fd5b50610d99600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a4a565b6040518082815260200191505060405180910390f35b348015610dbb57600080fd5b50610dda60048036038101908080359060200190929190505050612a93565b6040518082815260200191505060405180910390f35b348015610dfc57600080fd5b50610e31600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612abb565b6040518082815260200191505060405180910390f35b348015610e5357600080fd5b50610e7260048036038101908080359060200190929190505050612ad3565b6040518082815260200191505060405180910390f35b348015610e9457600080fd5b50610e9d612aea565b6040518082815260200191505060405180910390f35b348015610ebf57600080fd5b50610ec8612af0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610f1657600080fd5b50610f1f612b16565b6040518082815260200191505060405180910390f35b348015610f4157600080fd5b50610f4a612b1f565b6040518082815260200191505060405180910390f35b348015610f6c57600080fd5b50610f75612b42565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610fb5578082015181840152602081019050610f9a565b50505050905090810190601f168015610fe25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610ffc57600080fd5b50611005612be0565b6040518082815260200191505060405180910390f35b34801561102757600080fd5b50611030612c57565b6040518082815260200191505060405180910390f35b34801561105257600080fd5b50611087600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c5d565b6040518082815260200191505060405180910390f35b3480156110a957600080fd5b506110b2612f4c565b6040518082815260200191505060405180910390f35b6110d0612f64565b005b3480156110de57600080fd5b5061111d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612f75565b604051808215151515815260200191505060405180910390f35b34801561114357600080fd5b5061114c612f8d565b6040518082815260200191505060405180910390f35b34801561116e57600080fd5b50611177612fea565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156111c557600080fd5b506111ce613010565b6040518082815260200191505060405180910390f35b3480156111f057600080fd5b506111f9613028565b6040518082815260200191505060405180910390f35b34801561121b57600080fd5b50611250600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061302e565b6040518082815260200191505060405180910390f35b34801561127257600080fd5b50611291600480360381019080803590602001909291905050506130ea565b6040518082815260200191505060405180910390f35b6112af613102565b005b3480156112bd57600080fd5b506112c6613173565b6040518082815260200191505060405180910390f35b3480156112e857600080fd5b506112f1613178565b005b3480156112ff57600080fd5b5061130861330a565b6040518082815260200191505060405180910390f35b34801561132a57600080fd5b50611333613351565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561138157600080fd5b5061138a613377565b6040518082815260200191505060405180910390f35b3480156113ac57600080fd5b506113cb600480360381019080803590602001909291905050506135b5565b6040518082815260200191505060405180910390f35b3480156113ed57600080fd5b506113f66135cd565b6040518082815260200191505060405180910390f35b34801561141857600080fd5b506114216135d9565b6040518082815260200191505060405180910390f35b34801561144357600080fd5b5061144c61362b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561149a57600080fd5b506114a3613651565b6040518082815260200191505060405180910390f35b3480156114c557600080fd5b506114fa600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613698565b6040518082815260200191505060405180910390f35b34801561151c57600080fd5b50611551600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506136b0565b6040518082815260200191505060405180910390f35b34801561157357600080fd5b5061157c61375e565b6040518082815260200191505060405180910390f35b34801561159e57600080fd5b506115a761376e565b6040518082815260200191505060405180910390f35b3480156115c957600080fd5b506115fe600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613777565b6040518082815260200191505060405180910390f35b34801561162057600080fd5b5061162961378f565b005b34801561163757600080fd5b5061165660048036038101908080359060200190929190505050613a02565b005b34801561166457600080fd5b5061166d613bec565b6040518082815260200191505060405180910390f35b34801561168f57600080fd5b50611698613bf2565b6040518082815260200191505060405180910390f35b3480156116ba57600080fd5b506116c3613bf8565b6040518082815260200191505060405180910390f35b3480156116e557600080fd5b506116ee613c2e565b6040518082815260200191505060405180910390f35b34801561171057600080fd5b50611719613cf6565b005b34801561172757600080fd5b50611730613de7565b6040518082815260200191505060405180910390f35b34801561175257600080fd5b50611787600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613df2565b6040518082815260200191505060405180910390f35b3480156117a957600080fd5b506117d26004803603810190808035906020019092919080359060200190929190505050613e0a565b6040518082815260200191505060405180910390f35b3480156117f457600080fd5b506117fd613e20565b6040518082815260200191505060405180910390f35b60195481565b6000806000806000600f600a600d5460020101019350601e60019054906101000a900460ff16156118715760045460648560640366071afd498d00000281151561185f57fe5b0481151561186957fe5b0494506118df565b611879611e7a565b9250611883612352565b9150606484606403600054600454600c540103600c54601e8702028115156118a757fe5b0460045466071afd498d00008115156118bc57fe5b0401028115156118c857fe5b049050818110156118db578194506118df565b8094505b5050505090565b60126020528060005260406000206000915090505481565b602560009054906101000a900460ff1681565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156119a75780601f1061197c576101008083540402835291602001916119a7565b820191906000526020600020905b81548152906001019060200180831161198a57829003601f168201915b505050505081565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600060165460155401905090565b600d5481565b600f6020528060005260406000206000915090505481565b6000602560009054906101000a900460ff161515611b9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f73776170206e6f7420616374697665640000000000000000000000000000000081525060200191505060405180910390fd5b42610e1060180260070260245401101515611c22576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f746f6f206561726c79000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16319050602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611ca4573d6000803e3d6000fd5b5050565b6000806000611cb5612352565b9150600290506064816064038302811515611ccc57fe5b049250505090565b610e1081565b60008054905090565b600080600080600080600080611cfa8b8b8b613e2d565b611d038b61402e565b611d0c8a61402e565b611d158b6136b0565b9650611d208b61302e565b9550611d2b8b61278c565b9450611d368a6136b0565b9350611d418a61302e565b9250611d4c8a61278c565b915088905080600560008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555080600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550611df78b888888614111565b611e038a858585614111565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a360019750505050505050509392505050565b6000806000806000809350611e8d612f4c565b9250600683039150601d54821015611ea557601d5491505b8190505b8281111515611ee757611ed860206000838152602001908152602001600020548561431990919063ffffffff16565b93508080600101915050611ea9565b600080541415611efa5760009450611f1b565b60005482600185010385811515611f0d57fe5b04811515611f1757fe5b0494505b5050505090565b60045481565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611fed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f61646d696e20726571756972656400000000000000000000000000000000000081525060200191505060405180910390fd5b60001515602560019054906101000a900460ff161515141515612078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f616c72656164792061637469766564000000000000000000000000000000000081525060200191505060405180910390fd5b6001602560016101000a81548160ff02191690831515021790555042601c819055506120a2612f4c565b601d81905550565b600360009054906101000a900463ffffffff1681565b601e60009054906101000a900460ff1681565b600080600080600092506120e5612f4c565b91508190505b8160078201111561211c576021600082815260200190815260200160002054830192508080600190039150506120eb565b82935050505090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156121d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f616c72656164792073657475700000000000000000000000000000000000000081525060200191505060405180910390fd5b8060016006811015156121e457fe5b6020020151600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260068110151561223857fe5b6020020151600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360068110151561228c57fe5b6020020151600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060056006811015156122e057fe5b6020020151600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610e10601802601e0281565b60165481565b601f6020528060005260406000206000915090505481565b6000806000541415612367576000905061237a565b60005460145481151561237657fe5b0490505b90565b601c5481565b600a81565b601d5481565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600f81565b6000602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f61646d696e20726571756972656400000000000000000000000000000000000081525060200191505060405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323ba467a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156124ff57600080fd5b505af1158015612513573d6000803e3d6000fd5b505050506040513d602081101561252957600080fd5b810190808051906020019092919050505090508015156125b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f746f6f206561726c79000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60001515602560009054906101000a900460ff16151514151561263c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f616c72656164792073657400000000000000000000000000000000000000000081525060200191505060405180910390fd5b426024819055506001602560006101000a81548160ff02191690831515021790555081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601e60006101000a81548160ff0219169083151502179055505050565b602560019054906101000a900460ff1681565b60216020528060005260406000206000915090505481565b6000601754905090565b601e81565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612783846136b0565b01039050919050565b600080601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d7612f4c565b146127e3576000612824565b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020545b905080600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601f6000612873612f4c565b8152602001908152602001600020540203915050919050565b6000806000806000806000806000806000806128a78d61402e565b6128af611819565b9b50349a508a601360008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555061290a8d61433a565b60648b81151561291657fe5b04995061292d60028b61450990919063ffffffff16565b9850612943600a8b61450990919063ffffffff16565b9750612959600f8b61450990919063ffffffff16565b9650612970600d548b61450990919063ffffffff16565b95508587898b010101945061298e858c61454790919063ffffffff16565b93508a601554016015819055508a602160006129a8612f4c565b8152602001908152602001600020600082825401925050819055506129cf89898989614568565b601e60009054906101000a900460ff16156129ef576129ee848d614592565b5b6129f88d6136b0565b9250612a038d61302e565b9150612a0e8d61278c565b9050612a1b8d858e6147d7565b50612a288d848484614111565b50505050505050505050505050565b601e60019054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080612a9e612352565b9050612ab3818461450990919063ffffffff16565b915050919050565b60106020528060005260406000206000915090505481565b602080528060005260406000206000915090505481565b60245481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e1060180281565b6000612b3d612b2c613bf8565b60005461450990919063ffffffff16565b905090565b60028054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612bd85780601f10612bad57610100808354040283529160200191612bd8565b820191906000526020600020905b815481529060010190602001808311612bbb57829003601f168201915b505050505081565b6000806000806000809350612bf3612f4c565b9250600683039150601d54821015612c0b57601d5491505b8190505b8281111515612c4d57612c3e60206000838152602001908152602001600020548561431990919063ffffffff16565b93508080600101915050612c0f565b8394505050505090565b60175481565b600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612d25576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f42616e6b204f6e6c79000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b612d2e836136b0565b90506000811415612d425760009150612f46565b612d9481600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a2090919063ffffffff16565b600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e29600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261431990919063ffffffff16565b600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e9288d7282856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506000604051808303818588803b158015612f2957600080fd5b505af1158015612f3d573d6000803e3d6000fd5b50505050508091505b50919050565b6000610e1060180242811515612f5e57fe5b04905090565b6000339050612f728161288c565b50565b6000612f82338484611ce3565b506001905092915050565b6000601e60019054906101000a900460ff161515612fae5760009050612fe7565b612fc8601c54610e1060180261431990919063ffffffff16565b421115612fd85760009050612fe7565b42601c54610e10601802010390505b90565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061301a6135d9565b6130226120d3565b01905090565b60155481565b600080613039613c2e565b9050601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002054600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601a6000848152602001908152602001600020540203915050919050565b60226020528060005260406000206000915090505481565b6000806000803493506002600a01600a850281151561311d57fe5b049250613133838561454790919063ffffffff16565b915061313d611819565b905061314c8284600080614568565b601e60009054906101000a900460ff161561316d5761316c600082614592565b5b50505050565b600281565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561323d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f61646d696e20726571756972656400000000000000000000000000000000000081525060200191505060405180910390fd5b602560019054906101000a900460ff168015613271575061326e601c54610e1060180261431990919063ffffffff16565b42115b15156132e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f746f6f206561726c7920746f2064697361626c6520526f756e6430000000000081525060200191505060405180910390fd5b6000601e60016101000a81548160ff0219169083151502179055506000600d81905550565b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000339150602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515613444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6465762e205465616d206f6e6c7900000000000000000000000000000000000081525060200191505060405180910390fd5b61344d826136b0565b9050600081141561346157600092506135b0565b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550613500600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261431990919063ffffffff16565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156135ab573d6000803e3d6000fd5b508092505b505090565b60186020528060005260406000206000915090505481565b610e1060180260070281565b600080600080600092506135eb612f4c565b91508190505b81600782011115613622576022600082815260200190815260200160002054830192508080600190039150506135f1565b82935050505090565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b600e6020528060005260406000206000915090505481565b6000613757600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613749600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460195461450990919063ffffffff16565b614a6490919063ffffffff16565b9050919050565b6000613769336136b0565b905090565b610e1060180281565b60116020528060005260406000206000915090505481565b600080600080600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411151561384a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6e6f74206f776e20616e7920746f6b656e00000000000000000000000000000081525060200191505060405180910390fd5b602560009054906101000a900460ff1615156138ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f73776170206e6f7420616374697665640000000000000000000000000000000081525060200191505060405180910390fd5b339250600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054915061391d8383614aa8565b9050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634c2516de8284866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001925050506000604051808303818588803b1580156139e457600080fd5b505af11580156139f8573d6000803e3d6000fd5b5050505050505050565b600080600080600080600080600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111515613ac3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6e6f74206f776e20616e7920746f6b656e00000000000000000000000000000081525060200191505060405180910390fd5b613acc3361402e565b339650613ad8876136b0565b9550613ae38761302e565b9450613aee8761278c565b9350613afa8789614aa8565b92506064613b1260028561450990919063ffffffff16565b811515613b1b57fe5b049150613b31828461454790919063ffffffff16565b905082601654016016819055508260226000613b4b612f4c565b815260200190815260200160002060008282540192505081905550613b79818761431990919063ffffffff16565b955080601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550613bd487878787614111565b613be2826000806000614568565b5050505050505050565b600c5481565b60145481565b6000806000613c05611819565b9150600f600a600d54600201010190508060640360648302811515613c2657fe5b049250505090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663eb95f0bf6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015613cb657600080fd5b505af1158015613cca573d6000803e3d6000fd5b505050506040513d6020811015613ce057600080fd5b8101908080519060200190929190505050905090565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613dbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f61646d696e20726571756972656400000000000000000000000000000000000081525060200191505060405180910390fd5b601e60009054906101000a900460ff1615601e60006101000a81548160ff021916908315150217905550565b66071afd498d000081565b60136020528060005260406000206000915090505481565b60008183811515613e1757fe5b04905092915050565b68138400eca364a0000081565b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515613ee4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6e6f7420656e6f75676820746f207472616e736665720000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151561402957613fa881600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461454790919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614036612f4c565b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414151561410e57614085612f4c565b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50565b600061411b613c2e565b905061418384614175600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460195461450990919063ffffffff16565b614a6490919063ffffffff16565b600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601a6000848152602001908152602001600020540203601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000208190555081600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601f60006142be612f4c565b8152602001908152602001600020540203601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050565b600080828401905083811015151561433057600080fd5b8091505092915050565b601e60019054906101000a900460ff1615806144925750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166347618cb282601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561445557600080fd5b505af1158015614469573d6000803e3d6000fd5b505050506040513d602081101561447f57600080fd5b8101908080519060200190929190505050155b1515614506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f4c696d697465640000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b50565b600080600084141561451e5760009150614540565b828402905082848281151561452f57fe5b0414151561453c57600080fd5b8091505b5092915050565b60008083831115151561455957600080fd5b82840390508091505092915050565b61457184614c42565b61457a83614d1e565b61458382614e61565b61458c81614f4e565b50505050565b600080600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b7e097736040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561461e57600080fd5b505af1158015614632573d6000803e3d6000fd5b505050506040513d602081101561464857600080fd5b8101908080519060200190929190505050935083600e6000602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506146f5602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166136b0565b9250600c546000548688860181151561470a57fe5b04011115614717576147cf565b614742602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661302e565b915061476f602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661278c565b905061479e602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684876147d7565b506147ce602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660008484614111565b5b505050505050565b60008060001515602560009054906101000a900460ff16151514151561488b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f7377617020616374697665642c2073746f70206d696e74696e67206e6577207481526020017f6f6b656e7300000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60011515602560019054906101000a900460ff161515141515614916576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f746f6b656e2073616c65206e6f7420726561647900000000000000000000000081525060200191505060405180910390fd5b6149208484613e0a565b90506149378460145461431990919063ffffffff16565b601481905550600c546000548201111561496557614962600054600c5461454790919063ffffffff16565b90505b6149b781600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461431990919063ffffffff16565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a0f8160005461431990919063ffffffff16565b600081905550809150509392505050565b600080828401905060008312158015614a395750838112155b80614a4f5750600083128015614a4e57508381125b5b1515614a5a57600080fd5b8091505092915050565b600080828403905060008312158015614a7d5750838113155b80614a935750600083128015614a9257508381135b5b1515614a9e57600080fd5b8091505092915050565b60008082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515614b62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f6e6f7420656e6f75676820746f206275726e000000000000000000000000000081525060200191505060405180910390fd5b614b6b83612a93565b9050614b828160145461454790919063ffffffff16565b601481905550614bda83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461454790919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614c328360005461454790919063ffffffff16565b6000819055508091505092915050565b614cb681600e6000602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a6490919063ffffffff16565b600e6000602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b600080600080841415614d3057614e5b565b83601760008282540192505081905550614d48612f4c565b9250614d7060206000858152602001908152602001600020548561431990919063ffffffff16565b6020600085815260200190815260200160002081905550600080541415614d9f57614d9a84614c42565b614e5a565b614db560005485811515614daf57fe5b06614c42565b60005484811515614dc257fe5b049150614dda8260195461431990919063ffffffff16565b601981905550614de8613c2e565b905081601a600083815260200190815260200160002060008282540192505081905550836018600083815260200190815260200160002060008282540192505081905550601f6000848152602001908152602001600020548201601f6000858152602001908152602001600020819055505b5b50505050565b600080821415614e7057614f4a565b339050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e947962b83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506000604051808303818588803b158015614f3057600080fd5b505af1158015614f44573d6000803e3d6000fd5b50505050505b5050565b600080821415614f5d576150f6565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbe2e296836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016000604051808303818588803b158015614fe357600080fd5b505af1158015614ff7573d6000803e3d6000fd5b5050505050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663480bc31f6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561508257600080fd5b505af1158015615096573d6000803e3d6000fd5b505050506040513d60208110156150ac57600080fd5b8101908080519060200190929190505050905068138400eca364a00000811015156150f5576000601e60016101000a81548160ff0219169083151502179055506000600d819055505b5b50505600a165627a7a72305820cd844516d6a5d4bc8a9edce2e403ccb387363b19f9ee5cb7a7ddf1be45df87ee002900000000000000000000000096504e1f83e380984b1d4eccc0e8b9f0559b2ad2

Deployed Bytecode

0x608060405260043610610408576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806218b1d31461040a578063018a25e814610435578063044cfe53146104605780630515ed1f146104b757806306fdde03146104e657806307c2e4491461057657806308c7398b146105cd578063095ea7b3146106245780630b9d98e9146106895780630c5e11a1146106b457806310b20139146106df578063133a473e1461073657806315b556df1461074d578063165035e21461077857806318160ddd146107a357806323b872dd146107ce57806327ec2c03146108535780632e8c90261461087e57806330db7654146108a9578063313ce567146108c057806334e2f9e6146108f75780633513cab2146109265780633865bf3a146109515780633e4a7aac146109a357806341e70fa6146109ce57806343af463e146109f957806343d32e9c14610a3a578063461ac01914610a65578063470ef61014610a90578063525f6e1d14610abb57806359194d0c14610ae657806359d5335b14610b115780635ed411e514610b3c578063660db5a514610b7f578063667d3a4b14610bae57806367ee5f0914610bef57806369188a2c14610c1a5780636a5c2cf214610c455780636bb9b9ab14610c9c5780636f0b518014610cf35780636f443a5014610d2957806370a0823114610d5857806370b2a30f14610daf578063729d6f3214610df05780637eb0fab914610e475780637fb181c114610e8857806384900b0414610eb3578063863e76db14610f0a57806390825c2814610f3557806395d89b4114610f6057806397e6c7f714610ff0578063997664d71461101b5780639eca672c14611046578063a4f3fa101461109d578063a6f2ae3a146110c8578063a9059cbb146110d2578063abbbf45114611137578063b29c662a14611162578063b520c7e7146111b9578063b9e5a03b146111e4578063bb4450841461120f578063bd15f1b514611266578063bdb66236146112a7578063c10a74bf146112b1578063c4882e44146112dc578063c9116b69146112f3578063cac497721461131e578063cb3d6b5f14611375578063ccb60c6a146113a0578063cf71d2bb146113e1578063cfe675871461140c578063d3dcc17514611437578063d52f71221461148e578063d5d44d80146114b9578063d8f3790f14611510578063d95ffc0814611567578063d9a6ba7014611592578063dc1ab379146115bd578063dc73e49c14611614578063e4849b321461162b578063e6dd515514611658578063eaab459714611683578063eb63e140146116ae578063eb95f0bf146116d9578063ed18838c14611704578063f1a9af891461171b578063f5f6a53814611746578063f80bbedc1461179d578063ffe1c0b0146117e8575b005b34801561041657600080fd5b5061041f611813565b6040518082815260200191505060405180910390f35b34801561044157600080fd5b5061044a611819565b6040518082815260200191505060405180910390f35b34801561046c57600080fd5b506104a1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118e6565b6040518082815260200191505060405180910390f35b3480156104c357600080fd5b506104cc6118fe565b604051808215151515815260200191505060405180910390f35b3480156104f257600080fd5b506104fb611911565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561053b578082015181840152602081019050610520565b50505050905090810190601f1680156105685780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561058257600080fd5b5061058b6119af565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105d957600080fd5b506105e26119d5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561063057600080fd5b5061066f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506119fb565b604051808215151515815260200191505060405180910390f35b34801561069557600080fd5b5061069e611aed565b6040518082815260200191505060405180910390f35b3480156106c057600080fd5b506106c9611afb565b6040518082815260200191505060405180910390f35b3480156106eb57600080fd5b50610720600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b01565b6040518082815260200191505060405180910390f35b34801561074257600080fd5b5061074b611b19565b005b34801561075957600080fd5b50610762611ca8565b6040518082815260200191505060405180910390f35b34801561078457600080fd5b5061078d611cd4565b6040518082815260200191505060405180910390f35b3480156107af57600080fd5b506107b8611cda565b6040518082815260200191505060405180910390f35b3480156107da57600080fd5b50610839600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ce3565b604051808215151515815260200191505060405180910390f35b34801561085f57600080fd5b50610868611e7a565b6040518082815260200191505060405180910390f35b34801561088a57600080fd5b50610893611f22565b6040518082815260200191505060405180910390f35b3480156108b557600080fd5b506108be611f28565b005b3480156108cc57600080fd5b506108d56120aa565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b34801561090357600080fd5b5061090c6120c0565b604051808215151515815260200191505060405180910390f35b34801561093257600080fd5b5061093b6120d3565b6040518082815260200191505060405180910390f35b34801561095d57600080fd5b506109a16004803603810190808060c00190600680602002604051908101604052809291908260066020028082843782019150505050509192919290505050612125565b005b3480156109af57600080fd5b506109b8612328565b6040518082815260200191505060405180910390f35b3480156109da57600080fd5b506109e3612334565b6040518082815260200191505060405180910390f35b348015610a0557600080fd5b50610a246004803603810190808035906020019092919050505061233a565b6040518082815260200191505060405180910390f35b348015610a4657600080fd5b50610a4f612352565b6040518082815260200191505060405180910390f35b348015610a7157600080fd5b50610a7a61237d565b6040518082815260200191505060405180910390f35b348015610a9c57600080fd5b50610aa5612383565b6040518082815260200191505060405180910390f35b348015610ac757600080fd5b50610ad0612388565b6040518082815260200191505060405180910390f35b348015610af257600080fd5b50610afb61238e565b6040518082815260200191505060405180910390f35b348015610b1d57600080fd5b50610b266123ad565b6040518082815260200191505060405180910390f35b348015610b4857600080fd5b50610b7d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123b2565b005b348015610b8b57600080fd5b50610b946126be565b604051808215151515815260200191505060405180910390f35b348015610bba57600080fd5b50610bd9600480360381019080803590602001909291905050506126d1565b6040518082815260200191505060405180910390f35b348015610bfb57600080fd5b50610c046126e9565b6040518082815260200191505060405180910390f35b348015610c2657600080fd5b50610c2f6126f3565b6040518082815260200191505060405180910390f35b348015610c5157600080fd5b50610c86600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126f8565b6040518082815260200191505060405180910390f35b348015610ca857600080fd5b50610cdd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061278c565b6040518082815260200191505060405180910390f35b610d27600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061288c565b005b348015610d3557600080fd5b50610d3e612a37565b604051808215151515815260200191505060405180910390f35b348015610d6457600080fd5b50610d99600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a4a565b6040518082815260200191505060405180910390f35b348015610dbb57600080fd5b50610dda60048036038101908080359060200190929190505050612a93565b6040518082815260200191505060405180910390f35b348015610dfc57600080fd5b50610e31600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612abb565b6040518082815260200191505060405180910390f35b348015610e5357600080fd5b50610e7260048036038101908080359060200190929190505050612ad3565b6040518082815260200191505060405180910390f35b348015610e9457600080fd5b50610e9d612aea565b6040518082815260200191505060405180910390f35b348015610ebf57600080fd5b50610ec8612af0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610f1657600080fd5b50610f1f612b16565b6040518082815260200191505060405180910390f35b348015610f4157600080fd5b50610f4a612b1f565b6040518082815260200191505060405180910390f35b348015610f6c57600080fd5b50610f75612b42565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610fb5578082015181840152602081019050610f9a565b50505050905090810190601f168015610fe25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610ffc57600080fd5b50611005612be0565b6040518082815260200191505060405180910390f35b34801561102757600080fd5b50611030612c57565b6040518082815260200191505060405180910390f35b34801561105257600080fd5b50611087600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c5d565b6040518082815260200191505060405180910390f35b3480156110a957600080fd5b506110b2612f4c565b6040518082815260200191505060405180910390f35b6110d0612f64565b005b3480156110de57600080fd5b5061111d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612f75565b604051808215151515815260200191505060405180910390f35b34801561114357600080fd5b5061114c612f8d565b6040518082815260200191505060405180910390f35b34801561116e57600080fd5b50611177612fea565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156111c557600080fd5b506111ce613010565b6040518082815260200191505060405180910390f35b3480156111f057600080fd5b506111f9613028565b6040518082815260200191505060405180910390f35b34801561121b57600080fd5b50611250600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061302e565b6040518082815260200191505060405180910390f35b34801561127257600080fd5b50611291600480360381019080803590602001909291905050506130ea565b6040518082815260200191505060405180910390f35b6112af613102565b005b3480156112bd57600080fd5b506112c6613173565b6040518082815260200191505060405180910390f35b3480156112e857600080fd5b506112f1613178565b005b3480156112ff57600080fd5b5061130861330a565b6040518082815260200191505060405180910390f35b34801561132a57600080fd5b50611333613351565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561138157600080fd5b5061138a613377565b6040518082815260200191505060405180910390f35b3480156113ac57600080fd5b506113cb600480360381019080803590602001909291905050506135b5565b6040518082815260200191505060405180910390f35b3480156113ed57600080fd5b506113f66135cd565b6040518082815260200191505060405180910390f35b34801561141857600080fd5b506114216135d9565b6040518082815260200191505060405180910390f35b34801561144357600080fd5b5061144c61362b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561149a57600080fd5b506114a3613651565b6040518082815260200191505060405180910390f35b3480156114c557600080fd5b506114fa600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613698565b6040518082815260200191505060405180910390f35b34801561151c57600080fd5b50611551600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506136b0565b6040518082815260200191505060405180910390f35b34801561157357600080fd5b5061157c61375e565b6040518082815260200191505060405180910390f35b34801561159e57600080fd5b506115a761376e565b6040518082815260200191505060405180910390f35b3480156115c957600080fd5b506115fe600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613777565b6040518082815260200191505060405180910390f35b34801561162057600080fd5b5061162961378f565b005b34801561163757600080fd5b5061165660048036038101908080359060200190929190505050613a02565b005b34801561166457600080fd5b5061166d613bec565b6040518082815260200191505060405180910390f35b34801561168f57600080fd5b50611698613bf2565b6040518082815260200191505060405180910390f35b3480156116ba57600080fd5b506116c3613bf8565b6040518082815260200191505060405180910390f35b3480156116e557600080fd5b506116ee613c2e565b6040518082815260200191505060405180910390f35b34801561171057600080fd5b50611719613cf6565b005b34801561172757600080fd5b50611730613de7565b6040518082815260200191505060405180910390f35b34801561175257600080fd5b50611787600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613df2565b6040518082815260200191505060405180910390f35b3480156117a957600080fd5b506117d26004803603810190808035906020019092919080359060200190929190505050613e0a565b6040518082815260200191505060405180910390f35b3480156117f457600080fd5b506117fd613e20565b6040518082815260200191505060405180910390f35b60195481565b6000806000806000600f600a600d5460020101019350601e60019054906101000a900460ff16156118715760045460648560640366071afd498d00000281151561185f57fe5b0481151561186957fe5b0494506118df565b611879611e7a565b9250611883612352565b9150606484606403600054600454600c540103600c54601e8702028115156118a757fe5b0460045466071afd498d00008115156118bc57fe5b0401028115156118c857fe5b049050818110156118db578194506118df565b8094505b5050505090565b60126020528060005260406000206000915090505481565b602560009054906101000a900460ff1681565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156119a75780601f1061197c576101008083540402835291602001916119a7565b820191906000526020600020905b81548152906001019060200180831161198a57829003601f168201915b505050505081565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600060165460155401905090565b600d5481565b600f6020528060005260406000206000915090505481565b6000602560009054906101000a900460ff161515611b9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f73776170206e6f7420616374697665640000000000000000000000000000000081525060200191505060405180910390fd5b42610e1060180260070260245401101515611c22576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f746f6f206561726c79000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16319050602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611ca4573d6000803e3d6000fd5b5050565b6000806000611cb5612352565b9150600290506064816064038302811515611ccc57fe5b049250505090565b610e1081565b60008054905090565b600080600080600080600080611cfa8b8b8b613e2d565b611d038b61402e565b611d0c8a61402e565b611d158b6136b0565b9650611d208b61302e565b9550611d2b8b61278c565b9450611d368a6136b0565b9350611d418a61302e565b9250611d4c8a61278c565b915088905080600560008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555080600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550611df78b888888614111565b611e038a858585614111565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a360019750505050505050509392505050565b6000806000806000809350611e8d612f4c565b9250600683039150601d54821015611ea557601d5491505b8190505b8281111515611ee757611ed860206000838152602001908152602001600020548561431990919063ffffffff16565b93508080600101915050611ea9565b600080541415611efa5760009450611f1b565b60005482600185010385811515611f0d57fe5b04811515611f1757fe5b0494505b5050505090565b60045481565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611fed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f61646d696e20726571756972656400000000000000000000000000000000000081525060200191505060405180910390fd5b60001515602560019054906101000a900460ff161515141515612078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f616c72656164792061637469766564000000000000000000000000000000000081525060200191505060405180910390fd5b6001602560016101000a81548160ff02191690831515021790555042601c819055506120a2612f4c565b601d81905550565b600360009054906101000a900463ffffffff1681565b601e60009054906101000a900460ff1681565b600080600080600092506120e5612f4c565b91508190505b8160078201111561211c576021600082815260200190815260200160002054830192508080600190039150506120eb565b82935050505090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156121d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f616c72656164792073657475700000000000000000000000000000000000000081525060200191505060405180910390fd5b8060016006811015156121e457fe5b6020020151600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260068110151561223857fe5b6020020151600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360068110151561228c57fe5b6020020151600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060056006811015156122e057fe5b6020020151600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610e10601802601e0281565b60165481565b601f6020528060005260406000206000915090505481565b6000806000541415612367576000905061237a565b60005460145481151561237657fe5b0490505b90565b601c5481565b600a81565b601d5481565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600f81565b6000602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f61646d696e20726571756972656400000000000000000000000000000000000081525060200191505060405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323ba467a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156124ff57600080fd5b505af1158015612513573d6000803e3d6000fd5b505050506040513d602081101561252957600080fd5b810190808051906020019092919050505090508015156125b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f746f6f206561726c79000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60001515602560009054906101000a900460ff16151514151561263c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f616c72656164792073657400000000000000000000000000000000000000000081525060200191505060405180910390fd5b426024819055506001602560006101000a81548160ff02191690831515021790555081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601e60006101000a81548160ff0219169083151502179055505050565b602560019054906101000a900460ff1681565b60216020528060005260406000206000915090505481565b6000601754905090565b601e81565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612783846136b0565b01039050919050565b600080601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d7612f4c565b146127e3576000612824565b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020545b905080600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601f6000612873612f4c565b8152602001908152602001600020540203915050919050565b6000806000806000806000806000806000806128a78d61402e565b6128af611819565b9b50349a508a601360008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555061290a8d61433a565b60648b81151561291657fe5b04995061292d60028b61450990919063ffffffff16565b9850612943600a8b61450990919063ffffffff16565b9750612959600f8b61450990919063ffffffff16565b9650612970600d548b61450990919063ffffffff16565b95508587898b010101945061298e858c61454790919063ffffffff16565b93508a601554016015819055508a602160006129a8612f4c565b8152602001908152602001600020600082825401925050819055506129cf89898989614568565b601e60009054906101000a900460ff16156129ef576129ee848d614592565b5b6129f88d6136b0565b9250612a038d61302e565b9150612a0e8d61278c565b9050612a1b8d858e6147d7565b50612a288d848484614111565b50505050505050505050505050565b601e60019054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080612a9e612352565b9050612ab3818461450990919063ffffffff16565b915050919050565b60106020528060005260406000206000915090505481565b602080528060005260406000206000915090505481565b60245481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e1060180281565b6000612b3d612b2c613bf8565b60005461450990919063ffffffff16565b905090565b60028054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612bd85780601f10612bad57610100808354040283529160200191612bd8565b820191906000526020600020905b815481529060010190602001808311612bbb57829003601f168201915b505050505081565b6000806000806000809350612bf3612f4c565b9250600683039150601d54821015612c0b57601d5491505b8190505b8281111515612c4d57612c3e60206000838152602001908152602001600020548561431990919063ffffffff16565b93508080600101915050612c0f565b8394505050505090565b60175481565b600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612d25576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f42616e6b204f6e6c79000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b612d2e836136b0565b90506000811415612d425760009150612f46565b612d9481600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a2090919063ffffffff16565b600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e29600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261431990919063ffffffff16565b600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e9288d7282856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506000604051808303818588803b158015612f2957600080fd5b505af1158015612f3d573d6000803e3d6000fd5b50505050508091505b50919050565b6000610e1060180242811515612f5e57fe5b04905090565b6000339050612f728161288c565b50565b6000612f82338484611ce3565b506001905092915050565b6000601e60019054906101000a900460ff161515612fae5760009050612fe7565b612fc8601c54610e1060180261431990919063ffffffff16565b421115612fd85760009050612fe7565b42601c54610e10601802010390505b90565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061301a6135d9565b6130226120d3565b01905090565b60155481565b600080613039613c2e565b9050601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002054600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601a6000848152602001908152602001600020540203915050919050565b60226020528060005260406000206000915090505481565b6000806000803493506002600a01600a850281151561311d57fe5b049250613133838561454790919063ffffffff16565b915061313d611819565b905061314c8284600080614568565b601e60009054906101000a900460ff161561316d5761316c600082614592565b5b50505050565b600281565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561323d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f61646d696e20726571756972656400000000000000000000000000000000000081525060200191505060405180910390fd5b602560019054906101000a900460ff168015613271575061326e601c54610e1060180261431990919063ffffffff16565b42115b15156132e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f746f6f206561726c7920746f2064697361626c6520526f756e6430000000000081525060200191505060405180910390fd5b6000601e60016101000a81548160ff0219169083151502179055506000600d81905550565b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000339150602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515613444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6465762e205465616d206f6e6c7900000000000000000000000000000000000081525060200191505060405180910390fd5b61344d826136b0565b9050600081141561346157600092506135b0565b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550613500600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261431990919063ffffffff16565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156135ab573d6000803e3d6000fd5b508092505b505090565b60186020528060005260406000206000915090505481565b610e1060180260070281565b600080600080600092506135eb612f4c565b91508190505b81600782011115613622576022600082815260200190815260200160002054830192508080600190039150506135f1565b82935050505090565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b600e6020528060005260406000206000915090505481565b6000613757600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613749600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460195461450990919063ffffffff16565b614a6490919063ffffffff16565b9050919050565b6000613769336136b0565b905090565b610e1060180281565b60116020528060005260406000206000915090505481565b600080600080600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411151561384a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6e6f74206f776e20616e7920746f6b656e00000000000000000000000000000081525060200191505060405180910390fd5b602560009054906101000a900460ff1615156138ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f73776170206e6f7420616374697665640000000000000000000000000000000081525060200191505060405180910390fd5b339250600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054915061391d8383614aa8565b9050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634c2516de8284866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001925050506000604051808303818588803b1580156139e457600080fd5b505af11580156139f8573d6000803e3d6000fd5b5050505050505050565b600080600080600080600080600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111515613ac3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6e6f74206f776e20616e7920746f6b656e00000000000000000000000000000081525060200191505060405180910390fd5b613acc3361402e565b339650613ad8876136b0565b9550613ae38761302e565b9450613aee8761278c565b9350613afa8789614aa8565b92506064613b1260028561450990919063ffffffff16565b811515613b1b57fe5b049150613b31828461454790919063ffffffff16565b905082601654016016819055508260226000613b4b612f4c565b815260200190815260200160002060008282540192505081905550613b79818761431990919063ffffffff16565b955080601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550613bd487878787614111565b613be2826000806000614568565b5050505050505050565b600c5481565b60145481565b6000806000613c05611819565b9150600f600a600d54600201010190508060640360648302811515613c2657fe5b049250505090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663eb95f0bf6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015613cb657600080fd5b505af1158015613cca573d6000803e3d6000fd5b505050506040513d6020811015613ce057600080fd5b8101908080519060200190929190505050905090565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613dbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f61646d696e20726571756972656400000000000000000000000000000000000081525060200191505060405180910390fd5b601e60009054906101000a900460ff1615601e60006101000a81548160ff021916908315150217905550565b66071afd498d000081565b60136020528060005260406000206000915090505481565b60008183811515613e1757fe5b04905092915050565b68138400eca364a0000081565b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515613ee4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6e6f7420656e6f75676820746f207472616e736665720000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151561402957613fa881600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461454790919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614036612f4c565b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414151561410e57614085612f4c565b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50565b600061411b613c2e565b905061418384614175600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460195461450990919063ffffffff16565b614a6490919063ffffffff16565b600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601a6000848152602001908152602001600020540203601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000208190555081600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601f60006142be612f4c565b8152602001908152602001600020540203601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050565b600080828401905083811015151561433057600080fd5b8091505092915050565b601e60019054906101000a900460ff1615806144925750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166347618cb282601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561445557600080fd5b505af1158015614469573d6000803e3d6000fd5b505050506040513d602081101561447f57600080fd5b8101908080519060200190929190505050155b1515614506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f4c696d697465640000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b50565b600080600084141561451e5760009150614540565b828402905082848281151561452f57fe5b0414151561453c57600080fd5b8091505b5092915050565b60008083831115151561455957600080fd5b82840390508091505092915050565b61457184614c42565b61457a83614d1e565b61458382614e61565b61458c81614f4e565b50505050565b600080600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b7e097736040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561461e57600080fd5b505af1158015614632573d6000803e3d6000fd5b505050506040513d602081101561464857600080fd5b8101908080519060200190929190505050935083600e6000602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506146f5602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166136b0565b9250600c546000548688860181151561470a57fe5b04011115614717576147cf565b614742602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661302e565b915061476f602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661278c565b905061479e602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684876147d7565b506147ce602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660008484614111565b5b505050505050565b60008060001515602560009054906101000a900460ff16151514151561488b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f7377617020616374697665642c2073746f70206d696e74696e67206e6577207481526020017f6f6b656e7300000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60011515602560019054906101000a900460ff161515141515614916576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f746f6b656e2073616c65206e6f7420726561647900000000000000000000000081525060200191505060405180910390fd5b6149208484613e0a565b90506149378460145461431990919063ffffffff16565b601481905550600c546000548201111561496557614962600054600c5461454790919063ffffffff16565b90505b6149b781600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461431990919063ffffffff16565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a0f8160005461431990919063ffffffff16565b600081905550809150509392505050565b600080828401905060008312158015614a395750838112155b80614a4f5750600083128015614a4e57508381125b5b1515614a5a57600080fd5b8091505092915050565b600080828403905060008312158015614a7d5750838113155b80614a935750600083128015614a9257508381135b5b1515614a9e57600080fd5b8091505092915050565b60008082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515614b62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f6e6f7420656e6f75676820746f206275726e000000000000000000000000000081525060200191505060405180910390fd5b614b6b83612a93565b9050614b828160145461454790919063ffffffff16565b601481905550614bda83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461454790919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614c328360005461454790919063ffffffff16565b6000819055508091505092915050565b614cb681600e6000602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a6490919063ffffffff16565b600e6000602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b600080600080841415614d3057614e5b565b83601760008282540192505081905550614d48612f4c565b9250614d7060206000858152602001908152602001600020548561431990919063ffffffff16565b6020600085815260200190815260200160002081905550600080541415614d9f57614d9a84614c42565b614e5a565b614db560005485811515614daf57fe5b06614c42565b60005484811515614dc257fe5b049150614dda8260195461431990919063ffffffff16565b601981905550614de8613c2e565b905081601a600083815260200190815260200160002060008282540192505081905550836018600083815260200190815260200160002060008282540192505081905550601f6000848152602001908152602001600020548201601f6000858152602001908152602001600020819055505b5b50505050565b600080821415614e7057614f4a565b339050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e947962b83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506000604051808303818588803b158015614f3057600080fd5b505af1158015614f44573d6000803e3d6000fd5b50505050505b5050565b600080821415614f5d576150f6565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbe2e296836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016000604051808303818588803b158015614fe357600080fd5b505af1158015614ff7573d6000803e3d6000fd5b5050505050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663480bc31f6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561508257600080fd5b505af1158015615096573d6000803e3d6000fd5b505050506040513d60208110156150ac57600080fd5b8101908080519060200190929190505050905068138400eca364a00000811015156150f5576000601e60016101000a81548160ff0219169083151502179055506000600d819055505b5b50505600a165627a7a72305820cd844516d6a5d4bc8a9edce2e403ccb387363b19f9ee5cb7a7ddf1be45df87ee0029

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000096504e1f83e380984b1d4eccc0e8b9f0559b2ad2

-----Decoded View---------------
Arg [0] : _devTeam (address): 0x96504e1f83e380984B1d4ECCC0E8B9f0559b2Ad2

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000096504e1f83e380984b1d4eccc0e8b9f0559b2ad2


Swarm Source

bzzr://cd844516d6a5d4bc8a9edce2e403ccb387363b19f9ee5cb7a7ddf1be45df87ee
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.