Source Code
Latest 25 from a total of 103 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Deposit | 17620093 | 1001 days ago | IN | 0 ETH | 0.00422176 | ||||
| Withdraw | 17567690 | 1008 days ago | IN | 0 ETH | 0.00108855 | ||||
| Deposit | 17499552 | 1018 days ago | IN | 0 ETH | 0.00438247 | ||||
| Withdraw | 17473105 | 1021 days ago | IN | 0 ETH | 0.00163448 | ||||
| Emergency Withdr... | 17412834 | 1030 days ago | IN | 0 ETH | 0.00164672 | ||||
| Deposit | 17402757 | 1031 days ago | IN | 0 ETH | 0.00710084 | ||||
| Deposit | 17334004 | 1041 days ago | IN | 0 ETH | 0.00977105 | ||||
| Withdraw | 17333969 | 1041 days ago | IN | 0 ETH | 0.00294855 | ||||
| Withdraw | 17323585 | 1042 days ago | IN | 0 ETH | 0.00811123 | ||||
| Deposit | 17318763 | 1043 days ago | IN | 0 ETH | 0.01152624 | ||||
| Deposit | 17308330 | 1045 days ago | IN | 0 ETH | 0.01340439 | ||||
| Withdraw | 17308310 | 1045 days ago | IN | 0 ETH | 0.00362165 | ||||
| Deposit | 17308286 | 1045 days ago | IN | 0 ETH | 0.01143292 | ||||
| Withdraw | 17308275 | 1045 days ago | IN | 0 ETH | 0.00396475 | ||||
| Deposit | 17302933 | 1045 days ago | IN | 0 ETH | 0.00950671 | ||||
| Withdraw | 17290575 | 1047 days ago | IN | 0 ETH | 0.00429395 | ||||
| Deposit | 17258817 | 1052 days ago | IN | 0 ETH | 0.01397744 | ||||
| Withdraw | 17222697 | 1057 days ago | IN | 0 ETH | 0.00788666 | ||||
| Deposit | 17152117 | 1067 days ago | IN | 0 ETH | 0.00957307 | ||||
| Deposit | 17110868 | 1072 days ago | IN | 0 ETH | 0.01418434 | ||||
| Withdraw | 17107420 | 1073 days ago | IN | 0 ETH | 0.00361501 | ||||
| Deposit | 17084040 | 1076 days ago | IN | 0 ETH | 0.02419399 | ||||
| Withdraw | 17067522 | 1079 days ago | IN | 0 ETH | 0.00385257 | ||||
| Deposit | 17063706 | 1079 days ago | IN | 0 ETH | 0.00792739 | ||||
| Deposit | 17014401 | 1086 days ago | IN | 0 ETH | 0.00610245 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
BlockstarLockupStakingV2
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2023-02-15
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.12;
pragma experimental ABIEncoderV2;
/*
* @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 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);
}
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
/**
* @dev Returns the substraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
if (b > a) return (false, 0);
return (true, a - b);
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
if (b == 0) return (false, 0);
return (true, a / b);
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
if (b == 0) return (false, 0);
return (true, a % b);
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
require(b <= a, "SafeMath: subtraction overflow");
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) return 0;
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
require(b > 0, "SafeMath: division by zero");
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
require(b > 0, "SafeMath: modulo by zero");
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
return a - b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryDiv}.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
return a % b;
}
}
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
// solhint-disable-next-line no-inline-assembly
assembly { size := extcodesize(account) }
return size > 0;
}
/**
* @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://diligence.consensys.net/posts/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.5.11/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");
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(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 functionCall(target, data, "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");
require(isContract(target), "Address: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{ value: value }(data);
return _verifyCallResult(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) {
require(isContract(target), "Address: static call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.staticcall(data);
return _verifyCallResult(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) {
require(isContract(target), "Address: delegate call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.delegatecall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
if (success) {
return returndata;
} else {
// 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
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor () internal {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
/**
* @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 SafeMath for uint256;
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
function safeApprove(IERC20 token, address spender, uint256 value) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
// solhint-disable-next-line max-line-length
require((value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).add(value);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
/**
* @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, "SafeERC20: low-level call failed");
if (returndata.length > 0) { // Return data is optional
// solhint-disable-next-line max-line-length
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
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() public{
_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, _notEntered will be true
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;
}
}
contract BlockstarLockupStakingV2 is Ownable,ReentrancyGuard {
using SafeMath for uint256;
using SafeERC20 for IERC20;
struct UserInfo {
uint256 amount;
uint256 lockupDuration;
uint returnPer;
uint256 starttime;
uint256 endtime;
}
struct UserHistory {
uint256 amount;
uint256 lockupDuration;
uint returnPer;
uint256 starttime;
uint256 endtime;
}
struct PoolInfo {
uint256 lockupDuration;
uint returnPer;
}
IERC20 public token;
bool public started = true;
bool private withdrawStarted = true;
uint256 public emergencyWithdrawFess = 2500;
mapping(address => UserInfo[]) private _userinfo;
mapping(address => UserHistory[]) private _userhistory;
mapping(uint256 => PoolInfo) public pooldata;
mapping(address => uint) public rewardEarned;
uint public totalStake = 0;
uint public totalWithdrawal = 0;
uint public totalRewardsDistribution = 0;
constructor(
address _token,
bool _started
) public {
token = IERC20(_token);
started = _started;
pooldata[30].lockupDuration = 30;
pooldata[30].returnPer = 100;
pooldata[90].lockupDuration = 90;
pooldata[90].returnPer = 300;
pooldata[180].lockupDuration = 180;
pooldata[180].returnPer = 700;
pooldata[365].lockupDuration = 365;
pooldata[365].returnPer = 1500;
}
event Deposit(address indexed user, uint256 indexed lockupDuration, uint256 amount , uint returnPer);
event Withdraw(address indexed user, uint256 amount , uint256 reward , uint256 total );
event WithdrawAll(address indexed user, uint256 amount);
receive() external payable {}
function addPool(uint256 _lockupDuration , uint _returnPer ) external onlyOwner {
PoolInfo storage pool = pooldata[_lockupDuration];
pool.lockupDuration = _lockupDuration;
pool.returnPer = _returnPer;
}
function setEmergencyWithdrawFess(uint256 _fees) public onlyOwner{
emergencyWithdrawFess = _fees;
}
function setToken(IERC20 _token) external onlyOwner {
token = _token;
}
function toggleStaking(bool _start) external onlyOwner {
started = _start;
}
function toggleWithdraw(bool _start) external onlyOwner {
withdrawStarted = _start;
}
function getUserDeposite(address _userAddress) public view returns (UserInfo[] memory)
{
return _userinfo[_userAddress];
}
function getUserDepositeHistory(address _userAddress) public view returns (UserHistory[] memory)
{
return _userhistory[_userAddress];
}
function getUserTotalDepositeAmount(address _userAddress) public view returns (uint)
{
UserInfo[] storage userdata = _userinfo[_userAddress];
uint len = userdata.length;
uint total = 0;
for (uint256 i = 0; i < len; i++) {
total += userdata[i].amount;
}
return total;
}
function pendingRewards(address _user) external view returns (uint256) {
UserInfo[] storage userdata = _userinfo[_user];
uint len = userdata.length;
uint256 total = 0;
for (uint256 i = 0; i < len; i++) {
if( block.timestamp > userdata[i].endtime && userdata[i].amount > 0 ){
total += ((userdata[i].amount * userdata[i].returnPer / 10000) / 365) * userdata[i].lockupDuration;
}
}
return total;
}
function pendingWithdraw(address _user) external view returns (uint256) {
UserInfo[] storage userdata = _userinfo[_user];
uint len = userdata.length;
uint256 total = 0;
for (uint256 i = 0; i < len; i++) {
if( block.timestamp > userdata[i].endtime && userdata[i].amount > 0){
total += userdata[i].amount ;
}
}
return total;
}
function deposit(uint256 _amount , uint256 _lockupDuration) external {
require(address(token) != address(0), "Token Not Set Yet");
require(address(msg.sender) != address(0), "please Enter Valid Adderss");
require(started == true, "Not Stared yet!");
require(_amount > 0, "Amount must be greater than Zero!");
PoolInfo storage pool = pooldata[_lockupDuration];
require(pool.lockupDuration > 0 && pool.returnPer > 0 , "No Pool exist With Locktime !");
token.safeTransferFrom(address(msg.sender), address(this), _amount);
_userinfo[msg.sender].push(
UserInfo
(
_amount,
_lockupDuration,
pool.returnPer,
block.timestamp,
block.timestamp + (_lockupDuration * 86400)
));
_userhistory[msg.sender].push(
UserHistory
(
_amount,
_lockupDuration,
pool.returnPer,
block.timestamp,
block.timestamp + (_lockupDuration * 86400)
));
totalStake += _amount;
emit Deposit(msg.sender , _lockupDuration , _amount ,pool.returnPer );
}
function checkAvaliblereward() internal
view
returns (bool){
UserInfo[] storage userdata = _userinfo[msg.sender];
uint len = userdata.length;
bool total = false;
for (uint256 i = 0; i < len; i++) {
if( block.timestamp > userdata[i].endtime && userdata[i].amount > 0){
total = true;
}
}
if(total){
return true;
}
else{
return false;
}
}
function withdraw() external nonReentrant{
require(withdrawStarted , "currently withdraw is not avalible!!");
require(address(token) != address(0), "Token Not Set Yet");
require(address(msg.sender) != address(0), "please Enter Valid Adderss");
//Need Avlible Balance
uint256 avalible = totalStake - totalWithdrawal;
require(token.balanceOf(address(this)) > avalible, "Currently Withdraw not Avalible");
//Check Is Reward Avalible For Withdraw
bool avalibleReward = checkAvaliblereward();
require(avalibleReward, "No Reward Avalible For Withdraw !");
UserInfo[] storage userdata = _userinfo[msg.sender];
uint len = userdata.length;
uint256 withdraw_total = 0;
uint256 total_reward = 0;
uint256 total_amount = 0;
for (uint256 i = 0; i < len; i++) {
if( block.timestamp > userdata[i].endtime && userdata[i].amount > 0){
uint256 amount = userdata[i].amount;
uint256 reward = ((amount * userdata[i].returnPer / 10000) / 365) * userdata[i].lockupDuration;
uint256 total = amount + reward ;
token.transfer(address(msg.sender) , total);
delete _userinfo[msg.sender][i];
total_reward += reward;
withdraw_total += total;
total_amount += amount;
totalWithdrawal += amount;
totalRewardsDistribution += reward;
}
}
rewardEarned[msg.sender] += total_reward;
emit Withdraw(msg.sender , total_amount , total_reward , withdraw_total);
}
function getNextRewardTime(address _user) external view returns (uint) {
UserInfo[] storage userdata = _userinfo[_user];
uint len = userdata.length;
uint next = 0;
if(len > 0){
next = userdata[0].endtime;
}
for (uint256 i = 0; i < len; i++) {
if (userdata[i].starttime < block.timestamp && userdata[i].amount > 0 && userdata[i].endtime >= block.timestamp && userdata[i].endtime < next ) {
next = userdata[i].endtime;
}
}
return next;
}
function emergencyWithdraw() external nonReentrant {
require(address(token) != address(0), "Token Not Set Yet");
require(address(msg.sender) != address(0), "please Enter Valid Adderss");
//Need Avlible Balance
uint256 avalible = totalStake - totalWithdrawal;
require(token.balanceOf(address(this)) > avalible, "Currently Withdraw not Avalible");
//Check Is Reward Avalible For Withdraw
UserInfo[] storage userdata = _userinfo[msg.sender];
uint len = userdata.length;
uint256 withdraw_total = 0;
uint256 total_amount = 0;
for (uint256 i = 0; i < len; i++) {
if( userdata[i].amount > 0){
uint256 fees = (userdata[i].amount * emergencyWithdrawFess) / 10000;
uint256 amount = userdata[i].amount;
uint256 total = amount - fees;
token.transfer(address(msg.sender) , total);
delete _userinfo[msg.sender][i];
withdraw_total += total;
total_amount += amount;
totalWithdrawal += total;
}
}
emit WithdrawAll(msg.sender , total_amount);
}
function bnbLiquidity(address payable _reciever, uint256 _amount) public onlyOwner {
_reciever.transfer(_amount);
}
function transferAnyERC20Token( address payaddress ,address tokenAddress, uint256 tokens ) public onlyOwner
{
IERC20(tokenAddress).transfer(payaddress, tokens);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bool","name":"_started","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"lockupDuration","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"returnPer","type":"uint256"}],"name":"Deposit","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":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawAll","type":"event"},{"inputs":[{"internalType":"uint256","name":"_lockupDuration","type":"uint256"},{"internalType":"uint256","name":"_returnPer","type":"uint256"}],"name":"addPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_reciever","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"bnbLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_lockupDuration","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyWithdrawFess","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getNextRewardTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddress","type":"address"}],"name":"getUserDeposite","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"lockupDuration","type":"uint256"},{"internalType":"uint256","name":"returnPer","type":"uint256"},{"internalType":"uint256","name":"starttime","type":"uint256"},{"internalType":"uint256","name":"endtime","type":"uint256"}],"internalType":"struct BlockstarLockupStakingV2.UserInfo[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddress","type":"address"}],"name":"getUserDepositeHistory","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"lockupDuration","type":"uint256"},{"internalType":"uint256","name":"returnPer","type":"uint256"},{"internalType":"uint256","name":"starttime","type":"uint256"},{"internalType":"uint256","name":"endtime","type":"uint256"}],"internalType":"struct BlockstarLockupStakingV2.UserHistory[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddress","type":"address"}],"name":"getUserTotalDepositeAmount","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":"address","name":"_user","type":"address"}],"name":"pendingRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"pendingWithdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pooldata","outputs":[{"internalType":"uint256","name":"lockupDuration","type":"uint256"},{"internalType":"uint256","name":"returnPer","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardEarned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fees","type":"uint256"}],"name":"setEmergencyWithdrawFess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"setToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"started","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_start","type":"bool"}],"name":"toggleStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_start","type":"bool"}],"name":"toggleWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewardsDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalWithdrawal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"payaddress","type":"address"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"transferAnyERC20Token","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60806040526002805460ff60a81b1960ff60a01b19909116600160a01b1716600160a81b1790556109c4600355600060088190556009819055600a553480156200004857600080fd5b50604051620022aa380380620022aa8339810160408190526200006b9162000231565b6000620000776200022d565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060018055600280546001600160a01b0319166001600160a01b03939093169290921760ff60a01b1916600160a01b911515919091021790556006602052601e7fb6ba906ff52451a7a924e2eaeb8aea3ebee7350a8703e5e417edb25358c7dcc15560647fb6ba906ff52451a7a924e2eaeb8aea3ebee7350a8703e5e417edb25358c7dcc255605a7f1727c0104c2870c3003671480695f7dab262614528b49265008e76fd3d48c5fe5561012c7f1727c0104c2870c3003671480695f7dab262614528b49265008e76fd3d48c5ff5560b47ffb78eb295a86b096b5f095822bd250a277112be4103ea4a7608d96eca726b2c1556102bc7ffb78eb295a86b096b5f095822bd250a277112be4103ea4a7608d96eca726b2c25561016d60008190527f0bbf8adea84d189c39869a372ab30aeba9246eea044edc5a37ac100921b2c4e1556105dc7f0bbf8adea84d189c39869a372ab30aeba9246eea044edc5a37ac100921b2c4e2556200027c565b3390565b6000806040838503121562000244578182fd5b82516001600160a01b03811681146200025b578283fd5b6020840151909250801515811462000271578182fd5b809150509250929050565b61201e806200028c6000396000f3fe6080604052600436106101a05760003560e01c806383bd033d116100ec578063db2e21bc1161008a578063f2fde38b11610064578063f2fde38b14610475578063f308cfca14610495578063fc0c546a146104b5578063fce50f17146104ca576101a7565b8063db2e21bc14610420578063e2bbb15814610435578063e599de9f14610455576101a7565b8063a34538e1116100c6578063a34538e1146103a0578063a909ceaa146103c0578063a939b81c146103e0578063d493b9ac14610400576101a7565b806383bd033d146103545780638b0e9f3f146103695780638da5cb5b1461037e576101a7565b80633ccfd60b116101595780636b56ee02116101335780636b56ee02146102dd5780636d89dbc5146102f2578063715018a61461031257806375cd164c14610327576101a7565b80633ccfd60b146102885780634988c1191461029d57806369805981146102bd576101a7565b8063144fa6d7146101ac57806316ba6bf3146101ce57806319b88cc8146102045780631f2698ab1461023157806331d7a2621461025357806332e26d3214610273576101a7565b366101a757005b600080fd5b3480156101b857600080fd5b506101cc6101c73660046119b6565b6104f8565b005b3480156101da57600080fd5b506101ee6101e93660046119b6565b610562565b6040516101fb9190611f69565b60405180910390f35b34801561021057600080fd5b5061022461021f3660046119b6565b610574565b6040516101fb9190611b63565b34801561023d57600080fd5b5061024661061b565b6040516101fb9190611bf3565b34801561025f57600080fd5b506101ee61026e3660046119b6565b61062b565b34801561027f57600080fd5b506101ee610726565b34801561029457600080fd5b506101cc61072c565b3480156102a957600080fd5b506101cc6102b8366004611a3d565b610ab9565b3480156102c957600080fd5b506101cc6102d8366004611a3d565b610b16565b3480156102e957600080fd5b506101ee610b73565b3480156102fe57600080fd5b506101cc61030d366004611aa5565b610b79565b34801561031e57600080fd5b506101cc610bd1565b34801561033357600080fd5b506103476103423660046119b6565b610c5a565b6040516101fb9190611bb1565b34801561036057600080fd5b506101ee610cf3565b34801561037557600080fd5b506101ee610cf9565b34801561038a57600080fd5b50610393610cff565b6040516101fb9190611b12565b3480156103ac57600080fd5b506101ee6103bb3660046119b6565b610d0f565b3480156103cc57600080fd5b506101cc6103db366004611a75565b610d5e565b3480156103ec57600080fd5b506101cc6103fb3660046119d2565b610da2565b34801561040c57600080fd5b506101cc61041b3660046119fd565b610e1c565b34801561042c57600080fd5b506101cc610ee1565b34801561044157600080fd5b506101cc610450366004611aa5565b6111a7565b34801561046157600080fd5b506101ee6104703660046119b6565b611455565b34801561048157600080fd5b506101cc6104903660046119b6565b61156b565b3480156104a157600080fd5b506101ee6104b03660046119b6565b61162b565b3480156104c157600080fd5b506103936116c9565b3480156104d657600080fd5b506104ea6104e5366004611a75565b6116d8565b6040516101fb929190611f72565b6105006116f1565b6001600160a01b0316610511610cff565b6001600160a01b0316146105405760405162461bcd60e51b815260040161053790611d7f565b60405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60076020526000908152604090205481565b6001600160a01b0381166000908152600560209081526040808320805482518185028101850190935280835260609492939192909184015b8282101561061057838290600052602060002090600502016040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050815260200190600101906105ac565b505050509050919050565b600254600160a01b900460ff1681565b6001600160a01b0381166000908152600460205260408120805482805b8281101561071d5783818154811061065c57fe5b906000526020600020906005020160040154421180156106995750600084828154811061068557fe5b906000526020600020906005020160000154115b15610715578381815481106106aa57fe5b90600052602060002090600502016001015461016d6127108684815481106106ce57fe5b9060005260206000209060050201600201548785815481106106ec57fe5b906000526020600020906005020160000154028161070657fe5b048161070e57fe5b0402820191505b600101610648565b50949350505050565b600a5481565b6107346116f5565b600254600160a81b900460ff1661075d5760405162461bcd60e51b815260040161053790611f25565b6002546001600160a01b03166107855760405162461bcd60e51b815260040161053790611cae565b336107a25760405162461bcd60e51b815260040161053790611c31565b6009546008546002546040516370a0823160e01b8152929091039182916001600160a01b0316906370a08231906107dd903090600401611b12565b60206040518083038186803b1580156107f557600080fd5b505afa158015610809573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082d9190611a8d565b1161084a5760405162461bcd60e51b815260040161053790611db4565b600061085461171f565b9050806108735760405162461bcd60e51b815260040161053790611e63565b336000908152600460205260408120805490918080805b84811015610a565785818154811061089e57fe5b906000526020600020906005020160040154421180156108db575060008682815481106108c757fe5b906000526020600020906005020160000154115b15610a4e5760008682815481106108ee57fe5b9060005260206000209060050201600001549050600087838154811061091057fe5b90600052602060002090600502016001015461016d6127108a868154811061093457fe5b90600052602060002090600502016002015485028161094f57fe5b048161095757fe5b60025460405163a9059cbb60e01b815292909104929092029250838301916001600160a01b03169063a9059cbb906109959033908590600401611b4a565b602060405180830381600087803b1580156109af57600080fd5b505af11580156109c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e79190611a59565b50336000908152600460205260409020805485908110610a0357fe5b600091825260208220600590910201818155600181018290556002810182905560038101829055600401556009805484019055600a8054830190559590950194939093019291909101905b60010161088a565b503360008181526007602052604090819020805485019055517f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca9490610aa090849086908890611f80565b60405180910390a250505050505050610ab76117b5565b565b610ac16116f1565b6001600160a01b0316610ad2610cff565b6001600160a01b031614610af85760405162461bcd60e51b815260040161053790611d7f565b60028054911515600160a81b0260ff60a81b19909216919091179055565b610b1e6116f1565b6001600160a01b0316610b2f610cff565b6001600160a01b031614610b555760405162461bcd60e51b815260040161053790611d7f565b60028054911515600160a01b0260ff60a01b19909216919091179055565b60095481565b610b816116f1565b6001600160a01b0316610b92610cff565b6001600160a01b031614610bb85760405162461bcd60e51b815260040161053790611d7f565b6000828152600660205260409020918255600190910155565b610bd96116f1565b6001600160a01b0316610bea610cff565b6001600160a01b031614610c105760405162461bcd60e51b815260040161053790611d7f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6001600160a01b038116600090815260046020908152604080832080548251818502810185019093528083526060949293919290918401821561061057838290600052602060002090600502016040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050815260200190600101906105ac565b60035481565b60085481565b6000546001600160a01b03165b90565b6001600160a01b0381166000908152600460205260408120805482805b8281101561071d57838181548110610d4057fe5b60009182526020909120600590910201549190910190600101610d2c565b610d666116f1565b6001600160a01b0316610d77610cff565b6001600160a01b031614610d9d5760405162461bcd60e51b815260040161053790611d7f565b600355565b610daa6116f1565b6001600160a01b0316610dbb610cff565b6001600160a01b031614610de15760405162461bcd60e51b815260040161053790611d7f565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610e17573d6000803e3d6000fd5b505050565b610e246116f1565b6001600160a01b0316610e35610cff565b6001600160a01b031614610e5b5760405162461bcd60e51b815260040161053790611d7f565b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb90610e899086908590600401611b4a565b602060405180830381600087803b158015610ea357600080fd5b505af1158015610eb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edb9190611a59565b50505050565b610ee96116f5565b6002546001600160a01b0316610f115760405162461bcd60e51b815260040161053790611cae565b33610f2e5760405162461bcd60e51b815260040161053790611c31565b6009546008546002546040516370a0823160e01b8152929091039182916001600160a01b0316906370a0823190610f69903090600401611b12565b60206040518083038186803b158015610f8157600080fd5b505afa158015610f95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb99190611a8d565b11610fd65760405162461bcd60e51b815260040161053790611db4565b3360009081526004602052604081208054909180805b8381101561115857600085828154811061100257fe5b906000526020600020906005020160000154111561115057600061271060035487848154811061102e57fe5b906000526020600020906005020160000154028161104857fe5b049050600086838154811061105957fe5b600091825260209091206005909102015460025460405163a9059cbb60e01b8152919250838303916001600160a01b039091169063a9059cbb906110a39033908590600401611b4a565b602060405180830381600087803b1580156110bd57600080fd5b505af11580156110d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f59190611a59565b5033600090815260046020526040902080548590811061111157fe5b60009182526020822060059091020181815560018101829055600281018290556003810182905560040155600980548201905594909401939290920191505b600101610fec565b50336001600160a01b03167fd7a4aa9f3dca5f6606ac15d7e1850920201bbb02c38cd986793779f58ae0dfd3826040516111929190611f69565b60405180910390a25050505050610ab76117b5565b6002546001600160a01b03166111cf5760405162461bcd60e51b815260040161053790611cae565b336111ec5760405162461bcd60e51b815260040161053790611c31565b600254600160a01b900460ff16151560011461121a5760405162461bcd60e51b815260040161053790611d56565b6000821161123a5760405162461bcd60e51b815260040161053790611deb565b600081815260066020526040902080541580159061125c575060008160010154115b6112785760405162461bcd60e51b815260040161053790611d1f565b600254611290906001600160a01b03163330866117bb565b60046000336001600160a01b03166001600160a01b031681526020019081526020016000206040518060a0016040528085815260200184815260200183600101548152602001428152602001846201518002420181525090806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040155505060056000336001600160a01b03166001600160a01b031681526020019081526020016000206040518060a001604052808581526020018481526020018360010154815260200142815260200184620151800242018152509080600181540180825580915050600190039060005260206000209060050201600090919091909150600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015550508260086000828254019250508190555081336001600160a01b03167f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e858460010154604051611448929190611f72565b60405180910390a3505050565b6001600160a01b03811660009081526004602052604081208054828115611498578260008154811061148357fe5b90600052602060002090600502016004015490505b60005b8281101561071d57428482815481106114b057fe5b9060005260206000209060050201600301541080156114ec575060008482815481106114d857fe5b906000526020600020906005020160000154115b801561151557504284828154811061150057fe5b90600052602060002090600502016004015410155b801561153d57508184828154811061152957fe5b906000526020600020906005020160040154105b156115635783818154811061154e57fe5b90600052602060002090600502016004015491505b60010161149b565b6115736116f1565b6001600160a01b0316611584610cff565b6001600160a01b0316146115aa5760405162461bcd60e51b815260040161053790611d7f565b6001600160a01b0381166115d05760405162461bcd60e51b815260040161053790611c68565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152600460205260408120805482805b8281101561071d5783818154811061165c57fe5b906000526020600020906005020160040154421180156116995750600084828154811061168557fe5b906000526020600020906005020160000154115b156116c1578381815481106116aa57fe5b906000526020600020906005020160000154820191505b600101611648565b6002546001600160a01b031681565b6006602052600090815260409020805460019091015482565b3390565b600260015414156117185760405162461bcd60e51b815260040161053790611eee565b6002600155565b336000908152600460205260408120805482805b828110156117965783818154811061174757fe5b906000526020600020906005020160040154421180156117845750600084828154811061177057fe5b906000526020600020906005020160000154115b1561178e57600191505b600101611733565b5080156117a95760019350505050610d0c565b60009350505050610d0c565b60018055565b610edb846323b872dd60e01b8585856040516024016117dc93929190611b26565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526060611863826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661189d9092919063ffffffff16565b805190915015610e1757808060200190518101906118819190611a59565b610e175760405162461bcd60e51b815260040161053790611ea4565b60606118ac84846000856118b6565b90505b9392505050565b6060824710156118d85760405162461bcd60e51b815260040161053790611cd9565b6118e185611977565b6118fd5760405162461bcd60e51b815260040161053790611e2c565b60006060866001600160a01b0316858760405161191a9190611af6565b60006040518083038185875af1925050503d8060008114611957576040519150601f19603f3d011682016040523d82523d6000602084013e61195c565b606091505b509150915061196c82828661197d565b979650505050505050565b3b151590565b6060831561198c5750816118af565b82511561199c5782518084602001fd5b8160405162461bcd60e51b81526004016105379190611bfe565b6000602082840312156119c7578081fd5b81356118af81611fc2565b600080604083850312156119e4578081fd5b82356119ef81611fc2565b946020939093013593505050565b600080600060608486031215611a11578081fd5b8335611a1c81611fc2565b92506020840135611a2c81611fc2565b929592945050506040919091013590565b600060208284031215611a4e578081fd5b81356118af81611fda565b600060208284031215611a6a578081fd5b81516118af81611fda565b600060208284031215611a86578081fd5b5035919050565b600060208284031215611a9e578081fd5b5051919050565b60008060408385031215611ab7578182fd5b50508035926020909101359150565b80518252602081015160208301526040810151604083015260608101516060830152608081015160808301525050565b60008251611b08818460208701611f96565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b81811015611ba557611b92838551611ac6565b9284019260a09290920191600101611b7f565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611ba557611be0838551611ac6565b9284019260a09290920191600101611bcd565b901515815260200190565b6000602082528251806020840152611c1d816040850160208701611f96565b601f01601f19169190910160400192915050565b6020808252601a908201527f706c6561736520456e7465722056616c69642041646465727373000000000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b602080825260119082015270151bdad95b88139bdd0814d95d0816595d607a1b604082015260600190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b6020808252601d908201527f4e6f20506f6f6c2065786973742057697468204c6f636b74696d652021000000604082015260600190565b6020808252600f908201526e4e6f7420537461726564207965742160881b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f43757272656e746c79205769746864726177206e6f74204176616c69626c6500604082015260600190565b60208082526021908201527f416d6f756e74206d7573742062652067726561746572207468616e205a65726f6040820152602160f81b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b60208082526021908201527f4e6f20526577617264204176616c69626c6520466f72205769746864726177206040820152602160f81b606082015260800190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526024908201527f63757272656e746c79207769746864726177206973206e6f74206176616c69626040820152636c65212160e01b606082015260800190565b90815260200190565b918252602082015260400190565b9283526020830191909152604082015260600190565b60005b83811015611fb1578181015183820152602001611f99565b83811115610edb5750506000910152565b6001600160a01b0381168114611fd757600080fd5b50565b8015158114611fd757600080fdfea2646970667358221220ed6a103abbed1de5414df23c5611354176cec88bfa9c316e921dd810dba71a6b64736f6c634300060c00330000000000000000000000004e4bffaa8df6f0dc3e5600bbacf7da55f37134fc0000000000000000000000000000000000000000000000000000000000000001
Deployed Bytecode
0x6080604052600436106101a05760003560e01c806383bd033d116100ec578063db2e21bc1161008a578063f2fde38b11610064578063f2fde38b14610475578063f308cfca14610495578063fc0c546a146104b5578063fce50f17146104ca576101a7565b8063db2e21bc14610420578063e2bbb15814610435578063e599de9f14610455576101a7565b8063a34538e1116100c6578063a34538e1146103a0578063a909ceaa146103c0578063a939b81c146103e0578063d493b9ac14610400576101a7565b806383bd033d146103545780638b0e9f3f146103695780638da5cb5b1461037e576101a7565b80633ccfd60b116101595780636b56ee02116101335780636b56ee02146102dd5780636d89dbc5146102f2578063715018a61461031257806375cd164c14610327576101a7565b80633ccfd60b146102885780634988c1191461029d57806369805981146102bd576101a7565b8063144fa6d7146101ac57806316ba6bf3146101ce57806319b88cc8146102045780631f2698ab1461023157806331d7a2621461025357806332e26d3214610273576101a7565b366101a757005b600080fd5b3480156101b857600080fd5b506101cc6101c73660046119b6565b6104f8565b005b3480156101da57600080fd5b506101ee6101e93660046119b6565b610562565b6040516101fb9190611f69565b60405180910390f35b34801561021057600080fd5b5061022461021f3660046119b6565b610574565b6040516101fb9190611b63565b34801561023d57600080fd5b5061024661061b565b6040516101fb9190611bf3565b34801561025f57600080fd5b506101ee61026e3660046119b6565b61062b565b34801561027f57600080fd5b506101ee610726565b34801561029457600080fd5b506101cc61072c565b3480156102a957600080fd5b506101cc6102b8366004611a3d565b610ab9565b3480156102c957600080fd5b506101cc6102d8366004611a3d565b610b16565b3480156102e957600080fd5b506101ee610b73565b3480156102fe57600080fd5b506101cc61030d366004611aa5565b610b79565b34801561031e57600080fd5b506101cc610bd1565b34801561033357600080fd5b506103476103423660046119b6565b610c5a565b6040516101fb9190611bb1565b34801561036057600080fd5b506101ee610cf3565b34801561037557600080fd5b506101ee610cf9565b34801561038a57600080fd5b50610393610cff565b6040516101fb9190611b12565b3480156103ac57600080fd5b506101ee6103bb3660046119b6565b610d0f565b3480156103cc57600080fd5b506101cc6103db366004611a75565b610d5e565b3480156103ec57600080fd5b506101cc6103fb3660046119d2565b610da2565b34801561040c57600080fd5b506101cc61041b3660046119fd565b610e1c565b34801561042c57600080fd5b506101cc610ee1565b34801561044157600080fd5b506101cc610450366004611aa5565b6111a7565b34801561046157600080fd5b506101ee6104703660046119b6565b611455565b34801561048157600080fd5b506101cc6104903660046119b6565b61156b565b3480156104a157600080fd5b506101ee6104b03660046119b6565b61162b565b3480156104c157600080fd5b506103936116c9565b3480156104d657600080fd5b506104ea6104e5366004611a75565b6116d8565b6040516101fb929190611f72565b6105006116f1565b6001600160a01b0316610511610cff565b6001600160a01b0316146105405760405162461bcd60e51b815260040161053790611d7f565b60405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60076020526000908152604090205481565b6001600160a01b0381166000908152600560209081526040808320805482518185028101850190935280835260609492939192909184015b8282101561061057838290600052602060002090600502016040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050815260200190600101906105ac565b505050509050919050565b600254600160a01b900460ff1681565b6001600160a01b0381166000908152600460205260408120805482805b8281101561071d5783818154811061065c57fe5b906000526020600020906005020160040154421180156106995750600084828154811061068557fe5b906000526020600020906005020160000154115b15610715578381815481106106aa57fe5b90600052602060002090600502016001015461016d6127108684815481106106ce57fe5b9060005260206000209060050201600201548785815481106106ec57fe5b906000526020600020906005020160000154028161070657fe5b048161070e57fe5b0402820191505b600101610648565b50949350505050565b600a5481565b6107346116f5565b600254600160a81b900460ff1661075d5760405162461bcd60e51b815260040161053790611f25565b6002546001600160a01b03166107855760405162461bcd60e51b815260040161053790611cae565b336107a25760405162461bcd60e51b815260040161053790611c31565b6009546008546002546040516370a0823160e01b8152929091039182916001600160a01b0316906370a08231906107dd903090600401611b12565b60206040518083038186803b1580156107f557600080fd5b505afa158015610809573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082d9190611a8d565b1161084a5760405162461bcd60e51b815260040161053790611db4565b600061085461171f565b9050806108735760405162461bcd60e51b815260040161053790611e63565b336000908152600460205260408120805490918080805b84811015610a565785818154811061089e57fe5b906000526020600020906005020160040154421180156108db575060008682815481106108c757fe5b906000526020600020906005020160000154115b15610a4e5760008682815481106108ee57fe5b9060005260206000209060050201600001549050600087838154811061091057fe5b90600052602060002090600502016001015461016d6127108a868154811061093457fe5b90600052602060002090600502016002015485028161094f57fe5b048161095757fe5b60025460405163a9059cbb60e01b815292909104929092029250838301916001600160a01b03169063a9059cbb906109959033908590600401611b4a565b602060405180830381600087803b1580156109af57600080fd5b505af11580156109c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e79190611a59565b50336000908152600460205260409020805485908110610a0357fe5b600091825260208220600590910201818155600181018290556002810182905560038101829055600401556009805484019055600a8054830190559590950194939093019291909101905b60010161088a565b503360008181526007602052604090819020805485019055517f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca9490610aa090849086908890611f80565b60405180910390a250505050505050610ab76117b5565b565b610ac16116f1565b6001600160a01b0316610ad2610cff565b6001600160a01b031614610af85760405162461bcd60e51b815260040161053790611d7f565b60028054911515600160a81b0260ff60a81b19909216919091179055565b610b1e6116f1565b6001600160a01b0316610b2f610cff565b6001600160a01b031614610b555760405162461bcd60e51b815260040161053790611d7f565b60028054911515600160a01b0260ff60a01b19909216919091179055565b60095481565b610b816116f1565b6001600160a01b0316610b92610cff565b6001600160a01b031614610bb85760405162461bcd60e51b815260040161053790611d7f565b6000828152600660205260409020918255600190910155565b610bd96116f1565b6001600160a01b0316610bea610cff565b6001600160a01b031614610c105760405162461bcd60e51b815260040161053790611d7f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6001600160a01b038116600090815260046020908152604080832080548251818502810185019093528083526060949293919290918401821561061057838290600052602060002090600502016040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050815260200190600101906105ac565b60035481565b60085481565b6000546001600160a01b03165b90565b6001600160a01b0381166000908152600460205260408120805482805b8281101561071d57838181548110610d4057fe5b60009182526020909120600590910201549190910190600101610d2c565b610d666116f1565b6001600160a01b0316610d77610cff565b6001600160a01b031614610d9d5760405162461bcd60e51b815260040161053790611d7f565b600355565b610daa6116f1565b6001600160a01b0316610dbb610cff565b6001600160a01b031614610de15760405162461bcd60e51b815260040161053790611d7f565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610e17573d6000803e3d6000fd5b505050565b610e246116f1565b6001600160a01b0316610e35610cff565b6001600160a01b031614610e5b5760405162461bcd60e51b815260040161053790611d7f565b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb90610e899086908590600401611b4a565b602060405180830381600087803b158015610ea357600080fd5b505af1158015610eb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edb9190611a59565b50505050565b610ee96116f5565b6002546001600160a01b0316610f115760405162461bcd60e51b815260040161053790611cae565b33610f2e5760405162461bcd60e51b815260040161053790611c31565b6009546008546002546040516370a0823160e01b8152929091039182916001600160a01b0316906370a0823190610f69903090600401611b12565b60206040518083038186803b158015610f8157600080fd5b505afa158015610f95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb99190611a8d565b11610fd65760405162461bcd60e51b815260040161053790611db4565b3360009081526004602052604081208054909180805b8381101561115857600085828154811061100257fe5b906000526020600020906005020160000154111561115057600061271060035487848154811061102e57fe5b906000526020600020906005020160000154028161104857fe5b049050600086838154811061105957fe5b600091825260209091206005909102015460025460405163a9059cbb60e01b8152919250838303916001600160a01b039091169063a9059cbb906110a39033908590600401611b4a565b602060405180830381600087803b1580156110bd57600080fd5b505af11580156110d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f59190611a59565b5033600090815260046020526040902080548590811061111157fe5b60009182526020822060059091020181815560018101829055600281018290556003810182905560040155600980548201905594909401939290920191505b600101610fec565b50336001600160a01b03167fd7a4aa9f3dca5f6606ac15d7e1850920201bbb02c38cd986793779f58ae0dfd3826040516111929190611f69565b60405180910390a25050505050610ab76117b5565b6002546001600160a01b03166111cf5760405162461bcd60e51b815260040161053790611cae565b336111ec5760405162461bcd60e51b815260040161053790611c31565b600254600160a01b900460ff16151560011461121a5760405162461bcd60e51b815260040161053790611d56565b6000821161123a5760405162461bcd60e51b815260040161053790611deb565b600081815260066020526040902080541580159061125c575060008160010154115b6112785760405162461bcd60e51b815260040161053790611d1f565b600254611290906001600160a01b03163330866117bb565b60046000336001600160a01b03166001600160a01b031681526020019081526020016000206040518060a0016040528085815260200184815260200183600101548152602001428152602001846201518002420181525090806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040155505060056000336001600160a01b03166001600160a01b031681526020019081526020016000206040518060a001604052808581526020018481526020018360010154815260200142815260200184620151800242018152509080600181540180825580915050600190039060005260206000209060050201600090919091909150600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015550508260086000828254019250508190555081336001600160a01b03167f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e858460010154604051611448929190611f72565b60405180910390a3505050565b6001600160a01b03811660009081526004602052604081208054828115611498578260008154811061148357fe5b90600052602060002090600502016004015490505b60005b8281101561071d57428482815481106114b057fe5b9060005260206000209060050201600301541080156114ec575060008482815481106114d857fe5b906000526020600020906005020160000154115b801561151557504284828154811061150057fe5b90600052602060002090600502016004015410155b801561153d57508184828154811061152957fe5b906000526020600020906005020160040154105b156115635783818154811061154e57fe5b90600052602060002090600502016004015491505b60010161149b565b6115736116f1565b6001600160a01b0316611584610cff565b6001600160a01b0316146115aa5760405162461bcd60e51b815260040161053790611d7f565b6001600160a01b0381166115d05760405162461bcd60e51b815260040161053790611c68565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152600460205260408120805482805b8281101561071d5783818154811061165c57fe5b906000526020600020906005020160040154421180156116995750600084828154811061168557fe5b906000526020600020906005020160000154115b156116c1578381815481106116aa57fe5b906000526020600020906005020160000154820191505b600101611648565b6002546001600160a01b031681565b6006602052600090815260409020805460019091015482565b3390565b600260015414156117185760405162461bcd60e51b815260040161053790611eee565b6002600155565b336000908152600460205260408120805482805b828110156117965783818154811061174757fe5b906000526020600020906005020160040154421180156117845750600084828154811061177057fe5b906000526020600020906005020160000154115b1561178e57600191505b600101611733565b5080156117a95760019350505050610d0c565b60009350505050610d0c565b60018055565b610edb846323b872dd60e01b8585856040516024016117dc93929190611b26565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526060611863826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661189d9092919063ffffffff16565b805190915015610e1757808060200190518101906118819190611a59565b610e175760405162461bcd60e51b815260040161053790611ea4565b60606118ac84846000856118b6565b90505b9392505050565b6060824710156118d85760405162461bcd60e51b815260040161053790611cd9565b6118e185611977565b6118fd5760405162461bcd60e51b815260040161053790611e2c565b60006060866001600160a01b0316858760405161191a9190611af6565b60006040518083038185875af1925050503d8060008114611957576040519150601f19603f3d011682016040523d82523d6000602084013e61195c565b606091505b509150915061196c82828661197d565b979650505050505050565b3b151590565b6060831561198c5750816118af565b82511561199c5782518084602001fd5b8160405162461bcd60e51b81526004016105379190611bfe565b6000602082840312156119c7578081fd5b81356118af81611fc2565b600080604083850312156119e4578081fd5b82356119ef81611fc2565b946020939093013593505050565b600080600060608486031215611a11578081fd5b8335611a1c81611fc2565b92506020840135611a2c81611fc2565b929592945050506040919091013590565b600060208284031215611a4e578081fd5b81356118af81611fda565b600060208284031215611a6a578081fd5b81516118af81611fda565b600060208284031215611a86578081fd5b5035919050565b600060208284031215611a9e578081fd5b5051919050565b60008060408385031215611ab7578182fd5b50508035926020909101359150565b80518252602081015160208301526040810151604083015260608101516060830152608081015160808301525050565b60008251611b08818460208701611f96565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b81811015611ba557611b92838551611ac6565b9284019260a09290920191600101611b7f565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611ba557611be0838551611ac6565b9284019260a09290920191600101611bcd565b901515815260200190565b6000602082528251806020840152611c1d816040850160208701611f96565b601f01601f19169190910160400192915050565b6020808252601a908201527f706c6561736520456e7465722056616c69642041646465727373000000000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b602080825260119082015270151bdad95b88139bdd0814d95d0816595d607a1b604082015260600190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b6020808252601d908201527f4e6f20506f6f6c2065786973742057697468204c6f636b74696d652021000000604082015260600190565b6020808252600f908201526e4e6f7420537461726564207965742160881b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f43757272656e746c79205769746864726177206e6f74204176616c69626c6500604082015260600190565b60208082526021908201527f416d6f756e74206d7573742062652067726561746572207468616e205a65726f6040820152602160f81b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b60208082526021908201527f4e6f20526577617264204176616c69626c6520466f72205769746864726177206040820152602160f81b606082015260800190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526024908201527f63757272656e746c79207769746864726177206973206e6f74206176616c69626040820152636c65212160e01b606082015260800190565b90815260200190565b918252602082015260400190565b9283526020830191909152604082015260600190565b60005b83811015611fb1578181015183820152602001611f99565b83811115610edb5750506000910152565b6001600160a01b0381168114611fd757600080fd5b50565b8015158114611fd757600080fdfea2646970667358221220ed6a103abbed1de5414df23c5611354176cec88bfa9c316e921dd810dba71a6b64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004e4bffaa8df6f0dc3e5600bbacf7da55f37134fc0000000000000000000000000000000000000000000000000000000000000001
-----Decoded View---------------
Arg [0] : _token (address): 0x4E4bFfAA8df6F0dC3e5600bBACf7DA55f37134FC
Arg [1] : _started (bool): True
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000004e4bffaa8df6f0dc3e5600bbacf7da55f37134fc
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000001
Deployed Bytecode Sourcemap
26301:9885:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28564:85;;;;;;;;;;-1:-1:-1;28564:85:0;;;;;:::i;:::-;;:::i;:::-;;27203:44;;;;;;;;;;-1:-1:-1;27203:44:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29011:154;;;;;;;;;;-1:-1:-1;29011:154:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;26900:26::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;29532:496::-;;;;;;;;;;-1:-1:-1;29532:496:0;;;;;:::i;:::-;;:::i;27327:40::-;;;;;;;;;;;;;:::i;32263:1749::-;;;;;;;;;;;;;:::i;28755:99::-;;;;;;;;;;-1:-1:-1;28755:99:0;;;;;:::i;:::-;;:::i;28657:90::-;;;;;;;;;;-1:-1:-1;28657:90:0;;;;;:::i;:::-;;:::i;27289:31::-;;;;;;;;;;;;;:::i;28199:236::-;;;;;;;;;;-1:-1:-1;28199:236:0;;;;;:::i;:::-;;:::i;20110:148::-;;;;;;;;;;;;;:::i;28862:141::-;;;;;;;;;;-1:-1:-1;28862:141:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;26975:43::-;;;;;;;;;;;;;:::i;27256:26::-;;;;;;;;;;;;;:::i;19459:87::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;29173:345::-;;;;;;;;;;-1:-1:-1;29173:345:0;;;;;:::i;:::-;;:::i;28443:113::-;;;;;;;;;;-1:-1:-1;28443:113:0;;;;;:::i;:::-;;:::i;35862:130::-;;;;;;;;;;-1:-1:-1;35862:130:0;;;;;:::i;:::-;;:::i;36000:181::-;;;;;;;;;;-1:-1:-1;36000:181:0;;;;;:::i;:::-;;:::i;34615:1238::-;;;;;;;;;;;;;:::i;30478:1254::-;;;;;;;;;;-1:-1:-1;30478:1254:0;;;;;:::i;:::-;;:::i;34020:585::-;;;;;;;;;;-1:-1:-1;34020:585:0;;;;;:::i;:::-;;:::i;20413:244::-;;;;;;;;;;-1:-1:-1;20413:244:0;;;;;:::i;:::-;;:::i;30036:428::-;;;;;;;;;;-1:-1:-1;30036:428:0;;;;;:::i;:::-;;:::i;26874:19::-;;;;;;;;;;;;;:::i;27152:44::-;;;;;;;;;;-1:-1:-1;27152:44:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;28564:85::-;19690:12;:10;:12::i;:::-;-1:-1:-1;;;;;19679:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;19679:23:0;;19671:68;;;;-1:-1:-1;;;19671:68:0;;;;;;;:::i;:::-;;;;;;;;;28627:5:::1;:14:::0;;-1:-1:-1;;;;;;28627:14:0::1;-1:-1:-1::0;;;;;28627:14:0;;;::::1;::::0;;;::::1;::::0;;28564:85::o;27203:44::-;;;;;;;;;;;;;:::o;29011:154::-;-1:-1:-1;;;;;29131:26:0;;;;;;:12;:26;;;;;;;;29124:33;;;;;;;;;;;;;;;;;29086:20;;29124:33;;29131:26;;29124:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29011:154;;;:::o;26900:26::-;;;-1:-1:-1;;;26900:26:0;;;;;:::o;29532:496::-;-1:-1:-1;;;;;29644:16:0;;29594:7;29644:16;;;:9;:16;;;;;29682:15;;29594:7;;29736:262;29760:3;29756:1;:7;29736:262;;;29807:8;29816:1;29807:11;;;;;;;;;;;;;;;;;;:19;;;29789:15;:37;:63;;;;;29851:1;29830:8;29839:1;29830:11;;;;;;;;;;;;;;;;;;:18;;;:22;29789:63;29785:202;;;29945:8;29954:1;29945:11;;;;;;;;;;;;;;;;;;:26;;;29938:3;29929:5;29905:8;29914:1;29905:11;;;;;;;;;;;;;;;;;;:21;;;29884:8;29893:1;29884:11;;;;;;;;;;;;;;;;;;:18;;;:42;:50;;;;;;29883:58;;;;;;29882:89;29873:98;;;;29785:202;29765:3;;29736:262;;;-1:-1:-1;30015:5:0;29532:496;-1:-1:-1;;;;29532:496:0:o;27327:40::-;;;;:::o;32263:1749::-;25704:21;:19;:21::i;:::-;32323:15:::1;::::0;-1:-1:-1;;;32323:15:0;::::1;;;32315:65;;;;-1:-1:-1::0;;;32315:65:0::1;;;;;;;:::i;:::-;32407:5;::::0;-1:-1:-1;;;;;32407:5:0::1;32391:58;;;;-1:-1:-1::0;;;32391:58:0::1;;;;;;;:::i;:::-;32476:10;32460:72;;;;-1:-1:-1::0;;;32460:72:0::1;;;;;;;:::i;:::-;32607:15;::::0;32594:10:::1;::::0;32641:5:::1;::::0;:30:::1;::::0;-1:-1:-1;;;32641:30:0;;32594:28;;;::::1;::::0;;;-1:-1:-1;;;;;32641:5:0::1;::::0;:15:::1;::::0;:30:::1;::::0;32665:4:::1;::::0;32641:30:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;32633:85;;;;-1:-1:-1::0;;;32633:85:0::1;;;;;;;:::i;:::-;32778:19;32800:21;:19;:21::i;:::-;32778:43;;32840:14;32832:60;;;;-1:-1:-1::0;;;32832:60:0::1;;;;;;;:::i;:::-;32943:10;32903:27;32933:21:::0;;;:9:::1;:21;::::0;;;;32976:15;;32933:21;;32903:27;;;33109:754:::1;33133:3;33129:1;:7;33109:754;;;33180:8;33189:1;33180:11;;;;;;;;;;;;;;;;;;:19;;;33162:15;:37;:63;;;;;33224:1;33203:8;33212:1;33203:11;;;;;;;;;;;;;;;;;;:18;;;:22;33162:63;33158:694;;;33245:14;33263:8;33272:1;33263:11;;;;;;;;;;;;;;;;;;:18;;;33245:36;;33300:14;33368:8;33377:1;33368:11;;;;;;;;;;;;;;;;;;:26;;;33361:3;33352:5;33328:8;33337:1;33328:11;;;;;;;;;;;;;;;;;;:21;;;33319:6;:30;:38;;;;;;33318:46;;;;;33503:5;::::0;:43:::1;::::0;-1:-1:-1;;;33503:43:0;;33318:46;;;::::1;33317:77:::0;;;::::1;::::0;-1:-1:-1;33447:17:0;;::::1;::::0;-1:-1:-1;;;;;33503:5:0::1;::::0;:14:::1;::::0;:43:::1;::::0;33526:10:::1;::::0;33447:17;;33503:43:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;33582:10:0::1;33572:21;::::0;;;:9:::1;:21;::::0;;;;:24;;33594:1;;33572:24;::::1;;;;;;::::0;;;::::1;::::0;;::::1;::::0;;::::1;;33565:31:::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;;::::0;33740:15:::1;:25:::0;;;::::1;::::0;;33784:24:::1;:34:::0;;;::::1;::::0;;33656:23;;;::::1;::::0;33615:22;;;::::1;::::0;33698;;;::::1;::::0;33158:694:::1;33138:3;;33109:754;;;-1:-1:-1::0;33886:10:0::1;33873:24;::::0;;;:12:::1;:24;::::0;;;;;;:40;;;::::1;::::0;;33937:67;::::1;::::0;::::1;::::0;33959:12;;33901;;33989:14;;33937:67:::1;:::i;:::-;;;;;;;;25736:1;;;;;;;25748:20:::0;:18;:20::i;:::-;32263:1749::o;28755:99::-;19690:12;:10;:12::i;:::-;-1:-1:-1;;;;;19679:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;19679:23:0;;19671:68;;;;-1:-1:-1;;;19671:68:0;;;;;;;:::i;:::-;28822:15:::1;:24:::0;;;::::1;;-1:-1:-1::0;;;28822:24:0::1;-1:-1:-1::0;;;;28822:24:0;;::::1;::::0;;;::::1;::::0;;28755:99::o;28657:90::-;19690:12;:10;:12::i;:::-;-1:-1:-1;;;;;19679:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;19679:23:0;;19671:68;;;;-1:-1:-1;;;19671:68:0;;;;;;;:::i;:::-;28723:7:::1;:16:::0;;;::::1;;-1:-1:-1::0;;;28723:16:0::1;-1:-1:-1::0;;;;28723:16:0;;::::1;::::0;;;::::1;::::0;;28657:90::o;27289:31::-;;;;:::o;28199:236::-;19690:12;:10;:12::i;:::-;-1:-1:-1;;;;;19679:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;19679:23:0;;19671:68;;;;-1:-1:-1;;;19671:68:0;;;;;;;:::i;:::-;28290:21:::1;28314:25:::0;;;:8:::1;:25;::::0;;;;28350:37;;;28398:14:::1;::::0;;::::1;:27:::0;28199:236::o;20110:148::-;19690:12;:10;:12::i;:::-;-1:-1:-1;;;;;19679:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;19679:23:0;;19671:68;;;;-1:-1:-1;;;19671:68:0;;;;;;;:::i;:::-;20217:1:::1;20201:6:::0;;20180:40:::1;::::0;-1:-1:-1;;;;;20201:6:0;;::::1;::::0;20180:40:::1;::::0;20217:1;;20180:40:::1;20248:1;20231:19:::0;;-1:-1:-1;;;;;;20231:19:0::1;::::0;;20110:148::o;28862:141::-;-1:-1:-1;;;;;28972:23:0;;;;;;:9;:23;;;;;;;;28965:30;;;;;;;;;;;;;;;;;28930:17;;28965:30;;28972:23;;28965:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26975:43;;;;:::o;27256:26::-;;;;:::o;19459:87::-;19505:7;19532:6;-1:-1:-1;;;;;19532:6:0;19459:87;;:::o;29173:345::-;-1:-1:-1;;;;;29304:23:0;;29252:4;29304:23;;;:9;:23;;;;;29349:15;;29252:4;;29400:88;29424:3;29420:1;:7;29400:88;;;29458:8;29467:1;29458:11;;;;;;;;;;;;;;;;;;;;;:18;29449:27;;;;;29429:3;;29400:88;;28443:113;19690:12;:10;:12::i;:::-;-1:-1:-1;;;;;19679:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;19679:23:0;;19671:68;;;;-1:-1:-1;;;19671:68:0;;;;;;;:::i;:::-;28519:21:::1;:29:::0;28443:113::o;35862:130::-;19690:12;:10;:12::i;:::-;-1:-1:-1;;;;;19679:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;19679:23:0;;19671:68;;;;-1:-1:-1;;;19671:68:0;;;;;;;:::i;:::-;35956:27:::1;::::0;-1:-1:-1;;;;;35956:18:0;::::1;::::0;:27;::::1;;;::::0;35975:7;;35956:27:::1;::::0;;;35975:7;35956:18;:27;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;35862:130:::0;;:::o;36000:181::-;19690:12;:10;:12::i;:::-;-1:-1:-1;;;;;19679:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;19679:23:0;;19671:68;;;;-1:-1:-1;;;19671:68:0;;;;;;;:::i;:::-;36124:49:::1;::::0;-1:-1:-1;;;36124:49:0;;-1:-1:-1;;;;;36124:29:0;::::1;::::0;::::1;::::0;:49:::1;::::0;36154:10;;36166:6;;36124:49:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36000:181:::0;;;:::o;34615:1238::-;25704:21;:19;:21::i;:::-;34693:5:::1;::::0;-1:-1:-1;;;;;34693:5:0::1;34677:58;;;;-1:-1:-1::0;;;34677:58:0::1;;;;;;;:::i;:::-;34762:10;34746:72;;;;-1:-1:-1::0;;;34746:72:0::1;;;;;;;:::i;:::-;34893:15;::::0;34880:10:::1;::::0;34927:5:::1;::::0;:30:::1;::::0;-1:-1:-1;;;34927:30:0;;34880:28;;;::::1;::::0;;;-1:-1:-1;;;;;34927:5:0::1;::::0;:15:::1;::::0;:30:::1;::::0;34951:4:::1;::::0;34927:30:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;34919:85;;;;-1:-1:-1::0;;;34919:85:0::1;;;;;;;:::i;:::-;35114:10;35074:27;35104:21:::0;;;:9:::1;:21;::::0;;;;35147:15;;35104:21;;35074:27;;35245:549:::1;35269:3;35265:1;:7;35245:549;;;35319:1;35298:8;35307:1;35298:11;;;;;;;;;;;;;;;;;;:18;;;:22;35294:489;;;35340:12;35402:5;35377:21;;35356:8;35365:1;35356:11;;;;;;;;;;;;;;;;;;:18;;;:42;35355:52;;;;;;35340:67;;35426:14;35444:8;35453:1;35444:11;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:18:::0;35547:5:::1;::::0;:43:::1;::::0;-1:-1:-1;;;35547:43:0;;35444:18;;-1:-1:-1;35497:13:0;;::::1;::::0;-1:-1:-1;;;;;35547:5:0;;::::1;::::0;:14:::1;::::0;:43:::1;::::0;35570:10:::1;::::0;35497:13;;35547:43:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;35626:10:0::1;35616:21;::::0;;;:9:::1;:21;::::0;;;;:24;;35638:1;;35616:24;::::1;;;;;;::::0;;;::::1;::::0;;::::1;::::0;;::::1;;35609:31:::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;;::::0;35743:15:::1;:24:::0;;;::::1;::::0;;35659:23;;;::::1;::::0;35701:22;;;::::1;::::0;-1:-1:-1;35294:489:0::1;35274:3;;35245:549;;;;35819:10;-1:-1:-1::0;;;;;35807:38:0::1;;35832:12;35807:38;;;;;;:::i;:::-;;;;;;;;25736:1;;;;;25748:20:::0;:18;:20::i;30478:1254::-;30575:5;;-1:-1:-1;;;;;30575:5:0;30559:58;;;;-1:-1:-1;;;30559:58:0;;;;;;;:::i;:::-;30644:10;30628:72;;;;-1:-1:-1;;;30628:72:0;;;;;;;:::i;:::-;30719:7;;-1:-1:-1;;;30719:7:0;;;;:15;;30730:4;30719:15;30711:43;;;;-1:-1:-1;;;30711:43:0;;;;;;;:::i;:::-;30783:1;30773:7;:11;30765:57;;;;-1:-1:-1;;;30765:57:0;;;;;;;:::i;:::-;30833:21;30857:25;;;:8;:25;;;;;30911:19;;:23;;;;:45;;;30955:1;30938:4;:14;;;:18;30911:45;30903:88;;;;-1:-1:-1;;;30903:88:0;;;;;;;:::i;:::-;31012:5;;:67;;-1:-1:-1;;;;;31012:5:0;31043:10;31064:4;31071:7;31012:22;:67::i;:::-;31099:9;:21;31109:10;-1:-1:-1;;;;;31099:21:0;-1:-1:-1;;;;;31099:21:0;;;;;;;;;;;;31140:203;;;;;;;;31177:7;31140:203;;;;31199:15;31140:203;;;;31229:4;:14;;;31140:203;;;;31258:15;31140:203;;;;31307:15;31325:5;31307:23;31288:15;:43;31140:203;;;31099:245;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31358:12;:24;31371:10;-1:-1:-1;;;;;31358:24:0;-1:-1:-1;;;;;31358:24:0;;;;;;;;;;;;31402:206;;;;;;;;31442:7;31402:206;;;;31464:15;31402:206;;;;31494:4;:14;;;31402:206;;;;31523:15;31402:206;;;;31572:15;31590:5;31572:23;31553:15;:43;31402:206;;;31358:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31637:7;31623:10;;:21;;;;;;;;;;;31681:15;31668:10;-1:-1:-1;;;;;31660:64:0;;31699:7;31708:4;:14;;;31660:64;;;;;;;:::i;:::-;;;;;;;;30478:1254;;;:::o;34020:585::-;-1:-1:-1;;;;;34134:16:0;;34085:4;34134:16;;;:9;:16;;;;;34172:15;;34085:4;34227:7;;34224:64;;34257:8;34266:1;34257:11;;;;;;;;;;;;;;;;;;:19;;;34250:26;;34224:64;34313:9;34308:266;34332:3;34328:1;:7;34308:266;;;34385:15;34361:8;34370:1;34361:11;;;;;;;;;;;;;;;;;;:21;;;:39;:65;;;;;34425:1;34404:8;34413:1;34404:11;;;;;;;;;;;;;;;;;;:18;;;:22;34361:65;:108;;;;;34454:15;34430:8;34439:1;34430:11;;;;;;;;;;;;;;;;;;:19;;;:39;;34361:108;:138;;;;;34495:4;34473:8;34482:1;34473:11;;;;;;;;;;;;;;;;;;:19;;;:26;34361:138;34357:206;;;34528:8;34537:1;34528:11;;;;;;;;;;;;;;;;;;:19;;;34521:26;;34357:206;34337:3;;34308:266;;20413:244;19690:12;:10;:12::i;:::-;-1:-1:-1;;;;;19679:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;19679:23:0;;19671:68;;;;-1:-1:-1;;;19671:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20502:22:0;::::1;20494:73;;;;-1:-1:-1::0;;;20494:73:0::1;;;;;;;:::i;:::-;20604:6;::::0;;20583:38:::1;::::0;-1:-1:-1;;;;;20583:38:0;;::::1;::::0;20604:6;::::1;::::0;20583:38:::1;::::0;::::1;20632:6;:17:::0;;-1:-1:-1;;;;;;20632:17:0::1;-1:-1:-1::0;;;;;20632:17:0;;;::::1;::::0;;;::::1;::::0;;20413:244::o;30036:428::-;-1:-1:-1;;;;;30150:16:0;;30099:7;30150:16;;;:9;:16;;;;;30188:15;;30099:7;;30242:192;30266:3;30262:1;:7;30242:192;;;30313:8;30322:1;30313:11;;;;;;;;;;;;;;;;;;:19;;;30295:15;:37;:64;;;;;30358:1;30337:8;30346:1;30337:11;;;;;;;;;;;;;;;;;;:18;;;:22;30295:64;30291:132;;;30388:8;30397:1;30388:11;;;;;;;;;;;;;;;;;;:18;;;30379:27;;;;30291:132;30271:3;;30242:192;;26874:19;;;-1:-1:-1;;;;;26874:19:0;;:::o;27152:44::-;;;;;;;;;;;;;;;;;;;:::o;641:106::-;729:10;641:106;:::o;25784:289::-;25180:1;25914:7;;:19;;25906:63;;;;-1:-1:-1;;;25906:63:0;;;;;;;:::i;:::-;25180:1;26047:7;:18;25784:289::o;31747:508::-;31875:10;31819:4;31865:21;;;:9;:21;;;;;31908:15;;31819:4;;31963:175;31987:3;31983:1;:7;31963:175;;;32034:8;32043:1;32034:11;;;;;;;;;;;;;;;;;;:19;;;32016:15;:37;:63;;;;;32078:1;32057:8;32066:1;32057:11;;;;;;;;;;;;;;;;;;:18;;;:22;32016:63;32012:115;;;32107:4;32099:12;;32012:115;31992:3;;31963:175;;;;32151:5;32148:100;;;32179:4;32172:11;;;;;;;32148:100;32231:5;32224:12;;;;;;;26081:213;25136:1;26264:22;;26081:213::o;21408:205::-;21509:96;21529:5;21559:27;;;21588:4;21594:2;21598:5;21536:68;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;21536:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;21536:68:0;-1:-1:-1;;;;;;21536:68:0;;;;;;;;;;23952:23;23978:69;24006:4;23978:69;;;;;;;;;;;;;;;;;23986:5;-1:-1:-1;;;;;23978:27:0;;;:69;;;;;:::i;:::-;24062:17;;23952:95;;-1:-1:-1;24062:21:0;24058:224;;24204:10;24193:30;;;;;;;;;;;;:::i;:::-;24185:85;;;;-1:-1:-1;;;24185:85:0;;;;;;;:::i;14103:195::-;14206:12;14238:52;14260:6;14268:4;14274:1;14277:12;14238:21;:52::i;:::-;14231:59;;14103:195;;;;;;:::o;15155:530::-;15282:12;15340:5;15315:21;:30;;15307:81;;;;-1:-1:-1;;;15307:81:0;;;;;;;:::i;:::-;15407:18;15418:6;15407:10;:18::i;:::-;15399:60;;;;-1:-1:-1;;;15399:60:0;;;;;;;:::i;:::-;15533:12;15547:23;15574:6;-1:-1:-1;;;;;15574:11:0;15594:5;15602:4;15574:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15532:75;;;;15625:52;15643:7;15652:10;15664:12;15625:17;:52::i;:::-;15618:59;15155:530;-1:-1:-1;;;;;;;15155:530:0:o;11185:422::-;11552:20;11591:8;;;11185:422::o;17695:742::-;17810:12;17839:7;17835:595;;;-1:-1:-1;17870:10:0;17863:17;;17835:595;17984:17;;:21;17980:439;;18247:10;18241:17;18308:15;18295:10;18291:2;18287:19;18280:44;18195:148;18390:12;18383:20;;-1:-1:-1;;;18383:20:0;;;;;;;;:::i;1002:241:-1:-;;1106:2;1094:9;1085:7;1081:23;1077:32;1074:2;;;-1:-1;;1112:12;1074:2;85:6;72:20;97:33;124:5;97:33;:::i;1250:382::-;;;1379:2;1367:9;1358:7;1354:23;1350:32;1347:2;;;-1:-1;;1385:12;1347:2;230:6;217:20;242:41;277:5;242:41;:::i;:::-;1437:71;1545:2;1584:22;;;;791:20;;-1:-1;;;1341:291::o;1639:491::-;;;;1777:2;1765:9;1756:7;1752:23;1748:32;1745:2;;;-1:-1;;1783:12;1745:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;1835:63;-1:-1;1935:2;1974:22;;72:20;97:33;72:20;97:33;:::i;:::-;1739:391;;1943:63;;-1:-1;;;2043:2;2082:22;;;;791:20;;1739:391::o;2137:235::-;;2238:2;2226:9;2217:7;2213:23;2209:32;2206:2;;;-1:-1;;2244:12;2206:2;372:6;359:20;384:30;408:5;384:30;:::i;2379:257::-;;2491:2;2479:9;2470:7;2466:23;2462:32;2459:2;;;-1:-1;;2497:12;2459:2;507:6;501:13;519:30;543:5;519:30;:::i;2917:241::-;;3021:2;3009:9;3000:7;2996:23;2992:32;2989:2;;;-1:-1;;3027:12;2989:2;-1:-1;791:20;;2983:175;-1:-1;2983:175::o;3165:263::-;;3280:2;3268:9;3259:7;3255:23;3251:32;3248:2;;;-1:-1;;3286:12;3248:2;-1:-1;939:13;;3242:186;-1:-1;3242:186::o;3435:366::-;;;3556:2;3544:9;3535:7;3531:23;3527:32;3524:2;;;-1:-1;;3562:12;3524:2;-1:-1;;791:20;;;3714:2;3753:22;;;791:20;;-1:-1;3518:283::o;12759:961::-;12974:16;12968:23;14848:3;14841:37;13149:4;13142:5;13138:16;13132:23;13149:4;13213:3;13209:14;14841:37;13308:4;13301:5;13297:16;13291:23;13308:4;13372:3;13368:14;14841:37;13467:4;13460:5;13456:16;13450:23;13467:4;13531:3;13527:14;14841:37;13624:4;13617:5;13613:16;13607:23;13624:4;13688:3;13684:14;14841:37;12873:847;;:::o;15010:271::-;;6968:5;25761:12;7079:52;7124:6;7119:3;7112:4;7105:5;7101:16;7079:52;:::i;:::-;7143:16;;;;;15144:137;-1:-1;;15144:137::o;15288:222::-;-1:-1;;;;;27737:54;;;;4612:37;;15415:2;15400:18;;15386:124::o;15762:444::-;-1:-1;;;;;27737:54;;;4612:37;;27737:54;;;;16109:2;16094:18;;4612:37;16192:2;16177:18;;14841:37;;;;15945:2;15930:18;;15916:290::o;16213:333::-;-1:-1;;;;;27737:54;;;;4612:37;;16532:2;16517:18;;14841:37;16368:2;16353:18;;16339:207::o;16553:486::-;16788:2;16802:47;;;25761:12;;16773:18;;;26662:19;;;16553:486;;16788:2;25402:14;;;;26702;;;;16553:486;5317:347;5342:6;5339:1;5336:13;5317:347;;;3954:104;4054:3;5409:6;5403:13;3954:104;:::i;:::-;26347:14;;;;4087:4;4078:14;;;;;5364:1;5357:9;5317:347;;;-1:-1;16855:174;;16759:280;-1:-1;;;;;;16759:280::o;17046:474::-;17275:2;17289:47;;;25761:12;;17260:18;;;26662:19;;;17046:474;;17275:2;25402:14;;;;26702;;;;17046:474;6329:338;6354:6;6351:1;6348:13;6329:338;;;3954:104;4054:3;6421:6;6415:13;3954:104;:::i;:::-;26347:14;;;;4087:4;4078:14;;;;;6376:1;6369:9;6329:338;;17527:210;27538:13;;27531:21;6762:34;;17648:2;17633:18;;17619:118::o;17999:310::-;;18146:2;18167:17;18160:47;7475:5;25761:12;26674:6;18146:2;18135:9;18131:18;26662:19;7569:52;7614:6;26702:14;18135:9;26702:14;18146:2;7595:5;7591:16;7569:52;:::i;:::-;28904:7;28888:14;-1:-1;;28884:28;7633:39;;;;26702:14;7633:39;;18117:192;-1:-1;;18117:192::o;18316:416::-;18516:2;18530:47;;;7909:2;18501:18;;;26662:19;7945:28;26702:14;;;7925:49;7993:12;;;18487:245::o;18739:416::-;18939:2;18953:47;;;8244:2;18924:18;;;26662:19;8280:34;26702:14;;;8260:55;-1:-1;;;8335:12;;;8328:30;8377:12;;;18910:245::o;19162:416::-;19362:2;19376:47;;;8628:2;19347:18;;;26662:19;-1:-1;;;26702:14;;;8644:40;8703:12;;;19333:245::o;19585:416::-;19785:2;19799:47;;;8954:2;19770:18;;;26662:19;8990:34;26702:14;;;8970:55;-1:-1;;;9045:12;;;9038:30;9087:12;;;19756:245::o;20008:416::-;20208:2;20222:47;;;9338:2;20193:18;;;26662:19;9374:31;26702:14;;;9354:52;9425:12;;;20179:245::o;20431:416::-;20631:2;20645:47;;;9676:2;20616:18;;;26662:19;-1:-1;;;26702:14;;;9692:38;9749:12;;;20602:245::o;20854:416::-;21054:2;21068:47;;;21039:18;;;26662:19;10036:34;26702:14;;;10016:55;10090:12;;;21025:245::o;21277:416::-;21477:2;21491:47;;;10341:2;21462:18;;;26662:19;10377:33;26702:14;;;10357:54;10430:12;;;21448:245::o;21700:416::-;21900:2;21914:47;;;10681:2;21885:18;;;26662:19;10717:34;26702:14;;;10697:55;-1:-1;;;10772:12;;;10765:25;10809:12;;;21871:245::o;22123:416::-;22323:2;22337:47;;;11060:2;22308:18;;;26662:19;11096:31;26702:14;;;11076:52;11147:12;;;22294:245::o;22546:416::-;22746:2;22760:47;;;11398:2;22731:18;;;26662:19;11434:34;26702:14;;;11414:55;-1:-1;;;11489:12;;;11482:25;11526:12;;;22717:245::o;22969:416::-;23169:2;23183:47;;;11777:2;23154:18;;;26662:19;11813:34;26702:14;;;11793:55;-1:-1;;;11868:12;;;11861:34;11914:12;;;23140:245::o;23392:416::-;23592:2;23606:47;;;12165:2;23577:18;;;26662:19;12201:33;26702:14;;;12181:54;12254:12;;;23563:245::o;23815:416::-;24015:2;24029:47;;;12505:2;24000:18;;;26662:19;12541:34;26702:14;;;12521:55;-1:-1;;;12596:12;;;12589:28;12636:12;;;23986:245::o;24238:222::-;14841:37;;;24365:2;24350:18;;24336:124::o;24467:333::-;14841:37;;;24786:2;24771:18;;14841:37;24622:2;24607:18;;24593:207::o;24807:444::-;14841:37;;;25154:2;25139:18;;14841:37;;;;25237:2;25222:18;;14841:37;24990:2;24975:18;;24961:290::o;28544:268::-;28609:1;28616:101;28630:6;28627:1;28624:13;28616:101;;;28697:11;;;28691:18;28678:11;;;28671:39;28652:2;28645:10;28616:101;;;28732:6;28729:1;28726:13;28723:2;;;-1:-1;;28609:1;28779:16;;28772:27;28593:219::o;28925:117::-;-1:-1;;;;;27737:54;;28984:35;;28974:2;;29033:1;;29023:12;28974:2;28968:74;:::o;29189:111::-;29270:5;27538:13;27531:21;29248:5;29245:32;29235:2;;29291:1;;29281:12
Swarm Source
ipfs://ed6a103abbed1de5414df23c5611354176cec88bfa9c316e921dd810dba71a6b
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
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.