More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 555 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Claim | 15889815 | 603 days ago | IN | 0 ETH | 0.00402537 | ||||
Claim | 15548181 | 651 days ago | IN | 0 ETH | 0.00089919 | ||||
Claim | 15063520 | 727 days ago | IN | 0 ETH | 0.00079928 | ||||
Claim | 14853242 | 764 days ago | IN | 0 ETH | 0.00315746 | ||||
Claim | 14825521 | 768 days ago | IN | 0 ETH | 0.00173506 | ||||
Claim | 14794259 | 773 days ago | IN | 0 ETH | 0.00438422 | ||||
Claim | 14763030 | 778 days ago | IN | 0 ETH | 0.0096623 | ||||
Claim | 14665440 | 794 days ago | IN | 0 ETH | 0.00203233 | ||||
Claim | 14654169 | 795 days ago | IN | 0 ETH | 0.0047119 | ||||
Claim | 14646769 | 796 days ago | IN | 0 ETH | 0.00216839 | ||||
Claim | 14590558 | 805 days ago | IN | 0 ETH | 0.00256787 | ||||
Claim | 14551114 | 811 days ago | IN | 0 ETH | 0.00199937 | ||||
Claim | 14545834 | 812 days ago | IN | 0 ETH | 0.00450502 | ||||
Claim | 14539379 | 813 days ago | IN | 0 ETH | 0.00132646 | ||||
Claim | 14532236 | 814 days ago | IN | 0 ETH | 0.00326651 | ||||
Claim | 14531689 | 814 days ago | IN | 0 ETH | 0.0031147 | ||||
Claim | 14528738 | 815 days ago | IN | 0 ETH | 0.00813813 | ||||
Claim | 14525557 | 815 days ago | IN | 0 ETH | 0.00453268 | ||||
Claim | 14522905 | 816 days ago | IN | 0 ETH | 0.00382217 | ||||
Claim | 14493086 | 821 days ago | IN | 0 ETH | 0.0025847 | ||||
Claim | 14486122 | 822 days ago | IN | 0 ETH | 0.00171092 | ||||
Claim | 14485401 | 822 days ago | IN | 0 ETH | 0.00241236 | ||||
Claim | 14482621 | 822 days ago | IN | 0 ETH | 0.00484396 | ||||
Claim | 14482520 | 822 days ago | IN | 0 ETH | 0.00502437 | ||||
Claim | 14477334 | 823 days ago | IN | 0 ETH | 0.00513819 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
LaunchPadHusl
Compiler Version
v0.7.6+commit.7338295f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.7.6; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/math/SafeMath.sol"; contract LaunchPadHusl is Ownable { using SafeMath for uint256; // 4 rounds : 0 = not open, 1 = guaranty round, 2 = First come first serve, 3 = sale finished //uint256 public roundNumber; uint256 public round1BeganAt; // must be init before deployment uint256 public claimUnlockedTimestamp; // init timestamp of claim begins function roundNumber() external view returns (uint256) { return _roundNumber(); } function _roundNumber() internal view returns (uint256) { uint256 _round; if (block.timestamp < round1BeganAt || round1BeganAt == 0) { _round = 0; } else if ( block.timestamp >= round1BeganAt && block.timestamp < round1BeganAt.add(round1Duration) ) { _round = 1; } else if ( block.timestamp >= round1BeganAt.add(round1Duration) && !endUnlocked ) { _round = 2; } else if (endUnlocked) { _round = 3; } return _round; } function setRound1Timestamp(uint256 _round1BeginAt) external onlyOwner { round1BeganAt = _round1BeginAt; } function setClaimableTimestamp(uint256 _claimUnlockedTimestamp) external onlyOwner { claimUnlockedTimestamp = _claimUnlockedTimestamp; } uint256 public round1Duration = 3600; // in secondes 3600 = 1h uint256 public initialClaimablePercentage = 10; // Add from LaunchPad initial contract uint256 public firstVestingUnlockTimestamp; // October 23, 4H UTC uint256 public secondVestingUnlockTimestamp; // November 22, 4H UTC uint256 public thirdVestingUnlockTimestamp; // December 22, 4h PM UTC uint256 public fourthVestingUnlockTimestamp; //January 21, 4H UTC uint256 public fithVestingUnlockTimestamp; // February 20, 4H UTC // Add from LaunchPad initial contract mapping(address => bool) _initialClaimDone; mapping(address => uint256) _firstVestingAmount; mapping(address => uint256) _secondVestingAmount; mapping(address => uint256) _thirdVestingAmount; mapping(address => uint256) _fourthVestingAmount; mapping(address => uint256) _fithVestingAmount; IERC20 public immutable token; IERC20 public immutable stableCoin; constructor(IERC20 _token, IERC20 _stable) { token = _token; stableCoin = _stable; } mapping(address => uint256) public round1Allowance; mapping(address => uint256) _round2Allowance; mapping(address => bool) _hasParticipated; function isWhitelisted(address _address) public view returns (bool) { bool result; if (_hasParticipated[_address]) { result = true; } else if ( round1Allowance[_address] > 0 || _round2Allowance[_address] > 0 ) { result = true; } return result; } function round2Allowance(address _address) public view returns (uint256) { uint256 result; if (_hasParticipated[_address]) { result = _round2Allowance[msg.sender]; } else if (round1Allowance[_address] > 0) { result = round1Allowance[_address].mul(4); } return result; } uint256 public tokenTarget; uint256 public stableTarget; uint256 public multiplier; // div per 100 bool public endUnlocked; uint256 public totalOwed; mapping(address => uint256) public claimable; mapping(address => uint256) public claimed; uint256 public stableRaised; uint256 public participants; event StartSale(uint256 startTimestamp); event EndUnlockedEvent(uint256 endTimestamp); event ClaimUnlockedEvent(uint256 claimTimestamp); event RoundChange(uint256 roundNumber); function initSale(uint256 _tokenTarget, uint256 _stableTarget) external onlyOwner { require(_stableTarget > 0, "stable target can't be Zero"); require(_tokenTarget > 0, "token target can't be Zero"); tokenTarget = _tokenTarget; stableTarget = _stableTarget; multiplier = tokenTarget.mul(100).div(stableTarget); } // Add from LaunchPad initial contract // initiate vesting timestamp function initVestingsTimestamp( uint256 _first, uint256 _second, uint256 _third, uint256 _fourth, uint256 _fith ) external onlyOwner { require( _fith > _fourth && _fourth > _third && _third > _second && _second > _first && _first > block.timestamp, "No good timestamp" ); firstVestingUnlockTimestamp = _first; secondVestingUnlockTimestamp = _second; thirdVestingUnlockTimestamp = _third; fourthVestingUnlockTimestamp = _fourth; fithVestingUnlockTimestamp = _fith; } function getRound1Duration() external view returns (uint256) { return round1Duration; } function claimUnlocked() external view returns (bool) { return _claimUnlocked(); } function _claimUnlocked() internal view returns (bool) { return (block.timestamp >= claimUnlockedTimestamp); } function setTokenTarget(uint256 _tokenTarget) external onlyOwner { require(_roundNumber() == 0, "Presale already started!"); tokenTarget = _tokenTarget; multiplier = tokenTarget.mul(100).div(stableTarget); } function setStableTarget(uint256 _stableTarget) external onlyOwner { require(_roundNumber() == 0, "Presale already started!"); stableTarget = _stableTarget; multiplier = tokenTarget.mul(100).div(stableTarget); } function startSale() external onlyOwner { require(_roundNumber() == 0, "Presale round isn't 0"); round1BeganAt = block.timestamp; emit StartSale(block.timestamp); } function finishSale() external onlyOwner { require(!endUnlocked, "Presale already ended!"); endUnlocked = true; emit EndUnlockedEvent(block.timestamp); } function addWhitelistedAddress(address _address, uint256 _allocation) external onlyOwner { round1Allowance[_address] = _allocation; } function addMultipleWhitelistedAddresses( address[] calldata _addresses, uint256[] calldata _allocations ) external onlyOwner { require( _addresses.length == _allocations.length, "Issue in _addresses and _allocations length" ); for (uint256 i = 0; i < _addresses.length; i++) { round1Allowance[_addresses[i]] = _allocations[i]; } } function removeWhitelistedAddress(address _address) external onlyOwner { round1Allowance[_address] = 0; } function withdrawStable() external onlyOwner returns (bool) { require(endUnlocked, "presale has not yet ended"); return stableCoin.transfer( msg.sender, stableCoin.balanceOf(address(this)) ); } //update from original contract function claimableAmount(address user) external view returns (uint256) { return _claimableAmount(user); } function _claimableAmount(address user) internal view returns (uint256) { uint256 amount; if (claimable[user] > 0) { uint256 _toClaim = claimable[user].mul(multiplier).div(100); amount = _toClaim.mul(initialClaimablePercentage).div(100); } if (block.timestamp > fithVestingUnlockTimestamp) { if (_fithVestingAmount[user] > 0) { amount = _fithVestingAmount[user] .add(_fourthVestingAmount[user]) .add(_thirdVestingAmount[user]) .add(_secondVestingAmount[user]) .add(_firstVestingAmount[user]); } else { amount = claimable[user].mul(multiplier).div(100); } } else if (block.timestamp > fourthVestingUnlockTimestamp) { if (_fourthVestingAmount[user] > 0) { amount = _fourthVestingAmount[user] .add(_thirdVestingAmount[user]) .add(_secondVestingAmount[user]) .add(_firstVestingAmount[user]); } else { uint256 _toClaim = claimable[user].mul(multiplier).div(100); amount = _toClaim.mul(8200).div(10000); } } else if (block.timestamp > thirdVestingUnlockTimestamp) { if (_thirdVestingAmount[user] > 0) { amount = _thirdVestingAmount[user] .add(_secondVestingAmount[user]) .add(_firstVestingAmount[user]); } else { uint256 _toClaim = claimable[user].mul(multiplier).div(100); amount = _toClaim.mul(6400).div(10000); } } else if (block.timestamp > secondVestingUnlockTimestamp) { if (_secondVestingAmount[user] > 0) { amount = _secondVestingAmount[user].add( _firstVestingAmount[user] ); } else { uint256 _toClaim = claimable[user].mul(multiplier).div(100); amount = _toClaim.mul(4600).div(10000); } } else if (block.timestamp > firstVestingUnlockTimestamp) { if (_firstVestingAmount[user] > 0) { amount = _firstVestingAmount[user]; } else { uint256 _toClaim = claimable[user].mul(multiplier).div(100); amount = _toClaim.mul(2800).div(10000); } } return amount; } // Add from LaunchPad initial contract function remainToClaim(address user) external view returns (uint256) { uint256 amount; if (claimable[user] > 0) { amount = claimable[user].mul(multiplier).div(100); } else { amount = _firstVestingAmount[user] .add(_secondVestingAmount[user]) .add(_thirdVestingAmount[user]) .add(_fourthVestingAmount[user]) .add(_fithVestingAmount[user]); } return amount; } function withdrawToken() external onlyOwner returns (bool) { require(endUnlocked, "presale has not yet ended"); return token.transfer( msg.sender, token.balanceOf(address(this)).sub(totalOwed) ); } function emergencyWithdrawToken(address _token) external onlyOwner returns (bool) { return IERC20(_token).transfer( msg.sender, IERC20(_token).balanceOf(address(this)) ); } // function update from initial Smart contract // function claim() external returns (bool) { require(_claimUnlocked(), "claiming not allowed yet"); if (!_initialClaimDone[msg.sender]) { require(claimable[msg.sender] > 0, "nothing to claim"); } else { require( (_firstVestingAmount[msg.sender] > 0 && block.timestamp >= firstVestingUnlockTimestamp) || (_secondVestingAmount[msg.sender] > 0 && block.timestamp >= secondVestingUnlockTimestamp) || (_thirdVestingAmount[msg.sender] > 0 && block.timestamp >= thirdVestingUnlockTimestamp) || (_fourthVestingAmount[msg.sender] > 0 && block.timestamp >= fourthVestingUnlockTimestamp) || (_fithVestingAmount[msg.sender] > 0 && block.timestamp >= fithVestingUnlockTimestamp), "nothing to claim" ); } uint256 amount; if (!_initialClaimDone[msg.sender]) { _initialClaimDone[msg.sender] = true; uint256 _toClaim = claimable[msg.sender].mul(multiplier).div(100); claimable[msg.sender] = 0; amount = _toClaim.mul(initialClaimablePercentage).div(100); // 10% _toClaim = _toClaim.sub(amount); _firstVestingAmount[msg.sender] = _toClaim.div(5); // 18% at first vesting (1month later) _secondVestingAmount[msg.sender] = _toClaim.div(5); _thirdVestingAmount[msg.sender] = _toClaim.div(5); _fourthVestingAmount[msg.sender] = _toClaim.div(5); _fithVestingAmount[msg.sender] = _toClaim.div(5); } if ( _fithVestingAmount[msg.sender] > 0 && block.timestamp >= fithVestingUnlockTimestamp ) { amount = amount .add(_fithVestingAmount[msg.sender]) .add(_fourthVestingAmount[msg.sender]) .add(_thirdVestingAmount[msg.sender]) .add(_secondVestingAmount[msg.sender]) .add(_firstVestingAmount[msg.sender]); _firstVestingAmount[msg.sender] = 0; _secondVestingAmount[msg.sender] = 0; _thirdVestingAmount[msg.sender] = 0; _fourthVestingAmount[msg.sender] = 0; _fithVestingAmount[msg.sender] = 0; } if ( _fourthVestingAmount[msg.sender] > 0 && block.timestamp >= fourthVestingUnlockTimestamp ) { amount = amount .add(_fourthVestingAmount[msg.sender]) .add(_thirdVestingAmount[msg.sender]) .add(_secondVestingAmount[msg.sender]) .add(_firstVestingAmount[msg.sender]); _firstVestingAmount[msg.sender] = 0; _secondVestingAmount[msg.sender] = 0; _thirdVestingAmount[msg.sender] = 0; _fourthVestingAmount[msg.sender] = 0; } if ( _thirdVestingAmount[msg.sender] > 0 && block.timestamp >= thirdVestingUnlockTimestamp ) { amount = amount .add(_thirdVestingAmount[msg.sender]) .add(_secondVestingAmount[msg.sender]) .add(_firstVestingAmount[msg.sender]); _firstVestingAmount[msg.sender] = 0; _secondVestingAmount[msg.sender] = 0; _thirdVestingAmount[msg.sender] = 0; } if ( _secondVestingAmount[msg.sender] > 0 && block.timestamp >= secondVestingUnlockTimestamp ) { amount = amount.add(_secondVestingAmount[msg.sender]).add( _firstVestingAmount[msg.sender] ); _firstVestingAmount[msg.sender] = 0; _secondVestingAmount[msg.sender] = 0; } if ( _firstVestingAmount[msg.sender] > 0 && block.timestamp >= firstVestingUnlockTimestamp ) { amount = amount.add(_firstVestingAmount[msg.sender]); _firstVestingAmount[msg.sender] = 0; } claimed[msg.sender] = claimed[msg.sender].add(amount); totalOwed = totalOwed.sub(amount); return token.transfer(msg.sender, amount); } function buyRound1Stable(uint256 _amount) external { require(_roundNumber() == 1, "presale isn't on good round"); require( stableRaised.add(_amount) <= stableTarget, "Target already hit" ); require( round1Allowance[msg.sender] >= _amount, "Amount too high or not white listed" ); if (!_hasParticipated[msg.sender]) { _hasParticipated[msg.sender] = true; _round2Allowance[msg.sender] = round1Allowance[msg.sender].mul(4); } require(stableCoin.transferFrom(msg.sender, address(this), _amount)); uint256 amount = _amount.mul(multiplier).div(100); require(totalOwed.add(amount) <= tokenTarget, "sold out"); round1Allowance[msg.sender] = round1Allowance[msg.sender].sub( _amount, "Maximum purchase cap hit" ); if (claimable[msg.sender] == 0) participants = participants.add(1); claimable[msg.sender] = claimable[msg.sender].add(_amount); totalOwed = totalOwed.add(amount); stableRaised = stableRaised.add(_amount); if (stableRaised == stableTarget) { emit RoundChange(3); endUnlocked = true; emit EndUnlockedEvent(block.timestamp); } } function buyRound2Stable(uint256 _amount) external { require(_roundNumber() == 2, "Not the good round"); require(round2Allowance(msg.sender) > 0, "you are not whitelisted"); require(_amount > 0, "amount too low"); require( stableRaised.add(_amount) <= stableTarget, "target already hit" ); if (!_hasParticipated[msg.sender]) { _hasParticipated[msg.sender] = true; _round2Allowance[msg.sender] = round1Allowance[msg.sender].mul(4); } _round2Allowance[msg.sender] = _round2Allowance[msg.sender].sub( _amount, "Maximum purchase cap hit" ); require(stableCoin.transferFrom(msg.sender, address(this), _amount)); uint256 amount = _amount.mul(multiplier).div(100); require(totalOwed.add(amount) <= tokenTarget, "sold out"); if (claimable[msg.sender] == 0) participants = participants.add(1); claimable[msg.sender] = claimable[msg.sender].add(_amount); totalOwed = totalOwed.add(amount); stableRaised = stableRaised.add(_amount); if (stableRaised == stableTarget) { emit RoundChange(3); endUnlocked = true; emit EndUnlockedEvent(block.timestamp); } } function buyRound1Native() public payable { revert(); } function buyRound2Native() public payable { revert(); } fallback() external payable { revert(); // if (_roundNumber() == 1) { // buyRound1(); // } else if (_roundNumber() == 2) { // buyRound2(); // } else { // revert(); // } } receive() external payable { revert(); // if (_roundNumber() == 1) { // buyRound1(); // } else if (_roundNumber() == 2) { // buyRound2(); // } else { // revert(); // } } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: 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 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
{ "remappings": [], "optimizer": { "enabled": true, "runs": 200 }, "evmVersion": "istanbul", "libraries": {}, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"contract IERC20","name":"_stable","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"claimTimestamp","type":"uint256"}],"name":"ClaimUnlockedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"endTimestamp","type":"uint256"}],"name":"EndUnlockedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"roundNumber","type":"uint256"}],"name":"RoundChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"startTimestamp","type":"uint256"}],"name":"StartSale","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256[]","name":"_allocations","type":"uint256[]"}],"name":"addMultipleWhitelistedAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_allocation","type":"uint256"}],"name":"addWhitelistedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyRound1Native","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"buyRound1Stable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyRound2Native","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"buyRound2Stable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimUnlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimUnlockedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"claimableAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"emergencyWithdrawToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endUnlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finishSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"firstVestingUnlockTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fithVestingUnlockTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fourthVestingUnlockTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRound1Duration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenTarget","type":"uint256"},{"internalType":"uint256","name":"_stableTarget","type":"uint256"}],"name":"initSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_first","type":"uint256"},{"internalType":"uint256","name":"_second","type":"uint256"},{"internalType":"uint256","name":"_third","type":"uint256"},{"internalType":"uint256","name":"_fourth","type":"uint256"},{"internalType":"uint256","name":"_fith","type":"uint256"}],"name":"initVestingsTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialClaimablePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"multiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"participants","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"remainToClaim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeWhitelistedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"round1Allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"round1BeganAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"round1Duration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"round2Allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"roundNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"secondVestingUnlockTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_claimUnlockedTimestamp","type":"uint256"}],"name":"setClaimableTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_round1BeginAt","type":"uint256"}],"name":"setRound1Timestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stableTarget","type":"uint256"}],"name":"setStableTarget","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenTarget","type":"uint256"}],"name":"setTokenTarget","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stableCoin","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stableRaised","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stableTarget","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"thirdVestingUnlockTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenTarget","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalOwed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052610e10600355600a6004553480156200001c57600080fd5b50604051620031a7380380620031a7833981810160405260408110156200004257600080fd5b508051602090910151600062000057620000c0565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160601b0319606092831b8116608052911b1660a052620000c4565b3390565b60805160601c60a05160601c6130966200011160003980611a485280611e2a5280612025528061205552806123e1525080611426528061261e5280612654528061293352506130966000f3fe6080604052600436106102cd5760003560e01c80638988504911610175578063b66a0e5d116100dc578063f1f6bf0f11610095578063f6f5e8911161006f578063f6f5e89114610994578063f83c45fe146109a9578063f8757ba3146109be578063fc0c546a146109d3576102d7565b8063f1f6bf0f14610904578063f2fde38b14610937578063f6072f681461096a576102d7565b8063b66a0e5d14610853578063be9c0dab14610868578063c8322d8714610892578063c884ef83146108a7578063ca628c78146108da578063e7fa9f7d146108ef576102d7565b80639dbc67c81161012e5780639dbc67c8146107a2578063a76a4e15146107cc578063ab66179e146107e1578063abfea13d146107f6578063afd6b6681461080b578063b479c5211461083e576102d7565b806389885049146106b15780638da5cb5b146106e45780638db3b7d9146107155780638f86f5ea1461074e578063917e2f0614610763578063992642e51461078d576102d7565b80634e71d92d116102345780636249a0f8116101ed578063715018a6116101c7578063715018a614610648578063782e1e6c1461065d5780637843eb92146106725780637fd23cfa14610687576102d7565b80636249a0f8146105ee57806362c13ff3146106035780636c4470fb14610633576102d7565b80634e71d92d146104ad5780634e912652146104c257806350e49764146104d7578063530cd5ab146104ec578063536baf0f1461051f5780635afbec25146103d6576102d7565b80633af32abf116102865780633af32abf146103de5780633ba94b7a14610411578063402914f5146104265780634417d6a51461045957806348368bca1461046e5780634e2786fb14610498576102d7565b80631af03203146102dc5780631b3ed722146103235780631d8e59d91461034a5780631dfd8baf1461035f5780632bfde7d3146103925780632ce6eef1146103d6576102d7565b366102d757600080fd5b600080fd5b3480156102e857600080fd5b5061030f600480360360208110156102ff57600080fd5b50356001600160a01b03166109e8565b604080519115158252519081900360200190f35b34801561032f57600080fd5b50610338610b56565b60408051918252519081900360200190f35b34801561035657600080fd5b5061030f610b5c565b34801561036b57600080fd5b506103386004803603602081101561038257600080fd5b50356001600160a01b0316610b65565b34801561039e57600080fd5b506103d4600480360360a08110156103b557600080fd5b5080359060208101359060408101359060608101359060800135610be9565b005b6103d46102d7565b3480156103ea57600080fd5b5061030f6004803603602081101561040157600080fd5b50356001600160a01b0316610cd6565b34801561041d57600080fd5b50610338610d4c565b34801561043257600080fd5b506103386004803603602081101561044957600080fd5b50356001600160a01b0316610d52565b34801561046557600080fd5b50610338610d64565b34801561047a57600080fd5b506103d46004803603602081101561049157600080fd5b5035610d6a565b3480156104a457600080fd5b50610338610e46565b3480156104b957600080fd5b5061030f610e55565b3480156104ce57600080fd5b506103386114a0565b3480156104e357600080fd5b5061030f6114a6565b3480156104f857600080fd5b506103d46004803603602081101561050f57600080fd5b50356001600160a01b03166114b0565b34801561052b57600080fd5b506103d46004803603604081101561054257600080fd5b81019060208101813564010000000081111561055d57600080fd5b82018360208201111561056f57600080fd5b8035906020019184602083028401116401000000008311171561059157600080fd5b9193909290916020810190356401000000008111156105af57600080fd5b8201836020820111156105c157600080fd5b803590602001918460208302840111640100000000831117156105e357600080fd5b50909250905061152c565b3480156105fa57600080fd5b5061033861162c565b34801561060f57600080fd5b506103d46004803603604081101561062657600080fd5b5080359060200135611632565b34801561063f57600080fd5b5061033861175e565b34801561065457600080fd5b506103d4611764565b34801561066957600080fd5b50610338611810565b34801561067e57600080fd5b50610338611816565b34801561069357600080fd5b506103d4600480360360208110156106aa57600080fd5b503561181c565b3480156106bd57600080fd5b50610338600480360360208110156106d457600080fd5b50356001600160a01b0316611c34565b3480156106f057600080fd5b506106f9611c3f565b604080516001600160a01b039092168252519081900360200190f35b34801561072157600080fd5b506103d46004803603604081101561073857600080fd5b506001600160a01b038135169060200135611c4e565b34801561075a57600080fd5b506103d4611ccc565b34801561076f57600080fd5b506103d46004803603602081101561078657600080fd5b5035611dc1565b34801561079957600080fd5b506106f9611e28565b3480156107ae57600080fd5b506103d4600480360360208110156107c557600080fd5b5035611e4c565b3480156107d857600080fd5b50610338611eb3565b3480156107ed57600080fd5b50610338611eb9565b34801561080257600080fd5b50610338611ebf565b34801561081757600080fd5b506103386004803603602081101561082e57600080fd5b50356001600160a01b0316611ec5565b34801561084a57600080fd5b5061030f611f6c565b34801561085f57600080fd5b506103d461216c565b34801561087457600080fd5b506103d46004803603602081101561088b57600080fd5b503561225a565b34801561089e57600080fd5b5061033861254d565b3480156108b357600080fd5b50610338600480360360208110156108ca57600080fd5b50356001600160a01b0316612553565b3480156108e657600080fd5b5061030f612565565b3480156108fb57600080fd5b50610338612737565b34801561091057600080fd5b506103386004803603602081101561092757600080fd5b50356001600160a01b031661273d565b34801561094357600080fd5b506103d46004803603602081101561095a57600080fd5b50356001600160a01b031661274f565b34801561097657600080fd5b506103d46004803603602081101561098d57600080fd5b5035612851565b3480156109a057600080fd5b5061033861291f565b3480156109b557600080fd5b50610338612925565b3480156109ca57600080fd5b5061033861292b565b3480156109df57600080fd5b506106f9612931565b60006109f2612955565b6001600160a01b0316610a03611c3f565b6001600160a01b031614610a4c576040805162461bcd60e51b8152602060048201819052602482015260008051602061301e833981519152604482015290519081900360640190fd5b816001600160a01b031663a9059cbb33846001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610aa957600080fd5b505afa158015610abd573d6000803e3d6000fd5b505050506040513d6020811015610ad357600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b158015610b2457600080fd5b505af1158015610b38573d6000803e3d6000fd5b505050506040513d6020811015610b4e57600080fd5b505192915050565b60155481565b60165460ff1681565b6001600160a01b038116600090815260126020526040812054819060ff1615610b9e575033600090815260116020526040902054610be3565b6001600160a01b03831660009081526010602052604090205415610be3576001600160a01b038316600090815260106020526040902054610be0906004612959565b90505b92915050565b610bf1612955565b6001600160a01b0316610c02611c3f565b6001600160a01b031614610c4b576040805162461bcd60e51b8152602060048201819052602482015260008051602061301e833981519152604482015290519081900360640190fd5b8181118015610c5957508282115b8015610c6457508383115b8015610c6f57508484115b8015610c7a57504285115b610cbf576040805162461bcd60e51b815260206004820152601160248201527004e6f20676f6f642074696d657374616d7607c1b604482015290519081900360640190fd5b600594909455600692909255600755600855600955565b6001600160a01b038116600090815260126020526040812054819060ff1615610d0157506001610be3565b6001600160a01b038316600090815260106020526040902054151580610d3e57506001600160a01b03831660009081526011602052604090205415155b15610be35750600192915050565b60145481565b60186020526000908152604090205481565b60015481565b610d72612955565b6001600160a01b0316610d83611c3f565b6001600160a01b031614610dcc576040805162461bcd60e51b8152602060048201819052602482015260008051602061301e833981519152604482015290519081900360640190fd5b610dd46129b2565b15610e21576040805162461bcd60e51b815260206004820152601860248201527750726573616c6520616c726561647920737461727465642160401b604482015290519081900360640190fd5b6014819055601354610e40908290610e3a906064612959565b90612a3f565b60155550565b6000610e506129b2565b905090565b6000610e5f612aa6565b610eb0576040805162461bcd60e51b815260206004820152601860248201527f636c61696d696e67206e6f7420616c6c6f776564207965740000000000000000604482015290519081900360640190fd5b336000908152600a602052604090205460ff16610f205733600090815260186020526040902054610f1b576040805162461bcd60e51b815260206004820152601060248201526f6e6f7468696e6720746f20636c61696d60801b604482015290519081900360640190fd5b61101c565b336000908152600b602052604090205415801590610f4057506005544210155b80610f665750336000908152600c602052604090205415801590610f6657506006544210155b80610f8c5750336000908152600d602052604090205415801590610f8c57506007544210155b80610fb25750336000908152600e602052604090205415801590610fb257506008544210155b80610fd85750336000908152600f602052604090205415801590610fd857506009544210155b61101c576040805162461bcd60e51b815260206004820152601060248201526f6e6f7468696e6720746f20636c61696d60801b604482015290519081900360640190fd5b336000908152600a602052604081205460ff1661112a57336000908152600a60209081526040808320805460ff19166001179055601554601890925282205461106b91606491610e3a91612959565b3360009081526018602052604081205560045490915061109390606490610e3a908490612959565b915061109f8183612aaf565b90506110ac816005612a3f565b336000908152600b60205260409020556110c7816005612a3f565b336000908152600c60205260409020556110e2816005612a3f565b336000908152600d60205260409020556110fd816005612a3f565b336000908152600e6020526040902055611118816005612a3f565b336000908152600f6020526040902055505b336000908152600f60205260409020541580159061114a57506009544210155b156111e157336000908152600b6020908152604080832054600c835281842054600d845282852054600e855283862054600f90955292909420546111a394919361119d9384929091839182908a90612b0c565b90612b0c565b336000908152600b60209081526040808320839055600c8252808320839055600d8252808320839055600e8252808320839055600f90915281205590505b336000908152600e60205260409020541580159061120157506008544210155b1561127d57336000908152600b6020908152604080832054600c835281842054600d845282852054600e9094529190932054611249939261119d929183919082908890612b0c565b336000908152600b60209081526040808320839055600c8252808320839055600d8252808320839055600e90915281205590505b336000908152600d60205260409020541580159061129d57506007544210155b1561130157336000908152600b6020908152604080832054600c835281842054600d9093529220546112d7929161119d9182908690612b0c565b336000908152600b60209081526040808320839055600c8252808320839055600d90915281205590505b336000908152600c60205260409020541580159061132157506006544210155b1561137257336000908152600b6020908152604080832054600c90925290912054611352919061119d908490612b0c565b336000908152600b60209081526040808320839055600c90915281205590505b336000908152600b60205260409020541580159061139257506005544210155b156113c557336000908152600b60205260409020546113b2908290612b0c565b336000908152600b602052604081205590505b336000908152601960205260409020546113df9082612b0c565b336000908152601960205260409020556017546113fc9082612aaf565b6017556040805163a9059cbb60e01b81523360048201526024810183905290516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163a9059cbb9160448083019260209291908290030181600087803b15801561146e57600080fd5b505af1158015611482573d6000803e3d6000fd5b505050506040513d602081101561149857600080fd5b505191505090565b60085481565b6000610e50612aa6565b6114b8612955565b6001600160a01b03166114c9611c3f565b6001600160a01b031614611512576040805162461bcd60e51b8152602060048201819052602482015260008051602061301e833981519152604482015290519081900360640190fd5b6001600160a01b0316600090815260106020526040812055565b611534612955565b6001600160a01b0316611545611c3f565b6001600160a01b03161461158e576040805162461bcd60e51b8152602060048201819052602482015260008051602061301e833981519152604482015290519081900360640190fd5b8281146115cc5760405162461bcd60e51b815260040180806020018281038252602b815260200180612fac602b913960400191505060405180910390fd5b60005b83811015611625578282828181106115e357fe5b90506020020135601060008787858181106115fa57fe5b602090810292909201356001600160a01b0316835250810191909152604001600020556001016115cf565b5050505050565b60045481565b61163a612955565b6001600160a01b031661164b611c3f565b6001600160a01b031614611694576040805162461bcd60e51b8152602060048201819052602482015260008051602061301e833981519152604482015290519081900360640190fd5b600081116116e9576040805162461bcd60e51b815260206004820152601b60248201527f737461626c65207461726765742063616e2774206265205a65726f0000000000604482015290519081900360640190fd5b6000821161173e576040805162461bcd60e51b815260206004820152601a60248201527f746f6b656e207461726765742063616e2774206265205a65726f000000000000604482015290519081900360640190fd5b6013829055601481905561175781610e3a846064612959565b6015555050565b601b5481565b61176c612955565b6001600160a01b031661177d611c3f565b6001600160a01b0316146117c6576040805162461bcd60e51b8152602060048201819052602482015260008051602061301e833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60135481565b60065481565b6118246129b2565b60021461186d576040805162461bcd60e51b8152602060048201526012602482015271139bdd081d1a194819dbdbd9081c9bdd5b9960721b604482015290519081900360640190fd5b600061187833610b65565b116118ca576040805162461bcd60e51b815260206004820152601760248201527f796f7520617265206e6f742077686974656c6973746564000000000000000000604482015290519081900360640190fd5b60008111611910576040805162461bcd60e51b815260206004820152600e60248201526d616d6f756e7420746f6f206c6f7760901b604482015290519081900360640190fd5b601454601a546119209083612b0c565b1115611968576040805162461bcd60e51b81526020600482015260126024820152711d185c99d95d08185b1c9958591e481a1a5d60721b604482015290519081900360640190fd5b3360009081526012602052604090205460ff166119c057336000908152601260209081526040808320805460ff1916600117905560109091529020546119af906004612959565b336000908152601160205260409020555b604080518082018252601881527713585e1a5b5d5b481c1d5c98da185cd94818d85c081a1a5d60421b60208083019190915233600090815260119091529190912054611a0d918390612b66565b3360008181526011602090815260408083209490945583516323b872dd60e01b815260048101939093523060248401526044830185905292517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316936323b872dd93606480820194929392918390030190829087803b158015611a9757600080fd5b505af1158015611aab573d6000803e3d6000fd5b505050506040513d6020811015611ac157600080fd5b5051611acc57600080fd5b6000611ae86064610e3a6015548561295990919063ffffffff16565b9050601354611b0282601754612b0c90919063ffffffff16565b1115611b40576040805162461bcd60e51b81526020600482015260086024820152671cdbdb19081bdd5d60c21b604482015290519081900360640190fd5b33600090815260186020526040902054611b6657601b54611b62906001612b0c565b601b555b33600090815260186020526040902054611b809083612b0c565b33600090815260186020526040902055601754611b9d9082612b0c565b601755601a54611bad9083612b0c565b601a8190556014541415611c3057604080516003815290517f8b760fcc1fba5875d2dee24210975dbc507d7fb390c5fc674a336a4230459b819181900360200190a16016805460ff191660011790556040805142815290517fdbb898b65754de938e81c6a509625c23cc027521dca30ed62fce6f2e8f838c7a9181900360200190a15b5050565b6000610be382612bfd565b6000546001600160a01b031690565b611c56612955565b6001600160a01b0316611c67611c3f565b6001600160a01b031614611cb0576040805162461bcd60e51b8152602060048201819052602482015260008051602061301e833981519152604482015290519081900360640190fd5b6001600160a01b03909116600090815260106020526040902055565b611cd4612955565b6001600160a01b0316611ce5611c3f565b6001600160a01b031614611d2e576040805162461bcd60e51b8152602060048201819052602482015260008051602061301e833981519152604482015290519081900360640190fd5b60165460ff1615611d7f576040805162461bcd60e51b815260206004820152601660248201527550726573616c6520616c726561647920656e6465642160501b604482015290519081900360640190fd5b6016805460ff191660011790556040805142815290517fdbb898b65754de938e81c6a509625c23cc027521dca30ed62fce6f2e8f838c7a9181900360200190a1565b611dc9612955565b6001600160a01b0316611dda611c3f565b6001600160a01b031614611e23576040805162461bcd60e51b8152602060048201819052602482015260008051602061301e833981519152604482015290519081900360640190fd5b600255565b7f000000000000000000000000000000000000000000000000000000000000000081565b611e54612955565b6001600160a01b0316611e65611c3f565b6001600160a01b031614611eae576040805162461bcd60e51b8152602060048201819052602482015260008051602061301e833981519152604482015290519081900360640190fd5b600155565b60025481565b60075481565b60035481565b6001600160a01b038116600090815260186020526040812054819015611f18576015546001600160a01b038416600090815260186020526040902054611f1191606491610e3a91612959565b9050610be3565b6001600160a01b0383166000908152600f6020908152604080832054600e835281842054600d845282852054600c855283862054600b9095529290942054610be094919361119d9384929091839190612b0c565b6000611f76612955565b6001600160a01b0316611f87611c3f565b6001600160a01b031614611fd0576040805162461bcd60e51b8152602060048201819052602482015260008051602061301e833981519152604482015290519081900360640190fd5b60165460ff16612023576040805162461bcd60e51b81526020600482015260196024820152781c1c995cd85b19481a185cc81b9bdd081e595d08195b991959603a1b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156120c057600080fd5b505afa1580156120d4573d6000803e3d6000fd5b505050506040513d60208110156120ea57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561213b57600080fd5b505af115801561214f573d6000803e3d6000fd5b505050506040513d602081101561216557600080fd5b5051905090565b612174612955565b6001600160a01b0316612185611c3f565b6001600160a01b0316146121ce576040805162461bcd60e51b8152602060048201819052602482015260008051602061301e833981519152604482015290519081900360640190fd5b6121d66129b2565b15612220576040805162461bcd60e51b8152602060048201526015602482015274050726573616c6520726f756e642069736e2774203605c1b604482015290519081900360640190fd5b42600181905560408051918252517f59ff1c5e8a691bbfdd4acd20ca4355bd3e0878914814bc6d035bd1584d34135d9181900360200190a1565b6122626129b2565b6001146122b6576040805162461bcd60e51b815260206004820152601b60248201527f70726573616c652069736e2774206f6e20676f6f6420726f756e640000000000604482015290519081900360640190fd5b601454601a546122c69083612b0c565b111561230e576040805162461bcd60e51b815260206004820152601260248201527115185c99d95d08185b1c9958591e481a1a5d60721b604482015290519081900360640190fd5b3360009081526010602052604090205481111561235c5760405162461bcd60e51b815260040180806020018281038252602381526020018061303e6023913960400191505060405180910390fd5b3360009081526012602052604090205460ff166123b457336000908152601260209081526040808320805460ff1916600117905560109091529020546123a3906004612959565b336000908152601160205260409020555b604080516323b872dd60e01b81523360048201523060248201526044810183905290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916323b872dd9160648083019260209291908290030181600087803b15801561242957600080fd5b505af115801561243d573d6000803e3d6000fd5b505050506040513d602081101561245357600080fd5b505161245e57600080fd5b600061247a6064610e3a6015548561295990919063ffffffff16565b905060135461249482601754612b0c90919063ffffffff16565b11156124d2576040805162461bcd60e51b81526020600482015260086024820152671cdbdb19081bdd5d60c21b604482015290519081900360640190fd5b604080518082018252601881527713585e1a5b5d5b481c1d5c98da185cd94818d85c081a1a5d60421b6020808301919091523360009081526010909152919091205461251f918490612b66565b33600090815260106020908152604080832093909355601890522054611b6657601b54611b62906001612b0c565b60095481565b60196020526000908152604090205481565b600061256f612955565b6001600160a01b0316612580611c3f565b6001600160a01b0316146125c9576040805162461bcd60e51b8152602060048201819052602482015260008051602061301e833981519152604482015290519081900360640190fd5b60165460ff1661261c576040805162461bcd60e51b81526020600482015260196024820152781c1c995cd85b19481a185cc81b9bdd081e595d08195b991959603a1b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb336126f16017547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156126bf57600080fd5b505afa1580156126d3573d6000803e3d6000fd5b505050506040513d60208110156126e957600080fd5b505190612aaf565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561213b57600080fd5b60175481565b60106020526000908152604090205481565b612757612955565b6001600160a01b0316612768611c3f565b6001600160a01b0316146127b1576040805162461bcd60e51b8152602060048201819052602482015260008051602061301e833981519152604482015290519081900360640190fd5b6001600160a01b0381166127f65760405162461bcd60e51b8152600401808060200182810382526026815260200180612fd76026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b612859612955565b6001600160a01b031661286a611c3f565b6001600160a01b0316146128b3576040805162461bcd60e51b8152602060048201819052602482015260008051602061301e833981519152604482015290519081900360640190fd5b6128bb6129b2565b15612908576040805162461bcd60e51b815260206004820152601860248201527750726573616c6520616c726561647920737461727465642160401b604482015290519081900360640190fd5b6013819055601454610e4090610e3a836064612959565b60055481565b60035490565b601a5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b3390565b60008261296857506000610be3565b8282028284828161297557fe5b0414610be05760405162461bcd60e51b8152600401808060200182810382526021815260200180612ffd6021913960400191505060405180910390fd5b6000806001544210806129c55750600154155b156129d257506000610e50565b60015442101580156129f157506003546001546129ee91612b0c565b42105b156129fe57506001610e50565b600354600154612a0d91612b0c565b4210158015612a1f575060165460ff16155b15612a2c57506002610e50565b60165460ff1615610e5057506003905090565b6000808211612a95576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612a9e57fe5b049392505050565b60025442101590565b600082821115612b06576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082820183811015610be0576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008184841115612bf55760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612bba578181015183820152602001612ba2565b50505050905090810190601f168015612be75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038116600090815260186020526040812054819015612c6c576015546001600160a01b0384166000908152601860205260408120549091612c4c91606491610e3a9190612959565b9050612c686064610e3a6004548461295990919063ffffffff16565b9150505b600954421115612d20576001600160a01b0383166000908152600f602052604090205415612cef576001600160a01b0383166000908152600b6020908152604080832054600c835281842054600d845282852054600e855283862054600f9095529290942054612ce894919361119d9384929091839190612b0c565b9050612d1b565b6015546001600160a01b038416600090815260186020526040902054611f1191606491610e3a91612959565b610be3565b600854421115612dda576001600160a01b0383166000908152600e602052604090205415612d8f576001600160a01b0383166000908152600b6020908152604080832054600c835281842054600d845282852054600e9094529190932054612ce8939261119d92918391612b0c565b6015546001600160a01b0384166000908152601860205260408120549091612dbe91606491610e3a9190612959565b9050612dd2612710610e3a83612008612959565b915050610be3565b600754421115612e80576001600160a01b0383166000908152600d602052604090205415612e3d576001600160a01b0383166000908152600b6020908152604080832054600c835281842054600d909352922054612ce8929161119d9190612b0c565b6015546001600160a01b0384166000908152601860205260408120549091612e6c91606491610e3a9190612959565b9050612dd2612710610e3a83611900612959565b600654421115612f19576001600160a01b0383166000908152600c602052604090205415612ed6576001600160a01b0383166000908152600b6020908152604080832054600c90925290912054612ce891612b0c565b6015546001600160a01b0384166000908152601860205260408120549091612f0591606491610e3a9190612959565b9050612dd2612710610e3a836111f8612959565b600554421115610be3576001600160a01b0383166000908152600b602052604090205415612f6057506001600160a01b0382166000908152600b6020526040902054610be3565b6015546001600160a01b0384166000908152601860205260408120549091612f8f91606491610e3a9190612959565b9050612fa3612710610e3a83610af0612959565b94935050505056fe497373756520696e205f61646472657373657320616e64205f616c6c6f636174696f6e73206c656e6774684f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572416d6f756e7420746f6f2068696768206f72206e6f74207768697465206c6973746564a2646970667358221220a15d4e94d58db1c700df9ff7ee08622918a11f509fb1e770f00b4251ad127c1964736f6c63430007060033000000000000000000000000a2881f7f441267042f9778ffa0d4f834693426be0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Deployed Bytecode
0x6080604052600436106102cd5760003560e01c80638988504911610175578063b66a0e5d116100dc578063f1f6bf0f11610095578063f6f5e8911161006f578063f6f5e89114610994578063f83c45fe146109a9578063f8757ba3146109be578063fc0c546a146109d3576102d7565b8063f1f6bf0f14610904578063f2fde38b14610937578063f6072f681461096a576102d7565b8063b66a0e5d14610853578063be9c0dab14610868578063c8322d8714610892578063c884ef83146108a7578063ca628c78146108da578063e7fa9f7d146108ef576102d7565b80639dbc67c81161012e5780639dbc67c8146107a2578063a76a4e15146107cc578063ab66179e146107e1578063abfea13d146107f6578063afd6b6681461080b578063b479c5211461083e576102d7565b806389885049146106b15780638da5cb5b146106e45780638db3b7d9146107155780638f86f5ea1461074e578063917e2f0614610763578063992642e51461078d576102d7565b80634e71d92d116102345780636249a0f8116101ed578063715018a6116101c7578063715018a614610648578063782e1e6c1461065d5780637843eb92146106725780637fd23cfa14610687576102d7565b80636249a0f8146105ee57806362c13ff3146106035780636c4470fb14610633576102d7565b80634e71d92d146104ad5780634e912652146104c257806350e49764146104d7578063530cd5ab146104ec578063536baf0f1461051f5780635afbec25146103d6576102d7565b80633af32abf116102865780633af32abf146103de5780633ba94b7a14610411578063402914f5146104265780634417d6a51461045957806348368bca1461046e5780634e2786fb14610498576102d7565b80631af03203146102dc5780631b3ed722146103235780631d8e59d91461034a5780631dfd8baf1461035f5780632bfde7d3146103925780632ce6eef1146103d6576102d7565b366102d757600080fd5b600080fd5b3480156102e857600080fd5b5061030f600480360360208110156102ff57600080fd5b50356001600160a01b03166109e8565b604080519115158252519081900360200190f35b34801561032f57600080fd5b50610338610b56565b60408051918252519081900360200190f35b34801561035657600080fd5b5061030f610b5c565b34801561036b57600080fd5b506103386004803603602081101561038257600080fd5b50356001600160a01b0316610b65565b34801561039e57600080fd5b506103d4600480360360a08110156103b557600080fd5b5080359060208101359060408101359060608101359060800135610be9565b005b6103d46102d7565b3480156103ea57600080fd5b5061030f6004803603602081101561040157600080fd5b50356001600160a01b0316610cd6565b34801561041d57600080fd5b50610338610d4c565b34801561043257600080fd5b506103386004803603602081101561044957600080fd5b50356001600160a01b0316610d52565b34801561046557600080fd5b50610338610d64565b34801561047a57600080fd5b506103d46004803603602081101561049157600080fd5b5035610d6a565b3480156104a457600080fd5b50610338610e46565b3480156104b957600080fd5b5061030f610e55565b3480156104ce57600080fd5b506103386114a0565b3480156104e357600080fd5b5061030f6114a6565b3480156104f857600080fd5b506103d46004803603602081101561050f57600080fd5b50356001600160a01b03166114b0565b34801561052b57600080fd5b506103d46004803603604081101561054257600080fd5b81019060208101813564010000000081111561055d57600080fd5b82018360208201111561056f57600080fd5b8035906020019184602083028401116401000000008311171561059157600080fd5b9193909290916020810190356401000000008111156105af57600080fd5b8201836020820111156105c157600080fd5b803590602001918460208302840111640100000000831117156105e357600080fd5b50909250905061152c565b3480156105fa57600080fd5b5061033861162c565b34801561060f57600080fd5b506103d46004803603604081101561062657600080fd5b5080359060200135611632565b34801561063f57600080fd5b5061033861175e565b34801561065457600080fd5b506103d4611764565b34801561066957600080fd5b50610338611810565b34801561067e57600080fd5b50610338611816565b34801561069357600080fd5b506103d4600480360360208110156106aa57600080fd5b503561181c565b3480156106bd57600080fd5b50610338600480360360208110156106d457600080fd5b50356001600160a01b0316611c34565b3480156106f057600080fd5b506106f9611c3f565b604080516001600160a01b039092168252519081900360200190f35b34801561072157600080fd5b506103d46004803603604081101561073857600080fd5b506001600160a01b038135169060200135611c4e565b34801561075a57600080fd5b506103d4611ccc565b34801561076f57600080fd5b506103d46004803603602081101561078657600080fd5b5035611dc1565b34801561079957600080fd5b506106f9611e28565b3480156107ae57600080fd5b506103d4600480360360208110156107c557600080fd5b5035611e4c565b3480156107d857600080fd5b50610338611eb3565b3480156107ed57600080fd5b50610338611eb9565b34801561080257600080fd5b50610338611ebf565b34801561081757600080fd5b506103386004803603602081101561082e57600080fd5b50356001600160a01b0316611ec5565b34801561084a57600080fd5b5061030f611f6c565b34801561085f57600080fd5b506103d461216c565b34801561087457600080fd5b506103d46004803603602081101561088b57600080fd5b503561225a565b34801561089e57600080fd5b5061033861254d565b3480156108b357600080fd5b50610338600480360360208110156108ca57600080fd5b50356001600160a01b0316612553565b3480156108e657600080fd5b5061030f612565565b3480156108fb57600080fd5b50610338612737565b34801561091057600080fd5b506103386004803603602081101561092757600080fd5b50356001600160a01b031661273d565b34801561094357600080fd5b506103d46004803603602081101561095a57600080fd5b50356001600160a01b031661274f565b34801561097657600080fd5b506103d46004803603602081101561098d57600080fd5b5035612851565b3480156109a057600080fd5b5061033861291f565b3480156109b557600080fd5b50610338612925565b3480156109ca57600080fd5b5061033861292b565b3480156109df57600080fd5b506106f9612931565b60006109f2612955565b6001600160a01b0316610a03611c3f565b6001600160a01b031614610a4c576040805162461bcd60e51b8152602060048201819052602482015260008051602061301e833981519152604482015290519081900360640190fd5b816001600160a01b031663a9059cbb33846001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610aa957600080fd5b505afa158015610abd573d6000803e3d6000fd5b505050506040513d6020811015610ad357600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b158015610b2457600080fd5b505af1158015610b38573d6000803e3d6000fd5b505050506040513d6020811015610b4e57600080fd5b505192915050565b60155481565b60165460ff1681565b6001600160a01b038116600090815260126020526040812054819060ff1615610b9e575033600090815260116020526040902054610be3565b6001600160a01b03831660009081526010602052604090205415610be3576001600160a01b038316600090815260106020526040902054610be0906004612959565b90505b92915050565b610bf1612955565b6001600160a01b0316610c02611c3f565b6001600160a01b031614610c4b576040805162461bcd60e51b8152602060048201819052602482015260008051602061301e833981519152604482015290519081900360640190fd5b8181118015610c5957508282115b8015610c6457508383115b8015610c6f57508484115b8015610c7a57504285115b610cbf576040805162461bcd60e51b815260206004820152601160248201527004e6f20676f6f642074696d657374616d7607c1b604482015290519081900360640190fd5b600594909455600692909255600755600855600955565b6001600160a01b038116600090815260126020526040812054819060ff1615610d0157506001610be3565b6001600160a01b038316600090815260106020526040902054151580610d3e57506001600160a01b03831660009081526011602052604090205415155b15610be35750600192915050565b60145481565b60186020526000908152604090205481565b60015481565b610d72612955565b6001600160a01b0316610d83611c3f565b6001600160a01b031614610dcc576040805162461bcd60e51b8152602060048201819052602482015260008051602061301e833981519152604482015290519081900360640190fd5b610dd46129b2565b15610e21576040805162461bcd60e51b815260206004820152601860248201527750726573616c6520616c726561647920737461727465642160401b604482015290519081900360640190fd5b6014819055601354610e40908290610e3a906064612959565b90612a3f565b60155550565b6000610e506129b2565b905090565b6000610e5f612aa6565b610eb0576040805162461bcd60e51b815260206004820152601860248201527f636c61696d696e67206e6f7420616c6c6f776564207965740000000000000000604482015290519081900360640190fd5b336000908152600a602052604090205460ff16610f205733600090815260186020526040902054610f1b576040805162461bcd60e51b815260206004820152601060248201526f6e6f7468696e6720746f20636c61696d60801b604482015290519081900360640190fd5b61101c565b336000908152600b602052604090205415801590610f4057506005544210155b80610f665750336000908152600c602052604090205415801590610f6657506006544210155b80610f8c5750336000908152600d602052604090205415801590610f8c57506007544210155b80610fb25750336000908152600e602052604090205415801590610fb257506008544210155b80610fd85750336000908152600f602052604090205415801590610fd857506009544210155b61101c576040805162461bcd60e51b815260206004820152601060248201526f6e6f7468696e6720746f20636c61696d60801b604482015290519081900360640190fd5b336000908152600a602052604081205460ff1661112a57336000908152600a60209081526040808320805460ff19166001179055601554601890925282205461106b91606491610e3a91612959565b3360009081526018602052604081205560045490915061109390606490610e3a908490612959565b915061109f8183612aaf565b90506110ac816005612a3f565b336000908152600b60205260409020556110c7816005612a3f565b336000908152600c60205260409020556110e2816005612a3f565b336000908152600d60205260409020556110fd816005612a3f565b336000908152600e6020526040902055611118816005612a3f565b336000908152600f6020526040902055505b336000908152600f60205260409020541580159061114a57506009544210155b156111e157336000908152600b6020908152604080832054600c835281842054600d845282852054600e855283862054600f90955292909420546111a394919361119d9384929091839182908a90612b0c565b90612b0c565b336000908152600b60209081526040808320839055600c8252808320839055600d8252808320839055600e8252808320839055600f90915281205590505b336000908152600e60205260409020541580159061120157506008544210155b1561127d57336000908152600b6020908152604080832054600c835281842054600d845282852054600e9094529190932054611249939261119d929183919082908890612b0c565b336000908152600b60209081526040808320839055600c8252808320839055600d8252808320839055600e90915281205590505b336000908152600d60205260409020541580159061129d57506007544210155b1561130157336000908152600b6020908152604080832054600c835281842054600d9093529220546112d7929161119d9182908690612b0c565b336000908152600b60209081526040808320839055600c8252808320839055600d90915281205590505b336000908152600c60205260409020541580159061132157506006544210155b1561137257336000908152600b6020908152604080832054600c90925290912054611352919061119d908490612b0c565b336000908152600b60209081526040808320839055600c90915281205590505b336000908152600b60205260409020541580159061139257506005544210155b156113c557336000908152600b60205260409020546113b2908290612b0c565b336000908152600b602052604081205590505b336000908152601960205260409020546113df9082612b0c565b336000908152601960205260409020556017546113fc9082612aaf565b6017556040805163a9059cbb60e01b81523360048201526024810183905290516001600160a01b037f000000000000000000000000a2881f7f441267042f9778ffa0d4f834693426be169163a9059cbb9160448083019260209291908290030181600087803b15801561146e57600080fd5b505af1158015611482573d6000803e3d6000fd5b505050506040513d602081101561149857600080fd5b505191505090565b60085481565b6000610e50612aa6565b6114b8612955565b6001600160a01b03166114c9611c3f565b6001600160a01b031614611512576040805162461bcd60e51b8152602060048201819052602482015260008051602061301e833981519152604482015290519081900360640190fd5b6001600160a01b0316600090815260106020526040812055565b611534612955565b6001600160a01b0316611545611c3f565b6001600160a01b03161461158e576040805162461bcd60e51b8152602060048201819052602482015260008051602061301e833981519152604482015290519081900360640190fd5b8281146115cc5760405162461bcd60e51b815260040180806020018281038252602b815260200180612fac602b913960400191505060405180910390fd5b60005b83811015611625578282828181106115e357fe5b90506020020135601060008787858181106115fa57fe5b602090810292909201356001600160a01b0316835250810191909152604001600020556001016115cf565b5050505050565b60045481565b61163a612955565b6001600160a01b031661164b611c3f565b6001600160a01b031614611694576040805162461bcd60e51b8152602060048201819052602482015260008051602061301e833981519152604482015290519081900360640190fd5b600081116116e9576040805162461bcd60e51b815260206004820152601b60248201527f737461626c65207461726765742063616e2774206265205a65726f0000000000604482015290519081900360640190fd5b6000821161173e576040805162461bcd60e51b815260206004820152601a60248201527f746f6b656e207461726765742063616e2774206265205a65726f000000000000604482015290519081900360640190fd5b6013829055601481905561175781610e3a846064612959565b6015555050565b601b5481565b61176c612955565b6001600160a01b031661177d611c3f565b6001600160a01b0316146117c6576040805162461bcd60e51b8152602060048201819052602482015260008051602061301e833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60135481565b60065481565b6118246129b2565b60021461186d576040805162461bcd60e51b8152602060048201526012602482015271139bdd081d1a194819dbdbd9081c9bdd5b9960721b604482015290519081900360640190fd5b600061187833610b65565b116118ca576040805162461bcd60e51b815260206004820152601760248201527f796f7520617265206e6f742077686974656c6973746564000000000000000000604482015290519081900360640190fd5b60008111611910576040805162461bcd60e51b815260206004820152600e60248201526d616d6f756e7420746f6f206c6f7760901b604482015290519081900360640190fd5b601454601a546119209083612b0c565b1115611968576040805162461bcd60e51b81526020600482015260126024820152711d185c99d95d08185b1c9958591e481a1a5d60721b604482015290519081900360640190fd5b3360009081526012602052604090205460ff166119c057336000908152601260209081526040808320805460ff1916600117905560109091529020546119af906004612959565b336000908152601160205260409020555b604080518082018252601881527713585e1a5b5d5b481c1d5c98da185cd94818d85c081a1a5d60421b60208083019190915233600090815260119091529190912054611a0d918390612b66565b3360008181526011602090815260408083209490945583516323b872dd60e01b815260048101939093523060248401526044830185905292517f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f6001600160a01b0316936323b872dd93606480820194929392918390030190829087803b158015611a9757600080fd5b505af1158015611aab573d6000803e3d6000fd5b505050506040513d6020811015611ac157600080fd5b5051611acc57600080fd5b6000611ae86064610e3a6015548561295990919063ffffffff16565b9050601354611b0282601754612b0c90919063ffffffff16565b1115611b40576040805162461bcd60e51b81526020600482015260086024820152671cdbdb19081bdd5d60c21b604482015290519081900360640190fd5b33600090815260186020526040902054611b6657601b54611b62906001612b0c565b601b555b33600090815260186020526040902054611b809083612b0c565b33600090815260186020526040902055601754611b9d9082612b0c565b601755601a54611bad9083612b0c565b601a8190556014541415611c3057604080516003815290517f8b760fcc1fba5875d2dee24210975dbc507d7fb390c5fc674a336a4230459b819181900360200190a16016805460ff191660011790556040805142815290517fdbb898b65754de938e81c6a509625c23cc027521dca30ed62fce6f2e8f838c7a9181900360200190a15b5050565b6000610be382612bfd565b6000546001600160a01b031690565b611c56612955565b6001600160a01b0316611c67611c3f565b6001600160a01b031614611cb0576040805162461bcd60e51b8152602060048201819052602482015260008051602061301e833981519152604482015290519081900360640190fd5b6001600160a01b03909116600090815260106020526040902055565b611cd4612955565b6001600160a01b0316611ce5611c3f565b6001600160a01b031614611d2e576040805162461bcd60e51b8152602060048201819052602482015260008051602061301e833981519152604482015290519081900360640190fd5b60165460ff1615611d7f576040805162461bcd60e51b815260206004820152601660248201527550726573616c6520616c726561647920656e6465642160501b604482015290519081900360640190fd5b6016805460ff191660011790556040805142815290517fdbb898b65754de938e81c6a509625c23cc027521dca30ed62fce6f2e8f838c7a9181900360200190a1565b611dc9612955565b6001600160a01b0316611dda611c3f565b6001600160a01b031614611e23576040805162461bcd60e51b8152602060048201819052602482015260008051602061301e833981519152604482015290519081900360640190fd5b600255565b7f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f81565b611e54612955565b6001600160a01b0316611e65611c3f565b6001600160a01b031614611eae576040805162461bcd60e51b8152602060048201819052602482015260008051602061301e833981519152604482015290519081900360640190fd5b600155565b60025481565b60075481565b60035481565b6001600160a01b038116600090815260186020526040812054819015611f18576015546001600160a01b038416600090815260186020526040902054611f1191606491610e3a91612959565b9050610be3565b6001600160a01b0383166000908152600f6020908152604080832054600e835281842054600d845282852054600c855283862054600b9095529290942054610be094919361119d9384929091839190612b0c565b6000611f76612955565b6001600160a01b0316611f87611c3f565b6001600160a01b031614611fd0576040805162461bcd60e51b8152602060048201819052602482015260008051602061301e833981519152604482015290519081900360640190fd5b60165460ff16612023576040805162461bcd60e51b81526020600482015260196024820152781c1c995cd85b19481a185cc81b9bdd081e595d08195b991959603a1b604482015290519081900360640190fd5b7f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f6001600160a01b031663a9059cbb337f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156120c057600080fd5b505afa1580156120d4573d6000803e3d6000fd5b505050506040513d60208110156120ea57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561213b57600080fd5b505af115801561214f573d6000803e3d6000fd5b505050506040513d602081101561216557600080fd5b5051905090565b612174612955565b6001600160a01b0316612185611c3f565b6001600160a01b0316146121ce576040805162461bcd60e51b8152602060048201819052602482015260008051602061301e833981519152604482015290519081900360640190fd5b6121d66129b2565b15612220576040805162461bcd60e51b8152602060048201526015602482015274050726573616c6520726f756e642069736e2774203605c1b604482015290519081900360640190fd5b42600181905560408051918252517f59ff1c5e8a691bbfdd4acd20ca4355bd3e0878914814bc6d035bd1584d34135d9181900360200190a1565b6122626129b2565b6001146122b6576040805162461bcd60e51b815260206004820152601b60248201527f70726573616c652069736e2774206f6e20676f6f6420726f756e640000000000604482015290519081900360640190fd5b601454601a546122c69083612b0c565b111561230e576040805162461bcd60e51b815260206004820152601260248201527115185c99d95d08185b1c9958591e481a1a5d60721b604482015290519081900360640190fd5b3360009081526010602052604090205481111561235c5760405162461bcd60e51b815260040180806020018281038252602381526020018061303e6023913960400191505060405180910390fd5b3360009081526012602052604090205460ff166123b457336000908152601260209081526040808320805460ff1916600117905560109091529020546123a3906004612959565b336000908152601160205260409020555b604080516323b872dd60e01b81523360048201523060248201526044810183905290516001600160a01b037f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f16916323b872dd9160648083019260209291908290030181600087803b15801561242957600080fd5b505af115801561243d573d6000803e3d6000fd5b505050506040513d602081101561245357600080fd5b505161245e57600080fd5b600061247a6064610e3a6015548561295990919063ffffffff16565b905060135461249482601754612b0c90919063ffffffff16565b11156124d2576040805162461bcd60e51b81526020600482015260086024820152671cdbdb19081bdd5d60c21b604482015290519081900360640190fd5b604080518082018252601881527713585e1a5b5d5b481c1d5c98da185cd94818d85c081a1a5d60421b6020808301919091523360009081526010909152919091205461251f918490612b66565b33600090815260106020908152604080832093909355601890522054611b6657601b54611b62906001612b0c565b60095481565b60196020526000908152604090205481565b600061256f612955565b6001600160a01b0316612580611c3f565b6001600160a01b0316146125c9576040805162461bcd60e51b8152602060048201819052602482015260008051602061301e833981519152604482015290519081900360640190fd5b60165460ff1661261c576040805162461bcd60e51b81526020600482015260196024820152781c1c995cd85b19481a185cc81b9bdd081e595d08195b991959603a1b604482015290519081900360640190fd5b7f000000000000000000000000a2881f7f441267042f9778ffa0d4f834693426be6001600160a01b031663a9059cbb336126f16017547f000000000000000000000000a2881f7f441267042f9778ffa0d4f834693426be6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156126bf57600080fd5b505afa1580156126d3573d6000803e3d6000fd5b505050506040513d60208110156126e957600080fd5b505190612aaf565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561213b57600080fd5b60175481565b60106020526000908152604090205481565b612757612955565b6001600160a01b0316612768611c3f565b6001600160a01b0316146127b1576040805162461bcd60e51b8152602060048201819052602482015260008051602061301e833981519152604482015290519081900360640190fd5b6001600160a01b0381166127f65760405162461bcd60e51b8152600401808060200182810382526026815260200180612fd76026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b612859612955565b6001600160a01b031661286a611c3f565b6001600160a01b0316146128b3576040805162461bcd60e51b8152602060048201819052602482015260008051602061301e833981519152604482015290519081900360640190fd5b6128bb6129b2565b15612908576040805162461bcd60e51b815260206004820152601860248201527750726573616c6520616c726561647920737461727465642160401b604482015290519081900360640190fd5b6013819055601454610e4090610e3a836064612959565b60055481565b60035490565b601a5481565b7f000000000000000000000000a2881f7f441267042f9778ffa0d4f834693426be81565b3390565b60008261296857506000610be3565b8282028284828161297557fe5b0414610be05760405162461bcd60e51b8152600401808060200182810382526021815260200180612ffd6021913960400191505060405180910390fd5b6000806001544210806129c55750600154155b156129d257506000610e50565b60015442101580156129f157506003546001546129ee91612b0c565b42105b156129fe57506001610e50565b600354600154612a0d91612b0c565b4210158015612a1f575060165460ff16155b15612a2c57506002610e50565b60165460ff1615610e5057506003905090565b6000808211612a95576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612a9e57fe5b049392505050565b60025442101590565b600082821115612b06576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082820183811015610be0576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008184841115612bf55760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612bba578181015183820152602001612ba2565b50505050905090810190601f168015612be75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038116600090815260186020526040812054819015612c6c576015546001600160a01b0384166000908152601860205260408120549091612c4c91606491610e3a9190612959565b9050612c686064610e3a6004548461295990919063ffffffff16565b9150505b600954421115612d20576001600160a01b0383166000908152600f602052604090205415612cef576001600160a01b0383166000908152600b6020908152604080832054600c835281842054600d845282852054600e855283862054600f9095529290942054612ce894919361119d9384929091839190612b0c565b9050612d1b565b6015546001600160a01b038416600090815260186020526040902054611f1191606491610e3a91612959565b610be3565b600854421115612dda576001600160a01b0383166000908152600e602052604090205415612d8f576001600160a01b0383166000908152600b6020908152604080832054600c835281842054600d845282852054600e9094529190932054612ce8939261119d92918391612b0c565b6015546001600160a01b0384166000908152601860205260408120549091612dbe91606491610e3a9190612959565b9050612dd2612710610e3a83612008612959565b915050610be3565b600754421115612e80576001600160a01b0383166000908152600d602052604090205415612e3d576001600160a01b0383166000908152600b6020908152604080832054600c835281842054600d909352922054612ce8929161119d9190612b0c565b6015546001600160a01b0384166000908152601860205260408120549091612e6c91606491610e3a9190612959565b9050612dd2612710610e3a83611900612959565b600654421115612f19576001600160a01b0383166000908152600c602052604090205415612ed6576001600160a01b0383166000908152600b6020908152604080832054600c90925290912054612ce891612b0c565b6015546001600160a01b0384166000908152601860205260408120549091612f0591606491610e3a9190612959565b9050612dd2612710610e3a836111f8612959565b600554421115610be3576001600160a01b0383166000908152600b602052604090205415612f6057506001600160a01b0382166000908152600b6020526040902054610be3565b6015546001600160a01b0384166000908152601860205260408120549091612f8f91606491610e3a9190612959565b9050612fa3612710610e3a83610af0612959565b94935050505056fe497373756520696e205f61646472657373657320616e64205f616c6c6f636174696f6e73206c656e6774684f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572416d6f756e7420746f6f2068696768206f72206e6f74207768697465206c6973746564a2646970667358221220a15d4e94d58db1c700df9ff7ee08622918a11f509fb1e770f00b4251ad127c1964736f6c63430007060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a2881f7f441267042f9778ffa0d4f834693426be0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
-----Decoded View---------------
Arg [0] : _token (address): 0xa2881F7F441267042f9778fFA0d4F834693426be
Arg [1] : _stable (address): 0x6B175474E89094C44Da98b954EedeAC495271d0F
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000a2881f7f441267042f9778ffa0d4f834693426be
Arg [1] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.013003 | 18,411.84 | $239.4 |
Loading...
Loading
[ 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.