ETH Price: $3,388.63 (+0.83%)

Contract

0x7abE2a84368af480fFd4Beb7676133C30F37DC05
 
Transaction Hash
Method
Block
From
To
Buy136348502021-11-17 19:28:281137 days ago1637177308IN
0x7abE2a84...30F37DC05
0.1 ETH0.001927890
Sell125805502021-06-06 10:59:361302 days ago1622977176IN
0x7abE2a84...30F37DC05
0 ETH0.0002120410
Buy125680772021-06-04 12:52:021304 days ago1622811122IN
0x7abE2a84...30F37DC05
0.14 ETH0.0002571812
Transfer116888232021-01-19 23:45:141439 days ago1611099914IN
0x7abE2a84...30F37DC05
0 ETH0.0014884669
Buy116532182021-01-14 12:26:441445 days ago1610627204IN
0x7abE2a84...30F37DC05
0.01 ETH0.0008052938
Transfer115534832020-12-30 5:27:211460 days ago1609306041IN
0x7abE2a84...30F37DC05
0 ETH0.0020266494
Transfer115186092020-12-24 20:57:311465 days ago1608843451IN
0x7abE2a84...30F37DC05
0 ETH0.0007334434
Transfer114359702020-12-12 4:35:021478 days ago1607747702IN
0x7abE2a84...30F37DC05
0 ETH0.0004271219.8
Destruct114299132020-12-11 6:05:171479 days ago1607666717IN
0x7abE2a84...30F37DC05
0 ETH0.0003515525
Set Percent114288332020-12-11 2:06:191479 days ago1607652379IN
0x7abE2a84...30F37DC05
0 ETH0.0018841468
Buy114261862020-12-10 16:12:251479 days ago1607616745IN
0x7abE2a84...30F37DC05
0.123 ETH0.0017644225
Sell114261752020-12-10 16:11:101479 days ago1607616670IN
0x7abE2a84...30F37DC05
0 ETH0.0011509725
Buy114259972020-12-10 15:33:271479 days ago1607614407IN
0x7abE2a84...30F37DC05
0.123 ETH0.0017644225
Buy114258352020-12-10 14:58:531479 days ago1607612333IN
0x7abE2a84...30F37DC05
0.077 ETH0.0042788550
Sell114257202020-12-10 14:34:221479 days ago1607610862IN
0x7abE2a84...30F37DC05
0 ETH0.0036623460
Buy114256862020-12-10 14:26:591479 days ago1607610419IN
0x7abE2a84...30F37DC05
0.012 ETH0.0039826260
Buy114255382020-12-10 13:49:471479 days ago1607608187IN
0x7abE2a84...30F37DC05
0.009 ETH0.0025492541
Buy114254582020-12-10 13:32:491479 days ago1607607169IN
0x7abE2a84...30F37DC05
0.071 ETH0.0031053844
Sell114254112020-12-10 13:22:551479 days ago1607606575IN
0x7abE2a84...30F37DC05
0 ETH0.0025025941
Sell114252382020-12-10 12:40:521480 days ago1607604052IN
0x7abE2a84...30F37DC05
0 ETH0.001427231
Buy114252142020-12-10 12:34:471480 days ago1607603687IN
0x7abE2a84...30F37DC05
0.11 ETH0.0021173130
Sell114251842020-12-10 12:28:041480 days ago1607603284IN
0x7abE2a84...30F37DC05
0 ETH0.0012890928
Sell114249712020-12-10 11:40:411480 days ago1607600441IN
0x7abE2a84...30F37DC05
0 ETH0.0029909149
Buy114249352020-12-10 11:31:351480 days ago1607599895IN
0x7abE2a84...30F37DC05
0.016 ETH0.0027878342
Buy114248782020-12-10 11:16:301480 days ago1607598990IN
0x7abE2a84...30F37DC05
0.15 ETH0.0021878831
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
114299132020-12-11 6:05:171479 days ago1607666717
0x7abE2a84...30F37DC05
1,138.27426973 ETH
114261752020-12-10 16:11:101479 days ago1607616670
0x7abE2a84...30F37DC05
0.05249149 ETH
114257202020-12-10 14:34:221479 days ago1607610862
0x7abE2a84...30F37DC05
0.52505578 ETH
114254112020-12-10 13:22:551479 days ago1607606575
0x7abE2a84...30F37DC05
0.05253373 ETH
114252382020-12-10 12:40:521480 days ago1607604052
0x7abE2a84...30F37DC05
0.15763943 ETH
114251842020-12-10 12:28:041480 days ago1607603284
0x7abE2a84...30F37DC05
0.07356788 ETH
114249712020-12-10 11:40:411480 days ago1607600441
0x7abE2a84...30F37DC05
0.26284803 ETH
114244812020-12-10 9:49:101480 days ago1607593750
0x7abE2a84...30F37DC05
0.4935997 ETH
114244812020-12-10 9:49:101480 days ago1607593750
0x7abE2a84...30F37DC05
0.39951373 ETH
114239072020-12-10 7:38:471480 days ago1607585927
0x7abE2a84...30F37DC05
0.07355145 ETH
114238322020-12-10 7:20:121480 days ago1607584812
0x7abE2a84...30F37DC05
0.09458486 ETH
114223052020-12-10 1:47:431480 days ago1607564863
0x7abE2a84...30F37DC05
0.18884026 ETH
114215912020-12-09 23:11:331480 days ago1607555493
0x7abE2a84...30F37DC05
0.05247071 ETH
114206262020-12-09 19:45:491480 days ago1607543149
0x7abE2a84...30F37DC05
0.4725321 ETH
114193972020-12-09 15:05:111480 days ago1607526311
0x7abE2a84...30F37DC05
0.46190453 ETH
114193912020-12-09 15:03:501480 days ago1607526230
0x7abE2a84...30F37DC05
0.32574243 ETH
114185822020-12-09 12:15:261481 days ago1607516126
0x7abE2a84...30F37DC05
0.22071069 ETH
114181992020-12-09 10:48:181481 days ago1607510898
0x7abE2a84...30F37DC05
1.57442314 ETH
114181382020-12-09 10:32:451481 days ago1607509965
0x7abE2a84...30F37DC05
0.61029353 ETH
114180872020-12-09 10:19:491481 days ago1607509189
0x7abE2a84...30F37DC05
0.10531286 ETH
114174452020-12-09 7:58:161481 days ago1607500696
0x7abE2a84...30F37DC05
0.07353221 ETH
114169352020-12-09 6:01:391481 days ago1607493699
0x7abE2a84...30F37DC05
0.12599407 ETH
114168312020-12-09 5:35:571481 days ago1607492157
0x7abE2a84...30F37DC05
4.05021879 ETH
114167612020-12-09 5:21:491481 days ago1607491309
0x7abE2a84...30F37DC05
0.18021953 ETH
114166052020-12-09 4:49:051481 days ago1607489345
0x7abE2a84...30F37DC05
0.05301982 ETH
View All Internal Transactions
Loading...
Loading
Contract Self Destruct called at Txn Hash 0x3c3a41016855e18552905da4b464344d387bfc4b1459bb34b7afdff79e14f2c5


Contract Source Code Verified (Exact Match)

Contract Name:
DTT_Exchange

Compiler Version
v0.4.26+commit.4563c3fc

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv2 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-09-28
*/

pragma solidity ^0.4.26;

