Overview
ETH Balance
0.224484938394050375 ETH
Eth Value
$717.69 (@ $3,197.07/ETH)Token Holdings
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 478 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 7298561 | 2118 days ago | IN | 0 ETH | 0.00016958 | ||||
Sell | 7298558 | 2118 days ago | IN | 0 ETH | 0.00014042 | ||||
Withdraw | 6650881 | 2236 days ago | IN | 0 ETH | 0.00059355 | ||||
Withdraw | 6636924 | 2238 days ago | IN | 0 ETH | 0.00043834 | ||||
Sell | 6636921 | 2238 days ago | IN | 0 ETH | 0.00020869 | ||||
Sell | 6636919 | 2238 days ago | IN | 0 ETH | 0.00056119 | ||||
Buy | 6635732 | 2238 days ago | IN | 0.01 ETH | 0.00104188 | ||||
Process Rewards | 6632433 | 2239 days ago | IN | 0 ETH | 0.00593484 | ||||
Sell | 6630625 | 2239 days ago | IN | 0 ETH | 0.0012792 | ||||
Sell | 6630624 | 2239 days ago | IN | 0 ETH | 0.00169569 | ||||
Withdraw | 6630624 | 2239 days ago | IN | 0 ETH | 0.00219172 | ||||
Sell | 6630624 | 2239 days ago | IN | 0 ETH | 0.00113046 | ||||
Withdraw | 6630195 | 2239 days ago | IN | 0 ETH | 0.00423965 | ||||
Sell | 6630123 | 2239 days ago | IN | 0 ETH | 0.00350425 | ||||
Sell | 6630089 | 2239 days ago | IN | 0 ETH | 0.00631917 | ||||
Withdraw | 6629805 | 2239 days ago | IN | 0 ETH | 0.00032875 | ||||
Sell | 6629797 | 2239 days ago | IN | 0 ETH | 0.00017849 | ||||
Withdraw | 6629681 | 2239 days ago | IN | 0 ETH | 0.00054793 | ||||
Sell | 6629668 | 2239 days ago | IN | 0 ETH | 0.00070085 | ||||
Transfer | 6629638 | 2239 days ago | IN | 0 ETH | 0.00127543 | ||||
Withdraw | 6629622 | 2239 days ago | IN | 0 ETH | 0.00038355 | ||||
Sell | 6629614 | 2239 days ago | IN | 0 ETH | 0.00049059 | ||||
Transfer | 6629607 | 2239 days ago | IN | 0 ETH | 0.00105 | ||||
Reinvest | 6629588 | 2239 days ago | IN | 0 ETH | 0.0012 | ||||
Activate Bot | 6629566 | 2239 days ago | IN | 0 ETH | 0.00022251 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
7298561 | 2118 days ago | 0.00802004 ETH | ||||
7298558 | 2118 days ago | 0.00001698 ETH | ||||
6650881 | 2236 days ago | 0.09569162 ETH | ||||
6636924 | 2238 days ago | 0.3106627 ETH | ||||
6636919 | 2238 days ago | 0.00686894 ETH | ||||
6635732 | 2238 days ago | 0.0002 ETH | ||||
6632433 | 2239 days ago | 0.0003937 ETH | ||||
6632433 | 2239 days ago | 0.00026756 ETH | ||||
6632433 | 2239 days ago | 0.00164219 ETH | ||||
6630624 | 2239 days ago | 0.00005783 ETH | ||||
6630195 | 2239 days ago | 0.51509045 ETH | ||||
6630123 | 2239 days ago | 0.00038089 ETH | ||||
6630089 | 2239 days ago | 0.00434521 ETH | ||||
6629805 | 2239 days ago | 0.93894621 ETH | ||||
6629681 | 2239 days ago | 11.59200923 ETH | ||||
6629668 | 2239 days ago | 0.24116799 ETH | ||||
6629638 | 2239 days ago | 0.19921322 ETH | ||||
6629622 | 2239 days ago | 0.74627183 ETH | ||||
6629614 | 2239 days ago | 0.01653345 ETH | ||||
6629607 | 2239 days ago | 0.00226539 ETH | ||||
6629588 | 2239 days ago | 0.0000453 ETH | ||||
6629565 | 2239 days ago | 0.01837899 ETH | ||||
6629515 | 2239 days ago | 0.0204211 ETH | ||||
6629376 | 2239 days ago | 0.41690989 ETH | ||||
6629359 | 2239 days ago | 0.01651143 ETH |
Loading...
Loading
Contract Name:
P6
Compiler Version
v0.4.24+commit.e67f0147
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-10-30 */ pragma solidity ^0.4.23; // File: contracts/Bankroll.sol interface Bankroll { //Customer functions /// @dev Stores ETH funds for customer function credit(address _customerAddress, uint256 amount) external returns (uint256); /// @dev Debits address by an amount function debit(address _customerAddress, uint256 amount) external returns (uint256); /// @dev Withraws balance for address; returns amount sent function withdraw(address _customerAddress) external returns (uint256); /// @dev Retrieve the token balance of any single address. function balanceOf(address _customerAddress) external view returns (uint256); /// @dev Stats of any single address function statsOf(address _customerAddress) external view returns (uint256[8]); // System functions // @dev Deposit funds function deposit() external payable; // @dev Deposit on behalf of an address; it is not a credit function depositBy(address _customerAddress) external payable; // @dev Distribute house profit function houseProfit(uint256 amount) external; /// @dev Get all the ETH stored in contract minus credits to customers function netEthereumBalance() external view returns (uint256); /// @dev Get all the ETH stored in contract function totalEthereumBalance() external view returns (uint256); } // File: contracts/P4RTYRelay.sol /* * Visit: https://p4rty.io * Discord: https://discord.gg/7y3DHYF */ interface P4RTYRelay { /** * @dev Will relay to internal implementation * @param beneficiary Token purchaser * @param tokenAmount Number of tokens to be minted */ function relay(address beneficiary, uint256 tokenAmount) external; } // File: contracts/SessionQueue.sol /// A FIFO queue for storing addresses contract SessionQueue { mapping(uint256 => address) private queue; uint256 private first = 1; uint256 private last = 0; /// @dev Push into queue function enqueue(address data) internal { last += 1; queue[last] = data; } /// @dev Returns true if the queue has elements in it function available() internal view returns (bool) { return last >= first; } /// @dev Returns the size of the queue function depth() internal view returns (uint256) { return last - first + 1; } /// @dev Pops from the head of the queue function dequeue() internal returns (address data) { require(last >= first); // non-empty queue data = queue[first]; delete queue[first]; first += 1; } /// @dev Returns the head of the queue without a pop function peek() internal view returns (address data) { require(last >= first); // non-empty queue data = queue[first]; } } // File: openzeppelin-solidity/contracts/math/SafeMath.sol /** * @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 c) { if (a == 0) { return 0; } 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 a / b; } /** * @dev Subtracts 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 c) { c = a + b; assert(c >= a); return c; } } // File: openzeppelin-solidity/contracts/ownership/Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } // File: openzeppelin-solidity/contracts/ownership/Whitelist.sol /** * @title Whitelist * @dev The Whitelist contract has a whitelist of addresses, and provides basic authorization control functions. * @dev This simplifies the implementation of "user permissions". */ contract Whitelist is Ownable { mapping(address => bool) public whitelist; event WhitelistedAddressAdded(address addr); event WhitelistedAddressRemoved(address addr); /** * @dev Throws if called by any account that's not whitelisted. */ modifier onlyWhitelisted() { require(whitelist[msg.sender]); _; } /** * @dev add an address to the whitelist * @param addr address * @return true if the address was added to the whitelist, false if the address was already in the whitelist */ function addAddressToWhitelist(address addr) onlyOwner public returns(bool success) { if (!whitelist[addr]) { whitelist[addr] = true; emit WhitelistedAddressAdded(addr); success = true; } } /** * @dev add addresses to the whitelist * @param addrs addresses * @return true if at least one address was added to the whitelist, * false if all addresses were already in the whitelist */ function addAddressesToWhitelist(address[] addrs) onlyOwner public returns(bool success) { for (uint256 i = 0; i < addrs.length; i++) { if (addAddressToWhitelist(addrs[i])) { success = true; } } } /** * @dev remove an address from the whitelist * @param addr address * @return true if the address was removed from the whitelist, * false if the address wasn't in the whitelist in the first place */ function removeAddressFromWhitelist(address addr) onlyOwner public returns(bool success) { if (whitelist[addr]) { whitelist[addr] = false; emit WhitelistedAddressRemoved(addr); success = true; } } /** * @dev remove addresses from the whitelist * @param addrs addresses * @return true if at least one address was removed from the whitelist, * false if all addresses weren't in the whitelist in the first place */ function removeAddressesFromWhitelist(address[] addrs) onlyOwner public returns(bool success) { for (uint256 i = 0; i < addrs.length; i++) { if (removeAddressFromWhitelist(addrs[i])) { success = true; } } } } // File: contracts/P6.sol // solhint-disable-line /* * Visit: https://p4rty.io * Discord: https://discord.gg/7y3DHYF * Stable + DIVIS: Whale and Minow Friendly * Fees balanced for maximum dividends for ALL * Active depositors rewarded with P4RTY tokens * 50% of ETH value in earned P4RTY token rewards * 2% of dividends fund a gaming bankroll; gaming profits are paid back into P6 * P4RTYRelay is notified on all dividend producing transactions * Smart Launch phase which is anti-whale & anti-snipe * * P6 * The worry free way to earn A TON OF ETH & P4RTY reward tokens * * -> What? * The first Ethereum Bonded Pure Dividend Token: * [✓] The only dividend printing press that is part of the P4RTY Entertainment Network * [✓] Earn ERC20 P4RTY tokens on all ETH deposit activities * [✓] 3% P6 Faucet for free P6 / P4RTY * [✓] Auto-Reinvests * [✓] 10% exchange fees on buys and sells * [✓] 100 tokens to activate faucet * * -> How? * To replay or use the faucet the contract must be fully launched * To sell or transfer you need to be vested (maximum of 3 days) after a reinvest */ contract P6 is Whitelist, SessionQueue { /*================================= = MODIFIERS = =================================*/ /// @dev Only people with tokens modifier onlyTokenHolders { require(myTokens() > 0); _; } /// @dev Only people with profits modifier onlyDivis { require(myDividends(true) > 0); _; } /// @dev Only invested; If participating in prelaunch have to buy tokens modifier invested { require(stats[msg.sender].invested > 0, "Must buy tokens once to withdraw"); _; } /// @dev After every reinvest features are protected by a cooloff to vest funds modifier cooledOff { require(msg.sender == owner && !contractIsLaunched || now - bot[msg.sender].coolOff > coolOffPeriod); _; } /// @dev The faucet has a rewardPeriod modifier teamPlayer { require(msg.sender == owner || now - lastReward[msg.sender] > rewardProcessingPeriod, "No spamming"); _; } /// @dev Functions only available after launch modifier launched { require(contractIsLaunched || msg.sender == owner, "Contract not lauched"); _; } /*============================== = EVENTS = ==============================*/ event onLog( string heading, address caller, address subj, uint val ); event onTokenPurchase( address indexed customerAddress, uint256 incomingEthereum, uint256 tokensMinted, address indexed referredBy, uint timestamp, uint256 price ); event onTokenSell( address indexed customerAddress, uint256 tokensBurned, uint256 ethereumEarned, uint timestamp, uint256 price ); event onReinvestment( address indexed customerAddress, uint256 ethereumReinvested, uint256 tokensMinted ); event onCommunityReward( address indexed sourceAddress, address indexed destinationAddress, uint256 ethereumEarned ); event onReinvestmentProxy( address indexed customerAddress, address indexed destinationAddress, uint256 ethereumReinvested ); event onWithdraw( address indexed customerAddress, uint256 ethereumWithdrawn ); event onDeposit( address indexed customerAddress, uint256 ethereumDeposited ); // ERC20 event Transfer( address indexed from, address indexed to, uint256 tokens ); /*===================================== = CONFIGURABLES = =====================================*/ /// @dev 10% dividends for token purchase uint256 internal entryFee_ = 10; /// @dev 1% dividends for token transfer uint256 internal transferFee_ = 1; /// @dev 10% dividends for token selling uint256 internal exitFee_ = 10; /// @dev 3% of entryFee_ is given to faucet /// traditional referral mechanism repurposed as a many to many faucet /// powers auto reinvest uint256 internal referralFee_ = 30; /// @dev 20% of entryFee/exit fee is given to Bankroll uint256 internal maintenanceFee_ = 20; address internal maintenanceAddress; //Advanced Config uint256 constant internal bankrollThreshold = 0.5 ether; uint256 constant internal botThreshold = 0.01 ether; uint256 constant rewardProcessingPeriod = 6 hours; uint256 constant reapPeriod = 7 days; uint256 public maxProcessingCap = 10; uint256 public coolOffPeriod = 3 days; uint256 public launchETHMaximum = 20 ether; bool public contractIsLaunched = false; uint public lastReaped; uint256 constant internal tokenPriceInitial_ = 0.0000001 ether; uint256 constant internal tokenPriceIncremental_ = 0.00000001 ether; uint256 constant internal magnitude = 2 ** 64; /// @dev proof of stake (defaults at 100 tokens) uint256 public stakingRequirement = 100e18; /*================================= = DATASETS = ================================*/ // bookkeeping for autoreinvest struct Bot { bool active; bool queued; uint256 lastBlock; uint256 coolOff; } // Onchain Stats!!! struct Stats { uint invested; uint reinvested; uint withdrawn; uint rewarded; uint contributed; uint transferredTokens; uint receivedTokens; uint xInvested; uint xReinvested; uint xRewarded; uint xContributed; uint xWithdrawn; uint xTransferredTokens; uint xReceivedTokens; } // amount of shares for each address (scaled number) mapping(address => uint256) internal lastReward; mapping(address => uint256) internal tokenBalanceLedger_; mapping(address => uint256) internal referralBalance_; mapping(address => int256) internal payoutsTo_; mapping(address => Bot) internal bot; mapping(address => Stats) internal stats; //on chain referral tracking mapping(address => address) public referrals; uint256 internal tokenSupply_; uint256 internal profitPerShare_; P4RTYRelay public relay; Bankroll public bankroll; bool internal bankrollEnabled = true; /*======================================= = PUBLIC FUNCTIONS = =======================================*/ constructor(address relayAddress) public { relay = P4RTYRelay(relayAddress); updateMaintenanceAddress(msg.sender); } //Maintenance Functions /// @dev Minted P4RTY tokens are sent to the maintenance address function updateMaintenanceAddress(address maintenance) onlyOwner public { maintenanceAddress = maintenance; } /// @dev Update the bankroll; 2% of dividends go to the bankroll function updateBankrollAddress(address bankrollAddress) onlyOwner public { bankroll = Bankroll(bankrollAddress); } /// @dev The cap determines the amount of addresses processed when a user runs the faucet function updateProcessingCap(uint cap) onlyOwner public { require(cap >= 5 && cap <= 15, "Capacity set outside of policy range"); maxProcessingCap = cap; } /// @dev Updates the coolOff period where reinvest must vest function updateCoolOffPeriod(uint coolOff) onlyOwner public { require(coolOff >= 5 minutes && coolOff <= 3 days); coolOffPeriod = coolOff; } /// @dev Opens the contract for public use outside of the launch phase function launchContract() onlyOwner public { contractIsLaunched = true; } //Bot Functions /* Activates the bot and queues if necessary; else removes */ function activateBot(bool auto) public { bot[msg.sender].active = auto; //Spam protection for customerAddress if (bot[msg.sender].active) { if (!bot[msg.sender].queued) { bot[msg.sender].queued = true; enqueue(msg.sender); } } } /* Returns if the sender has the reinvestment not enabled */ function botEnabled() public view returns (bool){ return bot[msg.sender].active; } function fundBankRoll(uint256 amount) internal { bankroll.deposit.value(amount)(); } /// @dev Converts all incoming ethereum to tokens for the caller, and passes down the referral addy (if any) function buyFor(address _customerAddress) onlyWhitelisted public payable returns (uint256) { return purchaseTokens(_customerAddress, msg.value); } /// @dev Converts all incoming ethereum to tokens for the caller function buy() public payable returns (uint256) { if (contractIsLaunched){ //ETH sent during prelaunch needs to be processed if(stats[msg.sender].invested == 0 && referralBalance_[msg.sender] > 0){ reinvestFor(msg.sender); } return purchaseTokens(msg.sender, msg.value); } else { //Just deposit funds return deposit(); } } function deposit() internal returns (uint256) { require(msg.value > 0); //Just add to the referrals for sidelined ETH referralBalance_[msg.sender] = SafeMath.add(referralBalance_[msg.sender], msg.value); require(referralBalance_[msg.sender] <= launchETHMaximum, "Exceeded investment cap"); emit onDeposit(msg.sender, msg.value); return 0; } /** * @dev Fallback function to handle ethereum that was send straight to the contract * Unfortunately we cannot use a referral address this way. */ function() payable public { purchaseTokens(msg.sender, msg.value); } /// @dev Converts all of caller's dividends to tokens. function reinvest() onlyDivis launched public { reinvestFor(msg.sender); } /// @dev Allows owner to reinvest on behalf of a supporter function investSupporter(address _customerAddress) public onlyOwner { require(!contractIsLaunched, "Contract already opened"); reinvestFor(_customerAddress); } /// @dev Internal utility method for reinvesting function reinvestFor(address _customerAddress) internal { // fetch dividends uint256 _dividends = totalDividends(_customerAddress, false); // retrieve ref. bonus later in the code payoutsTo_[_customerAddress] += (int256) (_dividends * magnitude); // retrieve ref. bonus _dividends += referralBalance_[_customerAddress]; referralBalance_[_customerAddress] = 0; // dispatch a buy order with the virtualized "withdrawn dividends" uint256 _tokens = purchaseTokens(_customerAddress, _dividends); // fire event emit onReinvestment(_customerAddress, _dividends, _tokens); //Stats stats[_customerAddress].reinvested = SafeMath.add(stats[_customerAddress].reinvested, _dividends); stats[_customerAddress].xReinvested += 1; //Refresh the coolOff bot[_customerAddress].coolOff = now; } /// @dev Withdraws all of the callers earnings. function withdraw() onlyDivis invested public { withdrawFor(msg.sender); } /// @dev Utility function for withdrawing earnings function withdrawFor(address _customerAddress) internal { // setup data uint256 _dividends = totalDividends(_customerAddress, false); // get ref. bonus later in the code // update dividend tracker payoutsTo_[_customerAddress] += (int256) (_dividends * magnitude); // add ref. bonus _dividends += referralBalance_[_customerAddress]; referralBalance_[_customerAddress] = 0; // lambo delivery service _customerAddress.transfer(_dividends); //stats stats[_customerAddress].withdrawn = SafeMath.add(stats[_customerAddress].withdrawn, _dividends); stats[_customerAddress].xWithdrawn += 1; // fire event emit onWithdraw(_customerAddress, _dividends); } /// @dev Liquifies tokens to ethereum. function sell(uint256 _amountOfTokens) onlyTokenHolders cooledOff public { address _customerAddress = msg.sender; //Selling deactivates auto reinvest bot[_customerAddress].active = false; require(_amountOfTokens <= tokenBalanceLedger_[_customerAddress]); uint256 _tokens = _amountOfTokens; uint256 _ethereum = tokensToEthereum_(_tokens); uint256 _undividedDividends = SafeMath.div(SafeMath.mul(_ethereum, exitFee_), 100); uint256 _maintenance = SafeMath.div(SafeMath.mul(_undividedDividends, maintenanceFee_), 100); //maintenance and referral come out of the exitfee uint256 _dividends = SafeMath.sub(_undividedDividends, _maintenance); uint256 _taxedEthereum = SafeMath.sub(_ethereum, _undividedDividends); // burn the sold tokens tokenSupply_ = SafeMath.sub(tokenSupply_, _tokens); tokenBalanceLedger_[_customerAddress] = SafeMath.sub(tokenBalanceLedger_[_customerAddress], _tokens); // update dividends tracker int256 _updatedPayouts = (int256) (profitPerShare_ * _tokens + (_taxedEthereum * magnitude)); payoutsTo_[_customerAddress] -= _updatedPayouts; //Apply maintenance fee to the bankroll fundBankRoll(_maintenance); // dividing by zero is a bad idea if (tokenSupply_ > 0) { // update the amount of dividends per token profitPerShare_ = SafeMath.add(profitPerShare_, (_dividends * magnitude) / tokenSupply_); } // fire event emit onTokenSell(_customerAddress, _tokens, _taxedEthereum, now, buyPrice()); //GO!!! Bankroll Bot GO!!! brbReinvest(_customerAddress); } //@dev Bankroll Bot can only transfer 10% of funds during a reapPeriod //Its funds will always be locked because it always reinvests function reap(address _toAddress) public onlyOwner { require(now - lastReaped > reapPeriod, "Reap not available, too soon"); lastReaped = now; transferTokens(owner, _toAddress, SafeMath.div(balanceOf(owner), 10)); } /** * @dev Transfer tokens from the caller to a new holder. * Remember, there's a 1% fee here as well. */ function transfer(address _toAddress, uint256 _amountOfTokens) onlyTokenHolders cooledOff external returns (bool){ address _customerAddress = msg.sender; return transferTokens(_customerAddress, _toAddress, _amountOfTokens); } /// @dev Utility function for transfering tokens function transferTokens(address _customerAddress, address _toAddress, uint256 _amountOfTokens) internal returns (bool){ // make sure we have the requested tokens require(_amountOfTokens <= tokenBalanceLedger_[_customerAddress]); // withdraw all outstanding dividends first if (totalDividends(_customerAddress,true) > 0) { withdrawFor(_customerAddress); } // liquify a percentage of the tokens that are transfered // these are dispersed to shareholders uint256 _tokenFee = SafeMath.div(SafeMath.mul(_amountOfTokens, transferFee_), 100); uint256 _taxedTokens = SafeMath.sub(_amountOfTokens, _tokenFee); uint256 _dividends = tokensToEthereum_(_tokenFee); // burn the fee tokens tokenSupply_ = SafeMath.sub(tokenSupply_, _tokenFee); // exchange tokens tokenBalanceLedger_[_customerAddress] = SafeMath.sub(tokenBalanceLedger_[_customerAddress], _amountOfTokens); tokenBalanceLedger_[_toAddress] = SafeMath.add(tokenBalanceLedger_[_toAddress], _taxedTokens); // update dividend trackers payoutsTo_[_customerAddress] -= (int256) (profitPerShare_ * _amountOfTokens); payoutsTo_[_toAddress] += (int256) (profitPerShare_ * _taxedTokens); // disperse dividends among holders profitPerShare_ = SafeMath.add(profitPerShare_, (_dividends * magnitude) / tokenSupply_); // fire event emit Transfer(_customerAddress, _toAddress, _taxedTokens); //Stats stats[_customerAddress].xTransferredTokens += 1; stats[_customerAddress].transferredTokens += _amountOfTokens; stats[_toAddress].receivedTokens += _taxedTokens; stats[_toAddress].xReceivedTokens += 1; // ERC20 return true; } /*===================================== = HELPERS AND CALCULATORS = =====================================*/ /** * @dev Method to view the current Ethereum stored in the contract * Example: totalEthereumBalance() */ function totalEthereumBalance() public view returns (uint256) { return address(this).balance; } /// @dev Retrieve the total token supply. function totalSupply() public view returns (uint256) { return tokenSupply_; } /// @dev Retrieve the tokens owned by the caller. function myTokens() public view returns (uint256) { address _customerAddress = msg.sender; return balanceOf(_customerAddress); } /** * @dev Retrieve the dividends owned by the caller. * If `_includeReferralBonus` is to to 1/true, the referral bonus will be included in the calculations. * The reason for this, is that in the frontend, we will want to get the total divs (global + ref) * But in the internal calculations, we want them separate. */ /** * @dev Retrieve the dividends owned by the caller. * If `_includeReferralBonus` is to to 1/true, the referral bonus will be included in the calculations. * The reason for this, is that in the frontend, we will want to get the total divs (global + ref) * But in the internal calculations, we want them separate. */ function myDividends(bool _includeReferralBonus) public view returns (uint256) { return totalDividends(msg.sender, _includeReferralBonus); } function totalDividends(address _customerAddress, bool _includeReferralBonus) internal view returns (uint256) { return _includeReferralBonus ? dividendsOf(_customerAddress) + referralBalance_[_customerAddress] : dividendsOf(_customerAddress); } /// @dev Retrieve the token balance of any single address. function balanceOf(address _customerAddress) public view returns (uint256) { return tokenBalanceLedger_[_customerAddress]; } /// @dev Stats of any single address function statsOf(address _customerAddress) public view returns (uint256[14]){ Stats memory s = stats[_customerAddress]; uint256[14] memory statArray = [s.invested, s.withdrawn, s.rewarded, s.contributed, s.transferredTokens, s.receivedTokens, s.xInvested, s.xRewarded, s.xContributed, s.xWithdrawn, s.xTransferredTokens, s.xReceivedTokens, s.reinvested, s.xReinvested]; return statArray; } /// @dev Retrieve the dividend balance of any single address. function dividendsOf(address _customerAddress) public view returns (uint256) { return (uint256) ((int256) (profitPerShare_ * tokenBalanceLedger_[_customerAddress]) - payoutsTo_[_customerAddress]) / magnitude; } /// @dev Return the sell price of 1 individual token. 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_(1e18); uint256 _dividends = SafeMath.div(_ethereum, exitFee_); uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends); return _taxedEthereum; } } /// @dev Return the buy price of 1 individual token. function buyPrice() 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_(1e18); uint256 _dividends = SafeMath.div(_ethereum, entryFee_); uint256 _taxedEthereum = SafeMath.add(_ethereum, _dividends); return _taxedEthereum; } } /// @dev Function for the frontend to dynamically retrieve the price scaling of buy orders. function calculateTokensReceived(uint256 _ethereumToSpend) public view returns (uint256) { uint256 _dividends = SafeMath.div(SafeMath.mul(_ethereumToSpend, entryFee_), 100); uint256 _taxedEthereum = SafeMath.sub(_ethereumToSpend, _dividends); uint256 _amountOfTokens = ethereumToTokens_(_taxedEthereum); return _amountOfTokens; } /// @dev Function for the frontend to dynamically retrieve the price scaling of sell orders. function calculateEthereumReceived(uint256 _tokensToSell) public view returns (uint256) { require(_tokensToSell <= tokenSupply_); uint256 _ethereum = tokensToEthereum_(_tokensToSell); uint256 _dividends = SafeMath.div(SafeMath.mul(_ethereum, exitFee_), 100); uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends); return _taxedEthereum; } /*========================================== = INTERNAL FUNCTIONS = ==========================================*/ /// @dev Internal function to actually purchase the tokens. function purchaseTokens(address _customerAddress, uint256 _incomingEthereum) internal returns (uint256) { // data setup address _referredBy = msg.sender; uint256 _undividedDividends = SafeMath.div(SafeMath.mul(_incomingEthereum, entryFee_), 100); uint256 _maintenance = SafeMath.div(SafeMath.mul(_undividedDividends, maintenanceFee_), 100); uint256 _referralBonus = SafeMath.div(SafeMath.mul(_undividedDividends, referralFee_), 100); //maintenance and referral come out of the buyin uint256 _dividends = SafeMath.sub(_undividedDividends, SafeMath.add(_referralBonus, _maintenance)); uint256 _taxedEthereum = SafeMath.sub(_incomingEthereum, _undividedDividends); uint256 _amountOfTokens = ethereumToTokens_(_taxedEthereum); uint256 _fee = _dividends * magnitude; uint256 _tokenAllocation = SafeMath.div(_incomingEthereum, 2); // prevents overflow in the case that the pyramid somehow magically starts being used by everyone in the world // (or hackers) // and yes we know that the safemath function automatically rules out the "greater then" equasion. require(_amountOfTokens > 0 && SafeMath.add(_amountOfTokens, tokenSupply_) > tokenSupply_); //Apply maintenance fee to bankroll fundBankRoll(_maintenance); // is the user referred by a masternode? if ( // no cheating! _referredBy != _customerAddress && // does the referrer have at least X whole tokens? // i.e is the referrer a godly chad masternode tokenBalanceLedger_[_referredBy] >= stakingRequirement ) { // wealth redistribution referralBalance_[_referredBy] = SafeMath.add(referralBalance_[_referredBy], _referralBonus); //Stats stats[_referredBy].rewarded = SafeMath.add(stats[_referredBy].rewarded, _referralBonus); stats[_referredBy].xRewarded += 1; stats[_customerAddress].contributed = SafeMath.add(stats[_customerAddress].contributed, _referralBonus); stats[_customerAddress].xContributed += 1; //It pays to play emit onCommunityReward(_customerAddress, _referredBy, _referralBonus); } else { // no ref purchase // add the referral bonus back to the global dividends cake _dividends = SafeMath.add(_dividends, _referralBonus); _fee = _dividends * magnitude; } // we can't give people infinite ethereum if (tokenSupply_ > 0) { // add tokens to the pool tokenSupply_ = SafeMath.add(tokenSupply_, _amountOfTokens); // take the amount of dividends gained through this transaction, and allocates them evenly to each shareholder profitPerShare_ += (_dividends * magnitude / tokenSupply_); // calculate the amount of tokens the customer receives over his purchase _fee = _fee - (_fee - (_amountOfTokens * (_dividends * magnitude / tokenSupply_))); } else { // add tokens to the pool tokenSupply_ = _amountOfTokens; } // update circulating supply & the ledger address for the customer tokenBalanceLedger_[_customerAddress] = SafeMath.add(tokenBalanceLedger_[_customerAddress], _amountOfTokens); // Tells the contract that the buyer doesn't deserve dividends for the tokens before they owned them; // really i know you think you do but you don't int256 _updatedPayouts = (int256) (profitPerShare_ * _amountOfTokens - _fee); payoutsTo_[_customerAddress] += _updatedPayouts; //Notifying the relay is simple and should represent the total economic activity which is the _incomingEthereum //Every player is a customer and mints their own tokens when the buy or reinvest, relay P4RTY 50/50 relay.relay(maintenanceAddress, _tokenAllocation); relay.relay(_customerAddress, _tokenAllocation); // fire event emit onTokenPurchase(_customerAddress, _incomingEthereum, _amountOfTokens, _referredBy, now, buyPrice()); //Stats stats[_customerAddress].invested = SafeMath.add(stats[_customerAddress].invested, _incomingEthereum); stats[_customerAddress].xInvested += 1; //GO!!! Bankroll Bot GO!!! brbReinvest(_customerAddress); return _amountOfTokens; } /** * Calculate Token price based on an amount of incoming ethereum * It's an algorithm, hopefully we gave you the whitepaper with it in scientific notation; * Some conversions occurred to prevent decimal errors or underflows / overflows in solidity code. */ function ethereumToTokens_(uint256 _ethereum) internal view returns (uint256) { uint256 _tokenPriceInitial = tokenPriceInitial_ * 1e18; uint256 _tokensReceived = ( ( // underflow attempts BTFO SafeMath.sub( (sqrt ( (_tokenPriceInitial ** 2) + (2 * (tokenPriceIncremental_ * 1e18) * (_ethereum * 1e18)) + (((tokenPriceIncremental_) ** 2) * (tokenSupply_ ** 2)) + (2 * (tokenPriceIncremental_) * _tokenPriceInitial * tokenSupply_) ) ), _tokenPriceInitial ) ) / (tokenPriceIncremental_) ) - (tokenSupply_) ; return _tokensReceived; } /** * Calculate token sell value. * It's an algorithm, hopefully we gave you the whitepaper with it in scientific notation; * Some conversions occurred to prevent decimal errors or underflows / overflows in solidity code. */ function tokensToEthereum_(uint256 _tokens) internal view returns (uint256) { uint256 tokens_ = (_tokens + 1e18); uint256 _tokenSupply = (tokenSupply_ + 1e18); uint256 _etherReceived = ( // underflow attempts BTFO SafeMath.sub( ( ( ( tokenPriceInitial_ + (tokenPriceIncremental_ * (_tokenSupply / 1e18)) ) - tokenPriceIncremental_ ) * (tokens_ - 1e18) ), (tokenPriceIncremental_ * ((tokens_ ** 2 - tokens_) / 1e18)) / 2 ) / 1e18); return _etherReceived; } /// @dev Returns true if the tokens are fully vested after a reinvest function isVested() public view returns (bool) { return now - bot[msg.sender].coolOff > coolOffPeriod; } /* Is end user eligible to process rewards? */ function rewardAvailable() public view returns (bool){ return available() && now - lastReward[msg.sender] > rewardProcessingPeriod && tokenBalanceLedger_[msg.sender] >= stakingRequirement; } /// @dev Returns timer info used for the vesting and the faucet function timerInfo() public view returns (uint, uint[2], uint[2]){ return (now, [bot[msg.sender].coolOff, coolOffPeriod], [lastReward[msg.sender], rewardProcessingPeriod]); } //This is where all your gas goes, sorry //Not sorry, you probably only paid 1 gwei 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; } } // // BankRollBot Functions // //Reinvest on all buys and sells function brbReinvest(address _customerAddress) internal { if (_customerAddress != owner && bankrollEnabled) { if (totalDividends(owner, true) > bankrollThreshold) { reinvestFor(owner); } } } /* Can only be run once per day from the caller avoid bots Minimum of 100 P6 Minimum of 5 P4RTY + amount minted based on dividends processed in 24 hour period */ function processRewards() public teamPlayer launched { require(tokenBalanceLedger_[msg.sender] >= stakingRequirement, "Must meet staking requirement"); uint256 count = 0; address _customer; while (available() && count < maxProcessingCap) { //If this queue has already been processed in this block exit without altering the queue _customer = peek(); if (bot[_customer].lastBlock == block.number){ break; } //Pop dequeue(); //Update tracking bot[_customer].lastBlock = block.number; bot[_customer].queued = false; //User could have deactivated while still being queued if (bot[_customer].active) { //Reinvest divs; be gas efficient if (totalDividends(_customer, true) > botThreshold) { //No bankroll reinvest when processing the queue bankrollEnabled = false; reinvestFor(_customer); bankrollEnabled = true; } enqueue(_customer); bot[_customer].queued = true; } count++; } lastReward[msg.sender] = now; reinvestFor(msg.sender); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"dividendsOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"bankrollAddress","type":"address"}],"name":"updateBankrollAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"bankroll","outputs":[{"name":"","type":"address"}],"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":"maxProcessingCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"statsOf","outputs":[{"name":"","type":"uint256[14]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"launchContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"timerInfo","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256[2]"},{"name":"","type":"uint256[2]"}],"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":"addrs","type":"address[]"}],"name":"removeAddressesFromWhitelist","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"maintenance","type":"address"}],"name":"updateMaintenanceAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"removeAddressFromWhitelist","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"sellPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isVested","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"stakingRequirement","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_includeReferralBonus","type":"bool"}],"name":"myDividends","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalEthereumBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"buyFor","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","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":"botEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"investSupporter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"launchETHMaximum","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"addAddressToWhitelist","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"buyPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_toAddress","type":"address"}],"name":"reap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"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":"","type":"address"}],"name":"whitelist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"referrals","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"cap","type":"uint256"}],"name":"updateProcessingCap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"buy","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","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":true,"inputs":[],"name":"coolOffPeriod","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"relay","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"coolOff","type":"uint256"}],"name":"updateCoolOffPeriod","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addrs","type":"address[]"}],"name":"addAddressesToWhitelist","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_amountOfTokens","type":"uint256"}],"name":"sell","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"lastReaped","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"auto","type":"bool"}],"name":"activateBot","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"contractIsLaunched","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"processRewards","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rewardAvailable","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"reinvest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"relayAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"heading","type":"string"},{"indexed":false,"name":"caller","type":"address"},{"indexed":false,"name":"subj","type":"address"},{"indexed":false,"name":"val","type":"uint256"}],"name":"onLog","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"incomingEthereum","type":"uint256"},{"indexed":false,"name":"tokensMinted","type":"uint256"},{"indexed":true,"name":"referredBy","type":"address"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"price","type":"uint256"}],"name":"onTokenPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"tokensBurned","type":"uint256"},{"indexed":false,"name":"ethereumEarned","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"price","type":"uint256"}],"name":"onTokenSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"ethereumReinvested","type":"uint256"},{"indexed":false,"name":"tokensMinted","type":"uint256"}],"name":"onReinvestment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"sourceAddress","type":"address"},{"indexed":true,"name":"destinationAddress","type":"address"},{"indexed":false,"name":"ethereumEarned","type":"uint256"}],"name":"onCommunityReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":true,"name":"destinationAddress","type":"address"},{"indexed":false,"name":"ethereumReinvested","type":"uint256"}],"name":"onReinvestmentProxy","type":"event"},{"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":"customerAddress","type":"address"},{"indexed":false,"name":"ethereumDeposited","type":"uint256"}],"name":"onDeposit","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":"addr","type":"address"}],"name":"WhitelistedAddressAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address"}],"name":"WhitelistedAddressRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]
Contract Creation Code
6080604052600160038190556000600455600a60058190556006919091556007819055601e6008556014600955600b556203f480600c556801158e460913d00000600d55600e805460ff1916905568056bc75e2d63100000601055601b805460a060020a60ff0219167401000000000000000000000000000000000000000017905534801561008d57600080fd5b50604051602080620027f783398101604052516000805433600160a060020a03199182168117909255601a8054909116600160a060020a0384161790556100dc906401000000006100e2810204565b5061011b565b600054600160a060020a031633146100f957600080fd5b600a8054600160a060020a031916600160a060020a0392909216919091179055565b6126cc806200012b6000396000f3006080604052600436106102155763ffffffff60e060020a60003504166265318b81146102225780630bc0504e146102555780630c657eb01461027857806310d0ffdd146102a957806313f3c37b146102c157806315cfc405146102d657806318160ddd1461033057806319d45a08146103455780632150097f1461035a57806322609373146103dd57806324953eaa146103f5578063275893a91461045e578063286dd3f51461047f5780633ccfd60b146104a05780634b750334146104b55780634b877a93146104ca57806356d399e8146104df578063688abbf7146104f45780636b2f46321461050e5780636f0b51801461052357806370a082311461053757806374a57889146105585780637573475e1461056d578063797741261461058e5780637b9417c8146105a35780638620410b146105c45780638af9f493146105d95780638da5cb5b146105fa578063949e8acd1461060f5780639b19251a146106245780639ca423b314610645578063a1282c9b14610666578063a6f2ae3a1461067e578063a9059cbb14610686578063abb6154f146106aa578063b59589d1146106bf578063d980ddb9146106d4578063e2ec6ec3146106ec578063e4849b3214610741578063e4f8bfd114610759578063e815cc941461076e578063ed70000114610788578063f2fde38b1461079d578063f9fc0d07146107be578063fca3b304146107d3578063fdb5a03e146107e8575b61021f33346107fd565b50005b34801561022e57600080fd5b50610243600160a060020a0360043516610cba565b60408051918252519081900360200190f35b34801561026157600080fd5b50610276600160a060020a0360043516610cf8565b005b34801561028457600080fd5b5061028d610d3e565b60408051600160a060020a039092168252519081900360200190f35b3480156102b557600080fd5b50610243600435610d4d565b3480156102cd57600080fd5b50610243610d82565b3480156102e257600080fd5b506102f7600160a060020a0360043516610d88565b60405180826101c080838360005b8381101561031d578181015183820152602001610305565b5050505090500191505060405180910390f35b34801561033c57600080fd5b50610243610f09565b34801561035157600080fd5b50610276610f10565b34801561036657600080fd5b5061036f610f36565b6040518084815260200183600260200280838360005b8381101561039d578181015183820152602001610385565b5050505090500182600260200280838360005b838110156103c85781810151838201526020016103b0565b50505050905001935050505060405180910390f35b3480156103e957600080fd5b50610243600435610f95565b34801561040157600080fd5b506040805160206004803580820135838102808601850190965280855261044a95369593946024949385019291829185019084908082843750949750610fd29650505050505050565b604080519115158252519081900360200190f35b34801561046a57600080fd5b50610276600160a060020a0360043516611031565b34801561048b57600080fd5b5061044a600160a060020a0360043516611077565b3480156104ac57600080fd5b5061027661110d565b3480156104c157600080fd5b50610243611193565b3480156104d657600080fd5b5061044a6111e8565b3480156104eb57600080fd5b50610243611204565b34801561050057600080fd5b50610243600435151561120a565b34801561051a57600080fd5b5061024361121c565b610243600160a060020a0360043516611221565b34801561054357600080fd5b50610243600160a060020a0360043516611249565b34801561056457600080fd5b5061044a611264565b34801561057957600080fd5b50610276600160a060020a036004351661127a565b34801561059a57600080fd5b506102436112f8565b3480156105af57600080fd5b5061044a600160a060020a03600435166112fe565b3480156105d057600080fd5b50610243611399565b3480156105e557600080fd5b50610276600160a060020a03600435166113e2565b34801561060657600080fd5b5061028d61148a565b34801561061b57600080fd5b50610243611499565b34801561063057600080fd5b5061044a600160a060020a03600435166114ab565b34801561065157600080fd5b5061028d600160a060020a03600435166114c0565b34801561067257600080fd5b506102766004356114db565b610243611584565b34801561069257600080fd5b5061044a600160a060020a03600435166024356115e3565b3480156106b657600080fd5b50610243611657565b3480156106cb57600080fd5b5061028d61165d565b3480156106e057600080fd5b5061027660043561166c565b3480156106f857600080fd5b506040805160206004803580820135838102808601850190965280855261044a953695939460249493850192918291850190849080828437509497506116a89650505050505050565b34801561074d57600080fd5b50610276600435611701565b34801561076557600080fd5b50610243611903565b34801561077a57600080fd5b506102766004351515611909565b34801561079457600080fd5b5061044a611971565b3480156107a957600080fd5b50610276600160a060020a036004351661197a565b3480156107ca57600080fd5b50610276611a0e565b3480156107df57600080fd5b5061044a611cc6565b3480156107f457600080fd5b50610276611d13565b60008060008060008060008060008060003399506108276108208d600554611da3565b6064611dcc565b98506108386108208a600954611da3565b97506108496108208a600854611da3565b965061085e89610859898b611de1565b611dee565b955061086a8c8a611dee565b945061087585611e00565b935068010000000000000000860292506108908c6002611dcc565b91506000841180156108ac57506018546108aa8582611de1565b115b15156108b757600080fd5b6108c088611e98565b8c600160a060020a03168a600160a060020a0316141580156108fc5750601054600160a060020a038b1660009081526012602052604090205410155b15610a0657600160a060020a038a166000908152601360205260409020546109249088611de1565b600160a060020a038b166000908152601360209081526040808320939093556016905220600301546109569088611de1565b600160a060020a03808c166000908152601660205260408082206003810194909455600990930180546001019055908f16815220600401546109989088611de1565b600160a060020a03808f166000818152601660209081526040918290206004810195909555600a9094018054600101905580518b81529051928e169391927f1f199f5326ae23f37e738f64ee17ce22576cfb9cd73fa7872b0797fd6a8fecc4929181900390910190a3610a21565b610a108688611de1565b955068010000000000000000860292505b60006018541115610a8557610a3860185485611de1565b6018819055680100000000000000008702811515610a5257fe5b60198054929091049091019055601854680100000000000000008702811515610a7757fe5b048402830383039250610a8b565b60188490555b600160a060020a038d16600090815260126020526040902054610aae9085611de1565b600160a060020a03808f16600090815260126020908152604080832094909455601954601490915283822080549189028890039182019055601a54600a5485517feeec0e2400000000000000000000000000000000000000000000000000000000815290851660048201526024810188905294519195509092169263eeec0e24926044808301939282900301818387803b158015610b4b57600080fd5b505af1158015610b5f573d6000803e3d6000fd5b50505050601a60009054906101000a9004600160a060020a0316600160a060020a031663eeec0e248e846040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050600060405180830381600087803b158015610bdb57600080fd5b505af1158015610bef573d6000803e3d6000fd5b5050505089600160a060020a03168d600160a060020a03167f8032875b28d82ddbd303a9e4e5529d047a14ecb6290f80012a81b7e6227ff1ab8e8742610c33611399565b604080519485526020850193909352838301919091526060830152519081900360800190a3600160a060020a038d16600090815260166020526040902054610c7b908d611de1565b600160a060020a038e16600090815260166020526040902090815560070180546001019055610ca98d611f07565b50919b9a5050505050505050505050565b600160a060020a038116600090815260146020908152604080832054601290925282205460195468010000000000000000929102030490505b919050565b600054600160a060020a03163314610d0f57600080fd5b601b805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b601b54600160a060020a031681565b600080600080610d6261082086600554611da3565b9250610d6e8584611dee565b9150610d7982611e00565b95945050505050565b600b5481565b610d906125f5565b610d98612615565b610da06125f5565b6016600085600160a060020a0316600160a060020a031681526020019081526020016000206101c0604051908101604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152505091506101c060405190810160405280836000015181526020018360400151815260200183606001518152602001836080015181526020018360a0015181526020018360c0015181526020018360e0015181526020018361012001518152602001836101400151815260200183610160015181526020018361018001518152602001836101a0015181526020018360200151815260200183610100015181525090508092505050919050565b6018545b90565b600054600160a060020a03163314610f2757600080fd5b600e805460ff19166001179055565b6000610f40612685565b610f48612685565b505060408051808201825233600081815260156020908152848220600201548452600c54818501528451808601865292825260118152939020548152615460928101929092524292509192565b6000806000806018548511151515610fac57600080fd5b610fb585611f80565b9250610fc661082084600754611da3565b9150610d798383611dee565b600080548190600160a060020a03163314610fec57600080fd5b5060005b825181101561102b57611019838281518110151561100a57fe5b90602001906020020151611077565b1561102357600191505b600101610ff0565b50919050565b600054600160a060020a0316331461104857600080fd5b600a805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008054600160a060020a0316331461108f57600080fd5b600160a060020a03821660009081526001602052604090205460ff1615610cf357600160a060020a038216600081815260016020908152604091829020805460ff19169055815192835290517ff1abf01a1043b7c244d128e8595cf0c1d10743b022b03a02dffd8ca3bf729f5a9281900390910190a1506001919050565b6000611119600161120a565b1161112357600080fd5b3360009081526016602052604081205411611188576040805160e560020a62461bcd02815260206004820181905260248201527f4d7573742062757920746f6b656e73206f6e636520746f207769746864726177604482015290519081900360640190fd5b61119133611fec565b565b600080600080601854600014156111b1576414f46b040093506111e2565b6111c2670de0b6b3a7640000611f80565b92506111d083600754611dcc565b91506111dc8383611dee565b90508093505b50505090565b600c543360009081526015602052604090206002015442031190565b60105481565b600061121633836120ef565b92915050565b303190565b3360009081526001602052604081205460ff16151561123f57600080fd5b61121682346107fd565b600160a060020a031660009081526012602052604090205490565b3360009081526015602052604090205460ff1690565b600054600160a060020a0316331461129157600080fd5b600e5460ff16156112ec576040805160e560020a62461bcd02815260206004820152601760248201527f436f6e747261637420616c7265616479206f70656e6564000000000000000000604482015290519081900360640190fd5b6112f58161212f565b50565b600d5481565b60008054600160a060020a0316331461131657600080fd5b600160a060020a03821660009081526001602052604090205460ff161515610cf357600160a060020a038216600081815260016020818152604092839020805460ff1916909217909155815192835290517fd1bba68c128cc3f427e5831b3c6f99f480b6efa6b9e80c757768f6124158cc3f9281900390910190a1506001919050565b600080600080601854600014156113b75764199c82cc0093506111e2565b6113c8670de0b6b3a7640000611f80565b92506113d683600554611dcc565b91506111dc8383611de1565b600054600160a060020a031633146113f957600080fd5b62093a80600f544203111515611459576040805160e560020a62461bcd02815260206004820152601c60248201527f52656170206e6f7420617661696c61626c652c20746f6f20736f6f6e00000000604482015290519081900360640190fd5b42600f5560005461148690600160a060020a03168261148161147a83611249565b600a611dcc565b612236565b5050565b600054600160a060020a031681565b6000336114a581611249565b91505090565b60016020526000908152604090205460ff1681565b601760205260009081526040902054600160a060020a031681565b600054600160a060020a031633146114f257600080fd5b600581101580156115045750600f8111155b151561157f576040805160e560020a62461bcd028152602060048201526024808201527f436170616369747920736574206f757473696465206f6620706f6c696379207260448201527f616e676500000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600b55565b600e5460009060ff16156115db57336000908152601660205260409020541580156115bc575033600090815260136020526040812054115b156115ca576115ca3361212f565b6115d433346107fd565b9050610f0d565b6115d4612413565b60008060006115f0611499565b116115fa57600080fd5b600054600160a060020a0316331480156116175750600e5460ff16155b806116375750600c54336000908152601560205260409020600201544203115b151561164257600080fd5b503361164f818585612236565b949350505050565b600c5481565b601a54600160a060020a031681565b600054600160a060020a0316331461168357600080fd5b61012c811015801561169857506203f4808111155b15156116a357600080fd5b600c55565b600080548190600160a060020a031633146116c257600080fd5b5060005b825181101561102b576116ef83828151811015156116e057fe5b906020019060200201516112fe565b156116f957600191505b6001016116c6565b6000806000806000806000806000611717611499565b1161172157600080fd5b600054600160a060020a03163314801561173e5750600e5460ff16155b8061175e5750600c54336000908152601560205260409020600201544203115b151561176957600080fd5b336000818152601560209081526040808320805460ff19169055601290915290205490985089111561179a57600080fd5b8896506117a687611f80565b95506117b761082087600754611da3565b94506117c861082086600954611da3565b93506117d48585611dee565b92506117e08686611dee565b91506117ee60185488611dee565b601855600160a060020a0388166000908152601260205260409020546118149088611dee565b600160a060020a0389166000908152601260209081526040808320939093556019546014909152919020805491890268010000000000000000850201918290039055905061186184611e98565b600060185411156118945761189060195460185468010000000000000000860281151561188a57fe5b04611de1565b6019555b87600160a060020a03167f8d3a0130073dbd54ab6ac632c05946df540553d3b514c9f8165b4ab7f2b1805e8884426118ca611399565b604080519485526020850193909352838301919091526060830152519081900360800190a26118f888611f07565b505050505050505050565b600f5481565b336000908152601560205260409020805460ff1916821515179081905560ff16156112f55733600090815260156020526040902054610100900460ff1615156112f557336000818152601560205260409020805461ff0019166101001790556112f5906124e2565b600e5460ff1681565b600054600160a060020a0316331461199157600080fd5b600160a060020a03811615156119a657600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600080548190600160a060020a0316331480611a3f5750336000908152601160205260409020546154604291909103115b1515611a95576040805160e560020a62461bcd02815260206004820152600b60248201527f4e6f207370616d6d696e67000000000000000000000000000000000000000000604482015290519081900360640190fd5b600e5460ff1680611ab05750600054600160a060020a031633145b1515611b06576040805160e560020a62461bcd02815260206004820152601460248201527f436f6e7472616374206e6f74206c617563686564000000000000000000000000604482015290519081900360640190fd5b601054336000908152601260205260409020541015611b6f576040805160e560020a62461bcd02815260206004820152601d60248201527f4d757374206d656574207374616b696e6720726571756972656d656e74000000604482015290519081900360640190fd5b600091505b611b7c612528565b8015611b895750600b5482105b15611cab57611b96612533565b600160a060020a038116600090815260156020526040902060010154909150431415611bc157611cab565b611bc9612567565b50600160a060020a0381166000908152601560205260409020436001820155805461ff0019811690915560ff1615611ca057662386f26fc10000611c0e8260016120ef565b1115611c7157601b805474ff000000000000000000000000000000000000000019169055611c3b8161212f565b601b805474ff00000000000000000000000000000000000000001916740100000000000000000000000000000000000000001790555b611c7a816124e2565b600160a060020a0381166000908152601560205260409020805461ff0019166101001790555b600190910190611b74565b3360008181526011602052604090204290556114869061212f565b6000611cd0612528565b8015611cf15750336000908152601160205260409020546154604291909103115b8015611d0e57506010543360009081526012602052604090205410155b905090565b6000611d1f600161120a565b11611d2957600080fd5b600e5460ff1680611d445750600054600160a060020a031633145b1515611d9a576040805160e560020a62461bcd02815260206004820152601460248201527f436f6e7472616374206e6f74206c617563686564000000000000000000000000604482015290519081900360640190fd5b6111913361212f565b6000821515611db457506000611216565b50818102818382811515611dc457fe5b041461121657fe5b60008183811515611dd957fe5b049392505050565b8181018281101561121657fe5b600082821115611dfa57fe5b50900390565b6018546000906c01431e0fae6d7217caa00000009082906402540be400611e85611e7f730380d4bd8a8678c1bb542c80deb4800000000000880268056bc75e2d631000006002860a02017005e0a1fd2712875988becaad0000000000850201780197d4df19d605767337e9f14d3eec8920e400000000000000016125c0565b85611dee565b811515611e8e57fe5b0403949350505050565b601b60009054906101000a9004600160a060020a0316600160a060020a031663d0e30db0826040518263ffffffff1660e060020a0281526004016000604051808303818588803b158015611eeb57600080fd5b505af1158015611eff573d6000803e3d6000fd5b505050505050565b600054600160a060020a03828116911614801590611f3f5750601b5474010000000000000000000000000000000000000000900460ff165b156112f5576000546706f05b59d3b2000090611f6590600160a060020a031660016120ef565b11156112f5576000546112f590600160a060020a031661212f565b601854600090670de0b6b3a7640000838101918101908390611fd96414f46b04008285046402540be40002018702600283670de0b6b3a763ffff1982890a8b900301046402540be40002811515611fd357fe5b04611dee565b811515611fe257fe5b0495945050505050565b6000611ff98260006120ef565b600160a060020a038316600081815260146020908152604080832080546801000000000000000087020190556013909152808220805490839055905193019350909183156108fc0291849190818181858888f19350505050158015612062573d6000803e3d6000fd5b50600160a060020a0382166000908152601660205260409020600201546120899082611de1565b600160a060020a0383166000818152601660209081526040918290206002810194909455600b909301805460010190558051848152905191927fccad973dcd043c7d680389db4378bd6b9775db7124092e9e0422c9e46d7985dc92918290030190a25050565b600081612104576120ff83610cba565b612128565b600160a060020a03831660009081526013602052604090205461212684610cba565b015b9392505050565b60008061213d8360006120ef565b600160a060020a0384166000908152601460209081526040808320805468010000000000000000860201905560139091528120805491905501915061218283836107fd565b905082600160a060020a03167fbe339fc14b041c2b0e0f3dd2cd325d0c3668b78378001e53160eab36153264588383604051808381526020018281526020019250505060405180910390a2600160a060020a0383166000908152601660205260409020600101546121f39083611de1565b600160a060020a03909316600090815260166020908152604080832060018082019790975560080180549096019095556015905292909220426002909101555050565b600160a060020a03831660009081526012602052604081205481908190819085111561226157600080fd5b600061226e8860016120ef565b111561227d5761227d87611fec565b61228c61082086600654611da3565b92506122988584611dee565b91506122a383611f80565b90506122b160185484611dee565b601855600160a060020a0387166000908152601260205260409020546122d79086611dee565b600160a060020a0380891660009081526012602052604080822093909355908816815220546123069083611de1565b600160a060020a0387811660008181526012602090815260408083209590955560198054948d16835260149091528482208054948b02909403909355825491815292909220805492850290920190915554601854612374919068010000000000000000840281151561188a57fe5b601955604080518381529051600160a060020a0380891692908a16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3600160a060020a03808816600090815260166020526040808220600c810180546001908101909155600590910180548a0190559289168252902060068101805485019055600d0180548201905593505050509392505050565b600034811061242157600080fd5b3360009081526013602052604090205461243b9034611de1565b336000908152601360205260409020819055600d5410156124a6576040805160e560020a62461bcd02815260206004820152601760248201527f457863656564656420696e766573746d656e7420636170000000000000000000604482015290519081900360640190fd5b60408051348152905133917f2bf9518c65eff7d1f3ee4106bf0dc41267ccde0924dbfa4ab476ed5c0f45da98919081900360200190a250600090565b60048054600101908190556000908152600260205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600354600454101590565b60006003546004541015151561254857600080fd5b50600354600090815260026020526040902054600160a060020a031690565b60006003546004541015151561257c57600080fd5b50600380546000908152600260205260409020805473ffffffffffffffffffffffffffffffffffffffff1981169091558154600101909155600160a060020a031690565b80600260018201045b8181101561102b5780915060028182858115156125e257fe5b04018115156125ed57fe5b0490506125c9565b6101c060405190810160405280600e906020820280388339509192915050565b6101c06040519081016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604080518082018252906002908290803883395091929150505600a165627a7a72305820a5dd5e0ff2e59e2a87b8e3cb8ed46e0b2331268c48a34d8e2292756b6c5f7dd800290000000000000000000000000a0a80cd0ff4f906ce7617a415787614a9651e1a
Deployed Bytecode
0x6080604052600436106102155763ffffffff60e060020a60003504166265318b81146102225780630bc0504e146102555780630c657eb01461027857806310d0ffdd146102a957806313f3c37b146102c157806315cfc405146102d657806318160ddd1461033057806319d45a08146103455780632150097f1461035a57806322609373146103dd57806324953eaa146103f5578063275893a91461045e578063286dd3f51461047f5780633ccfd60b146104a05780634b750334146104b55780634b877a93146104ca57806356d399e8146104df578063688abbf7146104f45780636b2f46321461050e5780636f0b51801461052357806370a082311461053757806374a57889146105585780637573475e1461056d578063797741261461058e5780637b9417c8146105a35780638620410b146105c45780638af9f493146105d95780638da5cb5b146105fa578063949e8acd1461060f5780639b19251a146106245780639ca423b314610645578063a1282c9b14610666578063a6f2ae3a1461067e578063a9059cbb14610686578063abb6154f146106aa578063b59589d1146106bf578063d980ddb9146106d4578063e2ec6ec3146106ec578063e4849b3214610741578063e4f8bfd114610759578063e815cc941461076e578063ed70000114610788578063f2fde38b1461079d578063f9fc0d07146107be578063fca3b304146107d3578063fdb5a03e146107e8575b61021f33346107fd565b50005b34801561022e57600080fd5b50610243600160a060020a0360043516610cba565b60408051918252519081900360200190f35b34801561026157600080fd5b50610276600160a060020a0360043516610cf8565b005b34801561028457600080fd5b5061028d610d3e565b60408051600160a060020a039092168252519081900360200190f35b3480156102b557600080fd5b50610243600435610d4d565b3480156102cd57600080fd5b50610243610d82565b3480156102e257600080fd5b506102f7600160a060020a0360043516610d88565b60405180826101c080838360005b8381101561031d578181015183820152602001610305565b5050505090500191505060405180910390f35b34801561033c57600080fd5b50610243610f09565b34801561035157600080fd5b50610276610f10565b34801561036657600080fd5b5061036f610f36565b6040518084815260200183600260200280838360005b8381101561039d578181015183820152602001610385565b5050505090500182600260200280838360005b838110156103c85781810151838201526020016103b0565b50505050905001935050505060405180910390f35b3480156103e957600080fd5b50610243600435610f95565b34801561040157600080fd5b506040805160206004803580820135838102808601850190965280855261044a95369593946024949385019291829185019084908082843750949750610fd29650505050505050565b604080519115158252519081900360200190f35b34801561046a57600080fd5b50610276600160a060020a0360043516611031565b34801561048b57600080fd5b5061044a600160a060020a0360043516611077565b3480156104ac57600080fd5b5061027661110d565b3480156104c157600080fd5b50610243611193565b3480156104d657600080fd5b5061044a6111e8565b3480156104eb57600080fd5b50610243611204565b34801561050057600080fd5b50610243600435151561120a565b34801561051a57600080fd5b5061024361121c565b610243600160a060020a0360043516611221565b34801561054357600080fd5b50610243600160a060020a0360043516611249565b34801561056457600080fd5b5061044a611264565b34801561057957600080fd5b50610276600160a060020a036004351661127a565b34801561059a57600080fd5b506102436112f8565b3480156105af57600080fd5b5061044a600160a060020a03600435166112fe565b3480156105d057600080fd5b50610243611399565b3480156105e557600080fd5b50610276600160a060020a03600435166113e2565b34801561060657600080fd5b5061028d61148a565b34801561061b57600080fd5b50610243611499565b34801561063057600080fd5b5061044a600160a060020a03600435166114ab565b34801561065157600080fd5b5061028d600160a060020a03600435166114c0565b34801561067257600080fd5b506102766004356114db565b610243611584565b34801561069257600080fd5b5061044a600160a060020a03600435166024356115e3565b3480156106b657600080fd5b50610243611657565b3480156106cb57600080fd5b5061028d61165d565b3480156106e057600080fd5b5061027660043561166c565b3480156106f857600080fd5b506040805160206004803580820135838102808601850190965280855261044a953695939460249493850192918291850190849080828437509497506116a89650505050505050565b34801561074d57600080fd5b50610276600435611701565b34801561076557600080fd5b50610243611903565b34801561077a57600080fd5b506102766004351515611909565b34801561079457600080fd5b5061044a611971565b3480156107a957600080fd5b50610276600160a060020a036004351661197a565b3480156107ca57600080fd5b50610276611a0e565b3480156107df57600080fd5b5061044a611cc6565b3480156107f457600080fd5b50610276611d13565b60008060008060008060008060008060003399506108276108208d600554611da3565b6064611dcc565b98506108386108208a600954611da3565b97506108496108208a600854611da3565b965061085e89610859898b611de1565b611dee565b955061086a8c8a611dee565b945061087585611e00565b935068010000000000000000860292506108908c6002611dcc565b91506000841180156108ac57506018546108aa8582611de1565b115b15156108b757600080fd5b6108c088611e98565b8c600160a060020a03168a600160a060020a0316141580156108fc5750601054600160a060020a038b1660009081526012602052604090205410155b15610a0657600160a060020a038a166000908152601360205260409020546109249088611de1565b600160a060020a038b166000908152601360209081526040808320939093556016905220600301546109569088611de1565b600160a060020a03808c166000908152601660205260408082206003810194909455600990930180546001019055908f16815220600401546109989088611de1565b600160a060020a03808f166000818152601660209081526040918290206004810195909555600a9094018054600101905580518b81529051928e169391927f1f199f5326ae23f37e738f64ee17ce22576cfb9cd73fa7872b0797fd6a8fecc4929181900390910190a3610a21565b610a108688611de1565b955068010000000000000000860292505b60006018541115610a8557610a3860185485611de1565b6018819055680100000000000000008702811515610a5257fe5b60198054929091049091019055601854680100000000000000008702811515610a7757fe5b048402830383039250610a8b565b60188490555b600160a060020a038d16600090815260126020526040902054610aae9085611de1565b600160a060020a03808f16600090815260126020908152604080832094909455601954601490915283822080549189028890039182019055601a54600a5485517feeec0e2400000000000000000000000000000000000000000000000000000000815290851660048201526024810188905294519195509092169263eeec0e24926044808301939282900301818387803b158015610b4b57600080fd5b505af1158015610b5f573d6000803e3d6000fd5b50505050601a60009054906101000a9004600160a060020a0316600160a060020a031663eeec0e248e846040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050600060405180830381600087803b158015610bdb57600080fd5b505af1158015610bef573d6000803e3d6000fd5b5050505089600160a060020a03168d600160a060020a03167f8032875b28d82ddbd303a9e4e5529d047a14ecb6290f80012a81b7e6227ff1ab8e8742610c33611399565b604080519485526020850193909352838301919091526060830152519081900360800190a3600160a060020a038d16600090815260166020526040902054610c7b908d611de1565b600160a060020a038e16600090815260166020526040902090815560070180546001019055610ca98d611f07565b50919b9a5050505050505050505050565b600160a060020a038116600090815260146020908152604080832054601290925282205460195468010000000000000000929102030490505b919050565b600054600160a060020a03163314610d0f57600080fd5b601b805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b601b54600160a060020a031681565b600080600080610d6261082086600554611da3565b9250610d6e8584611dee565b9150610d7982611e00565b95945050505050565b600b5481565b610d906125f5565b610d98612615565b610da06125f5565b6016600085600160a060020a0316600160a060020a031681526020019081526020016000206101c0604051908101604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152505091506101c060405190810160405280836000015181526020018360400151815260200183606001518152602001836080015181526020018360a0015181526020018360c0015181526020018360e0015181526020018361012001518152602001836101400151815260200183610160015181526020018361018001518152602001836101a0015181526020018360200151815260200183610100015181525090508092505050919050565b6018545b90565b600054600160a060020a03163314610f2757600080fd5b600e805460ff19166001179055565b6000610f40612685565b610f48612685565b505060408051808201825233600081815260156020908152848220600201548452600c54818501528451808601865292825260118152939020548152615460928101929092524292509192565b6000806000806018548511151515610fac57600080fd5b610fb585611f80565b9250610fc661082084600754611da3565b9150610d798383611dee565b600080548190600160a060020a03163314610fec57600080fd5b5060005b825181101561102b57611019838281518110151561100a57fe5b90602001906020020151611077565b1561102357600191505b600101610ff0565b50919050565b600054600160a060020a0316331461104857600080fd5b600a805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008054600160a060020a0316331461108f57600080fd5b600160a060020a03821660009081526001602052604090205460ff1615610cf357600160a060020a038216600081815260016020908152604091829020805460ff19169055815192835290517ff1abf01a1043b7c244d128e8595cf0c1d10743b022b03a02dffd8ca3bf729f5a9281900390910190a1506001919050565b6000611119600161120a565b1161112357600080fd5b3360009081526016602052604081205411611188576040805160e560020a62461bcd02815260206004820181905260248201527f4d7573742062757920746f6b656e73206f6e636520746f207769746864726177604482015290519081900360640190fd5b61119133611fec565b565b600080600080601854600014156111b1576414f46b040093506111e2565b6111c2670de0b6b3a7640000611f80565b92506111d083600754611dcc565b91506111dc8383611dee565b90508093505b50505090565b600c543360009081526015602052604090206002015442031190565b60105481565b600061121633836120ef565b92915050565b303190565b3360009081526001602052604081205460ff16151561123f57600080fd5b61121682346107fd565b600160a060020a031660009081526012602052604090205490565b3360009081526015602052604090205460ff1690565b600054600160a060020a0316331461129157600080fd5b600e5460ff16156112ec576040805160e560020a62461bcd02815260206004820152601760248201527f436f6e747261637420616c7265616479206f70656e6564000000000000000000604482015290519081900360640190fd5b6112f58161212f565b50565b600d5481565b60008054600160a060020a0316331461131657600080fd5b600160a060020a03821660009081526001602052604090205460ff161515610cf357600160a060020a038216600081815260016020818152604092839020805460ff1916909217909155815192835290517fd1bba68c128cc3f427e5831b3c6f99f480b6efa6b9e80c757768f6124158cc3f9281900390910190a1506001919050565b600080600080601854600014156113b75764199c82cc0093506111e2565b6113c8670de0b6b3a7640000611f80565b92506113d683600554611dcc565b91506111dc8383611de1565b600054600160a060020a031633146113f957600080fd5b62093a80600f544203111515611459576040805160e560020a62461bcd02815260206004820152601c60248201527f52656170206e6f7420617661696c61626c652c20746f6f20736f6f6e00000000604482015290519081900360640190fd5b42600f5560005461148690600160a060020a03168261148161147a83611249565b600a611dcc565b612236565b5050565b600054600160a060020a031681565b6000336114a581611249565b91505090565b60016020526000908152604090205460ff1681565b601760205260009081526040902054600160a060020a031681565b600054600160a060020a031633146114f257600080fd5b600581101580156115045750600f8111155b151561157f576040805160e560020a62461bcd028152602060048201526024808201527f436170616369747920736574206f757473696465206f6620706f6c696379207260448201527f616e676500000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600b55565b600e5460009060ff16156115db57336000908152601660205260409020541580156115bc575033600090815260136020526040812054115b156115ca576115ca3361212f565b6115d433346107fd565b9050610f0d565b6115d4612413565b60008060006115f0611499565b116115fa57600080fd5b600054600160a060020a0316331480156116175750600e5460ff16155b806116375750600c54336000908152601560205260409020600201544203115b151561164257600080fd5b503361164f818585612236565b949350505050565b600c5481565b601a54600160a060020a031681565b600054600160a060020a0316331461168357600080fd5b61012c811015801561169857506203f4808111155b15156116a357600080fd5b600c55565b600080548190600160a060020a031633146116c257600080fd5b5060005b825181101561102b576116ef83828151811015156116e057fe5b906020019060200201516112fe565b156116f957600191505b6001016116c6565b6000806000806000806000806000611717611499565b1161172157600080fd5b600054600160a060020a03163314801561173e5750600e5460ff16155b8061175e5750600c54336000908152601560205260409020600201544203115b151561176957600080fd5b336000818152601560209081526040808320805460ff19169055601290915290205490985089111561179a57600080fd5b8896506117a687611f80565b95506117b761082087600754611da3565b94506117c861082086600954611da3565b93506117d48585611dee565b92506117e08686611dee565b91506117ee60185488611dee565b601855600160a060020a0388166000908152601260205260409020546118149088611dee565b600160a060020a0389166000908152601260209081526040808320939093556019546014909152919020805491890268010000000000000000850201918290039055905061186184611e98565b600060185411156118945761189060195460185468010000000000000000860281151561188a57fe5b04611de1565b6019555b87600160a060020a03167f8d3a0130073dbd54ab6ac632c05946df540553d3b514c9f8165b4ab7f2b1805e8884426118ca611399565b604080519485526020850193909352838301919091526060830152519081900360800190a26118f888611f07565b505050505050505050565b600f5481565b336000908152601560205260409020805460ff1916821515179081905560ff16156112f55733600090815260156020526040902054610100900460ff1615156112f557336000818152601560205260409020805461ff0019166101001790556112f5906124e2565b600e5460ff1681565b600054600160a060020a0316331461199157600080fd5b600160a060020a03811615156119a657600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600080548190600160a060020a0316331480611a3f5750336000908152601160205260409020546154604291909103115b1515611a95576040805160e560020a62461bcd02815260206004820152600b60248201527f4e6f207370616d6d696e67000000000000000000000000000000000000000000604482015290519081900360640190fd5b600e5460ff1680611ab05750600054600160a060020a031633145b1515611b06576040805160e560020a62461bcd02815260206004820152601460248201527f436f6e7472616374206e6f74206c617563686564000000000000000000000000604482015290519081900360640190fd5b601054336000908152601260205260409020541015611b6f576040805160e560020a62461bcd02815260206004820152601d60248201527f4d757374206d656574207374616b696e6720726571756972656d656e74000000604482015290519081900360640190fd5b600091505b611b7c612528565b8015611b895750600b5482105b15611cab57611b96612533565b600160a060020a038116600090815260156020526040902060010154909150431415611bc157611cab565b611bc9612567565b50600160a060020a0381166000908152601560205260409020436001820155805461ff0019811690915560ff1615611ca057662386f26fc10000611c0e8260016120ef565b1115611c7157601b805474ff000000000000000000000000000000000000000019169055611c3b8161212f565b601b805474ff00000000000000000000000000000000000000001916740100000000000000000000000000000000000000001790555b611c7a816124e2565b600160a060020a0381166000908152601560205260409020805461ff0019166101001790555b600190910190611b74565b3360008181526011602052604090204290556114869061212f565b6000611cd0612528565b8015611cf15750336000908152601160205260409020546154604291909103115b8015611d0e57506010543360009081526012602052604090205410155b905090565b6000611d1f600161120a565b11611d2957600080fd5b600e5460ff1680611d445750600054600160a060020a031633145b1515611d9a576040805160e560020a62461bcd02815260206004820152601460248201527f436f6e7472616374206e6f74206c617563686564000000000000000000000000604482015290519081900360640190fd5b6111913361212f565b6000821515611db457506000611216565b50818102818382811515611dc457fe5b041461121657fe5b60008183811515611dd957fe5b049392505050565b8181018281101561121657fe5b600082821115611dfa57fe5b50900390565b6018546000906c01431e0fae6d7217caa00000009082906402540be400611e85611e7f730380d4bd8a8678c1bb542c80deb4800000000000880268056bc75e2d631000006002860a02017005e0a1fd2712875988becaad0000000000850201780197d4df19d605767337e9f14d3eec8920e400000000000000016125c0565b85611dee565b811515611e8e57fe5b0403949350505050565b601b60009054906101000a9004600160a060020a0316600160a060020a031663d0e30db0826040518263ffffffff1660e060020a0281526004016000604051808303818588803b158015611eeb57600080fd5b505af1158015611eff573d6000803e3d6000fd5b505050505050565b600054600160a060020a03828116911614801590611f3f5750601b5474010000000000000000000000000000000000000000900460ff165b156112f5576000546706f05b59d3b2000090611f6590600160a060020a031660016120ef565b11156112f5576000546112f590600160a060020a031661212f565b601854600090670de0b6b3a7640000838101918101908390611fd96414f46b04008285046402540be40002018702600283670de0b6b3a763ffff1982890a8b900301046402540be40002811515611fd357fe5b04611dee565b811515611fe257fe5b0495945050505050565b6000611ff98260006120ef565b600160a060020a038316600081815260146020908152604080832080546801000000000000000087020190556013909152808220805490839055905193019350909183156108fc0291849190818181858888f19350505050158015612062573d6000803e3d6000fd5b50600160a060020a0382166000908152601660205260409020600201546120899082611de1565b600160a060020a0383166000818152601660209081526040918290206002810194909455600b909301805460010190558051848152905191927fccad973dcd043c7d680389db4378bd6b9775db7124092e9e0422c9e46d7985dc92918290030190a25050565b600081612104576120ff83610cba565b612128565b600160a060020a03831660009081526013602052604090205461212684610cba565b015b9392505050565b60008061213d8360006120ef565b600160a060020a0384166000908152601460209081526040808320805468010000000000000000860201905560139091528120805491905501915061218283836107fd565b905082600160a060020a03167fbe339fc14b041c2b0e0f3dd2cd325d0c3668b78378001e53160eab36153264588383604051808381526020018281526020019250505060405180910390a2600160a060020a0383166000908152601660205260409020600101546121f39083611de1565b600160a060020a03909316600090815260166020908152604080832060018082019790975560080180549096019095556015905292909220426002909101555050565b600160a060020a03831660009081526012602052604081205481908190819085111561226157600080fd5b600061226e8860016120ef565b111561227d5761227d87611fec565b61228c61082086600654611da3565b92506122988584611dee565b91506122a383611f80565b90506122b160185484611dee565b601855600160a060020a0387166000908152601260205260409020546122d79086611dee565b600160a060020a0380891660009081526012602052604080822093909355908816815220546123069083611de1565b600160a060020a0387811660008181526012602090815260408083209590955560198054948d16835260149091528482208054948b02909403909355825491815292909220805492850290920190915554601854612374919068010000000000000000840281151561188a57fe5b601955604080518381529051600160a060020a0380891692908a16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3600160a060020a03808816600090815260166020526040808220600c810180546001908101909155600590910180548a0190559289168252902060068101805485019055600d0180548201905593505050509392505050565b600034811061242157600080fd5b3360009081526013602052604090205461243b9034611de1565b336000908152601360205260409020819055600d5410156124a6576040805160e560020a62461bcd02815260206004820152601760248201527f457863656564656420696e766573746d656e7420636170000000000000000000604482015290519081900360640190fd5b60408051348152905133917f2bf9518c65eff7d1f3ee4106bf0dc41267ccde0924dbfa4ab476ed5c0f45da98919081900360200190a250600090565b60048054600101908190556000908152600260205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600354600454101590565b60006003546004541015151561254857600080fd5b50600354600090815260026020526040902054600160a060020a031690565b60006003546004541015151561257c57600080fd5b50600380546000908152600260205260409020805473ffffffffffffffffffffffffffffffffffffffff1981169091558154600101909155600160a060020a031690565b80600260018201045b8181101561102b5780915060028182858115156125e257fe5b04018115156125ed57fe5b0490506125c9565b6101c060405190810160405280600e906020820280388339509192915050565b6101c06040519081016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604080518082018252906002908290803883395091929150505600a165627a7a72305820a5dd5e0ff2e59e2a87b8e3cb8ed46e0b2331268c48a34d8e2292756b6c5f7dd80029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000a0a80cd0ff4f906ce7617a415787614a9651e1a
-----Decoded View---------------
Arg [0] : relayAddress (address): 0x0A0a80cd0FF4F906CE7617A415787614a9651e1a
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000a0a80cd0ff4f906ce7617a415787614a9651e1a
Swarm Source
bzzr://a5dd5e0ff2e59e2a87b8e3cb8ed46e0b2331268c48a34d8e2292756b6c5f7dd8
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,197.07 | 0.2245 | $717.69 |
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.