ERC-20
Overview
Max Total Supply
0
Holders
1
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 0 Decimals)
Balance
1,120,000,000,000Value
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
GLACrowdsale
Compiler Version
v0.4.15+commit.bbb8e64f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2017-10-14 */ pragma solidity ^0.4.15; /** * @title IWingsAdapter * * WINGS DAO Price Discovery & Promotion Pre-Beta https://www.wings.ai * * #created 04/10/2017 * #author Frank Bonnet */ contract IWingsAdapter { /** * Get the total raised amount of Ether * * Can only increase, meaning if you withdraw ETH from the wallet, it should be not modified (you can use two fields * to keep one with a total accumulated amount) amount of ETH in contract and totalCollected for total amount of ETH collected * * @return Total raised Ether amount */ function totalCollected() constant returns (uint); } /** * @title IWhitelist * * Whitelist authentication interface * * #created 04/10/2017 * #author Frank Bonnet */ contract IWhitelist { /** * Authenticate * * Returns whether `_account` is on the whitelist * * @param _account The account to authenticate * @return whether `_account` is successfully authenticated */ function authenticate(address _account) constant returns (bool); } /** * @title Token retrieve interface * * Allows tokens to be retrieved from a contract * * #created 29/09/2017 * #author Frank Bonnet */ contract ITokenRetreiver { /** * Extracts tokens from the contract * * @param _tokenContract The address of ERC20 compatible token */ function retreiveTokens(address _tokenContract); } contract Owned { // The address of the account that is the current owner address internal owner; /** * The publisher is the inital owner */ function Owned() { owner = msg.sender; } /** * Access is restricted to the current owner */ modifier only_owner() { require(msg.sender == owner); _; } } /** * @title ERC20 compatible token interface * * Implements ERC 20 Token standard: https://github.com/ethereum/EIPs/issues/20 * - Short address attack fix * * #created 29/09/2017 * #author Frank Bonnet */ contract IToken { /** * Get the total supply of tokens * * @return The total supply */ function totalSupply() constant returns (uint); /** * Get balance of `_owner` * * @param _owner The address from which the balance will be retrieved * @return The balance */ function balanceOf(address _owner) constant returns (uint); /** * Send `_value` token to `_to` from `msg.sender` * * @param _to The address of the recipient * @param _value The amount of token to be transferred * @return Whether the transfer was successful or not */ function transfer(address _to, uint _value) returns (bool); /** * Send `_value` token to `_to` from `_from` on the condition it is approved by `_from` * * @param _from The address of the sender * @param _to The address of the recipient * @param _value The amount of token to be transferred * @return Whether the transfer was successful or not */ function transferFrom(address _from, address _to, uint _value) returns (bool); /** * `msg.sender` approves `_spender` to spend `_value` tokens * * @param _spender The address of the account able to transfer the tokens * @param _value The amount of tokens to be approved for transfer * @return Whether the approval was successful or not */ function approve(address _spender, uint _value) returns (bool); /** * Get the amount of remaining tokens that `_spender` is allowed to spend from `_owner` * * @param _owner The address of the account owning tokens * @param _spender The address of the account able to transfer the tokens * @return Amount of remaining tokens allowed to spent */ function allowance(address _owner, address _spender) constant returns (uint); } /** * @title ManagedToken interface * * Adds the following functionallity to the basic ERC20 token * - Locking * - Issuing * * #created 29/09/2017 * #author Frank Bonnet */ contract IManagedToken is IToken { /** * Returns true if the token is locked * * @return Whether the token is locked */ function isLocked() constant returns (bool); /** * Unlocks the token so that the transferring of value is enabled * * @return Whether the unlocking was successful or not */ function unlock() returns (bool); /** * Issues `_value` new tokens to `_to` * * @param _to The address to which the tokens will be issued * @param _value The amount of new tokens to issue * @return Whether the tokens where sucessfully issued or not */ function issue(address _to, uint _value) returns (bool); } /** * @title ICrowdsale * * Base crowdsale interface to manage the sale of * an ERC20 token * * #created 29/09/2017 * #author Frank Bonnet */ contract ICrowdsale { /** * Returns true if the contract is currently in the presale phase * * @return True if in presale phase */ function isInPresalePhase() constant returns (bool); /** * Returns true if `_beneficiary` has a balance allocated * * @param _beneficiary The account that the balance is allocated for * @param _releaseDate The date after which the balance can be withdrawn * @return True if there is a balance that belongs to `_beneficiary` */ function hasBalance(address _beneficiary, uint _releaseDate) constant returns (bool); /** * Get the allocated token balance of `_owner` * * @param _owner The address from which the allocated token balance will be retrieved * @return The allocated token balance */ function balanceOf(address _owner) constant returns (uint); /** * Get the allocated eth balance of `_owner` * * @param _owner The address from which the allocated eth balance will be retrieved * @return The allocated eth balance */ function ethBalanceOf(address _owner) constant returns (uint); /** * Get invested and refundable balance of `_owner` (only contributions during the ICO phase are registered) * * @param _owner The address from which the refundable balance will be retrieved * @return The invested refundable balance */ function refundableEthBalanceOf(address _owner) constant returns (uint); /** * Returns the rate and bonus release date * * @param _phase The phase to use while determining the rate * @param _volume The amount wei used to determine what volume multiplier to use * @return The rate used in `_phase` multiplied by the corresponding volume multiplier */ function getRate(uint _phase, uint _volume) constant returns (uint); /** * Convert `_wei` to an amount in tokens using * the `_rate` * * @param _wei amount of wei to convert * @param _rate rate to use for the conversion * @return Amount in tokens */ function toTokens(uint _wei, uint _rate) constant returns (uint); /** * Withdraw allocated tokens */ function withdrawTokens(); /** * Withdraw allocated ether */ function withdrawEther(); /** * Refund in the case of an unsuccessful crowdsale. The * crowdsale is considered unsuccessful if minAmount was * not raised before end of the crowdsale */ function refund(); /** * Receive Eth and issue tokens to the sender */ function () payable; } /** * @title Crowdsale * * Abstract base crowdsale contract that manages the sale of * an ERC20 token * * #created 29/09/2017 * #author Frank Bonnet */ contract Crowdsale is ICrowdsale, Owned { enum Stages { Deploying, Deployed, InProgress, Ended } struct Balance { uint eth; uint tokens; uint index; } struct Percentage { uint eth; uint tokens; bool overwriteReleaseDate; uint fixedReleaseDate; uint index; } struct Payout { uint percentage; uint vestingPeriod; } struct Phase { uint rate; uint end; uint bonusReleaseDate; bool useVolumeMultiplier; } struct VolumeMultiplier { uint rateMultiplier; uint bonusReleaseDateMultiplier; } // Crowdsale details uint public baseRate; uint public minAmount; uint public maxAmount; uint public minAcceptedAmount; uint public minAmountPresale; uint public maxAmountPresale; uint public minAcceptedAmountPresale; // Company address address public beneficiary; // Denominators uint internal percentageDenominator; uint internal tokenDenominator; // Crowdsale state uint public start; uint public presaleEnd; uint public crowdsaleEnd; uint public raised; uint public allocatedEth; uint public allocatedTokens; Stages public stage = Stages.Deploying; // Token contract IManagedToken public token; // Invested balances mapping (address => uint) private balances; // Alocated balances mapping (address => mapping(uint => Balance)) private allocated; mapping(address => uint[]) private allocatedIndex; // Stakeholders mapping (address => Percentage) private stakeholderPercentages; address[] private stakeholderPercentagesIndex; Payout[] private stakeholdersPayouts; // Crowdsale phases Phase[] private phases; // Volume multipliers mapping (uint => VolumeMultiplier) private volumeMultipliers; uint[] private volumeMultiplierThresholds; /** * Throw if at stage other than current stage * * @param _stage expected stage to test for */ modifier at_stage(Stages _stage) { require(stage == _stage); _; } /** * Only after crowdsaleEnd plus `_time` * * @param _time Time to pass */ modifier only_after(uint _time) { require(now > crowdsaleEnd + _time); _; } /** * Only after crowdsale */ modifier only_after_crowdsale() { require(now > crowdsaleEnd); _; } /** * Throw if sender is not beneficiary */ modifier only_beneficiary() { require(beneficiary == msg.sender); _; } /** * Allows the implementing contract to validate a * contributing account * * @param _contributor Address that is being validated * @return Wheter the contributor is accepted or not */ function isAcceptedContributor(address _contributor) internal constant returns (bool); /** * Setup the crowdsale * * @param _start The timestamp of the start date * @param _token The token that is sold * @param _tokenDenominator The token amount of decimals that the token uses * @param _percentageDenominator The percision of percentages * @param _minAmount The min cap for the ICO * @param _maxAmount The max cap for the ICO * @param _minAcceptedAmount The lowest accepted amount during the ICO phase * @param _minAmountPresale The min cap for the presale * @param _maxAmountPresale The max cap for the presale * @param _minAcceptedAmountPresale The lowest accepted amount during the presale phase */ function Crowdsale(uint _start, address _token, uint _tokenDenominator, uint _percentageDenominator, uint _minAmount, uint _maxAmount, uint _minAcceptedAmount, uint _minAmountPresale, uint _maxAmountPresale, uint _minAcceptedAmountPresale) { token = IManagedToken(_token); tokenDenominator = _tokenDenominator; percentageDenominator = _percentageDenominator; start = _start; minAmount = _minAmount; maxAmount = _maxAmount; minAcceptedAmount = _minAcceptedAmount; minAmountPresale = _minAmountPresale; maxAmountPresale = _maxAmountPresale; minAcceptedAmountPresale = _minAcceptedAmountPresale; } /** * Setup rates and phases * * @param _baseRate The rate without bonus * @param _phaseRates The rates for each phase * @param _phasePeriods The periods that each phase lasts (first phase is the presale phase) * @param _phaseBonusLockupPeriods The lockup period that each phase lasts * @param _phaseUsesVolumeMultiplier Wheter or not volume bonusses are used in the respective phase */ function setupPhases(uint _baseRate, uint[] _phaseRates, uint[] _phasePeriods, uint[] _phaseBonusLockupPeriods, bool[] _phaseUsesVolumeMultiplier) public only_owner at_stage(Stages.Deploying) { baseRate = _baseRate; presaleEnd = start + _phasePeriods[0]; // First phase is expected to be the presale phase crowdsaleEnd = start; // Plus the sum of the rate phases for (uint i = 0; i < _phaseRates.length; i++) { crowdsaleEnd += _phasePeriods[i]; phases.push(Phase(_phaseRates[i], crowdsaleEnd, 0, _phaseUsesVolumeMultiplier[i])); } for (uint ii = 0; ii < _phaseRates.length; ii++) { if (_phaseBonusLockupPeriods[ii] > 0) { phases[ii].bonusReleaseDate = crowdsaleEnd + _phaseBonusLockupPeriods[ii]; } } } /** * Setup stakeholders * * @param _stakeholders The addresses of the stakeholders (first stakeholder is the beneficiary) * @param _stakeholderEthPercentages The eth percentages of the stakeholders * @param _stakeholderTokenPercentages The token percentages of the stakeholders * @param _stakeholderTokenPayoutOverwriteReleaseDates Wheter the vesting period is overwritten for the respective stakeholder * @param _stakeholderTokenPayoutFixedReleaseDates The vesting period after which the whole percentage of the tokens is released to the respective stakeholder * @param _stakeholderTokenPayoutPercentages The percentage of the tokens that is released at the respective date * @param _stakeholderTokenPayoutVestingPeriods The vesting period after which the respective percentage of the tokens is released */ function setupStakeholders(address[] _stakeholders, uint[] _stakeholderEthPercentages, uint[] _stakeholderTokenPercentages, bool[] _stakeholderTokenPayoutOverwriteReleaseDates, uint[] _stakeholderTokenPayoutFixedReleaseDates, uint[] _stakeholderTokenPayoutPercentages, uint[] _stakeholderTokenPayoutVestingPeriods) public only_owner at_stage(Stages.Deploying) { beneficiary = _stakeholders[0]; // First stakeholder is expected to be the beneficiary for (uint i = 0; i < _stakeholders.length; i++) { stakeholderPercentagesIndex.push(_stakeholders[i]); stakeholderPercentages[_stakeholders[i]] = Percentage( _stakeholderEthPercentages[i], _stakeholderTokenPercentages[i], _stakeholderTokenPayoutOverwriteReleaseDates[i], _stakeholderTokenPayoutFixedReleaseDates[i], i); } // Percentages add up to 100 for (uint ii = 0; ii < _stakeholderTokenPayoutPercentages.length; ii++) { stakeholdersPayouts.push(Payout(_stakeholderTokenPayoutPercentages[ii], _stakeholderTokenPayoutVestingPeriods[ii])); } } /** * Setup volume multipliers * * @param _volumeMultiplierRates The rates will be multiplied by this value (denominated by 4) * @param _volumeMultiplierLockupPeriods The lockup periods will be multiplied by this value (denominated by 4) * @param _volumeMultiplierThresholds The volume thresholds for each respective multiplier */ function setupVolumeMultipliers(uint[] _volumeMultiplierRates, uint[] _volumeMultiplierLockupPeriods, uint[] _volumeMultiplierThresholds) public only_owner at_stage(Stages.Deploying) { require(phases.length > 0); volumeMultiplierThresholds = _volumeMultiplierThresholds; for (uint i = 0; i < volumeMultiplierThresholds.length; i++) { volumeMultipliers[volumeMultiplierThresholds[i]] = VolumeMultiplier(_volumeMultiplierRates[i], _volumeMultiplierLockupPeriods[i]); } } /** * After calling the deploy function the crowdsale * rules become immutable */ function deploy() public only_owner at_stage(Stages.Deploying) { require(phases.length > 0); require(stakeholderPercentagesIndex.length > 0); stage = Stages.Deployed; } /** * Prove that beneficiary is able to sign transactions * and start the crowdsale */ function confirmBeneficiary() public only_beneficiary at_stage(Stages.Deployed) { stage = Stages.InProgress; } /** * Returns true if the contract is currently in the presale phase * * @return True if in presale phase */ function isInPresalePhase() public constant returns (bool) { return stage == Stages.InProgress && now >= start && now <= presaleEnd; } /** * Returns true if `_beneficiary` has a balance allocated * * @param _beneficiary The account that the balance is allocated for * @param _releaseDate The date after which the balance can be withdrawn * @return True if there is a balance that belongs to `_beneficiary` */ function hasBalance(address _beneficiary, uint _releaseDate) public constant returns (bool) { return allocatedIndex[_beneficiary].length > 0 && _releaseDate == allocatedIndex[_beneficiary][allocated[_beneficiary][_releaseDate].index]; } /** * Get the allocated token balance of `_owner` * * @param _owner The address from which the allocated token balance will be retrieved * @return The allocated token balance */ function balanceOf(address _owner) public constant returns (uint) { uint sum = 0; for (uint i = 0; i < allocatedIndex[_owner].length; i++) { sum += allocated[_owner][allocatedIndex[_owner][i]].tokens; } return sum; } /** * Get the allocated eth balance of `_owner` * * @param _owner The address from which the allocated eth balance will be retrieved * @return The allocated eth balance */ function ethBalanceOf(address _owner) public constant returns (uint) { uint sum = 0; for (uint i = 0; i < allocatedIndex[_owner].length; i++) { sum += allocated[_owner][allocatedIndex[_owner][i]].eth; } return sum; } /** * Get invested and refundable balance of `_owner` (only contributions during the ICO phase are registered) * * @param _owner The address from which the refundable balance will be retrieved * @return The invested refundable balance */ function refundableEthBalanceOf(address _owner) public constant returns (uint) { return now > crowdsaleEnd && raised < minAmount ? balances[_owner] : 0; } /** * Returns the current phase based on the current time * * @return The index of the current phase */ function getCurrentPhase() public constant returns (uint found) { for (uint i = 0; i < phases.length; i++) { if (now <= phases[i].end) { return i; break; } } return phases.length; // Does not exist } /** * Returns the rate and bonus release date * * @param _phase The phase to use while determining the rate * @param _volume The amount wei used to determin what volume multiplier to use * @return The rate used in `_phase` multiplied by the corresponding volume multiplier */ function getRate(uint _phase, uint _volume) public constant returns (uint) { uint rate = 0; if (stage == Stages.InProgress && now >= start) { Phase storage phase = phases[_phase]; rate = phase.rate; // Find volume multiplier if (phase.useVolumeMultiplier && volumeMultiplierThresholds.length > 0 && _volume >= volumeMultiplierThresholds[0]) { for (uint i = volumeMultiplierThresholds.length; i > 0; i--) { if (_volume >= volumeMultiplierThresholds[i - 1]) { VolumeMultiplier storage multiplier = volumeMultipliers[volumeMultiplierThresholds[i - 1]]; rate += phase.rate * multiplier.rateMultiplier / percentageDenominator; break; } } } } return rate; } /** * Get distribution data based on the current phase and * the volume in wei that is being distributed * * @param _phase The current crowdsale phase * @param _volume The amount wei used to determine what volume multiplier to use * @return Volumes and corresponding release dates */ function getDistributionData(uint _phase, uint _volume) internal constant returns (uint[], uint[]) { Phase storage phase = phases[_phase]; uint remainingVolume = _volume; bool usingMultiplier = false; uint[] memory volumes = new uint[](1); uint[] memory releaseDates = new uint[](1); // Find volume multipliers if (phase.useVolumeMultiplier && volumeMultiplierThresholds.length > 0 && _volume >= volumeMultiplierThresholds[0]) { uint phaseReleasePeriod = phase.bonusReleaseDate - crowdsaleEnd; for (uint i = volumeMultiplierThresholds.length; i > 0; i--) { if (_volume >= volumeMultiplierThresholds[i - 1]) { if (!usingMultiplier) { volumes = new uint[](i + 1); releaseDates = new uint[](i + 1); usingMultiplier = true; } VolumeMultiplier storage multiplier = volumeMultipliers[volumeMultiplierThresholds[i - 1]]; uint releaseDate = phase.bonusReleaseDate + phaseReleasePeriod * multiplier.bonusReleaseDateMultiplier / percentageDenominator; uint volume = remainingVolume - volumeMultiplierThresholds[i - 1]; // Store increment volumes[i] = volume; releaseDates[i] = releaseDate; remainingVolume -= volume; } } } // Store increment volumes[0] = remainingVolume; releaseDates[0] = phase.bonusReleaseDate; return (volumes, releaseDates); } /** * Convert `_wei` to an amount in tokens using * the `_rate` * * @param _wei amount of wei to convert * @param _rate rate to use for the conversion * @return Amount in tokens */ function toTokens(uint _wei, uint _rate) public constant returns (uint) { return _wei * _rate * tokenDenominator / 1 ether; } /** * Function to end the crowdsale by setting * the stage to Ended */ function endCrowdsale() public at_stage(Stages.InProgress) { require(now > crowdsaleEnd || raised >= maxAmount); require(raised >= minAmount); stage = Stages.Ended; // Unlock token if (!token.unlock()) { revert(); } // Allocate tokens (no allocation can be done after this period) uint totalTokenSupply = token.totalSupply() + allocatedTokens; for (uint i = 0; i < stakeholdersPayouts.length; i++) { Payout storage p = stakeholdersPayouts[i]; _allocateStakeholdersTokens(totalTokenSupply * p.percentage / percentageDenominator, now + p.vestingPeriod); } // Allocate remaining ETH _allocateStakeholdersEth(this.balance - allocatedEth, 0); } /** * Withdraw allocated tokens */ function withdrawTokens() public { uint tokensToSend = 0; for (uint i = 0; i < allocatedIndex[msg.sender].length; i++) { uint releaseDate = allocatedIndex[msg.sender][i]; if (releaseDate <= now) { Balance storage b = allocated[msg.sender][releaseDate]; tokensToSend += b.tokens; b.tokens = 0; } } if (tokensToSend > 0) { allocatedTokens -= tokensToSend; if (!token.issue(msg.sender, tokensToSend)) { revert(); } } } /** * Withdraw allocated ether */ function withdrawEther() public { uint ethToSend = 0; for (uint i = 0; i < allocatedIndex[msg.sender].length; i++) { uint releaseDate = allocatedIndex[msg.sender][i]; if (releaseDate <= now) { Balance storage b = allocated[msg.sender][releaseDate]; ethToSend += b.eth; b.eth = 0; } } if (ethToSend > 0) { allocatedEth -= ethToSend; if (!msg.sender.send(ethToSend)) { revert(); } } } /** * Refund in the case of an unsuccessful crowdsale. The * crowdsale is considered unsuccessful if minAmount was * not raised before end of the crowdsale */ function refund() public only_after_crowdsale at_stage(Stages.InProgress) { require(raised < minAmount); uint receivedAmount = balances[msg.sender]; balances[msg.sender] = 0; if (receivedAmount > 0 && !msg.sender.send(receivedAmount)) { balances[msg.sender] = receivedAmount; } } /** * Failsafe and clean-up mechanism */ function destroy() public only_beneficiary only_after(2 years) { selfdestruct(beneficiary); } /** * Receive Eth and issue tokens to the sender */ function contribute() public payable { _handleTransaction(msg.sender, msg.value); } /** * Receive Eth and issue tokens to the sender * * This function requires that msg.sender is not a contract. This is required because it's * not possible for a contract to specify a gas amount when calling the (internal) send() * function. Solidity imposes a maximum amount of gas (2300 gas at the time of writing) * * Contracts can call the contribute() function instead */ function () payable { require(msg.sender == tx.origin); _handleTransaction(msg.sender, msg.value); } /** * Handle incoming transactions * * @param _sender Transaction sender * @param _received */ function _handleTransaction(address _sender, uint _received) private at_stage(Stages.InProgress) { // Crowdsale is active require(now >= start && now <= crowdsaleEnd); // Whitelist check require(isAcceptedContributor(_sender)); // When in presale phase bool presalePhase = isInPresalePhase(); require(!presalePhase || _received >= minAcceptedAmountPresale); require(!presalePhase || raised < maxAmountPresale); // When in ico phase require(presalePhase || _received >= minAcceptedAmount); require(presalePhase || raised >= minAmountPresale); require(presalePhase || raised < maxAmount); uint acceptedAmount; if (presalePhase && raised + _received > maxAmountPresale) { acceptedAmount = maxAmountPresale - raised; } else if (raised + _received > maxAmount) { acceptedAmount = maxAmount - raised; } else { acceptedAmount = _received; } raised += acceptedAmount; if (presalePhase) { // During the presale phase - Non refundable _allocateStakeholdersEth(acceptedAmount, 0); } else { // During the ICO phase - 100% refundable balances[_sender] += acceptedAmount; } // Distribute tokens uint tokensToIssue = 0; uint phase = getCurrentPhase(); var rate = getRate(phase, acceptedAmount); var (volumes, releaseDates) = getDistributionData(phase, acceptedAmount); // Allocate tokens for (uint i = 0; i < volumes.length; i++) { var tokensAtCurrentRate = toTokens(volumes[i], rate); if (rate > baseRate && releaseDates[i] > now) { uint bonusTokens = tokensAtCurrentRate / rate * (rate - baseRate); _allocateTokens(_sender, bonusTokens, releaseDates[i]); tokensToIssue += tokensAtCurrentRate - bonusTokens; } else { tokensToIssue += tokensAtCurrentRate; } } // Issue tokens if (tokensToIssue > 0 && !token.issue(_sender, tokensToIssue)) { revert(); } // Refund due to max cap hit if (_received - acceptedAmount > 0 && !_sender.send(_received - acceptedAmount)) { revert(); } } /** * Allocate ETH * * @param _beneficiary The account to alocate the eth for * @param _amount The amount of ETH to allocate * @param _releaseDate The date after which the eth can be withdrawn */ function _allocateEth(address _beneficiary, uint _amount, uint _releaseDate) private { if (hasBalance(_beneficiary, _releaseDate)) { allocated[_beneficiary][_releaseDate].eth += _amount; } else { allocated[_beneficiary][_releaseDate] = Balance( _amount, 0, allocatedIndex[_beneficiary].push(_releaseDate) - 1); } allocatedEth += _amount; } /** * Allocate Tokens * * @param _beneficiary The account to allocate the tokens for * @param _amount The amount of tokens to allocate * @param _releaseDate The date after which the tokens can be withdrawn */ function _allocateTokens(address _beneficiary, uint _amount, uint _releaseDate) private { if (hasBalance(_beneficiary, _releaseDate)) { allocated[_beneficiary][_releaseDate].tokens += _amount; } else { allocated[_beneficiary][_releaseDate] = Balance( 0, _amount, allocatedIndex[_beneficiary].push(_releaseDate) - 1); } allocatedTokens += _amount; } /** * Allocate ETH for stakeholders * * @param _amount The amount of ETH to allocate * @param _releaseDate The date after which the eth can be withdrawn */ function _allocateStakeholdersEth(uint _amount, uint _releaseDate) private { for (uint i = 0; i < stakeholderPercentagesIndex.length; i++) { Percentage storage p = stakeholderPercentages[stakeholderPercentagesIndex[i]]; if (p.eth > 0) { _allocateEth(stakeholderPercentagesIndex[i], _amount * p.eth / percentageDenominator, _releaseDate); } } } /** * Allocate Tokens for stakeholders * * @param _amount The amount of tokens created * @param _releaseDate The date after which the tokens can be withdrawn (unless overwitten) */ function _allocateStakeholdersTokens(uint _amount, uint _releaseDate) private { for (uint i = 0; i < stakeholderPercentagesIndex.length; i++) { Percentage storage p = stakeholderPercentages[stakeholderPercentagesIndex[i]]; if (p.tokens > 0) { _allocateTokens( stakeholderPercentagesIndex[i], _amount * p.tokens / percentageDenominator, p.overwriteReleaseDate ? p.fixedReleaseDate : _releaseDate); } } } } /** * @title GLACrowdsale * * Gladius is the decentralized solution to protect against DDoS attacks by allowing you to connect * with protection pools near you to provide better protection and accelerate your content. With an easy * to use interface as well as powerful insight tools, Gladius enables anyone to protect and accelerate * their website. Visit https://gladius.io/ * * #created 29/09/2017 * #author Frank Bonnet */ contract GLACrowdsale is Crowdsale, ITokenRetreiver, IWingsAdapter { /** * Whitelist used for authentication */ IWhitelist private whitelist; /** * Setup the crowdsale * * @param _whitelist The address of the whitelist authenticator * @param _start The timestamp of the start date * @param _token The token that is sold * @param _tokenDenominator The token amount of decimals that the token uses * @param _percentageDenominator The precision of percentages * @param _minAmount The min cap for the ICO * @param _maxAmount The max cap for the ICO * @param _minAcceptedAmount The lowest accepted amount during the ICO phase * @param _minAmountPresale The min cap for the presale * @param _maxAmountPresale The max cap for the presale * @param _minAcceptedAmountPresale The lowest accepted amount during the presale phase */ function GLACrowdsale(address _whitelist, uint _start, address _token, uint _tokenDenominator, uint _percentageDenominator, uint _minAmount, uint _maxAmount, uint _minAcceptedAmount, uint _minAmountPresale, uint _maxAmountPresale, uint _minAcceptedAmountPresale) Crowdsale(_start, _token, _tokenDenominator, _percentageDenominator, _minAmount, _maxAmount, _minAcceptedAmount, _minAmountPresale, _maxAmountPresale, _minAcceptedAmountPresale) { whitelist = IWhitelist(_whitelist); } /** * Wings integration - Get the total raised amount of Ether * * Can only increased, means if you withdraw ETH from the wallet, should be not modified (you can use two fields * to keep one with a total accumulated amount) amount of ETH in contract and totalCollected for total amount of ETH collected * * @return Total raised Ether amount */ function totalCollected() public constant returns (uint) { return raised; } /** * Allows the implementing contract to validate a * contributing account * * @param _contributor Address that is being validated * @return Wheter the contributor is accepted or not */ function isAcceptedContributor(address _contributor) internal constant returns (bool) { return whitelist.authenticate(_contributor); } /** * Failsafe mechanism * * Allows beneficary to retreive tokens from the contract * * @param _tokenContract The address of ERC20 compatible token */ function retreiveTokens(address _tokenContract) public only_beneficiary { IToken tokenInstance = IToken(_tokenContract); // Retreive tokens from our token contract ITokenRetreiver(token).retreiveTokens(_tokenContract); // Retreive tokens from crowdsale contract uint tokenBalance = tokenInstance.balanceOf(this); if (tokenBalance > 0) { tokenInstance.transfer(beneficiary, tokenBalance); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"allocatedTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"minAmountPresale","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_phase","type":"uint256"},{"name":"_volume","type":"uint256"}],"name":"getRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"baseRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"endCrowdsale","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"presaleEnd","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_baseRate","type":"uint256"},{"name":"_phaseRates","type":"uint256[]"},{"name":"_phasePeriods","type":"uint256[]"},{"name":"_phaseBonusLockupPeriods","type":"uint256[]"},{"name":"_phaseUsesVolumeMultiplier","type":"bool[]"}],"name":"setupPhases","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"beneficiary","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_wei","type":"uint256"},{"name":"_rate","type":"uint256"}],"name":"toTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"crowdsaleEnd","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"refund","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"maxAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"ethBalanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"withdrawEther","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"minAcceptedAmountPresale","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"deploy","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"destroy","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"withdrawTokens","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_stakeholders","type":"address[]"},{"name":"_stakeholderEthPercentages","type":"uint256[]"},{"name":"_stakeholderTokenPercentages","type":"uint256[]"},{"name":"_stakeholderTokenPayoutOverwriteReleaseDates","type":"bool[]"},{"name":"_stakeholderTokenPayoutFixedReleaseDates","type":"uint256[]"},{"name":"_stakeholderTokenPayoutPercentages","type":"uint256[]"},{"name":"_stakeholderTokenPayoutVestingPeriods","type":"uint256[]"}],"name":"setupStakeholders","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"refundableEthBalanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_tokenContract","type":"address"}],"name":"retreiveTokens","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_volumeMultiplierRates","type":"uint256[]"},{"name":"_volumeMultiplierLockupPeriods","type":"uint256[]"},{"name":"_volumeMultiplierThresholds","type":"uint256[]"}],"name":"setupVolumeMultipliers","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"minAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"confirmBeneficiary","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getCurrentPhase","outputs":[{"name":"found","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"allocatedEth","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"maxAmountPresale","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_beneficiary","type":"address"},{"name":"_releaseDate","type":"uint256"}],"name":"hasBalance","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"start","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"stage","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"contribute","outputs":[],"payable":true,"type":"function"},{"constant":true,"inputs":[],"name":"totalCollected","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"raised","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"minAcceptedAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"isInPresalePhase","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"inputs":[{"name":"_whitelist","type":"address"},{"name":"_start","type":"uint256"},{"name":"_token","type":"address"},{"name":"_tokenDenominator","type":"uint256"},{"name":"_percentageDenominator","type":"uint256"},{"name":"_minAmount","type":"uint256"},{"name":"_maxAmount","type":"uint256"},{"name":"_minAcceptedAmount","type":"uint256"},{"name":"_minAmountPresale","type":"uint256"},{"name":"_maxAmountPresale","type":"uint256"},{"name":"_minAcceptedAmountPresale","type":"uint256"}],"payable":false,"type":"constructor"},{"payable":true,"type":"fallback"}]
Contract Creation Code
6060604052601180546000919060ff19166001835b0217905550341561002457600080fd5b6040516101608061282083398101604052808051919060200180519190602001805191906020018051919060200180519190602001805191906020018051919060200180519190602001805191906020018051919060200180519150505b898989898989898989895b5b60008054600160a060020a03191633600160a060020a03161790555b6011805461010060a860020a031916610100600160a060020a038c1602179055600a8890556009879055600b8a90556002869055600385905560048490556005839055600682905560078190555b505050505050505050508a601b60006101000a815481600160a060020a030219169083600160a060020a031602179055505b50505050505050505050505b6126db806101456000396000f300606060405236156101b05763ffffffff60e060020a6000350416622f956981146101de5780630d6f849b146102035780630d70e7e3146102285780631f68f20a146102535780632095f2d414610278578063229f3e291461028d5780632d92b1c0146102b257806338af3eed146103c85780634942edf9146103f75780634d9aa42414610422578063590e1ae3146104475780635f48f3931461045c57806370a08231146104815780637252bbf2146104b25780637362377b146104e357806376c82e92146104f8578063775c300c1461051d57806383197ef0146105325780638d8f2adb146105475780638ec521a81461055c57806392099fdb1461072d57806396a049251461075e578063984c14ac1461077f5780639b2cb5d8146108505780639c5e902314610875578063a3a40ea51461088a578063b19a4540146108af578063b946fab1146108d4578063bd51d5d0146108f9578063be9a65551461092f578063c040e6b814610954578063d7bb99ba1461098b578063e29eb83614610995578063f0ea4bfc146109ba578063f1d841f1146109df578063f96c166c14610a04578063fc0c546a14610a2b575b5b32600160a060020a031633600160a060020a03161415156101d157600080fd5b6101db3334610a5a565b5b005b34156101e957600080fd5b6101f1610d93565b60405190815260200160405180910390f35b341561020e57600080fd5b6101f1610d99565b60405190815260200160405180910390f35b341561023357600080fd5b6101f1600435602435610d9f565b60405190815260200160405180910390f35b341561025e57600080fd5b6101f1610ee6565b60405190815260200160405180910390f35b341561028357600080fd5b6101db610eec565b005b341561029857600080fd5b6101f16110b6565b60405190815260200160405180910390f35b34156102bd57600080fd5b6101db600480359060446024803590810190830135806020818102016040519081016040528093929190818152602001838360200280828437820191505050505050919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437509496506110bc95505050505050565b005b34156103d357600080fd5b6103db611289565b604051600160a060020a03909116815260200160405180910390f35b341561040257600080fd5b6101f1600435602435611298565b60405190815260200160405180910390f35b341561042d57600080fd5b6101f16112b7565b60405190815260200160405180910390f35b341561045257600080fd5b6101db6112bd565b005b341561046757600080fd5b6101f1611376565b60405190815260200160405180910390f35b341561048c57600080fd5b6101f1600160a060020a036004351661137c565b60405190815260200160405180910390f35b34156104bd57600080fd5b6101f1600160a060020a036004351661140c565b60405190815260200160405180910390f35b34156104ee57600080fd5b6101db61149c565b005b341561050357600080fd5b6101f1611583565b60405190815260200160405180910390f35b341561052857600080fd5b6101db611589565b005b341561053d57600080fd5b6101db6115fd565b005b341561055257600080fd5b6101db611641565b005b341561056757600080fd5b6101db600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284378201915050505050509190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284375094965061178595505050505050565b005b341561073857600080fd5b6101f1600160a060020a0360043516611a07565b60405190815260200160405180910390f35b341561076957600080fd5b6101db600160a060020a0360043516611a4a565b005b341561078a57600080fd5b6101db60046024813581810190830135806020818102016040519081016040528093929190818152602001838360200280828437820191505050505050919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843750949650611bd895505050505050565b005b341561085b57600080fd5b6101f1611cdf565b60405190815260200160405180910390f35b341561088057600080fd5b6101db611ce5565b005b341561089557600080fd5b6101f1611d3e565b60405190815260200160405180910390f35b34156108ba57600080fd5b6101f1611d91565b60405190815260200160405180910390f35b34156108df57600080fd5b6101f1611d97565b60405190815260200160405180910390f35b341561090457600080fd5b61091b600160a060020a0360043516602435611d9d565b604051901515815260200160405180910390f35b341561093a57600080fd5b6101f1611e15565b60405190815260200160405180910390f35b341561095f57600080fd5b610967611e1b565b6040518082600381111561097757fe5b60ff16815260200191505060405180910390f35b6101db611e24565b005b34156109a057600080fd5b6101f1611e31565b60405190815260200160405180910390f35b34156109c557600080fd5b6101f1611e38565b60405190815260200160405180910390f35b34156109ea57600080fd5b6101f1611e3e565b60405190815260200160405180910390f35b3415610a0f57600080fd5b61091b611e44565b604051901515815260200160405180910390f35b3415610a3657600080fd5b6103db611e7d565b604051600160a060020a03909116815260200160405180910390f35b6000806000806000610a6a612517565b610a72612517565b600080806002805b60115460ff166003811115610a8b57fe5b14610a9557600080fd5b600b544210158015610aa95750600d544211155b1515610ab457600080fd5b610abd8d611e91565b1515610ac857600080fd5b610ad0611e44565b9a508a1580610ae157506007548c10155b1515610aec57600080fd5b8a1580610afc5750600654600e54105b1515610b0757600080fd5b8a80610b1557506004548c10155b1515610b2057600080fd5b8a80610b305750600554600e5410155b1515610b3b57600080fd5b8a80610b4a5750600354600e54105b1515610b5557600080fd5b8a8015610b6757506006548c600e5401115b15610b7a57600e54600654039950610b9a565b6003548c600e54011115610b9657600e54600354039950610b9a565b8b99505b5b600e80548b0190558a15610bb957610bb48a6000611f0e565b610bd8565b600160a060020a038d16600090815260126020526040902080548b0190555b60009850610be4611d3e565b9750610bf0888b610d9f565b9650610bfc888b611fde565b95509550600093505b8551841015610caa57610c2d868581518110610c1d57fe5b9060200190602002015188611298565b925060015487118015610c54575042858581518110610c4857fe5b90602001906020020151115b15610c995760015487038784811515610c6957fe5b04029150610c8d8d83878781518110610c7e57fe5b90602001906020020151612266565b81830389019850610c9e565b978201975b5b600190930192610c05565b600089118015610d3657506011546101009004600160a060020a031663867904b48e8b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610d1957600080fd5b6102c65a03f11515610d2a57600080fd5b50505060405180519050155b15610d4057600080fd5b60008a8d03118015610d785750600160a060020a038d168a8d0380156108fc0290604051600060405180830381858888f19350505050155b15610d8257600080fd5b5b5b50505050505050505050505050565b60105481565b60055481565b60008080808060025b60115460ff166003811115610db957fe5b148015610dc85750600b544210155b15610ed6576018805488908110610ddb57fe5b906000526020600020906004020160005b508054600382015490955090935060ff168015610e0c5750601a54600090115b8015610e365750601a80546000908110610e2257fe5b906000526020600020900160005b50548610155b15610ed657601a5491505b6000821115610ed657601a80546000198401908110610e5c57fe5b906000526020600020900160005b50548610610ec95760196000601a60018503815481101515610e8857fe5b906000526020600020900160005b5054815260200190815260200160002090506009548160000154846000015402811515610ebf57fe5b0484019350610ed6565b5b60001990910190610e41565b5b5b8394505b5050505092915050565b60015481565b600080806002805b60115460ff166003811115610f0557fe5b14610f0f57600080fd5b600d54421180610f235750600354600e5410155b1515610f2e57600080fd5b600254600e541015610f3f57600080fd5b601180546003919060ff19166001835b02179055506011546101009004600160a060020a031663a69df4b56000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610fa157600080fd5b6102c65a03f11515610fb257600080fd5b505050604051805190501515610fc757600080fd5b6010546011546101009004600160a060020a03166318160ddd6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561101757600080fd5b6102c65a03f1151561102857600080fd5b50505060405180519050019350600092505b60175483101561109557601780548490811061105257fe5b906000526020600020906002020160005b5091506110896009548360000154860281151561107c57fe5b048360010154420161234b565b5b60019092019161103a565b6110ae600f5430600160a060020a031631036000611f0e565b5b5b50505050565b600c5481565b60008054819033600160a060020a039081169116146110da57600080fd5b6000805b60115460ff1660038111156110ef57fe5b146110f957600080fd5b60018890558560008151811061110b57fe5b90602001906020020151600b54908101600c55600d55600092505b86518310156112045785838151811061113b57fe5b90602001906020020151600d8054909101905560188054600181016111608382612529565b916000526020600020906004020160005b6080604051908101604052808b888151811061118957fe5b906020019060200201518152602001600d548152602001600081526020018888815181106111b357fe5b90602001906020020151151590529190508151815560208201518160010155604082015181600201556060820151600391909101805460ff191691151591909117905550505b600190920191611126565b600091505b865182101561127c57600085838151811061122057fe5b9060200190602002015111156112705784828151811061123c57fe5b90602001906020020151600d540160188381548110151561125957fe5b906000526020600020906004020160005b50600201555b5b600190910190611209565b5b5b505b50505050505050565b600854600160a060020a031681565b600a54600090670de0b6b3a764000090848402025b0490505b92915050565b600d5481565b600d5460009042116112ce57600080fd5b6002805b60115460ff1660038111156112e357fe5b146112ed57600080fd5b600254600e54106112fd57600080fd5b600160a060020a033316600090815260126020526040812080549082905592508211801561134e5750600160a060020a03331682156108fc0283604051600060405180830381858888f19350505050155b1561136f57600160a060020a03331660009081526012602052604090208290555b5b5b505b50565b60035481565b600080805b600160a060020a03841660009081526014602052604090205481101561140157600160a060020a0384166000908152601360209081526040808320601490925282208054919291849081106113d257fe5b906000526020600020900160005b5054815260200190815260200160002060010154820191505b600101611381565b8192505b5050919050565b600080805b600160a060020a03841660009081526014602052604090205481101561140157600160a060020a03841660009081526013602090815260408083206014909252822080549192918490811061146257fe5b906000526020600020900160005b5054815260200190815260200160002060000154820191505b600101611411565b8192505b5050919050565b60008080805b600160a060020a03331660009081526014602052604090205483101561153857600160a060020a03331660009081526014602052604090208054849081106114e657fe5b906000526020600020900160005b5054915042821161152c5750600160a060020a0333166000908152601360209081526040808320848452909152812080549181559301925b5b6001909201916114a2565b60008411156110ae57600f80548590039055600160a060020a03331684156108fc0285604051600060405180830381858888f1935050505015156110ae57600080fd5b5b5b50505050565b60075481565b60005433600160a060020a039081169116146115a457600080fd5b6000805b60115460ff1660038111156115b957fe5b146115c357600080fd5b601854600090116115d357600080fd5b601654600090116115e357600080fd5b601180546001919060ff191682805b02179055505b5b505b565b60085433600160a060020a0390811691161461161857600080fd5b600d546303c26700908101421161162e57600080fd5b600854600160a060020a0316ff5b5b505b565b60008080805b600160a060020a0333166000908152601460205260409020548310156116e157600160a060020a033316600090815260146020526040902080548490811061168b57fe5b906000526020600020900160005b505491504282116116d55750600160a060020a033316600090815260136020908152604080832084845290915281206001810180549290559301925b5b600190920191611647565b60008411156110ae576010805485900390556011546101009004600160a060020a031663867904b4338660006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561175757600080fd5b6102c65a03f1151561176857600080fd5b5050506040518051905015156110ae57600080fd5b5b5b50505050565b60008054819033600160a060020a039081169116146117a357600080fd5b6000805b60115460ff1660038111156117b857fe5b146117c257600080fd5b896000815181106117cf57fe5b906020019060200201516008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055600092505b8951831015611969576016805460018101611826838261255b565b916000526020600020900160005b8c868151811061184057fe5b90602001906020020151909190916101000a815481600160a060020a030219169083600160a060020a031602179055505060a0604051908101604052808a858151811061188957fe5b9060200190602002015181526020018985815181106118a457fe5b9060200190602002015181526020018885815181106118bf57fe5b90602001906020020151151581526020018785815181106118dc57fe5b906020019060200201518152602001849052601560008c86815181106118fe57fe5b90602001906020020151600160a060020a0316815260208101919091526040016000208151815560208201518160010155604082015160028201805460ff1916911515919091179055606082015181600301556080820151600490910155505b60019092019161180b565b600091505b84518210156119f85760178054600181016119898382612585565b916000526020600020906002020160005b60408051908101604052808987815181106119b157fe5b9060200190602002015181526020018887815181106119cc57fe5b90602001906020020151905291905081518155602082015181600101555050505b60019091019061196e565b5b5b505b505050505050505050565b6000600d5442118015611a1d5750600254600e54105b611a28576000611a42565b600160a060020a0382166000908152601260205260409020545b90505b919050565b600854600090819033600160a060020a03908116911614611a6a57600080fd5b6011548392506101009004600160a060020a03166396a049258360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515611ac257600080fd5b6102c65a03f11515611ad357600080fd5b50505081600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611b2d57600080fd5b6102c65a03f11515611b3e57600080fd5b50505060405180519150506000811115611bd157600854600160a060020a038084169163a9059cbb91168360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611bb557600080fd5b6102c65a03f11515611bc657600080fd5b505050604051805150505b5b5b505050565b6000805433600160a060020a03908116911614611bf457600080fd5b6000805b60115460ff166003811115611c0957fe5b14611c1357600080fd5b60185460009011611c2357600080fd5b601a838051611c369291602001906125b7565b50600091505b601a54821015611cd5576040805190810160405280868481518110611c5d57fe5b906020019060200201518152602001858481518110611c7857fe5b9060200190602002015181525060196000601a85815481101515611c9857fe5b906000526020600020900160005b50548152602001908152602001600020600082015181556020820151600190910155505b600190910190611c3c565b5b5b505b50505050565b60025481565b60085433600160a060020a03908116911614611d0057600080fd5b6001805b60115460ff166003811115611d1557fe5b14611d1f57600080fd5b601180546002919060ff19166001836115f2565b02179055505b5b505b565b6000805b601854811015611d87576018805482908110611d5a57fe5b906000526020600020906004020160005b50600101544211611d7e57809150611d8d565b5b600101611d42565b60185491505b5090565b600f5481565b60065481565b600160a060020a0382166000908152601460205260408120548190118015611e0c5750600160a060020a0383166000908152601460209081526040808320601383528184208685529092529091206002015481548110611df957fe5b906000526020600020900160005b505482145b90505b92915050565b600b5481565b60115460ff1681565b6115fb3334610a5a565b5b565b600e545b90565b600e5481565b60045481565b600060025b60115460ff166003811115611e5a57fe5b148015611e695750600b544210155b8015611e775750600c544211155b90505b90565b6011546101009004600160a060020a031681565b601b54600090600160a060020a03166308e0d29d83836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611eec57600080fd5b6102c65a03f11515611efd57600080fd5b50505060405180519150505b919050565b6000805b6016548210156110ae5760156000601684815481101515611f2f57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a0316600160a060020a031681526020019081526020016000209050600081600001541115611fca57611fca601683815481101515611f9057fe5b906000526020600020900160005b9054906101000a9004600160a060020a031660095483600001548702811515611fc357fe5b0485612435565b5b5b600190910190611f12565b5b50505050565b611fe6612517565b611fee612517565b6000806000611ffb612517565b612003612517565b600080600080600060188e81548110151561201a57fe5b906000526020600020906004020160005b5099508c98506000975060016040518059106120445750595b908082528060200260200182016040525b50965060016040518059106120675750595b908082528060200260200182016040525b5060038b015490965060ff1680156120935750601a54600090115b80156120bd5750601a805460009081106120a957fe5b906000526020600020900160005b50548d10155b1561221557600d5460028b0154601a54919003955093505b600084111561221557601a805460001986019081106120f057fe5b906000526020600020900160005b50548d106122085787151561215c578360010160405180591061211e5750595b908082528060200260200182016040525b509650836001016040518059106121435750595b908082528060200260200182016040525b509550600197505b60196000601a6001870381548110151561217257fe5b906000526020600020900160005b505481526020019081526020016000209250600954836001015486028115156121a557fe5b048a60020154019150601a600185038154811015156121c057fe5b906000526020600020900160005b505489039050808785815181106121e157fe5b60209081029091010152818685815181106121f857fe5b6020908102909101015297889003975b5b600019909301926120d5565b5b888760008151811061222457fe5b6020908102909101015260028a01548660008151811061224057fe5b906020019060200201818152505086869b509b505b505050505050505050509250929050565b6122708382611d9d565b156122a657600160a060020a0383166000908152601360209081526040808320848452909152902060010180548301905561233d565b6060604051908101604090815260008083526020808401869052600160a060020a038716825260149052819020805491830191600191908083016122ea838261255b565b916000526020600020900160005b50859055039052600160a060020a0384166000908152601360209081526040808320858452909152902081518155602082015181600101556040820151600290910155505b60108054830190555b505050565b6000805b6016548210156110ae576015600060168481548110151561236c57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a0316600160a060020a031681526020019081526020016000209050600081600101541115612421576124216016838154811015156123cd57fe5b906000526020600020900160005b9054906101000a9004600160a060020a03166009548360010154870281151561240057fe5b60028501549190049060ff16612416578561241c565b83600301545b612266565b5b5b60019091019061234f565b5b50505050565b61243f8382611d9d565b1561247257600160a060020a03831660009081526013602090815260408083208484529091529020805483019055612509565b6060604051908101604090815283825260006020808401829052600160a060020a038716825260149052819020805491830191600191908083016124b6838261255b565b916000526020600020900160005b50859055039052600160a060020a0384166000908152601360209081526040808320858452909152902081518155602082015181600101556040820151600290910155505b600f8054830190555b505050565b60206040519081016040526000815290565b815481835581811511611bd157600402816004028360005260206000209182019101611bd1919061262d565b5b505050565b815481835581811511611bd157600083815260209020611bd1918101908301612667565b5b505050565b815481835581811511611bd157600202816002028360005260206000209182019101611bd19190612688565b5b505050565b8280548282559060005260206000209081019282156125f2579160200282015b828111156125f25782518255916020019190600101906125d7565b5b50611d8d929150612667565b5090565b815481835581811511611bd157600083815260209020611bd1918101908301612667565b5b505050565b611e3591905b80821115611d8d57600080825560018201819055600282015560038101805460ff19169055600401612633565b5090565b90565b611e3591905b80821115611d8d576000815560010161266d565b5090565b90565b611e3591905b80821115611d8d576000808255600182015560020161268e565b5090565b905600a165627a7a7230582088589bbc8a1182cefb50c4693e5524aedacb4305fa2b46df8862e07546c2eb0900290000000000000000000000001a0987a5c068ec6ce645bb897d8de4c82281deae0000000000000000000000000000000000000000000000000000000059e34dc00000000000000000000000004632d1c31c5d9e28e84eae0173b3afc9aca81ac80000000000000000000000000000000000000000000000000000000005f5e1000000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000175d539876d15c000000000000000000000000000000000000000000000000012413c9365097c380000000000000000000000000000000000000000000000000000008e1bc9bf040000000000000000000000000000000000000000000000000175d539876d15c000000000000000000000000000000000000000000000000009209e49b284be1c0000000000000000000000000000000000000000000000000001d7d843dc3b480000
Deployed Bytecode
0x606060405236156101b05763ffffffff60e060020a6000350416622f956981146101de5780630d6f849b146102035780630d70e7e3146102285780631f68f20a146102535780632095f2d414610278578063229f3e291461028d5780632d92b1c0146102b257806338af3eed146103c85780634942edf9146103f75780634d9aa42414610422578063590e1ae3146104475780635f48f3931461045c57806370a08231146104815780637252bbf2146104b25780637362377b146104e357806376c82e92146104f8578063775c300c1461051d57806383197ef0146105325780638d8f2adb146105475780638ec521a81461055c57806392099fdb1461072d57806396a049251461075e578063984c14ac1461077f5780639b2cb5d8146108505780639c5e902314610875578063a3a40ea51461088a578063b19a4540146108af578063b946fab1146108d4578063bd51d5d0146108f9578063be9a65551461092f578063c040e6b814610954578063d7bb99ba1461098b578063e29eb83614610995578063f0ea4bfc146109ba578063f1d841f1146109df578063f96c166c14610a04578063fc0c546a14610a2b575b5b32600160a060020a031633600160a060020a03161415156101d157600080fd5b6101db3334610a5a565b5b005b34156101e957600080fd5b6101f1610d93565b60405190815260200160405180910390f35b341561020e57600080fd5b6101f1610d99565b60405190815260200160405180910390f35b341561023357600080fd5b6101f1600435602435610d9f565b60405190815260200160405180910390f35b341561025e57600080fd5b6101f1610ee6565b60405190815260200160405180910390f35b341561028357600080fd5b6101db610eec565b005b341561029857600080fd5b6101f16110b6565b60405190815260200160405180910390f35b34156102bd57600080fd5b6101db600480359060446024803590810190830135806020818102016040519081016040528093929190818152602001838360200280828437820191505050505050919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437509496506110bc95505050505050565b005b34156103d357600080fd5b6103db611289565b604051600160a060020a03909116815260200160405180910390f35b341561040257600080fd5b6101f1600435602435611298565b60405190815260200160405180910390f35b341561042d57600080fd5b6101f16112b7565b60405190815260200160405180910390f35b341561045257600080fd5b6101db6112bd565b005b341561046757600080fd5b6101f1611376565b60405190815260200160405180910390f35b341561048c57600080fd5b6101f1600160a060020a036004351661137c565b60405190815260200160405180910390f35b34156104bd57600080fd5b6101f1600160a060020a036004351661140c565b60405190815260200160405180910390f35b34156104ee57600080fd5b6101db61149c565b005b341561050357600080fd5b6101f1611583565b60405190815260200160405180910390f35b341561052857600080fd5b6101db611589565b005b341561053d57600080fd5b6101db6115fd565b005b341561055257600080fd5b6101db611641565b005b341561056757600080fd5b6101db600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284378201915050505050509190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284375094965061178595505050505050565b005b341561073857600080fd5b6101f1600160a060020a0360043516611a07565b60405190815260200160405180910390f35b341561076957600080fd5b6101db600160a060020a0360043516611a4a565b005b341561078a57600080fd5b6101db60046024813581810190830135806020818102016040519081016040528093929190818152602001838360200280828437820191505050505050919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843750949650611bd895505050505050565b005b341561085b57600080fd5b6101f1611cdf565b60405190815260200160405180910390f35b341561088057600080fd5b6101db611ce5565b005b341561089557600080fd5b6101f1611d3e565b60405190815260200160405180910390f35b34156108ba57600080fd5b6101f1611d91565b60405190815260200160405180910390f35b34156108df57600080fd5b6101f1611d97565b60405190815260200160405180910390f35b341561090457600080fd5b61091b600160a060020a0360043516602435611d9d565b604051901515815260200160405180910390f35b341561093a57600080fd5b6101f1611e15565b60405190815260200160405180910390f35b341561095f57600080fd5b610967611e1b565b6040518082600381111561097757fe5b60ff16815260200191505060405180910390f35b6101db611e24565b005b34156109a057600080fd5b6101f1611e31565b60405190815260200160405180910390f35b34156109c557600080fd5b6101f1611e38565b60405190815260200160405180910390f35b34156109ea57600080fd5b6101f1611e3e565b60405190815260200160405180910390f35b3415610a0f57600080fd5b61091b611e44565b604051901515815260200160405180910390f35b3415610a3657600080fd5b6103db611e7d565b604051600160a060020a03909116815260200160405180910390f35b6000806000806000610a6a612517565b610a72612517565b600080806002805b60115460ff166003811115610a8b57fe5b14610a9557600080fd5b600b544210158015610aa95750600d544211155b1515610ab457600080fd5b610abd8d611e91565b1515610ac857600080fd5b610ad0611e44565b9a508a1580610ae157506007548c10155b1515610aec57600080fd5b8a1580610afc5750600654600e54105b1515610b0757600080fd5b8a80610b1557506004548c10155b1515610b2057600080fd5b8a80610b305750600554600e5410155b1515610b3b57600080fd5b8a80610b4a5750600354600e54105b1515610b5557600080fd5b8a8015610b6757506006548c600e5401115b15610b7a57600e54600654039950610b9a565b6003548c600e54011115610b9657600e54600354039950610b9a565b8b99505b5b600e80548b0190558a15610bb957610bb48a6000611f0e565b610bd8565b600160a060020a038d16600090815260126020526040902080548b0190555b60009850610be4611d3e565b9750610bf0888b610d9f565b9650610bfc888b611fde565b95509550600093505b8551841015610caa57610c2d868581518110610c1d57fe5b9060200190602002015188611298565b925060015487118015610c54575042858581518110610c4857fe5b90602001906020020151115b15610c995760015487038784811515610c6957fe5b04029150610c8d8d83878781518110610c7e57fe5b90602001906020020151612266565b81830389019850610c9e565b978201975b5b600190930192610c05565b600089118015610d3657506011546101009004600160a060020a031663867904b48e8b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610d1957600080fd5b6102c65a03f11515610d2a57600080fd5b50505060405180519050155b15610d4057600080fd5b60008a8d03118015610d785750600160a060020a038d168a8d0380156108fc0290604051600060405180830381858888f19350505050155b15610d8257600080fd5b5b5b50505050505050505050505050565b60105481565b60055481565b60008080808060025b60115460ff166003811115610db957fe5b148015610dc85750600b544210155b15610ed6576018805488908110610ddb57fe5b906000526020600020906004020160005b508054600382015490955090935060ff168015610e0c5750601a54600090115b8015610e365750601a80546000908110610e2257fe5b906000526020600020900160005b50548610155b15610ed657601a5491505b6000821115610ed657601a80546000198401908110610e5c57fe5b906000526020600020900160005b50548610610ec95760196000601a60018503815481101515610e8857fe5b906000526020600020900160005b5054815260200190815260200160002090506009548160000154846000015402811515610ebf57fe5b0484019350610ed6565b5b60001990910190610e41565b5b5b8394505b5050505092915050565b60015481565b600080806002805b60115460ff166003811115610f0557fe5b14610f0f57600080fd5b600d54421180610f235750600354600e5410155b1515610f2e57600080fd5b600254600e541015610f3f57600080fd5b601180546003919060ff19166001835b02179055506011546101009004600160a060020a031663a69df4b56000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610fa157600080fd5b6102c65a03f11515610fb257600080fd5b505050604051805190501515610fc757600080fd5b6010546011546101009004600160a060020a03166318160ddd6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561101757600080fd5b6102c65a03f1151561102857600080fd5b50505060405180519050019350600092505b60175483101561109557601780548490811061105257fe5b906000526020600020906002020160005b5091506110896009548360000154860281151561107c57fe5b048360010154420161234b565b5b60019092019161103a565b6110ae600f5430600160a060020a031631036000611f0e565b5b5b50505050565b600c5481565b60008054819033600160a060020a039081169116146110da57600080fd5b6000805b60115460ff1660038111156110ef57fe5b146110f957600080fd5b60018890558560008151811061110b57fe5b90602001906020020151600b54908101600c55600d55600092505b86518310156112045785838151811061113b57fe5b90602001906020020151600d8054909101905560188054600181016111608382612529565b916000526020600020906004020160005b6080604051908101604052808b888151811061118957fe5b906020019060200201518152602001600d548152602001600081526020018888815181106111b357fe5b90602001906020020151151590529190508151815560208201518160010155604082015181600201556060820151600391909101805460ff191691151591909117905550505b600190920191611126565b600091505b865182101561127c57600085838151811061122057fe5b9060200190602002015111156112705784828151811061123c57fe5b90602001906020020151600d540160188381548110151561125957fe5b906000526020600020906004020160005b50600201555b5b600190910190611209565b5b5b505b50505050505050565b600854600160a060020a031681565b600a54600090670de0b6b3a764000090848402025b0490505b92915050565b600d5481565b600d5460009042116112ce57600080fd5b6002805b60115460ff1660038111156112e357fe5b146112ed57600080fd5b600254600e54106112fd57600080fd5b600160a060020a033316600090815260126020526040812080549082905592508211801561134e5750600160a060020a03331682156108fc0283604051600060405180830381858888f19350505050155b1561136f57600160a060020a03331660009081526012602052604090208290555b5b5b505b50565b60035481565b600080805b600160a060020a03841660009081526014602052604090205481101561140157600160a060020a0384166000908152601360209081526040808320601490925282208054919291849081106113d257fe5b906000526020600020900160005b5054815260200190815260200160002060010154820191505b600101611381565b8192505b5050919050565b600080805b600160a060020a03841660009081526014602052604090205481101561140157600160a060020a03841660009081526013602090815260408083206014909252822080549192918490811061146257fe5b906000526020600020900160005b5054815260200190815260200160002060000154820191505b600101611411565b8192505b5050919050565b60008080805b600160a060020a03331660009081526014602052604090205483101561153857600160a060020a03331660009081526014602052604090208054849081106114e657fe5b906000526020600020900160005b5054915042821161152c5750600160a060020a0333166000908152601360209081526040808320848452909152812080549181559301925b5b6001909201916114a2565b60008411156110ae57600f80548590039055600160a060020a03331684156108fc0285604051600060405180830381858888f1935050505015156110ae57600080fd5b5b5b50505050565b60075481565b60005433600160a060020a039081169116146115a457600080fd5b6000805b60115460ff1660038111156115b957fe5b146115c357600080fd5b601854600090116115d357600080fd5b601654600090116115e357600080fd5b601180546001919060ff191682805b02179055505b5b505b565b60085433600160a060020a0390811691161461161857600080fd5b600d546303c26700908101421161162e57600080fd5b600854600160a060020a0316ff5b5b505b565b60008080805b600160a060020a0333166000908152601460205260409020548310156116e157600160a060020a033316600090815260146020526040902080548490811061168b57fe5b906000526020600020900160005b505491504282116116d55750600160a060020a033316600090815260136020908152604080832084845290915281206001810180549290559301925b5b600190920191611647565b60008411156110ae576010805485900390556011546101009004600160a060020a031663867904b4338660006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561175757600080fd5b6102c65a03f1151561176857600080fd5b5050506040518051905015156110ae57600080fd5b5b5b50505050565b60008054819033600160a060020a039081169116146117a357600080fd5b6000805b60115460ff1660038111156117b857fe5b146117c257600080fd5b896000815181106117cf57fe5b906020019060200201516008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055600092505b8951831015611969576016805460018101611826838261255b565b916000526020600020900160005b8c868151811061184057fe5b90602001906020020151909190916101000a815481600160a060020a030219169083600160a060020a031602179055505060a0604051908101604052808a858151811061188957fe5b9060200190602002015181526020018985815181106118a457fe5b9060200190602002015181526020018885815181106118bf57fe5b90602001906020020151151581526020018785815181106118dc57fe5b906020019060200201518152602001849052601560008c86815181106118fe57fe5b90602001906020020151600160a060020a0316815260208101919091526040016000208151815560208201518160010155604082015160028201805460ff1916911515919091179055606082015181600301556080820151600490910155505b60019092019161180b565b600091505b84518210156119f85760178054600181016119898382612585565b916000526020600020906002020160005b60408051908101604052808987815181106119b157fe5b9060200190602002015181526020018887815181106119cc57fe5b90602001906020020151905291905081518155602082015181600101555050505b60019091019061196e565b5b5b505b505050505050505050565b6000600d5442118015611a1d5750600254600e54105b611a28576000611a42565b600160a060020a0382166000908152601260205260409020545b90505b919050565b600854600090819033600160a060020a03908116911614611a6a57600080fd5b6011548392506101009004600160a060020a03166396a049258360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515611ac257600080fd5b6102c65a03f11515611ad357600080fd5b50505081600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611b2d57600080fd5b6102c65a03f11515611b3e57600080fd5b50505060405180519150506000811115611bd157600854600160a060020a038084169163a9059cbb91168360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611bb557600080fd5b6102c65a03f11515611bc657600080fd5b505050604051805150505b5b5b505050565b6000805433600160a060020a03908116911614611bf457600080fd5b6000805b60115460ff166003811115611c0957fe5b14611c1357600080fd5b60185460009011611c2357600080fd5b601a838051611c369291602001906125b7565b50600091505b601a54821015611cd5576040805190810160405280868481518110611c5d57fe5b906020019060200201518152602001858481518110611c7857fe5b9060200190602002015181525060196000601a85815481101515611c9857fe5b906000526020600020900160005b50548152602001908152602001600020600082015181556020820151600190910155505b600190910190611c3c565b5b5b505b50505050565b60025481565b60085433600160a060020a03908116911614611d0057600080fd5b6001805b60115460ff166003811115611d1557fe5b14611d1f57600080fd5b601180546002919060ff19166001836115f2565b02179055505b5b505b565b6000805b601854811015611d87576018805482908110611d5a57fe5b906000526020600020906004020160005b50600101544211611d7e57809150611d8d565b5b600101611d42565b60185491505b5090565b600f5481565b60065481565b600160a060020a0382166000908152601460205260408120548190118015611e0c5750600160a060020a0383166000908152601460209081526040808320601383528184208685529092529091206002015481548110611df957fe5b906000526020600020900160005b505482145b90505b92915050565b600b5481565b60115460ff1681565b6115fb3334610a5a565b5b565b600e545b90565b600e5481565b60045481565b600060025b60115460ff166003811115611e5a57fe5b148015611e695750600b544210155b8015611e775750600c544211155b90505b90565b6011546101009004600160a060020a031681565b601b54600090600160a060020a03166308e0d29d83836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611eec57600080fd5b6102c65a03f11515611efd57600080fd5b50505060405180519150505b919050565b6000805b6016548210156110ae5760156000601684815481101515611f2f57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a0316600160a060020a031681526020019081526020016000209050600081600001541115611fca57611fca601683815481101515611f9057fe5b906000526020600020900160005b9054906101000a9004600160a060020a031660095483600001548702811515611fc357fe5b0485612435565b5b5b600190910190611f12565b5b50505050565b611fe6612517565b611fee612517565b6000806000611ffb612517565b612003612517565b600080600080600060188e81548110151561201a57fe5b906000526020600020906004020160005b5099508c98506000975060016040518059106120445750595b908082528060200260200182016040525b50965060016040518059106120675750595b908082528060200260200182016040525b5060038b015490965060ff1680156120935750601a54600090115b80156120bd5750601a805460009081106120a957fe5b906000526020600020900160005b50548d10155b1561221557600d5460028b0154601a54919003955093505b600084111561221557601a805460001986019081106120f057fe5b906000526020600020900160005b50548d106122085787151561215c578360010160405180591061211e5750595b908082528060200260200182016040525b509650836001016040518059106121435750595b908082528060200260200182016040525b509550600197505b60196000601a6001870381548110151561217257fe5b906000526020600020900160005b505481526020019081526020016000209250600954836001015486028115156121a557fe5b048a60020154019150601a600185038154811015156121c057fe5b906000526020600020900160005b505489039050808785815181106121e157fe5b60209081029091010152818685815181106121f857fe5b6020908102909101015297889003975b5b600019909301926120d5565b5b888760008151811061222457fe5b6020908102909101015260028a01548660008151811061224057fe5b906020019060200201818152505086869b509b505b505050505050505050509250929050565b6122708382611d9d565b156122a657600160a060020a0383166000908152601360209081526040808320848452909152902060010180548301905561233d565b6060604051908101604090815260008083526020808401869052600160a060020a038716825260149052819020805491830191600191908083016122ea838261255b565b916000526020600020900160005b50859055039052600160a060020a0384166000908152601360209081526040808320858452909152902081518155602082015181600101556040820151600290910155505b60108054830190555b505050565b6000805b6016548210156110ae576015600060168481548110151561236c57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a0316600160a060020a031681526020019081526020016000209050600081600101541115612421576124216016838154811015156123cd57fe5b906000526020600020900160005b9054906101000a9004600160a060020a03166009548360010154870281151561240057fe5b60028501549190049060ff16612416578561241c565b83600301545b612266565b5b5b60019091019061234f565b5b50505050565b61243f8382611d9d565b1561247257600160a060020a03831660009081526013602090815260408083208484529091529020805483019055612509565b6060604051908101604090815283825260006020808401829052600160a060020a038716825260149052819020805491830191600191908083016124b6838261255b565b916000526020600020900160005b50859055039052600160a060020a0384166000908152601360209081526040808320858452909152902081518155602082015181600101556040820151600290910155505b600f8054830190555b505050565b60206040519081016040526000815290565b815481835581811511611bd157600402816004028360005260206000209182019101611bd1919061262d565b5b505050565b815481835581811511611bd157600083815260209020611bd1918101908301612667565b5b505050565b815481835581811511611bd157600202816002028360005260206000209182019101611bd19190612688565b5b505050565b8280548282559060005260206000209081019282156125f2579160200282015b828111156125f25782518255916020019190600101906125d7565b5b50611d8d929150612667565b5090565b815481835581811511611bd157600083815260209020611bd1918101908301612667565b5b505050565b611e3591905b80821115611d8d57600080825560018201819055600282015560038101805460ff19169055600401612633565b5090565b90565b611e3591905b80821115611d8d576000815560010161266d565b5090565b90565b611e3591905b80821115611d8d576000808255600182015560020161268e565b5090565b905600a165627a7a7230582088589bbc8a1182cefb50c4693e5524aedacb4305fa2b46df8862e07546c2eb090029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000001a0987a5c068ec6ce645bb897d8de4c82281deae0000000000000000000000000000000000000000000000000000000059e34dc00000000000000000000000004632d1c31c5d9e28e84eae0173b3afc9aca81ac80000000000000000000000000000000000000000000000000000000005f5e1000000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000175d539876d15c000000000000000000000000000000000000000000000000012413c9365097c380000000000000000000000000000000000000000000000000000008e1bc9bf040000000000000000000000000000000000000000000000000175d539876d15c000000000000000000000000000000000000000000000000009209e49b284be1c0000000000000000000000000000000000000000000000000001d7d843dc3b480000
-----Decoded View---------------
Arg [0] : _whitelist (address): 0x1a0987A5c068EC6ce645bB897d8DE4c82281deAe
Arg [1] : _start (uint256): 1508068800
Arg [2] : _token (address): 0x4632d1c31c5D9E28E84eAE0173B3aFc9acA81aC8
Arg [3] : _tokenDenominator (uint256): 100000000
Arg [4] : _percentageDenominator (uint256): 10000
Arg [5] : _minAmount (uint256): 6896000000000000000000
Arg [6] : _maxAmount (uint256): 86206000000000000000000
Arg [7] : _minAcceptedAmount (uint256): 40000000000000000
Arg [8] : _minAmountPresale (uint256): 6896000000000000000000
Arg [9] : _maxAmountPresale (uint256): 43103000000000000000000
Arg [10] : _minAcceptedAmountPresale (uint256): 34000000000000000000
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000001a0987a5c068ec6ce645bb897d8de4c82281deae
Arg [1] : 0000000000000000000000000000000000000000000000000000000059e34dc0
Arg [2] : 0000000000000000000000004632d1c31c5d9e28e84eae0173b3afc9aca81ac8
Arg [3] : 0000000000000000000000000000000000000000000000000000000005f5e100
Arg [4] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [5] : 000000000000000000000000000000000000000000000175d539876d15c00000
Arg [6] : 0000000000000000000000000000000000000000000012413c9365097c380000
Arg [7] : 000000000000000000000000000000000000000000000000008e1bc9bf040000
Arg [8] : 000000000000000000000000000000000000000000000175d539876d15c00000
Arg [9] : 0000000000000000000000000000000000000000000009209e49b284be1c0000
Arg [10] : 000000000000000000000000000000000000000000000001d7d843dc3b480000
Swarm Source
bzzr://88589bbc8a1182cefb50c4693e5524aedacb4305fa2b46df8862e07546c2eb09
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.