ETH Price: $3,111.01 (-0.30%)

Contract

0x7b79387dD30dC6848dd2308C825B6802e99aBc84
 

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Change Devevoper...201210992024-06-18 20:42:47154 days ago1718743367IN
E4ROW: Old Contract
0 ETH0.000167487
Change Owner199249672024-05-22 10:56:59181 days ago1716375419IN
E4ROW: Old Contract
0 ETH0.000204728.33442035
Purchase Token199249642024-05-22 10:56:23181 days ago1716375383IN
E4ROW: Old Contract
0.001 ETH0.000200228.31588292
Change Owner199248042024-05-22 10:23:47181 days ago1716373427IN
E4ROW: Old Contract
0 ETH0.000185987.57128236
Change Devevoper...199248012024-05-22 10:23:11181 days ago1716373391IN
E4ROW: Old Contract
0 ETH0.000181917.60315847
Purchase Token199247932024-05-22 10:21:35181 days ago1716373295IN
E4ROW: Old Contract
0.00001 ETH0.00020218.39388593
Hara Kiri199209012024-05-21 21:15:11182 days ago1716326111IN
E4ROW: Old Contract
0 ETH0.0002654410.98707612
Approve56102752018-05-14 4:17:342382 days ago1526271454IN
E4ROW: Old Contract
0 ETH0.0009511121
Withdraw Dividen...56102112018-05-14 4:00:512382 days ago1526270451IN
E4ROW: Old Contract
0 ETH0.0004295121
Transfer55139552018-04-27 8:58:382398 days ago1524819518IN
E4ROW: Old Contract
0 ETH0.0002474610
Approve49519452018-01-22 11:16:012493 days ago1516619761IN
E4ROW: Old Contract
0 ETH0.000181164
Withdraw Dividen...49508852018-01-22 6:51:162494 days ago1516603876IN
E4ROW: Old Contract
0 ETH0.000081814
Approve48638402018-01-06 14:05:122509 days ago1515247512IN
E4ROW: Old Contract
0 ETH0.0014159231
Withdraw Dividen...48638012018-01-06 13:57:362509 days ago1515247056IN
E4ROW: Old Contract
0 ETH0.0006442631.5
Approve48223632017-12-30 5:48:372517 days ago1514612917IN
E4ROW: Old Contract
0 ETH0.0013587330
Approve48222902017-12-30 5:28:012517 days ago1514611681IN
E4ROW: Old Contract
0 ETH0.000996422
Withdraw Dividen...48222302017-12-30 5:13:432517 days ago1514610823IN
E4ROW: Old Contract
0 ETH0.0006135930
Transfer47850812017-12-23 22:50:512523 days ago1514069451IN
E4ROW: Old Contract
0 ETH0.000417264
Approve47377212017-12-15 15:52:582531 days ago1513353178IN
E4ROW: Old Contract
0 ETH0.0003029110
Approve47267002017-12-13 17:35:202533 days ago1513186520IN
E4ROW: Old Contract
0 ETH0.0004529110
Withdraw Dividen...47265762017-12-13 17:04:012533 days ago1513184641IN
E4ROW: Old Contract
0 ETH0.0002045310
Approve47118702017-12-11 3:16:252536 days ago1512962185IN
E4ROW: Old Contract
0 ETH0.0004529110
Withdraw Dividen...47115612017-12-11 2:04:382536 days ago1512957878IN
E4ROW: Old Contract
0 ETH0.0002045310
Withdraw Dividen...47075492017-12-10 9:34:322536 days ago1512898472IN
E4ROW: Old Contract
0 ETH0.0004295121
Transfer46629942017-12-02 15:26:472544 days ago1512228407IN
E4ROW: Old Contract
0 ETH0.0008001221
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
56102112018-05-14 4:00:512382 days ago1526270451
E4ROW: Old Contract
0.00795544 ETH
49508852018-01-22 6:51:162494 days ago1516603876
E4ROW: Old Contract
0.00012366 ETH
48638012018-01-06 13:57:362509 days ago1515247056
E4ROW: Old Contract
0.00286796 ETH
48222302017-12-30 5:13:432517 days ago1514610823
E4ROW: Old Contract
0.00093839 ETH
47265762017-12-13 17:04:012533 days ago1513184641
E4ROW: Old Contract
0.00045148 ETH
47115612017-12-11 2:04:382536 days ago1512957878
E4ROW: Old Contract
0.00003502 ETH
47075492017-12-10 9:34:322536 days ago1512898472
E4ROW: Old Contract
0.00024732 ETH
42354702017-09-03 22:52:202634 days ago1504479140
E4ROW: Old Contract
0.41293464 ETH
42168662017-08-29 16:03:322639 days ago1504022612
E4ROW: Old Contract
0.00263008 ETH
42084692017-08-27 6:27:122642 days ago1503815232
E4ROW: Old Contract
0.00098929 ETH
42029542017-08-25 16:42:552643 days ago1503679375
E4ROW: Old Contract
0.00003502 ETH
41999182017-08-24 20:43:002644 days ago1503607380
E4ROW: Old Contract
0.00263008 ETH
41993742017-08-24 17:48:092644 days ago1503596889
E4ROW: Old Contract
0.00390284 ETH
41948422017-08-23 15:45:112645 days ago1503503111
E4ROW: Old Contract
0.00273199 ETH
41835162017-08-20 23:02:572648 days ago1503270177
E4ROW: Old Contract
0.0023417 ETH
41713172017-08-18 0:54:522651 days ago1503017692
E4ROW: Old Contract
0.00010508 ETH
41611852017-08-15 14:19:092653 days ago1502806749
E4ROW: Old Contract
0.00584901 ETH
41494672017-08-12 18:02:062656 days ago1502560926
E4ROW: Old Contract
0.01329321 ETH
41483552017-08-12 11:44:302656 days ago1502538270
E4ROW: Old Contract
0.00014011 ETH
41456592017-08-11 20:04:272657 days ago1502481867
E4ROW: Old Contract
0.00039028 ETH
41329472017-08-08 17:14:042660 days ago1502212444
E4ROW: Old Contract
0.00021017 ETH
41308102017-08-08 4:55:572661 days ago1502168157
E4ROW: Old Contract
0.00014011 ETH
41295582017-08-07 21:24:332661 days ago1502141073
E4ROW: Old Contract
0.01876795 ETH
41289592017-08-07 17:45:342661 days ago1502127934
E4ROW: Old Contract
0.00581274 ETH
41288462017-08-07 17:09:102661 days ago1502125750
E4ROW: Old Contract
0.00014011 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
E4Token

Compiler Version
v0.4.10+commit.f0d539ae

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2017-04-25
*/

// VERSION M(A)

pragma solidity ^0.4.8;


//
// FOR REFERENCE - INCLUDE  iE4RowEscrow  (interface) CONTRACT at the top .....
//

contract iE4RowEscrow {
	function getNumGamesStarted() constant returns (int ngames);
}

// Abstract contract for the full ERC 20 Token standard
// https://github.com/ethereum/EIPs/issues/20

// ---------------------------------
// ABSTRACT standard token class
// ---------------------------------
contract Token { 
    function totalSupply() constant returns (uint256 supply);
    function balanceOf(address _owner) constant returns (uint256 balance);
    function transfer(address _to, uint256 _value) returns (bool success);
    function transferFrom(address _from, address _to, uint256 _value) returns (bool success);
    function approve(address _spender, uint256 _value) returns (bool success);
    function allowance(address _owner, address _spender) constant returns (uint256 remaining);

    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}


// --------------------------
//  E4RowRewards - abstract e4 dividend contract
// --------------------------
contract E4RowRewards
{
	function checkDividends(address _addr) constant returns(uint _amount);
	function withdrawDividends() public returns (uint namount);
}

