MATIC Price: $1.03 (-1.95%)
Gas: 120 GWei
 

Overview

MATIC Balance

Polygon PoS Chain LogoPolygon PoS Chain LogoPolygon PoS Chain Logo0 MATIC

MATIC Value

$0.00

Sponsored

Transaction Hash
Method
Block
From
To
Value
0x60806040437827912023-06-11 8:47:43264 days 5 hrs ago1686473263IN
 Create: Staking
0 MATIC0.42066559161.53649863

Parent Txn Hash Block From To Value
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Staking

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at polygonscan.com on 2023-06-11
*/

pragma solidity >=0.7.0 <0.9.0;
// SPDX-License-Identifier: MIT

/**
 * Generated by : https://www.cues.sg
 * Cues.sg : We make technology accessible.
 * Contract Type : Staking
 * Referral Scheme : 0.0
*/

interface ERC20{
	function balanceOf(address account) external view returns (uint256);
	function transfer(address recipient, uint256 amount) external returns (bool);
	function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
}

contract Staking {

	address owner;
	uint256 public principalAmtInBank = uint256(0);
	struct record { uint256 stakeTime; uint256 stakeAmt; uint256 lastUpdateTime; uint256 accumulatedInterestToUpdateTime; uint256 amtWithdrawn; }
	mapping(address => record) public informationAboutStakeScheme;
	mapping(uint256 => address) public addressStore;
	uint256 public numberOfAddressesCurrentlyStaked = uint256(0);
	uint256 public dailyInterestRate = uint256(220);
	uint256 public totalWithdrawals = uint256(0);
	struct referralRecord { bool hasDeposited; address referringAddress; uint256 unclaimedRewards; uint256 referralsAmtAtLevel0; uint256 referralsCountAtLevel0; }
	mapping(address => referralRecord) public referralRecordMap;
	event ReferralAddressAdded (address indexed referredAddress);
	uint256 public totalUnclaimedRewards = uint256(0);
	uint256 public totalClaimedRewards = uint256(0);
	event Staked (address indexed account);
	event Unstaked (address indexed account);

	constructor() {
		owner = msg.sender;
	}

	//This function allows the owner to specify an address that will take over ownership rights instead. Please double check the address provided as once the function is executed, only the new owner will be able to change the address back.
	function changeOwner(address _newOwner) public onlyOwner {
		owner = _newOwner;
	}

	modifier onlyOwner() {
		require(msg.sender == owner);
		_;
	}

/**
 * Function addReferralAddress
 * The function takes in 1 variable, (an address) _referringAddress. It can only be called by functions outside of this contract. It does the following :
 * checks that referralRecordMap with element _referringAddress with element hasDeposited
 * checks that not _referringAddress is equals to (the address that called this function)
 * checks that (referralRecordMap with element the address that called this function with element referringAddress) is equals to Address 0
 * updates referralRecordMap (Element the address that called this function) (Entity referringAddress) as _referringAddress
 * emits event ReferralAddressAdded with inputs the address that called this function
*/
	function addReferralAddress(address _referringAddress) external {
		require(referralRecordMap[_referringAddress].hasDeposited, "Referring Address has not made a deposit");
		require(!((_referringAddress == msg.sender)), "Self-referrals are not allowed");
		require((referralRecordMap[msg.sender].referringAddress == address(0)), "User has previously indicated a referral address");
		referralRecordMap[msg.sender].referringAddress  = _referringAddress;
		emit ReferralAddressAdded(msg.sender);
	}

/**
 * Function withdrawReferral
 * The function takes in 1 variable, (zero or a positive integer) _amt. It can be called by functions both inside and outside of this contract. It does the following :
 * checks that (referralRecordMap with element the address that called this function with element unclaimedRewards) is greater than or equals to _amt
 * updates referralRecordMap (Element the address that called this function) (Entity unclaimedRewards) as (referralRecordMap with element the address that called this function with element unclaimedRewards) - (_amt)
 * updates totalUnclaimedRewards as (totalUnclaimedRewards) - (_amt)
 * updates totalClaimedRewards as (totalClaimedRewards) + (_amt)
 * checks that (ERC20(Address 0xD289c01528921B5f6D5B111a50a99456D495bF78)'s at balanceOf function  with variable recipient as (the address of this contract)) is greater than or equals to _amt
 * if _amt is strictly greater than 0 then (calls ERC20(Address 0xD289c01528921B5f6D5B111a50a99456D495bF78)'s at transfer function  with variable recipient as (the address that called this function), variable amount as _amt)
*/
	function withdrawReferral(uint256 _amt) public {
		require((referralRecordMap[msg.sender].unclaimedRewards >= _amt), "Insufficient referral rewards to withdraw");
		referralRecordMap[msg.sender].unclaimedRewards  = (referralRecordMap[msg.sender].unclaimedRewards - _amt);
		totalUnclaimedRewards  = (totalUnclaimedRewards - _amt);
		totalClaimedRewards  = (totalClaimedRewards + _amt);
		require((ERC20(address(0xD289c01528921B5f6D5B111a50a99456D495bF78)).balanceOf(address(this)) >= _amt), "Insufficient amount of the token in this contract to transfer out. Please contact the contract owner to top up the token.");
		if ((_amt > uint256(0))){
			ERC20(address(0xD289c01528921B5f6D5B111a50a99456D495bF78)).transfer(msg.sender, _amt);
		}
	}

/**
 * Function addReferral
 * The function takes in 1 variable, (zero or a positive integer) _amt. It can only be called by other functions in this contract. It does the following :
 * creates an internal variable referringAddress with initial value referralRecordMap with element the address that called this function with element referringAddress
 * creates an internal variable referralsAllocated with initial value 0
 * if not referralRecordMap with element the address that called this function with element hasDeposited then (updates referralRecordMap (Element the address that called this function) (Entity hasDeposited) as true)
 * if referringAddress is equals to Address 0 then (returns referralsAllocated as output)
 * updates referralRecordMap (Element referringAddress) (Entity referralsAmtAtLevel0) as (referralRecordMap with element referringAddress with element referralsAmtAtLevel0) + (_amt)
 * updates referralRecordMap (Element referringAddress) (Entity referralsCountAtLevel0) as (referralRecordMap with element referringAddress with element referralsCountAtLevel0) + (1)
 * updates referringAddress as referralRecordMap with element referringAddress with element referringAddress
 * returns referralsAllocated as output
*/
	function addReferral(uint256 _amt) internal returns (uint256) {
		address referringAddress = referralRecordMap[msg.sender].referringAddress;
		uint256 referralsAllocated = uint256(0);
		if (!(referralRecordMap[msg.sender].hasDeposited)){
			referralRecordMap[msg.sender].hasDeposited  = true;
		}
		if ((referringAddress == address(0))){
			return referralsAllocated;
		}
		referralRecordMap[referringAddress].referralsAmtAtLevel0  = (referralRecordMap[referringAddress].referralsAmtAtLevel0 + _amt);
		referralRecordMap[referringAddress].referralsCountAtLevel0  = (referralRecordMap[referringAddress].referralsCountAtLevel0 + uint256(1));
		referringAddress  = referralRecordMap[referringAddress].referringAddress;
		return referralsAllocated;
	}

/**
 * Function stake
 * Daily Interest Rate : Variable dailyInterestRate
 * Address Map : informationAboutStakeScheme
 * The function takes in 1 variable, (zero or a positive integer) _stakeAmt. It can be called by functions both inside and outside of this contract. It does the following :
 * checks that _stakeAmt is strictly greater than 0
 * creates an internal variable thisRecord with initial value informationAboutStakeScheme with element the address that called this function
 * if (thisRecord with element stakeAmt) is equals to 0 then (updates informationAboutStakeScheme (Element the address that called this function) as Struct comprising current time, (((_stakeAmt) * ((1000000) - (3000))) / (1000000)), current time, 0, 0; then updates addressStore (Element numberOfAddressesCurrentlyStaked) as the address that called this function; and then updates numberOfAddressesCurrentlyStaked as (numberOfAddressesCurrentlyStaked) + (1)) otherwise (updates informationAboutStakeScheme (Element the address that called this function) as Struct comprising current time, ((thisRecord with element stakeAmt) + (((_stakeAmt) * ((1000000) - (3000))) / (1000000))), current time, ((thisRecord with element accumulatedInterestToUpdateTime) + (((thisRecord with element stakeAmt) * ((current time) - (thisRecord with element lastUpdateTime)) * (dailyInterestRate)) / (86400000000))), (thisRecord with element amtWithdrawn))
 * calls ERC20(Address 0xD289c01528921B5f6D5B111a50a99456D495bF78)'s at transferFrom function  with variable sender as (the address that called this function), variable recipient as (the address of this contract), variable amount as _stakeAmt
 * calls addReferral with variable _amt as _stakeAmt
 * updates principalAmtInBank as (principalAmtInBank) + (((_stakeAmt) * (3000) * (100)) / (100000000))
 * emits event Staked with inputs the address that called this function
*/
	function stake(uint256 _stakeAmt) public {
		require((_stakeAmt > uint256(0)), "Staked amount needs to be greater than 0");
		record memory thisRecord = informationAboutStakeScheme[msg.sender];
		if ((thisRecord.stakeAmt == uint256(0))){
			informationAboutStakeScheme[msg.sender]  = record (block.timestamp, ((_stakeAmt * (uint256(1000000) - uint256(3000))) / uint256(1000000)), block.timestamp, uint256(0), uint256(0));
			addressStore[numberOfAddressesCurrentlyStaked]  = msg.sender;
			numberOfAddressesCurrentlyStaked  = (numberOfAddressesCurrentlyStaked + uint256(1));
		}else{
			informationAboutStakeScheme[msg.sender]  = record (block.timestamp, (thisRecord.stakeAmt + ((_stakeAmt * (uint256(1000000) - uint256(3000))) / uint256(1000000))), block.timestamp, (thisRecord.accumulatedInterestToUpdateTime + ((thisRecord.stakeAmt * (block.timestamp - thisRecord.lastUpdateTime) * dailyInterestRate) / uint256(86400000000))), thisRecord.amtWithdrawn);
		}
		ERC20(address(0xD289c01528921B5f6D5B111a50a99456D495bF78)).transferFrom(msg.sender, address(this), _stakeAmt);
		addReferral(_stakeAmt);
		principalAmtInBank  = (principalAmtInBank + ((_stakeAmt * uint256(3000) * uint256(100)) / uint256(100000000)));
		emit Staked(msg.sender);
	}

/**
 * Function unstake
 * The function takes in 1 variable, (zero or a positive integer) _unstakeAmt. It can be called by functions both inside and outside of this contract. It does the following :
 * creates an internal variable thisRecord with initial value informationAboutStakeScheme with element the address that called this function
 * checks that _unstakeAmt is less than or equals to (thisRecord with element stakeAmt)
 * creates an internal variable newAccum with initial value (thisRecord with element accumulatedInterestToUpdateTime) + (((thisRecord with element stakeAmt) * ((current time) - (thisRecord with element lastUpdateTime)) * (dailyInterestRate)) / (86400000000))
 * creates an internal variable interestToRemove with initial value ((newAccum) * (_unstakeAmt)) / (thisRecord with element stakeAmt)
 * updates principalAmtInBank as (principalAmtInBank) + (((_unstakeAmt) * (7000) * (100)) / (100000000))
 * if _unstakeAmt is equals to (thisRecord with element stakeAmt) then (repeat numberOfAddressesCurrentlyStaked times with loop variable i0 :  (if (addressStore with element Loop Variable i0) is equals to (the address that called this function) then (updates addressStore (Element Loop Variable i0) as addressStore with element (numberOfAddressesCurrentlyStaked) - (1); then updates numberOfAddressesCurrentlyStaked as (numberOfAddressesCurrentlyStaked) - (1); and then terminates the for-next loop)))
 * updates informationAboutStakeScheme (Element the address that called this function) as Struct comprising (thisRecord with element stakeTime), ((thisRecord with element stakeAmt) - (_unstakeAmt)), current time, ((newAccum) - (interestToRemove)), ((thisRecord with element amtWithdrawn) + (interestToRemove))
 * emits event Unstaked with inputs the address that called this function
 * checks that (ERC20(Address 0xD289c01528921B5f6D5B111a50a99456D495bF78)'s at balanceOf function  with variable recipient as (the address of this contract)) is greater than or equals to ((((_unstakeAmt) * ((1000000) - (7000))) / (1000000)) + (interestToRemove))
 * if ((((_unstakeAmt) * ((1000000) - (7000))) / (1000000)) + (interestToRemove)) is strictly greater than 0 then (calls ERC20(Address 0xD289c01528921B5f6D5B111a50a99456D495bF78)'s at transfer function  with variable recipient as (the address that called this function), variable amount as ((((_unstakeAmt) * ((1000000) - (7000))) / (1000000)) + (interestToRemove)))
 * updates totalWithdrawals as (totalWithdrawals) + (interestToRemove)
*/
	function unstake(uint256 _unstakeAmt) public {
		record memory thisRecord = informationAboutStakeScheme[msg.sender];
		require((_unstakeAmt <= thisRecord.stakeAmt), "Withdrawing more than staked amount");
		uint256 newAccum = (thisRecord.accumulatedInterestToUpdateTime + ((thisRecord.stakeAmt * (block.timestamp - thisRecord.lastUpdateTime) * dailyInterestRate) / uint256(86400000000)));
		uint256 interestToRemove = ((newAccum * _unstakeAmt) / thisRecord.stakeAmt);
		principalAmtInBank  = (principalAmtInBank + ((_unstakeAmt * uint256(7000) * uint256(100)) / uint256(100000000)));
		if ((_unstakeAmt == thisRecord.stakeAmt)){
			for (uint i0 = 0; i0 < numberOfAddressesCurrentlyStaked; i0++){
				if ((addressStore[i0] == msg.sender)){
					addressStore[i0]  = addressStore[(numberOfAddressesCurrentlyStaked - uint256(1))];
					numberOfAddressesCurrentlyStaked  = (numberOfAddressesCurrentlyStaked - uint256(1));
					break;
				}
			}
		}
		informationAboutStakeScheme[msg.sender]  = record (thisRecord.stakeTime, (thisRecord.stakeAmt - _unstakeAmt), block.timestamp, (newAccum - interestToRemove), (thisRecord.amtWithdrawn + interestToRemove));
		emit Unstaked(msg.sender);
		require((ERC20(address(0xD289c01528921B5f6D5B111a50a99456D495bF78)).balanceOf(address(this)) >= (((_unstakeAmt * (uint256(1000000) - uint256(7000))) / uint256(1000000)) + interestToRemove)), "Insufficient amount of the token in this contract to transfer out. Please contact the contract owner to top up the token.");
		if (((((_unstakeAmt * (uint256(1000000) - uint256(7000))) / uint256(1000000)) + interestToRemove) > uint256(0))){
			ERC20(address(0xD289c01528921B5f6D5B111a50a99456D495bF78)).transfer(msg.sender, (((_unstakeAmt * (uint256(1000000) - uint256(7000))) / uint256(1000000)) + interestToRemove));
		}
		totalWithdrawals  = (totalWithdrawals + interestToRemove);
	}

/**
 * Function updateRecordsWithLatestInterestRates
 * The function takes in 0 variables. It can only be called by other functions in this contract. It does the following :
 * repeat numberOfAddressesCurrentlyStaked times with loop variable i0 :  (creates an internal variable thisRecord with initial value informationAboutStakeScheme with element addressStore with element Loop Variable i0; and then updates informationAboutStakeScheme (Element addressStore with element Loop Variable i0) as Struct comprising (thisRecord with element stakeTime), (thisRecord with element stakeAmt), current time, ((thisRecord with element accumulatedInterestToUpdateTime) + (((thisRecord with element stakeAmt) * ((current time) - (thisRecord with element lastUpdateTime)) * (dailyInterestRate)) / (86400000000))), (thisRecord with element amtWithdrawn))
*/
	function updateRecordsWithLatestInterestRates() internal {
		for (uint i0 = 0; i0 < numberOfAddressesCurrentlyStaked; i0++){
			record memory thisRecord = informationAboutStakeScheme[addressStore[i0]];
			informationAboutStakeScheme[addressStore[i0]]  = record (thisRecord.stakeTime, thisRecord.stakeAmt, block.timestamp, (thisRecord.accumulatedInterestToUpdateTime + ((thisRecord.stakeAmt * (block.timestamp - thisRecord.lastUpdateTime) * dailyInterestRate) / uint256(86400000000))), thisRecord.amtWithdrawn);
		}
	}

/**
 * Function interestEarnedUpToNowBeforeTaxesAndNotYetWithdrawn
 * The function takes in 1 variable, (an address) _address. It can be called by functions both inside and outside of this contract. It does the following :
 * creates an internal variable thisRecord with initial value informationAboutStakeScheme with element _address
 * returns (thisRecord with element accumulatedInterestToUpdateTime) + (((thisRecord with element stakeAmt) * ((current time) - (thisRecord with element lastUpdateTime)) * (dailyInterestRate)) / (86400000000)) as output
*/
	function interestEarnedUpToNowBeforeTaxesAndNotYetWithdrawn(address _address) public view returns (uint256) {
		record memory thisRecord = informationAboutStakeScheme[_address];
		return (thisRecord.accumulatedInterestToUpdateTime + ((thisRecord.stakeAmt * (block.timestamp - thisRecord.lastUpdateTime) * dailyInterestRate) / uint256(86400000000)));
	}

/**
 * Function totalStakedAmount
 * The function takes in 0 variables. It can be called by functions both inside and outside of this contract. It does the following :
 * creates an internal variable total with initial value 0
 * repeat numberOfAddressesCurrentlyStaked times with loop variable i0 :  (creates an internal variable thisRecord with initial value informationAboutStakeScheme with element addressStore with element Loop Variable i0; and then updates total as (total) + (thisRecord with element stakeAmt))
 * returns total as output
*/
	function totalStakedAmount() public view returns (uint256) {
		uint256 total = uint256(0);
		for (uint i0 = 0; i0 < numberOfAddressesCurrentlyStaked; i0++){
			record memory thisRecord = informationAboutStakeScheme[addressStore[i0]];
			total  = (total + thisRecord.stakeAmt);
		}
		return total;
	}

/**
 * Function totalAccumulatedInterest
 * The function takes in 0 variables. It can be called by functions both inside and outside of this contract. It does the following :
 * creates an internal variable total with initial value 0
 * repeat numberOfAddressesCurrentlyStaked times with loop variable i0 :  (updates total as (total) + (interestEarnedUpToNowBeforeTaxesAndNotYetWithdrawn with variable _address as (addressStore with element Loop Variable i0)))
 * returns total as output
*/
	function totalAccumulatedInterest() public view returns (uint256) {
		uint256 total = uint256(0);
		for (uint i0 = 0; i0 < numberOfAddressesCurrentlyStaked; i0++){
			total  = (total + interestEarnedUpToNowBeforeTaxesAndNotYetWithdrawn(addressStore[i0]));
		}
		return total;
	}

/**
 * Function withdrawInterestWithoutUnstaking
 * The function takes in 1 variable, (zero or a positive integer) _withdrawalAmt. It can be called by functions both inside and outside of this contract. It does the following :
 * creates an internal variable totalInterestEarnedTillNow with initial value interestEarnedUpToNowBeforeTaxesAndNotYetWithdrawn with variable _address as (the address that called this function)
 * checks that _withdrawalAmt is less than or equals to totalInterestEarnedTillNow
 * creates an internal variable thisRecord with initial value informationAboutStakeScheme with element the address that called this function
 * updates informationAboutStakeScheme (Element the address that called this function) as Struct comprising (thisRecord with element stakeTime), (thisRecord with element stakeAmt), current time, ((totalInterestEarnedTillNow) - (_withdrawalAmt)), ((thisRecord with element amtWithdrawn) + (_withdrawalAmt))
 * checks that (ERC20(Address 0xD289c01528921B5f6D5B111a50a99456D495bF78)'s at balanceOf function  with variable recipient as (the address of this contract)) is greater than or equals to _withdrawalAmt
 * if _withdrawalAmt is strictly greater than 0 then (calls ERC20(Address 0xD289c01528921B5f6D5B111a50a99456D495bF78)'s at transfer function  with variable recipient as (the address that called this function), variable amount as _withdrawalAmt)
 * updates totalWithdrawals as (totalWithdrawals) + (_withdrawalAmt)
*/
	function withdrawInterestWithoutUnstaking(uint256 _withdrawalAmt) public {
		uint256 totalInterestEarnedTillNow = interestEarnedUpToNowBeforeTaxesAndNotYetWithdrawn(msg.sender);
		require((_withdrawalAmt <= totalInterestEarnedTillNow), "Withdrawn amount must be less than withdrawable amount");
		record memory thisRecord = informationAboutStakeScheme[msg.sender];
		informationAboutStakeScheme[msg.sender]  = record (thisRecord.stakeTime, thisRecord.stakeAmt, block.timestamp, (totalInterestEarnedTillNow - _withdrawalAmt), (thisRecord.amtWithdrawn + _withdrawalAmt));
		require((ERC20(address(0xD289c01528921B5f6D5B111a50a99456D495bF78)).balanceOf(address(this)) >= _withdrawalAmt), "Insufficient amount of the token in this contract to transfer out. Please contact the contract owner to top up the token.");
		if ((_withdrawalAmt > uint256(0))){
			ERC20(address(0xD289c01528921B5f6D5B111a50a99456D495bF78)).transfer(msg.sender, _withdrawalAmt);
		}
		totalWithdrawals  = (totalWithdrawals + _withdrawalAmt);
	}

/**
 * Function withdrawAllInterestWithoutUnstaking
 * The function takes in 0 variables. It can only be called by functions outside of this contract. It does the following :
 * calls withdrawInterestWithoutUnstaking with variable _withdrawalAmt as (interestEarnedUpToNowBeforeTaxesAndNotYetWithdrawn with variable _address as (the address that called this function))
*/
	function withdrawAllInterestWithoutUnstaking() external {
		withdrawInterestWithoutUnstaking(interestEarnedUpToNowBeforeTaxesAndNotYetWithdrawn(msg.sender));
	}

/**
 * Function modifyDailyInterestRate
 * Notes for _dailyInterestRate : 10000 is one percent
 * The function takes in 1 variable, (zero or a positive integer) _dailyInterestRate. It can be called by functions both inside and outside of this contract. It does the following :
 * checks that the function is called by the owner of the contract
 * calls updateRecordsWithLatestInterestRates
 * updates dailyInterestRate as _dailyInterestRate
*/
	function modifyDailyInterestRate(uint256 _dailyInterestRate) public onlyOwner {
		updateRecordsWithLatestInterestRates();
		dailyInterestRate  = _dailyInterestRate;
	}

/**
 * Function principalTaxWithdrawAmt
 * The function takes in 0 variables. It can be called by functions both inside and outside of this contract. It does the following :
 * checks that the function is called by the owner of the contract
 * checks that (ERC20(Address 0xD289c01528921B5f6D5B111a50a99456D495bF78)'s at balanceOf function  with variable recipient as (the address of this contract)) is greater than or equals to principalAmtInBank
 * if principalAmtInBank is strictly greater than 0 then (calls ERC20(Address 0xD289c01528921B5f6D5B111a50a99456D495bF78)'s at transfer function  with variable recipient as (the address that called this function), variable amount as principalAmtInBank)
 * updates principalAmtInBank as 0
*/
	function principalTaxWithdrawAmt() public onlyOwner {
		require((ERC20(address(0xD289c01528921B5f6D5B111a50a99456D495bF78)).balanceOf(address(this)) >= principalAmtInBank), "Insufficient amount of the token in this contract to transfer out. Please contact the contract owner to top up the token.");
		if ((principalAmtInBank > uint256(0))){
			ERC20(address(0xD289c01528921B5f6D5B111a50a99456D495bF78)).transfer(msg.sender, principalAmtInBank);
		}
		principalAmtInBank  = uint256(0);
	}

/**
 * Function withdrawToken
 * The function takes in 1 variable, (zero or a positive integer) _amt. It can be called by functions both inside and outside of this contract. It does the following :
 * checks that the function is called by the owner of the contract
 * checks that (ERC20(Address 0xD289c01528921B5f6D5B111a50a99456D495bF78)'s at balanceOf function  with variable recipient as (the address of this contract)) is greater than or equals to ((_amt) + (totalUnclaimedRewards) + (totalAccumulatedInterest) + (principalAmtInBank) + (totalStakedAmount))
 * if _amt is strictly greater than 0 then (calls ERC20(Address 0xD289c01528921B5f6D5B111a50a99456D495bF78)'s at transfer function  with variable recipient as (the address that called this function), variable amount as _amt)
*/
	function withdrawToken(uint256 _amt) public onlyOwner {
		require((ERC20(address(0xD289c01528921B5f6D5B111a50a99456D495bF78)).balanceOf(address(this)) >= (_amt + totalUnclaimedRewards + totalAccumulatedInterest() + principalAmtInBank + totalStakedAmount())), "Insufficient amount of the token in this contract to transfer out. Please contact the contract owner to top up the token.");
		if ((_amt > uint256(0))){
			ERC20(address(0xD289c01528921B5f6D5B111a50a99456D495bF78)).transfer(msg.sender, _amt);
		}
	}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"referredAddress","type":"address"}],"name":"ReferralAddressAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"Unstaked","type":"event"},{"inputs":[{"internalType":"address","name":"_referringAddress","type":"address"}],"name":"addReferralAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"addressStore","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dailyInterestRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"informationAboutStakeScheme","outputs":[{"internalType":"uint256","name":"stakeTime","type":"uint256"},{"internalType":"uint256","name":"stakeAmt","type":"uint256"},{"internalType":"uint256","name":"lastUpdateTime","type":"uint256"},{"internalType":"uint256","name":"accumulatedInterestToUpdateTime","type":"uint256"},{"internalType":"uint256","name":"amtWithdrawn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"interestEarnedUpToNowBeforeTaxesAndNotYetWithdrawn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_dailyInterestRate","type":"uint256"}],"name":"modifyDailyInterestRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"numberOfAddressesCurrentlyStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"principalAmtInBank","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"principalTaxWithdrawAmt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referralRecordMap","outputs":[{"internalType":"bool","name":"hasDeposited","type":"bool"},{"internalType":"address","name":"referringAddress","type":"address"},{"internalType":"uint256","name":"unclaimedRewards","type":"uint256"},{"internalType":"uint256","name":"referralsAmtAtLevel0","type":"uint256"},{"internalType":"uint256","name":"referralsCountAtLevel0","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakeAmt","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalAccumulatedInterest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalClaimedRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStakedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalUnclaimedRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalWithdrawals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_unstakeAmt","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAllInterestWithoutUnstaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_withdrawalAmt","type":"uint256"}],"name":"withdrawInterestWithoutUnstaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"withdrawReferral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600155600060045560dc60055560006006556000600855600060095534801561002e57600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612d3d8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c806360464627116100b8578063a694fc3a1161007c578063a694fc3a1461035b578063a6f9dae114610377578063d26639e814610393578063d578ceab1461039d578063f025ed0c146103bb578063fe156a5d146103d757610142565b806360464627146102b357806369f066a3146102d15780637f8c839f146102ef5780637fca631f1461031f57806385aaf8b31461033d57610142565b8063442541b31161010a578063442541b3146101db57806346de412a146101f95780634cb2156a146102155780634f0fd4ca1461024957806350baa62214610279578063567e98f91461029557610142565b80631b4e2ddd1461014757806320e831121461017b5780632e17de78146101855780632e82c983146101a1578063419ea841146101bf575b600080fd5b610161600480360381019061015c91906123e5565b6103f3565b60405161017295949392919061242b565b60405180910390f35b610183610429565b005b61019f600480360381019061019a91906124aa565b61043c565b005b6101a9610a1b565b6040516101b691906124d7565b60405180910390f35b6101d960048036038101906101d491906124aa565b610a93565b005b6101e3610d44565b6040516101f091906124d7565b60405180910390f35b610213600480360381019061020e91906124aa565b610d4a565b005b61022f600480360381019061022a91906123e5565b610db4565b60405161024095949392919061251c565b60405180910390f35b610263600480360381019061025e91906124aa565b610e17565b604051610270919061256f565b60405180910390f35b610293600480360381019061028e91906124aa565b610e4a565b005b61029d611050565b6040516102aa91906124d7565b60405180910390f35b6102bb611145565b6040516102c891906124d7565b60405180910390f35b6102d961114b565b6040516102e691906124d7565b60405180910390f35b610309600480360381019061030491906123e5565b611151565b60405161031691906124d7565b60405180910390f35b610327611225565b60405161033491906124d7565b60405180910390f35b61034561122b565b60405161035291906124d7565b60405180910390f35b610375600480360381019061037091906124aa565b611231565b005b610391600480360381019061038c91906123e5565b611678565b005b61039b611713565b005b6103a56118e8565b6040516103b291906124d7565b60405180910390f35b6103d560048036038101906103d091906123e5565b6118ee565b005b6103f160048036038101906103ec91906124aa565b611b83565b005b60026020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154905085565b61043a61043533611151565b611b83565b565b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152505090508060200151821115610503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104fa9061260d565b60405180910390fd5b600064141dd7600060055483604001514261051e919061265c565b846020015161052d9190612690565b6105379190612690565b6105419190612719565b8260600151610550919061274a565b90506000826020015184836105659190612690565b61056f9190612719565b90506305f5e1006064611b58866105869190612690565b6105909190612690565b61059a9190612719565b6001546105a7919061274a565b600181905550826020015184036106ed5760005b6004548110156106eb573373ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036106d85760036000600160045461063e919061265c565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016004546106cd919061265c565b6004819055506106eb565b80806106e3906127a0565b9150506105bb565b505b6040518060a0016040528084600001518152602001858560200151610712919061265c565b81526020014281526020018284610729919061265c565b815260200182856080015161073e919061274a565b815250600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050503373ffffffffffffffffffffffffffffffffffffffff167f908e667f6c2b13b8062954eb100253ea804c21222b190449e40d967a3ac0ff1360405160405180910390a280620f4240611b58620f424061080e919061265c565b866108199190612690565b6108239190612719565b61082d919061274a565b73d289c01528921b5f6d5b111a50a99456d495bf7873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161087a919061256f565b602060405180830381865afa158015610897573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108bb91906127fd565b10156108fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f3906128e8565b60405180910390fd5b600081620f4240611b58620f4240610914919061265c565b8761091f9190612690565b6109299190612719565b610933919061274a565b1115610a015773d289c01528921b5f6d5b111a50a99456d495bf7873ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383620f4240611b58620f4240610980919061265c565b8961098b9190612690565b6109959190612719565b61099f919061274a565b6040518363ffffffff1660e01b81526004016109bc929190612908565b6020604051808303816000875af11580156109db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ff919061295d565b505b80600654610a0f919061274a565b60068190555050505050565b6000806000905060005b600454811015610a8b57610a6b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611151565b82610a76919061274a565b91508080610a83906127a0565b915050610a25565b508091505090565b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101541015610b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0f906129fc565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154610b66919061265c565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555080600854610bba919061265c565b60088190555080600954610bce919061274a565b6009819055508073d289c01528921b5f6d5b111a50a99456d495bf7873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c22919061256f565b602060405180830381865afa158015610c3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6391906127fd565b1015610ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9b906128e8565b60405180910390fd5b6000811115610d415773d289c01528921b5f6d5b111a50a99456d495bf7873ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610cfc929190612908565b6020604051808303816000875af1158015610d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3f919061295d565b505b50565b60015481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610da257600080fd5b610daa611e96565b8060058190555050565b60076020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154905085565b60036020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ea257600080fd5b610eaa611050565b600154610eb5610a1b565b60085484610ec3919061274a565b610ecd919061274a565b610ed7919061274a565b610ee1919061274a565b73d289c01528921b5f6d5b111a50a99456d495bf7873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f2e919061256f565b602060405180830381865afa158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6f91906127fd565b1015610fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa7906128e8565b60405180910390fd5b600081111561104d5773d289c01528921b5f6d5b111a50a99456d495bf7873ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611008929190612908565b6020604051808303816000875af1158015611027573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104b919061295d565b505b50565b6000806000905060005b60045481101561113d576000600260006003600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a0016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815250509050806020015183611127919061274a565b9250508080611135906127a0565b91505061105a565b508091505090565b60065481565b60085481565b600080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050905064141dd760006005548260400151426111eb919061265c565b83602001516111fa9190612690565b6112049190612690565b61120e9190612719565b816060015161121d919061274a565b915050919050565b60055481565b60045481565b60008111611274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126b90612a8e565b60405180910390fd5b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152505090506000816020015103611434576040518060a00160405280428152602001620f4240610bb8620f4240611326919061265c565b856113319190612690565b61133b9190612719565b8152602001428152602001600081526020016000815250600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050503360036000600454815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600454611429919061274a565b600481905550611556565b6040518060a00160405280428152602001620f4240610bb8620f424061145a919061265c565b856114659190612690565b61146f9190612719565b836020015161147e919061274a565b815260200142815260200164141dd760006005548460400151426114a2919061265c565b85602001516114b19190612690565b6114bb9190612690565b6114c59190612719565b83606001516114d4919061274a565b81526020018260800151815250600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050505b73d289c01528921b5f6d5b111a50a99456d495bf7873ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b81526004016115a793929190612aae565b6020604051808303816000875af11580156115c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ea919061295d565b506115f482612091565b506305f5e1006064610bb88461160a9190612690565b6116149190612690565b61161e9190612719565b60015461162b919061274a565b6001819055503373ffffffffffffffffffffffffffffffffffffffff167f77338642d9284a44296d29a273e04b8ab6b15c7d2439094cd460b7e4f0b3307460405160405180910390a25050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116d057600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461176b57600080fd5b60015473d289c01528921b5f6d5b111a50a99456d495bf7873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117bb919061256f565b602060405180830381865afa1580156117d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fc91906127fd565b101561183d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611834906128e8565b60405180910390fd5b600060015411156118de5773d289c01528921b5f6d5b111a50a99456d495bf7873ffffffffffffffffffffffffffffffffffffffff1663a9059cbb336001546040518363ffffffff1660e01b8152600401611899929190612908565b6020604051808303816000875af11580156118b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118dc919061295d565b505b6000600181905550565b60095481565b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff1661197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197490612b57565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e290612bc3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab390612c55565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167f01fb0580b1e893b502c34ea94e6619d05d2b08d767ae18509303580bd96fccac60405160405180910390a250565b6000611b8e33611151565b905080821115611bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bca90612ce7565b60405180910390fd5b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152505090506040518060a0016040528082600001518152602001826020015181526020014281526020018484611c84919061265c565b8152602001848360800151611c99919061274a565b815250600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050508273d289c01528921b5f6d5b111a50a99456d495bf7873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d5e919061256f565b602060405180830381865afa158015611d7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9f91906127fd565b1015611de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd7906128e8565b60405180910390fd5b6000831115611e7d5773d289c01528921b5f6d5b111a50a99456d495bf7873ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff1660e01b8152600401611e38929190612908565b6020604051808303816000875af1158015611e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7b919061295d565b505b82600654611e8b919061274a565b600681905550505050565b60005b60045481101561208e576000600260006003600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152505090506040518060a00160405280826000015181526020018260200151815260200142815260200164141dd76000600554846040015142611f94919061265c565b8560200151611fa39190612690565b611fad9190612690565b611fb79190612719565b8360600151611fc6919061274a565b81526020018260800151815250600260006003600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040155905050508080612086906127a0565b915050611e99565b50565b600080600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff166121ab576001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121e957809250505061237d565b83600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154612237919061274a565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301546122cc919061274a565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030181905550600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915080925050505b919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006123b282612387565b9050919050565b6123c2816123a7565b81146123cd57600080fd5b50565b6000813590506123df816123b9565b92915050565b6000602082840312156123fb576123fa612382565b5b6000612409848285016123d0565b91505092915050565b6000819050919050565b61242581612412565b82525050565b600060a082019050612440600083018861241c565b61244d602083018761241c565b61245a604083018661241c565b612467606083018561241c565b612474608083018461241c565b9695505050505050565b61248781612412565b811461249257600080fd5b50565b6000813590506124a48161247e565b92915050565b6000602082840312156124c0576124bf612382565b5b60006124ce84828501612495565b91505092915050565b60006020820190506124ec600083018461241c565b92915050565b60008115159050919050565b612507816124f2565b82525050565b612516816123a7565b82525050565b600060a08201905061253160008301886124fe565b61253e602083018761250d565b61254b604083018661241c565b612558606083018561241c565b612565608083018461241c565b9695505050505050565b6000602082019050612584600083018461250d565b92915050565b600082825260208201905092915050565b7f5769746864726177696e67206d6f7265207468616e207374616b656420616d6f60008201527f756e740000000000000000000000000000000000000000000000000000000000602082015250565b60006125f760238361258a565b91506126028261259b565b604082019050919050565b60006020820190508181036000830152612626816125ea565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061266782612412565b915061267283612412565b9250828210156126855761268461262d565b5b828203905092915050565b600061269b82612412565b91506126a683612412565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156126df576126de61262d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061272482612412565b915061272f83612412565b92508261273f5761273e6126ea565b5b828204905092915050565b600061275582612412565b915061276083612412565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156127955761279461262d565b5b828201905092915050565b60006127ab82612412565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036127dd576127dc61262d565b5b600182019050919050565b6000815190506127f78161247e565b92915050565b60006020828403121561281357612812612382565b5b6000612821848285016127e8565b91505092915050565b7f496e73756666696369656e7420616d6f756e74206f662074686520746f6b656e60008201527f20696e207468697320636f6e747261637420746f207472616e73666572206f7560208201527f742e20506c6561736520636f6e746163742074686520636f6e7472616374206f60408201527f776e657220746f20746f702075702074686520746f6b656e2e00000000000000606082015250565b60006128d260798361258a565b91506128dd8261282a565b608082019050919050565b60006020820190508181036000830152612901816128c5565b9050919050565b600060408201905061291d600083018561250d565b61292a602083018461241c565b9392505050565b61293a816124f2565b811461294557600080fd5b50565b60008151905061295781612931565b92915050565b60006020828403121561297357612972612382565b5b600061298184828501612948565b91505092915050565b7f496e73756666696369656e7420726566657272616c207265776172647320746f60008201527f2077697468647261770000000000000000000000000000000000000000000000602082015250565b60006129e660298361258a565b91506129f18261298a565b604082019050919050565b60006020820190508181036000830152612a15816129d9565b9050919050565b7f5374616b656420616d6f756e74206e6565647320746f2062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b6000612a7860288361258a565b9150612a8382612a1c565b604082019050919050565b60006020820190508181036000830152612aa781612a6b565b9050919050565b6000606082019050612ac3600083018661250d565b612ad0602083018561250d565b612add604083018461241c565b949350505050565b7f526566657272696e67204164647265737320686173206e6f74206d616465206160008201527f206465706f736974000000000000000000000000000000000000000000000000602082015250565b6000612b4160288361258a565b9150612b4c82612ae5565b604082019050919050565b60006020820190508181036000830152612b7081612b34565b9050919050565b7f53656c662d726566657272616c7320617265206e6f7420616c6c6f7765640000600082015250565b6000612bad601e8361258a565b9150612bb882612b77565b602082019050919050565b60006020820190508181036000830152612bdc81612ba0565b9050919050565b7f55736572206861732070726576696f75736c7920696e6469636174656420612060008201527f726566657272616c206164647265737300000000000000000000000000000000602082015250565b6000612c3f60308361258a565b9150612c4a82612be3565b604082019050919050565b60006020820190508181036000830152612c6e81612c32565b9050919050565b7f57697468647261776e20616d6f756e74206d757374206265206c65737320746860008201527f616e20776974686472617761626c6520616d6f756e7400000000000000000000602082015250565b6000612cd160368361258a565b9150612cdc82612c75565b604082019050919050565b60006020820190508181036000830152612d0081612cc4565b905091905056fea2646970667358221220b1b62c42156b96c0869edbfc70fa8bf16cb90c1199a31b13f3f82d0384deb09f64736f6c634300080d0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101425760003560e01c806360464627116100b8578063a694fc3a1161007c578063a694fc3a1461035b578063a6f9dae114610377578063d26639e814610393578063d578ceab1461039d578063f025ed0c146103bb578063fe156a5d146103d757610142565b806360464627146102b357806369f066a3146102d15780637f8c839f146102ef5780637fca631f1461031f57806385aaf8b31461033d57610142565b8063442541b31161010a578063442541b3146101db57806346de412a146101f95780634cb2156a146102155780634f0fd4ca1461024957806350baa62214610279578063567e98f91461029557610142565b80631b4e2ddd1461014757806320e831121461017b5780632e17de78146101855780632e82c983146101a1578063419ea841146101bf575b600080fd5b610161600480360381019061015c91906123e5565b6103f3565b60405161017295949392919061242b565b60405180910390f35b610183610429565b005b61019f600480360381019061019a91906124aa565b61043c565b005b6101a9610a1b565b6040516101b691906124d7565b60405180910390f35b6101d960048036038101906101d491906124aa565b610a93565b005b6101e3610d44565b6040516101f091906124d7565b60405180910390f35b610213600480360381019061020e91906124aa565b610d4a565b005b61022f600480360381019061022a91906123e5565b610db4565b60405161024095949392919061251c565b60405180910390f35b610263600480360381019061025e91906124aa565b610e17565b604051610270919061256f565b60405180910390f35b610293600480360381019061028e91906124aa565b610e4a565b005b61029d611050565b6040516102aa91906124d7565b60405180910390f35b6102bb611145565b6040516102c891906124d7565b60405180910390f35b6102d961114b565b6040516102e691906124d7565b60405180910390f35b610309600480360381019061030491906123e5565b611151565b60405161031691906124d7565b60405180910390f35b610327611225565b60405161033491906124d7565b60405180910390f35b61034561122b565b60405161035291906124d7565b60405180910390f35b610375600480360381019061037091906124aa565b611231565b005b610391600480360381019061038c91906123e5565b611678565b005b61039b611713565b005b6103a56118e8565b6040516103b291906124d7565b60405180910390f35b6103d560048036038101906103d091906123e5565b6118ee565b005b6103f160048036038101906103ec91906124aa565b611b83565b005b60026020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154905085565b61043a61043533611151565b611b83565b565b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152505090508060200151821115610503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104fa9061260d565b60405180910390fd5b600064141dd7600060055483604001514261051e919061265c565b846020015161052d9190612690565b6105379190612690565b6105419190612719565b8260600151610550919061274a565b90506000826020015184836105659190612690565b61056f9190612719565b90506305f5e1006064611b58866105869190612690565b6105909190612690565b61059a9190612719565b6001546105a7919061274a565b600181905550826020015184036106ed5760005b6004548110156106eb573373ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036106d85760036000600160045461063e919061265c565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016004546106cd919061265c565b6004819055506106eb565b80806106e3906127a0565b9150506105bb565b505b6040518060a0016040528084600001518152602001858560200151610712919061265c565b81526020014281526020018284610729919061265c565b815260200182856080015161073e919061274a565b815250600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050503373ffffffffffffffffffffffffffffffffffffffff167f908e667f6c2b13b8062954eb100253ea804c21222b190449e40d967a3ac0ff1360405160405180910390a280620f4240611b58620f424061080e919061265c565b866108199190612690565b6108239190612719565b61082d919061274a565b73d289c01528921b5f6d5b111a50a99456d495bf7873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161087a919061256f565b602060405180830381865afa158015610897573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108bb91906127fd565b10156108fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f3906128e8565b60405180910390fd5b600081620f4240611b58620f4240610914919061265c565b8761091f9190612690565b6109299190612719565b610933919061274a565b1115610a015773d289c01528921b5f6d5b111a50a99456d495bf7873ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383620f4240611b58620f4240610980919061265c565b8961098b9190612690565b6109959190612719565b61099f919061274a565b6040518363ffffffff1660e01b81526004016109bc929190612908565b6020604051808303816000875af11580156109db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ff919061295d565b505b80600654610a0f919061274a565b60068190555050505050565b6000806000905060005b600454811015610a8b57610a6b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611151565b82610a76919061274a565b91508080610a83906127a0565b915050610a25565b508091505090565b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101541015610b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0f906129fc565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154610b66919061265c565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555080600854610bba919061265c565b60088190555080600954610bce919061274a565b6009819055508073d289c01528921b5f6d5b111a50a99456d495bf7873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c22919061256f565b602060405180830381865afa158015610c3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6391906127fd565b1015610ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9b906128e8565b60405180910390fd5b6000811115610d415773d289c01528921b5f6d5b111a50a99456d495bf7873ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610cfc929190612908565b6020604051808303816000875af1158015610d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3f919061295d565b505b50565b60015481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610da257600080fd5b610daa611e96565b8060058190555050565b60076020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154905085565b60036020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ea257600080fd5b610eaa611050565b600154610eb5610a1b565b60085484610ec3919061274a565b610ecd919061274a565b610ed7919061274a565b610ee1919061274a565b73d289c01528921b5f6d5b111a50a99456d495bf7873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f2e919061256f565b602060405180830381865afa158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6f91906127fd565b1015610fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa7906128e8565b60405180910390fd5b600081111561104d5773d289c01528921b5f6d5b111a50a99456d495bf7873ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611008929190612908565b6020604051808303816000875af1158015611027573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104b919061295d565b505b50565b6000806000905060005b60045481101561113d576000600260006003600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a0016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815250509050806020015183611127919061274a565b9250508080611135906127a0565b91505061105a565b508091505090565b60065481565b60085481565b600080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050905064141dd760006005548260400151426111eb919061265c565b83602001516111fa9190612690565b6112049190612690565b61120e9190612719565b816060015161121d919061274a565b915050919050565b60055481565b60045481565b60008111611274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126b90612a8e565b60405180910390fd5b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152505090506000816020015103611434576040518060a00160405280428152602001620f4240610bb8620f4240611326919061265c565b856113319190612690565b61133b9190612719565b8152602001428152602001600081526020016000815250600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050503360036000600454815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600454611429919061274a565b600481905550611556565b6040518060a00160405280428152602001620f4240610bb8620f424061145a919061265c565b856114659190612690565b61146f9190612719565b836020015161147e919061274a565b815260200142815260200164141dd760006005548460400151426114a2919061265c565b85602001516114b19190612690565b6114bb9190612690565b6114c59190612719565b83606001516114d4919061274a565b81526020018260800151815250600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050505b73d289c01528921b5f6d5b111a50a99456d495bf7873ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b81526004016115a793929190612aae565b6020604051808303816000875af11580156115c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ea919061295d565b506115f482612091565b506305f5e1006064610bb88461160a9190612690565b6116149190612690565b61161e9190612719565b60015461162b919061274a565b6001819055503373ffffffffffffffffffffffffffffffffffffffff167f77338642d9284a44296d29a273e04b8ab6b15c7d2439094cd460b7e4f0b3307460405160405180910390a25050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116d057600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461176b57600080fd5b60015473d289c01528921b5f6d5b111a50a99456d495bf7873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117bb919061256f565b602060405180830381865afa1580156117d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fc91906127fd565b101561183d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611834906128e8565b60405180910390fd5b600060015411156118de5773d289c01528921b5f6d5b111a50a99456d495bf7873ffffffffffffffffffffffffffffffffffffffff1663a9059cbb336001546040518363ffffffff1660e01b8152600401611899929190612908565b6020604051808303816000875af11580156118b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118dc919061295d565b505b6000600181905550565b60095481565b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff1661197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197490612b57565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e290612bc3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab390612c55565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167f01fb0580b1e893b502c34ea94e6619d05d2b08d767ae18509303580bd96fccac60405160405180910390a250565b6000611b8e33611151565b905080821115611bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bca90612ce7565b60405180910390fd5b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152505090506040518060a0016040528082600001518152602001826020015181526020014281526020018484611c84919061265c565b8152602001848360800151611c99919061274a565b815250600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050508273d289c01528921b5f6d5b111a50a99456d495bf7873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d5e919061256f565b602060405180830381865afa158015611d7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9f91906127fd565b1015611de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd7906128e8565b60405180910390fd5b6000831115611e7d5773d289c01528921b5f6d5b111a50a99456d495bf7873ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff1660e01b8152600401611e38929190612908565b6020604051808303816000875af1158015611e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7b919061295d565b505b82600654611e8b919061274a565b600681905550505050565b60005b60045481101561208e576000600260006003600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152505090506040518060a00160405280826000015181526020018260200151815260200142815260200164141dd76000600554846040015142611f94919061265c565b8560200151611fa39190612690565b611fad9190612690565b611fb79190612719565b8360600151611fc6919061274a565b81526020018260800151815250600260006003600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040155905050508080612086906127a0565b915050611e99565b50565b600080600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff166121ab576001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121e957809250505061237d565b83600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154612237919061274a565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301546122cc919061274a565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030181905550600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915080925050505b919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006123b282612387565b9050919050565b6123c2816123a7565b81146123cd57600080fd5b50565b6000813590506123df816123b9565b92915050565b6000602082840312156123fb576123fa612382565b5b6000612409848285016123d0565b91505092915050565b6000819050919050565b61242581612412565b82525050565b600060a082019050612440600083018861241c565b61244d602083018761241c565b61245a604083018661241c565b612467606083018561241c565b612474608083018461241c565b9695505050505050565b61248781612412565b811461249257600080fd5b50565b6000813590506124a48161247e565b92915050565b6000602082840312156124c0576124bf612382565b5b60006124ce84828501612495565b91505092915050565b60006020820190506124ec600083018461241c565b92915050565b60008115159050919050565b612507816124f2565b82525050565b612516816123a7565b82525050565b600060a08201905061253160008301886124fe565b61253e602083018761250d565b61254b604083018661241c565b612558606083018561241c565b612565608083018461241c565b9695505050505050565b6000602082019050612584600083018461250d565b92915050565b600082825260208201905092915050565b7f5769746864726177696e67206d6f7265207468616e207374616b656420616d6f60008201527f756e740000000000000000000000000000000000000000000000000000000000602082015250565b60006125f760238361258a565b91506126028261259b565b604082019050919050565b60006020820190508181036000830152612626816125ea565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061266782612412565b915061267283612412565b9250828210156126855761268461262d565b5b828203905092915050565b600061269b82612412565b91506126a683612412565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156126df576126de61262d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061272482612412565b915061272f83612412565b92508261273f5761273e6126ea565b5b828204905092915050565b600061275582612412565b915061276083612412565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156127955761279461262d565b5b828201905092915050565b60006127ab82612412565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036127dd576127dc61262d565b5b600182019050919050565b6000815190506127f78161247e565b92915050565b60006020828403121561281357612812612382565b5b6000612821848285016127e8565b91505092915050565b7f496e73756666696369656e7420616d6f756e74206f662074686520746f6b656e60008201527f20696e207468697320636f6e747261637420746f207472616e73666572206f7560208201527f742e20506c6561736520636f6e746163742074686520636f6e7472616374206f60408201527f776e657220746f20746f702075702074686520746f6b656e2e00000000000000606082015250565b60006128d260798361258a565b91506128dd8261282a565b608082019050919050565b60006020820190508181036000830152612901816128c5565b9050919050565b600060408201905061291d600083018561250d565b61292a602083018461241c565b9392505050565b61293a816124f2565b811461294557600080fd5b50565b60008151905061295781612931565b92915050565b60006020828403121561297357612972612382565b5b600061298184828501612948565b91505092915050565b7f496e73756666696369656e7420726566657272616c207265776172647320746f60008201527f2077697468647261770000000000000000000000000000000000000000000000602082015250565b60006129e660298361258a565b91506129f18261298a565b604082019050919050565b60006020820190508181036000830152612a15816129d9565b9050919050565b7f5374616b656420616d6f756e74206e6565647320746f2062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b6000612a7860288361258a565b9150612a8382612a1c565b604082019050919050565b60006020820190508181036000830152612aa781612a6b565b9050919050565b6000606082019050612ac3600083018661250d565b612ad0602083018561250d565b612add604083018461241c565b949350505050565b7f526566657272696e67204164647265737320686173206e6f74206d616465206160008201527f206465706f736974000000000000000000000000000000000000000000000000602082015250565b6000612b4160288361258a565b9150612b4c82612ae5565b604082019050919050565b60006020820190508181036000830152612b7081612b34565b9050919050565b7f53656c662d726566657272616c7320617265206e6f7420616c6c6f7765640000600082015250565b6000612bad601e8361258a565b9150612bb882612b77565b602082019050919050565b60006020820190508181036000830152612bdc81612ba0565b9050919050565b7f55736572206861732070726576696f75736c7920696e6469636174656420612060008201527f726566657272616c206164647265737300000000000000000000000000000000602082015250565b6000612c3f60308361258a565b9150612c4a82612be3565b604082019050919050565b60006020820190508181036000830152612c6e81612c32565b9050919050565b7f57697468647261776e20616d6f756e74206d757374206265206c65737320746860008201527f616e20776974686472617761626c6520616d6f756e7400000000000000000000602082015250565b6000612cd160368361258a565b9150612cdc82612c75565b604082019050919050565b60006020820190508181036000830152612d0081612cc4565b905091905056fea2646970667358221220b1b62c42156b96c0869edbfc70fa8bf16cb90c1199a31b13f3f82d0384deb09f64736f6c634300080d0033

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

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.