Overview
S Balance
0.001 S
S Value
-More Info
Private Name Tags
ContractCreator
Latest 7 from a total of 7 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Purchase With Et... | 667744 | 3 hrs ago | IN | 0.001 S | 0.00005778 | ||||
Emergency Withdr... | 667395 | 3 hrs ago | IN | 0 S | 0.00003612 | ||||
Purchase With Et... | 665479 | 3 hrs ago | IN | 0.001 S | 0.00005778 | ||||
Purchase With Et... | 664559 | 4 hrs ago | IN | 0.001 S | 0.00005778 | ||||
Purchase With Et... | 655566 | 6 hrs ago | IN | 0.001 S | 0.00005778 | ||||
Purchase With Et... | 650675 | 7 hrs ago | IN | 0.001 S | 0.00018714 | ||||
Set Presale Time | 650469 | 7 hrs ago | IN | 0 S | 0.000072 |
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
667395 | 3 hrs ago | 0.004 S |
Loading...
Loading
Contract Name:
TokenPreSale
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2024-12-19 */ // File contracts/libs/Context.sol pragma solidity ^0.8.18; /** * @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 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) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File contracts/libs/Ownable.sol pragma solidity ^0.8.18; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; mapping(address => bool) private _operators; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); event UpdateOperator(address indexed operator, bool authorized); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor(address initialOwner) { _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(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 { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } /** * @dev add / remove operators. * `operator`: operator address * `authorized`: authorized or not */ function updateOperator(address operator, bool authorized) public onlyOwner { require(operator != address(0), "Ownable: operator is the zero address"); emit UpdateOperator(operator, authorized); _operators[operator] = authorized; } /** * @dev Throws if called by any account other than the operators. */ modifier onlyOperator() { require(_operators[_msgSender()], "Ownable: caller is not the operator"); _; } } // File contracts/libs/Pausable.sol pragma solidity ^0.8.18; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File contracts/interfaces/IERC20.sol pragma solidity ^0.8.0; interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the token decimals. */ function decimals() external view returns (uint8); /** * @dev Returns the token symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the token name. */ function name() external view returns (string memory); /** * @dev Returns the bep token owner. */ function getOwner() external view returns (address); /** * @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); } // File contracts/libs/Address.sol pragma solidity ^0.8.18; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check if target is a contract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(target.code.length > 0, "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } // File contracts/libs/SafeERC20.sol pragma solidity ^0.8.18; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; /** * @dev An operation with an ERC20 token failed. */ error SafeERC20FailedOperation(address token); /** * @dev Indicates a failed `decreaseAllowance` request. */ error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease); /** * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value, * non-reverting calls are assumed to be successful. */ function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value))); } /** * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful. */ function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value))); } /** * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value, * non-reverting calls are assumed to be successful. */ function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 oldAllowance = token.allowance(address(this), spender); forceApprove(token, spender, oldAllowance + value); } /** * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no value, * non-reverting calls are assumed to be successful. */ function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal { unchecked { uint256 currentAllowance = token.allowance(address(this), spender); if (currentAllowance < requestedDecrease) { revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease); } forceApprove(token, spender, currentAllowance - requestedDecrease); } } /** * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value, * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval * to be set to zero before setting it to a non-zero value, such as USDT. */ function forceApprove(IERC20 token, address spender, uint256 value) internal { bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value)); if (!_callOptionalReturnBool(token, approvalCall)) { _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0))); _callOptionalReturn(token, approvalCall); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data); if (returndata.length != 0 && !abi.decode(returndata, (bool))) { revert SafeERC20FailedOperation(address(token)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). * * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead. */ function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false // and not revert is the subcall reverts. (bool success, bytes memory returndata) = address(token).call(data); return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && address(token).code.length > 0; } } // File contracts/libs/ReentrancyGuard.sol pragma solidity ^0.8.18; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } } // SPDX-License-Identifier: MIT pragma solidity ^0.8.18; contract TokenPreSale is Pausable, ReentrancyGuard, Ownable { using SafeERC20 for IERC20; using Address for address payable; // uint256 public CLAIM_INTERVAL = 2592000; uint256 public round; bool public isOpenPublic; // change from private sale to public pre sale IERC20 public saleToken; address public receiverEth; address[] private idoUsers; struct Presale { uint256 presaleStartTime; uint256 presaleEndTime; uint256 priceRate; uint256 maxTokensToSell; uint256 inSale; uint256 vestingStartTime; uint256 totalVestingMonths; uint256 unlockPercentage; uint256 remainingPercentage; } struct Vesting { address buyer; uint256 maxPurchasable; uint256 totalAmount; // uint256 claimedAmount; // uint256 balance; // uint256 cliffDuration; } mapping(uint256 => Presale) public presaleRound; mapping(address => Vesting) public usersVesting; event PresaleUpdated(uint256 prevValue, uint256 newValue, uint256 timestamp); event UnlockPreSale(bool isOpenPresale, uint256 timestamp); // event TokensClaimed(address indexed account, uint256 indexed id, uint256 amount, uint256 timestamp); event TokensBought(address indexed account, uint256 tokensBought, uint256 timestamp); event ReceivedEther(address indexed account, uint256 amount); // event Claim(address indexed account, uint256 amount); event WithdrawPool(address indexed recipient, uint256 amount); event PresalePaused(uint256 timestamp); event PresaleUnpaused(uint256 timestamp); error SaleTokenInvalid(address saleToken); // error LessPayment(); error OverLimited(); error InvalidTimeBuy(); constructor( address initialOwner, address _receiverEth, // uint256 _maxTokensToSell, // uint256 _totalVestingMonths, // uint256 _unlockPercentage, // uint256 _remainingPercentage, uint256 _priceRate ) Ownable(initialOwner) { // require(_maxTokensToSell > 0, "amount tokens to sell must be greater than 0"); // Make this contract initialized receiverEth = _receiverEth; uint256 PRECISION_FACTOR = uint256(10 ** (uint256(30) - uint256(18))); // init presale Presale storage presale = presaleRound[round]; presale.priceRate = _priceRate * PRECISION_FACTOR; // presale.maxTokensToSell = _maxTokensToSell; // presale.inSale = _maxTokensToSell; // presale.totalVestingMonths = _totalVestingMonths; // presale.unlockPercentage = _unlockPercentage; // presale.remainingPercentage = _remainingPercentage; } function getAllUsersVesting() external view returns (Vesting[] memory) { Vesting[] memory usersVestingInfo = new Vesting[](idoUsers.length); for (uint256 i = 0; i < idoUsers.length; i++) { usersVestingInfo[i] = usersVesting[idoUsers[i]]; } return usersVestingInfo; } /** * @dev To update the vesting start time * @param _vestingStartTime New vesting start time */ // function changeVestingStartTime(uint256 _vestingStartTime) external onlyOwner { // Presale storage presale = presaleRound[round]; // require(presale.presaleEndTime > 0, "Presale have not started"); // require(_vestingStartTime >= presale.presaleEndTime, "Vesting starts before Presale ends"); // uint256 prevValue = presale.vestingStartTime; // presale.vestingStartTime = _vestingStartTime; // emit PresaleUpdated(prevValue, _vestingStartTime, block.timestamp); // } /** * @dev To update the presale price rate * @param _priceRate New price rate */ function changePriceRate(uint256 _priceRate) external onlyOwner { Presale storage presale = presaleRound[round]; require(presale.presaleEndTime > 0, "Presale have not started"); require(_priceRate > 0, "IDOPreSale: price rate invalid"); uint256 prevValue = presale.priceRate; presale.priceRate = _priceRate; emit PresaleUpdated(prevValue, _priceRate, block.timestamp); } /** * @dev To update the presale start time * @param _presaleStartTime New presale start time * @param _presaleEndTime New presale end time */ function setPresaleTime(uint256 _presaleStartTime, uint256 _presaleEndTime) external onlyOwner { require(block.timestamp < _presaleStartTime && _presaleStartTime <= _presaleEndTime, "Invalid timestamp"); Presale storage presale = presaleRound[round]; uint256 prevValue = presale.presaleStartTime; presale.presaleStartTime = _presaleStartTime; presale.presaleEndTime = _presaleEndTime; emit PresaleUpdated(prevValue, _presaleStartTime, _presaleEndTime); } function setSaleToken(IERC20 _saleToken) external onlyOwner { require(address(_saleToken) != address(0), "IDO: sale token is zero address"); saleToken = _saleToken; } function setReceiver(address _receiverEth) external onlyOwner { require(_receiverEth != address(0), "IDO: sale token is zero address"); receiverEth = _receiverEth; } /** * @dev To update the private sale to pre sale */ function setUnlockPublicSale() external onlyOwner { isOpenPublic = !isOpenPublic; emit UnlockPreSale(isOpenPublic, block.timestamp); } /** * @dev To pause the presale */ function pausePresale() external onlyOwner { super._pause(); emit PresalePaused(block.timestamp); } /** * @dev To unpause the presale */ function unPausePresale() external onlyOwner { super._unpause(); emit PresaleUnpaused(block.timestamp); } function purchaseWithEth() external payable nonReentrant whenNotPaused { Presale storage presale = presaleRound[round]; uint256 maxPurchasable = usersVesting[_msgSender()].maxPurchasable + msg.value; if (block.timestamp <= presale.presaleStartTime || block.timestamp >= presale.presaleEndTime) { revert InvalidTimeBuy(); } // if (maxPurchasable > 50 ether) { // revert OverLimited(); // } // uint256 minimumEther = 0.002 * 10 ** 18; uint256 amount = msg.value * presale.priceRate; uint256 PRECISION_FACTOR = uint256(10 ** (uint256(30) - uint256(18))); amount = amount / PRECISION_FACTOR; presale.inSale += amount; // if (msg.value < minimumEther) { // revert LessPayment(); // } // if(presale.inSale == 0) { // presale.presaleEndTime = block.timestamp; // } if (usersVesting[_msgSender()].totalAmount > 0) { usersVesting[_msgSender()].totalAmount += amount; // usersVesting[_msgSender()].balance = usersVesting[_msgSender()].totalAmount; usersVesting[_msgSender()].maxPurchasable = maxPurchasable; } else { usersVesting[_msgSender()] = Vesting({ buyer: _msgSender(), maxPurchasable: maxPurchasable, totalAmount: amount // claimedAmount: 0, // balance: amount, // cliffDuration: CLAIM_INTERVAL }); idoUsers.push(_msgSender()); } // payable(receiverEth).sendValue(msg.value); emit TokensBought(_msgSender(), amount, block.timestamp); } function emergencyWithdrawETH(address payable recipient, uint256 amount) public onlyOwner { require(recipient != address(0), "recipient: recipient ether is the zero address"); require(amount > 0, "Ether amount is zero"); require(address(this).balance >= amount, "Not enough funds"); // Effects uint256 balanceBeforeTransfer = address(this).balance; // Interactions (bool success, ) = recipient.call{value: amount}(""); require(success, "ETH Payment failed"); // Verify balance reduced correctly (optional safety check) assert(address(this).balance == balanceBeforeTransfer - amount); emit WithdrawPool(recipient, amount); } function emergencyWithdraw(address recipient, uint256 _amount) public onlyOwner { if (address(saleToken) == address(0)) { revert SaleTokenInvalid(address(0)); } require(recipient != address(0), "recipient: recipient ether is the zero address"); require(_amount > 0, "ERC20: amount is zero"); require(saleToken.balanceOf(address(this)) >= _amount, "insufficient balance"); saleToken.safeTransfer(recipient, _amount); emit WithdrawPool(recipient, _amount); } // function claimableBalace(address account) public view returns (uint256 claimable) { // Vesting memory userVesting = usersVesting[account]; // Presale memory presale = presaleRound[round]; // if ( // userVesting.balance == 0 || // presale.unlockPercentage == 0 || // presale.vestingStartTime > block.timestamp // ) { // return 0; // } // uint256 elapsedTime = block.timestamp - presale.vestingStartTime; // if (elapsedTime < userVesting.cliffDuration) { // claimable = (userVesting.totalAmount * presale.unlockPercentage) / 10000; // } else { // uint256 remainingMonths = (CLAIM_INTERVAL + elapsedTime - userVesting.cliffDuration) / CLAIM_INTERVAL; // uint256 remainingPercentageForMonth = presale.remainingPercentage / presale.totalVestingMonths; // claimable = (userVesting.totalAmount * remainingMonths * remainingPercentageForMonth) / 10000; // claimable += (userVesting.totalAmount * presale.unlockPercentage) / 10000; // Add the cliff claimable amount // } // claimable -= userVesting.claimedAmount; // if (claimable > userVesting.balance) { // claimable = userVesting.balance; // } // } // function nextClaimTime(address account) public view returns (uint256 nextTime, uint256 amount) { // nextTime = 0; // amount = 0; // Vesting memory userVesting = usersVesting[account]; // Presale memory presale = presaleRound[round]; // if ( // userVesting.balance == 0 || // presale.unlockPercentage == 0 || // presale.remainingPercentage == 0 || // CLAIM_INTERVAL == 0 // ) { // return (nextTime, amount); // } // uint256 lockedAmount = userVesting.balance - claimableBalace(account); // uint256 elapsedTime = block.timestamp < presale.vestingStartTime ? 0 : block.timestamp - presale.vestingStartTime; // uint256 remainingPercentageForMonth = presale.remainingPercentage / presale.totalVestingMonths; // if (block.timestamp < presale.vestingStartTime) { // amount = (userVesting.totalAmount * presale.unlockPercentage) / 10000; // } else { // amount = (userVesting.totalAmount * remainingPercentageForMonth) / 10000; // } // if (lockedAmount < amount) { // amount = lockedAmount; // } // if (amount > 0) { // if (block.timestamp < presale.vestingStartTime) { // nextTime = presale.vestingStartTime; // } else { // nextTime = (elapsedTime / CLAIM_INTERVAL) + 1; // nextTime = (nextTime * CLAIM_INTERVAL) + presale.vestingStartTime; // } // } // } // function claimAll() external nonReentrant whenNotPaused { // uint256 claimable = claimableBalace(msg.sender); // _claim(claimable); // } // function claim(uint256 _amount) external nonReentrant whenNotPaused { // require(claimableBalace(msg.sender) >= _amount, "insufficient balance"); // _claim(_amount); // } // function _claim(uint256 _amount) internal { // if (address(saleToken) == address(0)) { // revert SaleTokenInvalid(address(0)); // } // require(_amount > 0, "you don't have enough claimable amount"); // require(saleToken.balanceOf(address(this)) >= _amount, "insufficient balance"); // Vesting storage userVesting = usersVesting[msg.sender]; // unchecked { // // Overflow not possible: amount < user balance // userVesting.balance = userVesting.balance - _amount; // userVesting.claimedAmount = userVesting.claimedAmount + _amount; // } // saleToken.safeTransfer(msg.sender, _amount); // emit Claim(msg.sender, _amount); // } function balanceOf(address account) public view returns (uint256) { Vesting memory userVesting = usersVesting[account]; return userVesting.totalAmount; } receive() external payable { emit ReceivedEther(msg.sender, msg.value); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"},{"internalType":"address","name":"_receiverEth","type":"address"},{"internalType":"uint256","name":"_priceRate","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidTimeBuy","type":"error"},{"inputs":[],"name":"OverLimited","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[{"internalType":"address","name":"saleToken","type":"address"}],"name":"SaleTokenInvalid","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"PresalePaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"PresaleUnpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"PresaleUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ReceivedEther","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensBought","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokensBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isOpenPresale","type":"bool"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UnlockPreSale","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"authorized","type":"bool"}],"name":"UpdateOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawPool","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_priceRate","type":"uint256"}],"name":"changePriceRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emergencyWithdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllUsersVesting","outputs":[{"components":[{"internalType":"address","name":"buyer","type":"address"},{"internalType":"uint256","name":"maxPurchasable","type":"uint256"},{"internalType":"uint256","name":"totalAmount","type":"uint256"}],"internalType":"struct TokenPreSale.Vesting[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOpenPublic","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pausePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"presaleRound","outputs":[{"internalType":"uint256","name":"presaleStartTime","type":"uint256"},{"internalType":"uint256","name":"presaleEndTime","type":"uint256"},{"internalType":"uint256","name":"priceRate","type":"uint256"},{"internalType":"uint256","name":"maxTokensToSell","type":"uint256"},{"internalType":"uint256","name":"inSale","type":"uint256"},{"internalType":"uint256","name":"vestingStartTime","type":"uint256"},{"internalType":"uint256","name":"totalVestingMonths","type":"uint256"},{"internalType":"uint256","name":"unlockPercentage","type":"uint256"},{"internalType":"uint256","name":"remainingPercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"purchaseWithEth","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"receiverEth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"round","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_presaleStartTime","type":"uint256"},{"internalType":"uint256","name":"_presaleEndTime","type":"uint256"}],"name":"setPresaleTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_receiverEth","type":"address"}],"name":"setReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_saleToken","type":"address"}],"name":"setSaleToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setUnlockPublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unPausePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"authorized","type":"bool"}],"name":"updateOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"usersVesting","outputs":[{"internalType":"address","name":"buyer","type":"address"},{"internalType":"uint256","name":"maxPurchasable","type":"uint256"},{"internalType":"uint256","name":"totalAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162001c6638038062001c66833981016040819052620000349162000127565b6000805460ff1916905560018055826200004e81620000b8565b50600680546001600160a01b0319166001600160a01b03841617905560006200007a6012601e6200017e565b6200008790600a62000297565b6004546000908152600860205260409020909150620000a78284620002ac565b60029091015550620002c692505050565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146200012257600080fd5b919050565b6000806000606084860312156200013d57600080fd5b62000148846200010a565b925062000158602085016200010a565b9150604084015190509250925092565b634e487b7160e01b600052601160045260246000fd5b8181038181111562000194576200019462000168565b92915050565b600181815b80851115620001db578160001904821115620001bf57620001bf62000168565b80851615620001cd57918102915b93841c93908002906200019f565b509250929050565b600082620001f45750600162000194565b81620002035750600062000194565b81600181146200021c5760028114620002275762000247565b600191505062000194565b60ff8411156200023b576200023b62000168565b50506001821b62000194565b5060208310610133831016604e8410600b84101617156200026c575081810a62000194565b6200027883836200019a565b80600019048211156200028f576200028f62000168565b029392505050565b6000620002a58383620001e3565b9392505050565b808202811582820484141762000194576200019462000168565b61199080620002d66000396000f3fe6080604052600436106101445760003560e01c8063925aa2ad116100b6578063a29f481c1161006f578063a29f481c1461044a578063a732cf541461046a578063ce6f89f31461048a578063d79e8567146104f5578063e985e36714610515578063f2fde38b1461053a57600080fd5b8063925aa2ad1461032657806395ccea671461032e578063971271941461034e5780639f9742c81461036e5780639fdb051514610383578063a0da40651461043057600080fd5b80636d44a3b2116101085780636d44a3b21461021e57806370a082311461023e578063715018a61461029d578063718da7ee146102b25780638da5cb5b146102d25780638ee14a351461030457600080fd5b8063070f5c09146101855780630d491e401461019c578063146ca531146101b15780635c40329e146101da5780635c975abb146101fa57600080fd5b366101805760405134815233907fa419615bc8fda4c87663805ee2a3597a6d71c1d476911d9892f340d965bc7bf19060200160405180910390a2005b600080fd5b34801561019157600080fd5b5061019a61055a565b005b3480156101a857600080fd5b5061019a6105a0565b3480156101bd57600080fd5b506101c760045481565b6040519081526020015b60405180910390f35b3480156101e657600080fd5b5061019a6101f536600461155a565b6105f7565b34801561020657600080fd5b5060005460ff165b60405190151581526020016101d1565b34801561022a57600080fd5b5061019a61023936600461159f565b6106ba565b34801561024a57600080fd5b506101c76102593660046115d8565b6001600160a01b0390811660009081526009602090815260409182902082516060810184528154909416845260018101549184019190915260020154910181905290565b3480156102a957600080fd5b5061019a610796565b3480156102be57600080fd5b5061019a6102cd3660046115d8565b6107aa565b3480156102de57600080fd5b506002546001600160a01b03165b6040516001600160a01b0390911681526020016101d1565b34801561031057600080fd5b5061031961082a565b6040516101d191906115fc565b61019a610955565b34801561033a57600080fd5b5061019a61034936600461165e565b610b63565b34801561035a57600080fd5b5061019a61036936600461168a565b610d23565b34801561037a57600080fd5b5061019a610e2b565b34801561038f57600080fd5b506103ec61039e36600461168a565b60086020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154908060080154905089565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015260e0830152610100820152610120016101d1565b34801561043c57600080fd5b5060055461020e9060ff1681565b34801561045657600080fd5b5061019a6104653660046115d8565b610e6b565b34801561047657600080fd5b506006546102ec906001600160a01b031681565b34801561049657600080fd5b506104d06104a53660046115d8565b6009602052600090815260409020805460018201546002909201546001600160a01b03909116919083565b604080516001600160a01b0390941684526020840192909252908201526060016101d1565b34801561050157600080fd5b5061019a61051036600461165e565b610ef1565b34801561052157600080fd5b506005546102ec9061010090046001600160a01b031681565b34801561054657600080fd5b5061019a6105553660046115d8565b6110a2565b6105626110e0565b61056a61110d565b6040514281527fbbda50ff3083b4adfffcd3c2e8042a8b354ca16013534ab9367661c5a4cb7b23906020015b60405180910390a1565b6105a86110e0565b6005805460ff8082161560ff1990921682179092556040805191909216151581524260208201527f84b40c0ab6084ea926eaf25ffeda54c2de72190e0d3f3ba9165b944a135f60759101610596565b6105ff6110e0565b814210801561060e5750808211155b6106535760405162461bcd60e51b81526020600482015260116024820152700496e76616c69642074696d657374616d7607c1b60448201526064015b60405180910390fd5b600454600090815260086020908152604091829020805485825560018201859055835181815292830186905292820184905291907fbddfc7bb60893f955909ddeb477ecc6fc45d4a314d37078222deb95ea119ae129060600160405180910390a150505050565b6106c26110e0565b6001600160a01b0382166107265760405162461bcd60e51b815260206004820152602560248201527f4f776e61626c653a206f70657261746f7220697320746865207a65726f206164604482015264647265737360d81b606482015260840161064a565b816001600160a01b03167f2ee52be9d342458b3d25e07faada7ff9bc06723b4aa24edb6321ac1316b8a9dd82604051610763911515815260200190565b60405180910390a26001600160a01b03919091166000908152600360205260409020805460ff1916911515919091179055565b61079e6110e0565b6107a86000611162565b565b6107b26110e0565b6001600160a01b0381166108085760405162461bcd60e51b815260206004820152601f60248201527f49444f3a2073616c6520746f6b656e206973207a65726f206164647265737300604482015260640161064a565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b60075460609060009067ffffffffffffffff81111561084b5761084b6116a3565b6040519080825280602002602001820160405280156108a957816020015b610896604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b8152602001906001900390816108695790505b50905060005b60075481101561094f5760096000600783815481106108d0576108d06116b9565b60009182526020808320909101546001600160a01b03908116845283820194909452604092830190912082516060810184528154909416845260018101549184019190915260020154908201528251839083908110610931576109316116b9565b60200260200101819052508080610947906116e5565b9150506108af565b50919050565b61095d6111b4565b61096561120d565b600454600090815260086020908152604080832033845260099092528220600101549091906109959034906116fe565b8254909150421115806109ac575081600101544210155b156109ca57604051632b0ac3cb60e21b815260040160405180910390fd5b60008260020154346109dc9190611711565b905060006109ec6012601e611728565b6109f790600a61181f565b9050610a03818361182b565b915081846004016000828254610a1991906116fe565b90915550503360009081526009602052604090206002015415610a77573360009081526009602052604081206002018054849290610a589084906116fe565b9091555050336000908152600960205260409020600101839055610b1c565b6040518060600160405280610a893390565b6001600160a01b03908116825260208083018790526040928301869052336000818152600983528481208651815495166001600160a01b03199586161781559286015160018085019190915595909401516002909201919091556007805494850181559092527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890920180549092161790555b6040805183815242602082015233917f8442948036198f1146d3a63c3db355d7e0295c2cc5676c755990445da4fdc1c9910160405180910390a2505050506107a860018055565b610b6b6110e0565b60055461010090046001600160a01b0316610b9c5760405163379d3ef960e01b81526000600482015260240161064a565b6001600160a01b038216610bc25760405162461bcd60e51b815260040161064a9061184d565b60008111610c0a5760405162461bcd60e51b815260206004820152601560248201527445524332303a20616d6f756e74206973207a65726f60581b604482015260640161064a565b6005546040516370a0823160e01b8152306004820152829161010090046001600160a01b0316906370a0823190602401602060405180830381865afa158015610c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7b919061189b565b1015610cc05760405162461bcd60e51b8152602060048201526014602482015273696e73756666696369656e742062616c616e636560601b604482015260640161064a565b600554610cdc9061010090046001600160a01b03168383611253565b816001600160a01b03167f1be2cac6988834b6207f367b71af9491b97a2780bcf9018c4e8e86433335499482604051610d1791815260200190565b60405180910390a25050565b610d2b6110e0565b60045460009081526008602052604090206001810154610d8d5760405162461bcd60e51b815260206004820152601860248201527f50726573616c652068617665206e6f7420737461727465640000000000000000604482015260640161064a565b60008211610ddd5760405162461bcd60e51b815260206004820152601e60248201527f49444f50726553616c653a207072696365207261746520696e76616c69640000604482015260640161064a565b600281018054908390556040805182815260208101859052428183015290517fbddfc7bb60893f955909ddeb477ecc6fc45d4a314d37078222deb95ea119ae129181900360600190a1505050565b610e336110e0565b610e3b6112aa565b6040514281527fbe62dd5c8409d49021c5290933c5405e6f7c46c6a4cf8cbea89977fdd06283dc90602001610596565b610e736110e0565b6001600160a01b038116610ec95760405162461bcd60e51b815260206004820152601f60248201527f49444f3a2073616c6520746f6b656e206973207a65726f206164647265737300604482015260640161064a565b600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b610ef96110e0565b6001600160a01b038216610f1f5760405162461bcd60e51b815260040161064a9061184d565b60008111610f665760405162461bcd60e51b8152602060048201526014602482015273457468657220616d6f756e74206973207a65726f60601b604482015260640161064a565b80471015610fa95760405162461bcd60e51b815260206004820152601060248201526f4e6f7420656e6f7567682066756e647360801b604482015260640161064a565b60405147906000906001600160a01b0385169084908381818185875af1925050503d8060008114610ff6576040519150601f19603f3d011682016040523d82523d6000602084013e610ffb565b606091505b50509050806110415760405162461bcd60e51b81526020600482015260126024820152711155120814185e5b595b9d0819985a5b195960721b604482015260640161064a565b61104b8383611728565b4714611059576110596118b4565b836001600160a01b03167f1be2cac6988834b6207f367b71af9491b97a2780bcf9018c4e8e8643333549948460405161109491815260200190565b60405180910390a250505050565b6110aa6110e0565b6001600160a01b0381166110d457604051631e4fbdf760e01b81526000600482015260240161064a565b6110dd81611162565b50565b6002546001600160a01b031633146107a85760405163118cdaa760e01b815233600482015260240161064a565b61111561120d565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861114a3390565b6040516001600160a01b039091168152602001610596565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600154036112065760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161064a565b6002600155565b60005460ff16156107a85760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161064a565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526112a59084906112e3565b505050565b6112b2611346565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361114a565b60006112f86001600160a01b0384168361138f565b9050805160001415801561131d57508080602001905181019061131b91906118ca565b155b156112a557604051635274afe760e01b81526001600160a01b038416600482015260240161064a565b60005460ff166107a85760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161064a565b60606113d3838360006040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c656400008152506113dc565b90505b92915050565b60608247101561143d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161064a565b600080866001600160a01b03168587604051611459919061190b565b60006040518083038185875af1925050503d8060008114611496576040519150601f19603f3d011682016040523d82523d6000602084013e61149b565b606091505b50915091506114ac878383876114b9565b925050505b949350505050565b6060831561152b578251600003611524576000856001600160a01b03163b116115245760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161064a565b50816114b1565b6114b183838151156115405781518083602001fd5b8060405162461bcd60e51b815260040161064a9190611927565b6000806040838503121561156d57600080fd5b50508035926020909101359150565b6001600160a01b03811681146110dd57600080fd5b80151581146110dd57600080fd5b600080604083850312156115b257600080fd5b82356115bd8161157c565b915060208301356115cd81611591565b809150509250929050565b6000602082840312156115ea57600080fd5b81356115f58161157c565b9392505050565b602080825282518282018190526000919060409081850190868401855b8281101561165157815180516001600160a01b0316855286810151878601528501518585015260609093019290850190600101611619565b5091979650505050505050565b6000806040838503121561167157600080fd5b823561167c8161157c565b946020939093013593505050565b60006020828403121561169c57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016116f7576116f76116cf565b5060010190565b808201808211156113d6576113d66116cf565b80820281158282048414176113d6576113d66116cf565b818103818111156113d6576113d66116cf565b600181815b8085111561177657816000190482111561175c5761175c6116cf565b8085161561176957918102915b93841c9390800290611740565b509250929050565b60008261178d575060016113d6565b8161179a575060006113d6565b81600181146117b057600281146117ba576117d6565b60019150506113d6565b60ff8411156117cb576117cb6116cf565b50506001821b6113d6565b5060208310610133831016604e8410600b84101617156117f9575081810a6113d6565b611803838361173b565b8060001904821115611817576118176116cf565b029392505050565b60006113d3838361177e565b60008261184857634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602e908201527f726563697069656e743a20726563697069656e7420657468657220697320746860408201526d65207a65726f206164647265737360901b606082015260800190565b6000602082840312156118ad57600080fd5b5051919050565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156118dc57600080fd5b81516115f581611591565b60005b838110156119025781810151838201526020016118ea565b50506000910152565b6000825161191d8184602087016118e7565b9190910192915050565b60208152600082518060208401526119468160408501602087016118e7565b601f01601f1916919091016040019291505056fea2646970667358221220c6c85ff5ddb38f2fdd1fe19a2345a63fd6b7159dc3fed67a6e88c9bc206a973b64736f6c63430008130033000000000000000000000000041223240fb7e928066c7481a63e0ee3bf9bf100000000000000000000000000111a6252f757aaf67fd373f292bfa7ade780d54300000000000000000000000000000000000000000000000000000000000001f4
Deployed Bytecode
0x6080604052600436106101445760003560e01c8063925aa2ad116100b6578063a29f481c1161006f578063a29f481c1461044a578063a732cf541461046a578063ce6f89f31461048a578063d79e8567146104f5578063e985e36714610515578063f2fde38b1461053a57600080fd5b8063925aa2ad1461032657806395ccea671461032e578063971271941461034e5780639f9742c81461036e5780639fdb051514610383578063a0da40651461043057600080fd5b80636d44a3b2116101085780636d44a3b21461021e57806370a082311461023e578063715018a61461029d578063718da7ee146102b25780638da5cb5b146102d25780638ee14a351461030457600080fd5b8063070f5c09146101855780630d491e401461019c578063146ca531146101b15780635c40329e146101da5780635c975abb146101fa57600080fd5b366101805760405134815233907fa419615bc8fda4c87663805ee2a3597a6d71c1d476911d9892f340d965bc7bf19060200160405180910390a2005b600080fd5b34801561019157600080fd5b5061019a61055a565b005b3480156101a857600080fd5b5061019a6105a0565b3480156101bd57600080fd5b506101c760045481565b6040519081526020015b60405180910390f35b3480156101e657600080fd5b5061019a6101f536600461155a565b6105f7565b34801561020657600080fd5b5060005460ff165b60405190151581526020016101d1565b34801561022a57600080fd5b5061019a61023936600461159f565b6106ba565b34801561024a57600080fd5b506101c76102593660046115d8565b6001600160a01b0390811660009081526009602090815260409182902082516060810184528154909416845260018101549184019190915260020154910181905290565b3480156102a957600080fd5b5061019a610796565b3480156102be57600080fd5b5061019a6102cd3660046115d8565b6107aa565b3480156102de57600080fd5b506002546001600160a01b03165b6040516001600160a01b0390911681526020016101d1565b34801561031057600080fd5b5061031961082a565b6040516101d191906115fc565b61019a610955565b34801561033a57600080fd5b5061019a61034936600461165e565b610b63565b34801561035a57600080fd5b5061019a61036936600461168a565b610d23565b34801561037a57600080fd5b5061019a610e2b565b34801561038f57600080fd5b506103ec61039e36600461168a565b60086020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154908060080154905089565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015260e0830152610100820152610120016101d1565b34801561043c57600080fd5b5060055461020e9060ff1681565b34801561045657600080fd5b5061019a6104653660046115d8565b610e6b565b34801561047657600080fd5b506006546102ec906001600160a01b031681565b34801561049657600080fd5b506104d06104a53660046115d8565b6009602052600090815260409020805460018201546002909201546001600160a01b03909116919083565b604080516001600160a01b0390941684526020840192909252908201526060016101d1565b34801561050157600080fd5b5061019a61051036600461165e565b610ef1565b34801561052157600080fd5b506005546102ec9061010090046001600160a01b031681565b34801561054657600080fd5b5061019a6105553660046115d8565b6110a2565b6105626110e0565b61056a61110d565b6040514281527fbbda50ff3083b4adfffcd3c2e8042a8b354ca16013534ab9367661c5a4cb7b23906020015b60405180910390a1565b6105a86110e0565b6005805460ff8082161560ff1990921682179092556040805191909216151581524260208201527f84b40c0ab6084ea926eaf25ffeda54c2de72190e0d3f3ba9165b944a135f60759101610596565b6105ff6110e0565b814210801561060e5750808211155b6106535760405162461bcd60e51b81526020600482015260116024820152700496e76616c69642074696d657374616d7607c1b60448201526064015b60405180910390fd5b600454600090815260086020908152604091829020805485825560018201859055835181815292830186905292820184905291907fbddfc7bb60893f955909ddeb477ecc6fc45d4a314d37078222deb95ea119ae129060600160405180910390a150505050565b6106c26110e0565b6001600160a01b0382166107265760405162461bcd60e51b815260206004820152602560248201527f4f776e61626c653a206f70657261746f7220697320746865207a65726f206164604482015264647265737360d81b606482015260840161064a565b816001600160a01b03167f2ee52be9d342458b3d25e07faada7ff9bc06723b4aa24edb6321ac1316b8a9dd82604051610763911515815260200190565b60405180910390a26001600160a01b03919091166000908152600360205260409020805460ff1916911515919091179055565b61079e6110e0565b6107a86000611162565b565b6107b26110e0565b6001600160a01b0381166108085760405162461bcd60e51b815260206004820152601f60248201527f49444f3a2073616c6520746f6b656e206973207a65726f206164647265737300604482015260640161064a565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b60075460609060009067ffffffffffffffff81111561084b5761084b6116a3565b6040519080825280602002602001820160405280156108a957816020015b610896604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b8152602001906001900390816108695790505b50905060005b60075481101561094f5760096000600783815481106108d0576108d06116b9565b60009182526020808320909101546001600160a01b03908116845283820194909452604092830190912082516060810184528154909416845260018101549184019190915260020154908201528251839083908110610931576109316116b9565b60200260200101819052508080610947906116e5565b9150506108af565b50919050565b61095d6111b4565b61096561120d565b600454600090815260086020908152604080832033845260099092528220600101549091906109959034906116fe565b8254909150421115806109ac575081600101544210155b156109ca57604051632b0ac3cb60e21b815260040160405180910390fd5b60008260020154346109dc9190611711565b905060006109ec6012601e611728565b6109f790600a61181f565b9050610a03818361182b565b915081846004016000828254610a1991906116fe565b90915550503360009081526009602052604090206002015415610a77573360009081526009602052604081206002018054849290610a589084906116fe565b9091555050336000908152600960205260409020600101839055610b1c565b6040518060600160405280610a893390565b6001600160a01b03908116825260208083018790526040928301869052336000818152600983528481208651815495166001600160a01b03199586161781559286015160018085019190915595909401516002909201919091556007805494850181559092527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890920180549092161790555b6040805183815242602082015233917f8442948036198f1146d3a63c3db355d7e0295c2cc5676c755990445da4fdc1c9910160405180910390a2505050506107a860018055565b610b6b6110e0565b60055461010090046001600160a01b0316610b9c5760405163379d3ef960e01b81526000600482015260240161064a565b6001600160a01b038216610bc25760405162461bcd60e51b815260040161064a9061184d565b60008111610c0a5760405162461bcd60e51b815260206004820152601560248201527445524332303a20616d6f756e74206973207a65726f60581b604482015260640161064a565b6005546040516370a0823160e01b8152306004820152829161010090046001600160a01b0316906370a0823190602401602060405180830381865afa158015610c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7b919061189b565b1015610cc05760405162461bcd60e51b8152602060048201526014602482015273696e73756666696369656e742062616c616e636560601b604482015260640161064a565b600554610cdc9061010090046001600160a01b03168383611253565b816001600160a01b03167f1be2cac6988834b6207f367b71af9491b97a2780bcf9018c4e8e86433335499482604051610d1791815260200190565b60405180910390a25050565b610d2b6110e0565b60045460009081526008602052604090206001810154610d8d5760405162461bcd60e51b815260206004820152601860248201527f50726573616c652068617665206e6f7420737461727465640000000000000000604482015260640161064a565b60008211610ddd5760405162461bcd60e51b815260206004820152601e60248201527f49444f50726553616c653a207072696365207261746520696e76616c69640000604482015260640161064a565b600281018054908390556040805182815260208101859052428183015290517fbddfc7bb60893f955909ddeb477ecc6fc45d4a314d37078222deb95ea119ae129181900360600190a1505050565b610e336110e0565b610e3b6112aa565b6040514281527fbe62dd5c8409d49021c5290933c5405e6f7c46c6a4cf8cbea89977fdd06283dc90602001610596565b610e736110e0565b6001600160a01b038116610ec95760405162461bcd60e51b815260206004820152601f60248201527f49444f3a2073616c6520746f6b656e206973207a65726f206164647265737300604482015260640161064a565b600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b610ef96110e0565b6001600160a01b038216610f1f5760405162461bcd60e51b815260040161064a9061184d565b60008111610f665760405162461bcd60e51b8152602060048201526014602482015273457468657220616d6f756e74206973207a65726f60601b604482015260640161064a565b80471015610fa95760405162461bcd60e51b815260206004820152601060248201526f4e6f7420656e6f7567682066756e647360801b604482015260640161064a565b60405147906000906001600160a01b0385169084908381818185875af1925050503d8060008114610ff6576040519150601f19603f3d011682016040523d82523d6000602084013e610ffb565b606091505b50509050806110415760405162461bcd60e51b81526020600482015260126024820152711155120814185e5b595b9d0819985a5b195960721b604482015260640161064a565b61104b8383611728565b4714611059576110596118b4565b836001600160a01b03167f1be2cac6988834b6207f367b71af9491b97a2780bcf9018c4e8e8643333549948460405161109491815260200190565b60405180910390a250505050565b6110aa6110e0565b6001600160a01b0381166110d457604051631e4fbdf760e01b81526000600482015260240161064a565b6110dd81611162565b50565b6002546001600160a01b031633146107a85760405163118cdaa760e01b815233600482015260240161064a565b61111561120d565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861114a3390565b6040516001600160a01b039091168152602001610596565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600154036112065760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161064a565b6002600155565b60005460ff16156107a85760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161064a565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526112a59084906112e3565b505050565b6112b2611346565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361114a565b60006112f86001600160a01b0384168361138f565b9050805160001415801561131d57508080602001905181019061131b91906118ca565b155b156112a557604051635274afe760e01b81526001600160a01b038416600482015260240161064a565b60005460ff166107a85760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161064a565b60606113d3838360006040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c656400008152506113dc565b90505b92915050565b60608247101561143d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161064a565b600080866001600160a01b03168587604051611459919061190b565b60006040518083038185875af1925050503d8060008114611496576040519150601f19603f3d011682016040523d82523d6000602084013e61149b565b606091505b50915091506114ac878383876114b9565b925050505b949350505050565b6060831561152b578251600003611524576000856001600160a01b03163b116115245760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161064a565b50816114b1565b6114b183838151156115405781518083602001fd5b8060405162461bcd60e51b815260040161064a9190611927565b6000806040838503121561156d57600080fd5b50508035926020909101359150565b6001600160a01b03811681146110dd57600080fd5b80151581146110dd57600080fd5b600080604083850312156115b257600080fd5b82356115bd8161157c565b915060208301356115cd81611591565b809150509250929050565b6000602082840312156115ea57600080fd5b81356115f58161157c565b9392505050565b602080825282518282018190526000919060409081850190868401855b8281101561165157815180516001600160a01b0316855286810151878601528501518585015260609093019290850190600101611619565b5091979650505050505050565b6000806040838503121561167157600080fd5b823561167c8161157c565b946020939093013593505050565b60006020828403121561169c57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016116f7576116f76116cf565b5060010190565b808201808211156113d6576113d66116cf565b80820281158282048414176113d6576113d66116cf565b818103818111156113d6576113d66116cf565b600181815b8085111561177657816000190482111561175c5761175c6116cf565b8085161561176957918102915b93841c9390800290611740565b509250929050565b60008261178d575060016113d6565b8161179a575060006113d6565b81600181146117b057600281146117ba576117d6565b60019150506113d6565b60ff8411156117cb576117cb6116cf565b50506001821b6113d6565b5060208310610133831016604e8410600b84101617156117f9575081810a6113d6565b611803838361173b565b8060001904821115611817576118176116cf565b029392505050565b60006113d3838361177e565b60008261184857634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602e908201527f726563697069656e743a20726563697069656e7420657468657220697320746860408201526d65207a65726f206164647265737360901b606082015260800190565b6000602082840312156118ad57600080fd5b5051919050565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156118dc57600080fd5b81516115f581611591565b60005b838110156119025781810151838201526020016118ea565b50506000910152565b6000825161191d8184602087016118e7565b9190910192915050565b60208152600082518060208401526119468160408501602087016118e7565b601f01601f1916919091016040019291505056fea2646970667358221220c6c85ff5ddb38f2fdd1fe19a2345a63fd6b7159dc3fed67a6e88c9bc206a973b64736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000041223240fb7e928066c7481a63e0ee3bf9bf100000000000000000000000000111a6252f757aaf67fd373f292bfa7ade780d54300000000000000000000000000000000000000000000000000000000000001f4
-----Decoded View---------------
Arg [0] : initialOwner (address): 0x041223240Fb7e928066c7481A63E0eE3bf9Bf100
Arg [1] : _receiverEth (address): 0x111a6252F757aaF67fd373f292BFA7ADe780d543
Arg [2] : _priceRate (uint256): 500
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000041223240fb7e928066c7481a63e0ee3bf9bf100
Arg [1] : 000000000000000000000000111a6252f757aaf67fd373f292bfa7ade780d543
Arg [2] : 00000000000000000000000000000000000000000000000000000000000001f4
Deployed Bytecode Sourcemap
25671:12474:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38100:36;;38126:9;160:25:1;;38114:10:0;;38100:36;;148:2:1;133:18;38100:36:0;;;;;;;25671:12474;;;;;31032:112;;;;;;;;;;;;;:::i;:::-;;30831:149;;;;;;;;;;;;;:::i;25854:20::-;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;25854:20:0;;;;;;;;29901:491;;;;;;;;;;-1:-1:-1;29901:491:0;;;;;:::i;:::-;;:::i;5791:80::-;;;;;;;;;;-1:-1:-1;5838:4:0;5858:7;;;5791:80;;;614:14:1;;607:22;589:41;;577:2;562:18;5791:80:0;449:187:1;3843:249:0;;;;;;;;;;-1:-1:-1;3843:249:0;;;;;:::i;:::-;;:::i;37889:166::-;;;;;;;;;;-1:-1:-1;37889:166:0;;;;;:::i;:::-;-1:-1:-1;;;;;37991:21:0;;;37946:7;37991:21;;;:12;:21;;;;;;;;;37962:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37889:166;2946:97;;;;;;;;;;;;;:::i;30583:178::-;;;;;;;;;;-1:-1:-1;30583:178:0;;;;;:::i;:::-;;:::i;2317:81::-;;;;;;;;;;-1:-1:-1;2386:6:0;;-1:-1:-1;;;;;2386:6:0;2317:81;;;-1:-1:-1;;;;;1703:32:1;;;1685:51;;1673:2;1658:18;2317:81:0;1539:203:1;28293:302:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;31322:1580::-;;;:::i;33603:507::-;;;;;;;;;;-1:-1:-1;33603:507:0;;;;;:::i;:::-;;:::i;29324:409::-;;;;;;;;;;-1:-1:-1;29324:409:0;;;;;:::i;:::-;;:::i;31198:118::-;;;;;;;;;;;;;:::i;26529:47::-;;;;;;;;;;-1:-1:-1;26529:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3497:25:1;;;3553:2;3538:18;;3531:34;;;;3581:18;;;3574:34;;;;3639:2;3624:18;;3617:34;;;;3682:3;3667:19;;3660:35;;;;3726:3;3711:19;;3704:35;3770:3;3755:19;;3748:35;3814:3;3799:19;;3792:35;3858:3;3843:19;;3836:35;3484:3;3469:19;26529:47:0;3126:751:1;25879:24:0;;;;;;;;;;-1:-1:-1;25879:24:0;;;;;;;;30398:179;;;;;;;;;;-1:-1:-1;30398:179:0;;;;;:::i;:::-;;:::i;25985:26::-;;;;;;;;;;-1:-1:-1;25985:26:0;;;;-1:-1:-1;;;;;25985:26:0;;;26581:47;;;;;;;;;;-1:-1:-1;26581:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26581:47:0;;;;;;;;;;;-1:-1:-1;;;;;4368:32:1;;;4350:51;;4432:2;4417:18;;4410:34;;;;4460:18;;;4453:34;4338:2;4323:18;26581:47:0;4148:345:1;32908:689:0;;;;;;;;;;-1:-1:-1;32908:689:0;;;;;:::i;:::-;;:::i;25957:23::-;;;;;;;;;;-1:-1:-1;25957:23:0;;;;;;;-1:-1:-1;;;;;25957:23:0;;;3188:200;;;;;;;;;;-1:-1:-1;3188:200:0;;;;;:::i;:::-;;:::i;31032:112::-;2217:13;:11;:13::i;:::-;31082:14:::1;:12;:14::i;:::-;31108:30;::::0;31122:15:::1;160:25:1::0;;31108:30:0::1;::::0;148:2:1;133:18;31108:30:0::1;;;;;;;;31032:112::o:0;30831:149::-;2217:13;:11;:13::i;:::-;30904:12:::1;::::0;;::::1;::::0;;::::1;30903:13;-1:-1:-1::0;;30888:28:0;;::::1;::::0;::::1;::::0;;;30930:44:::1;::::0;;30944:12;;;;5241:14:1;5234:22;5216:41;;30958:15:0::1;5288:2:1::0;5273:18;;5266:34;30930:44:0::1;::::0;5189:18:1;30930:44:0::1;5048:258:1::0;29901:491:0;2217:13;:11;:13::i;:::-;30029:17:::1;30011:15;:35;:75;;;;;30071:15;30050:17;:36;;30011:75;30003:105;;;::::0;-1:-1:-1;;;30003:105:0;;5513:2:1;30003:105:0::1;::::0;::::1;5495:21:1::0;5552:2;5532:18;;;5525:30;-1:-1:-1;;;5571:18:1;;;5564:47;5628:18;;30003:105:0::1;;;;;;;;;30156:5;::::0;30117:23:::1;30143:19:::0;;;:12:::1;:19;::::0;;;;;;;;30189:24;;30220:44;;;-1:-1:-1;30271:22:0;::::1;:40:::0;;;30325:61;;5859:25:1;;;5900:18;;;5893:34;;;5943:18;;;5936:34;;;30143:19:0;30189:24;30325:61:::1;::::0;5847:2:1;5832:18;30325:61:0::1;;;;;;;29996:396;;29901:491:::0;;:::o;3843:249::-;2217:13;:11;:13::i;:::-;-1:-1:-1;;;;;3934:22:0;::::1;3926:72;;;::::0;-1:-1:-1;;;3926:72:0;;6183:2:1;3926:72:0::1;::::0;::::1;6165:21:1::0;6222:2;6202:18;;;6195:30;6261:34;6241:18;;;6234:62;-1:-1:-1;;;6312:18:1;;;6305:35;6357:19;;3926:72:0::1;5981:401:1::0;3926:72:0::1;4025:8;-1:-1:-1::0;;;;;4010:36:0::1;;4035:10;4010:36;;;;614:14:1::0;607:22;589:41;;577:2;562:18;;449:187;4010:36:0::1;;;;;;;;-1:-1:-1::0;;;;;4053:20:0;;;::::1;;::::0;;;:10:::1;:20;::::0;;;;:33;;-1:-1:-1;;4053:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;3843:249::o;2946:97::-;2217:13;:11;:13::i;:::-;3007:30:::1;3034:1;3007:18;:30::i;:::-;2946:97::o:0;30583:178::-;2217:13;:11;:13::i;:::-;-1:-1:-1;;;;;30660:26:0;::::1;30652:70;;;::::0;-1:-1:-1;;;30652:70:0;;6589:2:1;30652:70:0::1;::::0;::::1;6571:21:1::0;6628:2;6608:18;;;6601:30;6667:33;6647:18;;;6640:61;6718:18;;30652:70:0::1;6387:355:1::0;30652:70:0::1;30729:11;:26:::0;;-1:-1:-1;;;;;;30729:26:0::1;-1:-1:-1::0;;;;;30729:26:0;;;::::1;::::0;;;::::1;::::0;;30583:178::o;28293:302::-;28421:8;:15;28346:16;;28371:33;;28407:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28407:30:0;;;;;;;;;;;;;;;;;28371:66;;28451:9;28446:112;28470:8;:15;28466:19;;28446:112;;;28525:12;:25;28538:8;28547:1;28538:11;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28538:11:0;;;28525:25;;;;;;;;;;;;;;;;28503:47;;;;;;;;;;;;;;28538:11;28503:47;;;;;;;;;;;;;;;;;:19;;:16;;28520:1;;28503:19;;;;;;:::i;:::-;;;;;;:47;;;;28487:3;;;;;:::i;:::-;;;;28446:112;;;-1:-1:-1;28573:16:0;28293:302;-1:-1:-1;28293:302:0:o;31322:1580::-;24777:21;:19;:21::i;:::-;5436:19:::1;:17;:19::i;:::-;31439:5:::2;::::0;31400:23:::2;31426:19:::0;;;:12:::2;:19;::::0;;;;;;;680:10;31477:26;;:12:::2;:26:::0;;;;;:41:::2;;::::0;31426:19;;31400:23;31477:53:::2;::::0;31521:9:::2;::::0;31477:53:::2;:::i;:::-;31562:24:::0;;31452:78;;-1:-1:-1;31543:15:0::2;:43;;::::0;:88:::2;;;31609:7;:22;;;31590:15;:41;;31543:88;31539:134;;;31649:16;;-1:-1:-1::0;;;31649:16:0::2;;;;;;;;;;;31539:134;31815:14;31844:7;:17;;;31832:9;:29;;;;:::i;:::-;31815:46:::0;-1:-1:-1;31868:24:0::2;31910:25;31932:2;31918;31910:25;:::i;:::-;31903:33;::::0;:2:::2;:33;:::i;:::-;31868:69:::0;-1:-1:-1;31955:25:0::2;31868:69:::0;31955:6;:25:::2;:::i;:::-;31946:34;;32005:6;31987:7;:14;;;:24;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;680:10:0;32247:1:::2;32206:26:::0;;;:12:::2;:26;::::0;;;;:38:::2;;::::0;:42;32202:577:::2;;680:10:::0;32259:26:::2;::::0;;;:12:::2;:26;::::0;;;;:38:::2;;:48:::0;;32301:6;;32259:26;:48:::2;::::0;32301:6;;32259:48:::2;:::i;:::-;::::0;;;-1:-1:-1;;680:10:0;32403:26:::2;::::0;;;:12:::2;:26;::::0;;;;:41:::2;;:58:::0;;;32202:577:::2;;;32513:220;;;;;;;;32539:12;680:10:::0;;604:92;32539:12:::2;-1:-1:-1::0;;;;;32513:220:0;;::::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;680:10;-1:-1:-1;32484:26:0;;;:12:::2;:26:::0;;;;;:249;;;;;::::2;-1:-1:-1::0;;;;;;32484:249:0;;::::2;;::::0;;;;::::2;::::0;-1:-1:-1;32484:249:0;;::::2;::::0;;;;;;;::::2;::::0;::::2;::::0;;::::2;::::0;;;;32744:8:::2;:27:::0;;;;::::2;::::0;;;;;;;;::::2;::::0;;;;::::2;;::::0;;32202:577:::2;32845:51;::::0;;9489:25:1;;;32880:15:0::2;9545:2:1::0;9530:18;;9523:34;680:10:0;;32845:51:::2;::::0;9462:18:1;32845:51:0::2;;;;;;;31393:1509;;;;24813:20:::0;24247:1;25297:22;;25126:199;33603:507;2217:13;:11;:13::i;:::-;33702:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;33702:9:0::1;33690:90;;33744:28;::::0;-1:-1:-1;;;33744:28:0;;33769:1:::1;33744:28;::::0;::::1;1685:51:1::0;1658:18;;33744:28:0::1;1539:203:1::0;33690:90:0::1;-1:-1:-1::0;;;;;33796:23:0;::::1;33788:82;;;;-1:-1:-1::0;;;33788:82:0::1;;;;;;;:::i;:::-;33895:1;33885:7;:11;33877:45;;;::::0;-1:-1:-1;;;33877:45:0;;10185:2:1;33877:45:0::1;::::0;::::1;10167:21:1::0;10224:2;10204:18;;;10197:30;-1:-1:-1;;;10243:18:1;;;10236:51;10304:18;;33877:45:0::1;9983:345:1::0;33877:45:0::1;33937:9;::::0;:34:::1;::::0;-1:-1:-1;;;33937:34:0;;33965:4:::1;33937:34;::::0;::::1;1685:51:1::0;33975:7:0;;33937:9:::1;::::0;::::1;-1:-1:-1::0;;;;;33937:9:0::1;::::0;:19:::1;::::0;1658:18:1;;33937:34:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;;33929:78;;;::::0;-1:-1:-1;;;33929:78:0;;10724:2:1;33929:78:0::1;::::0;::::1;10706:21:1::0;10763:2;10743:18;;;10736:30;-1:-1:-1;;;10782:18:1;;;10775:50;10842:18;;33929:78:0::1;10522:344:1::0;33929:78:0::1;34016:9;::::0;:42:::1;::::0;:9:::1;::::0;::::1;-1:-1:-1::0;;;;;34016:9:0::1;34039::::0;34050:7;34016:22:::1;:42::i;:::-;34085:9;-1:-1:-1::0;;;;;34072:32:0::1;;34096:7;34072:32;;;;160:25:1::0;;148:2;133:18;;14:177;34072:32:0::1;;;;;;;;33603:507:::0;;:::o;29324:409::-;2217:13;:11;:13::i;:::-;29434:5:::1;::::0;29395:23:::1;29421:19:::0;;;:12:::1;:19;::::0;;;;29457:22:::1;::::0;::::1;::::0;29449:63:::1;;;::::0;-1:-1:-1;;;29449:63:0;;11073:2:1;29449:63:0::1;::::0;::::1;11055:21:1::0;11112:2;11092:18;;;11085:30;11151:26;11131:18;;;11124:54;11195:18;;29449:63:0::1;10871:348:1::0;29449:63:0::1;29540:1;29527:10;:14;29519:57;;;::::0;-1:-1:-1;;;29519:57:0;;11426:2:1;29519:57:0::1;::::0;::::1;11408:21:1::0;11465:2;11445:18;;;11438:30;11504:32;11484:18;;;11477:60;11554:18;;29519:57:0::1;11224:354:1::0;29519:57:0::1;29605:17;::::0;::::1;::::0;;29629:30;;;;29673:54:::1;::::0;;5859:25:1;;;5915:2;5900:18;;5893:34;;;29711:15:0::1;5943:18:1::0;;;5936:34;29673:54:0;;::::1;::::0;;;;5847:2:1;29673:54:0;;::::1;29388:345;;29324:409:::0;:::o;31198:118::-;2217:13;:11;:13::i;:::-;31250:16:::1;:14;:16::i;:::-;31278:32;::::0;31294:15:::1;160:25:1::0;;31278:32:0::1;::::0;148:2:1;133:18;31278:32:0::1;14:177:1::0;30398:179:0;2217:13;:11;:13::i;:::-;-1:-1:-1;;;;;30473:33:0;::::1;30465:77;;;::::0;-1:-1:-1;;;30465:77:0;;6589:2:1;30465:77:0::1;::::0;::::1;6571:21:1::0;6628:2;6608:18;;;6601:30;6667:33;6647:18;;;6640:61;6718:18;;30465:77:0::1;6387:355:1::0;30465:77:0::1;30549:9;:22:::0;;-1:-1:-1;;;;;30549:22:0;;::::1;;;-1:-1:-1::0;;;;;;30549:22:0;;::::1;::::0;;;::::1;::::0;;30398:179::o;32908:689::-;2217:13;:11;:13::i;:::-;-1:-1:-1;;;;;33013:23:0;::::1;33005:82;;;;-1:-1:-1::0;;;33005:82:0::1;;;;;;;:::i;:::-;33111:1;33102:6;:10;33094:43;;;::::0;-1:-1:-1;;;33094:43:0;;11785:2:1;33094:43:0::1;::::0;::::1;11767:21:1::0;11824:2;11804:18;;;11797:30;-1:-1:-1;;;11843:18:1;;;11836:50;11903:18;;33094:43:0::1;11583:344:1::0;33094:43:0::1;33177:6;33152:21;:31;;33144:60;;;::::0;-1:-1:-1;;;33144:60:0;;12134:2:1;33144:60:0::1;::::0;::::1;12116:21:1::0;12173:2;12153:18;;;12146:30;-1:-1:-1;;;12192:18:1;;;12185:46;12248:18;;33144:60:0::1;11932:340:1::0;33144:60:0::1;33331:33;::::0;33261:21:::1;::::0;33229:29:::1;::::0;-1:-1:-1;;;;;33331:14:0;::::1;::::0;33353:6;;33229:29;33331:33;33229:29;33331:33;33353:6;33331:14;:33:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33312:52;;;33379:7;33371:38;;;::::0;-1:-1:-1;;;33371:38:0;;12689:2:1;33371:38:0::1;::::0;::::1;12671:21:1::0;12728:2;12708:18;;;12701:30;-1:-1:-1;;;12747:18:1;;;12740:48;12805:18;;33371:38:0::1;12487:342:1::0;33371:38:0::1;33515:30;33539:6:::0;33515:21;:30:::1;:::i;:::-;33490:21;:55;33483:63;;;;:::i;:::-;33573:9;-1:-1:-1::0;;;;;33560:31:0::1;;33584:6;33560:31;;;;160:25:1::0;;148:2;133:18;;14:177;33560:31:0::1;;;;;;;;32998:599;;32908:689:::0;;:::o;3188:200::-;2217:13;:11;:13::i;:::-;-1:-1:-1;;;;;3269:22:0;::::1;3265:83;;3309:31;::::0;-1:-1:-1;;;3309:31:0;;3337:1:::1;3309:31;::::0;::::1;1685:51:1::0;1658:18;;3309:31:0::1;1539:203:1::0;3265:83:0::1;3354:28;3373:8;3354:18;:28::i;:::-;3188:200:::0;:::o;2468:150::-;2386:6;;-1:-1:-1;;;;;2386:6:0;680:10;2524:23;2520:93;;2565:40;;-1:-1:-1;;;2565:40:0;;680:10;2565:40;;;1685:51:1;1658:18;;2565:40:0;1539:203:1;6337:108:0;5436:19;:17;:19::i;:::-;6393:7:::1;:14:::0;;-1:-1:-1;;6393:14:0::1;6403:4;6393:14;::::0;;6419:20:::1;6426:12;680:10:::0;;604:92;6426:12:::1;6419:20;::::0;-1:-1:-1;;;;;1703:32:1;;;1685:51;;1673:2;1658:18;6419:20:0::1;1539:203:1::0;3538:177:0;3627:6;;;-1:-1:-1;;;;;3640:17:0;;;-1:-1:-1;;;;;;3640:17:0;;;;;;;3669:40;;3627:6;;;3640:17;3627:6;;3669:40;;3608:16;;3669:40;3601:114;3538:177;:::o;24845:275::-;24289:1;24971:7;;:19;24963:63;;;;-1:-1:-1;;;24963:63:0;;13168:2:1;24963:63:0;;;13150:21:1;13207:2;13187:18;;;13180:30;13246:33;13226:18;;;13219:61;13297:18;;24963:63:0;12966:355:1;24963:63:0;24289:1;25096:7;:18;24845:275::o;5936:102::-;5838:4;5858:7;;;6002:9;5994:38;;;;-1:-1:-1;;;5994:38:0;;13528:2:1;5994:38:0;;;13510:21:1;13567:2;13547:18;;;13540:30;-1:-1:-1;;;13586:18:1;;;13579:46;13642:18;;5994:38:0;13326:340:1;18252:156:0;18358:43;;;-1:-1:-1;;;;;13863:32:1;;18358:43:0;;;13845:51:1;13912:18;;;;13905:34;;;18358:43:0;;;;;;;;;;13818:18:1;;;;18358:43:0;;;;;;;;-1:-1:-1;;;;;18358:43:0;-1:-1:-1;;;18358:43:0;;;18331:71;;18351:5;;18331:19;:71::i;:::-;18252:156;;;:::o;6570:110::-;5669:16;:14;:16::i;:::-;6635:5:::1;6625:15:::0;;-1:-1:-1;;6625:15:0::1;::::0;;6652:22:::1;680:10:::0;6661:12:::1;604:92:::0;20917:606;21325:23;21351:33;-1:-1:-1;;;;;21351:27:0;;21379:4;21351:27;:33::i;:::-;21325:59;;21395:10;:17;21416:1;21395:22;;:57;;;;;21433:10;21422:30;;;;;;;;;;;;:::i;:::-;21421:31;21395:57;21391:127;;;21470:40;;-1:-1:-1;;;21470:40:0;;-1:-1:-1;;;;;1703:32:1;;21470:40:0;;;1685:51:1;1658:18;;21470:40:0;1539:203:1;6107:102:0;5838:4;5858:7;;;6162:41;;;;-1:-1:-1;;;6162:41:0;;14402:2:1;6162:41:0;;;14384:21:1;14441:2;14421:18;;;14414:30;-1:-1:-1;;;14460:18:1;;;14453:50;14520:18;;6162:41:0;14200:344:1;11800:181:0;11875:12;11903:72;11925:6;11933:4;11939:1;11903:72;;;;;;;;;;;;;;;;;:21;:72::i;:::-;11896:79;;11800:181;;;;;:::o;13199:423::-;13351:12;13405:5;13380:21;:30;;13372:81;;;;-1:-1:-1;;;13372:81:0;;14751:2:1;13372:81:0;;;14733:21:1;14790:2;14770:18;;;14763:30;14829:34;14809:18;;;14802:62;-1:-1:-1;;;14880:18:1;;;14873:36;14926:19;;13372:81:0;14549:402:1;13372:81:0;13461:12;13475:23;13502:6;-1:-1:-1;;;;;13502:11:0;13521:5;13528:4;13502:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13460:73;;;;13547:69;13574:6;13582:7;13591:10;13603:12;13547:26;:69::i;:::-;13540:76;;;;13199:423;;;;;;;:::o;15610:581::-;15777:12;15802:7;15798:388;;;15824:10;:17;15845:1;15824:22;15820:277;;16052:1;16031:6;-1:-1:-1;;;;;16031:18:0;;:22;16023:64;;;;-1:-1:-1;;;16023:64:0;;15705:2:1;16023:64:0;;;15687:21:1;15744:2;15724:18;;;15717:30;15783:31;15763:18;;;15756:59;15832:18;;16023:64:0;15503:353:1;16023:64:0;-1:-1:-1;16112:10:0;16105:17;;15798:388;16145:33;16153:10;16165:12;16830:17;;:21;16826:334;;17036:10;17030:17;17085:15;17072:10;17068:2;17064:19;17057:44;16826:334;17139:12;17132:20;;-1:-1:-1;;;17132:20:0;;;;;;;;:::i;196:248:1:-;264:6;272;325:2;313:9;304:7;300:23;296:32;293:52;;;341:1;338;331:12;293:52;-1:-1:-1;;364:23:1;;;434:2;419:18;;;406:32;;-1:-1:-1;196:248:1:o;641:131::-;-1:-1:-1;;;;;716:31:1;;706:42;;696:70;;762:1;759;752:12;777:118;863:5;856:13;849:21;842:5;839:32;829:60;;885:1;882;875:12;900:382;965:6;973;1026:2;1014:9;1005:7;1001:23;997:32;994:52;;;1042:1;1039;1032:12;994:52;1081:9;1068:23;1100:31;1125:5;1100:31;:::i;:::-;1150:5;-1:-1:-1;1207:2:1;1192:18;;1179:32;1220:30;1179:32;1220:30;:::i;:::-;1269:7;1259:17;;;900:382;;;;;:::o;1287:247::-;1346:6;1399:2;1387:9;1378:7;1374:23;1370:32;1367:52;;;1415:1;1412;1405:12;1367:52;1454:9;1441:23;1473:31;1498:5;1473:31;:::i;:::-;1523:5;1287:247;-1:-1:-1;;;1287:247:1:o;1747:869::-;1968:2;2020:21;;;2090:13;;1993:18;;;2112:22;;;1939:4;;1968:2;2153;;2171:18;;;;2212:15;;;1939:4;2255:335;2269:6;2266:1;2263:13;2255:335;;;2328:13;;2370:9;;-1:-1:-1;;;;;2366:35:1;2354:48;;2442:11;;;2436:18;2422:12;;;2415:40;2495:11;;2489:18;2475:12;;;2468:40;2537:4;2528:14;;;;2565:15;;;;2398:1;2284:9;2255:335;;;-1:-1:-1;2607:3:1;;1747:869;-1:-1:-1;;;;;;;1747:869:1:o;2621:315::-;2689:6;2697;2750:2;2738:9;2729:7;2725:23;2721:32;2718:52;;;2766:1;2763;2756:12;2718:52;2805:9;2792:23;2824:31;2849:5;2824:31;:::i;:::-;2874:5;2926:2;2911:18;;;;2898:32;;-1:-1:-1;;;2621:315:1:o;2941:180::-;3000:6;3053:2;3041:9;3032:7;3028:23;3024:32;3021:52;;;3069:1;3066;3059:12;3021:52;-1:-1:-1;3092:23:1;;2941:180;-1:-1:-1;2941:180:1:o;6747:127::-;6808:10;6803:3;6799:20;6796:1;6789:31;6839:4;6836:1;6829:15;6863:4;6860:1;6853:15;6879:127;6940:10;6935:3;6931:20;6928:1;6921:31;6971:4;6968:1;6961:15;6995:4;6992:1;6985:15;7011:127;7072:10;7067:3;7063:20;7060:1;7053:31;7103:4;7100:1;7093:15;7127:4;7124:1;7117:15;7143:135;7182:3;7203:17;;;7200:43;;7223:18;;:::i;:::-;-1:-1:-1;7270:1:1;7259:13;;7143:135::o;7283:125::-;7348:9;;;7369:10;;;7366:36;;;7382:18;;:::i;7413:168::-;7486:9;;;7517;;7534:15;;;7528:22;;7514:37;7504:71;;7555:18;;:::i;7586:128::-;7653:9;;;7674:11;;;7671:37;;;7688:18;;:::i;7719:422::-;7808:1;7851:5;7808:1;7865:270;7886:7;7876:8;7873:21;7865:270;;;7945:4;7941:1;7937:6;7933:17;7927:4;7924:27;7921:53;;;7954:18;;:::i;:::-;8004:7;7994:8;7990:22;7987:55;;;8024:16;;;;7987:55;8103:22;;;;8063:15;;;;7865:270;;;7869:3;7719:422;;;;;:::o;8146:806::-;8195:5;8225:8;8215:80;;-1:-1:-1;8266:1:1;8280:5;;8215:80;8314:4;8304:76;;-1:-1:-1;8351:1:1;8365:5;;8304:76;8396:4;8414:1;8409:59;;;;8482:1;8477:130;;;;8389:218;;8409:59;8439:1;8430:10;;8453:5;;;8477:130;8514:3;8504:8;8501:17;8498:43;;;8521:18;;:::i;:::-;-1:-1:-1;;8577:1:1;8563:16;;8592:5;;8389:218;;8691:2;8681:8;8678:16;8672:3;8666:4;8663:13;8659:36;8653:2;8643:8;8640:16;8635:2;8629:4;8626:12;8622:35;8619:77;8616:159;;;-1:-1:-1;8728:19:1;;;8760:5;;8616:159;8807:34;8832:8;8826:4;8807:34;:::i;:::-;8877:6;8873:1;8869:6;8865:19;8856:7;8853:32;8850:58;;;8888:18;;:::i;:::-;8926:20;;8146:806;-1:-1:-1;;;8146:806:1:o;8957:131::-;9017:5;9046:36;9073:8;9067:4;9046:36;:::i;9093:217::-;9133:1;9159;9149:132;;9203:10;9198:3;9194:20;9191:1;9184:31;9238:4;9235:1;9228:15;9266:4;9263:1;9256:15;9149:132;-1:-1:-1;9295:9:1;;9093:217::o;9568:410::-;9770:2;9752:21;;;9809:2;9789:18;;;9782:30;9848:34;9843:2;9828:18;;9821:62;-1:-1:-1;;;9914:2:1;9899:18;;9892:44;9968:3;9953:19;;9568:410::o;10333:184::-;10403:6;10456:2;10444:9;10435:7;10431:23;10427:32;10424:52;;;10472:1;10469;10462:12;10424:52;-1:-1:-1;10495:16:1;;10333:184;-1:-1:-1;10333:184:1:o;12834:127::-;12895:10;12890:3;12886:20;12883:1;12876:31;12926:4;12923:1;12916:15;12950:4;12947:1;12940:15;13950:245;14017:6;14070:2;14058:9;14049:7;14045:23;14041:32;14038:52;;;14086:1;14083;14076:12;14038:52;14118:9;14112:16;14137:28;14159:5;14137:28;:::i;14956:250::-;15041:1;15051:113;15065:6;15062:1;15059:13;15051:113;;;15141:11;;;15135:18;15122:11;;;15115:39;15087:2;15080:10;15051:113;;;-1:-1:-1;;15198:1:1;15180:16;;15173:27;14956:250::o;15211:287::-;15340:3;15378:6;15372:13;15394:66;15453:6;15448:3;15441:4;15433:6;15429:17;15394:66;:::i;:::-;15476:16;;;;;15211:287;-1:-1:-1;;15211:287:1:o;15861:396::-;16010:2;15999:9;15992:21;15973:4;16042:6;16036:13;16085:6;16080:2;16069:9;16065:18;16058:34;16101:79;16173:6;16168:2;16157:9;16153:18;16148:2;16140:6;16136:15;16101:79;:::i;:::-;16241:2;16220:15;-1:-1:-1;;16216:29:1;16201:45;;;;16248:2;16197:54;;15861:396;-1:-1:-1;;15861:396:1:o
Swarm Source
ipfs://c6c85ff5ddb38f2fdd1fe19a2345a63fd6b7159dc3fed67a6e88c9bc206a973b
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.