// --------------------------
//  Finney Chip - token contract
// --------------------------
contract E4Token is Token, E4RowRewards {
    	event StatEvent(string msg);
    	event StatEventI(string msg, uint val);

	enum SettingStateValue  {debug, release, lockedRelease}
	enum IcoStatusValue {anouncement, saleOpen, saleClosed, failed, succeeded}




	struct tokenAccount {
		bool alloced; // flag to ascert prior allocation
		uint tokens; // num tokens
		uint balance; // rewards balance
	}
// -----------------------------
//  data storage
// ----------------------------------------
	address developers; // developers token holding address
	address public owner; // deployer executor
	address founderOrg; // founder orginaization contract
	address auxPartner; // aux partner (pr/auditing) - 1 percent upon close
	address e4_partner; // e4row  contract addresses


	mapping (address => tokenAccount) holderAccounts ; // who holds how many tokens (high two bytes contain curPayId)
	mapping (uint => address) holderIndexes ; // for iteration thru holder
	uint numAccounts;

	uint partnerCredits; // amount partner (e4row)  has paid
	mapping (address => mapping (address => uint256)) allowed; // approvals


	uint maxMintableTokens; // ...
	uint minIcoTokenGoal;// token goal by sale end
	uint minUsageGoal; //  num games goal by usage deadline
	uint public  tokenPrice; // price per token
	uint public payoutThreshold; // threshold till payout

	uint totalTokenFundsReceived; 	// running total of token funds received
	uint public totalTokensMinted; 	// total number of tokens minted
	uint public holdoverBalance; 		// hold this amount until threshhold before reward payout
	int public payoutBalance; 		// hold this amount until threshhold before reward payout
	int prOrigPayoutBal;			// original payout balance before run
	uint prOrigTokensMint; 			// tokens minted at start of pay run
	uint public curPayoutId;		// current payout id
	uint public lastPayoutIndex;		// payout idx between run segments
	uint public maxPaysPer;			// num pays per segment
	uint public minPayInterval;		// min interval between start pay run


	uint fundingStart; 		// funding start time immediately after anouncement
	uint fundingDeadline; 		// funding end time
	uint usageDeadline; 		// deadline where minimum usage needs to be met before considered success
	uint public lastPayoutTime; 	// timestamp of last payout time
	uint vestTime; 		// 1 year past sale vest developer tokens
	uint numDevTokens; 	// 10 per cent of tokens after close to developers
	bool developersGranted; 		// flag
	uint remunerationStage; 	// 0 for not yet, 1 for 10 percent, 2 for remaining  upon succeeded.
	uint public remunerationBalance; 	// remuneration balance to release token funds
	uint auxPartnerBalance; 	// aux partner balance - 1 percent
	uint rmGas; // remuneration gas
	uint rwGas; // reward gas
	uint rfGas; // refund gas

	IcoStatusValue icoStatus;  // current status of ico
	SettingStateValue public settingsState;


	// --------------------
	// contract constructor
	// --------------------
	function E4Token() 
	{
		owner = msg.sender;
		developers = msg.sender;
	}

	// -----------------------------------
	// use this to reset everything, will never be called after lockRelease
	// -----------------------------------
	function applySettings(SettingStateValue qState, uint _saleStart, uint _saleEnd, uint _usageEnd, uint _minUsage, uint _tokGoal, uint  _maxMintable, uint _threshold, uint _price, uint _mpp, uint _mpi )
	{
		if (msg.sender != owner) 
			return;

		// these settings are permanently tweakable for performance adjustments
		payoutThreshold = _threshold;
		maxPaysPer = _mpp;
		minPayInterval = _mpi;

		// this first test checks if already locked
		if (settingsState == SettingStateValue.lockedRelease)
			return;

 	 	settingsState = qState;

		// this second test allows locking without changing other permanent settings
		// WARNING, MAKE SURE YOUR'RE HAPPY WITH ALL SETTINGS 
		// BEFORE LOCKING

		if (qState == SettingStateValue.lockedRelease) {
			StatEvent("Locking!");
			return;
		}

		icoStatus = IcoStatusValue.anouncement;

		rmGas = 100000; // remuneration gas
		rwGas = 10000; // reward gas
		rfGas = 10000; // refund gas


		// zero out all token holders.  
		// leave alloced on, leave num accounts
		// cant delete them anyways
	
		if (totalTokensMinted > 0) {
			for (uint i = 0; i < numAccounts; i++ ) {
				address a = holderIndexes[i];
				if (a != address(0)) {
					holderAccounts[a].tokens = 0;
					holderAccounts[a].balance = 0;
				}
			}
		}
		// do not reset numAccounts!

		totalTokensMinted = 0; // this will erase
		totalTokenFundsReceived = 0; // this will erase.
		partnerCredits = 0; // reset all partner credits

		fundingStart =  _saleStart;
		fundingDeadline = _saleEnd;
		usageDeadline = _usageEnd;
		minUsageGoal = _minUsage;
		minIcoTokenGoal = _tokGoal;
		maxMintableTokens = _maxMintable;
		tokenPrice = _price;

		vestTime = fundingStart + (365 days);
		numDevTokens = 0;
		
		holdoverBalance = 0;
		payoutBalance = 0;
		curPayoutId = 1;
		lastPayoutIndex = 0;
		remunerationStage = 0;
		remunerationBalance = 0;
		auxPartnerBalance = 0;
		developersGranted = false;
		lastPayoutTime = 0;

		if (this.balance > 0) {
			if (!owner.call.gas(rfGas).value(this.balance)())
				StatEvent("ERROR!");
		}
		StatEvent("ok");

	}


	// ---------------------------------------------------
	// tokens held reserve the top two bytes for the payid last paid.
	// this is so holders at the top of the list dont transfer tokens 
	// to themselves on the bottom of the list thus scamming the 
	// system. this function deconstructs the tokenheld value.
	// ---------------------------------------------------
	function getPayIdAndHeld(uint _tokHeld) internal returns (uint _payId, uint _held)
	{
		_payId = (_tokHeld / (2 ** 48)) & 0xffff;
		_held = _tokHeld & 0xffffffffffff;
	}
	function getHeld(uint _tokHeld) internal  returns (uint _held)
	{
		_held = _tokHeld & 0xffffffffffff;
	}
	// ---------------------------------------------------
	// allocate a new account by setting alloc to true
	// set the top to bytes of tokens to cur pay id to leave out of current round
	// add holder index, bump the num accounts
	// ---------------------------------------------------
	function addAccount(address _addr) internal  {
		holderAccounts[_addr].alloced = true;
		holderAccounts[_addr].tokens = (curPayoutId * (2 ** 48));
		holderIndexes[numAccounts++] = _addr;
	}
	

// --------------------------------------
// BEGIN ERC-20 from StandardToken
// --------------------------------------
	function totalSupply() constant returns (uint256 supply)
	{
		if (icoStatus == IcoStatusValue.saleOpen
			|| icoStatus == IcoStatusValue.anouncement)
			supply = maxMintableTokens;
		else
			supply = totalTokensMinted;
	}

	function transfer(address _to, uint256 _value) returns (bool success) {

		if ((msg.sender == developers) 
			&&  (now < vestTime)) {
			//statEvent("Tokens not yet vested.");
			return false;
		}


	        //Default assumes totalSupply can't be over max (2^256 - 1).
	        //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap.
	        //Replace the if with this one instead.
	        //if (holderAccounts[msg.sender] >= _value && balances[_to] + _value > holderAccounts[_to]) {

		var (pidFrom, heldFrom) = getPayIdAndHeld(holderAccounts[msg.sender].tokens);
	        if (heldFrom >= _value && _value > 0) {

	            holderAccounts[msg.sender].tokens -= _value;

		    if (!holderAccounts[_to].alloced) {
			addAccount(_to);
		    }

		    uint newHeld = _value + getHeld(holderAccounts[_to].tokens);
		    if (icoStatus == IcoStatusValue.saleOpen) // avoid mcgees gambit
		    	pidFrom = curPayoutId;
		    holderAccounts[_to].tokens = newHeld | (pidFrom * (2 ** 48));

	            Transfer(msg.sender, _to, _value);
	            return true;
	        } else { 
			return false; 
		}
    	}

    	function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {

		if ((_from == developers) 
			&&  (now < vestTime)) {
			//statEvent("Tokens not yet vested.");
			return false;
		}


        //same as above. Replace this line with the following if you want to protect against wrapping uints.
        //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) {

		var (pidFrom, heldFrom) = getPayIdAndHeld(holderAccounts[_from].tokens);
        	if (heldFrom >= _value && allowed[_from][msg.sender] >= _value && _value > 0) {
	            holderAccounts[_from].tokens -= _value;

		    if (!holderAccounts[_to].alloced)
			addAccount(_to);

		    uint newHeld = _value + getHeld(holderAccounts[_to].tokens);

		    if (icoStatus == IcoStatusValue.saleOpen) // avoid mcgees gambit
		    	pidFrom = curPayoutId;
		    holderAccounts[_to].tokens = newHeld | (pidFrom * (2 ** 48));

	            allowed[_from][msg.sender] -= _value;
	            Transfer(_from, _to, _value);
	            return true;
	        } else { 
		    return false; 
		}
	}


    	function balanceOf(address _owner) constant returns (uint256 balance) {
		// vars default to 0
		if (holderAccounts[_owner].alloced) {
	        	balance = getHeld(holderAccounts[_owner].tokens);
		} 
    	}

    	function approve(address _spender, uint256 _value) returns (bool success) {
        	allowed[msg.sender][_spender] = _value;
        	Approval(msg.sender, _spender, _value);
        	return true;
    	}

    	function allowance(address _owner, address _spender) constant returns (uint256 remaining) {
      		return allowed[_owner][_spender];
    	}
// ----------------------------------
// END ERC20
// ----------------------------------

  



	// -------------------------------------------
	// default payable function.
	// if sender is e4row  partner, this is a rake fee payment
	// otherwise this is a token purchase.
	// tokens only purchaseable between tokenfundingstart and end
	// -------------------------------------------
	function () payable {
		if (msg.sender == e4_partner) {
		     feePayment(); // from e4row game escrow contract
		} else {
		     purchaseToken();
		}
	}

	// -----------------------------
	// purchase token function - tokens only sold during sale period up until the max tokens
	// purchase price is tokenPrice.  all units in wei.
	// purchaser will not be included in current pay run
	// -----------------------------
	function purchaseToken() payable {

		uint nvalue = msg.value; // being careful to preserve msg.value
		address npurchaser = msg.sender;
		if (nvalue < tokenPrice) 
			throw;

		uint qty = nvalue/tokenPrice;
		updateIcoStatus();
		if (icoStatus != IcoStatusValue.saleOpen) // purchase is closed
			throw;
		if (totalTokensMinted + qty > maxMintableTokens)
			throw;
		if (!holderAccounts[npurchaser].alloced)
			addAccount(npurchaser);
		
		// purchaser waits for next payrun. otherwise can disrupt cur pay run
		uint newHeld = qty + getHeld(holderAccounts[npurchaser].tokens);
		holderAccounts[npurchaser].tokens = newHeld | (curPayoutId * (2 ** 48));

		totalTokensMinted += qty;
		totalTokenFundsReceived += nvalue;

		if (totalTokensMinted == maxMintableTokens) {
			icoStatus = IcoStatusValue.saleClosed;
			//test unnecessary -  if (getNumTokensPurchased() >= minIcoTokenGoal)
			doDeveloperGrant();
			StatEventI("Purchased,Granted", qty);
		} else
			StatEventI("Purchased", qty);

	}


	// ---------------------------
	// accept payment from e4row contract
	// WARNING! DO NOT CALL THIS FUNCTION LEST YOU LOSE YOUR MONEY
	// HOWEVER ADD THIS GIFT TO THE HOLDOVERBALANCE
	// YOU HAVE BEEN WARNED
	// ---------------------------
	function feePayment() payable  
	{
		if (msg.sender != e4_partner) {
			if (msg.value > 0)
				holdoverBalance += msg.value;
			StatEvent("forbidden");
			return; // thank you
		}
		uint nfvalue = msg.value; // preserve value in case changed in dev grant

		updateIcoStatus();

		holdoverBalance += nfvalue;
		partnerCredits += nfvalue;
		StatEventI("Payment", nfvalue);

		if (holdoverBalance > payoutThreshold
			|| payoutBalance > 0)
			doPayout(maxPaysPer);
		
	
	}

	// ---------------------------
	// set the e4row partner, this is only done once
	// ---------------------------
	function setE4RowPartner(address _addr) public	
	{
	// ONLY owner can set and ONLY ONCE! (unless "unlocked" debug)
	// once its locked. ONLY ONCE!
		if (msg.sender == owner) {
			if ((e4_partner == address(0)) || (settingsState == SettingStateValue.debug)) {
				e4_partner = _addr;
				partnerCredits = 0;
				//StatEventI("E4-Set", 0);
			} else {
				StatEvent("Already Set");
			}
		}
	}

	// ----------------------------
	// return the total tokens purchased
	// ----------------------------
	function getNumTokensPurchased() constant returns(uint _purchased)
	{
		_purchased = totalTokensMinted-numDevTokens;
	}

	// ----------------------------
	// return the num games as reported from the e4row  contract
	// ----------------------------
	function getNumGames() constant returns(uint _games)
	{
		//_games = 0;
		if (e4_partner != address(0)) {
			iE4RowEscrow pe4 = iE4RowEscrow(e4_partner);
			_games = uint(pe4.getNumGamesStarted());
		} 
		//else
		//StatEvent("Empty E4");
	}

	// ------------------------------------------------
	// get the founders, auxPartner, developer
	// --------------------------------------------------
	function getSpecialAddresses() constant returns (address _fndr, address _aux, address _dev, address _e4)
	{
		//if (_sender == owner) { // no msg.sender on constant functions at least in mew
			_fndr = founderOrg;
			_aux = auxPartner;
			_dev = developers;
			_e4  = e4_partner;
		//}
	}



	// ----------------------------
	// update the ico status
	// ----------------------------
	function updateIcoStatus() public
	{
		if (icoStatus == IcoStatusValue.succeeded 
			|| icoStatus == IcoStatusValue.failed)
			return;
		else if (icoStatus == IcoStatusValue.anouncement) {
			if (now > fundingStart && now <= fundingDeadline) {
				icoStatus = IcoStatusValue.saleOpen;
				
			} else if (now > fundingDeadline) {
				// should not be here - this will eventually fail
				icoStatus = IcoStatusValue.saleClosed;
			}
		} else {
			uint numP = getNumTokensPurchased();
			uint numG = getNumGames();
			if ((now > fundingDeadline && numP < minIcoTokenGoal)
				|| (now > usageDeadline && numG < minUsageGoal)) {
				icoStatus = IcoStatusValue.failed;
			} else if ((now > fundingDeadline) // dont want to prevent more token sales
				&& (numP >= minIcoTokenGoal)
				&& (numG >= minUsageGoal)) {
				icoStatus = IcoStatusValue.succeeded; // hooray
			}
			if (icoStatus == IcoStatusValue.saleOpen
				&& ((numP >= maxMintableTokens)
				|| (now > fundingDeadline))) {
					icoStatus = IcoStatusValue.saleClosed;
				}
		}

		if (!developersGranted
			&& icoStatus != IcoStatusValue.saleOpen 
			&& icoStatus != IcoStatusValue.anouncement
			&& getNumTokensPurchased() >= minIcoTokenGoal) {
				doDeveloperGrant(); // grant whenever status goes from open to anything...
		}

	
	}

	
	// ----------------------------
	// request refund. Caller must call to request and receive refund 
	// WARNING - withdraw rewards/dividends before calling.
	// YOU HAVE BEEN WARNED
	// ----------------------------
	function requestRefund()
	{
		address nrequester = msg.sender;
		updateIcoStatus();

		uint ntokens = getHeld(holderAccounts[nrequester].tokens);
		if (icoStatus != IcoStatusValue.failed)
			StatEvent("No Refund");
		else if (ntokens == 0)
			StatEvent("No Tokens");
		else {
			uint nrefund = ntokens * tokenPrice;
			if (getNumTokensPurchased() >= minIcoTokenGoal)
				nrefund -= (nrefund /10); // only 90 percent b/c 10 percent payout

			if (!holderAccounts[developers].alloced) 
				addAccount(developers);
			holderAccounts[developers].tokens += ntokens;
			holderAccounts[nrequester].tokens = 0;
			if (holderAccounts[nrequester].balance > 0) {
				// see above warning!!
				holderAccounts[developers].balance += holderAccounts[nrequester].balance;
				holderAccounts[nrequester].balance = 0;
			}

			if (!nrequester.call.gas(rfGas).value(nrefund)())
				throw;
			//StatEventI("Refunded", nrefund);
		}
	}



	// ---------------------------------------------------
	// payout rewards to all token holders
	// use a second holding variable called PayoutBalance to do 
	// the actual payout from b/c too much gas to iterate thru 
	// each payee. Only start a new run at most once per "minpayinterval".
	// Its done in runs of "_numPays"
	// we use special coding for the holderAccounts to avoid a hack
	// of getting paid at the top of the list then transfering tokens
	// to another address at the bottom of the list.
	// because of that each holderAccounts entry gets the payoutid stamped upon it (top two bytes)
	// also a token transfer will transfer the payout id.
	// ---------------------------------------------------
	function doPayout(uint _numPays)  internal
	{
		if (totalTokensMinted == 0)
			return;

		if ((holdoverBalance > 0) 
			&& (payoutBalance == 0)
			&& (now > (lastPayoutTime+minPayInterval))) {
			// start a new run
			curPayoutId++;
			if (curPayoutId >= 32768)
				curPayoutId = 1;
			lastPayoutTime = now;
			payoutBalance = int(holdoverBalance);
			prOrigPayoutBal = payoutBalance;
			prOrigTokensMint = totalTokensMinted;
			holdoverBalance = 0;
			lastPayoutIndex = 0;
			StatEventI("StartRun", uint(curPayoutId));
		} else if (payoutBalance > 0) {
			// work down the p.o.b
			uint nAmount;
			uint nPerTokDistrib = uint(prOrigPayoutBal)/prOrigTokensMint;
			uint paids = 0;
			uint i; // intentional
			for (i = lastPayoutIndex; (paids < _numPays) && (i < numAccounts) && (payoutBalance > 0); i++ ) {
				address a = holderIndexes[i];
				if (a == address(0)) {
					continue;
				}
				var (pid, held) = getPayIdAndHeld(holderAccounts[a].tokens);
				if ((held > 0) && (pid != curPayoutId)) {
					nAmount = nPerTokDistrib * held;
					if (int(nAmount) <= payoutBalance){
						holderAccounts[a].balance += nAmount; 
						holderAccounts[a].tokens = (curPayoutId * (2 ** 48)) | held;
						payoutBalance -= int(nAmount);					
						paids++;
					}
				}
			}
			lastPayoutIndex = i;
			if (lastPayoutIndex >= numAccounts || payoutBalance <= 0) {
				lastPayoutIndex = 0;
				if (payoutBalance > 0)
					holdoverBalance += uint(payoutBalance);// put back any leftovers
				payoutBalance = 0;
				StatEventI("RunComplete", uint(prOrigPayoutBal) );

			} else {
				StatEventI("PayRun", paids );
			}
		}
		
	}


	// ----------------------------
	// sender withdraw entire rewards/dividends
	// ----------------------------
	function withdrawDividends() public returns (uint _amount)
	{
		if (holderAccounts[msg.sender].balance == 0) { 
			//_amount = 0;
			StatEvent("0 Balance");
			return;
		} else {
			if ((msg.sender == developers) 
				&&  (now < vestTime)) {
				//statEvent("Tokens not yet vested.");
				//_amount = 0;
				return;
			}

			_amount = holderAccounts[msg.sender].balance; 
			holderAccounts[msg.sender].balance = 0; 
			if (!msg.sender.call.gas(rwGas).value(_amount)())
				throw;
			//StatEventI("Paid", _amount);
	
		}

	}

	// ----------------------------
	// set gas for operations
	// ----------------------------
	function setOpGas(uint _rm, uint _rf, uint _rw)
	{
		if (msg.sender != owner && msg.sender != developers) {
			//StatEvent("only owner calls");
			return;
		} else {
			rmGas = _rm;
			rfGas = _rf;
			rwGas = _rw;
		}
	}

	// ----------------------------
	// get gas for operations
	// ----------------------------
	function getOpGas() constant returns (uint _rm, uint _rf, uint _rw)
	{
		_rm = rmGas;
		_rf = rfGas;
		_rw = rwGas;
	}
 

	// ----------------------------
	// check rewards.  pass in address of token holder
	// ----------------------------
	function checkDividends(address _addr) constant returns(uint _amount)
	{
		if (holderAccounts[_addr].alloced)
			_amount = holderAccounts[_addr].balance;
	}		


	// ------------------------------------------------
	// icoCheckup - check up call for administrators
	// after sale is closed if min ico tokens sold, 10 percent will be distributed to 
	// company to cover various operating expenses
	// after sale and usage dealines have been met, remaining 90 percent will be distributed to
	// company.
	// ------------------------------------------------
	function icoCheckup() public
	{
		if (msg.sender != owner && msg.sender != developers)
			throw;

		uint nmsgmask;
		//nmsgmask = 0;
	
		if (icoStatus == IcoStatusValue.saleClosed) {
			if ((getNumTokensPurchased() >= minIcoTokenGoal)
				&& (remunerationStage == 0 )) {
				remunerationStage = 1;
				remunerationBalance = (totalTokenFundsReceived/100)*9; // 9 percent
				auxPartnerBalance =  (totalTokenFundsReceived/100); // 1 percent
				nmsgmask |= 1;
			} 
		}
		if (icoStatus == IcoStatusValue.succeeded) {
		
			if (remunerationStage == 0 ) {
				remunerationStage = 1;
				remunerationBalance = (totalTokenFundsReceived/100)*9; 
				auxPartnerBalance =  (totalTokenFundsReceived/100);
				nmsgmask |= 4;
			}
			if (remunerationStage == 1) { // we have already suceeded
				remunerationStage = 2;
				remunerationBalance += totalTokenFundsReceived - (totalTokenFundsReceived/10); // 90 percent
				nmsgmask |= 8;
			}

		}

		uint ntmp;

		if (remunerationBalance > 0) { 
		// only pay one entity per call, dont want to run out of gas
				ntmp = remunerationBalance;
				remunerationBalance = 0;
				if (!founderOrg.call.gas(rmGas).value(ntmp)()) {
					remunerationBalance = ntmp;
					nmsgmask |= 32;
				} else {
					nmsgmask |= 64;
				}	
		} else 	if (auxPartnerBalance > 0) {
		// note the "else" only pay one entity per call, dont want to run out of gas
			ntmp = auxPartnerBalance;
			auxPartnerBalance = 0;
			if (!auxPartner.call.gas(rmGas).value(ntmp)()) {
				auxPartnerBalance = ntmp;
				nmsgmask |= 128;
			}  else {
				nmsgmask |= 256;
			}

		} 
		
		StatEventI("ico-checkup", nmsgmask);
	}


	// ----------------------------
	// swap executor
	// ----------------------------
	function changeOwner(address _addr) 
	{
		if (msg.sender != owner
			|| settingsState == SettingStateValue.lockedRelease)
			 throw;

		owner = _addr;
	}

	// ----------------------------
	// swap developers account
	// ----------------------------
	function changeDevevoperAccont(address _addr) 
	{
		if (msg.sender != owner
			|| settingsState == SettingStateValue.lockedRelease)
			 throw;
		developers = _addr;
	}

	// ----------------------------
	// change founder
	// ----------------------------
	function changeFounder(address _addr) 
	{
		if (msg.sender != owner
			|| settingsState == SettingStateValue.lockedRelease)
			 throw;
		founderOrg = _addr;
	}

	// ----------------------------
	// change auxPartner
	// ----------------------------
	function changeAuxPartner(address _aux) 
	{
		if (msg.sender != owner
			|| settingsState == SettingStateValue.lockedRelease)
			 throw;
		auxPartner = _aux;
	}


	// ----------------------------
	// DEBUG ONLY - end this contract, suicide to developers
	// ----------------------------
	function haraKiri()
	{
		if (settingsState != SettingStateValue.debug)
			throw;
		if (msg.sender != owner)
			 throw;
		suicide(developers);
	}

	// ----------------------------
	// get all ico status, funding and usage info
	// ----------------------------
	function getIcoInfo() constant returns(IcoStatusValue _status, uint _saleStart, uint _saleEnd, uint _usageEnd, uint _saleGoal, uint _usageGoal, uint _sold, uint _used, uint _funds, uint _credits, uint _remuStage, uint _vest)
	{
		_status = icoStatus;
		_saleStart = fundingStart;
		_saleEnd = fundingDeadline;
		_usageEnd = usageDeadline;
		_vest = vestTime;
		_saleGoal = minIcoTokenGoal;
		_usageGoal = minUsageGoal;
		_sold = getNumTokensPurchased();
		_used = getNumGames();
		_funds = totalTokenFundsReceived;
		_credits = partnerCredits;
		_remuStage = remunerationStage;
	}

	// ----------------------------
	// NOTE! CALL AT THE RISK OF RUNNING OUT OF GAS.
	// ANYONE CAN CALL THIS FUNCTION BUT YOU HAVE TO SUPPLY 
	// THE CORRECT AMOUNT OF GAS WHICH MAY DEPEND ON 
	// THE _NUMPAYS PARAMETER.  WHICH MUST BE BETWEEN 1 AND 1000
	// THE STANDARD VALUE IS STORED IN "maxPaysPer"
	// ----------------------------
	function flushDividends(uint _numPays)
	{
		if ((_numPays == 0) || (_numPays > 1000)) {
			StatEvent("Invalid.");
		} else if (holdoverBalance > 0 || payoutBalance > 0) {
			doPayout(_numPays);
		} else {
			StatEvent("Nothing to do.");
		}
				
	}

	function doDeveloperGrant() internal
	{
		if (!developersGranted) {
			developersGranted = true;
			numDevTokens = (totalTokensMinted * 15)/100;
			totalTokensMinted += numDevTokens;
			if (!holderAccounts[developers].alloced) 
				addAccount(developers);
			uint newHeld = getHeld(holderAccounts[developers].tokens) + numDevTokens;
			holderAccounts[developers].tokens = newHeld |  (curPayoutId * (2 ** 48));

		}
	}


}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"changeDevevoperAccont","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"supply","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"remunerationBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"payoutBalance","outputs":[{"name":"","type":"int256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"checkDividends","outputs":[{"name":"_amount","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"maxPaysPer","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"updateIcoStatus","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"withdrawDividends","outputs":[{"name":"_amount","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"feePayment","outputs":[],"payable":true,"type":"function"},{"constant":false,"inputs":[{"name":"_rm","type":"uint256"},{"name":"_rf","type":"uint256"},{"name":"_rw","type":"uint256"}],"name":"setOpGas","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"curPayoutId","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_numPays","type":"uint256"}],"name":"flushDividends","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"lastPayoutTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"settingsState","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"payoutThreshold","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getNumGames","outputs":[{"name":"_games","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"icoCheckup","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalTokensMinted","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"tokenPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getIcoInfo","outputs":[{"name":"_status","type":"uint8"},{"name":"_saleStart","type":"uint256"},{"name":"_saleEnd","type":"uint256"},{"name":"_usageEnd","type":"uint256"},{"name":"_saleGoal","type":"uint256"},{"name":"_usageGoal","type":"uint256"},{"name":"_sold","type":"uint256"},{"name":"_used","type":"uint256"},{"name":"_funds","type":"uint256"},{"name":"_credits","type":"uint256"},{"name":"_remuStage","type":"uint256"},{"name":"_vest","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"setE4RowPartner","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"qState","type":"uint8"},{"name":"_saleStart","type":"uint256"},{"name":"_saleEnd","type":"uint256"},{"name":"_usageEnd","type":"uint256"},{"name":"_minUsage","type":"uint256"},{"name":"_tokGoal","type":"uint256"},{"name":"_maxMintable","type":"uint256"},{"name":"_threshold","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_mpp","type":"uint256"},{"name":"_mpi","type":"uint256"}],"name":"applySettings","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"changeFounder","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getOpGas","outputs":[{"name":"_rm","type":"uint256"},{"name":"_rf","type":"uint256"},{"name":"_rw","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_aux","type":"address"}],"name":"changeAuxPartner","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getSpecialAddresses","outputs":[{"name":"_fndr","type":"address"},{"name":"_aux","type":"address"},{"name":"_dev","type":"address"},{"name":"_e4","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"purchaseToken","outputs":[],"payable":true,"type":"function"},{"constant":true,"inputs":[],"name":"getNumTokensPurchased","outputs":[{"name":"_purchased","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"haraKiri","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"minPayInterval","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"requestRefund","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"holdoverBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"lastPayoutIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"},{"payable":true,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg","type":"string"}],"name":"StatEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg","type":"string"},{"indexed":false,"name":"val","type":"uint256"}],"name":"StatEventI","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_spender","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Approval","type":"event"}]

