Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Latest 25 from a total of 6,105 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Unstake | 12941969 | 1667 days ago | IN | 0 ETH | 0.00151795 | ||||
| Incv Reward Clai... | 12941967 | 1667 days ago | IN | 0 ETH | 0.00423081 | ||||
| Unstake | 12939502 | 1667 days ago | IN | 0 ETH | 0.00124795 | ||||
| Unstake | 12938759 | 1667 days ago | IN | 0 ETH | 0.00090151 | ||||
| Unstake | 12937331 | 1667 days ago | IN | 0 ETH | 0.00146403 | ||||
| Unstake | 12934748 | 1668 days ago | IN | 0 ETH | 0.00315658 | ||||
| Unstake | 12934222 | 1668 days ago | IN | 0 ETH | 0.0013282 | ||||
| Incv Reward Clai... | 12934208 | 1668 days ago | IN | 0 ETH | 0.00358297 | ||||
| Incv Reward Clai... | 12933868 | 1668 days ago | IN | 0 ETH | 0.00290868 | ||||
| Unstake | 12928905 | 1669 days ago | IN | 0 ETH | 0.00168609 | ||||
| Unstake | 12926583 | 1669 days ago | IN | 0 ETH | 0.00190863 | ||||
| Unstake | 12925912 | 1669 days ago | IN | 0 ETH | 0.00198204 | ||||
| Unstake | 12925328 | 1669 days ago | IN | 0 ETH | 0.00102662 | ||||
| Incv Reward Clai... | 12925328 | 1669 days ago | IN | 0 ETH | 0.00264759 | ||||
| Unstake | 12922940 | 1670 days ago | IN | 0 ETH | 0.00123333 | ||||
| Unstake | 12921217 | 1670 days ago | IN | 0 ETH | 0.0023718 | ||||
| Incv Reward Clai... | 12920489 | 1670 days ago | IN | 0 ETH | 0.00194508 | ||||
| Unstake | 12920483 | 1670 days ago | IN | 0 ETH | 0.00198204 | ||||
| Unstake | 12916380 | 1671 days ago | IN | 0 ETH | 0.0016884 | ||||
| Unstake | 12914732 | 1671 days ago | IN | 0 ETH | 0.0012498 | ||||
| Incv Reward Clai... | 12914732 | 1671 days ago | IN | 0 ETH | 0.00370196 | ||||
| Unstake | 12914411 | 1671 days ago | IN | 0 ETH | 0.00104359 | ||||
| Unstake | 12911923 | 1671 days ago | IN | 0 ETH | 0.0010115 | ||||
| Unstake | 12911923 | 1671 days ago | IN | 0 ETH | 0.00155116 | ||||
| Incv Reward Clai... | 12911923 | 1671 days ago | IN | 0 ETH | 0.00330532 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
CourtFarming_RoomStake
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2021-03-13
*/
pragma solidity ^0.5.0;
interface ICourtStake{
function lockedStake(uint256 amount, address beneficiar, uint256 StartReleasingTime, uint256 batchCount, uint256 batchPeriod) external;
}
interface IMERC20 {
function mint(address account, uint amount) external;
}
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*
* _Available since v2.4.0._
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*
* _Available since v2.4.0._
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
// Solidity only automatically asserts when dividing by 0
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*
* _Available since v2.4.0._
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
/**
* @dev Interface of the ERC20 standard as defined in the EIP. Does not include
* the optional functions; to access them see {ERC20Detailed}.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* This test is non-exhaustive, and there may be false-negatives: during the
* execution of a contract's constructor, its address will be reported as
* not containing 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.
*/
function isContract(address account) internal view returns (bool) {
// This method relies in extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
// According to EIP-1052, 0x0 is the value returned for not-yet created accounts
// and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
// for accounts without code, i.e. `keccak256('')`
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
// solhint-disable-next-line no-inline-assembly
assembly { codehash := extcodehash(account) }
return (codehash != 0x0 && codehash != accountHash);
}
/**
* @dev Converts an `address` into `address payable`. Note that this is
* simply a type cast: the actual underlying value is not changed.
*
* _Available since v2.4.0._
*/
function toPayable(address account) internal pure returns (address payable) {
return address(uint160(account));
}
/**
* @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].
*
* _Available since v2.4.0._
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-call-value
(bool success, ) = recipient.call.value(amount)("");
require(success, "Address: unable to send value, recipient may have reverted");
}
}
/**
* @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 ERC20;` 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));
}
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.
// A Solidity high level call has three parts:
// 1. The target address is checked to verify it contains contract code
// 2. The call itself is made, and success asserted
// 3. The return value is decoded, which in turn checks the size of the returned data.
// solhint-disable-next-line max-line-length
require(address(token).isContract(), "SafeERC20: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = address(token).call(data);
require(success, "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");
}
}
}
contract CourtFarming_RoomStake {
using SafeMath for uint256;
using SafeERC20 for IERC20;
IERC20 public constant stakedToken = IERC20(0xAd4f86a25bbc20FfB751f2FAC312A0B4d8F88c64);
IMERC20 public constant courtToken = IMERC20(0x0538A9b4f4dcB0CB01A7fA34e17C0AC947c22553);
uint256 private _totalStaked;
mapping(address => uint256) private _balances;
// last updated block number
uint256 private _lastUpdateBlock;
// incentive rewards
uint256 public incvFinishBlock; // finish incentive rewarding block number
uint256 private _incvRewardPerBlock; // incentive reward per block
uint256 private _incvAccRewardPerToken; // accumulative reward per token
mapping(address => uint256) private _incvRewards; // reward balances
mapping(address => uint256) private _incvPrevAccRewardPerToken;// previous accumulative reward per token (for a user)
uint256 public incvStartReleasingTime; // incentive releasing time
uint256 public incvBatchPeriod; // incentive batch period
uint256 public incvBatchCount; // incentive batch count
mapping(address => uint256) public incvWithdrawn;
address public owner;
enum TransferRewardState {
Succeeded,
RewardsStillLocked
}
address public courtStakeAddress;
event Staked(address indexed user, uint256 amount);
event Unstaked(address indexed user, uint256 amount);
event ClaimReward(address indexed user, uint256 reward);
event ClaimIncentiveReward(address indexed user, uint256 reward);
event StakeRewards(address indexed user, uint256 amount, uint256 lockTime);
event CourtStakeChanged(address oldAddress, address newAddress);
event StakeParametersChanged(uint256 incvRewardPerBlock, uint256 incvRewardFinsishBlock, uint256 incvLockTime);
constructor () public {
owner = msg.sender;
uint256 incvRewardsPerBlock = 41335978835978835;
uint256 incvRewardsPeriodInDays = 90;
incvStartReleasingTime = 1620914400; // 13/05/2021 // check https://www.epochconverter.com/ for timestamp
incvBatchPeriod = 1 days;
incvBatchCount = 1;
_stakeParametrsCalculation(incvRewardsPerBlock, incvRewardsPeriodInDays, incvStartReleasingTime);
_lastUpdateBlock = blockNumber();
}
function _stakeParametrsCalculation(uint256 incvRewardsPerBlock, uint256 incvRewardsPeriodInDays, uint256 iLockTime) internal{
uint256 incvRewardBlockCount = incvRewardsPeriodInDays * 5760;
uint256 incvRewardPerBlock = incvRewardsPerBlock;
_incvRewardPerBlock = incvRewardPerBlock * (1e18);
incvFinishBlock = blockNumber().add(incvRewardBlockCount);
incvStartReleasingTime = iLockTime;
}
function changeStakeParameters( uint256 incvRewardsPerBlock, uint256 incvRewardsPeriodInDays, uint256 iLockTime) public {
require(msg.sender == owner, "can be called by owner only");
updateReward(address(0));
_stakeParametrsCalculation(incvRewardsPerBlock, incvRewardsPeriodInDays, iLockTime);
emit StakeParametersChanged( _incvRewardPerBlock, incvFinishBlock, incvStartReleasingTime);
}
function updateReward(address account) public {
// reward algorithm
// in general: rewards = (reward per token ber block) user balances
uint256 cnBlock = blockNumber();
// update accRewardPerToken, in case totalSupply is zero; do not increment accRewardPerToken
if (_totalStaked > 0) {
uint256 incvlastRewardBlock = cnBlock < incvFinishBlock ? cnBlock : incvFinishBlock;
if (incvlastRewardBlock > _lastUpdateBlock) {
_incvAccRewardPerToken = incvlastRewardBlock.sub(_lastUpdateBlock)
.mul(_incvRewardPerBlock).div(_totalStaked)
.add(_incvAccRewardPerToken);
}
}
_lastUpdateBlock = cnBlock;
if (account != address(0)) {
uint256 incAccRewardPerTokenForUser = _incvAccRewardPerToken.sub(_incvPrevAccRewardPerToken[account]);
if (incAccRewardPerTokenForUser > 0) {
_incvRewards[account] =
_balances[account]
.mul(incAccRewardPerTokenForUser)
.div(1e18)
.add(_incvRewards[account]);
_incvPrevAccRewardPerToken[account] = _incvAccRewardPerToken;
}
}
}
function stake(uint256 amount) public {
updateReward(msg.sender);
if (amount > 0) {
_totalStaked = _totalStaked.add(amount);
_balances[msg.sender] = _balances[msg.sender].add(amount);
stakedToken.safeTransferFrom(msg.sender, address(this), amount);
emit Staked(msg.sender, amount);
}
}
function unstake(uint256 amount, bool claim) public {
updateReward(msg.sender);
if (amount > 0) {
_totalStaked = _totalStaked.sub(amount);
_balances[msg.sender] = _balances[msg.sender].sub(amount);
stakedToken.safeTransfer(msg.sender, amount);
emit Unstaked(msg.sender, amount);
}
claim = false;
}
function stakeIncvRewards(uint256 amount) public returns (bool) {
updateReward(msg.sender);
uint256 incvReward = _incvRewards[msg.sender];
if (amount > incvReward || courtStakeAddress == address(0)) {
return false;
}
_incvRewards[msg.sender] -= amount; // no need to use safe math sub, since there is check for amount > reward
courtToken.mint(address(this), amount);
ICourtStake courtStake = ICourtStake(courtStakeAddress);
courtStake.lockedStake(amount, msg.sender, incvStartReleasingTime, incvBatchCount, incvBatchPeriod);
emit StakeRewards(msg.sender, amount, incvStartReleasingTime);
}
function setCourtStake(address courtStakeAdd) public {
require(msg.sender == owner, "only contract owner can change");
address oldAddress = courtStakeAddress;
courtStakeAddress = courtStakeAdd;
IERC20 courtTokenERC20 = IERC20(address(courtToken));
courtTokenERC20.approve(courtStakeAdd, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
emit CourtStakeChanged(oldAddress, courtStakeAdd);
}
function rewards(address account) public view returns (uint256 reward, uint256 incvReward) {
// read version of update
uint256 cnBlock = blockNumber();
uint256 incvAccRewardPerToken = _incvAccRewardPerToken;
// update accRewardPerToken, in case totalSupply is zero; do not increment accRewardPerToken
if (_totalStaked > 0) {
uint256 incvLastRewardBlock = cnBlock < incvFinishBlock ? cnBlock : incvFinishBlock;
if (incvLastRewardBlock > _lastUpdateBlock) {
incvAccRewardPerToken = incvLastRewardBlock.sub(_lastUpdateBlock)
.mul(_incvRewardPerBlock).div(_totalStaked)
.add(incvAccRewardPerToken);
}
}
incvReward = _balances[account]
.mul(incvAccRewardPerToken.sub(_incvPrevAccRewardPerToken[account]))
.div(1e18)
.add(_incvRewards[account])
.sub(incvWithdrawn[account]);
reward = 0;
}
function incvRewardInfo() external view returns (uint256 cBlockNumber, uint256 incvRewardPerBlock, uint256 incvRewardFinishBlock, uint256 incvRewardFinishTime, uint256 incvRewardLockTime) {
cBlockNumber = blockNumber();
incvRewardFinishBlock = incvFinishBlock;
incvRewardPerBlock = _incvRewardPerBlock.div(1e18);
if( cBlockNumber < incvFinishBlock){
incvRewardFinishTime = block.timestamp.add(incvFinishBlock.sub(cBlockNumber).mul(15));
}else{
incvRewardFinishTime = block.timestamp.sub(cBlockNumber.sub(incvFinishBlock).mul(15));
}
incvRewardLockTime=incvStartReleasingTime;
}
// expected reward,
// please note this is only expectation, because total balance may changed during the day
function expectedRewardsToday(uint256 amount) external view returns (uint256 reward, uint256 incvReward) {
reward = 0;
uint256 totalIncvRewardPerDay = _incvRewardPerBlock * 5760;
incvReward = totalIncvRewardPerDay.div(_totalStaked.add(amount)).mul(amount).div(1e18);
}
function lastUpdateBlock() external view returns(uint256) {
return _lastUpdateBlock;
}
function balanceOf(address account) external view returns (uint256) {
return _balances[account];
}
function totalStaked() external view returns (uint256) {
return _totalStaked;
}
function blockNumber() public view returns (uint256) {
return block.number;
}
function getCurrentTime() public view returns(uint256){
return block.timestamp;
}
function getVestedAmount(uint256 lockedAmount, uint256 time) internal view returns(uint256){
// if time < StartReleasingTime: then return 0
if(time < incvStartReleasingTime){
return 0;
}
// if locked amount 0 return 0
if (lockedAmount == 0){
return 0;
}
// elapsedBatchCount = ((time - startReleasingTime) / batchPeriod) + 1
uint256 elapsedBatchCount =
time.sub(incvStartReleasingTime)
.div(incvBatchPeriod)
.add(1);
// vestedAmount = lockedAmount * elapsedBatchCount / batchCount
uint256 vestedAmount =
lockedAmount
.mul(elapsedBatchCount)
.div(incvBatchCount);
if(vestedAmount > lockedAmount){
vestedAmount = lockedAmount;
}
return vestedAmount;
}
function incvRewardClaim() public returns(uint256 amount){
updateReward(msg.sender);
amount = getVestedAmount(_incvRewards[msg.sender], getCurrentTime()).sub(incvWithdrawn[msg.sender]);
if(amount > 0){
incvWithdrawn[msg.sender] = incvWithdrawn[msg.sender].add(amount);
courtToken.mint(msg.sender, amount);
emit ClaimIncentiveReward(msg.sender, amount);
}
}
function getBeneficiaryInfo(address ibeneficiary) external view
returns(address beneficiary,
uint256 totalLocked,
uint256 withdrawn,
uint256 releasableAmount,
uint256 nextBatchTime,
uint256 currentTime){
beneficiary = ibeneficiary;
currentTime = getCurrentTime();
totalLocked = _incvRewards[ibeneficiary];
withdrawn = incvWithdrawn[ibeneficiary];
( , uint256 incvReward) = rewards(ibeneficiary);
releasableAmount = getVestedAmount(incvReward, getCurrentTime()).sub(incvWithdrawn[beneficiary]);
nextBatchTime = getIncNextBatchTime(incvReward, ibeneficiary, currentTime);
}
function getIncNextBatchTime(uint256 lockedAmount, address beneficiary, uint256 time) internal view returns(uint256){
// if total vested equal to total locked then return 0
if(getVestedAmount(lockedAmount, time) == _incvRewards[beneficiary]){
return 0;
}
// if time less than startReleasingTime: then return sartReleasingTime
if(time <= incvStartReleasingTime){
return incvStartReleasingTime;
}
// find the next batch time
uint256 elapsedBatchCount =
time.sub(incvStartReleasingTime)
.div(incvBatchPeriod)
.add(1);
uint256 nextBatchTime =
elapsedBatchCount
.mul(incvBatchPeriod)
.add(incvStartReleasingTime);
return nextBatchTime;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"ClaimIncentiveReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"ClaimReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"CourtStakeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"incvRewardPerBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"incvRewardFinsishBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"incvLockTime","type":"uint256"}],"name":"StakeParametersChanged","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":"lockTime","type":"uint256"}],"name":"StakeRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unstaked","type":"event"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"blockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"incvRewardsPerBlock","type":"uint256"},{"internalType":"uint256","name":"incvRewardsPeriodInDays","type":"uint256"},{"internalType":"uint256","name":"iLockTime","type":"uint256"}],"name":"changeStakeParameters","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"courtStakeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"courtToken","outputs":[{"internalType":"contract IMERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"expectedRewardsToday","outputs":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"incvReward","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"ibeneficiary","type":"address"}],"name":"getBeneficiaryInfo","outputs":[{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"uint256","name":"totalLocked","type":"uint256"},{"internalType":"uint256","name":"withdrawn","type":"uint256"},{"internalType":"uint256","name":"releasableAmount","type":"uint256"},{"internalType":"uint256","name":"nextBatchTime","type":"uint256"},{"internalType":"uint256","name":"currentTime","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"incvBatchCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"incvBatchPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"incvFinishBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"incvRewardClaim","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"incvRewardInfo","outputs":[{"internalType":"uint256","name":"cBlockNumber","type":"uint256"},{"internalType":"uint256","name":"incvRewardPerBlock","type":"uint256"},{"internalType":"uint256","name":"incvRewardFinishBlock","type":"uint256"},{"internalType":"uint256","name":"incvRewardFinishTime","type":"uint256"},{"internalType":"uint256","name":"incvRewardLockTime","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"incvStartReleasingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"incvWithdrawn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastUpdateBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"incvReward","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"courtStakeAdd","type":"address"}],"name":"setCourtStake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stakeIncvRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"stakedToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"claim","type":"bool"}],"name":"unstake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"updateReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b50600c80546001600160a01b0319163317905563609d30e06008819055620151806009556001600a556692dada8ef62a5390605a906200005e90839083906001600160e01b036200007d16565b620000716001600160e01b03620000c916565b600255506200012f9050565b670de0b6b3a76400008302600455611680820283620000bd82620000a96001600160e01b03620000c916565b620000cd60201b62000fc41790919060201c565b60035550506008555050565b4390565b60008282018381101562000128576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b61156c806200013f6000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c806372dacd79116100de578063a694fc3a11610097578063cc7a262e11610071578063cc7a262e14610401578063d6db152d14610409578063eb09b6cb14610411578063ef0b75691461041957610173565b8063a694fc3a146103b3578063aed5900f146103d0578063c3443b69146103f957610173565b806372dacd791461033d578063817b1cd2146103455780638da5cb5b1461034d57806399b015f0146103555780639ebea88c14610386578063a218141b146103ab57610173565b8063568c9a7011610130578063568c9a701461029357806357371ade1461029b57806357e871e7146102c3578063632447c9146102cb57806370a08231146102f157806371f61cae1461031757610173565b80630700037d1461017857806329cb924d146101b7578063366dc083146101d1578063374d496a146102345780633d99af2e14610267578063528ebbda1461026f575b600080fd5b61019e6004803603602081101561018e57600080fd5b50356001600160a01b0316610436565b6040805192835260208301919091528051918290030190f35b6101bf610557565b60408051918252519081900360200190f35b6101f7600480360360208110156101e757600080fd5b50356001600160a01b031661055c565b604080516001600160a01b0390971687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b61023c6105eb565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b6101bf610694565b61027761069a565b604080516001600160a01b039092168252519081900360200190f35b6101bf6106a9565b6102c1600480360360208110156102b157600080fd5b50356001600160a01b03166106af565b005b6101bf610804565b6102c1600480360360208110156102e157600080fd5b50356001600160a01b0316610808565b6101bf6004803603602081101561030757600080fd5b50356001600160a01b031661092c565b6101bf6004803603602081101561032d57600080fd5b50356001600160a01b031661094b565b6101bf61095d565b6101bf610a77565b610277610a7d565b6103726004803603602081101561036b57600080fd5b5035610a8c565b604080519115158252519081900360200190f35b6102c16004803603604081101561039c57600080fd5b50803590602001351515610c1e565b6101bf610cd5565b6102c1600480360360208110156103c957600080fd5b5035610cdb565b6102c1600480360360608110156103e657600080fd5b5080359060208101359060400135610d93565b610277610e53565b610277610e6b565b6101bf610e83565b6101bf610e89565b61019e6004803603602081101561042f57600080fd5b5035610e8f565b6000806000610443610804565b60055460005491925090156104c1576000600354831061046557600354610467565b825b90506002548111156104bf576104bc826104b06000546104a460045461049860025488610ede90919063ffffffff16565b9063ffffffff610f2916565b9063ffffffff610f8216565b9063ffffffff610fc416565b91505b505b6001600160a01b0385166000908152600b60209081526040808320546006835281842054600790935292205461054a929161053e916104b090670de0b6b3a7640000906104a49061051990899063ffffffff610ede16565b6001600160a01b038d166000908152600160205260409020549063ffffffff610f2916565b9063ffffffff610ede16565b9250600093505050915091565b425b90565b8060008080808061056b610557565b6001600160a01b038816600090815260066020908152604080832054600b90925282205490975095509091506105a088610436565b6001600160a01b0389166000908152600b60205260409020549092506105d2915061053e836105cd610557565b61101e565b93506105df818984611093565b92505091939550919395565b60008060008060006105fb610804565b600354600454919650935061061e90670de0b6b3a764000063ffffffff610f8216565b935060035485101561065b57610654610647600f61049888600354610ede90919063ffffffff16565b429063ffffffff610fc416565b9150610688565b610685610678600f61049860035489610ede90919063ffffffff16565b429063ffffffff610ede16565b91505b60085490509091929394565b600a5481565b600d546001600160a01b031681565b60035481565b600c546001600160a01b0316331461070e576040805162461bcd60e51b815260206004820152601e60248201527f6f6e6c7920636f6e7472616374206f776e65722063616e206368616e67650000604482015290519081900360640190fd5b600d80546001600160a01b038381166001600160a01b0319831681179093556040805163095ea7b360e01b81526004810194909452600019602485015251911691730538a9b4f4dcb0cb01a7fa34e17c0ac947c2255391829163095ea7b39160448083019260209291908290030181600087803b15801561078e57600080fd5b505af11580156107a2573d6000803e3d6000fd5b505050506040513d60208110156107b857600080fd5b5050604080516001600160a01b0380851682528516602082015281517f792c21b3a699347e8ba7f050a0a835bed14336a5284e2476670fae2e20a269f1929181900390910190a1505050565b4390565b6000610812610804565b6000549091501561086b576000600354821061083057600354610832565b815b9050600254811115610869576108656005546104b06000546104a460045461049860025488610ede90919063ffffffff16565b6005555b505b60028190556001600160a01b03821615610928576001600160a01b0382166000908152600760205260408120546005546108aa9163ffffffff610ede16565b90508015610926576001600160a01b0383166000908152600660209081526040808320546001909252909120546108fa91906104b090670de0b6b3a7640000906104a4908663ffffffff610f2916565b6001600160a01b0384166000908152600660209081526040808320939093556005546007909152919020555b505b5050565b6001600160a01b0381166000908152600160205260409020545b919050565b600b6020526000908152604090205481565b600061096833610808565b336000908152600b6020908152604080832054600690925290912054610995919061053e906105cd610557565b9050801561055957336000908152600b60205260409020546109bd908263ffffffff610fc416565b336000818152600b60205260408082209390935582516340c10f1960e01b81526004810192909252602482018490529151730538a9b4f4dcb0cb01a7fa34e17c0ac947c22553926340c10f19926044808201939182900301818387803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b50506040805184815290513393507f6fe937bf2c13cbdc6c3e1644deef42cd89a7694c31f592ce251e90727af12e2792509081900360200190a290565b60005490565b600c546001600160a01b031681565b6000610a9733610808565b3360009081526006602052604090205480831180610abe5750600d546001600160a01b0316155b15610acd576000915050610946565b336000908152600660205260408082208054869003905580516340c10f1960e01b8152306004820152602481018690529051730538a9b4f4dcb0cb01a7fa34e17c0ac947c22553926340c10f19926044808201939182900301818387803b158015610b3757600080fd5b505af1158015610b4b573d6000803e3d6000fd5b5050600d54600854600a546009546040805163caa32b9160e01b8152600481018b9052336024820152604481019490945260648401929092526084830152516001600160a01b03909216935083925063caa32b919160a480830192600092919082900301818387803b158015610bc057600080fd5b505af1158015610bd4573d6000803e3d6000fd5b505060085460408051888152602081019290925280513394507f8b8ede3b1a5bbf7eb12af900b210a8f77a6251f55ef3a3caab5250dcf1589c4b9350918290030190a25050919050565b610c2733610808565b811561092857600054610c40908363ffffffff610ede16565b600090815533815260016020526040902054610c62908363ffffffff610ede16565b33600081815260016020526040902091909155610c9b9073ad4f86a25bbc20ffb751f2fac312a0b4d8f88c64908463ffffffff61112316565b60408051838152905133917f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f75919081900360200190a25050565b60025490565b610ce433610808565b8015610d9057600054610cfd908263ffffffff610fc416565b600090815533815260016020526040902054610d1f908263ffffffff610fc416565b33600081815260016020526040902091909155610d599073ad4f86a25bbc20ffb751f2fac312a0b4d8f88c6490308463ffffffff61117516565b60408051828152905133917f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d919081900360200190a25b50565b600c546001600160a01b03163314610df2576040805162461bcd60e51b815260206004820152601b60248201527f63616e2062652063616c6c6564206279206f776e6572206f6e6c790000000000604482015290519081900360640190fd5b610dfc6000610808565b610e078383836111d5565b60045460035460085460408051938452602084019290925282820152517f42bc0b5308138fcf9b84f2d9cabfe315aa695643792e122d567b1bf0f3af3ac59181900360600190a1505050565b730538a9b4f4dcb0cb01a7fa34e17c0ac947c2255381565b73ad4f86a25bbc20ffb751f2fac312a0b4d8f88c6481565b60085481565b60095481565b600080600091506000600454611680029050610ed6670de0b6b3a76400006104a486610498610ec989600054610fc490919063ffffffff16565b869063ffffffff610f8216565b915050915091565b6000610f2083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611201565b90505b92915050565b600082610f3857506000610f23565b82820282848281610f4557fe5b0414610f205760405162461bcd60e51b81526004018080602001828103825260218152602001806114ed6021913960400191505060405180910390fd5b6000610f2083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611298565b600082820183811015610f20576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600060085482101561103257506000610f23565b8261103f57506000610f23565b600061106160016104b06009546104a460085488610ede90919063ffffffff16565b9050600061107e600a546104a48488610f2990919063ffffffff16565b90508481111561108b5750835b949350505050565b6001600160a01b0382166000908152600660205260408120546110b6858461101e565b14156110c45750600061111c565b60085482116110d6575060085461111c565b60006110f860016104b06009546104a460085488610ede90919063ffffffff16565b905060006111176008546104b060095485610f2990919063ffffffff16565b925050505b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526109269084906112fd565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526111cf9085906112fd565b50505050565b670de0b6b3a764000083026004556116808202836111f5826104b0610804565b60035550506008555050565b600081848411156112905760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561125557818101518382015260200161123d565b50505050905090810190601f1680156112825780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836112e75760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561125557818101518382015260200161123d565b5060008385816112f357fe5b0495945050505050565b61130f826001600160a01b03166114b5565b611360576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b6020831061139e5780518252601f19909201916020918201910161137f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611400576040519150601f19603f3d011682016040523d82523d6000602084013e611405565b606091505b50915091508161145c576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156111cf5780806020019051602081101561147857600080fd5b50516111cf5760405162461bcd60e51b815260040180806020018281038252602a81526020018061150e602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470811580159061108b575014159291505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a7231582054f36945a0cce5ed5d391e87ffed604f3c92ad4ab6b3c77fed4f83f75b02e0af64736f6c63430005110032
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101735760003560e01c806372dacd79116100de578063a694fc3a11610097578063cc7a262e11610071578063cc7a262e14610401578063d6db152d14610409578063eb09b6cb14610411578063ef0b75691461041957610173565b8063a694fc3a146103b3578063aed5900f146103d0578063c3443b69146103f957610173565b806372dacd791461033d578063817b1cd2146103455780638da5cb5b1461034d57806399b015f0146103555780639ebea88c14610386578063a218141b146103ab57610173565b8063568c9a7011610130578063568c9a701461029357806357371ade1461029b57806357e871e7146102c3578063632447c9146102cb57806370a08231146102f157806371f61cae1461031757610173565b80630700037d1461017857806329cb924d146101b7578063366dc083146101d1578063374d496a146102345780633d99af2e14610267578063528ebbda1461026f575b600080fd5b61019e6004803603602081101561018e57600080fd5b50356001600160a01b0316610436565b6040805192835260208301919091528051918290030190f35b6101bf610557565b60408051918252519081900360200190f35b6101f7600480360360208110156101e757600080fd5b50356001600160a01b031661055c565b604080516001600160a01b0390971687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b61023c6105eb565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b6101bf610694565b61027761069a565b604080516001600160a01b039092168252519081900360200190f35b6101bf6106a9565b6102c1600480360360208110156102b157600080fd5b50356001600160a01b03166106af565b005b6101bf610804565b6102c1600480360360208110156102e157600080fd5b50356001600160a01b0316610808565b6101bf6004803603602081101561030757600080fd5b50356001600160a01b031661092c565b6101bf6004803603602081101561032d57600080fd5b50356001600160a01b031661094b565b6101bf61095d565b6101bf610a77565b610277610a7d565b6103726004803603602081101561036b57600080fd5b5035610a8c565b604080519115158252519081900360200190f35b6102c16004803603604081101561039c57600080fd5b50803590602001351515610c1e565b6101bf610cd5565b6102c1600480360360208110156103c957600080fd5b5035610cdb565b6102c1600480360360608110156103e657600080fd5b5080359060208101359060400135610d93565b610277610e53565b610277610e6b565b6101bf610e83565b6101bf610e89565b61019e6004803603602081101561042f57600080fd5b5035610e8f565b6000806000610443610804565b60055460005491925090156104c1576000600354831061046557600354610467565b825b90506002548111156104bf576104bc826104b06000546104a460045461049860025488610ede90919063ffffffff16565b9063ffffffff610f2916565b9063ffffffff610f8216565b9063ffffffff610fc416565b91505b505b6001600160a01b0385166000908152600b60209081526040808320546006835281842054600790935292205461054a929161053e916104b090670de0b6b3a7640000906104a49061051990899063ffffffff610ede16565b6001600160a01b038d166000908152600160205260409020549063ffffffff610f2916565b9063ffffffff610ede16565b9250600093505050915091565b425b90565b8060008080808061056b610557565b6001600160a01b038816600090815260066020908152604080832054600b90925282205490975095509091506105a088610436565b6001600160a01b0389166000908152600b60205260409020549092506105d2915061053e836105cd610557565b61101e565b93506105df818984611093565b92505091939550919395565b60008060008060006105fb610804565b600354600454919650935061061e90670de0b6b3a764000063ffffffff610f8216565b935060035485101561065b57610654610647600f61049888600354610ede90919063ffffffff16565b429063ffffffff610fc416565b9150610688565b610685610678600f61049860035489610ede90919063ffffffff16565b429063ffffffff610ede16565b91505b60085490509091929394565b600a5481565b600d546001600160a01b031681565b60035481565b600c546001600160a01b0316331461070e576040805162461bcd60e51b815260206004820152601e60248201527f6f6e6c7920636f6e7472616374206f776e65722063616e206368616e67650000604482015290519081900360640190fd5b600d80546001600160a01b038381166001600160a01b0319831681179093556040805163095ea7b360e01b81526004810194909452600019602485015251911691730538a9b4f4dcb0cb01a7fa34e17c0ac947c2255391829163095ea7b39160448083019260209291908290030181600087803b15801561078e57600080fd5b505af11580156107a2573d6000803e3d6000fd5b505050506040513d60208110156107b857600080fd5b5050604080516001600160a01b0380851682528516602082015281517f792c21b3a699347e8ba7f050a0a835bed14336a5284e2476670fae2e20a269f1929181900390910190a1505050565b4390565b6000610812610804565b6000549091501561086b576000600354821061083057600354610832565b815b9050600254811115610869576108656005546104b06000546104a460045461049860025488610ede90919063ffffffff16565b6005555b505b60028190556001600160a01b03821615610928576001600160a01b0382166000908152600760205260408120546005546108aa9163ffffffff610ede16565b90508015610926576001600160a01b0383166000908152600660209081526040808320546001909252909120546108fa91906104b090670de0b6b3a7640000906104a4908663ffffffff610f2916565b6001600160a01b0384166000908152600660209081526040808320939093556005546007909152919020555b505b5050565b6001600160a01b0381166000908152600160205260409020545b919050565b600b6020526000908152604090205481565b600061096833610808565b336000908152600b6020908152604080832054600690925290912054610995919061053e906105cd610557565b9050801561055957336000908152600b60205260409020546109bd908263ffffffff610fc416565b336000818152600b60205260408082209390935582516340c10f1960e01b81526004810192909252602482018490529151730538a9b4f4dcb0cb01a7fa34e17c0ac947c22553926340c10f19926044808201939182900301818387803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b50506040805184815290513393507f6fe937bf2c13cbdc6c3e1644deef42cd89a7694c31f592ce251e90727af12e2792509081900360200190a290565b60005490565b600c546001600160a01b031681565b6000610a9733610808565b3360009081526006602052604090205480831180610abe5750600d546001600160a01b0316155b15610acd576000915050610946565b336000908152600660205260408082208054869003905580516340c10f1960e01b8152306004820152602481018690529051730538a9b4f4dcb0cb01a7fa34e17c0ac947c22553926340c10f19926044808201939182900301818387803b158015610b3757600080fd5b505af1158015610b4b573d6000803e3d6000fd5b5050600d54600854600a546009546040805163caa32b9160e01b8152600481018b9052336024820152604481019490945260648401929092526084830152516001600160a01b03909216935083925063caa32b919160a480830192600092919082900301818387803b158015610bc057600080fd5b505af1158015610bd4573d6000803e3d6000fd5b505060085460408051888152602081019290925280513394507f8b8ede3b1a5bbf7eb12af900b210a8f77a6251f55ef3a3caab5250dcf1589c4b9350918290030190a25050919050565b610c2733610808565b811561092857600054610c40908363ffffffff610ede16565b600090815533815260016020526040902054610c62908363ffffffff610ede16565b33600081815260016020526040902091909155610c9b9073ad4f86a25bbc20ffb751f2fac312a0b4d8f88c64908463ffffffff61112316565b60408051838152905133917f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f75919081900360200190a25050565b60025490565b610ce433610808565b8015610d9057600054610cfd908263ffffffff610fc416565b600090815533815260016020526040902054610d1f908263ffffffff610fc416565b33600081815260016020526040902091909155610d599073ad4f86a25bbc20ffb751f2fac312a0b4d8f88c6490308463ffffffff61117516565b60408051828152905133917f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d919081900360200190a25b50565b600c546001600160a01b03163314610df2576040805162461bcd60e51b815260206004820152601b60248201527f63616e2062652063616c6c6564206279206f776e6572206f6e6c790000000000604482015290519081900360640190fd5b610dfc6000610808565b610e078383836111d5565b60045460035460085460408051938452602084019290925282820152517f42bc0b5308138fcf9b84f2d9cabfe315aa695643792e122d567b1bf0f3af3ac59181900360600190a1505050565b730538a9b4f4dcb0cb01a7fa34e17c0ac947c2255381565b73ad4f86a25bbc20ffb751f2fac312a0b4d8f88c6481565b60085481565b60095481565b600080600091506000600454611680029050610ed6670de0b6b3a76400006104a486610498610ec989600054610fc490919063ffffffff16565b869063ffffffff610f8216565b915050915091565b6000610f2083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611201565b90505b92915050565b600082610f3857506000610f23565b82820282848281610f4557fe5b0414610f205760405162461bcd60e51b81526004018080602001828103825260218152602001806114ed6021913960400191505060405180910390fd5b6000610f2083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611298565b600082820183811015610f20576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600060085482101561103257506000610f23565b8261103f57506000610f23565b600061106160016104b06009546104a460085488610ede90919063ffffffff16565b9050600061107e600a546104a48488610f2990919063ffffffff16565b90508481111561108b5750835b949350505050565b6001600160a01b0382166000908152600660205260408120546110b6858461101e565b14156110c45750600061111c565b60085482116110d6575060085461111c565b60006110f860016104b06009546104a460085488610ede90919063ffffffff16565b905060006111176008546104b060095485610f2990919063ffffffff16565b925050505b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526109269084906112fd565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526111cf9085906112fd565b50505050565b670de0b6b3a764000083026004556116808202836111f5826104b0610804565b60035550506008555050565b600081848411156112905760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561125557818101518382015260200161123d565b50505050905090810190601f1680156112825780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836112e75760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561125557818101518382015260200161123d565b5060008385816112f357fe5b0495945050505050565b61130f826001600160a01b03166114b5565b611360576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b6020831061139e5780518252601f19909201916020918201910161137f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611400576040519150601f19603f3d011682016040523d82523d6000602084013e611405565b606091505b50915091508161145c576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156111cf5780806020019051602081101561147857600080fd5b50516111cf5760405162461bcd60e51b815260040180806020018281038252602a81526020018061150e602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470811580159061108b575014159291505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a7231582054f36945a0cce5ed5d391e87ffed604f3c92ad4ab6b3c77fed4f83f75b02e0af64736f6c63430005110032
Deployed Bytecode Sourcemap
15290:12115:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15290:12115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21812:1023;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21812:1023:0;-1:-1:-1;;;;;21812:1023:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;24384:95;;;:::i;:::-;;;;;;;;;;;;;;;;25858:711;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25858:711:0;-1:-1:-1;;;;;25858:711:0;;:::i;:::-;;;;-1:-1:-1;;;;;25858:711:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22843:671;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16350:29;;;:::i;16589:32::-;;;:::i;:::-;;;;-1:-1:-1;;;;;16589:32:0;;;;;;;;;;;;;;15784:30;;;:::i;21329:475::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21329:475:0;-1:-1:-1;;;;;21329:475:0;;:::i;:::-;;24282:90;;;:::i;18558:1274::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18558:1274:0;-1:-1:-1;;;;;18558:1274:0;;:::i;24061:112::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24061:112:0;-1:-1:-1;;;;;24061:112:0;;:::i;16411:49::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16411:49:0;-1:-1:-1;;;;;16411:49:0;;:::i;25396:450::-;;;:::i;24181:93::-;;;:::i;16469:20::-;;;:::i;20621:700::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20621:700:0;;:::i;:::-;;;;;;;;;;;;;;;;;;20219:392;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20219:392:0;;;;;;;;;:::i;23953:100::-;;;:::i;19840:371::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19840:371:0;;:::i;18116:434::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18116:434:0;;;;;;;;;;;;:::i;15497:88::-;;;:::i;15399:87::-;;;:::i;16214:37::-;;;:::i;16287:30::-;;;:::i;23644:301::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23644:301:0;;:::i;21812:1023::-;21867:14;21883:18;21949:15;21967:13;:11;:13::i;:::-;22033:22;;22001:29;22174:12;21949:31;;-1:-1:-1;22033:22:0;22174:16;22170:410;;22221:27;22261:15;;22251:7;:25;:53;;22289:15;;22251:53;;;22279:7;22251:53;22221:83;;22345:16;;22323:19;:38;22319:250;;;22406:147;22531:21;22406:102;22495:12;;22406:84;22470:19;;22406:41;22430:16;;22406:19;:23;;:41;;;;:::i;:::-;:63;:84;:63;:84;:::i;:::-;:88;:102;:88;:102;:::i;:::-;:124;:147;:124;:147;:::i;:::-;22382:171;;22319:250;22170:410;;-1:-1:-1;;;;;22773:22:0;;;;;;:13;:22;;;;;;;;;22736:12;:21;;;;;;22664:26;:35;;;;;;22605:191;;22773:22;22605:153;;:116;;22716:4;;22605:96;;22638:62;;:21;;:62;:25;:62;:::i;:::-;-1:-1:-1;;;;;22605:18:0;;;;;;:9;:18;;;;;;;:96;:32;:96;:::i;:153::-;:167;:191;:167;:191;:::i;:::-;22592:204;;22826:1;22817:10;;21812:1023;;;;;:::o;24384:95::-;24456:15;24384:95;;:::o;25858:711::-;26137:12;25935:19;;;;;26174:16;:14;:16::i;:::-;-1:-1:-1;;;;;26225:26:0;;;;;;:12;:26;;;;;;;;;26274:13;:27;;;;;;26225:26;;-1:-1:-1;26274:27:0;-1:-1:-1;26160:30:0;;-1:-1:-1;26338:21:0;26238:12;26338:7;:21::i;:::-;-1:-1:-1;;;;;26439:26:0;;;;;;:13;:26;;;;;;26312:47;;-1:-1:-1;26389:77:0;;-1:-1:-1;26389:45:0;26312:47;26417:16;:14;:16::i;:::-;26389:15;:45::i;:77::-;26370:96;;26493:58;26513:10;26525:12;26539:11;26493:19;:58::i;:::-;26477:74;;25858:711;;;;;;;;:::o;22843:671::-;22892:20;22914:26;22942:29;22973:28;23003:26;23057:13;:11;:13::i;:::-;23105:15;;23152:19;;23042:28;;-1:-1:-1;23105:15:0;-1:-1:-1;23152:29:0;;23176:4;23152:29;:23;:29;:::i;:::-;23131:50;;23211:15;;23196:12;:30;23192:263;;;23265:62;23285:41;23323:2;23285:33;23305:12;23285:15;;:19;;:33;;;;:::i;:41::-;23265:15;;:62;:19;:62;:::i;:::-;23242:85;;23192:263;;;23381:62;23401:41;23439:2;23401:33;23418:15;;23401:12;:16;;:33;;;;:::i;:41::-;23381:15;;:62;:19;:62;:::i;:::-;23358:85;;23192:263;23484:22;;23465:41;;22843:671;;;;;:::o;16350:29::-;;;;:::o;16589:32::-;;;-1:-1:-1;;;;;16589:32:0;;:::o;15784:30::-;;;;:::o;21329:475::-;21415:5;;-1:-1:-1;;;;;21415:5:0;21401:10;:19;21393:62;;;;;-1:-1:-1;;;21393:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21489:17;;;-1:-1:-1;;;;;21517:33:0;;;-1:-1:-1;;;;;;21517:33:0;;;;;;;21628:106;;;-1:-1:-1;;;21628:106:0;;;;;;;;;-1:-1:-1;;21628:106:0;;;;;21489:17;;;15542:42;;;;21628:23;;:106;;;;;;;;;;;;;;21468:18;15542:42;21628:106;;;5:2:-1;;;;30:1;27;20:12;5:2;21628:106:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21628:106:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;21752:44:0;;;-1:-1:-1;;;;;21752:44:0;;;;;;;21628:106;21752:44;;;;;;;;;;;;;;;;21329:475;;;:::o;24282:90::-;24352:12;24282:90;:::o;18558:1274::-;18721:15;18739:13;:11;:13::i;:::-;18886:1;18871:12;18721:31;;-1:-1:-1;18871:16:0;18867:398;;18904:27;18944:15;;18934:7;:25;:53;;18972:15;;18934:53;;;18962:7;18934:53;18904:83;;19028:16;;19006:19;:38;19002:252;;;19090:148;19215:22;;19090:102;19179:12;;19090:84;19154:19;;19090:41;19114:16;;19090:19;:23;;:41;;;;:::i;:148::-;19065:22;:173;19002:252;18867:398;;19277:16;:26;;;-1:-1:-1;;;;;19320:21:0;;;19316:509;;-1:-1:-1;;;;;19425:35:0;;19360;19425;;;:26;:35;;;;;;19398:22;;:63;;;:26;:63;:::i;:::-;19360:101;-1:-1:-1;19482:31:0;;19478:336;;-1:-1:-1;;;;;19695:21:0;;;;;;:12;:21;;;;;;;;;19575:9;:18;;;;;;;:142;;19695:21;19575:97;;19667:4;;19575:69;;19616:27;19575:69;:40;:69;:::i;:142::-;-1:-1:-1;;;;;19534:21:0;;;;;;:12;:21;;;;;;;;:183;;;;19776:22;;19738:26;:35;;;;;;:60;19478:336;19316:509;;18558:1274;;:::o;24061:112::-;-1:-1:-1;;;;;24147:18:0;;24120:7;24147:18;;;:9;:18;;;;;;24061:112;;;;:::o;16411:49::-;;;;;;;;;;;;;:::o;25396:450::-;25438:14;25464:24;25477:10;25464:12;:24::i;:::-;25586:10;25572:25;;;;:13;:25;;;;;;;;;25524:12;:24;;;;;;;25508:90;;25572:25;25508:59;;25550:16;:14;:16::i;25508:90::-;25499:99;-1:-1:-1;25622:10:0;;25619:220;;25690:10;25676:25;;;;:13;:25;;;;;;:37;;25706:6;25676:37;:29;:37;:::i;:::-;25662:10;25648:25;;;;:13;:25;;;;;;:65;;;;25730:35;;-1:-1:-1;;;25730:35:0;;;;;;;;;;;;;;;;;15542:42;;25730:15;;:35;;;;;;;;;;;25648:25;15542:42;25730:35;;;5:2:-1;;;;30:1;27;20:12;5:2;25730:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;25787:40:0;;;;;;;;25808:10;;-1:-1:-1;25787:40:0;;-1:-1:-1;25787:40:0;;;;;;;;25396:450;:::o;24181:93::-;24227:7;24254:12;24181:93;:::o;16469:20::-;;;-1:-1:-1;;;;;16469:20:0;;:::o;20621:700::-;20679:4;20696:24;20709:10;20696:12;:24::i;:::-;20765:10;20731:18;20752:24;;;:12;:24;;;;;;20795:19;;;;:54;;-1:-1:-1;20818:17:0;;-1:-1:-1;;;;;20818:17:0;:31;20795:54;20791:99;;;20873:5;20866:12;;;;;20791:99;20915:10;20902:24;;;;:12;:24;;;;;;:34;;;;;;;21024:38;;-1:-1:-1;;;21024:38:0;;21048:4;21024:38;;;;;;;;;;;;15542:42;;21024:15;;:38;;;;;;;;;;;20902:24;15542:42;21024:38;;;5:2:-1;;;;30:1;27;20:12;5:2;21024:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;21112:17:0;;21185:22;;21209:14;;21225:15;;21141:100;;;-1:-1:-1;;;21141:100:0;;;;;;;;21173:10;21141:100;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21112:17:0;;;;-1:-1:-1;21112:17:0;;-1:-1:-1;21141:22:0;;:100;;;;;21075:22;;21141:100;;;;;;;21075:22;21112:17;21141:100;;;5:2:-1;;;;30:1;27;20:12;5:2;21141:100:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;21290:22:0;;21257:56;;;;;;;;;;;;;;;21270:10;;-1:-1:-1;21257:56:0;;-1:-1:-1;21257:56:0;;;;;;;20621:700;;;;;:::o;20219:392::-;20282:24;20295:10;20282:12;:24::i;:::-;20323:10;;20319:261;;20365:12;;:24;;20382:6;20365:24;:16;:24;:::i;:::-;20350:12;:39;;;20438:10;20428:21;;:9;:21;;;;;;:33;;20454:6;20428:33;:25;:33;:::i;:::-;20414:10;20404:21;;;;:9;:21;;;;;:57;;;;20476:44;;15443:42;;20513:6;20476:44;:24;:44;:::i;:::-;20540:28;;;;;;;;20549:10;;20540:28;;;;;;;;;;-1:-1:-1;;20219:392:0:o;23953:100::-;24029:16;;23953:100;:::o;19840:371::-;19889:24;19902:10;19889:12;:24::i;:::-;19930:10;;19926:278;;19972:12;;:24;;19989:6;19972:24;:16;:24;:::i;:::-;19957:12;:39;;;20045:10;20035:21;;:9;:21;;;;;;:33;;20061:6;20035:33;:25;:33;:::i;:::-;20021:10;20011:21;;;;:9;:21;;;;;:57;;;;20083:63;;15443:42;;20132:4;20139:6;20083:63;:28;:63;:::i;:::-;20166:26;;;;;;;;20173:10;;20166:26;;;;;;;;;;19926:278;19840:371;:::o;18116:434::-;18271:5;;-1:-1:-1;;;;;18271:5:0;18257:10;:19;18249:59;;;;;-1:-1:-1;;;18249:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18319:24;18340:1;18319:12;:24::i;:::-;18356:83;18383:19;18404:23;18429:9;18356:26;:83::i;:::-;18481:19;;18502:15;;18519:22;;18457:85;;;;;;;;;;;;;;;;;;;;;;;;;;;18116:434;;;:::o;15497:88::-;15542:42;15497:88;:::o;15399:87::-;15443:42;15399:87;:::o;16214:37::-;;;;:::o;16287:30::-;;;;:::o;23644:301::-;23713:14;23729:18;23769:1;23760:10;;23781:29;23813:19;;23835:4;23813:26;23781:58;;23864:73;23932:4;23864:63;23920:6;23864:51;23890:24;23907:6;23890:12;;:16;;:24;;;;:::i;:::-;23864:21;;:51;:25;:51;:::i;:73::-;23850:87;;23644:301;;;;:::o;1577:136::-;1635:7;1662:43;1666:1;1669;1662:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1655:50;;1577:136;;;;;:::o;2493:471::-;2551:7;2796:6;2792:47;;-1:-1:-1;2826:1:0;2819:8;;2792:47;2863:5;;;2867:1;2863;:5;:1;2887:5;;;;;:10;2879:56;;;;-1:-1:-1;;;2879:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3432:132;3490:7;3517:39;3521:1;3524;3517:39;;;;;;;;;;;;;;;;;:3;:39::i;1121:181::-;1179:7;1211:5;;;1235:6;;;;1227:46;;;;;-1:-1:-1;;;1227:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;24491:887;24575:7;24670:22;;24663:4;:29;24660:68;;;-1:-1:-1;24715:1:0;24708:8;;24660:68;24784:17;24780:57;;-1:-1:-1;24824:1:0;24817:8;;24780:57;24929:25;24966:80;25044:1;24966:63;25013:15;;24966:32;24975:22;;24966:4;:8;;:32;;;;:::i;:80::-;24929:117;;25133:21;25166:75;25226:14;;25166:45;25193:17;25166:12;:26;;:45;;;;:::i;:75::-;25133:108;;25272:12;25257;:27;25254:85;;;-1:-1:-1;25315:12:0;25254:85;25358:12;24491:887;-1:-1:-1;;;;24491:887:0:o;26581:819::-;-1:-1:-1;;;;;26816:25:0;;26689:7;26816:25;;;:12;:25;;;;;;26777:35;26793:12;26807:4;26777:15;:35::i;:::-;:64;26774:103;;;-1:-1:-1;26864:1:0;26857:8;;26774:103;26980:22;;26972:4;:30;26969:90;;-1:-1:-1;27025:22:0;;27018:29;;26969:90;27108:25;27145:80;27223:1;27145:63;27192:15;;27145:32;27154:22;;27145:4;:8;;:32;;;;:::i;:80::-;27108:117;;27238:21;27271:86;27334:22;;27271:48;27303:15;;27271:17;:31;;:48;;;;:::i;:86::-;27238:119;-1:-1:-1;;;26581:819:0;;;;;;:::o;12130:176::-;12239:58;;;-1:-1:-1;;;;;12239:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;12239:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;12213:85:0;;12232:5;;12213:18;:85::i;12314:204::-;12441:68;;;-1:-1:-1;;;;;12441:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;12441:68:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;12415:95:0;;12434:5;;12415:18;:95::i;:::-;12314:204;;;;:::o;17663:445::-;17980:4;17958:27;;17936:19;:49;17860:4;17834:30;;17904:19;18014:39;17834:30;18014:13;:11;:13::i;:39::-;17996:15;:57;-1:-1:-1;;18066:22:0;:34;-1:-1:-1;;17663:445:0:o;2050:192::-;2136:7;2172:12;2164:6;;;;2156:29;;;;-1:-1:-1;;;2156:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2156:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2208:5:0;;;2050:192::o;4094:345::-;4180:7;4282:12;4275:5;4267:28;;;;-1:-1:-1;;;4267:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;4267:28:0;;4306:9;4322:1;4318;:5;;;;;;;4094:345;-1:-1:-1;;;;;4094:345:0:o;14169:1114::-;14773:27;14781:5;-1:-1:-1;;;;;14773:25:0;;:27::i;:::-;14765:71;;;;;-1:-1:-1;;;14765:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14910:12;14924:23;14959:5;-1:-1:-1;;;;;14951:19:0;14971:4;14951:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;14951:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;14909:67:0;;;;14995:7;14987:52;;;;;-1:-1:-1;;;14987:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15056:17;;:21;15052:224;;15198:10;15187:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15187:30:0;15179:85;;;;-1:-1:-1;;;15179:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9061:810;9121:4;9780:20;;9623:66;9820:15;;;;;:42;;-1:-1:-1;9839:23:0;;;9812:51;-1:-1:-1;;9061:810:0:o
Swarm Source
bzzr://54f36945a0cce5ed5d391e87ffed604f3c92ad4ab6b3c77fed4f83f75b02e0af
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 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.