Source Code
Latest 25 from a total of 10,209 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer Token O... | 7733392 | 2485 days ago | IN | 0 ETH | 0.00099147 | ||||
| Start Transfer | 5523536 | 2862 days ago | IN | 0 ETH | 0.00089943 | ||||
| Mint And Allocat... | 5514904 | 2863 days ago | IN | 0 ETH | 0.0017646 | ||||
| Mint And Allocat... | 5503017 | 2865 days ago | IN | 0 ETH | 0.0017646 | ||||
| Mint And Allocat... | 5456198 | 2873 days ago | IN | 0 ETH | 0.0017646 | ||||
| Mint And Allocat... | 5323809 | 2895 days ago | IN | 0 ETH | 0.00176652 | ||||
| Mint And Allocat... | 5323809 | 2895 days ago | IN | 0 ETH | 0.0013146 | ||||
| Mint And Allocat... | 5301051 | 2899 days ago | IN | 0 ETH | 0.0017646 | ||||
| Mint And Allocat... | 5301051 | 2899 days ago | IN | 0 ETH | 0.00176652 | ||||
| Transfer | 5292281 | 2901 days ago | IN | 0.62 ETH | 0 | ||||
| Mint And Allocat... | 5264071 | 2905 days ago | IN | 0 ETH | 0.0017646 | ||||
| Mint And Allocat... | 5264067 | 2905 days ago | IN | 0 ETH | 0.0017646 | ||||
| Mint And Allocat... | 5264059 | 2905 days ago | IN | 0 ETH | 0.00131268 | ||||
| Mint And Allocat... | 5264052 | 2905 days ago | IN | 0 ETH | 0.00131076 | ||||
| Mint And Allocat... | 5264049 | 2905 days ago | IN | 0 ETH | 0.00131076 | ||||
| Mint And Allocat... | 5264044 | 2905 days ago | IN | 0 ETH | 0.00176076 | ||||
| Transfer | 5211639 | 2914 days ago | IN | 0.62 ETH | 0.00126 | ||||
| Mint And Allocat... | 5211438 | 2914 days ago | IN | 0 ETH | 0.00176268 | ||||
| Mint And Allocat... | 5211427 | 2914 days ago | IN | 0 ETH | 0.0017646 | ||||
| Mint And Allocat... | 5211417 | 2914 days ago | IN | 0 ETH | 0.00176268 | ||||
| Mint And Allocat... | 5211397 | 2914 days ago | IN | 0 ETH | 0.0017646 | ||||
| Mint And Allocat... | 5211388 | 2914 days ago | IN | 0 ETH | 0.00176652 | ||||
| Mint And Allocat... | 5211359 | 2914 days ago | IN | 0 ETH | 0.00176652 | ||||
| Mint And Allocat... | 5211352 | 2914 days ago | IN | 0 ETH | 0.00176076 | ||||
| Transfer | 5210549 | 2915 days ago | IN | 0.2 ETH | 0.00141281 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 5202004 | 2916 days ago | 108.74388246 ETH | ||||
| Transfer | 5202004 | 2916 days ago | 146.25611753 ETH | ||||
| Transfer | 5202004 | 2916 days ago | 278 ETH | ||||
| Transfer | 5202003 | 2916 days ago | 0.5 ETH | ||||
| Transfer | 5201999 | 2916 days ago | 0.62 ETH | ||||
| Transfer | 5201996 | 2916 days ago | 0.61 ETH | ||||
| Transfer | 5201994 | 2916 days ago | 0.5 ETH | ||||
| Transfer | 5201993 | 2916 days ago | 0.6198 ETH | ||||
| Transfer | 5201989 | 2916 days ago | 0.53523475 ETH | ||||
| Transfer | 5201983 | 2916 days ago | 0.48 ETH | ||||
| Transfer | 5201982 | 2916 days ago | 0.6019065 ETH | ||||
| Transfer | 5201982 | 2916 days ago | 0.62 ETH | ||||
| Transfer | 5201979 | 2916 days ago | 0.62 ETH | ||||
| Transfer | 5201979 | 2916 days ago | 0.62 ETH | ||||
| Transfer | 5201979 | 2916 days ago | 0.62 ETH | ||||
| Transfer | 5201977 | 2916 days ago | 0.62 ETH | ||||
| Transfer | 5201976 | 2916 days ago | 0.62 ETH | ||||
| Transfer | 5201976 | 2916 days ago | 0.62 ETH | ||||
| Transfer | 5201975 | 2916 days ago | 0.62 ETH | ||||
| Transfer | 5201975 | 2916 days ago | 0.62 ETH | ||||
| Transfer | 5201974 | 2916 days ago | 0.2 ETH | ||||
| Transfer | 5201971 | 2916 days ago | 0.62 ETH | ||||
| Transfer | 5201968 | 2916 days ago | 0.62 ETH | ||||
| Transfer | 5201956 | 2916 days ago | 0.57 ETH | ||||
| Transfer | 5201951 | 2916 days ago | 0.62 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
ZebiMainCrowdsale
Compiler Version
v0.4.19+commit.c4cbbb05
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2018-03-04
*/
pragma solidity ^0.4.18;
/**
* @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.
*/
function Ownable() 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));
OwnershipTransferred(owner, newOwner);
owner = newOwner;
}
}
/**
* @title ERC20Basic
*/
contract ERC20Basic {
function totalSupply() public view returns (uint256);
function balanceOf(address who) public view returns (uint256);
function transfer(address to, uint256 value) public returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
}
/**
* @title ERC20 interface
* @dev see https://github.com/ethereum/EIPs/issues/20
*/
contract ERC20 is ERC20Basic {
function allowance(address owner, address spender) public view returns (uint256);
function transferFrom(address from, address to, uint256 value) public returns (bool);
function approve(address spender, uint256 value) public returns (bool);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
/**
* @title SafeMath
* @dev Math operations with safety checks that throw on error
*/
library SafeMath {
/**
* @dev Multiplies two numbers, throws on overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
assert(c / a == b);
return c;
}
/**
* @dev Integer division of two numbers, truncating the quotient.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// assert(b > 0); // Solidity automatically throws when dividing by 0
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}
/**
* @dev Adds two numbers, throws on overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
assert(c >= a);
return c;
}
}
/**
* @title Basic token
*/
contract BasicToken is ERC20Basic {
using SafeMath for uint256;
mapping(address => uint256) balances;
uint256 totalSupply_;
/**
* @dev total number of tokens in existence
*/
function totalSupply() public view returns (uint256) {
return totalSupply_;
}
/**
* @dev transfer token for a specified address
* @param _to The address to transfer to.
* @param _value The amount to be transferred.
*/
function transfer(address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[msg.sender]);
// SafeMath.sub will throw if there is not enough balance.
balances[msg.sender] = balances[msg.sender].sub(_value);
balances[_to] = balances[_to].add(_value);
Transfer(msg.sender, _to, _value);
return true;
}
/**
* @dev Gets the balance of the specified address.
* @param _owner The address to query the the balance of.
* @return An uint256 representing the amount owned by the passed address.
*/
function balanceOf(address _owner) public view returns (uint256 balance) {
return balances[_owner];
}
}
contract StandardToken is ERC20, BasicToken {
mapping (address => mapping (address => uint256)) internal allowed;
/**
* @dev Transfer tokens from one address to another
* @param _from address The address which you want to send tokens from
* @param _to address The address which you want to transfer to
* @param _value uint256 the amount of tokens to be transferred
*/
function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[_from]);
require(_value <= allowed[_from][msg.sender]);
balances[_from] = balances[_from].sub(_value);
balances[_to] = balances[_to].add(_value);
allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
Transfer(_from, _to, _value);
return true;
}
/**
* @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
*
* Beware that changing an allowance with this method brings the risk that someone may use both the old
* and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
* race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
* @param _spender The address which will spend the funds.
* @param _value The amount of tokens to be spent.
*/
function approve(address _spender, uint256 _value) public returns (bool) {
allowed[msg.sender][_spender] = _value;
Approval(msg.sender, _spender, _value);
return true;
}
/**
* @dev Function to check the amount of tokens that an owner allowed to a spender.
* @param _owner address The address which owns the funds.
* @param _spender address The address which will spend the funds.
* @return A uint256 specifying the amount of tokens still available for the spender.
*/
function allowance(address _owner, address _spender) public view returns (uint256) {
return allowed[_owner][_spender];
}
/**
* @dev Increase the amount of tokens that an owner allowed to a spender.
*
* approve should be called when allowed[_spender] == 0. To increment
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _addedValue The amount of tokens to increase the allowance by.
*/
function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
/**
* @dev Decrease the amount of tokens that an owner allowed to a spender.
*
* approve should be called when allowed[_spender] == 0. To decrement
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _subtractedValue The amount of tokens to decrease the allowance by.
*/
function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
uint oldValue = allowed[msg.sender][_spender];
if (_subtractedValue > oldValue) {
allowed[msg.sender][_spender] = 0;
} else {
allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
}
Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
}
/**
* @title Mintable token
*/
contract MintableToken is StandardToken, Ownable {
event Mint(address indexed to, uint256 amount);
event MintFinished();
event Burn(address sender,uint256 tokencount);
bool public mintingFinished = false ;
bool public transferAllowed = false ;
modifier canMint() {
require(!mintingFinished);
_;
}
/**
* @dev Function to mint tokens
* @param _to The address that will receive the minted tokens.
* @param _amount The amount of tokens to mint.
* @return A boolean that indicates if the operation was successful.
*/
function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool) {
totalSupply_ = totalSupply_.add(_amount);
balances[_to] = balances[_to].add(_amount);
Mint(_to, _amount);
Transfer(address(0), _to, _amount);
return true;
}
/**
* @dev Function to stop minting new tokens.
* @return True if the operation was successful.
*/
function finishMinting() onlyOwner canMint public returns (bool) {
mintingFinished = true;
MintFinished();
return true;
}
function resumeMinting() onlyOwner public returns (bool) {
mintingFinished = false;
return true;
}
function burn(address _from) external onlyOwner returns (bool success) {
require(balances[_from] != 0);
uint256 tokencount = balances[_from];
//address sender = _from;
balances[_from] = 0;
totalSupply_ = totalSupply_.sub(tokencount);
Burn(_from, tokencount);
return true;
}
function startTransfer() external onlyOwner
{
transferAllowed = true ;
}
function endTransfer() external onlyOwner
{
transferAllowed = false ;
}
function transfer(address _to, uint256 _value) public returns (bool) {
require(transferAllowed);
super.transfer(_to,_value);
return true;
}
function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
require(transferAllowed);
super.transferFrom(_from,_to,_value);
return true;
}
}
contract ZebiCoin is MintableToken {
string public constant name = "Zebi Coin";
string public constant symbol = "ZCO";
uint64 public constant decimals = 8;
}
/**
* @title ZCrowdsale
*/
contract ZCrowdsale is Ownable{
using SafeMath for uint256;
// The token being sold
MintableToken public token;
uint64 public tokenDecimals;
// start and end timestamps where investments are allowed (both inclusive)
uint256 public startTime;
uint256 public endTime;
uint256 public minTransAmount;
uint256 public mintedTokensCap; //max 87 million tokens in presale.
//contribution
mapping(address => uint256) contribution;
//bad contributor
mapping(address => bool) cancelledList;
// address where funds are collected
address public wallet;
bool public withinRefundPeriod;
// how many token units a buyer gets per ether
uint256 public ETHtoZCOrate;
// amount of raised money in wei without factoring refunds
uint256 public weiRaised;
bool public stopped;
modifier stopInEmergency {
require (!stopped);
_;
}
modifier inCancelledList {
require(cancelledList[msg.sender]);
_;
}
modifier inRefundPeriod {
require(withinRefundPeriod);
_;
}
/**
* event for token purchase logging
*/
event TokenPurchase(address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount);
event TakeEth(address sender,uint256 value);
event Withdraw(uint256 _value);
event SetParticipantStatus(address _participant);
event Refund(address sender,uint256 refundBalance);
function ZCrowdsale(uint256 _startTime, uint256 _endTime, uint256 _ETHtoZCOrate, address _wallet,uint256 _minTransAmount,uint256 _mintedTokensCap) public {
require(_startTime >= now);
require(_endTime >= _startTime);
require(_ETHtoZCOrate > 0);
require(_wallet != address(0));
token = new ZebiCoin();
//token = createTokenContract();
startTime = _startTime;
endTime = _endTime;
ETHtoZCOrate = _ETHtoZCOrate;
wallet = _wallet;
minTransAmount = _minTransAmount;
tokenDecimals = 8;
mintedTokensCap = _mintedTokensCap.mul(10**tokenDecimals); // mintedTokensCap is in Zwei
}
// fallback function can be used to buy tokens
function () external payable {
buyTokens(msg.sender);
}
function finishMint() onlyOwner public returns (bool) {
token.finishMinting();
return true;
}
function resumeMint() onlyOwner public returns (bool) {
token.resumeMinting();
return true;
}
function startTransfer() external onlyOwner
{
token.startTransfer() ;
}
function endTransfer() external onlyOwner
{
token.endTransfer() ;
}
function transferTokenOwnership(address owner) external onlyOwner
{
token.transferOwnership(owner);
}
function viewCancelledList(address participant) public view returns(bool){
return cancelledList[participant];
}
// low level token purchase function
function buyTokens(address beneficiary) public payable {
require(beneficiary != address(0));
require(validPurchase());
uint256 weiAmount = msg.value;
// calculate token amount to be created
uint256 tokens = getTokenAmount(weiAmount);
// update state
weiRaised = weiRaised.add(weiAmount);
token.mint(beneficiary, tokens);
contribution[beneficiary] = contribution[beneficiary].add(weiAmount);
TokenPurchase(msg.sender, beneficiary, weiAmount, tokens);
forwardFunds();
}
// creates the token to be sold.
// override this method to have crowdsale of a specific mintable token.
//function createTokenContract() internal returns (MintableToken) {
// return new MintableToken();
// }
// returns value in zwei
// Override this method to have a way to add business logic to your crowdsale when buying
function getTokenAmount(uint256 weiAmount) public view returns(uint256) {
uint256 ETHtoZweiRate = ETHtoZCOrate.mul(10**tokenDecimals);
return SafeMath.div((weiAmount.mul(ETHtoZweiRate)),(1 ether));
}
// send ether to the fund collection wallet
function forwardFunds() internal {
wallet.transfer(msg.value);
}
function enableRefundPeriod() external onlyOwner{
withinRefundPeriod = true;
}
function disableRefundPeriod() external onlyOwner{
withinRefundPeriod = false;
}
// called by the owner on emergency, triggers stopped state
function emergencyStop() external onlyOwner {
stopped = true;
}
// called by the owner on end of emergency, returns to normal state
function release() external onlyOwner {
stopped = false;
}
function viewContribution(address participant) public view returns(uint256){
return contribution[participant];
}
// @return true if the transaction can buy tokens
function validPurchase() internal view returns (bool) {
bool withinPeriod = now >= startTime && now <= endTime;
//Value(msg.value);
//bool nonZeroPurchase = msg.value != 0;
bool validAmount = msg.value >= minTransAmount;
bool withinmintedTokensCap = mintedTokensCap >= (token.totalSupply() + getTokenAmount(msg.value));
return withinPeriod && validAmount && withinmintedTokensCap;
}
function refund() external inCancelledList inRefundPeriod {
require((contribution[msg.sender] > 0) && token.balanceOf(msg.sender)>0);
uint256 refundBalance = contribution[msg.sender];
contribution[msg.sender] = 0;
token.burn(msg.sender);
msg.sender.transfer(refundBalance);
Refund(msg.sender,refundBalance);
}
function forcedRefund(address _from) external onlyOwner {
require(cancelledList[_from]);
require((contribution[_from] > 0) && token.balanceOf(_from)>0);
uint256 refundBalance = contribution[_from];
contribution[_from] = 0;
token.burn(_from);
_from.transfer(refundBalance);
Refund(_from,refundBalance);
}
//takes ethers from zebiwallet to smart contract
function takeEth() external payable {
TakeEth(msg.sender,msg.value);
}
//transfers ether from smartcontract to zebiwallet
function withdraw(uint256 _value) public onlyOwner {
wallet.transfer(_value);
Withdraw(_value);
}
function addCancellation (address _participant) external onlyOwner returns (bool success) {
cancelledList[_participant] = true;
return true;
}
}
contract ZebiCoinCrowdsale is ZCrowdsale {
function ZebiCoinCrowdsale(uint256 _startTime, uint256 _endTime, uint256 _rate, address _wallet,uint256 _minTransAmount,uint256 _mintedTokensCap)
ZCrowdsale(_startTime, _endTime, _rate, _wallet , _minTransAmount,_mintedTokensCap){
}
// creates the token to be sold.
// function createTokenContract() internal returns (MintableToken) {
// return new ZebiCoin();
// }
}
contract ZebiCoinTempMgr is Ownable{
using SafeMath for uint256;
// address where funds are collected
address public wallet;
// instance of presale contract
ZebiCoinCrowdsale public preSaleCSSC;
// instance of token contract
ZebiCoin public tsc;
// number of decimals allowed in ZCO
uint64 tokenDecimals;
//bad contributor of presale
mapping(address => bool) preSaleCancelledList;
// contains token value in zwei
mapping(address => uint256) noncsAllocations;
// check for refund period
bool public withinRefundPeriod;
// amount refunded to each investor
mapping(address => uint256) preSaleRefunds;
modifier inPreSaleCancelledList {
require(preSaleCancelledList[msg.sender]);
_;
}
modifier inRefundPeriod {
require(withinRefundPeriod);
_;
}
event TakeEth(address sender,uint256 value);
event Withdraw(uint256 _value);
event PreSaleRefund(address sender,uint256 refundBalance);
event AllocatenonCSTokens(address indexed beneficiary,uint256 amount);
function ZebiCoinTempMgr(address presaleCrowdsale, address tokenAddress, address _wallet) public {
wallet = _wallet;
preSaleCSSC = ZebiCoinCrowdsale(presaleCrowdsale);
tsc = ZebiCoin(tokenAddress);
tokenDecimals = tsc.decimals();
}
function finishMint() onlyOwner public returns (bool) {
tsc.finishMinting();
return true;
}
function resumeMint() onlyOwner public returns (bool) {
tsc.resumeMinting();
return true;
}
function startTransfer() external onlyOwner{
tsc.startTransfer() ;
}
function endTransfer() external onlyOwner{
tsc.endTransfer() ;
}
function transferTokenOwnership(address owner) external onlyOwner{
tsc.transferOwnership(owner);
}
function allocatenonCSTokens(address beneficiary,uint256 tokens) external onlyOwner
{
require(beneficiary != address(0));
uint256 Zweitokens = tokens.mul(10**(tokenDecimals ));
noncsAllocations[beneficiary]= Zweitokens.add(noncsAllocations[beneficiary]);
tsc.mint(beneficiary, Zweitokens);
AllocatenonCSTokens(beneficiary,Zweitokens);
}
function revertNoncsallocation(address beneficiary) external onlyOwner
{
require(noncsAllocations[beneficiary]!=0);
noncsAllocations[beneficiary]=0;
tsc.burn(beneficiary);
}
function viewNoncsallocations(address participant) public view returns(uint256){
return noncsAllocations[participant];
}
function viewPreSaleCancelledList(address participant) public view returns(bool){
return preSaleCancelledList[participant];
}
function viewPreSaleRefunds(address participant) public view returns(uint256){
return preSaleRefunds[participant];
}
function enableRefundPeriod() external onlyOwner{
withinRefundPeriod = true;
}
function disableRefundPeriod() external onlyOwner{
withinRefundPeriod = false;
}
function refund() external inPreSaleCancelledList inRefundPeriod {
require((preSaleCSSC.viewContribution(msg.sender) > 0) && tsc.balanceOf(msg.sender)>0);
uint256 refundBalance = preSaleCSSC.viewContribution(msg.sender);
preSaleRefunds[msg.sender] = refundBalance;
tsc.burn(msg.sender);
msg.sender.transfer(refundBalance);
PreSaleRefund(msg.sender,refundBalance);
}
function forcedRefund(address _from) external onlyOwner {
require(preSaleCancelledList[_from]);
require((preSaleCSSC.viewContribution(_from) > 0) && tsc.balanceOf(_from)>0);
uint256 refundBalance = preSaleCSSC.viewContribution(_from);
preSaleRefunds[_from] = refundBalance;
tsc.burn(_from);
_from.transfer(refundBalance);
PreSaleRefund(_from,refundBalance);
}
//takes ethers from zebiwallet to smart contract
function takeEth() external payable {
TakeEth(msg.sender,msg.value);
}
//transfers ether from smartcontract to zebiwallet
function withdraw(uint256 _value) public onlyOwner {
wallet.transfer(_value);
Withdraw(_value);
}
function addCancellation (address _participant) external onlyOwner returns (bool success) {
preSaleCancelledList[_participant] = true;
return true;
}
}
/**
* @title ZebiMainCrowdsale
*/
contract ZebiMainCrowdsale is Ownable{
using SafeMath for uint256;
// The token being sold
ZebiCoin public token;
//calender year count;
//uint256 calenderYearCounter;
//lockeed tokens minted in current calender year
uint256 currentYearMinted;
//calenderYearMintCap for Zebi
uint256 calenderYearMintCap;
//calender year start
uint256 calenderYearStart;
//calenderYearEnd
uint256 calenderYearEnd;
//mintinge vested token start time
uint256 vestedMintStartTime;
//flag : whethere remainingZCO after crowdsale allocated or not
//bool remainingZCOAllocated;
//TODO
uint256 zebiZCOShare;
//TODO
uint256 crowdsaleZCOCap;
//transaction Start time
uint256 transStartTime;
// presale instance
ZebiCoinCrowdsale public zcc;
// tempMngr instance
ZebiCoinTempMgr public tempMngr;
// Number of decimals allowed for ZCO
uint64 public tokenDecimals;
// start and end timestamps where investments are allowed (both inclusive)
uint256 public startTime;
uint256 public endTime;
//In seconds initialized in constructor only gold list members can buy
uint256 public goldListPeriod;
//endTime of 2nd bonus period minus startTime in seconds initialized in constructor: 2nd period for bonuses
uint256 public postGoldPeriod;
// Minimum amount to be invested in wei
uint256 public minTransAmount;
// Hardcap in wei
uint256 public ethCap;
// Contribution of each investor in main crowdsale
mapping(address => uint256) mainContribution;
// Bad contributor
mapping(address => bool) mainCancelledList;
// Gold Period Cap per address
uint256 goldPeriodCap;
//is the transaction occurring during gold list period
bool goldListPeriodFlag;
//goldListPeriod Contribution TODO
mapping(address=>uint256) goldListContribution;
// Gold List
mapping(address => bool) goldList;
//discounts mapping number of coins to percentage discount
// mapping(uint256 => uint256) discounts;
// KYC Accepted List
mapping(address => bool) kycAcceptedList;
// Address where funds are collected
address public wallet;
bool public withinRefundPeriod;
// amount refunded to each investor
mapping(address => uint256) preSaleRefundsInMainSale;
uint256 public tokens;
// net wei used to buy ZCOs in the transaction
uint256 public weiAmount;
// how many token units a buyer gets per ether
uint256 public ETHtoZWeirate;
// amount of raised money in wei without factoring refunds
uint256 public mainWeiRaised;
modifier inCancelledList {
require(mainCancelledList[msg.sender]);
_;
}
modifier inRefundPeriod {
require(withinRefundPeriod);
_;
}
event TokenPurchase(address indexed purchaser, uint256 value, uint256 amount);
event TakeEth(address sender,uint256 value);
event Withdraw(uint256 _value);
event SetParticipantStatus(address _participant);
event Refund(address sender,uint256 refundBalance);
function ZebiMainCrowdsale(uint256 _startTime, uint256 _endTime, uint256 _ETHtoZWeirate, address _wallet,uint256 _minTransAmount,uint256 _ethCap, address tokenAddress, address presaleAddress,address tempMngrAddress,uint256 _goldListPeriod,uint256 _postGoldPeriod,uint256 _goldPeriodCap,uint256 _vestedMintStartTime,uint256 _calenderYearStart) public {
require(_startTime >= now);
require(_endTime >= _startTime);
require(_ETHtoZWeirate > 0);
require(_wallet != address(0));
token = ZebiCoin(tokenAddress);
zcc = ZebiCoinCrowdsale(presaleAddress);
startTime = _startTime;
endTime = _endTime;
ETHtoZWeirate = _ETHtoZWeirate;
wallet = _wallet;
minTransAmount = _minTransAmount;
tokenDecimals = token.decimals();
ethCap = _ethCap;
tempMngr=ZebiCoinTempMgr(tempMngrAddress);
goldListPeriod=_goldListPeriod;
postGoldPeriod=_postGoldPeriod;
zebiZCOShare=SafeMath.mul(500000000,(10**tokenDecimals));
crowdsaleZCOCap=zebiZCOShare;
goldPeriodCap=_goldPeriodCap;
calenderYearMintCap = SafeMath.div((zebiZCOShare.mul(2)),8);
//vestedMintStartTime=(startTime +((18 *30)*1 days));
//vestedMintStartTime=1567296000; //1 Sep 2019
vestedMintStartTime=_vestedMintStartTime;
//calenderYearStart=1546300800; //1 Jan 2019 0:0:0
calenderYearStart=_calenderYearStart;
//calenderYearEnd=1577836799; // 31 Dec 2019 23:59:59
calenderYearEnd=(calenderYearStart+1 years )- 1;
}
// Fallback function used to buy tokens
function () external payable {
buyTokens(msg.sender);
}
function finishMint() onlyOwner public returns (bool) {
token.finishMinting();
return true;
}
function resumeMint() onlyOwner public returns (bool) {
token.resumeMinting();
return true;
}
function startTransfer() external onlyOwner{
token.startTransfer() ;
}
function endTransfer() external onlyOwner{
token.endTransfer() ;
}
function transferTokenOwnership(address owner) external onlyOwner{
token.transferOwnership(owner);
}
function viewCancelledList(address participant) public view returns(bool){
return mainCancelledList[participant];
}
function viewGoldList(address participant) public view returns(bool){
return goldList[participant];
}
function addToGoldList (address _participant) external onlyOwner returns (bool ) {
goldList[_participant] = true;
return true;
}
function removeFromGoldList(address _participant) external onlyOwner returns(bool ){
goldList[_participant]=false;
return true;
}
function viewKYCAccepted(address participant) public view returns(bool){
return kycAcceptedList[participant];
}
function addToKYCList (address _participant) external onlyOwner returns (bool ) {
kycAcceptedList[_participant] = true;
return true;
}
function removeFromKYCList (address _participant) external onlyOwner returns (bool){
kycAcceptedList[_participant]=false;
}
function viewPreSaleRefundsInMainSale(address participant) public view returns(uint256){
return preSaleRefundsInMainSale[participant];
}
/*function addToPreSaleRefunds(address participant,uint256 amountInEth) external onlyOwner returns(bool){
preSaleRefundsInMainSale[participant]=amountInEth.add(preSaleRefundsInMainSale[participant]);
}
function removeFromPreSaleRefunds(address participant,uint256 amountInEth) external onlyOwner returns(bool){
preSaleRefundsInMainSale[participant]=(preSaleRefundsInMainSale[participant]).sub(amountInEth);
}*/
// Low level token purchase function
function buyTokens(address beneficiary) public payable {
transStartTime=now;
require(goldList[beneficiary]||kycAcceptedList[beneficiary]);
goldListPeriodFlag=false;
require(beneficiary != address(0));
require(validPurchase());
uint256 extraEth=0;
weiAmount = msg.value;
/* if(goldListPeriodFlag){
weiAmount=goldPeriodCap.sub(goldListContribution[msg.sender]);
extraEth=(msg.value).sub(weiAmount);
}*/
//for partial fulfilment feature : return extra ether transferred by investor
if((msg.value>ethCap.sub(mainWeiRaised)) && !goldListPeriodFlag){
weiAmount=ethCap.sub(mainWeiRaised);
extraEth=(msg.value).sub(weiAmount);
}
// calculate token amount to be alloted
tokens = getTokenAmount(weiAmount);
// update state
mainWeiRaised = mainWeiRaised.add(weiAmount);
token.mint(beneficiary, tokens);
mainContribution[beneficiary] = mainContribution[beneficiary].add(weiAmount);
if(goldListPeriodFlag){
goldListContribution[beneficiary] = goldListContribution[beneficiary].add(weiAmount);
}
//TokenPurchase(msg.sender, beneficiary, weiAmount, tokens);
TokenPurchase(beneficiary, weiAmount, tokens);
forwardFunds();
if(extraEth>0){
beneficiary.transfer(extraEth);
}
}
// returns value in zwei calculating number of tokens including bonuses
function getTokenAmount(uint256 weiAmount1) public view returns(uint256) {
//uint256 ETHtoZweiRate = ETHtoZWeirate;
uint256 number = SafeMath.div((weiAmount1.mul(ETHtoZWeirate)),(1 ether));
uint256 volumeBonus;
uint256 timeBonus;
if(number >= 400000000000000)
{
volumeBonus = SafeMath.div((number.mul(25)),100);
}
else if(number>= 150000000000000) {
volumeBonus = SafeMath.div((number.mul(20)),100);
}
else if(number>= 80000000000000) {
volumeBonus = SafeMath.div((number.mul(15)),100);
}
else if(number>= 40000000000000) {
volumeBonus = SafeMath.div((number.mul(10)),100);
}
else if(number>= 7500000000000) {
volumeBonus = SafeMath.div((number.mul(5)),100);
}
else{
volumeBonus=0;
}
//
if(goldListPeriodFlag){
timeBonus = SafeMath.div((number.mul(15)),100);
}
else if(transStartTime <= startTime + postGoldPeriod){
timeBonus = SafeMath.div((number.mul(10)),100);
}
else{
timeBonus=0;
}
number=number+timeBonus+volumeBonus;
return number;
}
// send ether to the fund collection wallet
function forwardFunds() internal {
wallet.transfer(weiAmount);
}
function enableRefundPeriod() external onlyOwner{
withinRefundPeriod = true;
}
function disableRefundPeriod() external onlyOwner{
withinRefundPeriod = false;
}
function viewContribution(address participant) public view returns(uint256){
return mainContribution[participant];
}
// checks if the investor can buy tokens
function validPurchase() internal view returns (bool) {
bool withinPeriod = transStartTime >= startTime && transStartTime <= endTime;
bool validAmount = msg.value >= minTransAmount;
//bool withinEthCap = ethCap >= (msg.value + mainWeiRaised);
bool withinEthCap = ((ethCap.sub(mainWeiRaised))>0);
bool goldPeriodValid=true;
if(transStartTime <= (startTime + goldListPeriod)){
goldPeriodValid=(goldList[msg.sender])&&(goldListContribution[msg.sender]+msg.value <= goldPeriodCap);
goldListPeriodFlag=true;
}
return withinPeriod && validAmount && withinEthCap && goldPeriodValid;
}
/*function mintLeftOverZCOToWallet() external onlyOwner returns (bool){
//uint256 Zweitokens = amount;
require(!remainingZCOAllocated);
require(now>endTime);
//uint256 ETHtoZweiRate = ETHtoZWeirate.mul(10**tokenDecimals);
//uint256 remainingCap=ethCap.sub(mainWeiRaised);
//uint256 amount = SafeMath.div((remainingCap.mul(ETHtoZweiRate)),(1 ether));
//mainWeiRaised = mainWeiRaised.add(amount);
//uint256 zweitokens = SafeMath.mul(500000000,10**(tokenDecimals ));
uint256 zweitokens=crowdsaleZCOCap.sub(token.totalSupply());
//zweitokens=zweitokens.sub(token.totalSupply());
token.mint(wallet, zweitokens);
remainingZCOAllocated=true;
return true;
}*/
function mintAndAllocateZCO(address partnerAddress,uint256 amountInZWei) external onlyOwner returns(bool){
require((crowdsaleZCOCap.sub(token.totalSupply()))>=amountInZWei);
require(partnerAddress!=address(0));
//require(now>endTime);
//require(!remainingZCOAllocated);
token.mint(partnerAddress,amountInZWei);
return true;
}
function mintvestedTokens (address partnerAddress,uint256 zweitokens) external onlyOwner returns(bool){
require(zweitokens<=zebiZCOShare && zweitokens>0);
require(partnerAddress!=address(0));
require(now>=vestedMintStartTime);
//year
uint256 currentYearCounter=SafeMath.div((SafeMath.sub(now,calenderYearStart)),1 years);
//if(currentYearCounter>calenderYearCounter){
if(now>calenderYearEnd && currentYearCounter>=1){
//calenderYearCounter=currentYearCounter;
currentYearMinted=0;
calenderYearStart=calenderYearEnd+((currentYearCounter-1)*1 years) +1;
calenderYearEnd=(calenderYearStart+ 1 years )- 1;
}
require(currentYearMinted+zweitokens<=calenderYearMintCap);
currentYearMinted=currentYearMinted+zweitokens;
token.mint(partnerAddress,zweitokens);
zebiZCOShare=zebiZCOShare.sub(zweitokens);
}
function refund() external inCancelledList inRefundPeriod {
require(mainCancelledList[msg.sender]);
require((mainContribution[msg.sender] > 0) && token.balanceOf(msg.sender)>0);
uint256 presaleContribution = zcc.viewContribution(msg.sender);
uint256 refundBalance = (mainContribution[msg.sender]).add(presaleContribution) ;
uint256 preSaleRefundTemp= tempMngr.viewPreSaleRefunds(msg.sender);
uint256 preSaleRefundMain=presaleContribution.sub(preSaleRefundTemp);
refundBalance=refundBalance.sub(preSaleRefundTemp);
refundBalance=refundBalance.sub(preSaleRefundsInMainSale[msg.sender]);
preSaleRefundsInMainSale[msg.sender]=preSaleRefundMain;
mainContribution[msg.sender] = 0;
token.burn(msg.sender);
msg.sender.transfer(refundBalance);
Refund(msg.sender,refundBalance);
}
function forcedRefund(address _from) external onlyOwner {
require(mainCancelledList[_from]);
require((mainContribution[_from] > 0) && token.balanceOf(_from)>0);
uint256 presaleContribution = zcc.viewContribution(_from);
uint256 refundBalance = (mainContribution[_from]).add(presaleContribution) ;
uint256 preSaleRefundTemp= tempMngr.viewPreSaleRefunds(_from);
uint256 preSaleRefundMain=presaleContribution.sub(preSaleRefundTemp);
refundBalance=refundBalance.sub(preSaleRefundTemp);
refundBalance=refundBalance.sub(preSaleRefundsInMainSale[_from]);
preSaleRefundsInMainSale[_from]=preSaleRefundMain;
mainContribution[_from] = 0;
token.burn(_from);
_from.transfer(refundBalance);
Refund(_from,refundBalance);
}
//takes ethers from zebiwallet to smart contract
function takeEth() external payable {
TakeEth(msg.sender,msg.value);
}
//transfers ether from smartcontract to zebiwallet
function withdraw(uint256 _value) public onlyOwner {
wallet.transfer(_value);
Withdraw(_value);
}
//Maintains list of investors with failed KYC validation
function addCancellation (address _participant) external onlyOwner returns (bool success) {
mainCancelledList[_participant] = true;
return true;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[],"name":"zcc","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"weiAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_participant","type":"address"}],"name":"removeFromGoldList","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"participant","type":"address"}],"name":"viewGoldList","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ETHtoZWeirate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"resumeMint","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"owner","type":"address"}],"name":"transferTokenOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"endTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"participant","type":"address"}],"name":"viewKYCAccepted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenDecimals","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"participant","type":"address"}],"name":"viewPreSaleRefundsInMainSale","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minTransAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"participant","type":"address"}],"name":"viewContribution","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"wallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"partnerAddress","type":"address"},{"name":"zweitokens","type":"uint256"}],"name":"mintvestedTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"refund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"goldListPeriod","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"endTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"enableRefundPeriod","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"partnerAddress","type":"address"},{"name":"amountInZWei","type":"uint256"}],"name":"mintAndAllocateZCO","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"startTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ethCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"withinRefundPeriod","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"startTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_participant","type":"address"}],"name":"removeFromKYCList","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"disableRefundPeriod","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"takeEth","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_participant","type":"address"}],"name":"addCancellation","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"mainWeiRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"postGoldPeriod","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_participant","type":"address"}],"name":"addToKYCList","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"weiAmount1","type":"uint256"}],"name":"getTokenAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tempMngr","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"participant","type":"address"}],"name":"viewCancelledList","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finishMint","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"}],"name":"buyTokens","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_participant","type":"address"}],"name":"addToGoldList","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"}],"name":"forcedRefund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_startTime","type":"uint256"},{"name":"_endTime","type":"uint256"},{"name":"_ETHtoZWeirate","type":"uint256"},{"name":"_wallet","type":"address"},{"name":"_minTransAmount","type":"uint256"},{"name":"_ethCap","type":"uint256"},{"name":"tokenAddress","type":"address"},{"name":"presaleAddress","type":"address"},{"name":"tempMngrAddress","type":"address"},{"name":"_goldListPeriod","type":"uint256"},{"name":"_postGoldPeriod","type":"uint256"},{"name":"_goldPeriodCap","type":"uint256"},{"name":"_vestedMintStartTime","type":"uint256"},{"name":"_calenderYearStart","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TokenPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"TakeEth","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_value","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_participant","type":"address"}],"name":"SetParticipantStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"refundBalance","type":"uint256"}],"name":"Refund","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]Contract Creation Code
606060405234156200001057600080fd5b6040516101c08062003a5583398101604052808051906020019091908051906020019091908051906020019091908051906020019091908051906020019091908051906020019091908051906020019091908051906020019091908051906020019091908051906020019091908051906020019091908051906020019091908051906020019091908051906020019091905050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428e10151515620000f357600080fd5b8d8d101515156200010357600080fd5b60008c1115156200011357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515156200015057600080fd5b87600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508d600c819055508c600d819055508b601d819055508a601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555089601081905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515620002be57600080fd5b6102c65a03f11515620002d057600080fd5b50505060405180519050600b60146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508860118190555085600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600e8190555083600f819055506200039f631dcd6500600b60149054906101000a900467ffffffffffffffff16600a0a67ffffffffffffffff1662000435640100000000026200354e176401000000009004565b60078190555060075460088190555082601481905550620003fb620003df600260075462000435640100000000026200354e179091906401000000009004565b6008620004746401000000000262003533176401000000009004565b600381905550816006819055508060048190555060016301e133806004540103600581905550505050505050505050505050505062000490565b60008060008414156200044c57600091506200046d565b82840290508284828115156200045e57fe5b041415156200046957fe5b8091505b5092915050565b60008082848115156200048357fe5b0490508091505092915050565b6135b580620004a06000396000f30060606040526004361061020f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063069f74c71461021a5780630d10e8421461026f5780630d301c75146102985780630eb05d49146102e95780631da975441461033a5780631fe7b6241461036357806321e6b53d146103905780632e1a7d4d146103c95780633197cbb6146103ec5780633a8d6e5e146104155780633b97e85614610466578063477d47b5146104a35780634c80b03b146104f05780635052abad14610519578063521eb2731461056657806356a807d9146105bb578063590e1ae3146106155780635fb42c591461062a5780636494cde1146106535780636585dc121461066857806377e75b071461067d57806378e97925146106d75780637a468170146107005780637f070a9b14610729578063829c342814610756578063836a107f1461076b578063848f1470146107bc5780638a13aa4b146107d15780638da5cb5b146107db57806393b7e7cb146108305780639458434f14610881578063963c6017146108aa5780639d63848a146108d3578063bea51f81146108fc578063c2507ac11461094d578063cc86566c14610984578063e3bb01ac146109d9578063e4cc18be14610a2a578063ec8ac4d814610a57578063f2fde38b14610a85578063f469707f14610abe578063f83eb5dc14610b0f578063fc0c546a14610b48575b61021833610b9d565b005b341561022557600080fd5b61022d611040565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561027a57600080fd5b610282611066565b6040518082815260200191505060405180910390f35b34156102a357600080fd5b6102cf600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061106c565b604051808215151515815260200191505060405180910390f35b34156102f457600080fd5b610320600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061112a565b604051808215151515815260200191505060405180910390f35b341561034557600080fd5b61034d611180565b6040518082815260200191505060405180910390f35b341561036e57600080fd5b610376611186565b604051808215151515815260200191505060405180910390f35b341561039b57600080fd5b6103c7600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611294565b005b34156103d457600080fd5b6103ea60048080359060200190919050506113c2565b005b34156103f757600080fd5b6103ff6114b9565b6040518082815260200191505060405180910390f35b341561042057600080fd5b61044c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506114bf565b604051808215151515815260200191505060405180910390f35b341561047157600080fd5b610479611515565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b34156104ae57600080fd5b6104da600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061152f565b6040518082815260200191505060405180910390f35b34156104fb57600080fd5b610503611578565b6040518082815260200191505060405180910390f35b341561052457600080fd5b610550600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061157e565b6040518082815260200191505060405180910390f35b341561057157600080fd5b6105796115c7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156105c657600080fd5b6105fb600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506115ed565b604051808215151515815260200191505060405180910390f35b341561062057600080fd5b610628611844565b005b341561063557600080fd5b61063d611eff565b6040518082815260200191505060405180910390f35b341561065e57600080fd5b610666611f05565b005b341561067357600080fd5b61067b611ffb565b005b341561068857600080fd5b6106bd600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050612073565b604051808215151515815260200191505060405180910390f35b34156106e257600080fd5b6106ea6122ca565b6040518082815260200191505060405180910390f35b341561070b57600080fd5b6107136122d0565b6040518082815260200191505060405180910390f35b341561073457600080fd5b61073c6122d6565b604051808215151515815260200191505060405180910390f35b341561076157600080fd5b6107696122e9565b005b341561077657600080fd5b6107a2600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506123df565b604051808215151515815260200191505060405180910390f35b34156107c757600080fd5b6107cf612499565b005b6107d9612511565b005b34156107e657600080fd5b6107ee61257e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561083b57600080fd5b610867600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506125a3565b604051808215151515815260200191505060405180910390f35b341561088c57600080fd5b610894612661565b6040518082815260200191505060405180910390f35b34156108b557600080fd5b6108bd612667565b6040518082815260200191505060405180910390f35b34156108de57600080fd5b6108e661266d565b6040518082815260200191505060405180910390f35b341561090757600080fd5b610933600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612673565b604051808215151515815260200191505060405180910390f35b341561095857600080fd5b61096e6004808035906020019091905050612731565b6040518082815260200191505060405180910390f35b341561098f57600080fd5b6109976128f5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156109e457600080fd5b610a10600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061291b565b604051808215151515815260200191505060405180910390f35b3415610a3557600080fd5b610a3d612971565b604051808215151515815260200191505060405180910390f35b610a83600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b9d565b005b3415610a9057600080fd5b610abc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612a7f565b005b3415610ac957600080fd5b610af5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612bd4565b604051808215151515815260200191505060405180910390f35b3415610b1a57600080fd5b610b46600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612c92565b005b3415610b5357600080fd5b610b5b613336565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600042600981905550601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610c475750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1515610c5257600080fd5b6000601560006101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515610ca957600080fd5b610cb161335c565b1515610cbc57600080fd5b6000905034601c81905550610cde601e5460115461349690919063ffffffff16565b34118015610cf95750601560009054906101000a900460ff16155b15610d3357610d15601e5460115461349690919063ffffffff16565b601c81905550610d30601c543461349690919063ffffffff16565b90505b610d3e601c54612731565b601b81905550610d5b601c54601e546134af90919063ffffffff16565b601e81905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1983601b546000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515610e3057600080fd5b6102c65a03f11515610e4157600080fd5b5050506040518051905050610ea0601c54601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134af90919063ffffffff16565b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601560009054906101000a900460ff1615610f9057610f4c601c54601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134af90919063ffffffff16565b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8173ffffffffffffffffffffffffffffffffffffffff167fcd60aa75dea3072fbc07ae6d7d856b5dc5f4eee88854f5b4abf7b680ef8bc50f601c54601b54604051808381526020018281526020019250505060405180910390a2610ff26134cd565b600081111561103c578173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561103b57600080fd5b5b5050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601c5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156110c957600080fd5b6000601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156111e357600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359ae340e6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b151561127157600080fd5b6102c65a03f1151561128257600080fd5b50505060405180519050506001905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156112ef57600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2fde38b826040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15156113ab57600080fd5b6102c65a03f115156113bc57600080fd5b50505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561141d57600080fd5b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561147f57600080fd5b7f5b6b431d4476a211bb7d41c20d1aab9ae2321deee0d20be3d9fc9b1093fa6e3d816040518082815260200191505060405180910390a150565b600d5481565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b60149054906101000a900467ffffffffffffffff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60105481565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561164b57600080fd5b600754831115801561165d5750600083115b151561166857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515156116a457600080fd5b60065442101515156116b557600080fd5b6116ce6116c442600454613496565b6301e13380613533565b9050600554421180156116e2575060018110155b1561171957600060028190555060016301e133806001830302600554010160048190555060016301e1338060045401036005819055505b60035483600254011115151561172e57600080fd5b8260025401600281905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1985856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561180657600080fd5b6102c65a03f1151561181757600080fd5b50505060405180519050506118378360075461349690919063ffffffff16565b6007819055505092915050565b600080600080601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156118a257600080fd5b601960149054906101000a900460ff1615156118bd57600080fd5b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561191557600080fd5b6000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118015611a4357506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515611a2657600080fd5b6102c65a03f11515611a3757600080fd5b50505060405180519050115b1515611a4e57600080fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635052abad336000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515611b1357600080fd5b6102c65a03f11515611b2457600080fd5b505050604051805190509350611b8284601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134af90919063ffffffff16565b9250600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166322eb2c02336000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515611c4957600080fd5b6102c65a03f11515611c5a57600080fd5b505050604051805190509150611c79828561349690919063ffffffff16565b9050611c8e828461349690919063ffffffff16565b9250611ce2601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461349690919063ffffffff16565b925080601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166389afcb44336000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515611e3257600080fd5b6102c65a03f11515611e4357600080fd5b50505060405180519050503373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501515611e8e57600080fd5b7fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d3384604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a150505050565b600e5481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f6057600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636494cde16040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b1515611fe557600080fd5b6102c65a03f11515611ff657600080fd5b505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561205657600080fd5b6001601960146101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156120d057600080fd5b8161218e600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b151561216257600080fd5b6102c65a03f1151561217357600080fd5b5050506040518051905060085461349690919063ffffffff16565b1015151561219b57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156121d757600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1984846000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156122a457600080fd5b6102c65a03f115156122b557600080fd5b50505060405180519050506001905092915050565b600c5481565b60115481565b601960149054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561234457600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663829c34286040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b15156123c957600080fd5b6102c65a03f115156123da57600080fd5b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561243c57600080fd5b6000601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156124f457600080fd5b6000601960146101000a81548160ff021916908315150217905550565b7fcd18c1683fcd49ac98a87d5fd5a82c5f375b4061b05f491883e0edc785b694d13334604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561260057600080fd5b6001601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b601e5481565b600f5481565b601b5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156126d057600080fd5b6001601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b60008060008061275d61274f601d548761354e90919063ffffffff16565b670de0b6b3a7640000613533565b925066016bcc41e90000831015156127945761278d61278660198561354e90919063ffffffff16565b6064613533565b915061286d565b65886c98b76000831015156127c8576127c16127ba60148561354e90919063ffffffff16565b6064613533565b915061286c565b6548c273950000831015156127fc576127f56127ee600f8561354e90919063ffffffff16565b6064613533565b915061286b565b65246139ca80008310151561283057612829612822600a8561354e90919063ffffffff16565b6064613533565b915061286a565b6506d23ad5f800831015156128645761285d61285660058561354e90919063ffffffff16565b6064613533565b9150612869565b600091505b5b5b5b5b601560009054906101000a900460ff16156128a7576128a0612899600f8561354e90919063ffffffff16565b6064613533565b90506128e3565b600f54600c54016009541115156128dd576128d66128cf600a8561354e90919063ffffffff16565b6064613533565b90506128e2565b600090505b5b81818401019250829350505050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156129ce57600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637d64bcb46000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515612a5c57600080fd5b6102c65a03f11515612a6d57600080fd5b50505060405180519050506001905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612ada57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612b1657600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612c3157600080fd5b6001601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6000806000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612cf357600080fd5b601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515612d4b57600080fd5b6000601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118015612e7957506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231876000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515612e5c57600080fd5b6102c65a03f11515612e6d57600080fd5b50505060405180519050115b1515612e8457600080fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635052abad866000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515612f4957600080fd5b6102c65a03f11515612f5a57600080fd5b505050604051805190509350612fb884601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134af90919063ffffffff16565b9250600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166322eb2c02866000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561307f57600080fd5b6102c65a03f1151561309057600080fd5b5050506040518051905091506130af828561349690919063ffffffff16565b90506130c4828461349690919063ffffffff16565b9250613118601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461349690919063ffffffff16565b925080601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166389afcb44866000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561326857600080fd5b6102c65a03f1151561327957600080fd5b50505060405180519050508473ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f1935050505015156132c457600080fd5b7fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d8584604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000600c546009541015801561337c5750600d5460095411155b93506010543410159250600061339f601e5460115461349690919063ffffffff16565b11915060019050600e54600c540160095411151561347157601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613453575060145434601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540111155b90506001601560006101000a81548160ff0219169083151502179055505b83801561347b5750825b80156134845750815b801561348d5750805b94505050505090565b60008282111515156134a457fe5b818303905092915050565b60008082840190508381101515156134c357fe5b8091505092915050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc601c549081150290604051600060405180830381858888f19350505050151561353157600080fd5b565b600080828481151561354157fe5b0490508091505092915050565b60008060008414156135635760009150613582565b828402905082848281151561357457fe5b0414151561357e57fe5b8091505b50929150505600a165627a7a7230582071127c85b92702d6d0c5fe80727977a8e4311e46cc42ad295f17e581ae5a71580029000000000000000000000000000000000000000000000000000000005a9d3848000000000000000000000000000000000000000000000000000000005abf9b68000000000000000000000000000000000000000000000000000002bb30ed607b000000000000000000000000d75496c0a6a36308cfda58e317ab97ea46b8f6b5000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000005675bb890d6be43c000000000000000000000000002008e3057bd734e10ad13c9eae45ff132abc1722000000000000000000000000ef90b9fea51c983827ba3b79c3c19a9751fc7e990000000000000000000000001eb48c64ad71837a6ed57e4a2dab88173c8330540000000000000000000000000000000000000000000000000000000000004650000000000000000000000000000000000000000000000000000000000002bf20000000000000000000000000000000000000000000000000089aaeb710be0000000000000000000000000000000000000000000000000000000000005d6b0a00000000000000000000000000000000000000000000000000000000005c2aad80
Deployed Bytecode
0x60606040526004361061020f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063069f74c71461021a5780630d10e8421461026f5780630d301c75146102985780630eb05d49146102e95780631da975441461033a5780631fe7b6241461036357806321e6b53d146103905780632e1a7d4d146103c95780633197cbb6146103ec5780633a8d6e5e146104155780633b97e85614610466578063477d47b5146104a35780634c80b03b146104f05780635052abad14610519578063521eb2731461056657806356a807d9146105bb578063590e1ae3146106155780635fb42c591461062a5780636494cde1146106535780636585dc121461066857806377e75b071461067d57806378e97925146106d75780637a468170146107005780637f070a9b14610729578063829c342814610756578063836a107f1461076b578063848f1470146107bc5780638a13aa4b146107d15780638da5cb5b146107db57806393b7e7cb146108305780639458434f14610881578063963c6017146108aa5780639d63848a146108d3578063bea51f81146108fc578063c2507ac11461094d578063cc86566c14610984578063e3bb01ac146109d9578063e4cc18be14610a2a578063ec8ac4d814610a57578063f2fde38b14610a85578063f469707f14610abe578063f83eb5dc14610b0f578063fc0c546a14610b48575b61021833610b9d565b005b341561022557600080fd5b61022d611040565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561027a57600080fd5b610282611066565b6040518082815260200191505060405180910390f35b34156102a357600080fd5b6102cf600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061106c565b604051808215151515815260200191505060405180910390f35b34156102f457600080fd5b610320600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061112a565b604051808215151515815260200191505060405180910390f35b341561034557600080fd5b61034d611180565b6040518082815260200191505060405180910390f35b341561036e57600080fd5b610376611186565b604051808215151515815260200191505060405180910390f35b341561039b57600080fd5b6103c7600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611294565b005b34156103d457600080fd5b6103ea60048080359060200190919050506113c2565b005b34156103f757600080fd5b6103ff6114b9565b6040518082815260200191505060405180910390f35b341561042057600080fd5b61044c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506114bf565b604051808215151515815260200191505060405180910390f35b341561047157600080fd5b610479611515565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b34156104ae57600080fd5b6104da600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061152f565b6040518082815260200191505060405180910390f35b34156104fb57600080fd5b610503611578565b6040518082815260200191505060405180910390f35b341561052457600080fd5b610550600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061157e565b6040518082815260200191505060405180910390f35b341561057157600080fd5b6105796115c7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156105c657600080fd5b6105fb600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506115ed565b604051808215151515815260200191505060405180910390f35b341561062057600080fd5b610628611844565b005b341561063557600080fd5b61063d611eff565b6040518082815260200191505060405180910390f35b341561065e57600080fd5b610666611f05565b005b341561067357600080fd5b61067b611ffb565b005b341561068857600080fd5b6106bd600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050612073565b604051808215151515815260200191505060405180910390f35b34156106e257600080fd5b6106ea6122ca565b6040518082815260200191505060405180910390f35b341561070b57600080fd5b6107136122d0565b6040518082815260200191505060405180910390f35b341561073457600080fd5b61073c6122d6565b604051808215151515815260200191505060405180910390f35b341561076157600080fd5b6107696122e9565b005b341561077657600080fd5b6107a2600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506123df565b604051808215151515815260200191505060405180910390f35b34156107c757600080fd5b6107cf612499565b005b6107d9612511565b005b34156107e657600080fd5b6107ee61257e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561083b57600080fd5b610867600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506125a3565b604051808215151515815260200191505060405180910390f35b341561088c57600080fd5b610894612661565b6040518082815260200191505060405180910390f35b34156108b557600080fd5b6108bd612667565b6040518082815260200191505060405180910390f35b34156108de57600080fd5b6108e661266d565b6040518082815260200191505060405180910390f35b341561090757600080fd5b610933600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612673565b604051808215151515815260200191505060405180910390f35b341561095857600080fd5b61096e6004808035906020019091905050612731565b6040518082815260200191505060405180910390f35b341561098f57600080fd5b6109976128f5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156109e457600080fd5b610a10600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061291b565b604051808215151515815260200191505060405180910390f35b3415610a3557600080fd5b610a3d612971565b604051808215151515815260200191505060405180910390f35b610a83600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b9d565b005b3415610a9057600080fd5b610abc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612a7f565b005b3415610ac957600080fd5b610af5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612bd4565b604051808215151515815260200191505060405180910390f35b3415610b1a57600080fd5b610b46600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612c92565b005b3415610b5357600080fd5b610b5b613336565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600042600981905550601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610c475750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1515610c5257600080fd5b6000601560006101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515610ca957600080fd5b610cb161335c565b1515610cbc57600080fd5b6000905034601c81905550610cde601e5460115461349690919063ffffffff16565b34118015610cf95750601560009054906101000a900460ff16155b15610d3357610d15601e5460115461349690919063ffffffff16565b601c81905550610d30601c543461349690919063ffffffff16565b90505b610d3e601c54612731565b601b81905550610d5b601c54601e546134af90919063ffffffff16565b601e81905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1983601b546000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515610e3057600080fd5b6102c65a03f11515610e4157600080fd5b5050506040518051905050610ea0601c54601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134af90919063ffffffff16565b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601560009054906101000a900460ff1615610f9057610f4c601c54601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134af90919063ffffffff16565b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8173ffffffffffffffffffffffffffffffffffffffff167fcd60aa75dea3072fbc07ae6d7d856b5dc5f4eee88854f5b4abf7b680ef8bc50f601c54601b54604051808381526020018281526020019250505060405180910390a2610ff26134cd565b600081111561103c578173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561103b57600080fd5b5b5050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601c5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156110c957600080fd5b6000601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156111e357600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359ae340e6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b151561127157600080fd5b6102c65a03f1151561128257600080fd5b50505060405180519050506001905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156112ef57600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2fde38b826040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15156113ab57600080fd5b6102c65a03f115156113bc57600080fd5b50505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561141d57600080fd5b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561147f57600080fd5b7f5b6b431d4476a211bb7d41c20d1aab9ae2321deee0d20be3d9fc9b1093fa6e3d816040518082815260200191505060405180910390a150565b600d5481565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b60149054906101000a900467ffffffffffffffff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60105481565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561164b57600080fd5b600754831115801561165d5750600083115b151561166857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515156116a457600080fd5b60065442101515156116b557600080fd5b6116ce6116c442600454613496565b6301e13380613533565b9050600554421180156116e2575060018110155b1561171957600060028190555060016301e133806001830302600554010160048190555060016301e1338060045401036005819055505b60035483600254011115151561172e57600080fd5b8260025401600281905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1985856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561180657600080fd5b6102c65a03f1151561181757600080fd5b50505060405180519050506118378360075461349690919063ffffffff16565b6007819055505092915050565b600080600080601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156118a257600080fd5b601960149054906101000a900460ff1615156118bd57600080fd5b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561191557600080fd5b6000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118015611a4357506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515611a2657600080fd5b6102c65a03f11515611a3757600080fd5b50505060405180519050115b1515611a4e57600080fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635052abad336000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515611b1357600080fd5b6102c65a03f11515611b2457600080fd5b505050604051805190509350611b8284601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134af90919063ffffffff16565b9250600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166322eb2c02336000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515611c4957600080fd5b6102c65a03f11515611c5a57600080fd5b505050604051805190509150611c79828561349690919063ffffffff16565b9050611c8e828461349690919063ffffffff16565b9250611ce2601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461349690919063ffffffff16565b925080601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166389afcb44336000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515611e3257600080fd5b6102c65a03f11515611e4357600080fd5b50505060405180519050503373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501515611e8e57600080fd5b7fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d3384604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a150505050565b600e5481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f6057600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636494cde16040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b1515611fe557600080fd5b6102c65a03f11515611ff657600080fd5b505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561205657600080fd5b6001601960146101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156120d057600080fd5b8161218e600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b151561216257600080fd5b6102c65a03f1151561217357600080fd5b5050506040518051905060085461349690919063ffffffff16565b1015151561219b57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156121d757600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1984846000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156122a457600080fd5b6102c65a03f115156122b557600080fd5b50505060405180519050506001905092915050565b600c5481565b60115481565b601960149054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561234457600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663829c34286040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b15156123c957600080fd5b6102c65a03f115156123da57600080fd5b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561243c57600080fd5b6000601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156124f457600080fd5b6000601960146101000a81548160ff021916908315150217905550565b7fcd18c1683fcd49ac98a87d5fd5a82c5f375b4061b05f491883e0edc785b694d13334604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561260057600080fd5b6001601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b601e5481565b600f5481565b601b5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156126d057600080fd5b6001601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b60008060008061275d61274f601d548761354e90919063ffffffff16565b670de0b6b3a7640000613533565b925066016bcc41e90000831015156127945761278d61278660198561354e90919063ffffffff16565b6064613533565b915061286d565b65886c98b76000831015156127c8576127c16127ba60148561354e90919063ffffffff16565b6064613533565b915061286c565b6548c273950000831015156127fc576127f56127ee600f8561354e90919063ffffffff16565b6064613533565b915061286b565b65246139ca80008310151561283057612829612822600a8561354e90919063ffffffff16565b6064613533565b915061286a565b6506d23ad5f800831015156128645761285d61285660058561354e90919063ffffffff16565b6064613533565b9150612869565b600091505b5b5b5b5b601560009054906101000a900460ff16156128a7576128a0612899600f8561354e90919063ffffffff16565b6064613533565b90506128e3565b600f54600c54016009541115156128dd576128d66128cf600a8561354e90919063ffffffff16565b6064613533565b90506128e2565b600090505b5b81818401019250829350505050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156129ce57600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637d64bcb46000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515612a5c57600080fd5b6102c65a03f11515612a6d57600080fd5b50505060405180519050506001905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612ada57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612b1657600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612c3157600080fd5b6001601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6000806000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612cf357600080fd5b601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515612d4b57600080fd5b6000601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118015612e7957506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231876000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515612e5c57600080fd5b6102c65a03f11515612e6d57600080fd5b50505060405180519050115b1515612e8457600080fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635052abad866000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515612f4957600080fd5b6102c65a03f11515612f5a57600080fd5b505050604051805190509350612fb884601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134af90919063ffffffff16565b9250600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166322eb2c02866000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561307f57600080fd5b6102c65a03f1151561309057600080fd5b5050506040518051905091506130af828561349690919063ffffffff16565b90506130c4828461349690919063ffffffff16565b9250613118601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461349690919063ffffffff16565b925080601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166389afcb44866000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561326857600080fd5b6102c65a03f1151561327957600080fd5b50505060405180519050508473ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f1935050505015156132c457600080fd5b7fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d8584604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000600c546009541015801561337c5750600d5460095411155b93506010543410159250600061339f601e5460115461349690919063ffffffff16565b11915060019050600e54600c540160095411151561347157601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613453575060145434601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540111155b90506001601560006101000a81548160ff0219169083151502179055505b83801561347b5750825b80156134845750815b801561348d5750805b94505050505090565b60008282111515156134a457fe5b818303905092915050565b60008082840190508381101515156134c357fe5b8091505092915050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc601c549081150290604051600060405180830381858888f19350505050151561353157600080fd5b565b600080828481151561354157fe5b0490508091505092915050565b60008060008414156135635760009150613582565b828402905082848281151561357457fe5b0414151561357e57fe5b8091505b50929150505600a165627a7a7230582071127c85b92702d6d0c5fe80727977a8e4311e46cc42ad295f17e581ae5a71580029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000005a9d3848000000000000000000000000000000000000000000000000000000005abf9b68000000000000000000000000000000000000000000000000000002bb30ed607b000000000000000000000000d75496c0a6a36308cfda58e317ab97ea46b8f6b5000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000005675bb890d6be43c000000000000000000000000002008e3057bd734e10ad13c9eae45ff132abc1722000000000000000000000000ef90b9fea51c983827ba3b79c3c19a9751fc7e990000000000000000000000001eb48c64ad71837a6ed57e4a2dab88173c8330540000000000000000000000000000000000000000000000000000000000004650000000000000000000000000000000000000000000000000000000000002bf20000000000000000000000000000000000000000000000000089aaeb710be0000000000000000000000000000000000000000000000000000000000005d6b0a00000000000000000000000000000000000000000000000000000000005c2aad80
-----Decoded View---------------
Arg [0] : _startTime (uint256): 1520253000
Arg [1] : _endTime (uint256): 1522506600
Arg [2] : _ETHtoZWeirate (uint256): 3003003003003
Arg [3] : _wallet (address): 0xd75496c0a6a36308cfda58E317aB97eA46b8F6B5
Arg [4] : _minTransAmount (uint256): 100000000000000000
Arg [5] : _ethCap (uint256): 1594903515352841600000
Arg [6] : tokenAddress (address): 0x2008e3057BD734e10AD13c9EAe45Ff132aBc1722
Arg [7] : presaleAddress (address): 0xef90b9fEA51C983827BA3b79c3c19A9751fc7e99
Arg [8] : tempMngrAddress (address): 0x1eb48c64AD71837A6ed57E4a2daB88173c833054
Arg [9] : _goldListPeriod (uint256): 18000
Arg [10] : _postGoldPeriod (uint256): 180000
Arg [11] : _goldPeriodCap (uint256): 620000000000000000
Arg [12] : _vestedMintStartTime (uint256): 1567296000
Arg [13] : _calenderYearStart (uint256): 1546300800
-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000005a9d3848
Arg [1] : 000000000000000000000000000000000000000000000000000000005abf9b68
Arg [2] : 000000000000000000000000000000000000000000000000000002bb30ed607b
Arg [3] : 000000000000000000000000d75496c0a6a36308cfda58e317ab97ea46b8f6b5
Arg [4] : 000000000000000000000000000000000000000000000000016345785d8a0000
Arg [5] : 00000000000000000000000000000000000000000000005675bb890d6be43c00
Arg [6] : 0000000000000000000000002008e3057bd734e10ad13c9eae45ff132abc1722
Arg [7] : 000000000000000000000000ef90b9fea51c983827ba3b79c3c19a9751fc7e99
Arg [8] : 0000000000000000000000001eb48c64ad71837a6ed57e4a2dab88173c833054
Arg [9] : 0000000000000000000000000000000000000000000000000000000000004650
Arg [10] : 000000000000000000000000000000000000000000000000000000000002bf20
Arg [11] : 000000000000000000000000000000000000000000000000089aaeb710be0000
Arg [12] : 000000000000000000000000000000000000000000000000000000005d6b0a00
Arg [13] : 000000000000000000000000000000000000000000000000000000005c2aad80
Swarm Source
bzzr://71127c85b92702d6d0c5fe80727977a8e4311e46cc42ad295f17e581ae5a7158
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.