6060604052341561000c57fe5b5b60018054600160a060020a033316600160a060020a031991821681179092556000805490911690911790555b5b612366806100496000396000f300606060405236156101d25763ffffffff60e060020a60003504166302ff1fac8114610208578063095ea7b31461022657806318160ddd146102595780631b0762bb1461027b57806320b0554e1461029d57806322f16c8d146102bf57806323b872dd146102ed57806328c4b676146103265780632a1a8d4a146103485780632e92abdd1461035a57806333c7c0261461037c5780633cebb4d7146103865780633dce1ea9146103a1578063433e852d146103c357806358a1cabf146103d85780635f437e48146103fa5780636b5e1a181461042e5780636ce079fe1461045057806370a082311461047257806378eba8fc146104a05780637d549e99146104b25780637ff9b596146104d45780638582ac21146104f65780638706ab57146105775780638ab7f807146105955780638da5cb5b146105ce57806393c32e06146105fa5780639a6921e414610618578063a53d66e414610646578063a6f9dae114610664578063a7ecd0ad14610682578063a9059cbb146106c6578063a95c4d62146106f9578063ab06264314610703578063c405255914610725578063ce4a920614610737578063d5cef13314610759578063dd62ed3e1461076b578063fa1e4fcb1461079f578063fabfbefb146107c1575b6102065b60045433600160a060020a03908116911614156101fa576101f56107e3565b610202565b6102026108f8565b5b5b565b005b341561021057fe5b610206600160a060020a0360043516610acf565b005b341561022e57fe5b610245600160a060020a0360043516602435610b2d565b604080519115158252519081900360200190f35b341561026157fe5b610269610b98565b60408051918252519081900360200190f35b341561028357fe5b610269610be2565b60408051918252519081900360200190f35b34156102a557fe5b610269610be8565b60408051918252519081900360200190f35b34156102c757fe5b610269600160a060020a0360043516610bee565b60408051918252519081900360200190f35b34156102f557fe5b610245600160a060020a0360043581169060243516604435610c33565b604080519115158252519081900360200190f35b341561032e57fe5b610269610dfa565b60408051918252519081900360200190f35b341561035057fe5b610206610e00565b005b341561036257fe5b610269611001565b60408051918252519081900360200190f35b6102066107e3565b005b341561038e57fe5b6102066004356024356044356110ea565b005b34156103a957fe5b610269611138565b60408051918252519081900360200190f35b34156103cb57fe5b61020660043561113e565b005b34156103e057fe5b61026961121e565b60408051918252519081900360200190f35b341561040257fe5b61040a611224565b6040518082600281111561041a57fe5b60ff16815260200191505060405180910390f35b341561043657fe5b610269611232565b60408051918252519081900360200190f35b341561045857fe5b610269611238565b60408051918252519081900360200190f35b341561047a57fe5b610269600160a060020a03600435166112c8565b60408051918252519081900360200190f35b34156104a857fe5b610206611317565b005b34156104ba57fe5b610269611549565b60408051918252519081900360200190f35b34156104dc57fe5b61026961154f565b60408051918252519081900360200190f35b34156104fe57fe5b610506611555565b604051808d600481111561051657fe5b60ff168152602081019c909c52506040808c019a909a5260608b019890985260808a019690965260a089019490945260c088019290925260e08701526101008601526101208501526101408401526101608301525190819003610180019150f35b341561057f57fe5b610206600160a060020a03600435166115af565b005b341561059d57fe5b61020660ff6004351660243560443560643560843560a43560c43560e435610104356101243561014435611672565b005b34156105d657fe5b6105de611940565b60408051600160a060020a039092168252519081900360200190f35b341561060257fe5b610206600160a060020a036004351661194f565b005b341561062057fe5b6106286119ad565b60408051938452602084019290925282820152519081900360600190f35b341561064e57fe5b610206600160a060020a03600435166119bc565b005b341561066c57fe5b610206600160a060020a0360043516611a1a565b005b341561068a57fe5b610692611a78565b60408051600160a060020a039586168152938516602085015291841683830152909216606082015290519081900360800190f35b34156106ce57fe5b610245600160a060020a0360043516602435611aa0565b604080519115158252519081900360200190f35b6102066108f8565b005b341561070b57fe5b610269611c16565b60408051918252519081900360200190f35b341561072d57fe5b610206611c21565b005b341561073f57fe5b610269611c71565b60408051918252519081900360200190f35b341561076157fe5b610206611c77565b005b341561077357fe5b610269600160a060020a0360043581169060243516611e74565b60408051918252519081900360200190f35b34156107a757fe5b610269611ea1565b60408051918252519081900360200190f35b34156107c957fe5b610269611ea7565b60408051918252519081900360200190f35b60045460009033600160a060020a0390811691161461086157600034111561080e5760118054340190555b6040805160208082526009908201527f666f7262696464656e000000000000000000000000000000000000000000000081830152905160008051602061231b8339815191529181900360600190a16108f3565b503461086b610e00565b6011805482019055600880548201905560408051602081018390528181526007818301527f5061796d656e7400000000000000000000000000000000000000000000000000606082015290516000805160206122fb8339815191529181900360800190a1600e5460115411806108e357506000601254135b156108f3576108f3601754611ead565b5b5b50565b600d543490339060009081908410156109115760006000fd5b600d548481151561091e57fe5b049150610929610e00565b60015b60265460ff16600481111561093d57fe5b146109485760006000fd5b600a548260105401111561095c5760006000fd5b600160a060020a03831660009081526005602052604090205460ff1615156109875761098783612196565b5b600160a060020a0383166000908152600560205260409020600101546109ad906121f8565b601554600160a060020a0385166000908152600560205260409020660100000000000090910291840191821760019091015560108054840190819055600f805487019055600a549192501415610a7357602680546002919060ff19166001835b0217905550610a1a612207565b60408051602081018490528181526011818301527f5075726368617365642c4772616e746564000000000000000000000000000000606082015290516000805160206122fb8339815191529181900360800190a1610ac8565b60408051602081018490528181526009818301527f5075726368617365640000000000000000000000000000000000000000000000606082015290516000805160206122fb8339815191529181900360800190a15b5b50505050565b60015433600160a060020a039081169116141580610b03575060025b602654610100900460ff166002811115610b0157fe5b145b15610b0e5760006000fd5b60008054600160a060020a031916600160a060020a0383161790555b50565b600160a060020a03338116600081815260096020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b600060015b60265460ff166004811115610bae57fe5b1480610bcb575060005b60265460ff166004811115610bc957fe5b145b15610bd95750600a54610bde565b506010545b5b90565b60215481565b60125481565b600160a060020a03811660009081526005602052604081205460ff1615610c2d5750600160a060020a0381166000908152600560205260409020600201545b5b919050565b60008054819081908190600160a060020a038881169116148015610c585750601d5442105b15610c665760009350610def565b600160a060020a038716600090815260056020526040902060010154610c8b906122d5565b92509250848210158015610cc65750600160a060020a0380881660009081526009602090815260408083203390941683529290522054859010155b8015610cd25750600085115b15610dea57600160a060020a03808816600090815260056020526040808220600101805489900390559188168152205460ff161515610d1457610d1486612196565b5b600160a060020a038616600090815260056020526040902060010154610d3a906121f8565b8501905060015b60265460ff166004811115610d5257fe5b1415610d5e5760155492505b600160a060020a0380871660008181526005602090815260408083206601000000000000890287176001909101558b8516808452600983528184203390961684529482529182902080548a90039055815189815291519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a360019350610def565b600093505b5b5050509392505050565b60175481565b60008060045b60265460ff166004811115610e1757fe5b1480610e34575060035b60265460ff166004811115610e3257fe5b145b15610e3e57610ffb565b60005b60265460ff166004811115610e5257fe5b1415610eaf5760195442118015610e6b5750601a544211155b15610e8957602680546001919060ff191682805b0217905550610ea9565b601a54421115610ea957602680546002919060ff19166001835b02179055505b5b610f94565b610eb7611c16565b9150610ec1611238565b9050601a5442118015610ed55750600b5482105b80610eed5750601b5442118015610eed5750600c5481105b5b15610f0d57602680546003919060ff19166001835b0217905550610f49565b601a5442118015610f205750600b548210155b8015610f2e5750600c548110155b15610f4957602680546004919060ff19166001835b02179055505b5b60015b60265460ff166004811115610f5e57fe5b148015610f785750600a5482101580610f785750601a5442115b5b15610f9457602680546002919060ff19166001835b02179055505b5b5b601f5460ff16158015610fbb575060015b60265460ff166004811115610fb857fe5b14155b8015610fd9575060005b60265460ff166004811115610fd657fe5b14155b8015610fee5750600b54610feb611c16565b10155b15610ffb57610ffb612207565b5b5b5050565b600160a060020a0333166000908152600560205260408120600201541515611076576040805160208082526009908201527f302042616c616e6365000000000000000000000000000000000000000000000081830152905160008051602061231b8339815191529181900360600190a1610bde565b60005433600160a060020a0390811691161480156110955750601d5442105b1561109f57610bde565b50600160a060020a0333166000818152600560205260408082206002018054908390556024549151909392849190818181858888f193505050501515610bde5760006000fd5b5b5b90565b60015433600160a060020a03908116911614801590611118575060005433600160a060020a03908116911614155b1561112257611132565b6023839055602582905560248190555b5b505050565b60155481565b80158061114c57506103e881115b156111a4576040805160208082526008908201527f496e76616c69642e00000000000000000000000000000000000000000000000081830152905160008051602061231b8339815191529181900360600190a16108f3565b600060115411806111b757506000601254135b156111ca576111c581611ead565b6108f3565b604080516020808252600e908201527f4e6f7468696e6720746f20646f2e00000000000000000000000000000000000081830152905160008051602061231b8339815191529181900360600190a15b5b5b50565b601c5481565b602654610100900460ff1681565b600e5481565b6004546000908190600160a060020a0316156112c357600460009054906101000a9004600160a060020a0316905080600160a060020a0316631123efd56000604051602001526040518163ffffffff1660e060020a028152600401809050602060405180830381600087803b15156112ac57fe5b60325a03f115156112b957fe5b5050604051519250505b5b5090565b600160a060020a03811660009081526005602052604081205460ff1615610c2d57600160a060020a03821660009081526005602052604090206001015461130e906121f8565b90505b5b919050565b600154600090819033600160a060020a0390811691161480159061134a575060005433600160a060020a03908116911614155b156113555760006000fd5b60025b60265460ff16600481111561136957fe5b14156113b357600b5461137a611c16565b101580156113885750602054155b156113b3576001602055600f546064905b04600902602155600f546064905b04602255600191909117905b5b60045b60265460ff1660048111156113c857fe5b141561142f5760205415156113fd576001602055600f546064905b04600902602155600f546064905b04602255600491909117905b6020546001141561142f576002602055600f54600a905b04600f54036021600082825401925050819055506008821791505b5b600060215411156114915750602180546000918290556002546023546040519293600160a060020a03909216929091849190818181858888f1935050505015156114855760218190556020919091179061148c565b6040821791505b6114ee565b600060225411156114ee5750602280546000918290556003546023546040519293600160a060020a03909216929091849190818181858888f1935050505015156114e6576022819055608091909117906114ee565b610100821791505b5b5b6040805160208101849052818152600b818301527f69636f2d636865636b7570000000000000000000000000000000000000000000606082015290516000805160206122fb8339815191529181900360800190a15b5050565b60105481565b600d5481565b602654601954601a54601b54601d54600b54600c5460ff9096169590916000908190819081908190611585611c16565b955061158f611238565b9450600f549350600854925060205491505b909192939495969798999a9b565b60015433600160a060020a03908116911614156108f357600454600160a060020a031615806115f4575060005b602654610100900460ff1660028111156115f257fe5b145b1561161e5760048054600160a060020a031916600160a060020a03831617905560006008556108f3565b604080516020808252600b908201527f416c72656164792053657400000000000000000000000000000000000000000081830152905160008051602061231b8339815191529181900360600190a15b5b5b50565b600154600090819033600160a060020a0390811691161461169257611931565b600e8690556017849055601883905560025b602654610100900460ff1660028111156116ba57fe5b14156116c557611931565b602680548e919061ff0019166101008360028111156116e057fe5b021790555060025b8d60028111156116f457fe5b141561174d576040805160208082526008908201527f4c6f636b696e672100000000000000000000000000000000000000000000000081830152905160008051602061231b8339815191529181900360600190a1611931565b602680546000919060ff19166001835b0217905550620186a0602355612710602481905560255560105460009011156117de57600091505b6007548210156117de5750600081815260066020526040902054600160a060020a031680156117d257600160a060020a038116600090815260056020526040812060018101829055600201555b5b600190910190611785565b5b60006010819055600f819055600881905560198d9055601a8c9055601b8b9055600c8a9055600b899055600a889055600d8690556301e133808d01601d55601e8190556011819055601281905560016015556016819055602081905560218190556022819055601f805460ff19169055601c819055600160a060020a0330163111156118e157600154602554604051600160a060020a0392831692301631906000818181858888f1935050505015156118e1576040805160208082526006908201527f4552524f5221000000000000000000000000000000000000000000000000000081830152905160008051602061231b8339815191529181900360600190a15b5b6040805160208082526002908201527f6f6b00000000000000000000000000000000000000000000000000000000000081830152905160008051602061231b8339815191529181900360600190a15b50505050505050505050505050565b600154600160a060020a031681565b60015433600160a060020a039081169116141580611983575060025b602654610100900460ff16600281111561198157fe5b145b1561198e5760006000fd5b60028054600160a060020a031916600160a060020a0383161790555b50565b6023546025546024545b909192565b60015433600160a060020a0390811691161415806119f0575060025b602654610100900460ff1660028111156119ee57fe5b145b156119fb5760006000fd5b60038054600160a060020a031916600160a060020a0383161790555b50565b60015433600160a060020a039081169116141580611a4e575060025b602654610100900460ff166002811115611a4c57fe5b145b15611a595760006000fd5b60018054600160a060020a031916600160a060020a0383161790555b50565b600254600354600054600454600160a060020a03938416939283169291821691165b90919293565b6000805481908190819033600160a060020a039081169116148015611ac65750601d5442105b15611ad45760009350611c0c565b600160a060020a033316600090815260056020526040902060010154611af9906122d5565b92509250848210158015611b0d5750600085115b15611c0757600160a060020a03338116600090815260056020526040808220600101805489900390559188168152205460ff161515611b4f57611b4f86612196565b5b600160a060020a038616600090815260056020526040902060010154611b75906121f8565b8501905060015b60265460ff166004811115611b8d57fe5b1415611b995760155492505b600160a060020a038087166000818152600560209081526040918290206601000000000000880286176001909101558151898152915192933316927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a360019350611c0c565b600093505b5b50505092915050565b601e54601054035b90565b60005b602654610100900460ff166002811115611c3a57fe5b14611c455760006000fd5b60015433600160a060020a03908116911614611c615760006000fd5b600054600160a060020a0316ff5b565b60185481565b33600080611c83610e00565b600160a060020a038316600090815260056020526040902060010154611ca8906121f8565b915060035b60265460ff166004811115611cbe57fe5b14611d16576040805160208082526009908201527f4e6f20526566756e64000000000000000000000000000000000000000000000081830152905160008051602061231b8339815191529181900360600190a1611132565b811515611d70576040805160208082526009908201527f4e6f20546f6b656e73000000000000000000000000000000000000000000000081830152905160008051602061231b8339815191529181900360600190a1611132565b600d5482029050600b54611d82611c16565b10611d8f57600a815b0490035b60008054600160a060020a031681526005602052604090205460ff161515611dc657600054611dc690600160a060020a0316612196565b5b60008054600160a060020a03908116825260056020526040808320600190810180548701905591861683528220908101829055600201541115611e3e57600160a060020a03808416600081815260056020526040808220600290810180548454909616845291832001805490940190935590815290555b602554604051600160a060020a038516919083906000818181858888f1935050505015156111325760006000fd5b5b5b5b505050565b600160a060020a038083166000908152600960209081526040808320938516835292905220545b92915050565b60115481565b60165481565b600060006000600060006000600060105460001415611ecb57612189565b6000601154118015611edd5750601254155b8015611eee5750601854601c540142115b15611f885760158054600101908190556180009010611f0d5760016015555b42601c556011805460128190556013556010546014556000908190556016556015546040805160208101929092528082526008828201527f537461727452756e0000000000000000000000000000000000000000000000006060830152516000805160206122fb8339815191529181900360800190a1612189565b6000601254131561218957601454601354811515611fa257fe5b0495506000945060165493505b8785108015611fbf575060075484105b8015611fcd57506000601254135b1561209857600084815260066020526040902054600160a060020a03169250821515611ff85761208b565b600160a060020a03831660009081526005602052604090206001015461201d906122d5565b9150915060008111801561203357506015548214155b1561208b576012548682029750871361208b57600160a060020a038316600090815260056020526040902060028101805489019055601554660100000000000002821760019182015560128054899003905594909401935b5b5b600190930192611faf565b6016849055600754841015806120b15750600060125413155b15612134576000601681905560125413156120d3576012546011805490910190555b6000601255601354604080516020810192909252808252600b828201527f52756e436f6d706c6574650000000000000000000000000000000000000000006060830152516000805160206122fb8339815191529181900360800190a1612189565b60408051602081018790528181526006818301527f50617952756e0000000000000000000000000000000000000000000000000000606082015290516000805160206122fb8339815191529181900360800190a15b5b5b5b5050505050505050565b600160a060020a0381166000818152600560209081526040808320805460ff191660019081178255601554660100000000000002918101919091556007805491820190558352600690915290208054600160a060020a03191690911790555b50565b65ffffffffffff81165b919050565b601f5460009060ff1615156108f357601f805460ff19166001179055601054606490600f025b04601e81905560108054909101905560008054600160a060020a031681526005602052604090205460ff1615156122735760005461227390600160a060020a0316612196565b5b601e5460008054600160a060020a031681526005602052604090206001015461229c906121f8565b60155460008054600160a060020a03168152600560205260409020919092016601000000000000909202821760019091015590505b5b50565b6000806601000000000000835b0461ffff1691508265ffffffffffff1690505b91509156009e229c55f86322ec7d67b654476e2d52934c738b3cd58c026b5b2b6e9b7b992d1df4241f9d28385037b9339fabdb2fac8a42cb5e489c20da7a82bb32f517e648a165627a7a72305820c3039feace276128a8a24bc387d61714eecae740de955c6578526a4a4027bebc0029