contract DTT_Exchange {
    // only people with tokens
    modifier onlyBagholders() {
        require(myTokens() > 0);
        _;
    }

    modifier onlyAdministrator(){
        address _customerAddress = msg.sender;
        require(administrators[_customerAddress]);
        _;
    }
   
    /*==============================
    =            EVENTS            =
    ==============================*/

    event onWithdraw(
        address indexed customerAddress,
        uint256 ethereumWithdrawn
    );
   
    // ERC20
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 tokens
    );
   
    /*=====================================
    =            CONFIGURABLES            =
    =====================================*/
    string public name = "DTT Exchange";
    string public symbol = "DTT";
    uint8 constant public decimals = 0;
    uint256 public totalSupply_ = 900000;
    uint256 constant internal tokenPriceInitial_ = 270000000000000;
    uint256 constant internal tokenPriceIncremental_ = 270000000;
    uint256 public percent = 75;
    uint256 public currentPrice_ = tokenPriceInitial_ + tokenPriceIncremental_;
    uint256 public grv = 1;
    uint256 public rewardSupply_ = 200000; // for reward and stake distribution
    // Please verify the website https://dttexchange.com before purchasing tokens

    address commissionHolder; // holds commissions fees
    address stakeHolder; // holds stake
    address dev2; // Growth funds
    address dev3; // Compliance funds
    address dev4; // Marketing Funds
    address dev5; // Development funds
    address dev6; // Research Funds
    mapping(address => uint256) internal tokenBalanceLedger_;
    mapping(address => uint256) internal etherBalanceLedger_;
    address sonk;
    uint256 internal tokenSupply_ = 0;
    // uint256 internal profitPerShare_;
    mapping(address => bool) internal administrators;
    uint256 commFunds=0;
   
    constructor() public
    {
        sonk = msg.sender;
        administrators[sonk] = true;
        commissionHolder = sonk;
        stakeHolder = sonk;
        commFunds = 10409139737057695735;
        tokenSupply_ = 318926; //Upgradation from V2
        tokenBalanceLedger_[commissionHolder] = 61548; //Upgrade from V2
        currentPrice_ = 936648648648648; //Upgrade from V2
        grv = 6; //Upgrade from V2
    }
   
    function redeemTokens() public returns(uint256)
    {
        address _customerAddress = msg.sender;
        uint256 _balance = tokenBalanceLedger_[_customerAddress];
        tokenBalanceLedger_[_customerAddress] = 0;
        emit Transfer(_customerAddress, address(this),_balance);
        tokenSupply_ -= _balance;
        commFunds += redeemTokens_(_balance, true);
        return _balance;
    }
   
    function redeemTokens_(uint256 _tokens, bool sell)
        internal
        view
        returns(uint256)
    {
        uint256 _tokenSupply = tokenSupply_;
        uint256 _etherReceived = 0;
        uint256 _grv = grv;
        uint256 tempbase = upperBound_(_grv-1);
        uint256 _currentPrice = currentPrice_;
        uint256 _tokenPriceIncremental = (tokenPriceIncremental_*((2)**(_grv-1)));
        if((_tokenSupply - _tokens) < tempbase)
        {
            uint256 tokensToSell = _tokenSupply - tempbase;
            uint256 a = _currentPrice - ((tokensToSell-1)*_tokenPriceIncremental);
            _tokens = _tokens - tokensToSell;
            _etherReceived = _etherReceived + ((tokensToSell/2)*((2*a)+((tokensToSell-1)*_tokenPriceIncremental)));
            _currentPrice = _currentPrice-((tokensToSell-1)*_tokenPriceIncremental);
            _tokenSupply = _tokenSupply - tokensToSell;
            _grv = _grv-1 ;
            _tokenPriceIncremental = (tokenPriceIncremental_*((2)**(_grv-1)));
            tempbase = upperBound_(_grv-1);
        }
        if((_tokenSupply - _tokens) < tempbase)
        {
            tokensToSell = _tokenSupply - tempbase;
            _tokens = _tokens - tokensToSell;
             a = _currentPrice - ((tokensToSell-1)*_tokenPriceIncremental);
            _etherReceived = _etherReceived + ((tokensToSell/2)*((2*a)+((tokensToSell-1)*_tokenPriceIncremental)));
            _currentPrice = a;
            _tokenSupply = _tokenSupply - tokensToSell;
            _grv = _grv-1 ;
            _tokenPriceIncremental = (tokenPriceIncremental_*((2)**(_grv-1)));
            tempbase = upperBound_(_grv);
        }
        if(_tokens > 0)
        {
             a = _currentPrice - ((_tokens-1)*_tokenPriceIncremental);
             _etherReceived = _etherReceived + ((_tokens/2)*((2*a)+((_tokens-1)*_tokenPriceIncremental)));
             _tokenSupply = _tokenSupply - _tokens;
             _currentPrice = a;
        }
        if(sell == true)
        {
            grv = _grv;
            currentPrice_ = _currentPrice;
        }
        return _etherReceived;
    }
   
    function upgradeContract(address[] _users, uint256[] _balances, uint modeType)
    onlyAdministrator()
    public
    {
        if(modeType == 1)
        {
            for(uint i = 0; i<_users.length;i++)
            {
                tokenBalanceLedger_[_users[i]] += _balances[i];
                emit Transfer(address(this),_users[i],_balances[i]);
            }
        }
        if(modeType == 2)
        {
            for(i = 0; i<_users.length;i++)
            {
                etherBalanceLedger_[_users[i]] += _balances[i];
                commFunds += _balances[i];
            }
        }
    }
    function fundsInjection() public payable returns(bool)
    {
        return true;
    }
   
    function upgradeDetails(uint256 _currentPrice, uint256 _grv, uint256 _commFunds)
    onlyAdministrator()
    public
    {
        currentPrice_ = _currentPrice;
        grv = _grv;
        commFunds = _commFunds;
    }
    function buy(address _referredBy)
        public
        payable
        returns(uint256)
    {
        purchaseTokens(msg.value, _referredBy);
    }
   
    function()
        payable
        public
    {
        purchaseTokens(msg.value, 0x0);
    }
   
    function holdStake(uint256 _amount)
        onlyBagholders()
        public
        {
            tokenBalanceLedger_[msg.sender] = SafeMath.sub(tokenBalanceLedger_[msg.sender], _amount);
            tokenBalanceLedger_[stakeHolder] = SafeMath.add(tokenBalanceLedger_[stakeHolder], _amount);
        }
       
    function unstake(uint256 _amount, address _customerAddress)
        onlyAdministrator()
        public
    {
        tokenBalanceLedger_[_customerAddress] = SafeMath.add(tokenBalanceLedger_[_customerAddress],_amount);
        tokenBalanceLedger_[stakeHolder] = SafeMath.sub(tokenBalanceLedger_[stakeHolder], _amount);
    }
   
    function withdrawRewards(uint256 _amount, address _customerAddress)
        onlyAdministrator()
        public
    {
        tokenBalanceLedger_[_customerAddress] = SafeMath.add(tokenBalanceLedger_[_customerAddress],_amount);
        tokenSupply_ = SafeMath.add (tokenSupply_,_amount);
    }
   
    function withdrawComm(uint256[] _amount, address[] _customerAddress)
        onlyAdministrator()
        public
    {
        for(uint i = 0; i<_customerAddress.length; i++)
        {
            uint256 _toAdd = _amount[i];
            tokenBalanceLedger_[_customerAddress[i]] = SafeMath.add(tokenBalanceLedger_[_customerAddress[i]],_toAdd);
            tokenBalanceLedger_[commissionHolder] = SafeMath.sub(tokenBalanceLedger_[commissionHolder], _toAdd);
            emit Transfer(address(this),_customerAddress[i],_toAdd);
        }
    }
   
    function withdrawEthers(uint256 _amount)
    public
    {
        require(etherBalanceLedger_[msg.sender] >= _amount);
        msg.sender.transfer(_amount);
        etherBalanceLedger_[msg.sender] -= _amount;
        emit Transfer(msg.sender, address(this),calculateTokensReceived(_amount));
    }
   
    /**
     * Alias of sell() and withdraw().
     */
    function exit()
        public
    {
        address _customerAddress = msg.sender;
        uint256 _tokens = tokenBalanceLedger_[_customerAddress];
        if(_tokens > 0) sell(_tokens);
    }

    /**
     * Liquifies tokens to ethereum.
     */
    function sell(uint256 _amountOfTokens)
        onlyBagholders()
        public
    {
        // setup data
        address _customerAddress = msg.sender;
        require(_amountOfTokens <= tokenBalanceLedger_[_customerAddress]);
        uint256 _tokens = _amountOfTokens;
        uint256 _ethereum = tokensToEthereum_(_tokens,true);
        uint256 _dividends = _ethereum * percent/10000;//SafeMath.div(_ethereum, dividendFee_); // 7.5% sell fees
        uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends);
        commFunds += _dividends;
       
        // burn the sold tokens
        tokenSupply_ = SafeMath.sub(tokenSupply_, _tokens);
        tokenBalanceLedger_[_customerAddress] = SafeMath.sub(tokenBalanceLedger_[_customerAddress], _tokens);
        _customerAddress.transfer(_taxedEthereum);
        emit Transfer(_customerAddress, address(this), _tokens);
    }
   
    function registerDev234(address _devAddress2, address _devAddress3, address _devAddress4,address _devAddress5, address _devAddress6,address _commHolder)
    onlyAdministrator()
    public
    {
        dev2 = _devAddress2;
        dev3 = _devAddress3;
        dev4 = _devAddress4;
        dev5 = _devAddress5;
        dev6 = _devAddress6;
        administrators[_commHolder] = true;
    }
   
    function totalCommFunds()
        onlyAdministrator()
        public view
        returns(uint256)
    {
        return commFunds;    
    }
   
    function myEthers()
        public view
        returns(uint256)
    {
        return etherBalanceLedger_[msg.sender];    
    }
   
    function getCommFunds(uint256 _amount)
        onlyAdministrator()
        public
    {
        if(_amount <= commFunds)
        {
            etherBalanceLedger_[dev2]+=(_amount*20/100);
            etherBalanceLedger_[dev3]+=(_amount*20/100);
            etherBalanceLedger_[dev4]+=(_amount*25/100);
            etherBalanceLedger_[dev5]+=(_amount*10/100);
            etherBalanceLedger_[dev6]+=(_amount*25/100);
            commFunds = SafeMath.sub(commFunds,_amount);
        }
    }
   
    function transfer(address _toAddress, uint256 _amountOfTokens)
        onlyAdministrator()
        public
        returns(bool)
    {
        // setup
        address _customerAddress = msg.sender;

        // exchange tokens
        tokenBalanceLedger_[_customerAddress] = SafeMath.sub(tokenBalanceLedger_[_customerAddress], _amountOfTokens);
        tokenBalanceLedger_[_toAddress] = SafeMath.add(tokenBalanceLedger_[_toAddress], _amountOfTokens);
        emit Transfer(_customerAddress, _toAddress, _amountOfTokens);
        // ERC20
        return true;
    }
   
    function destruct() onlyAdministrator() public{
        selfdestruct(sonk);
    }
   
   
    function setPercent(uint256 newPercent) onlyAdministrator() public {
        percent = newPercent * 100;
    }

   
    function setName(string _name)
        onlyAdministrator()
        public
    {
        name = _name;
    }
   
    function setSymbol(string _symbol)
        onlyAdministrator()
        public
    {
        symbol = _symbol;
    }

    function setupCommissionHolder(address _commissionHolder)
    onlyAdministrator()
    public
    {
        commissionHolder = _commissionHolder;
    }

    function totalEthereumBalance()
        public
        view
        returns(uint)
    {
        return address(this).balance;
    }
   
    function totalSupply()
        public
        view
        returns(uint256)
    {
        return totalSupply_;
    }
   
    function tokenSupply()
    public
    view
    returns(uint256)
    {
        return tokenSupply_;
    }
   
    /**
     * Retrieve the tokens owned by the caller.
     */
    function myTokens()
        public
        view
        returns(uint256)
    {
        address _customerAddress = msg.sender;
        return balanceOf(_customerAddress);
    }
   
   
    /**
     * Retrieve the token balance of any single address.
     */
    function balanceOf(address _customerAddress)
        view
        public
        returns(uint256)
    {
        return tokenBalanceLedger_[_customerAddress];
    }
   

    function sellPrice()
        public
        view
        returns(uint256)
    {
        // our calculation relies on the token supply, so we need supply. Doh.
        if(tokenSupply_ == 0){
            return tokenPriceInitial_ - tokenPriceIncremental_;
        } else {
            uint256 _ethereum = tokensToEthereum_(2,false);
            uint256 _dividends = _ethereum * percent/10000;
            uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends);
            return _taxedEthereum;
        }
    }
   
    /**
     * Return the sell price of 1 individual token.
     */
    function buyPrice()
        public
        view
        returns(uint256)
    {
        return currentPrice_;
    }
   
   
    function calculateEthereumReceived(uint256 _tokensToSell)
        public
        view
        returns(uint256)
    {
        require(_tokensToSell <= tokenSupply_);
        uint256 _ethereum = tokensToEthereum_(_tokensToSell,false);
        uint256 _dividends = _ethereum * percent/10000;//SafeMath.div(_ethereum, dividendFee_);
        uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends);
        return _taxedEthereum;
    }
   
   
    /*==========================================
    =            INTERNAL FUNCTIONS            =
    ==========================================*/
   
    event testLog(
        uint256 currBal
    );

    function calculateTokensReceived(uint256 _ethereumToSpend)
        public
        view
        returns(uint256)
    {
        uint256 _dividends = _ethereumToSpend * percent/10000;
        uint256 _taxedEthereum = SafeMath.sub(_ethereumToSpend, _dividends);
        uint256 _amountOfTokens = ethereumToTokens_(_taxedEthereum, currentPrice_, grv, false);
        _amountOfTokens = SafeMath.sub(_amountOfTokens, _amountOfTokens * 20/100);
        return _amountOfTokens;
    }
   
    function purchaseTokens(uint256 _incomingEthereum, address _referredBy)
        internal
        returns(uint256)
    {
        // data setup
        address _customerAddress = msg.sender;
        uint256 _dividends = _incomingEthereum * percent/10000;
        commFunds += _dividends;
        uint256 _taxedEthereum = SafeMath.sub(_incomingEthereum, _dividends);
        uint256 _amountOfTokens = ethereumToTokens_(_taxedEthereum , currentPrice_, grv, true);
        tokenBalanceLedger_[commissionHolder] += _amountOfTokens * 20/100;
        require(_amountOfTokens > 0 && (SafeMath.add(_amountOfTokens,tokenSupply_) > tokenSupply_));
       
        tokenSupply_ = SafeMath.add(tokenSupply_, _amountOfTokens);
        require(SafeMath.add(_amountOfTokens,tokenSupply_) < (totalSupply_+rewardSupply_));
        //deduct commissions for referrals
        _amountOfTokens = SafeMath.sub(_amountOfTokens, _amountOfTokens * 20/100);
        tokenBalanceLedger_[_customerAddress] = SafeMath.add(tokenBalanceLedger_[_customerAddress], _amountOfTokens);
       
        // fire event
        emit Transfer(address(this), _customerAddress, _amountOfTokens);
       
        return _amountOfTokens;
    }
   
    function ethereumToTokens_(uint256 _ethereum, uint256 _currentPrice, uint256 _grv, bool buy)
        internal
        view
        returns(uint256)
    {
        uint256 _tokenPriceIncremental = (tokenPriceIncremental_*(2**(_grv-1)));
        uint256 _tempad = SafeMath.sub((2*_currentPrice), _tokenPriceIncremental);
        uint256 _tokenSupply = tokenSupply_;
        uint256 _tokensReceived = (
            (
                SafeMath.sub(
                    (sqrt
                        (
                            _tempad**2
                            + (8*_tokenPriceIncremental*_ethereum)
                        )
                    ), _tempad
                )
            )/(2*_tokenPriceIncremental)
        );
        uint256 tempbase = upperBound_(_grv);
        if((_tokensReceived + _tokenSupply) < tempbase && _tokenSupply < tempbase){
            _currentPrice = _currentPrice+((_tokensReceived-1)*_tokenPriceIncremental);
        }
        if((_tokensReceived + _tokenSupply) > tempbase && _tokenSupply < tempbase){
            _tokensReceived = tempbase - _tokenSupply;
            _ethereum = SafeMath.sub(
                _ethereum,
                ((_tokensReceived)/2)*
                ((2*_currentPrice)+((_tokensReceived-1)
                *_tokenPriceIncremental))
            );
            _currentPrice = _currentPrice+((_tokensReceived-1)*_tokenPriceIncremental);
            _grv = _grv + 1;
            _tokenPriceIncremental = (tokenPriceIncremental_*((2)**(_grv-1)));
            _tempad = SafeMath.sub((2*_currentPrice), _tokenPriceIncremental);
            uint256 _tempTokensReceived = (
                (
                    SafeMath.sub(
                        (sqrt
                            (
                                _tempad**2
                                + (8*_tokenPriceIncremental*_ethereum)
                            )
                        ), _tempad
                    )
                )/(2*_tokenPriceIncremental)
            );
            _currentPrice = _currentPrice+((_tempTokensReceived-1)*_tokenPriceIncremental);
            _tokensReceived = _tokensReceived + _tempTokensReceived;
        }
        if(buy == true)
        {
            currentPrice_ = _currentPrice;
            grv = _grv;
        }
        return _tokensReceived;
    }
   
    function upperBound_(uint256 _grv)
    internal
    view
    returns(uint256)
    {
        if(_grv <= 5)
        {
            return (60000 * _grv);
        }
        if(_grv > 5 && _grv <= 10)
        {
            return (300000 + ((_grv-5)*50000));
        }
        if(_grv > 10 && _grv <= 15)
        {
            return (550000 + ((_grv-10)*40000));
        }
        if(_grv > 15)
        {
            return (750000 +((_grv-15)*30000));
        }
        return 0;
    }
   
     function tokensToEthereum_(uint256 _tokens, bool sell)
        internal
        view
        returns(uint256)
    {
        uint256 _tokenSupply = tokenSupply_;
        uint256 _etherReceived = 0;
        uint256 _grv = grv;
        uint256 tempbase = upperBound_(_grv-1);
        uint256 _currentPrice = currentPrice_;
        uint256 _tokenPriceIncremental = (tokenPriceIncremental_*((2)**(_grv-1)));
        if((_tokenSupply - _tokens) < tempbase)
        {
            uint256 tokensToSell = _tokenSupply - tempbase;
            uint256 a = _currentPrice - ((tokensToSell-1)*_tokenPriceIncremental);
            _tokens = _tokens - tokensToSell;
            _etherReceived = _etherReceived + ((tokensToSell/2)*((2*a)+((tokensToSell-1)*_tokenPriceIncremental)));
            _currentPrice = _currentPrice-((tokensToSell-1)*_tokenPriceIncremental);
            _tokenSupply = _tokenSupply - tokensToSell;
            _grv = _grv-1 ;
            _tokenPriceIncremental = (tokenPriceIncremental_*((2)**(_grv-1)));
            tempbase = upperBound_(_grv-1);
        }
        if((_tokenSupply - _tokens) < tempbase)
        {
            tokensToSell = _tokenSupply - tempbase;
            _tokens = _tokens - tokensToSell;
             a = _currentPrice - ((tokensToSell-1)*_tokenPriceIncremental);
            _etherReceived = _etherReceived + ((tokensToSell/2)*((2*a)+((tokensToSell-1)*_tokenPriceIncremental)));
            _currentPrice = a;
            _tokenSupply = _tokenSupply - tokensToSell;
            _grv = _grv-1 ;
            _tokenPriceIncremental = (tokenPriceIncremental_*((2)**(_grv-1)));
            tempbase = upperBound_(_grv);
        }
        if(_tokens > 0)
        {
             a = _currentPrice - ((_tokens-1)*_tokenPriceIncremental);
             _etherReceived = _etherReceived + ((_tokens/2)*((2*a)+((_tokens-1)*_tokenPriceIncremental)));
             _tokenSupply = _tokenSupply - _tokens;
             _currentPrice = a;
        }
        if(sell == true)
        {
            grv = _grv;
            currentPrice_ = _currentPrice;
        }
        return _etherReceived;
    }
   
   
    function sqrt(uint x) internal pure returns (uint y) {
        uint z = (x + 1) / 2;
        y = x;
        while (z < y) {
            y = z;
            z = (x / z + z) / 2;
        }
    }
}

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {

    /**
    * @dev Multiplies two numbers, throws on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        assert(c / a == b);
        return c;
    }

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

    /**
    * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        assert(b <= a);
        return a - b;
    }

    /**
    * @dev Adds two numbers, throws on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        assert(c >= a);
        return c;
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_users","type":"address[]"},{"name":"_balances","type":"uint256[]"},{"name":"modeType","type":"uint256"}],"name":"upgradeContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_ethereumToSpend","type":"uint256"}],"name":"calculateTokensReceived","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":true,"inputs":[],"name":"grv","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokensToSell","type":"uint256"}],"name":"calculateEthereumReceived","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"destruct","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"currentPrice_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"sellPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"holdStake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalEthereumBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"percent","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newPercent","type":"uint256"}],"name":"setPercent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_currentPrice","type":"uint256"},{"name":"_grv","type":"uint256"},{"name":"_commFunds","type":"uint256"}],"name":"upgradeDetails","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_devAddress2","type":"address"},{"name":"_devAddress3","type":"address"},{"name":"_devAddress4","type":"address"},{"name":"_devAddress5","type":"address"},{"name":"_devAddress6","type":"address"},{"name":"_commHolder","type":"address"}],"name":"registerDev234","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"},{"name":"_customerAddress","type":"address"}],"name":"unstake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"buyPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalCommFunds","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"myTokens","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":"myEthers","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_toAddress","type":"address"},{"name":"_amountOfTokens","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_symbol","type":"string"}],"name":"setSymbol","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"fundsInjection","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"getCommFunds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rewardSupply_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256[]"},{"name":"_customerAddress","type":"address[]"}],"name":"withdrawComm","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_amountOfTokens","type":"uint256"}],"name":"sell","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"redeemTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"exit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_referredBy","type":"address"}],"name":"buy","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"},{"name":"_customerAddress","type":"address"}],"name":"withdrawRewards","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"withdrawEthers","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_commissionHolder","type":"address"}],"name":"setupCommissionHolder","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"ethereumWithdrawn","type":"uint256"}],"name":"onWithdraw","type":"event"},{"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":false,"name":"currBal","type":"uint256"}],"name":"testLog","type":"event"}]

60806040526040805190810160405280600c81526020017f4454542045786368616e676500000000000000000000000000000000000000008152506000908051906020019062000051929190620002fe565b506040805190810160405280600381526020017f4454540000000000000000000000000000000000000000000000000000000000815250600190805190602001906200009f929190620002fe565b50620dbba0600255604b600355631017df8065f5904616e00001600455600160055562030d4060065560006011556000601355348015620000df57600080fd5b5033601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160126000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550679074b170dcba17f76013819055506204ddce60118190555061f06c600e6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550660353e081fb67c86004819055506006600581905550620003ad565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200034157805160ff191683800117855562000372565b8280016001018555821562000372579182015b828111156200037157825182559160200191906001019062000354565b5b50905062000381919062000385565b5090565b620003aa91905b80821115620003a65760008160009055506001016200038c565b5090565b90565b6130b780620003bd6000396000f3006080604052600436106101e3576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806304d4415e146101f157806306fdde03146102a457806310d0ffdd1461033457806318160ddd146103755780631dfa4da0146103a057806322609373146103cb5780632b68b9c61461040c5780632e926d4914610423578063313ce5671461044e578063324536eb1461047f5780634b750334146104aa5780634d71d534146104d55780636b2f46321461050257806370a082311461052d57806370ba1113146105845780637154b8b5146105af5780637824407f146105dc57806381180b4014610607578063832913f7146106485780638381e1821461072b5780638620410b1461077857806387d49106146107a3578063949e8acd146107ce57806395d89b41146107f95780639889a7a514610889578063a9059cbb146108b4578063b84c824614610919578063ba1b37f214610982578063c47f0027146109a4578063c654465d14610a0d578063d5afbee414610a3a578063e1fc578814610a65578063e4849b3214610b0e578063e9a9c50c14610b3b578063e9fad8ee14610b66578063f088d54714610b7d578063f3301f6b14610bc7578063f420670614610c14578063f531497c14610c41575b6101ee346000610c84565b50005b3480156101fd57600080fd5b506102a2600480360381019080803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190929190505050610ec1565b005b3480156102b057600080fd5b506102b9611120565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102f95780820151818401526020810190506102de565b50505050905090810190601f1680156103265780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561034057600080fd5b5061035f600480360381019080803590602001909291905050506111be565b6040518082815260200191505060405180910390f35b34801561038157600080fd5b5061038a61121d565b6040518082815260200191505060405180910390f35b3480156103ac57600080fd5b506103b5611227565b6040518082815260200191505060405180910390f35b3480156103d757600080fd5b506103f66004803603810190808035906020019092919050505061122d565b6040518082815260200191505060405180910390f35b34801561041857600080fd5b5061042161127c565b005b34801561042f57600080fd5b50610438611314565b6040518082815260200191505060405180910390f35b34801561045a57600080fd5b5061046361131a565b604051808260ff1660ff16815260200191505060405180910390f35b34801561048b57600080fd5b5061049461131f565b6040518082815260200191505060405180910390f35b3480156104b657600080fd5b506104bf611325565b6040518082815260200191505060405180910390f35b3480156104e157600080fd5b5061050060048036038101908080359060200190929190505050611382565b005b34801561050e57600080fd5b506105176114f7565b6040518082815260200191505060405180910390f35b34801561053957600080fd5b5061056e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611516565b6040518082815260200191505060405180910390f35b34801561059057600080fd5b5061059961155f565b6040518082815260200191505060405180910390f35b3480156105bb57600080fd5b506105da60048036038101908080359060200190929190505050611565565b005b3480156105e857600080fd5b506105f16115d0565b6040518082815260200191505060405180910390f35b34801561061357600080fd5b506106466004803603810190808035906020019092919080359060200190929190803590602001909291905050506115da565b005b34801561065457600080fd5b50610729600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611652565b005b34801561073757600080fd5b5061077660048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611855565b005b34801561078457600080fd5b5061078d611a13565b6040518082815260200191505060405180910390f35b3480156107af57600080fd5b506107b8611a1d565b6040518082815260200191505060405180910390f35b3480156107da57600080fd5b506107e3611a84565b6040518082815260200191505060405180910390f35b34801561080557600080fd5b5061080e611a99565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561084e578082015181840152602081019050610833565b50505050905090810190601f16801561087b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561089557600080fd5b5061089e611b37565b6040518082815260200191505060405180910390f35b3480156108c057600080fd5b506108ff600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b7e565b604051808215151515815260200191505060405180910390f35b34801561092557600080fd5b50610980600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611d6a565b005b61098a611de2565b604051808215151515815260200191505060405180910390f35b3480156109b057600080fd5b50610a0b600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611deb565b005b348015610a1957600080fd5b50610a3860048036038101908080359060200190929190505050611e63565b005b348015610a4657600080fd5b50610a4f612158565b6040518082815260200191505060405180910390f35b348015610a7157600080fd5b50610b0c600480360381019080803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929050505061215e565b005b348015610b1a57600080fd5b50610b3960048036038101908080359060200190929190505050612400565b005b348015610b4757600080fd5b50610b50612600565b6040518082815260200191505060405180910390f35b348015610b7257600080fd5b50610b7b612726565b005b610bb1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612785565b6040518082815260200191505060405180910390f35b348015610bd357600080fd5b50610c1260048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612797565b005b348015610c2057600080fd5b50610c3f60048036038101908080359060200190929190505050612897565b005b348015610c4d57600080fd5b50610c82600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129e9565b005b60008060008060003393506127106003548802811515610ca057fe5b04925082601360008282540192505081905550610cbd8784612a8b565b9150610cd0826004546005546001612aa4565b9050606460148202811515610ce157fe5b04600e6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600081118015610d6c5750601154610d6a82601154612bfe565b115b1515610d7757600080fd5b610d8360115482612bfe565b60118190555060065460025401610d9c82601154612bfe565b101515610da857600080fd5b610dc181606460148402811515610dbb57fe5b04612a8b565b9050610e0c600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482612bfe565b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a38094505050505092915050565b600080339050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515610f1f57600080fd5b600183141561105257600091505b8451821015611051578382815181101515610f4457fe5b90602001906020020151600e60008785815181101515610f6057fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508482815181101515610fbf57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef868581518110151561102557fe5b906020019060200201516040518082815260200191505060405180910390a38180600101925050610f2d565b5b600283141561111957600091505b845182101561111857838281518110151561107757fe5b90602001906020020151600f6000878581518110151561109357fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555083828151811015156110f257fe5b906020019060200201516013600082825401925050819055508180600101925050611060565b5b5050505050565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111b65780601f1061118b576101008083540402835291602001916111b6565b820191906000526020600020905b81548152906001019060200180831161119957829003601f168201915b505050505081565b60008060008061271060035486028115156111d557fe5b0492506111e28584612a8b565b91506111f5826004546005546000612aa4565b90506112108160646014840281151561120a57fe5b04612a8b565b9050809350505050919050565b6000600254905090565b60055481565b600080600080601154851115151561124457600080fd5b61124f856000612c1c565b9250612710600354840281151561126257fe5b04915061126f8383612a8b565b9050809350505050919050565b6000339050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156112d957600080fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b60045481565b600081565b60025481565b6000806000806000601154141561134a57631017df8065f5904616e00003935061137c565b61135660026000612c1c565b9250612710600354840281151561136957fe5b0491506113768383612a8b565b90508093505b50505090565b600061138c611a84565b11151561139857600080fd5b6113e1600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482612a8b565b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061148f600e6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482612bfe565b600e6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60035481565b6000339050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156115c257600080fd5b606482026003819055505050565b6000601154905090565b6000339050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561163757600080fd5b83600481905550826005819055508160138190555050505050565b6000339050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156116af57600080fd5b86600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050505050565b6000339050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156118b257600080fd5b6118fb600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612bfe565b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506119a9600e6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612a8b565b600e6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6000600454905090565b600080339050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611a7b57600080fd5b60135491505090565b600080339050611a9381611516565b91505090565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b2f5780601f10611b0457610100808354040283529160200191611b2f565b820191906000526020600020905b815481529060010190602001808311611b1257829003601f168201915b505050505081565b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b6000806000339050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611bde57600080fd5b339150611c2a600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205485612a8b565b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611cb6600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205485612bfe565b600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a360019250505092915050565b6000339050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611dc757600080fd5b8160019080519060200190611ddd929190612fe6565b505050565b60006001905090565b6000339050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611e4857600080fd5b8160009080519060200190611e5e929190612fe6565b505050565b6000339050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611ec057600080fd5b6013548211151561215457606460148302811515611eda57fe5b04600f6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550606460148302811515611f5857fe5b04600f6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550606460198302811515611fd657fe5b04600f6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506064600a830281151561205457fe5b04600f6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506064601983028115156120d257fe5b04600f6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555061214d60135483612a8b565b6013819055505b5050565b60065481565b6000806000339050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156121be57600080fd5b600092505b83518310156123f95784838151811015156121da57fe5b906020019060200201519150612246600e600086868151811015156121fb57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612bfe565b600e6000868681518110151561225857fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061230b600e6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612a8b565b600e6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550838381518110151561237e57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a382806001019350506121c3565b5050505050565b600080600080600080612411611a84565b11151561241d57600080fd5b339450600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054861115151561246e57600080fd5b85935061247c846001612c1c565b9250612710600354840281151561248f57fe5b04915061249c8383612a8b565b9050816013600082825401925050819055506124ba60115485612a8b565b601181905550612509600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205485612a8b565b600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612592573d6000803e3d6000fd5b503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a3505050505050565b6000806000339150600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a38060116000828254039250508190555061270f816001612d92565b601360008282540192505081905550809250505090565b600080339150600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111156127815761278081612400565b5b5050565b60006127913483610c84565b50919050565b6000339050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156127f457600080fd5b61283d600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612bfe565b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061288c60115484612bfe565b601181905550505050565b80600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156128e557600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561292b573d6000803e3d6000fd5b5080600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6129d1846111be565b6040518082815260200191505060405180910390a350565b6000339050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515612a4657600080fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000828211151515612a9957fe5b818303905092915050565b60008060008060008060006001890360020a631017df80029550612acb8a60020287612a8b565b9450601154935085600202612af2612aec8d89600802026002890a01612f08565b87612a8b565b811515612afb57fe5b049250612b0789612f53565b915081848401108015612b1957508184105b15612b29578560018403028a0199505b81848401118015612b3957508184105b15612bd1578382039250612b658b8760018603028c60020201600286811515612b5e57fe5b0402612a8b565b9a508560018403028a0199506001890198506001890360020a631017df80029550612b938a60020287612a8b565b945085600202612bb5612baf8d89600802026002890a01612f08565b87612a8b565b811515612bbe57fe5b0490508560018203028a01995080830192505b600115158815151415612bed5789600481905550886005819055505b829650505050505050949350505050565b6000808284019050838110151515612c1257fe5b8091505092915050565b60008060008060008060008060006011549750600096506005549550612c4460018703612f53565b945060045493506001860360020a631017df80029250848b89031015612cc857848803915082600183030284039050818b039a508260018303028160020201600283811515612c8f57fe5b0402870196508260018303028403935081880397506001860395506001860360020a631017df80029250612cc560018703612f53565b94505b848b89031015612d2c578488039150818b039a50826001830302840390508260018303028160020201600283811515612cfd57fe5b04028701965080935081880397506001860395506001860360020a631017df80029250612d2986612f53565b94505b60008b1115612d65578260018c0302840390508260018c0302816002020160028c811515612d5657fe5b0402870196508a880397508093505b600115158a15151415612d815785600581905550836004819055505b869850505050505050505092915050565b60008060008060008060008060006011549750600096506005549550612dba60018703612f53565b945060045493506001860360020a631017df80029250848b89031015612e3e57848803915082600183030284039050818b039a508260018303028160020201600283811515612e0557fe5b0402870196508260018303028403935081880397506001860395506001860360020a631017df80029250612e3b60018703612f53565b94505b848b89031015612ea2578488039150818b039a50826001830302840390508260018303028160020201600283811515612e7357fe5b04028701965080935081880397506001860395506001860360020a631017df80029250612e9f86612f53565b94505b60008b1115612edb578260018c0302840390508260018c0302816002020160028c811515612ecc57fe5b0402870196508a880397508093505b600115158a15151415612ef75785600581905550836004819055505b869850505050505050505092915050565b600080600260018401811515612f1a57fe5b0490508291505b81811015612f4d578091506002818285811515612f3a57fe5b0401811515612f4557fe5b049050612f21565b50919050565b6000600582111515612f6b578161ea60029050612fe1565b600582118015612f7c5750600a8211155b15612f955761c3506005830302620493e0019050612fe1565b600a82118015612fa65750600f8211155b15612fbf57619c40600a83030262086470019050612fe1565b600f821115612fdc57617530600f830302620b71b0019050612fe1565b600090505b919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061302757805160ff1916838001178555613055565b82800160010185558215613055579182015b82811115613054578251825591602001919060010190613039565b5b5090506130629190613066565b5090565b61308891905b8082111561308457600081600090555060010161306c565b5090565b905600a165627a7a72305820fffbc3d6c95928b22fbe30bc6a5ab7a16edfcf841339b14b2554d0525ad4fdc20029

Deployed Bytecode

0x6080604052600436106101e3576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806304d4415e146101f157806306fdde03146102a457806310d0ffdd1461033457806318160ddd146103755780631dfa4da0146103a057806322609373146103cb5780632b68b9c61461040c5780632e926d4914610423578063313ce5671461044e578063324536eb1461047f5780634b750334146104aa5780634d71d534146104d55780636b2f46321461050257806370a082311461052d57806370ba1113146105845780637154b8b5146105af5780637824407f146105dc57806381180b4014610607578063832913f7146106485780638381e1821461072b5780638620410b1461077857806387d49106146107a3578063949e8acd146107ce57806395d89b41146107f95780639889a7a514610889578063a9059cbb146108b4578063b84c824614610919578063ba1b37f214610982578063c47f0027146109a4578063c654465d14610a0d578063d5afbee414610a3a578063e1fc578814610a65578063e4849b3214610b0e578063e9a9c50c14610b3b578063e9fad8ee14610b66578063f088d54714610b7d578063f3301f6b14610bc7578063f420670614610c14578063f531497c14610c41575b6101ee346000610c84565b50005b3480156101fd57600080fd5b506102a2600480360381019080803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190929190505050610ec1565b005b3480156102b057600080fd5b506102b9611120565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102f95780820151818401526020810190506102de565b50505050905090810190601f1680156103265780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561034057600080fd5b5061035f600480360381019080803590602001909291905050506111be565b6040518082815260200191505060405180910390f35b34801561038157600080fd5b5061038a61121d565b6040518082815260200191505060405180910390f35b3480156103ac57600080fd5b506103b5611227565b6040518082815260200191505060405180910390f35b3480156103d757600080fd5b506103f66004803603810190808035906020019092919050505061122d565b6040518082815260200191505060405180910390f35b34801561041857600080fd5b5061042161127c565b005b34801561042f57600080fd5b50610438611314565b6040518082815260200191505060405180910390f35b34801561045a57600080fd5b5061046361131a565b604051808260ff1660ff16815260200191505060405180910390f35b34801561048b57600080fd5b5061049461131f565b6040518082815260200191505060405180910390f35b3480156104b657600080fd5b506104bf611325565b6040518082815260200191505060405180910390f35b3480156104e157600080fd5b5061050060048036038101908080359060200190929190505050611382565b005b34801561050e57600080fd5b506105176114f7565b6040518082815260200191505060405180910390f35b34801561053957600080fd5b5061056e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611516565b6040518082815260200191505060405180910390f35b34801561059057600080fd5b5061059961155f565b6040518082815260200191505060405180910390f35b3480156105bb57600080fd5b506105da60048036038101908080359060200190929190505050611565565b005b3480156105e857600080fd5b506105f16115d0565b6040518082815260200191505060405180910390f35b34801561061357600080fd5b506106466004803603810190808035906020019092919080359060200190929190803590602001909291905050506115da565b005b34801561065457600080fd5b50610729600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611652565b005b34801561073757600080fd5b5061077660048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611855565b005b34801561078457600080fd5b5061078d611a13565b6040518082815260200191505060405180910390f35b3480156107af57600080fd5b506107b8611a1d565b6040518082815260200191505060405180910390f35b3480156107da57600080fd5b506107e3611a84565b6040518082815260200191505060405180910390f35b34801561080557600080fd5b5061080e611a99565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561084e578082015181840152602081019050610833565b50505050905090810190601f16801561087b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561089557600080fd5b5061089e611b37565b6040518082815260200191505060405180910390f35b3480156108c057600080fd5b506108ff600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b7e565b604051808215151515815260200191505060405180910390f35b34801561092557600080fd5b50610980600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611d6a565b005b61098a611de2565b604051808215151515815260200191505060405180910390f35b3480156109b057600080fd5b50610a0b600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611deb565b005b348015610a1957600080fd5b50610a3860048036038101908080359060200190929190505050611e63565b005b348015610a4657600080fd5b50610a4f612158565b6040518082815260200191505060405180910390f35b348015610a7157600080fd5b50610b0c600480360381019080803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929050505061215e565b005b348015610b1a57600080fd5b50610b3960048036038101908080359060200190929190505050612400565b005b348015610b4757600080fd5b50610b50612600565b6040518082815260200191505060405180910390f35b348015610b7257600080fd5b50610b7b612726565b005b610bb1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612785565b6040518082815260200191505060405180910390f35b348015610bd357600080fd5b50610c1260048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612797565b005b348015610c2057600080fd5b50610c3f60048036038101908080359060200190929190505050612897565b005b348015610c4d57600080fd5b50610c82600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129e9565b005b60008060008060003393506127106003548802811515610ca057fe5b04925082601360008282540192505081905550610cbd8784612a8b565b9150610cd0826004546005546001612aa4565b9050606460148202811515610ce157fe5b04600e6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600081118015610d6c5750601154610d6a82601154612bfe565b115b1515610d7757600080fd5b610d8360115482612bfe565b60118190555060065460025401610d9c82601154612bfe565b101515610da857600080fd5b610dc181606460148402811515610dbb57fe5b04612a8b565b9050610e0c600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482612bfe565b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a38094505050505092915050565b600080339050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515610f1f57600080fd5b600183141561105257600091505b8451821015611051578382815181101515610f4457fe5b90602001906020020151600e60008785815181101515610f6057fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508482815181101515610fbf57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef868581518110151561102557fe5b906020019060200201516040518082815260200191505060405180910390a38180600101925050610f2d565b5b600283141561111957600091505b845182101561111857838281518110151561107757fe5b90602001906020020151600f6000878581518110151561109357fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555083828151811015156110f257fe5b906020019060200201516013600082825401925050819055508180600101925050611060565b5b5050505050565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111b65780601f1061118b576101008083540402835291602001916111b6565b820191906000526020600020905b81548152906001019060200180831161119957829003601f168201915b505050505081565b60008060008061271060035486028115156111d557fe5b0492506111e28584612a8b565b91506111f5826004546005546000612aa4565b90506112108160646014840281151561120a57fe5b04612a8b565b9050809350505050919050565b6000600254905090565b60055481565b600080600080601154851115151561124457600080fd5b61124f856000612c1c565b9250612710600354840281151561126257fe5b04915061126f8383612a8b565b9050809350505050919050565b6000339050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156112d957600080fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b60045481565b600081565b60025481565b6000806000806000601154141561134a57631017df8065f5904616e00003935061137c565b61135660026000612c1c565b9250612710600354840281151561136957fe5b0491506113768383612a8b565b90508093505b50505090565b600061138c611a84565b11151561139857600080fd5b6113e1600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482612a8b565b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061148f600e6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482612bfe565b600e6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60035481565b6000339050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156115c257600080fd5b606482026003819055505050565b6000601154905090565b6000339050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561163757600080fd5b83600481905550826005819055508160138190555050505050565b6000339050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156116af57600080fd5b86600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050505050565b6000339050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156118b257600080fd5b6118fb600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612bfe565b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506119a9600e6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612a8b565b600e6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6000600454905090565b600080339050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611a7b57600080fd5b60135491505090565b600080339050611a9381611516565b91505090565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b2f5780601f10611b0457610100808354040283529160200191611b2f565b820191906000526020600020905b815481529060010190602001808311611b1257829003601f168201915b505050505081565b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b6000806000339050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611bde57600080fd5b339150611c2a600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205485612a8b565b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611cb6600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205485612bfe565b600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a360019250505092915050565b6000339050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611dc757600080fd5b8160019080519060200190611ddd929190612fe6565b505050565b60006001905090565b6000339050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611e4857600080fd5b8160009080519060200190611e5e929190612fe6565b505050565b6000339050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611ec057600080fd5b6013548211151561215457606460148302811515611eda57fe5b04600f6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550606460148302811515611f5857fe5b04600f6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550606460198302811515611fd657fe5b04600f6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506064600a830281151561205457fe5b04600f6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506064601983028115156120d257fe5b04600f6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555061214d60135483612a8b565b6013819055505b5050565b60065481565b6000806000339050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156121be57600080fd5b600092505b83518310156123f95784838151811015156121da57fe5b906020019060200201519150612246600e600086868151811015156121fb57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612bfe565b600e6000868681518110151561225857fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061230b600e6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612a8b565b600e6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550838381518110151561237e57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a382806001019350506121c3565b5050505050565b600080600080600080612411611a84565b11151561241d57600080fd5b339450600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054861115151561246e57600080fd5b85935061247c846001612c1c565b9250612710600354840281151561248f57fe5b04915061249c8383612a8b565b9050816013600082825401925050819055506124ba60115485612a8b565b601181905550612509600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205485612a8b565b600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612592573d6000803e3d6000fd5b503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a3505050505050565b6000806000339150600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a38060116000828254039250508190555061270f816001612d92565b601360008282540192505081905550809250505090565b600080339150600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111156127815761278081612400565b5b5050565b60006127913483610c84565b50919050565b6000339050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156127f457600080fd5b61283d600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612bfe565b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061288c60115484612bfe565b601181905550505050565b80600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156128e557600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561292b573d6000803e3d6000fd5b5080600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6129d1846111be565b6040518082815260200191505060405180910390a350565b6000339050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515612a4657600080fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000828211151515612a9957fe5b818303905092915050565b60008060008060008060006001890360020a631017df80029550612acb8a60020287612a8b565b9450601154935085600202612af2612aec8d89600802026002890a01612f08565b87612a8b565b811515612afb57fe5b049250612b0789612f53565b915081848401108015612b1957508184105b15612b29578560018403028a0199505b81848401118015612b3957508184105b15612bd1578382039250612b658b8760018603028c60020201600286811515612b5e57fe5b0402612a8b565b9a508560018403028a0199506001890198506001890360020a631017df80029550612b938a60020287612a8b565b945085600202612bb5612baf8d89600802026002890a01612f08565b87612a8b565b811515612bbe57fe5b0490508560018203028a01995080830192505b600115158815151415612bed5789600481905550886005819055505b829650505050505050949350505050565b6000808284019050838110151515612c1257fe5b8091505092915050565b60008060008060008060008060006011549750600096506005549550612c4460018703612f53565b945060045493506001860360020a631017df80029250848b89031015612cc857848803915082600183030284039050818b039a508260018303028160020201600283811515612c8f57fe5b0402870196508260018303028403935081880397506001860395506001860360020a631017df80029250612cc560018703612f53565b94505b848b89031015612d2c578488039150818b039a50826001830302840390508260018303028160020201600283811515612cfd57fe5b04028701965080935081880397506001860395506001860360020a631017df80029250612d2986612f53565b94505b60008b1115612d65578260018c0302840390508260018c0302816002020160028c811515612d5657fe5b0402870196508a880397508093505b600115158a15151415612d815785600581905550836004819055505b869850505050505050505092915050565b60008060008060008060008060006011549750600096506005549550612dba60018703612f53565b945060045493506001860360020a631017df80029250848b89031015612e3e57848803915082600183030284039050818b039a508260018303028160020201600283811515612e0557fe5b0402870196508260018303028403935081880397506001860395506001860360020a631017df80029250612e3b60018703612f53565b94505b848b89031015612ea2578488039150818b039a50826001830302840390508260018303028160020201600283811515612e7357fe5b04028701965080935081880397506001860395506001860360020a631017df80029250612e9f86612f53565b94505b60008b1115612edb578260018c0302840390508260018c0302816002020160028c811515612ecc57fe5b0402870196508a880397508093505b600115158a15151415612ef75785600581905550836004819055505b869850505050505050505092915050565b600080600260018401811515612f1a57fe5b0490508291505b81811015612f4d578091506002818285811515612f3a57fe5b0401811515612f4557fe5b049050612f21565b50919050565b6000600582111515612f6b578161ea60029050612fe1565b600582118015612f7c5750600a8211155b15612f955761c3506005830302620493e0019050612fe1565b600a82118015612fa65750600f8211155b15612fbf57619c40600a83030262086470019050612fe1565b600f821115612fdc57617530600f830302620b71b0019050612fe1565b600090505b919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061302757805160ff1916838001178555613055565b82800160010185558215613055579182015b82811115613054578251825591602001919060010190613039565b5b5090506130629190613066565b5090565b61308891905b8082111561308457600081600090555060010161306c565b5090565b905600a165627a7a72305820fffbc3d6c95928b22fbe30bc6a5ab7a16edfcf841339b14b2554d0525ad4fdc20029

Deployed Bytecode Sourcemap

28:21163:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6260:30;6275:9;6286:3;6260:14;:30::i;:::-;;28:21163;5070:626;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5070:626:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;832:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;832:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;832:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14178:484;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14178:484:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11983:122;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11983:122:0;;;;;;;;;;;;;;;;;;;;;;;1244:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1244:22:0;;;;;;;;;;;;;;;;;;;;;;;13507:445;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13507:445:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11197:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11197:83:0;;;;;;1163:74;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1163:74:0;;;;;;;;;;;;;;;;;;;;;;;909:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;909:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;950:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;950:36:0;;;;;;;;;;;;;;;;;;;;;;;12760:529;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12760:529:0;;;;;;;;;;;;;;;;;;;;;;;6309:307;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6309:307:0;;;;;;;;;;;;;;;;;;;;;;;;;;11835:137;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11835:137:0;;;;;;;;;;;;;;;;;;;;;;;12578:169;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12578:169:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1129:27:0;;;;;;;;;;;;;;;;;;;;;;;11296:112;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11296:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;12116:110;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12116:110:0;;;;;;;;;;;;;;;;;;;;;;;5803:225;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5803:225:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9387:398;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9387:398:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6631:329;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6631:329:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13371:120;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13371:120:0;;;;;;;;;;;;;;;;;;;;;;;9796:146;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9796:146:0;;;;;;;;;;;;;;;;;;;;;;;12304:182;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12304:182:0;;;;;;;;;;;;;;;;;;;;;;;874:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;874:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;874:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9953:133;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9953:133:0;;;;;;;;;;;;;;;;;;;;;;;10609:577;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10609:577:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11544:120;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11544:120:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5702:90;;;;;;;;;;;;;;;;;;;;;;;;;;;11421:112;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11421:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10097:501;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10097:501:0;;;;;;;;;;;;;;;;;;;;;;;;;;1273:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1273:37:0;;;;;;;;;;;;;;;;;;;;;;;7279:551;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7279:551:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8477:899;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8477:899:0;;;;;;;;;;;;;;;;;;;;;;;;;;2480:408;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2480:408:0;;;;;;;;;;;;;;;;;;;;;;;8214:199;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8214:199:0;;;;;;6034:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6971:297;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6971:297:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7841:304;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7841:304:0;;;;;;;;;;;;;;;;;;;;;;;;;;11672:155;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11672:155:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14673:1219;14780:7;14828:24;14876:18;14975:22;15054:23;14855:10;14828:37;;14925:5;14917:7;;14897:17;:27;:33;;;;;;;;14876:54;;14954:10;14941:9;;:23;;;;;;;;;;;15000:43;15013:17;15032:10;15000:12;:43::i;:::-;14975:68;;15080:60;15098:14;15115:13;;15130:3;;15135:4;15080:17;:60::i;:::-;15054:86;;15213:3;15210:2;15192:15;:20;:24;;;;;;;;15151:19;:37;15171:16;;;;;;;;;;;15151:37;;;;;;;;;;;;;;;;:65;;;;;;;;;;;15253:1;15235:15;:19;:82;;;;;15304:12;;15259:42;15272:15;15288:12;;15259;:42::i;:::-;:57;15235:82;15227:91;;;;;;;;15353:43;15366:12;;15380:15;15353:12;:43::i;:::-;15338:12;:58;;;;15474:13;;15461:12;;:26;15415:42;15428:15;15444:12;;15415;:42::i;:::-;:73;15407:82;;;;;;;;15562:55;15575:15;15613:3;15610:2;15592:15;:20;:24;;;;;;;;15562:12;:55::i;:::-;15544:73;;15668:68;15681:19;:37;15701:16;15681:37;;;;;;;;;;;;;;;;15720:15;15668:12;:68::i;:::-;15628:19;:37;15648:16;15628:37;;;;;;;;;;;;;;;:108;;;;15808:16;15784:58;;15801:4;15784:58;;;15826:15;15784:58;;;;;;;;;;;;;;;;;;15869:15;15862:22;;14673:1219;;;;;;;;:::o;5070:626::-;5248:6;216:24;243:10;216:37;;272:14;:32;287:16;272:32;;;;;;;;;;;;;;;;;;;;;;;;;264:41;;;;;;;;5217:1;5205:8;:13;5202:254;;;5257:1;5248:10;;5244:201;5262:6;:13;5260:1;:15;5244:201;;;5347:9;5357:1;5347:12;;;;;;;;;;;;;;;;;;5313:19;:30;5333:6;5340:1;5333:9;;;;;;;;;;;;;;;;;;5313:30;;;;;;;;;;;;;;;;:46;;;;;;;;;;;5406:6;5413:1;5406:9;;;;;;;;;;;;;;;;;;5383:46;;5400:4;5383:46;;;5416:9;5426:1;5416:12;;;;;;;;;;;;;;;;;;5383:46;;;;;;;;;;;;;;;;;;5276:3;;;;;;;5244:201;;;5202:254;5481:1;5469:8;:13;5466:223;;;5516:1;5512:5;;5508:170;5521:6;:13;5519:1;:15;5508:170;;;5606:9;5616:1;5606:12;;;;;;;;;;;;;;;;;;5572:19;:30;5592:6;5599:1;5592:9;;;;;;;;;;;;;;;;;;5572:30;;;;;;;;;;;;;;;;:46;;;;;;;;;;;5650:9;5660:1;5650:12;;;;;;;;;;;;;;;;;;5637:9;;:25;;;;;;;;;;;5535:3;;;;;;;5508:170;;;5466:223;5070:626;;;;;:::o;832:35::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14178:484::-;14284:7;14309:18;14373:22;14451:23;14357:5;14349:7;;14330:16;:26;:32;;;;;;;;14309:53;;14398:42;14411:16;14429:10;14398:12;:42::i;:::-;14373:67;;14477:60;14495:14;14511:13;;14526:3;;14531:5;14477:17;:60::i;:::-;14451:86;;14566:55;14579:15;14617:3;14614:2;14596:15;:20;:24;;;;;;;;14566:12;:55::i;:::-;14548:73;;14639:15;14632:22;;14178:484;;;;;;:::o;11983:122::-;12053:7;12085:12;;12078:19;;11983:122;:::o;1244:22::-;;;;:::o;13507:445::-;13612:7;13686:17;13755:18;13852:22;13662:12;;13645:13;:29;;13637:38;;;;;;;;13706;13724:13;13738:5;13706:17;:38::i;:::-;13686:58;;13796:5;13788:7;;13776:9;:19;:25;;;;;;;;13755:46;;13877:35;13890:9;13901:10;13877:12;:35::i;:::-;13852:60;;13930:14;13923:21;;13507:445;;;;;;:::o;11197:83::-;216:24;243:10;216:37;;272:14;:32;287:16;272:32;;;;;;;;;;;;;;;;;;;;;;;;;264:41;;;;;;;;11267:4;;;;;;;;;;;11254:18;;;1163:74;;;;:::o;909:34::-;942:1;909:34;:::o;950:36::-;;;;:::o;12760:529::-;12828:7;13052:17;13113:18;13174:22;12952:1;12936:12;;:17;12933:349;;;1113:9;1040:15;12976:43;12969:50;;;;12933:349;13072:26;13090:1;13092:5;13072:17;:26::i;:::-;13052:46;;13154:5;13146:7;;13134:9;:19;:25;;;;;;;;13113:46;;13199:35;13212:9;13223:10;13199:12;:35::i;:::-;13174:60;;13256:14;13249:21;;12760:529;;;;;:::o;6309:307::-;147:1;134:10;:8;:10::i;:::-;:14;126:23;;;;;;;;6445:54;6458:19;:31;6478:10;6458:31;;;;;;;;;;;;;;;;6491:7;6445:12;:54::i;:::-;6411:19;:31;6431:10;6411:31;;;;;;;;;;;;;;;:88;;;;6549:55;6562:19;:32;6582:11;;;;;;;;;;;6562:32;;;;;;;;;;;;;;;;6596:7;6549:12;:55::i;:::-;6514:19;:32;6534:11;;;;;;;;;;;6514:32;;;;;;;;;;;;;;;:90;;;;6309:307;:::o;11835:137::-;11914:4;11951;11943:21;;;11936:28;;11835:137;:::o;12578:169::-;12670:7;12702:19;:37;12722:16;12702:37;;;;;;;;;;;;;;;;12695:44;;12578:169;;;:::o;1129:27::-;;;;:::o;11296:112::-;216:24;243:10;216:37;;272:14;:32;287:16;272:32;;;;;;;;;;;;;;;;;;;;;;;;;264:41;;;;;;;;11397:3;11384:10;:16;11374:7;:26;;;;11296:112;;:::o;12116:110::-;12174:7;12206:12;;12199:19;;12116:110;:::o;5803:225::-;216:24;243:10;216:37;;272:14;:32;287:16;272:32;;;;;;;;;;;;;;;;;;;;;;;;;264:41;;;;;;;;5953:13;5937;:29;;;;5983:4;5977:3;:10;;;;6010;5998:9;:22;;;;5803:225;;;;:::o;9387:398::-;216:24;243:10;216:37;;272:14;:32;287:16;272:32;;;;;;;;;;;;;;;;;;;;;;;;;264:41;;;;;;;;9600:12;9593:4;;:19;;;;;;;;;;;;;;;;;;9630:12;9623:4;;:19;;;;;;;;;;;;;;;;;;9660:12;9653:4;;:19;;;;;;;;;;;;;;;;;;9690:12;9683:4;;:19;;;;;;;;;;;;;;;;;;9720:12;9713:4;;:19;;;;;;;;;;;;;;;;;;9773:4;9743:14;:27;9758:11;9743:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;9387:398;;;;;;;:::o;6631:329::-;216:24;243:10;216:37;;272:14;:32;287:16;272:32;;;;;;;;;;;;;;;;;;;;;;;;;264:41;;;;;;;;6792:59;6805:19;:37;6825:16;6805:37;;;;;;;;;;;;;;;;6843:7;6792:12;:59::i;:::-;6752:19;:37;6772:16;6752:37;;;;;;;;;;;;;;;:99;;;;6897:55;6910:19;:32;6930:11;;;;;;;;;;;6910:32;;;;;;;;;;;;;;;;6944:7;6897:12;:55::i;:::-;6862:19;:32;6882:11;;;;;;;;;;;6862:32;;;;;;;;;;;;;;;:90;;;;6631:329;;;:::o;13371:120::-;13438:7;13470:13;;13463:20;;13371:120;:::o;9796:146::-;9889:7;216:24;243:10;216:37;;272:14;:32;287:16;272:32;;;;;;;;;;;;;;;;;;;;;;;;;264:41;;;;;;;;9921:9;;9914:16;;9796:146;;:::o;12304:182::-;12371:7;12396:24;12423:10;12396:37;;12451:27;12461:16;12451:9;:27::i;:::-;12444:34;;12304:182;;:::o;874:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9953:133::-;10011:7;10043:19;:31;10063:10;10043:31;;;;;;;;;;;;;;;;10036:38;;9953:133;:::o;10609:577::-;10734:4;10774:24;216;243:10;216:37;;272:14;:32;287:16;272:32;;;;;;;;;;;;;;;;;;;;;;;;;264:41;;;;;;;;10801:10;10774:37;;10892:68;10905:19;:37;10925:16;10905:37;;;;;;;;;;;;;;;;10944:15;10892:12;:68::i;:::-;10852:19;:37;10872:16;10852:37;;;;;;;;;;;;;;;:108;;;;11005:62;11018:19;:31;11038:10;11018:31;;;;;;;;;;;;;;;;11051:15;11005:12;:62::i;:::-;10971:19;:31;10991:10;10971:31;;;;;;;;;;;;;;;:96;;;;11110:10;11083:55;;11092:16;11083:55;;;11122:15;11083:55;;;;;;;;;;;;;;;;;;11174:4;11167:11;;10609:577;;;;;;:::o;11544:120::-;216:24;243:10;216:37;;272:14;:32;287:16;272:32;;;;;;;;;;;;;;;;;;;;;;;;;264:41;;;;;;;;11649:7;11640:6;:16;;;;;;;;;;;;:::i;:::-;;11544:120;;:::o;5702:90::-;5751:4;5780;5773:11;;5702:90;:::o;11421:112::-;216:24;243:10;216:37;;272:14;:32;287:16;272:32;;;;;;;;;;;;;;;;;;;;;;;;;264:41;;;;;;;;11520:5;11513:4;:12;;;;;;;;;;;;:::i;:::-;;11421:112;;:::o;10097:501::-;216:24;243:10;216:37;;272:14;:32;287:16;272:32;;;;;;;;;;;;;;;;;;;;;;;;;264:41;;;;;;;;10211:9;;10200:7;:20;;10197:394;;;10285:3;10282:2;10274:7;:10;:14;;;;;;;;10246:19;:25;10266:4;;;;;;;;;;;10246:25;;;;;;;;;;;;;;;;:43;;;;;;;;;;;10343:3;10340:2;10332:7;:10;:14;;;;;;;;10304:19;:25;10324:4;;;;;;;;;;;10304:25;;;;;;;;;;;;;;;;:43;;;;;;;;;;;10401:3;10398:2;10390:7;:10;:14;;;;;;;;10362:19;:25;10382:4;;;;;;;;;;;10362:25;;;;;;;;;;;;;;;;:43;;;;;;;;;;;10459:3;10456:2;10448:7;:10;:14;;;;;;;;10420:19;:25;10440:4;;;;;;;;;;;10420:25;;;;;;;;;;;;;;;;:43;;;;;;;;;;;10517:3;10514:2;10506:7;:10;:14;;;;;;;;10478:19;:25;10498:4;;;;;;;;;;;10478:25;;;;;;;;;;;;;;;;:43;;;;;;;;;;;10548:31;10561:9;;10571:7;10548:12;:31::i;:::-;10536:9;:43;;;;10197:394;10097:501;;:::o;1273:37::-;;;;:::o;7279:551::-;7413:6;7481:14;216:24;243:10;216:37;;272:14;:32;287:16;272:32;;;;;;;;;;;;;;;;;;;;;;;;;264:41;;;;;;;;7422:1;7413:10;;7409:414;7427:16;:23;7425:1;:25;7409:414;;;7498:7;7506:1;7498:10;;;;;;;;;;;;;;;;;;7481:27;;7566:61;7579:19;:40;7599:16;7616:1;7599:19;;;;;;;;;;;;;;;;;;7579:40;;;;;;;;;;;;;;;;7620:6;7566:12;:61::i;:::-;7523:19;:40;7543:16;7560:1;7543:19;;;;;;;;;;;;;;;;;;7523:40;;;;;;;;;;;;;;;:104;;;;7682:59;7695:19;:37;7715:16;;;;;;;;;;;7695:37;;;;;;;;;;;;;;;;7734:6;7682:12;:59::i;:::-;7642:19;:37;7662:16;;;;;;;;;;;7642:37;;;;;;;;;;;;;;;:99;;;;7784:16;7801:1;7784:19;;;;;;;;;;;;;;;;;;7761:50;;7778:4;7761:50;;;7804:6;7761:50;;;;;;;;;;;;;;;;;;7452:3;;;;;;;7409:414;;;7279:551;;;;;:::o;8477:899::-;8597:24;8721:15;8765:17;8827:18;8942:22;147:1;134:10;:8;:10::i;:::-;:14;126:23;;;;;;;;8624:10;8597:37;;8672:19;:37;8692:16;8672:37;;;;;;;;;;;;;;;;8653:15;:56;;8645:65;;;;;;;;8739:15;8721:33;;8785:31;8803:7;8811:4;8785:17;:31::i;:::-;8765:51;;8868:5;8860:7;;8848:9;:19;:25;;;;;;;;8827:46;;8967:35;8980:9;8991:10;8967:12;:35::i;:::-;8942:60;;9026:10;9013:9;;:23;;;;;;;;;;;9104:35;9117:12;;9131:7;9104:12;:35::i;:::-;9089:12;:50;;;;9190:60;9203:19;:37;9223:16;9203:37;;;;;;;;;;;;;;;;9242:7;9190:12;:60::i;:::-;9150:19;:37;9170:16;9150:37;;;;;;;;;;;;;;;:100;;;;9261:16;:25;;:41;9287:14;9261:41;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9261:41:0;9353:4;9318:50;;9327:16;9318:50;;;9360:7;9318:50;;;;;;;;;;;;;;;;;;8477:899;;;;;;:::o;2480:408::-;2519:7;2544:24;2592:16;2571:10;2544:37;;2611:19;:37;2631:16;2611:37;;;;;;;;;;;;;;;;2592:56;;2699:1;2659:19;:37;2679:16;2659:37;;;;;;;;;;;;;;;:41;;;;2751:4;2716:50;;2725:16;2716:50;;;2757:8;2716:50;;;;;;;;;;;;;;;;;;2793:8;2777:12;;:24;;;;;;;;;;;2825:29;2839:8;2849:4;2825:13;:29::i;:::-;2812:9;;:42;;;;;;;;;;;2872:8;2865:15;;2480:408;;;:::o;8214:199::-;8262:24;8310:15;8289:10;8262:37;;8328:19;:37;8348:16;8328:37;;;;;;;;;;;;;;;;8310:55;;8389:1;8379:7;:11;8376:29;;;8392:13;8397:7;8392:4;:13::i;:::-;8376:29;8214:199;;:::o;6034:155::-;6118:7;6143:38;6158:9;6169:11;6143:14;:38::i;:::-;;6034:155;;;:::o;6971:297::-;216:24;243:10;216:37;;272:14;:32;287:16;272:32;;;;;;;;;;;;;;;;;;;;;;;;;264:41;;;;;;;;7140:59;7153:19;:37;7173:16;7153:37;;;;;;;;;;;;;;;;7191:7;7140:12;:59::i;:::-;7100:19;:37;7120:16;7100:37;;;;;;;;;;;;;;;:99;;;;7225:35;7239:12;;7252:7;7225:12;:35::i;:::-;7210:12;:50;;;;6971:297;;;:::o;7841:304::-;7953:7;7918:19;:31;7938:10;7918:31;;;;;;;;;;;;;;;;:42;;7910:51;;;;;;;;7972:10;:19;;:28;7992:7;7972:28;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7972:28:0;8046:7;8011:19;:31;8031:10;8011:31;;;;;;;;;;;;;;;;:42;;;;;;;;;;;8098:4;8069:68;;8078:10;8069:68;;;8104:32;8128:7;8104:23;:32::i;:::-;8069:68;;;;;;;;;;;;;;;;;;7841:304;:::o;11672:155::-;216:24;243:10;216:37;;272:14;:32;287:16;272:32;;;;;;;;;;;;;;;;;;;;;;;;;264:41;;;;;;;;11802:17;11783:16;;:36;;;;;;;;;;;;;;;;;;11672:155;;:::o;22105:123::-;22163:7;22195:1;22190;:6;;22183:14;;;;;;22219:1;22215;:5;22208:12;;22105:123;;;;:::o;15903:2380::-;16045:7;16070:30;16152:15;16236:20;16282:23;16659:16;17538:27;16137:1;16132:4;:6;16128:1;:11;1113:9;16104:36;16070:71;;16170:55;16186:13;16184:1;:15;16202:22;16170:12;:55::i;:::-;16152:73;;16259:12;;16236:35;;16614:22;16612:1;:24;16342:253;16378:166;16507:9;16484:22;16482:1;:24;:34;16448:1;16439:7;:10;:78;16378:4;:166::i;:::-;16569:7;16342:12;:253::i;:::-;16323:314;;;;;;;;16282:366;;16678:17;16690:4;16678:11;:17::i;:::-;16659:36;;16744:8;16728:12;16710:15;:30;16709:43;:70;;;;;16771:8;16756:12;:23;16709:70;16706:175;;;16846:22;16843:1;16827:15;:17;16826:42;16811:13;:58;16795:74;;16706:175;16929:8;16913:12;16895:15;:30;16894:43;:70;;;;;16956:8;16941:12;:23;16894:70;16891:1236;;;17009:12;16998:8;:23;16980:41;;17048:196;17079:9;17205:22;17184:1;17168:15;:17;17167:60;17151:13;17149:1;:15;17148:80;17126:1;17109:15;17108:19;;;;;;;;17107:122;17048:12;:196::i;:::-;17036:208;;17310:22;17307:1;17291:15;:17;17290:42;17275:13;:58;17259:74;;17362:1;17355:4;:8;17348:15;;17439:1;17434:4;:6;17429:1;17428:13;1113:9;17404:38;17378:65;;17468:55;17484:13;17482:1;:15;17500:22;17468:12;:55::i;:::-;17458:65;;17914:22;17912:1;:24;17610:281;17650:182;17791:9;17768:22;17766:1;:24;:34;17728:1;17719:7;:10;:82;17650:4;:182::i;:::-;17861:7;17610:12;:281::i;:::-;17587:350;;;;;;;;17538:414;;18022:22;18019:1;17999:19;:21;17998:46;17983:13;:62;17967:78;;18096:19;18078:15;:37;18060:55;;16891:1236;18147:4;18140:11;;:3;:11;;;18137:106;;;18193:13;18177;:29;;;;18227:4;18221:3;:10;;;;18137:106;18260:15;18253:22;;15903:2380;;;;;;;;;;;;:::o;22303:147::-;22361:7;22381:9;22397:1;22393;:5;22381:17;;22421:1;22416;:6;;22409:14;;;;;;22441:1;22434:8;;22303:147;;;;;:::o;18810:2164::-;18914:7;18939:20;18985:22;19022:12;19051:16;19100:21;19148:30;19296:20;19357:9;18962:12;;18939:35;;19010:1;18985:26;;19037:3;;19022:18;;19070:19;19087:1;19082:4;:6;19070:11;:19::i;:::-;19051:38;;19124:13;;19100:37;;19217:1;19212:4;:6;19207:1;19206:13;1113:9;19182:38;19148:73;;19262:8;19251:7;19236:12;:22;19235:35;19232:667;;;19334:8;19319:12;:23;19296:46;;19403:22;19400:1;19387:12;:14;19386:39;19369:13;:57;19357:69;;19461:12;19451:7;:22;19441:32;;19565:22;19562:1;19549:12;:14;19548:39;19544:1;19542;:3;19541:47;19537:1;19524:12;:14;;;;;;;;19523:66;19505:14;:85;19488:102;;19653:22;19650:1;19637:12;:14;19636:39;19621:13;:55;19605:71;;19721:12;19706;:27;19691:42;;19760:1;19755:4;:6;19748:13;;19838:1;19833:4;:6;19828:1;19827:13;1113:9;19803:38;19777:65;;19868:19;19885:1;19880:4;:6;19868:11;:19::i;:::-;19857:30;;19232:667;19939:8;19928:7;19913:12;:22;19912:35;19909:596;;;20003:8;19988:12;:23;19973:38;;20046:12;20036:7;:22;20026:32;;20112:22;20109:1;20096:12;:14;20095:39;20078:13;:57;20074:61;;20227:22;20224:1;20211:12;:14;20210:39;20206:1;20204;:3;20203:47;20199:1;20186:12;:14;;;;;;;;20185:66;20167:14;:85;20150:102;;20283:1;20267:17;;20329:12;20314;:27;20299:42;;20368:1;20363:4;:6;20356:13;;20446:1;20441:4;:6;20436:1;20435:13;1113:9;20411:38;20385:65;;20476:17;20488:4;20476:11;:17::i;:::-;20465:28;;19909:596;20528:1;20518:7;:11;20515:303;;;20589:22;20586:1;20578:7;:9;20577:34;20560:13;:52;20556:56;;20695:22;20692:1;20684:7;:9;20683:34;20679:1;20677;:3;20676:42;20672:1;20664:7;:9;;;;;;;;20663:56;20645:14;:75;20628:92;;20766:7;20751:12;:22;20736:37;;20805:1;20789:17;;20515:303;20839:4;20831:12;;:4;:12;;;20828:107;;;20875:4;20869:3;:10;;;;20910:13;20894;:29;;;;20828:107;20952:14;20945:21;;18810:2164;;;;;;;;;;;;:::o;2899:2160::-;2999:7;3024:20;3070:22;3107:12;3136:16;3185:21;3233:30;3381:20;3442:9;3047:12;;3024:35;;3095:1;3070:26;;3122:3;;3107:18;;3155:19;3172:1;3167:4;:6;3155:11;:19::i;:::-;3136:38;;3209:13;;3185:37;;3302:1;3297:4;:6;3292:1;3291:13;1113:9;3267:38;3233:73;;3347:8;3336:7;3321:12;:22;3320:35;3317:667;;;3419:8;3404:12;:23;3381:46;;3488:22;3485:1;3472:12;:14;3471:39;3454:13;:57;3442:69;;3546:12;3536:7;:22;3526:32;;3650:22;3647:1;3634:12;:14;3633:39;3629:1;3627;:3;3626:47;3622:1;3609:12;:14;;;;;;;;3608:66;3590:14;:85;3573:102;;3738:22;3735:1;3722:12;:14;3721:39;3706:13;:55;3690:71;;3806:12;3791;:27;3776:42;;3845:1;3840:4;:6;3833:13;;3923:1;3918:4;:6;3913:1;3912:13;1113:9;3888:38;3862:65;;3953:19;3970:1;3965:4;:6;3953:11;:19::i;:::-;3942:30;;3317:667;4024:8;4013:7;3998:12;:22;3997:35;3994:596;;;4088:8;4073:12;:23;4058:38;;4131:12;4121:7;:22;4111:32;;4197:22;4194:1;4181:12;:14;4180:39;4163:13;:57;4159:61;;4312:22;4309:1;4296:12;:14;4295:39;4291:1;4289;:3;4288:47;4284:1;4271:12;:14;;;;;;;;4270:66;4252:14;:85;4235:102;;4368:1;4352:17;;4414:12;4399;:27;4384:42;;4453:1;4448:4;:6;4441:13;;4531:1;4526:4;:6;4521:1;4520:13;1113:9;4496:38;4470:65;;4561:17;4573:4;4561:11;:17::i;:::-;4550:28;;3994:596;4613:1;4603:7;:11;4600:303;;;4674:22;4671:1;4663:7;:9;4662:34;4645:13;:52;4641:56;;4780:22;4777:1;4769:7;:9;4768:34;4764:1;4762;:3;4761:42;4757:1;4749:7;:9;;;;;;;;4748:56;4730:14;:75;4713:92;;4851:7;4836:12;:22;4821:37;;4890:1;4874:17;;4600:303;4924:4;4916:12;;:4;:12;;;4913:107;;;4960:4;4954:3;:10;;;;4995:13;4979;:29;;;;4913:107;5037:14;5030:21;;2899:2160;;;;;;;;;;;;:::o;20990:198::-;21035:6;21054;21073:1;21068;21064;:5;21063:11;;;;;;;;21054:20;;21089:1;21085:5;;21101:80;21112:1;21108;:5;21101:80;;;21134:1;21130:5;;21168:1;21163;21159;21155;:5;;;;;;;;:9;21154:15;;;;;;;;21150:19;;21101:80;;;20990:198;;;;:::o;18294:504::-;18366:7;18402:1;18394:4;:9;;18391:71;;;18445:4;18437:5;:12;18429:21;;;;18391:71;18482:1;18475:4;:8;:22;;;;;18495:2;18487:4;:10;;18475:22;18472:97;;;18550:5;18547:1;18542:4;:6;18541:14;18531:6;:25;18523:34;;;;18472:97;18589:2;18582:4;:9;:23;;;;;18603:2;18595:4;:10;;18582:23;18579:99;;;18659:5;18655:2;18650:4;:7;18649:15;18639:6;:26;18631:35;;;;18579:99;18698:2;18691:4;:9;18688:84;;;18753:5;18749:2;18744:4;:7;18743:15;18734:6;:25;18726:34;;;;18688:84;18789:1;18782:8;;18294:504;;;;:::o;28:21163::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://fffbc3d6c95928b22fbe30bc6a5ab7a16edfcf841339b14b2554d0525ad4fdc2

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.