Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 111 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Swap Ether For G... | 10742462 | 1548 days ago | IN | 0.214 ETH | 0.00861489 | ||||
Transfer | 10742397 | 1548 days ago | IN | 0.120247 ETH | 0.01717437 | ||||
Transfer | 10742347 | 1548 days ago | IN | 0.147847 ETH | 0.01 | ||||
Transfer | 10742323 | 1548 days ago | IN | 0.157847 ETH | 0.001953 | ||||
Swap Ether For G... | 10742241 | 1548 days ago | IN | 0.28 ETH | 0.01375861 | ||||
Transfer | 10742079 | 1548 days ago | IN | 0.05740179 ETH | 0.01509726 | ||||
Swap Ether For G... | 10742040 | 1548 days ago | IN | 1.965 ETH | 0.01408717 | ||||
Swap Ether For G... | 10741888 | 1548 days ago | IN | 0.214 ETH | 0.0117781 | ||||
Swap Ether For G... | 10741540 | 1548 days ago | IN | 0.66 ETH | 0.0105402 | ||||
Transfer | 10740772 | 1548 days ago | IN | 2.354 ETH | 0.01478056 | ||||
Transfer | 10740546 | 1548 days ago | IN | 0.89183 ETH | 0.01585787 | ||||
Transfer | 10740538 | 1548 days ago | IN | 0.005 ETH | 0.002226 | ||||
Transfer | 10740519 | 1548 days ago | IN | 0.01 ETH | 0.01523584 | ||||
Transfer | 10740463 | 1548 days ago | IN | 0.21152 ETH | 0.01773441 | ||||
Transfer | 10738340 | 1549 days ago | IN | 2 ETH | 0.01505138 | ||||
Swap Ether For G... | 10737854 | 1549 days ago | IN | 0.68 ETH | 0.02396748 | ||||
Swap Ether For G... | 10737475 | 1549 days ago | IN | 0.2 ETH | 0.02389273 | ||||
Swap Ether For G... | 10736080 | 1549 days ago | IN | 0.060045 ETH | 0.01201634 | ||||
Transfer | 10735868 | 1549 days ago | IN | 0.05 ETH | 0.01214991 | ||||
Swap Ether For G... | 10735208 | 1549 days ago | IN | 0.5 ETH | 0.00997955 | ||||
Swap Ether For G... | 10734800 | 1549 days ago | IN | 1.5 ETH | 0.01418631 | ||||
Swap Ether For G... | 10733024 | 1549 days ago | IN | 2 ETH | 0.01107869 | ||||
Transfer | 10732510 | 1550 days ago | IN | 0 ETH | 0.0024 | ||||
Swap Ether For G... | 10730402 | 1550 days ago | IN | 0.86 ETH | 0.02171666 | ||||
Swap Ether For G... | 10730137 | 1550 days ago | IN | 1.9 ETH | 0.02062907 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
10743399 | 1548 days ago | 207.8746762 ETH | ||||
10742462 | 1548 days ago | 0.00503924 ETH | ||||
10742397 | 1548 days ago | 0.00415939 ETH | ||||
10742241 | 1548 days ago | 0.00138524 ETH | ||||
10742079 | 1548 days ago | 0.00322838 ETH | ||||
10742040 | 1548 days ago | 0.00659826 ETH | ||||
10742039 | 1548 days ago | 0.00667762 ETH | ||||
10742039 | 1548 days ago | 1.965 ETH | ||||
10741888 | 1548 days ago | 0.00505893 ETH | ||||
10741540 | 1548 days ago | 0.00993185 ETH | ||||
10740772 | 1548 days ago | 0.0009567 ETH | ||||
10740546 | 1548 days ago | 0.00963101 ETH | ||||
10740519 | 1548 days ago | 0.00226232 ETH | ||||
10740463 | 1548 days ago | 0.00259814 ETH | ||||
10738340 | 1549 days ago | 0.00324755 ETH | ||||
10737854 | 1549 days ago | 0.00680786 ETH | ||||
10737475 | 1549 days ago | 0.00656746 ETH | ||||
10736080 | 1549 days ago | 0.00588498 ETH | ||||
10735868 | 1549 days ago | 0.00357723 ETH | ||||
10735208 | 1549 days ago | 0.0047997 ETH | ||||
10734800 | 1549 days ago | 0.00651485 ETH | ||||
10733024 | 1549 days ago | 0.00349256 ETH | ||||
10730402 | 1550 days ago | 0.00892768 ETH | ||||
10730137 | 1550 days ago | 0.00425538 ETH | ||||
10730048 | 1550 days ago | 0.00226426 ETH |
Loading...
Loading
Contract Name:
GeoSale
Compiler Version
v0.6.11+commit.5ef660b1
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-08-24 */ pragma solidity ^0.6.0; // SPDX-License-Identifier: MIT /** * @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); } /* * @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; } } /** * @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. */ 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 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; } } /** * This source code belongs to Augur */ /** * @title SafeMathInt256 * @dev Int256 math operations with safety checks that throw on error */ library SafeMathInt256 { // Signed ints with n bits can range from -2**(n-1) to (2**(n-1) - 1) int256 private constant INT256_MIN = -2**(255); int256 private constant INT256_MAX = (2**(255) - 1); function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; require(a == 0 || c / a == b); return c; } function div(int256 a, int256 b) internal pure returns (int256) { // No need to check for dividing by 0 -- Solidity automatically throws on division by 0 int256 c = a / b; return c; } function sub(int256 a, int256 b) internal pure returns (int256) { require(((a >= 0) && (b >= a - INT256_MAX)) || ((a < 0) && (b <= a - INT256_MIN))); return a - b; } function add(int256 a, int256 b) internal pure returns (int256) { require(((a >= 0) && (b <= INT256_MAX - a)) || ((a < 0) && (b >= INT256_MIN - a))); return a + b; } function min(int256 a, int256 b) internal pure returns (int256) { if (a <= b) { return a; } else { return b; } } function max(int256 a, int256 b) internal pure returns (int256) { if (a >= b) { return a; } else { return b; } } function abs(int256 a) internal pure returns (int256) { if (a < 0) { return -a; } return a; } function getInt256Min() internal pure returns (int256) { return INT256_MIN; } function getInt256Max() internal pure returns (int256) { return INT256_MAX; } // Float [fixed point] Operations function fxpMul(int256 a, int256 b, int256 base) internal pure returns (int256) { return div(mul(a, b), base); } function fxpDiv(int256 a, int256 b, int256 base) internal pure returns (int256) { return div(mul(a, base), b); } } /** * @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, 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) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * 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); uint256 c = a - b; return c; } /** * @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) { // 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 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts 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) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts 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) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract FinalBondingCurve { using SafeMath for uint; using SafeMathInt256 for int; uint constant private MAX_INT = 2**255-1; uint constant private bisectionPrecision = 0.01 ether; int constant private displacement = 2e15; int constant private B = 4*3.2000e40; int constant private A = 1250000; uint public cap; constructor(uint _cap) public { cap = _cap; } function computeSaleParameters( uint a, // Tokens sold up to now uint R // Reserve currency amount that you are willing to spend ) public view returns ( uint T, // T = b - a, amount of tokens uint finalExpenditure ) { uint b_cap = cap; uint b = b_cap; uint best_b; uint lower = a; uint iterations; uint Rr; // R(sub)r stands for required reserve currency: amount that is needed to purchase b - a tokens while(iterations < 20) { Rr = evaluateIntegral(safeCastUintToInt(b), safeCastUintToInt(a)); if(Rr > R) { // If the required value is more than what is attached, // we need to find a lower value than R b_cap = b; b = ((b.sub(lower)).div(2)).add(lower); // b = lower + [b - lower] / 2 } else { finalExpenditure = Rr; best_b = b; lower = best_b; if(R.sub(Rr) > bisectionPrecision) { if(b == b_cap) { break; } b = ((b_cap.sub(b)).div(2)).add(b); } else { break; } } iterations++; } require( finalExpenditure <= R, "FinalBondingCurve.computeSaleParameters() - Not enough ether" ); if(finalExpenditure > 0) { T = best_b.sub(a); } require(T > 0, "FinalBondingCurve.computeSaleParameters() - Returned 0 tokens"); } function evaluateIntegral(int b, int a) public pure returns (uint) { int _displacement = displacement; int _b; int _a; int b_delta = b.sub(_displacement); int a_delta = a.sub(_displacement); int _b_fourthComponent = power(uint(SafeMathInt256.abs(b_delta)), uint32(4), false).div(B); int _b_firstComponent = A.mul(b_delta); _b = _b_fourthComponent.add(_b_firstComponent); _a = power(uint(SafeMathInt256.abs(a_delta)), uint32(4), false).div(B) .add(A.mul(a_delta)); require( _b > _a, "FinalBondingCurve.evaluateIntegral() - Negative price computed" ); int result = _b.sub(_a); return uint(result); } function power( uint256 base, uint32 exp, bool negativeBase // true if base is negative ) public pure returns (int) { // (uint result, uint8 precision) = Power.power(base, 1, exp, 1); // result = result.div(2**uint(precision)); uint result = u_pow(base, uint(exp)); if(negativeBase) { return safeCastUintToInt(result) * int(-1); } else { return safeCastUintToInt(result); } } function u_pow(uint a, uint b) public pure returns (uint r) { r = 1; while(true) { if(b % 2 == 1) r = r.mul(a); b /= 2; if(b == 0) break; a = a.mul(a); } } function safeCastUintToInt(uint value) public pure returns (int) { require(value <= 2**255-1, "FinalBondingCurve.castUintToInt - Overflow"); return int(value); } } /** * @dev Interface of the ERC777TokensRecipient standard as defined in the EIP. * * Accounts can be notified of {IERC777} tokens being sent to them by having a * contract implement this interface (contract holders can be their own * implementer) and registering it on the * https://eips.ethereum.org/EIPS/eip-1820[ERC1820 global registry]. * * See {IERC1820Registry} and {ERC1820Implementer}. */ interface IERC777Recipient { /** * @dev Called by an {IERC777} token contract whenever tokens are being * moved or created into a registered account (`to`). The type of operation * is conveyed by `from` being the zero address or not. * * This call occurs _after_ the token contract's state is updated, so * {IERC777-balanceOf}, etc., can be used to query the post-operation state. * * This function may revert to prevent the operation from being executed. */ function tokensReceived( address operator, address from, address to, uint256 amount, bytes calldata userData, bytes calldata operatorData ) external; } /** * @dev Interface of the global ERC1820 Registry, as defined in the * https://eips.ethereum.org/EIPS/eip-1820[EIP]. Accounts may register * implementers for interfaces in this registry, as well as query support. * * Implementers may be shared by multiple accounts, and can also implement more * than a single interface for each account. Contracts can implement interfaces * for themselves, but externally-owned accounts (EOA) must delegate this to a * contract. * * {IERC165} interfaces can also be queried via the registry. * * For an in-depth explanation and source code analysis, see the EIP text. */ interface IERC1820Registry { /** * @dev Sets `newManager` as the manager for `account`. A manager of an * account is able to set interface implementers for it. * * By default, each account is its own manager. Passing a value of `0x0` in * `newManager` will reset the manager to this initial state. * * Emits a {ManagerChanged} event. * * Requirements: * * - the caller must be the current manager for `account`. */ function setManager(address account, address newManager) external; /** * @dev Returns the manager for `account`. * * See {setManager}. */ function getManager(address account) external view returns (address); /** * @dev Sets the `implementer` contract as ``account``'s implementer for * `interfaceHash`. * * `account` being the zero address is an alias for the caller's address. * The zero address can also be used in `implementer` to remove an old one. * * See {interfaceHash} to learn how these are created. * * Emits an {InterfaceImplementerSet} event. * * Requirements: * * - the caller must be the current manager for `account`. * - `interfaceHash` must not be an {IERC165} interface id (i.e. it must not * end in 28 zeroes). * - `implementer` must implement {IERC1820Implementer} and return true when * queried for support, unless `implementer` is the caller. See * {IERC1820Implementer-canImplementInterfaceForAddress}. */ function setInterfaceImplementer(address account, bytes32 interfaceHash, address implementer) external; /** * @dev Returns the implementer of `interfaceHash` for `account`. If no such * implementer is registered, returns the zero address. * * If `interfaceHash` is an {IERC165} interface id (i.e. it ends with 28 * zeroes), `account` will be queried for support of it. * * `account` being the zero address is an alias for the caller's address. */ function getInterfaceImplementer(address account, bytes32 interfaceHash) external view returns (address); /** * @dev Returns the interface hash for an `interfaceName`, as defined in the * corresponding * https://eips.ethereum.org/EIPS/eip-1820#interface-name[section of the EIP]. */ function interfaceHash(string calldata interfaceName) external pure returns (bytes32); /** * @notice Updates the cache with whether the contract implements an ERC165 interface or not. * @param account Address of the contract for which to update the cache. * @param interfaceId ERC165 interface for which to update the cache. */ function updateERC165Cache(address account, bytes4 interfaceId) external; /** * @notice Checks whether a contract implements an ERC165 interface or not. * If the result is not cached a direct lookup on the contract address is performed. * If the result is not cached or the cached value is out-of-date, the cache MUST be updated manually by calling * {updateERC165Cache} with the contract address. * @param account Address of the contract to check. * @param interfaceId ERC165 interface to check. * @return True if `account` implements `interfaceId`, false otherwise. */ function implementsERC165Interface(address account, bytes4 interfaceId) external view returns (bool); /** * @notice Checks whether a contract implements an ERC165 interface or not without using nor updating the cache. * @param account Address of the contract to check. * @param interfaceId ERC165 interface to check. * @return True if `account` implements `interfaceId`, false otherwise. */ function implementsERC165InterfaceNoCache(address account, bytes4 interfaceId) external view returns (bool); event InterfaceImplementerSet(address indexed account, bytes32 indexed interfaceHash, address indexed implementer); event ManagerChanged(address indexed account, address indexed newManager); } abstract contract ERC777Receiver is IERC777Recipient { // Needed constants to accept ERC777 tokens in deposit IERC1820Registry constant private _erc1820 = // See EIP1820 IERC1820Registry(0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24); bytes32 constant private TOKENS_RECIPIENT_INTERFACE_HASH = // See EIP777 keccak256("ERC777TokensRecipient"); constructor() public { // Register as a token receiver _erc1820.setInterfaceImplementer( address(this), TOKENS_RECIPIENT_INTERFACE_HASH, address(this) ); } address private token; // @dev: This hook is called when the contract receives GeoTokens. // The contract can only receive GeoTokens from the owner function tokensReceived( address /*operator*/, address from, address /*to*/, uint256 , bytes calldata /*userData*/, bytes calldata /*operatorData*/ ) external override { require(msg.sender == getToken(), "GeoPreSale.tokensReceived() - Wrong token"); require(from == getOwner(), "GeoPreSale.tokensReceived() - Only owner"); } function getOwner() virtual public view returns(address); function getToken() virtual public view returns(address); } contract Withdrawable is Ownable { event EtherWithdrawn( address sender, uint amount ); receive() external virtual payable {} // @dev: allows the owner to withdraw the eth that has been deposited in the contract function withdrawEth() external onlyOwner { address payable to = payable(msg.sender); uint bal; assembly { bal := selfbalance() } require( bal > 0, "Withdrawable withdrawEth() - No ether balance in the contract" ); (bool success, ) = to.call{value: bal}(""); require( success, "Withdrawable withdrawEth() - Could not withdraw eth" ); emit EtherWithdrawn( msg.sender, bal ); } } contract GeoSale is ERC777Receiver, Withdrawable, FinalBondingCurve { uint constant private PEAK_PRICE = 1500000; // WEI / GAGEO address public token; uint public startSaleTimestamp; // Unix timestamp uint public duration; // Seconds uint public price = 1000000; // WEI / GAGEO uint public tokensSold; // in nanoGeos (gaGeos) event PurchasedGeoTokens( address indexed sender, uint ethAmount, uint geoAmount, uint returnedEth ); event RemainingGeoTokensWithdrawn( address sender, uint amount ); constructor( uint _startSaleTimestamp, uint _duration, uint _cap, address _token ) FinalBondingCurve(_cap) public { require(cap > 0); require(_token != address(0)); require(_duration > 0); startSaleTimestamp = _startSaleTimestamp; duration = _duration; token = _token; } fallback() external { revert("GeoPreSale - Fallback function called"); } receive() external payable override { swapEtherForGeo(); } function setStartSaleTimestamp(uint timestamp) external onlyOwner { startSaleTimestamp = timestamp; } function setDuration(uint _duration) external onlyOwner { require(_duration > 0); duration = _duration; } function setToken(address _token) external onlyOwner { require(_token != address(0)); token = _token; } function setCap(uint _cap) external onlyOwner { require(_cap > 0); FinalBondingCurve.cap = _cap; } // @dev: allows the owner to withdraw GeoTokens that have not been sold out // after the sale has ended function withdrawGeo() external onlyOwner { require(saleIsOver(), "GeoSale.withdrawGeo() - Sale is not over"); IERC20 _token = IERC20(getToken()); uint remainingTokens = _token.balanceOf(address(this)); _token.transfer(msg.sender, remainingTokens); emit RemainingGeoTokensWithdrawn( msg.sender, remainingTokens ); } function swapEtherForGeo() public payable returns (bool) { require(saleStarted(), "GeoSale.swapEtherForGeo() - Sale has not started"); require(!saleIsOver(), "GeoSale.swapEtherForGeo() - Sale is over"); uint _tokensSold = tokensSold; uint _cap = cap; uint tokensBought; uint finalExpenditure; if(_tokensSold < _cap) { (tokensBought, finalExpenditure) = computeSaleParameters(_tokensSold, msg.value); _tokensSold = _tokensSold.add(tokensBought); if(_tokensSold >= _cap && msg.value > finalExpenditure) { uint tokensBoughtAtFixexRate = purchaseAtFixedRate(msg.value.sub(finalExpenditure)); finalExpenditure = finalExpenditure.add(tokensBoughtAtFixexRate.mul(PEAK_PRICE)); tokensBought = tokensBought.add(tokensBoughtAtFixexRate); _tokensSold = _tokensSold.add(tokensBoughtAtFixexRate); } } else { tokensBought = purchaseAtFixedRate(msg.value); finalExpenditure = tokensBought.mul(PEAK_PRICE); _tokensSold = _tokensSold.add(tokensBought); } price = finalExpenditure.div(tokensBought); tokensSold = _tokensSold; uint returnedEth = msg.value.sub(finalExpenditure); // Up to this moment, computations were done in nanoGeos. // So we perform a conversion to attoGeos by multiplying by 10^9 tokensBought = tokensBought.mul(10**9); require(IERC20(getToken()).transfer(msg.sender, tokensBought)); address payable to = payable(msg.sender); (bool success, ) = to.call{value: returnedEth}(""); require( success, "GeoSale.swapEtherForGeo - Could not return eth" ); emit PurchasedGeoTokens( msg.sender, finalExpenditure, tokensBought, returnedEth ); return true; } function precomputePurchase(uint value) external view returns(uint tokensBought, uint finalExpenditure, uint _price) { if(!saleStarted()) { return (0,0,0); } if(saleIsOver()) { return (0,0,0); } uint _tokensSold = tokensSold; uint _cap = cap; if(_tokensSold < _cap) { (tokensBought, finalExpenditure) = computeSaleParameters(_tokensSold, value); _tokensSold = _tokensSold.add(tokensBought); if(_tokensSold >= _cap && value > finalExpenditure) { uint tokensBoughtAtFixexRate = purchaseAtFixedRate(value.sub(finalExpenditure)); finalExpenditure = finalExpenditure.add(tokensBoughtAtFixexRate.mul(PEAK_PRICE)); tokensBought = tokensBought.add(tokensBoughtAtFixexRate); _tokensSold = _tokensSold.add(tokensBoughtAtFixexRate); } } else { tokensBought = purchaseAtFixedRate(value); finalExpenditure = tokensBought.mul(PEAK_PRICE); _tokensSold = _tokensSold.add(tokensBought); } // Up to this moment, computations were done in nanoGeos. // So we perform a conversion to attoGeos by multiplying by 10^9 tokensBought = tokensBought.mul(10**9); _price = finalExpenditure.div(tokensBought); } function purchaseAtFixedRate(uint value) internal pure returns (uint) { return value.div(PEAK_PRICE); } function getToken() public view override returns (address) { return token; } function getOwner() public view override returns (address) { return Ownable.owner(); } function getPrice() public view returns (uint) { return price; } function getTokensSold() public view returns (uint) { return tokensSold; } function getStartSaleTimestamp() public view returns (uint) { return startSaleTimestamp; } function endSaleTimestamp() public view returns (uint) { return now + duration; } function getEndSaletimestamp() public view returns (uint) { return now + duration; } function saleStarted() public view returns (bool) { return now > startSaleTimestamp; } function saleIsOver() public view returns (bool) { return now > startSaleTimestamp + duration; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"_startSaleTimestamp","type":"uint256"},{"internalType":"uint256","name":"_duration","type":"uint256"},{"internalType":"uint256","name":"_cap","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EtherWithdrawn","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":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"geoAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"returnedEth","type":"uint256"}],"name":"PurchasedGeoTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RemainingGeoTokensWithdrawn","type":"event"},{"stateMutability":"nonpayable","type":"fallback"},{"inputs":[],"name":"cap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256","name":"R","type":"uint256"}],"name":"computeSaleParameters","outputs":[{"internalType":"uint256","name":"T","type":"uint256"},{"internalType":"uint256","name":"finalExpenditure","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"duration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endSaleTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int256","name":"b","type":"int256"},{"internalType":"int256","name":"a","type":"int256"}],"name":"evaluateIntegral","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getEndSaletimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStartSaleTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokensSold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"base","type":"uint256"},{"internalType":"uint32","name":"exp","type":"uint32"},{"internalType":"bool","name":"negativeBase","type":"bool"}],"name":"power","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"precomputePurchase","outputs":[{"internalType":"uint256","name":"tokensBought","type":"uint256"},{"internalType":"uint256","name":"finalExpenditure","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"safeCastUintToInt","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"saleIsOver","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cap","type":"uint256"}],"name":"setCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_duration","type":"uint256"}],"name":"setDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"setStartSaleTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"setToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startSaleTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEtherForGeo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"tokensReceived","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokensSold","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":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256","name":"b","type":"uint256"}],"name":"u_pow","outputs":[{"internalType":"uint256","name":"r","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"withdrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawGeo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052620f42406006553480156200001857600080fd5b5060405162002f2238038062002f22833981810160405260808110156200003e57600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919050505081731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff166329965a1d3060405180807f455243373737546f6b656e73526563697069656e74000000000000000000000081525060150190506040518091039020306040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b1580156200017357600080fd5b505af115801562000188573d6000803e3d6000fd5b5050505060006200019e620002f760201b60201c565b905080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600281905550506000600254116200025557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200029057600080fd5b600083116200029e57600080fd5b836004819055508260058190555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050620002ff565b600033905090565b612c13806200030f6000396000f3fe6080604052600436106101e65760003560e01c80638c635f3611610102578063a5f0be3811610095578063ee7c0db011610064578063ee7c0db0146109d6578063f2fde38b14610a01578063f6be71d114610a52578063fc0c546a14610a8d576101f6565b8063a5f0be38146108d0578063b9e571ad1461093b578063e03e602914610952578063ed3d161d146109ab576101f6565b806398d5fdca116100d157806398d5fdca14610806578063a035b1fe14610831578063a0ef91df1461085c578063a1cb14f014610873576101f6565b80638c635f36146106dc5780638da5cb5b1461070757806393999edc1461075e57806396855643146107ad576101f6565b806347786d371161017a578063715018a611610149578063715018a6146105d357806371da6237146105ea578063753a639814610625578063893d20e814610685576101f6565b806347786d371461051c578063518ab2a8146105575780635c474f9e14610582578063696d8c87146105b1576101f6565b80631d9c93ab116101b65780631d9c93ab1461044057806321df0da71461046b5780633010ab41146104c2578063355274ea146104f1576101f6565b806223de29146102545780630196ff72146103995780630fb5a6b4146103c4578063144fa6d7146103ef576101f6565b366101f6576101f3610ae4565b50005b34801561020257600080fd5b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061294c6025913960400191505060405180910390fd5b34801561026057600080fd5b50610397600480360360c081101561027757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156102fe57600080fd5b82018360208201111561031057600080fd5b8035906020019184600183028401116401000000008311171561033257600080fd5b90919293919293908035906020019064010000000081111561035357600080fd5b82018360208201111561036557600080fd5b8035906020019184600183028401116401000000008311171561038757600080fd5b9091929391929390505050610efa565b005b3480156103a557600080fd5b506103ae61101a565b6040518082815260200191505060405180910390f35b3480156103d057600080fd5b506103d9611026565b6040518082815260200191505060405180910390f35b3480156103fb57600080fd5b5061043e6004803603602081101561041257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061102c565b005b34801561044c57600080fd5b50610455611174565b6040518082815260200191505060405180910390f35b34801561047757600080fd5b5061048061117e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104ce57600080fd5b506104d76111a8565b604051808215151515815260200191505060405180910390f35b3480156104fd57600080fd5b506105066111b8565b6040518082815260200191505060405180910390f35b34801561052857600080fd5b506105556004803603602081101561053f57600080fd5b81019080803590602001909291905050506111be565b005b34801561056357600080fd5b5061056c61129f565b6040518082815260200191505060405180910390f35b34801561058e57600080fd5b506105976112a5565b604051808215151515815260200191505060405180910390f35b6105b9610ae4565b604051808215151515815260200191505060405180910390f35b3480156105df57600080fd5b506105e86112b1565b005b3480156105f657600080fd5b506106236004803603602081101561060d57600080fd5b810190808035906020019092919050505061143c565b005b34801561063157600080fd5b506106686004803603604081101561064857600080fd5b810190808035906020019092919080359060200190929190505050611510565b604051808381526020018281526020019250505060405180910390f35b34801561069157600080fd5b5061069a6116ff565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106e857600080fd5b506106f161170e565b6040518082815260200191505060405180910390f35b34801561071357600080fd5b5061071c61171a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561076a57600080fd5b506107976004803603602081101561078157600080fd5b8101908080359060200190929190505050611744565b6040518082815260200191505060405180910390f35b3480156107b957600080fd5b506107f0600480360360408110156107d057600080fd5b8101908080359060200190929190803590602001909291905050506117c7565b6040518082815260200191505060405180910390f35b34801561081257600080fd5b5061081b611839565b6040518082815260200191505060405180910390f35b34801561083d57600080fd5b50610846611843565b6040518082815260200191505060405180910390f35b34801561086857600080fd5b50610871611849565b005b34801561087f57600080fd5b506108ac6004803603602081101561089657600080fd5b8101908080359060200190929190505050611aa5565b60405180848152602001838152602001828152602001935050505060405180910390f35b3480156108dc57600080fd5b50610925600480360360608110156108f357600080fd5b8101908080359060200190929190803563ffffffff169060200190929190803515159060200190929190505050611c31565b6040518082815260200191505060405180910390f35b34801561094757600080fd5b50610950611c93565b005b34801561095e57600080fd5b506109956004803603604081101561097557600080fd5b810190808035906020019092919080359060200190929190505050611fb4565b6040518082815260200191505060405180910390f35b3480156109b757600080fd5b506109c0612140565b6040518082815260200191505060405180910390f35b3480156109e257600080fd5b506109eb612146565b6040518082815260200191505060405180910390f35b348015610a0d57600080fd5b50610a5060048036036020811015610a2457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612150565b005b348015610a5e57600080fd5b50610a8b60048036036020811015610a7557600080fd5b8101908080359060200190929190505050612360565b005b348015610a9957600080fd5b50610aa2612441565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000610aee6112a5565b610b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180612b5e6030913960400191505060405180910390fd5b610b4b6111a8565b15610ba1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180612b8e6028913960400191505060405180910390fd5b600060075490506000600254905060008082841015610c6f57610bc48434611510565b8092508193505050610bdf828561246790919063ffffffff16565b9350828410158015610bf057508034115b15610c6a576000610c12610c0d83346124ef90919063ffffffff16565b612539565b9050610c3c610c2d6216e3608361255890919063ffffffff16565b8361246790919063ffffffff16565b9150610c51818461246790919063ffffffff16565b9250610c66818661246790919063ffffffff16565b9450505b610ca8565b610c7834612539565b9150610c906216e3608361255890919063ffffffff16565b9050610ca5828561246790919063ffffffff16565b93505b610cbb82826125de90919063ffffffff16565b600681905550836007819055506000610cdd82346124ef90919063ffffffff16565b9050610cf6633b9aca008461255890919063ffffffff16565b9250610d0061117e565b73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610d8657600080fd5b505af1158015610d9a573d6000803e3d6000fd5b505050506040513d6020811015610db057600080fd5b8101908080519060200190929190505050610dca57600080fd5b600033905060008173ffffffffffffffffffffffffffffffffffffffff168360405180600001905060006040518083038185875af1925050503d8060008114610e2f576040519150601f19603f3d011682016040523d82523d6000602084013e610e34565b606091505b5050905080610e8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612a6d602e913960400191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167f799f060871d6f61d08d79c9a87c402a8b004abed7258ca3fc95ff08a445b961485878660405180848152602001838152602001828152602001935050505060405180910390a2600197505050505050505090565b610f0261117e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180612b356029913960400191505060405180910390fd5b610f8d6116ff565b73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614611010576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806129716028913960400191505060405180910390fd5b5050505050505050565b60006005544201905090565b60055481565b611034612628565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561113057600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600454905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600554600454014211905090565b60025481565b6111c6612628565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611288576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000811161129557600080fd5b8060028190555050565b60075481565b60006004544211905090565b6112b9612628565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461137b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611444612628565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060048190555050565b6000806000600254905060008190506000808790506000805b60148210156116215761154c61153e86611744565b6115478c611744565b611fb4565b90508881111561159857849550611591836115836002611575878a6124ef90919063ffffffff16565b6125de90919063ffffffff16565b61246790919063ffffffff16565b9450611614565b809650849350839250662386f26fc100006115bc828b6124ef90919063ffffffff16565b111561160e57858514156115cf57611621565b611607856115f960026115eb898b6124ef90919063ffffffff16565b6125de90919063ffffffff16565b61246790919063ffffffff16565b9450611613565b611621565b5b8180600101925050611529565b8887111561167a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180612a9b603c913960400191505060405180910390fd5b6000871115611699576116968a856124ef90919063ffffffff16565b97505b600088116116f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180612ad7603d913960400191505060405180910390fd5b5050505050509250929050565b600061170961171a565b905090565b60006005544201905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8211156117bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612922602a913960400191505060405180910390fd5b819050919050565b6000600190505b600115611833576001600283816117e157fe5b0614156117fe576117fb838261255890919063ffffffff16565b90505b6002828161180857fe5b049150600082141561181957611833565b61182c838461255890919063ffffffff16565b92506117ce565b92915050565b6000600654905090565b60065481565b611851612628565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611913576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000339050600047905060008111611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806129bf603d913960400191505060405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405180600001905060006040518083038185875af1925050503d80600081146119d6576040519150601f19603f3d011682016040523d82523d6000602084013e6119db565b606091505b5050905080611a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526033815260200180612a3a6033913960400191505060405180910390fd5b7f06097061aeda806b5e9cb4133d9899f332ff0913956567fc0f7ea15e3d19947c3383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1505050565b6000806000611ab26112a5565b611acf576000806000829250819150809050925092509250611c2a565b611ad76111a8565b15611af5576000806000829250819150809050925092509250611c2a565b600060075490506000600254905080821015611bc057611b158287611510565b8095508196505050611b30858361246790919063ffffffff16565b9150808210158015611b4157508386115b15611bbb576000611b63611b5e86896124ef90919063ffffffff16565b612539565b9050611b8d611b7e6216e3608361255890919063ffffffff16565b8661246790919063ffffffff16565b9450611ba2818761246790919063ffffffff16565b9550611bb7818461246790919063ffffffff16565b9250505b611bf9565b611bc986612539565b9450611be16216e3608661255890919063ffffffff16565b9350611bf6858361246790919063ffffffff16565b91505b611c10633b9aca008661255890919063ffffffff16565b9450611c2585856125de90919063ffffffff16565b925050505b9193909250565b600080611c44858563ffffffff166117c7565b90508215611c7f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611c7682611744565b02915050611c8c565b611c8881611744565b9150505b9392505050565b611c9b612628565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d5d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611d656111a8565b611dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180612bb66028913960400191505060405180910390fd5b6000611dc461117e565b905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611e4557600080fd5b505afa158015611e59573d6000803e3d6000fd5b505050506040513d6020811015611e6f57600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611f0957600080fd5b505af1158015611f1d573d6000803e3d6000fd5b505050506040513d6020811015611f3357600080fd5b8101908080519060200190929190505050507f791013eaaf7ebdbe02b61150988f0d18ba417cb22b12410743381c4fc71cca2e3382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b60008066071afd498d000090506000806000611fd9848861263090919063ffffffff16565b90506000611ff0858861263090919063ffffffff16565b9050600061202d710178287f49c4a1d6622fb2ab40000000000061201f612016866126b1565b60046000611c31565b6126cf90919063ffffffff16565b9050600061204784621312d06126e890919063ffffffff16565b905061205c818361271a90919063ffffffff16565b95506120be61207784621312d06126e890919063ffffffff16565b6120b0710178287f49c4a1d6622fb2ab4000000000006120a2612099886126b1565b60046000611c31565b6126cf90919063ffffffff16565b61271a90919063ffffffff16565b9450848613612118576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001806129fc603e913960400191505060405180910390fd5b600061212d868861263090919063ffffffff16565b9050809850505050505050505092915050565b60045481565b6000600754905090565b612158612628565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461221a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806129996026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612368612628565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461242a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000811161243757600080fd5b8060058190555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000808284019050838110156124e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600061253183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061279b565b905092915050565b60006125516216e360836125de90919063ffffffff16565b9050919050565b60008083141561256b57600090506125d8565b600082840290508284828161257c57fe5b04146125d3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612b146021913960400191505060405180910390fd5b809150505b92915050565b600061262083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061285b565b905092915050565b600033905090565b600080831215801561266457507f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83038212155b8061269d575060008312801561269c57507f800000000000000000000000000000000000000000000000000000000000000083038213155b5b6126a657600080fd5b818303905092915050565b6000808212156126c6578160000390506126ca565b8190505b919050565b6000808284816126db57fe5b0590508091505092915050565b6000808284029050600084148061270757508284828161270457fe5b05145b61271057600080fd5b8091505092915050565b600080831215801561274e5750827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038213155b8061278757506000831280156127865750827f8000000000000000000000000000000000000000000000000000000000000000038212155b5b61279057600080fd5b818301905092915050565b6000838311158290612848576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561280d5780820151818401526020810190506127f2565b50505050905090810190601f16801561283a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290612907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156128cc5780820151818401526020810190506128b1565b50505050905090810190601f1680156128f95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161291357fe5b04905080915050939250505056fe46696e616c426f6e64696e6743757276652e6361737455696e74546f496e74202d204f766572666c6f7747656f50726553616c65202d2046616c6c6261636b2066756e6374696f6e2063616c6c656447656f50726553616c652e746f6b656e7352656365697665642829202d204f6e6c79206f776e65724f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373576974686472617761626c652077697468647261774574682829202d204e6f2065746865722062616c616e636520696e2074686520636f6e747261637446696e616c426f6e64696e6743757276652e6576616c75617465496e74656772616c2829202d204e6567617469766520707269636520636f6d7075746564576974686472617761626c652077697468647261774574682829202d20436f756c64206e6f742077697468647261772065746847656f53616c652e737761704574686572466f7247656f202d20436f756c64206e6f742072657475726e2065746846696e616c426f6e64696e6743757276652e636f6d7075746553616c65506172616d65746572732829202d204e6f7420656e6f75676820657468657246696e616c426f6e64696e6743757276652e636f6d7075746553616c65506172616d65746572732829202d2052657475726e6564203020746f6b656e73536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7747656f50726553616c652e746f6b656e7352656365697665642829202d2057726f6e6720746f6b656e47656f53616c652e737761704574686572466f7247656f2829202d2053616c6520686173206e6f74207374617274656447656f53616c652e737761704574686572466f7247656f2829202d2053616c65206973206f76657247656f53616c652e776974686472617747656f2829202d2053616c65206973206e6f74206f766572a2646970667358221220d75079de5df22ffc168636b4e30efb8f64e9f316a5c973b550318cab839028ff64736f6c634300060b0033000000000000000000000000000000000000000000000000000000005f43abc0000000000000000000000000000000000000000000000000000000000003f480000000000000000000000000000000000000000000000000000e35fa931a0000000000000000000000000000147faf8de9d8d8daae129b187f0d02d819126750
Deployed Bytecode
0x6080604052600436106101e65760003560e01c80638c635f3611610102578063a5f0be3811610095578063ee7c0db011610064578063ee7c0db0146109d6578063f2fde38b14610a01578063f6be71d114610a52578063fc0c546a14610a8d576101f6565b8063a5f0be38146108d0578063b9e571ad1461093b578063e03e602914610952578063ed3d161d146109ab576101f6565b806398d5fdca116100d157806398d5fdca14610806578063a035b1fe14610831578063a0ef91df1461085c578063a1cb14f014610873576101f6565b80638c635f36146106dc5780638da5cb5b1461070757806393999edc1461075e57806396855643146107ad576101f6565b806347786d371161017a578063715018a611610149578063715018a6146105d357806371da6237146105ea578063753a639814610625578063893d20e814610685576101f6565b806347786d371461051c578063518ab2a8146105575780635c474f9e14610582578063696d8c87146105b1576101f6565b80631d9c93ab116101b65780631d9c93ab1461044057806321df0da71461046b5780633010ab41146104c2578063355274ea146104f1576101f6565b806223de29146102545780630196ff72146103995780630fb5a6b4146103c4578063144fa6d7146103ef576101f6565b366101f6576101f3610ae4565b50005b34801561020257600080fd5b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061294c6025913960400191505060405180910390fd5b34801561026057600080fd5b50610397600480360360c081101561027757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156102fe57600080fd5b82018360208201111561031057600080fd5b8035906020019184600183028401116401000000008311171561033257600080fd5b90919293919293908035906020019064010000000081111561035357600080fd5b82018360208201111561036557600080fd5b8035906020019184600183028401116401000000008311171561038757600080fd5b9091929391929390505050610efa565b005b3480156103a557600080fd5b506103ae61101a565b6040518082815260200191505060405180910390f35b3480156103d057600080fd5b506103d9611026565b6040518082815260200191505060405180910390f35b3480156103fb57600080fd5b5061043e6004803603602081101561041257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061102c565b005b34801561044c57600080fd5b50610455611174565b6040518082815260200191505060405180910390f35b34801561047757600080fd5b5061048061117e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104ce57600080fd5b506104d76111a8565b604051808215151515815260200191505060405180910390f35b3480156104fd57600080fd5b506105066111b8565b6040518082815260200191505060405180910390f35b34801561052857600080fd5b506105556004803603602081101561053f57600080fd5b81019080803590602001909291905050506111be565b005b34801561056357600080fd5b5061056c61129f565b6040518082815260200191505060405180910390f35b34801561058e57600080fd5b506105976112a5565b604051808215151515815260200191505060405180910390f35b6105b9610ae4565b604051808215151515815260200191505060405180910390f35b3480156105df57600080fd5b506105e86112b1565b005b3480156105f657600080fd5b506106236004803603602081101561060d57600080fd5b810190808035906020019092919050505061143c565b005b34801561063157600080fd5b506106686004803603604081101561064857600080fd5b810190808035906020019092919080359060200190929190505050611510565b604051808381526020018281526020019250505060405180910390f35b34801561069157600080fd5b5061069a6116ff565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106e857600080fd5b506106f161170e565b6040518082815260200191505060405180910390f35b34801561071357600080fd5b5061071c61171a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561076a57600080fd5b506107976004803603602081101561078157600080fd5b8101908080359060200190929190505050611744565b6040518082815260200191505060405180910390f35b3480156107b957600080fd5b506107f0600480360360408110156107d057600080fd5b8101908080359060200190929190803590602001909291905050506117c7565b6040518082815260200191505060405180910390f35b34801561081257600080fd5b5061081b611839565b6040518082815260200191505060405180910390f35b34801561083d57600080fd5b50610846611843565b6040518082815260200191505060405180910390f35b34801561086857600080fd5b50610871611849565b005b34801561087f57600080fd5b506108ac6004803603602081101561089657600080fd5b8101908080359060200190929190505050611aa5565b60405180848152602001838152602001828152602001935050505060405180910390f35b3480156108dc57600080fd5b50610925600480360360608110156108f357600080fd5b8101908080359060200190929190803563ffffffff169060200190929190803515159060200190929190505050611c31565b6040518082815260200191505060405180910390f35b34801561094757600080fd5b50610950611c93565b005b34801561095e57600080fd5b506109956004803603604081101561097557600080fd5b810190808035906020019092919080359060200190929190505050611fb4565b6040518082815260200191505060405180910390f35b3480156109b757600080fd5b506109c0612140565b6040518082815260200191505060405180910390f35b3480156109e257600080fd5b506109eb612146565b6040518082815260200191505060405180910390f35b348015610a0d57600080fd5b50610a5060048036036020811015610a2457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612150565b005b348015610a5e57600080fd5b50610a8b60048036036020811015610a7557600080fd5b8101908080359060200190929190505050612360565b005b348015610a9957600080fd5b50610aa2612441565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000610aee6112a5565b610b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180612b5e6030913960400191505060405180910390fd5b610b4b6111a8565b15610ba1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180612b8e6028913960400191505060405180910390fd5b600060075490506000600254905060008082841015610c6f57610bc48434611510565b8092508193505050610bdf828561246790919063ffffffff16565b9350828410158015610bf057508034115b15610c6a576000610c12610c0d83346124ef90919063ffffffff16565b612539565b9050610c3c610c2d6216e3608361255890919063ffffffff16565b8361246790919063ffffffff16565b9150610c51818461246790919063ffffffff16565b9250610c66818661246790919063ffffffff16565b9450505b610ca8565b610c7834612539565b9150610c906216e3608361255890919063ffffffff16565b9050610ca5828561246790919063ffffffff16565b93505b610cbb82826125de90919063ffffffff16565b600681905550836007819055506000610cdd82346124ef90919063ffffffff16565b9050610cf6633b9aca008461255890919063ffffffff16565b9250610d0061117e565b73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610d8657600080fd5b505af1158015610d9a573d6000803e3d6000fd5b505050506040513d6020811015610db057600080fd5b8101908080519060200190929190505050610dca57600080fd5b600033905060008173ffffffffffffffffffffffffffffffffffffffff168360405180600001905060006040518083038185875af1925050503d8060008114610e2f576040519150601f19603f3d011682016040523d82523d6000602084013e610e34565b606091505b5050905080610e8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612a6d602e913960400191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167f799f060871d6f61d08d79c9a87c402a8b004abed7258ca3fc95ff08a445b961485878660405180848152602001838152602001828152602001935050505060405180910390a2600197505050505050505090565b610f0261117e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180612b356029913960400191505060405180910390fd5b610f8d6116ff565b73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614611010576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806129716028913960400191505060405180910390fd5b5050505050505050565b60006005544201905090565b60055481565b611034612628565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561113057600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600454905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600554600454014211905090565b60025481565b6111c6612628565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611288576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000811161129557600080fd5b8060028190555050565b60075481565b60006004544211905090565b6112b9612628565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461137b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611444612628565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060048190555050565b6000806000600254905060008190506000808790506000805b60148210156116215761154c61153e86611744565b6115478c611744565b611fb4565b90508881111561159857849550611591836115836002611575878a6124ef90919063ffffffff16565b6125de90919063ffffffff16565b61246790919063ffffffff16565b9450611614565b809650849350839250662386f26fc100006115bc828b6124ef90919063ffffffff16565b111561160e57858514156115cf57611621565b611607856115f960026115eb898b6124ef90919063ffffffff16565b6125de90919063ffffffff16565b61246790919063ffffffff16565b9450611613565b611621565b5b8180600101925050611529565b8887111561167a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180612a9b603c913960400191505060405180910390fd5b6000871115611699576116968a856124ef90919063ffffffff16565b97505b600088116116f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180612ad7603d913960400191505060405180910390fd5b5050505050509250929050565b600061170961171a565b905090565b60006005544201905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8211156117bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612922602a913960400191505060405180910390fd5b819050919050565b6000600190505b600115611833576001600283816117e157fe5b0614156117fe576117fb838261255890919063ffffffff16565b90505b6002828161180857fe5b049150600082141561181957611833565b61182c838461255890919063ffffffff16565b92506117ce565b92915050565b6000600654905090565b60065481565b611851612628565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611913576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000339050600047905060008111611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806129bf603d913960400191505060405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405180600001905060006040518083038185875af1925050503d80600081146119d6576040519150601f19603f3d011682016040523d82523d6000602084013e6119db565b606091505b5050905080611a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526033815260200180612a3a6033913960400191505060405180910390fd5b7f06097061aeda806b5e9cb4133d9899f332ff0913956567fc0f7ea15e3d19947c3383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1505050565b6000806000611ab26112a5565b611acf576000806000829250819150809050925092509250611c2a565b611ad76111a8565b15611af5576000806000829250819150809050925092509250611c2a565b600060075490506000600254905080821015611bc057611b158287611510565b8095508196505050611b30858361246790919063ffffffff16565b9150808210158015611b4157508386115b15611bbb576000611b63611b5e86896124ef90919063ffffffff16565b612539565b9050611b8d611b7e6216e3608361255890919063ffffffff16565b8661246790919063ffffffff16565b9450611ba2818761246790919063ffffffff16565b9550611bb7818461246790919063ffffffff16565b9250505b611bf9565b611bc986612539565b9450611be16216e3608661255890919063ffffffff16565b9350611bf6858361246790919063ffffffff16565b91505b611c10633b9aca008661255890919063ffffffff16565b9450611c2585856125de90919063ffffffff16565b925050505b9193909250565b600080611c44858563ffffffff166117c7565b90508215611c7f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611c7682611744565b02915050611c8c565b611c8881611744565b9150505b9392505050565b611c9b612628565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d5d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611d656111a8565b611dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180612bb66028913960400191505060405180910390fd5b6000611dc461117e565b905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611e4557600080fd5b505afa158015611e59573d6000803e3d6000fd5b505050506040513d6020811015611e6f57600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611f0957600080fd5b505af1158015611f1d573d6000803e3d6000fd5b505050506040513d6020811015611f3357600080fd5b8101908080519060200190929190505050507f791013eaaf7ebdbe02b61150988f0d18ba417cb22b12410743381c4fc71cca2e3382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b60008066071afd498d000090506000806000611fd9848861263090919063ffffffff16565b90506000611ff0858861263090919063ffffffff16565b9050600061202d710178287f49c4a1d6622fb2ab40000000000061201f612016866126b1565b60046000611c31565b6126cf90919063ffffffff16565b9050600061204784621312d06126e890919063ffffffff16565b905061205c818361271a90919063ffffffff16565b95506120be61207784621312d06126e890919063ffffffff16565b6120b0710178287f49c4a1d6622fb2ab4000000000006120a2612099886126b1565b60046000611c31565b6126cf90919063ffffffff16565b61271a90919063ffffffff16565b9450848613612118576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001806129fc603e913960400191505060405180910390fd5b600061212d868861263090919063ffffffff16565b9050809850505050505050505092915050565b60045481565b6000600754905090565b612158612628565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461221a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806129996026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612368612628565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461242a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000811161243757600080fd5b8060058190555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000808284019050838110156124e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600061253183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061279b565b905092915050565b60006125516216e360836125de90919063ffffffff16565b9050919050565b60008083141561256b57600090506125d8565b600082840290508284828161257c57fe5b04146125d3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612b146021913960400191505060405180910390fd5b809150505b92915050565b600061262083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061285b565b905092915050565b600033905090565b600080831215801561266457507f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83038212155b8061269d575060008312801561269c57507f800000000000000000000000000000000000000000000000000000000000000083038213155b5b6126a657600080fd5b818303905092915050565b6000808212156126c6578160000390506126ca565b8190505b919050565b6000808284816126db57fe5b0590508091505092915050565b6000808284029050600084148061270757508284828161270457fe5b05145b61271057600080fd5b8091505092915050565b600080831215801561274e5750827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038213155b8061278757506000831280156127865750827f8000000000000000000000000000000000000000000000000000000000000000038212155b5b61279057600080fd5b818301905092915050565b6000838311158290612848576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561280d5780820151818401526020810190506127f2565b50505050905090810190601f16801561283a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290612907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156128cc5780820151818401526020810190506128b1565b50505050905090810190601f1680156128f95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161291357fe5b04905080915050939250505056fe46696e616c426f6e64696e6743757276652e6361737455696e74546f496e74202d204f766572666c6f7747656f50726553616c65202d2046616c6c6261636b2066756e6374696f6e2063616c6c656447656f50726553616c652e746f6b656e7352656365697665642829202d204f6e6c79206f776e65724f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373576974686472617761626c652077697468647261774574682829202d204e6f2065746865722062616c616e636520696e2074686520636f6e747261637446696e616c426f6e64696e6743757276652e6576616c75617465496e74656772616c2829202d204e6567617469766520707269636520636f6d7075746564576974686472617761626c652077697468647261774574682829202d20436f756c64206e6f742077697468647261772065746847656f53616c652e737761704574686572466f7247656f202d20436f756c64206e6f742072657475726e2065746846696e616c426f6e64696e6743757276652e636f6d7075746553616c65506172616d65746572732829202d204e6f7420656e6f75676820657468657246696e616c426f6e64696e6743757276652e636f6d7075746553616c65506172616d65746572732829202d2052657475726e6564203020746f6b656e73536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7747656f50726553616c652e746f6b656e7352656365697665642829202d2057726f6e6720746f6b656e47656f53616c652e737761704574686572466f7247656f2829202d2053616c6520686173206e6f74207374617274656447656f53616c652e737761704574686572466f7247656f2829202d2053616c65206973206f76657247656f53616c652e776974686472617747656f2829202d2053616c65206973206e6f74206f766572a2646970667358221220d75079de5df22ffc168636b4e30efb8f64e9f316a5c973b550318cab839028ff64736f6c634300060b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000005f43abc0000000000000000000000000000000000000000000000000000000000003f480000000000000000000000000000000000000000000000000000e35fa931a0000000000000000000000000000147faf8de9d8d8daae129b187f0d02d819126750
-----Decoded View---------------
Arg [0] : _startSaleTimestamp (uint256): 1598270400
Arg [1] : _duration (uint256): 259200
Arg [2] : _cap (uint256): 4000000000000000
Arg [3] : _token (address): 0x147faF8De9d8D8DAAE129B187F0D02D819126750
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000005f43abc0
Arg [1] : 000000000000000000000000000000000000000000000000000000000003f480
Arg [2] : 000000000000000000000000000000000000000000000000000e35fa931a0000
Arg [3] : 000000000000000000000000147faf8de9d8d8daae129b187f0d02d819126750
Deployed Bytecode Sourcemap
25434:6786:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26608:17;:15;:17::i;:::-;;25434:6786;;;;;;;;;;;;26498:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24046:406;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31887:98;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25677:20;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26900:126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31672:104;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31284:90;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32101:110;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13680:15;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27034:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25764:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31993:100;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27689:2010;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;5322:148;;;;;;;;;;;;;:::i;:::-;;26641:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13771:1731;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;31382:100;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;31784:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4680:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17102:184;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16837:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31490:78;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25715:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24852:573;;;;;;;;;;;;;:::i;:::-;;29707:1444;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16301:528;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27277:404;;;;;;;;;;;;;:::i;:::-;;15510:783;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25622:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31576:88;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5625:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26764:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25593:20;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27689:2010;27740:4;27765:13;:11;:13::i;:::-;27757:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27851:12;:10;:12::i;:::-;27850:13;27842:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27921:16;27940:10;;27921:29;;27961:9;27973:3;;27961:15;;27987:17;28015:21;28066:4;28052:11;:18;28049:823;;;28122:45;28144:11;28157:9;28122:21;:45::i;:::-;28087:80;;;;;;;;28196:29;28212:12;28196:11;:15;;:29;;;;:::i;:::-;28182:43;;28260:4;28245:11;:19;;:51;;;;;28280:16;28268:9;:28;28245:51;28242:421;;;28317:28;28348:52;28368:31;28382:16;28368:9;:13;;:31;;;;:::i;:::-;28348:19;:52::i;:::-;28317:83;;28438:61;28459:39;25562:7;28459:23;:27;;:39;;;;:::i;:::-;28438:16;:20;;:61;;;;:::i;:::-;28419:80;;28533:41;28550:23;28533:12;:16;;:41;;;;:::i;:::-;28518:56;;28607:40;28623:23;28607:11;:15;;:40;;;;:::i;:::-;28593:54;;28242:421;;28049:823;;;28710:30;28730:9;28710:19;:30::i;:::-;28695:45;;28774:28;25562:7;28774:12;:16;;:28;;;;:::i;:::-;28755:47;;28831:29;28847:12;28831:11;:15;;:29;;;;:::i;:::-;28817:43;;28049:823;28892:34;28913:12;28892:16;:20;;:34;;;;:::i;:::-;28884:5;:42;;;;28950:11;28937:10;:24;;;;28972:16;28991:31;29005:16;28991:9;:13;;:31;;;;:::i;:::-;28972:50;;29191:23;29208:5;29191:12;:16;;:23;;;;:::i;:::-;29176:38;;29240:10;:8;:10::i;:::-;29233:27;;;29261:10;29273:12;29233:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29225:62;;;;;;29298:18;29327:10;29298:40;;29350:12;29368:2;:7;;29383:11;29368:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29349:50;;;29432:7;29410:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29564:10;29531:138;;;29589:16;29620:12;29647:11;29531:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29687:4;29680:11;;;;;;;;;27689:2010;:::o;24046:406::-;24306:10;:8;:10::i;:::-;24292:24;;:10;:24;;;24284:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24389:10;:8;:10::i;:::-;24381:18;;:4;:18;;;24373:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24046:406;;;;;;;;:::o;31887:98::-;31939:4;31969:8;;31963:3;:14;31956:21;;31887:98;:::o;25677:20::-;;;;:::o;26900:126::-;4902:12;:10;:12::i;:::-;4892:22;;:6;;;;;;;;;;;:22;;;4884:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26990:1:::1;26972:20;;:6;:20;;;;26964:29;;;::::0;::::1;;27012:6;27004:5;;:14;;;;;;;;;;;;;;;;;;26900:126:::0;:::o;31672:104::-;31726:4;31750:18;;31743:25;;31672:104;:::o;31284:90::-;31334:7;31361:5;;;;;;;;;;;31354:12;;31284:90;:::o;32101:110::-;32144:4;32195:8;;32174:18;;:29;32168:3;:35;32161:42;;32101:110;:::o;13680:15::-;;;;:::o;27034:121::-;4902:12;:10;:12::i;:::-;4892:22;;:6;;;;;;;;;;;:22;;;4884:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27106:1:::1;27099:4;:8;27091:17;;;::::0;::::1;;27143:4;27119:21;:28;;;;27034:121:::0;:::o;25764:22::-;;;;:::o;31993:100::-;32037:4;32067:18;;32061:3;:24;32054:31;;31993:100;:::o;5322:148::-;4902:12;:10;:12::i;:::-;4892:22;;:6;;;;;;;;;;;:22;;;4884:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5429:1:::1;5392:40;;5413:6;;;;;;;;;;;5392:40;;;;;;;;;;;;5460:1;5443:6;;:19;;;;;;;;;;;;;;;;;;5322:148::o:0;26641:115::-;4902:12;:10;:12::i;:::-;4892:22;;:6;;;;;;;;;;;:22;;;4884:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26739:9:::1;26718:18;:30;;;;26641:115:::0;:::o;13771:1731::-;13991:6;14043:21;14102:10;14115:3;;14102:16;;14129:6;14138:5;14129:14;;14154:11;14176:10;14189:1;14176:14;;14201:15;14229:7;14346:833;14365:2;14352:10;:15;14346:833;;;14389:60;14406:20;14424:1;14406:17;:20::i;:::-;14428;14446:1;14428:17;:20::i;:::-;14389:16;:60::i;:::-;14384:65;;14472:1;14467:2;:6;14464:677;;;14633:1;14625:9;;14657:34;14685:5;14658:21;14677:1;14659:12;14665:5;14659:1;:5;;:12;;;;:::i;:::-;14658:18;;:21;;;;:::i;:::-;14657:27;;:34;;;;:::i;:::-;14653:38;;14464:677;;;14782:2;14763:21;;14812:1;14803:10;;14840:6;14832:14;;13527:10;14870:9;14876:2;14870:1;:5;;:9;;;;:::i;:::-;:30;14867:259;;;14933:5;14928:1;:10;14925:71;;;14967:5;;14925:71;15022:30;15050:1;15023:21;15042:1;15024:12;15034:1;15024:5;:9;;:12;;;;:::i;:::-;15023:18;;:21;;;;:::i;:::-;15022:27;;:30;;;;:::i;:::-;15018:34;;14867:259;;;15101:5;;14867:259;14464:677;15155:12;;;;;;;14346:833;;;15233:1;15213:16;:21;;15191:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15358:1;15339:16;:20;15336:69;;;15380:13;15391:1;15380:6;:10;;:13;;;;:::i;:::-;15376:17;;15336:69;15427:1;15423;:5;15415:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13771:1731;;;;;;;;;;;:::o;31382:100::-;31432:7;31459:15;:13;:15::i;:::-;31452:22;;31382:100;:::o;31784:95::-;31833:4;31863:8;;31857:3;:14;31850:21;;31784:95;:::o;4680:79::-;4718:7;4745:6;;;;;;;;;;;4738:13;;4680:79;:::o;17102:184::-;17162:3;17195:8;17186:5;:17;;17178:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17272:5;17261:17;;17102:184;;;:::o;16837:253::-;16889:6;16912:1;16908:5;;16924:159;16930:4;16924:159;;;16963:1;16958;16954;:5;;;;;;:10;16951:27;;;16970:8;16976:1;16970;:5;;:8;;;;:::i;:::-;16966:12;;16951:27;17012:1;17007:6;;;;;;;;;17036:1;17031;:6;17028:16;;;17039:5;;17028:16;17063:8;17069:1;17063;:5;;:8;;;;:::i;:::-;17059:12;;16924:159;;;16837:253;;;;:::o;31490:78::-;31531:4;31555:5;;31548:12;;31490:78;:::o;25715:27::-;;;;:::o;24852:573::-;4902:12;:10;:12::i;:::-;4892:22;;:6;;;;;;;;;;;:22;;;4884:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24905:18:::1;24934:10;24905:40;;24956:8;25006:13;24999:20;;25068:1;25062:3;:7;25040:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25171:12;25189:2;:7;;25204:3;25189:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25170:42;;;25245:7;25223:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25349:68;25378:10;25403:3;25349:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;4962:1;;;24852:573::o:0;29707:1444::-;29799:17;29818:21;29841:11;29875:13;:11;:13::i;:::-;29871:60;;29913:1;29915;29917;29905:14;;;;;;;;;;;;;;;;;29871:60;29946:12;:10;:12::i;:::-;29943:58;;;29983:1;29985;29987;29975:14;;;;;;;;;;;;;;;;;29943:58;30013:16;30032:10;;30013:29;;30053:9;30065:3;;30053:15;;30098:4;30084:11;:18;30081:807;;;30154:41;30176:11;30189:5;30154:21;:41::i;:::-;30119:76;;;;;;;;30224:29;30240:12;30224:11;:15;;:29;;;;:::i;:::-;30210:43;;30288:4;30273:11;:19;;:47;;;;;30304:16;30296:5;:24;30273:47;30270:413;;;30341:28;30372:48;30392:27;30402:16;30392:5;:9;;:27;;;;:::i;:::-;30372:19;:48::i;:::-;30341:79;;30458:61;30479:39;25562:7;30479:23;:27;;:39;;;;:::i;:::-;30458:16;:20;;:61;;;;:::i;:::-;30439:80;;30553:41;30570:23;30553:12;:16;;:41;;;;:::i;:::-;30538:56;;30627:40;30643:23;30627:11;:15;;:40;;;;:::i;:::-;30613:54;;30270:413;;30081:807;;;30730:26;30750:5;30730:19;:26::i;:::-;30715:41;;30790:28;25562:7;30790:12;:16;;:28;;;;:::i;:::-;30771:47;;30847:29;30863:12;30847:11;:15;;:29;;;;:::i;:::-;30833:43;;30081:807;31056:23;31073:5;31056:12;:16;;:23;;;;:::i;:::-;31041:38;;31109:34;31130:12;31109:16;:20;;:34;;;;:::i;:::-;31100:43;;29707:1444;;;;;;;;:::o;16301:528::-;16472:3;16624:11;16638:22;16644:4;16655:3;16650:9;;16638:5;:22::i;:::-;16624:36;;16674:12;16671:151;;;16742:2;16710:25;16728:6;16710:17;:25::i;:::-;:35;16703:42;;;;;16671:151;16785:25;16803:6;16785:17;:25::i;:::-;16778:32;;;16301:528;;;;;;:::o;27277:404::-;4902:12;:10;:12::i;:::-;4892:22;;:6;;;;;;;;;;;:22;;;4884:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27338:12:::1;:10;:12::i;:::-;27330:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27408:13;27431:10;:8;:10::i;:::-;27408:34;;27453:20;27476:6;:16;;;27501:4;27476:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;27453:54;;27518:6;:15;;;27534:10;27546:15;27518:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;27580:93;27622:10;27647:15;27580:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;4962:1;;27277:404::o:0;15510:783::-;15571:4;15588:17;13581:4;15588:32;;15633:6;15650;15669:11;15683:20;15689:13;15683:1;:5;;:20;;;;:::i;:::-;15669:34;;15714:11;15728:20;15734:13;15728:1;:5;;:20;;;;:::i;:::-;15714:34;;15761:22;15786:65;13617:11;15786:58;15797:27;15816:7;15797:18;:27::i;:::-;15834:1;15838:5;15786;:58::i;:::-;:62;;:65;;;;:::i;:::-;15761:90;;15862:21;15886:14;15892:7;13660;15886:5;;:14;;;;:::i;:::-;15862:38;;15918:41;15941:17;15918:18;:22;;:41;;;;:::i;:::-;15913:46;;15977:99;16061:14;16067:7;13660;16061:5;;:14;;;;:::i;:::-;15977:65;13617:11;15977:58;15988:27;16007:7;15988:18;:27::i;:::-;16025:1;16029:5;15977;:58::i;:::-;:62;;:65;;;;:::i;:::-;:83;;:99;;;;:::i;:::-;15972:104;;16116:2;16111;:7;16089:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16222:10;16235;16242:2;16235;:6;;:10;;;;:::i;:::-;16222:23;;16268:6;16256:19;;;;;;;;;;15510:783;;;;:::o;25622:30::-;;;;:::o;31576:88::-;31622:4;31646:10;;31639:17;;31576:88;:::o;5625:244::-;4902:12;:10;:12::i;:::-;4892:22;;:6;;;;;;;;;;;:22;;;4884:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5734:1:::1;5714:22;;:8;:22;;;;5706:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5824:8;5795:38;;5816:6;;;;;;;;;;;5795:38;;;;;;;;;;;;5853:8;5844:6;;:17;;;;;;;;;;;;;;;;;;5625:244:::0;:::o;26764:128::-;4902:12;:10;:12::i;:::-;4892:22;;:6;;;;;;;;;;;:22;;;4884:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26851:1:::1;26839:9;:13;26831:22;;;::::0;::::1;;26875:9;26864:8;:20;;;;26764:128:::0;:::o;25593:20::-;;;;;;;;;;;;;:::o;8876:181::-;8934:7;8954:9;8970:1;8966;:5;8954:17;;8995:1;8990;:6;;8982:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9048:1;9041:8;;;8876:181;;;;:::o;9340:136::-;9398:7;9425:43;9429:1;9432;9425:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9418:50;;9340:136;;;;:::o;31159:117::-;31223:4;31247:21;25562:7;31247:5;:9;;:21;;;;:::i;:::-;31240:28;;31159:117;;;:::o;10230:471::-;10288:7;10538:1;10533;:6;10529:47;;;10563:1;10556:8;;;;10529:47;10588:9;10604:1;10600;:5;10588:17;;10633:1;10628;10624;:5;;;;;;:10;10616:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10692:1;10685:8;;;10230:471;;;;;:::o;11177:132::-;11235:7;11262:39;11266:1;11269;11262:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;11255:46;;11177:132;;;;:::o;3318:106::-;3371:15;3406:10;3399:17;;3318:106;:::o;6638:188::-;6694:6;6728:1;6723;:6;;6722:33;;;;;6227:12;6740:1;:14;6735:1;:19;;6722:33;6721:73;;;;6766:1;6762;:5;6761:32;;;;;6173:9;6778:1;:14;6773:1;:19;;6761:32;6721:73;6713:82;;;;;;6817:1;6813;:5;6806:12;;6638:188;;;;:::o;7386:138::-;7432:6;7459:1;7455;:5;7451:47;;;7485:1;7484:2;;7477:9;;;;7451:47;7515:1;7508:8;;7386:138;;;;:::o;6415:215::-;6471:6;6587:8;6602:1;6598;:5;;;;;;6587:16;;6621:1;6614:8;;;6415:215;;;;:::o;6249:158::-;6305:6;6324:8;6339:1;6335;:5;6324:16;;6364:1;6359;:6;:20;;;;6378:1;6373;6369;:5;;;;;;:10;6359:20;6351:29;;;;;;6398:1;6391:8;;;6249:158;;;;:::o;6834:188::-;6890:6;6924:1;6919;:6;;6918:33;;;;;6949:1;6227:12;6936:14;6931:1;:19;;6918:33;6917:73;;;;6962:1;6958;:5;6957:32;;;;;6987:1;6173:9;6974:14;6969:1;:19;;6957:32;6917:73;6909:82;;;;;;7013:1;7009;:5;7002:12;;6834:188;;;;:::o;9779:192::-;9865:7;9898:1;9893;:6;;9901:12;9885:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9925:9;9941:1;9937;:5;9925:17;;9962:1;9955:8;;;9779:192;;;;;:::o;11805:278::-;11891:7;11923:1;11919;:5;11926:12;11911:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11950:9;11966:1;11962;:5;;;;;;11950:17;;12074:1;12067:8;;;11805:278;;;;;:::o
Swarm Source
ipfs://d75079de5df22ffc168636b4e30efb8f64e9f316a5c973b550318cab839028ff
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.