Deployed Bytecode

0x606060405236156101d25763ffffffff60e060020a60003504166302ff1fac8114610208578063095ea7b31461022657806318160ddd146102595780631b0762bb1461027b57806320b0554e1461029d57806322f16c8d146102bf57806323b872dd146102ed57806328c4b676146103265780632a1a8d4a146103485780632e92abdd1461035a57806333c7c0261461037c5780633cebb4d7146103865780633dce1ea9146103a1578063433e852d146103c357806358a1cabf146103d85780635f437e48146103fa5780636b5e1a181461042e5780636ce079fe1461045057806370a082311461047257806378eba8fc146104a05780637d549e99146104b25780637ff9b596146104d45780638582ac21146104f65780638706ab57146105775780638ab7f807146105955780638da5cb5b146105ce57806393c32e06146105fa5780639a6921e414610618578063a53d66e414610646578063a6f9dae114610664578063a7ecd0ad14610682578063a9059cbb146106c6578063a95c4d62146106f9578063ab06264314610703578063c405255914610725578063ce4a920614610737578063d5cef13314610759578063dd62ed3e1461076b578063fa1e4fcb1461079f578063fabfbefb146107c1575b6102065b60045433600160a060020a03908116911614156101fa576101f56107e3565b610202565b6102026108f8565b5b5b565b005b341561021057fe5b610206600160a060020a0360043516610acf565b005b341561022e57fe5b610245600160a060020a0360043516602435610b2d565b604080519115158252519081900360200190f35b341561026157fe5b610269610b98565b60408051918252519081900360200190f35b341561028357fe5b610269610be2565b60408051918252519081900360200190f35b34156102a557fe5b610269610be8565b60408051918252519081900360200190f35b34156102c757fe5b610269600160a060020a0360043516610bee565b60408051918252519081900360200190f35b34156102f557fe5b610245600160a060020a0360043581169060243516604435610c33565b604080519115158252519081900360200190f35b341561032e57fe5b610269610dfa565b60408051918252519081900360200190f35b341561035057fe5b610206610e00565b005b341561036257fe5b610269611001565b60408051918252519081900360200190f35b6102066107e3565b005b341561038e57fe5b6102066004356024356044356110ea565b005b34156103a957fe5b610269611138565b60408051918252519081900360200190f35b34156103cb57fe5b61020660043561113e565b005b34156103e057fe5b61026961121e565b60408051918252519081900360200190f35b341561040257fe5b61040a611224565b6040518082600281111561041a57fe5b60ff16815260200191505060405180910390f35b341561043657fe5b610269611232565b60408051918252519081900360200190f35b341561045857fe5b610269611238565b60408051918252519081900360200190f35b341561047a57fe5b610269600160a060020a03600435166112c8565b60408051918252519081900360200190f35b34156104a857fe5b610206611317565b005b34156104ba57fe5b610269611549565b60408051918252519081900360200190f35b34156104dc57fe5b61026961154f565b60408051918252519081900360200190f35b34156104fe57fe5b610506611555565b604051808d600481111561051657fe5b60ff168152602081019c909c52506040808c019a909a5260608b019890985260808a019690965260a089019490945260c088019290925260e08701526101008601526101208501526101408401526101608301525190819003610180019150f35b341561057f57fe5b610206600160a060020a03600435166115af565b005b341561059d57fe5b61020660ff6004351660243560443560643560843560a43560c43560e435610104356101243561014435611672565b005b34156105d657fe5b6105de611940565b60408051600160a060020a039092168252519081900360200190f35b341561060257fe5b610206600160a060020a036004351661194f565b005b341561062057fe5b6106286119ad565b60408051938452602084019290925282820152519081900360600190f35b341561064e57fe5b610206600160a060020a03600435166119bc565b005b341561066c57fe5b610206600160a060020a0360043516611a1a565b005b341561068a57fe5b610692611a78565b60408051600160a060020a039586168152938516602085015291841683830152909216606082015290519081900360800190f35b34156106ce57fe5b610245600160a060020a0360043516602435611aa0565b604080519115158252519081900360200190f35b6102066108f8565b005b341561070b57fe5b610269611c16565b60408051918252519081900360200190f35b341561072d57fe5b610206611c21565b005b341561073f57fe5b610269611c71565b60408051918252519081900360200190f35b341561076157fe5b610206611c77565b005b341561077357fe5b610269600160a060020a0360043581169060243516611e74565b60408051918252519081900360200190f35b34156107a757fe5b610269611ea1565b60408051918252519081900360200190f35b34156107c957fe5b610269611ea7565b60408051918252519081900360200190f35b60045460009033600160a060020a0390811691161461086157600034111561080e5760118054340190555b6040805160208082526009908201527f666f7262696464656e000000000000000000000000000000000000000000000081830152905160008051602061231b8339815191529181900360600190a16108f3565b503461086b610e00565b6011805482019055600880548201905560408051602081018390528181526007818301527f5061796d656e7400000000000000000000000000000000000000000000000000606082015290516000805160206122fb8339815191529181900360800190a1600e5460115411806108e357506000601254135b156108f3576108f3601754611ead565b5b5b50565b600d543490339060009081908410156109115760006000fd5b600d548481151561091e57fe5b049150610929610e00565b60015b60265460ff16600481111561093d57fe5b146109485760006000fd5b600a548260105401111561095c5760006000fd5b600160a060020a03831660009081526005602052604090205460ff1615156109875761098783612196565b5b600160a060020a0383166000908152600560205260409020600101546109ad906121f8565b601554600160a060020a0385166000908152600560205260409020660100000000000090910291840191821760019091015560108054840190819055600f805487019055600a549192501415610a7357602680546002919060ff19166001835b0217905550610a1a612207565b60408051602081018490528181526011818301527f5075726368617365642c4772616e746564000000000000000000000000000000606082015290516000805160206122fb8339815191529181900360800190a1610ac8565b60408051602081018490528181526009818301527f5075726368617365640000000000000000000000000000000000000000000000606082015290516000805160206122fb8339815191529181900360800190a15b5b50505050565b60015433600160a060020a039081169116141580610b03575060025b602654610100900460ff166002811115610b0157fe5b145b15610b0e5760006000fd5b60008054600160a060020a031916600160a060020a0383161790555b50565b600160a060020a03338116600081815260096020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b600060015b60265460ff166004811115610bae57fe5b1480610bcb575060005b60265460ff166004811115610bc957fe5b145b15610bd95750600a54610bde565b506010545b5b90565b60215481565b60125481565b600160a060020a03811660009081526005602052604081205460ff1615610c2d5750600160a060020a0381166000908152600560205260409020600201545b5b919050565b60008054819081908190600160a060020a038881169116148015610c585750601d5442105b15610c665760009350610def565b600160a060020a038716600090815260056020526040902060010154610c8b906122d5565b92509250848210158015610cc65750600160a060020a0380881660009081526009602090815260408083203390941683529290522054859010155b8015610cd25750600085115b15610dea57600160a060020a03808816600090815260056020526040808220600101805489900390559188168152205460ff161515610d1457610d1486612196565b5b600160a060020a038616600090815260056020526040902060010154610d3a906121f8565b8501905060015b60265460ff166004811115610d5257fe5b1415610d5e5760155492505b600160a060020a0380871660008181526005602090815260408083206601000000000000890287176001909101558b8516808452600983528184203390961684529482529182902080548a90039055815189815291519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a360019350610def565b600093505b5b5050509392505050565b60175481565b60008060045b60265460ff166004811115610e1757fe5b1480610e34575060035b60265460ff166004811115610e3257fe5b145b15610e3e57610ffb565b60005b60265460ff166004811115610e5257fe5b1415610eaf5760195442118015610e6b5750601a544211155b15610e8957602680546001919060ff191682805b0217905550610ea9565b601a54421115610ea957602680546002919060ff19166001835b02179055505b5b610f94565b610eb7611c16565b9150610ec1611238565b9050601a5442118015610ed55750600b5482105b80610eed5750601b5442118015610eed5750600c5481105b5b15610f0d57602680546003919060ff19166001835b0217905550610f49565b601a5442118015610f205750600b548210155b8015610f2e5750600c548110155b15610f4957602680546004919060ff19166001835b02179055505b5b60015b60265460ff166004811115610f5e57fe5b148015610f785750600a5482101580610f785750601a5442115b5b15610f9457602680546002919060ff19166001835b02179055505b5b5b601f5460ff16158015610fbb575060015b60265460ff166004811115610fb857fe5b14155b8015610fd9575060005b60265460ff166004811115610fd657fe5b14155b8015610fee5750600b54610feb611c16565b10155b15610ffb57610ffb612207565b5b5b5050565b600160a060020a0333166000908152600560205260408120600201541515611076576040805160208082526009908201527f302042616c616e6365000000000000000000000000000000000000000000000081830152905160008051602061231b8339815191529181900360600190a1610bde565b60005433600160a060020a0390811691161480156110955750601d5442105b1561109f57610bde565b50600160a060020a0333166000818152600560205260408082206002018054908390556024549151909392849190818181858888f193505050501515610bde5760006000fd5b5b5b90565b60015433600160a060020a03908116911614801590611118575060005433600160a060020a03908116911614155b1561112257611132565b6023839055602582905560248190555b5b505050565b60155481565b80158061114c57506103e881115b156111a4576040805160208082526008908201527f496e76616c69642e00000000000000000000000000000000000000000000000081830152905160008051602061231b8339815191529181900360600190a16108f3565b600060115411806111b757506000601254135b156111ca576111c581611ead565b6108f3565b604080516020808252600e908201527f4e6f7468696e6720746f20646f2e00000000000000000000000000000000000081830152905160008051602061231b8339815191529181900360600190a15b5b5b50565b601c5481565b602654610100900460ff1681565b600e5481565b6004546000908190600160a060020a0316156112c357600460009054906101000a9004600160a060020a0316905080600160a060020a0316631123efd56000604051602001526040518163ffffffff1660e060020a028152600401809050602060405180830381600087803b15156112ac57fe5b60325a03f115156112b957fe5b5050604051519250505b5b5090565b600160a060020a03811660009081526005602052604081205460ff1615610c2d57600160a060020a03821660009081526005602052604090206001015461130e906121f8565b90505b5b919050565b600154600090819033600160a060020a0390811691161480159061134a575060005433600160a060020a03908116911614155b156113555760006000fd5b60025b60265460ff16600481111561136957fe5b14156113b357600b5461137a611c16565b101580156113885750602054155b156113b3576001602055600f546064905b04600902602155600f546064905b04602255600191909117905b5b60045b60265460ff1660048111156113c857fe5b141561142f5760205415156113fd576001602055600f546064905b04600902602155600f546064905b04602255600491909117905b6020546001141561142f576002602055600f54600a905b04600f54036021600082825401925050819055506008821791505b5b600060215411156114915750602180546000918290556002546023546040519293600160a060020a03909216929091849190818181858888f1935050505015156114855760218190556020919091179061148c565b6040821791505b6114ee565b600060225411156114ee5750602280546000918290556003546023546040519293600160a060020a03909216929091849190818181858888f1935050505015156114e6576022819055608091909117906114ee565b610100821791505b5b5b6040805160208101849052818152600b818301527f69636f2d636865636b7570000000000000000000000000000000000000000000606082015290516000805160206122fb8339815191529181900360800190a15b5050565b60105481565b600d5481565b602654601954601a54601b54601d54600b54600c5460ff9096169590916000908190819081908190611585611c16565b955061158f611238565b9450600f549350600854925060205491505b909192939495969798999a9b565b60015433600160a060020a03908116911614156108f357600454600160a060020a031615806115f4575060005b602654610100900460ff1660028111156115f257fe5b145b1561161e5760048054600160a060020a031916600160a060020a03831617905560006008556108f3565b604080516020808252600b908201527f416c72656164792053657400000000000000000000000000000000000000000081830152905160008051602061231b8339815191529181900360600190a15b5b5b50565b600154600090819033600160a060020a0390811691161461169257611931565b600e8690556017849055601883905560025b602654610100900460ff1660028111156116ba57fe5b14156116c557611931565b602680548e919061ff0019166101008360028111156116e057fe5b021790555060025b8d60028111156116f457fe5b141561174d576040805160208082526008908201527f4c6f636b696e672100000000000000000000000000000000000000000000000081830152905160008051602061231b8339815191529181900360600190a1611931565b602680546000919060ff19166001835b0217905550620186a0602355612710602481905560255560105460009011156117de57600091505b6007548210156117de5750600081815260066020526040902054600160a060020a031680156117d257600160a060020a038116600090815260056020526040812060018101829055600201555b5b600190910190611785565b5b60006010819055600f819055600881905560198d9055601a8c9055601b8b9055600c8a9055600b899055600a889055600d8690556301e133808d01601d55601e8190556011819055601281905560016015556016819055602081905560218190556022819055601f805460ff19169055601c819055600160a060020a0330163111156118e157600154602554604051600160a060020a0392831692301631906000818181858888f1935050505015156118e1576040805160208082526006908201527f4552524f5221000000000000000000000000000000000000000000000000000081830152905160008051602061231b8339815191529181900360600190a15b5b6040805160208082526002908201527f6f6b00000000000000000000000000000000000000000000000000000000000081830152905160008051602061231b8339815191529181900360600190a15b50505050505050505050505050565b600154600160a060020a031681565b60015433600160a060020a039081169116141580611983575060025b602654610100900460ff16600281111561198157fe5b145b1561198e5760006000fd5b60028054600160a060020a031916600160a060020a0383161790555b50565b6023546025546024545b909192565b60015433600160a060020a0390811691161415806119f0575060025b602654610100900460ff1660028111156119ee57fe5b145b156119fb5760006000fd5b60038054600160a060020a031916600160a060020a0383161790555b50565b60015433600160a060020a039081169116141580611a4e575060025b602654610100900460ff166002811115611a4c57fe5b145b15611a595760006000fd5b60018054600160a060020a031916600160a060020a0383161790555b50565b600254600354600054600454600160a060020a03938416939283169291821691165b90919293565b6000805481908190819033600160a060020a039081169116148015611ac65750601d5442105b15611ad45760009350611c0c565b600160a060020a033316600090815260056020526040902060010154611af9906122d5565b92509250848210158015611b0d5750600085115b15611c0757600160a060020a03338116600090815260056020526040808220600101805489900390559188168152205460ff161515611b4f57611b4f86612196565b5b600160a060020a038616600090815260056020526040902060010154611b75906121f8565b8501905060015b60265460ff166004811115611b8d57fe5b1415611b995760155492505b600160a060020a038087166000818152600560209081526040918290206601000000000000880286176001909101558151898152915192933316927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a360019350611c0c565b600093505b5b50505092915050565b601e54601054035b90565b60005b602654610100900460ff166002811115611c3a57fe5b14611c455760006000fd5b60015433600160a060020a03908116911614611c615760006000fd5b600054600160a060020a0316ff5b565b60185481565b33600080611c83610e00565b600160a060020a038316600090815260056020526040902060010154611ca8906121f8565b915060035b60265460ff166004811115611cbe57fe5b14611d16576040805160208082526009908201527f4e6f20526566756e64000000000000000000000000000000000000000000000081830152905160008051602061231b8339815191529181900360600190a1611132565b811515611d70576040805160208082526009908201527f4e6f20546f6b656e73000000000000000000000000000000000000000000000081830152905160008051602061231b8339815191529181900360600190a1611132565b600d5482029050600b54611d82611c16565b10611d8f57600a815b0490035b60008054600160a060020a031681526005602052604090205460ff161515611dc657600054611dc690600160a060020a0316612196565b5b60008054600160a060020a03908116825260056020526040808320600190810180548701905591861683528220908101829055600201541115611e3e57600160a060020a03808416600081815260056020526040808220600290810180548454909616845291832001805490940190935590815290555b602554604051600160a060020a038516919083906000818181858888f1935050505015156111325760006000fd5b5b5b5b505050565b600160a060020a038083166000908152600960209081526040808320938516835292905220545b92915050565b60115481565b60165481565b600060006000600060006000600060105460001415611ecb57612189565b6000601154118015611edd5750601254155b8015611eee5750601854601c540142115b15611f885760158054600101908190556180009010611f0d5760016015555b42601c556011805460128190556013556010546014556000908190556016556015546040805160208101929092528082526008828201527f537461727452756e0000000000000000000000000000000000000000000000006060830152516000805160206122fb8339815191529181900360800190a1612189565b6000601254131561218957601454601354811515611fa257fe5b0495506000945060165493505b8785108015611fbf575060075484105b8015611fcd57506000601254135b1561209857600084815260066020526040902054600160a060020a03169250821515611ff85761208b565b600160a060020a03831660009081526005602052604090206001015461201d906122d5565b9150915060008111801561203357506015548214155b1561208b576012548682029750871361208b57600160a060020a038316600090815260056020526040902060028101805489019055601554660100000000000002821760019182015560128054899003905594909401935b5b5b600190930192611faf565b6016849055600754841015806120b15750600060125413155b15612134576000601681905560125413156120d3576012546011805490910190555b6000601255601354604080516020810192909252808252600b828201527f52756e436f6d706c6574650000000000000000000000000000000000000000006060830152516000805160206122fb8339815191529181900360800190a1612189565b60408051602081018790528181526006818301527f50617952756e0000000000000000000000000000000000000000000000000000606082015290516000805160206122fb8339815191529181900360800190a15b5b5b5b5050505050505050565b600160a060020a0381166000818152600560209081526040808320805460ff191660019081178255601554660100000000000002918101919091556007805491820190558352600690915290208054600160a060020a03191690911790555b50565b65ffffffffffff81165b919050565b601f5460009060ff1615156108f357601f805460ff19166001179055601054606490600f025b04601e81905560108054909101905560008054600160a060020a031681526005602052604090205460ff1615156122735760005461227390600160a060020a0316612196565b5b601e5460008054600160a060020a031681526005602052604090206001015461229c906121f8565b60155460008054600160a060020a03168152600560205260409020919092016601000000000000909202821760019091015590505b5b50565b6000806601000000000000835b0461ffff1691508265ffffffffffff1690505b91509156009e229c55f86322ec7d67b654476e2d52934c738b3cd58c026b5b2b6e9b7b992d1df4241f9d28385037b9339fabdb2fac8a42cb5e489c20da7a82bb32f517e648a165627a7a72305820c3039feace276128a8a24bc387d61714eecae740de955c6578526a4a4027bebc0029

Swarm Source

bzzr://c3039feace276128a8a24bc387d61714eecae740de955c6578526a4a4027bebc

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.