Source Code
Latest 25 from a total of 2,037 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Stake | 20772709 | 534 days ago | IN | 0 ETH | 0.00243967 | ||||
| Unstake | 20268604 | 604 days ago | IN | 0 ETH | 0.00027917 | ||||
| Unstake | 16658219 | 1111 days ago | IN | 0 ETH | 0.00179836 | ||||
| Unstake | 12879325 | 1687 days ago | IN | 0 ETH | 0.00083408 | ||||
| Unstake | 12772430 | 1704 days ago | IN | 0 ETH | 0.00037788 | ||||
| Incv Reward Clai... | 12772427 | 1704 days ago | IN | 0 ETH | 0.00072821 | ||||
| Unstake | 12770931 | 1704 days ago | IN | 0 ETH | 0.00070836 | ||||
| Unstake | 12770918 | 1704 days ago | IN | 0 ETH | 0.00093354 | ||||
| Incv Reward Clai... | 12767769 | 1704 days ago | IN | 0 ETH | 0.00114196 | ||||
| Incv Reward Clai... | 12766591 | 1704 days ago | IN | 0 ETH | 0.00133229 | ||||
| Incv Reward Clai... | 12766314 | 1705 days ago | IN | 0 ETH | 0.00123713 | ||||
| Incv Reward Clai... | 12762941 | 1705 days ago | IN | 0 ETH | 0.0010624 | ||||
| Unstake | 12762938 | 1705 days ago | IN | 0 ETH | 0.00047224 | ||||
| Unstake | 12762936 | 1705 days ago | IN | 0 ETH | 0.00073185 | ||||
| Incv Reward Clai... | 12762930 | 1705 days ago | IN | 0 ETH | 0.00139881 | ||||
| Unstake | 12759795 | 1706 days ago | IN | 0 ETH | 0.00047224 | ||||
| Incv Reward Clai... | 12759773 | 1706 days ago | IN | 0 ETH | 0.00080913 | ||||
| Unstake | 12747949 | 1707 days ago | IN | 0 ETH | 0.00047236 | ||||
| Unstake | 12747239 | 1708 days ago | IN | 0 ETH | 0.00051946 | ||||
| Incv Reward Clai... | 12744882 | 1708 days ago | IN | 0 ETH | 0.0008914 | ||||
| Unstake | 12744869 | 1708 days ago | IN | 0 ETH | 0.00073197 | ||||
| Incv Reward Clai... | 12744551 | 1708 days ago | IN | 0 ETH | 0.00136179 | ||||
| Unstake | 12744128 | 1708 days ago | IN | 0 ETH | 0.0011106 | ||||
| Incv Reward Clai... | 12744128 | 1708 days ago | IN | 0 ETH | 0.00202282 | ||||
| Incv Reward Clai... | 12743160 | 1708 days ago | IN | 0 ETH | 0.00276224 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
CourtFarming_RoomLPStake
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_RoomLPStake {
using SafeMath for uint256;
using SafeERC20 for IERC20;
IERC20 public constant stakedToken = IERC20(0xBE55c87dFf2a9f5c95cB5C07572C51fd91fe0732);
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 = 57870370370370369;
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
60806040523480156200001157600080fd5b50600c80546001600160a01b0319163317905563609d30e06008819055620151806009556001600a5566cd98cb94f23b4190605a906200005e90839083906001600160e01b036200007d16565b620000716001600160e01b03620000c916565b600255506200012f9050565b670de0b6b3a76400008302600455611680820283620000bd82620000a96001600160e01b03620000c916565b620000cd60201b62000fc41790919060201c565b60035550506008555050565b4390565b60008282018381101562000128576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b61156c806200013f6000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c806372dacd79116100de578063a694fc3a11610097578063cc7a262e11610071578063cc7a262e14610401578063d6db152d14610409578063eb09b6cb14610411578063ef0b75691461041957610173565b8063a694fc3a146103b3578063aed5900f146103d0578063c3443b69146103f957610173565b806372dacd791461033d578063817b1cd2146103455780638da5cb5b1461034d57806399b015f0146103555780639ebea88c14610386578063a218141b146103ab57610173565b8063568c9a7011610130578063568c9a701461029357806357371ade1461029b57806357e871e7146102c3578063632447c9146102cb57806370a08231146102f157806371f61cae1461031757610173565b80630700037d1461017857806329cb924d146101b7578063366dc083146101d1578063374d496a146102345780633d99af2e14610267578063528ebbda1461026f575b600080fd5b61019e6004803603602081101561018e57600080fd5b50356001600160a01b0316610436565b6040805192835260208301919091528051918290030190f35b6101bf610557565b60408051918252519081900360200190f35b6101f7600480360360208110156101e757600080fd5b50356001600160a01b031661055c565b604080516001600160a01b0390971687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b61023c6105eb565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b6101bf610694565b61027761069a565b604080516001600160a01b039092168252519081900360200190f35b6101bf6106a9565b6102c1600480360360208110156102b157600080fd5b50356001600160a01b03166106af565b005b6101bf610804565b6102c1600480360360208110156102e157600080fd5b50356001600160a01b0316610808565b6101bf6004803603602081101561030757600080fd5b50356001600160a01b031661092c565b6101bf6004803603602081101561032d57600080fd5b50356001600160a01b031661094b565b6101bf61095d565b6101bf610a77565b610277610a7d565b6103726004803603602081101561036b57600080fd5b5035610a8c565b604080519115158252519081900360200190f35b6102c16004803603604081101561039c57600080fd5b50803590602001351515610c1e565b6101bf610cd5565b6102c1600480360360208110156103c957600080fd5b5035610cdb565b6102c1600480360360608110156103e657600080fd5b5080359060208101359060400135610d93565b610277610e53565b610277610e6b565b6101bf610e83565b6101bf610e89565b61019e6004803603602081101561042f57600080fd5b5035610e8f565b6000806000610443610804565b60055460005491925090156104c1576000600354831061046557600354610467565b825b90506002548111156104bf576104bc826104b06000546104a460045461049860025488610ede90919063ffffffff16565b9063ffffffff610f2916565b9063ffffffff610f8216565b9063ffffffff610fc416565b91505b505b6001600160a01b0385166000908152600b60209081526040808320546006835281842054600790935292205461054a929161053e916104b090670de0b6b3a7640000906104a49061051990899063ffffffff610ede16565b6001600160a01b038d166000908152600160205260409020549063ffffffff610f2916565b9063ffffffff610ede16565b9250600093505050915091565b425b90565b8060008080808061056b610557565b6001600160a01b038816600090815260066020908152604080832054600b90925282205490975095509091506105a088610436565b6001600160a01b0389166000908152600b60205260409020549092506105d2915061053e836105cd610557565b61101e565b93506105df818984611093565b92505091939550919395565b60008060008060006105fb610804565b600354600454919650935061061e90670de0b6b3a764000063ffffffff610f8216565b935060035485101561065b57610654610647600f61049888600354610ede90919063ffffffff16565b429063ffffffff610fc416565b9150610688565b610685610678600f61049860035489610ede90919063ffffffff16565b429063ffffffff610ede16565b91505b60085490509091929394565b600a5481565b600d546001600160a01b031681565b60035481565b600c546001600160a01b0316331461070e576040805162461bcd60e51b815260206004820152601e60248201527f6f6e6c7920636f6e7472616374206f776e65722063616e206368616e67650000604482015290519081900360640190fd5b600d80546001600160a01b038381166001600160a01b0319831681179093556040805163095ea7b360e01b81526004810194909452600019602485015251911691730538a9b4f4dcb0cb01a7fa34e17c0ac947c2255391829163095ea7b39160448083019260209291908290030181600087803b15801561078e57600080fd5b505af11580156107a2573d6000803e3d6000fd5b505050506040513d60208110156107b857600080fd5b5050604080516001600160a01b0380851682528516602082015281517f792c21b3a699347e8ba7f050a0a835bed14336a5284e2476670fae2e20a269f1929181900390910190a1505050565b4390565b6000610812610804565b6000549091501561086b576000600354821061083057600354610832565b815b9050600254811115610869576108656005546104b06000546104a460045461049860025488610ede90919063ffffffff16565b6005555b505b60028190556001600160a01b03821615610928576001600160a01b0382166000908152600760205260408120546005546108aa9163ffffffff610ede16565b90508015610926576001600160a01b0383166000908152600660209081526040808320546001909252909120546108fa91906104b090670de0b6b3a7640000906104a4908663ffffffff610f2916565b6001600160a01b0384166000908152600660209081526040808320939093556005546007909152919020555b505b5050565b6001600160a01b0381166000908152600160205260409020545b919050565b600b6020526000908152604090205481565b600061096833610808565b336000908152600b6020908152604080832054600690925290912054610995919061053e906105cd610557565b9050801561055957336000908152600b60205260409020546109bd908263ffffffff610fc416565b336000818152600b60205260408082209390935582516340c10f1960e01b81526004810192909252602482018490529151730538a9b4f4dcb0cb01a7fa34e17c0ac947c22553926340c10f19926044808201939182900301818387803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b50506040805184815290513393507f6fe937bf2c13cbdc6c3e1644deef42cd89a7694c31f592ce251e90727af12e2792509081900360200190a290565b60005490565b600c546001600160a01b031681565b6000610a9733610808565b3360009081526006602052604090205480831180610abe5750600d546001600160a01b0316155b15610acd576000915050610946565b336000908152600660205260408082208054869003905580516340c10f1960e01b8152306004820152602481018690529051730538a9b4f4dcb0cb01a7fa34e17c0ac947c22553926340c10f19926044808201939182900301818387803b158015610b3757600080fd5b505af1158015610b4b573d6000803e3d6000fd5b5050600d54600854600a546009546040805163caa32b9160e01b8152600481018b9052336024820152604481019490945260648401929092526084830152516001600160a01b03909216935083925063caa32b919160a480830192600092919082900301818387803b158015610bc057600080fd5b505af1158015610bd4573d6000803e3d6000fd5b505060085460408051888152602081019290925280513394507f8b8ede3b1a5bbf7eb12af900b210a8f77a6251f55ef3a3caab5250dcf1589c4b9350918290030190a25050919050565b610c2733610808565b811561092857600054610c40908363ffffffff610ede16565b600090815533815260016020526040902054610c62908363ffffffff610ede16565b33600081815260016020526040902091909155610c9b9073be55c87dff2a9f5c95cb5c07572c51fd91fe0732908463ffffffff61112316565b60408051838152905133917f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f75919081900360200190a25050565b60025490565b610ce433610808565b8015610d9057600054610cfd908263ffffffff610fc416565b600090815533815260016020526040902054610d1f908263ffffffff610fc416565b33600081815260016020526040902091909155610d599073be55c87dff2a9f5c95cb5c07572c51fd91fe073290308463ffffffff61117516565b60408051828152905133917f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d919081900360200190a25b50565b600c546001600160a01b03163314610df2576040805162461bcd60e51b815260206004820152601b60248201527f63616e2062652063616c6c6564206279206f776e6572206f6e6c790000000000604482015290519081900360640190fd5b610dfc6000610808565b610e078383836111d5565b60045460035460085460408051938452602084019290925282820152517f42bc0b5308138fcf9b84f2d9cabfe315aa695643792e122d567b1bf0f3af3ac59181900360600190a1505050565b730538a9b4f4dcb0cb01a7fa34e17c0ac947c2255381565b73be55c87dff2a9f5c95cb5c07572c51fd91fe073281565b60085481565b60095481565b600080600091506000600454611680029050610ed6670de0b6b3a76400006104a486610498610ec989600054610fc490919063ffffffff16565b869063ffffffff610f8216565b915050915091565b6000610f2083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611201565b90505b92915050565b600082610f3857506000610f23565b82820282848281610f4557fe5b0414610f205760405162461bcd60e51b81526004018080602001828103825260218152602001806114ed6021913960400191505060405180910390fd5b6000610f2083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611298565b600082820183811015610f20576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600060085482101561103257506000610f23565b8261103f57506000610f23565b600061106160016104b06009546104a460085488610ede90919063ffffffff16565b9050600061107e600a546104a48488610f2990919063ffffffff16565b90508481111561108b5750835b949350505050565b6001600160a01b0382166000908152600660205260408120546110b6858461101e565b14156110c45750600061111c565b60085482116110d6575060085461111c565b60006110f860016104b06009546104a460085488610ede90919063ffffffff16565b905060006111176008546104b060095485610f2990919063ffffffff16565b925050505b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526109269084906112fd565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526111cf9085906112fd565b50505050565b670de0b6b3a764000083026004556116808202836111f5826104b0610804565b60035550506008555050565b600081848411156112905760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561125557818101518382015260200161123d565b50505050905090810190601f1680156112825780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836112e75760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561125557818101518382015260200161123d565b5060008385816112f357fe5b0495945050505050565b61130f826001600160a01b03166114b5565b611360576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b6020831061139e5780518252601f19909201916020918201910161137f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611400576040519150601f19603f3d011682016040523d82523d6000602084013e611405565b606091505b50915091508161145c576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156111cf5780806020019051602081101561147857600080fd5b50516111cf5760405162461bcd60e51b815260040180806020018281038252602a81526020018061150e602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470811580159061108b575014159291505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a72315820457ce1defb414a277df5ab2b0f6c28d2fafd109635516b2592036bc887117f7c64736f6c63430005110032
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101735760003560e01c806372dacd79116100de578063a694fc3a11610097578063cc7a262e11610071578063cc7a262e14610401578063d6db152d14610409578063eb09b6cb14610411578063ef0b75691461041957610173565b8063a694fc3a146103b3578063aed5900f146103d0578063c3443b69146103f957610173565b806372dacd791461033d578063817b1cd2146103455780638da5cb5b1461034d57806399b015f0146103555780639ebea88c14610386578063a218141b146103ab57610173565b8063568c9a7011610130578063568c9a701461029357806357371ade1461029b57806357e871e7146102c3578063632447c9146102cb57806370a08231146102f157806371f61cae1461031757610173565b80630700037d1461017857806329cb924d146101b7578063366dc083146101d1578063374d496a146102345780633d99af2e14610267578063528ebbda1461026f575b600080fd5b61019e6004803603602081101561018e57600080fd5b50356001600160a01b0316610436565b6040805192835260208301919091528051918290030190f35b6101bf610557565b60408051918252519081900360200190f35b6101f7600480360360208110156101e757600080fd5b50356001600160a01b031661055c565b604080516001600160a01b0390971687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b61023c6105eb565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b6101bf610694565b61027761069a565b604080516001600160a01b039092168252519081900360200190f35b6101bf6106a9565b6102c1600480360360208110156102b157600080fd5b50356001600160a01b03166106af565b005b6101bf610804565b6102c1600480360360208110156102e157600080fd5b50356001600160a01b0316610808565b6101bf6004803603602081101561030757600080fd5b50356001600160a01b031661092c565b6101bf6004803603602081101561032d57600080fd5b50356001600160a01b031661094b565b6101bf61095d565b6101bf610a77565b610277610a7d565b6103726004803603602081101561036b57600080fd5b5035610a8c565b604080519115158252519081900360200190f35b6102c16004803603604081101561039c57600080fd5b50803590602001351515610c1e565b6101bf610cd5565b6102c1600480360360208110156103c957600080fd5b5035610cdb565b6102c1600480360360608110156103e657600080fd5b5080359060208101359060400135610d93565b610277610e53565b610277610e6b565b6101bf610e83565b6101bf610e89565b61019e6004803603602081101561042f57600080fd5b5035610e8f565b6000806000610443610804565b60055460005491925090156104c1576000600354831061046557600354610467565b825b90506002548111156104bf576104bc826104b06000546104a460045461049860025488610ede90919063ffffffff16565b9063ffffffff610f2916565b9063ffffffff610f8216565b9063ffffffff610fc416565b91505b505b6001600160a01b0385166000908152600b60209081526040808320546006835281842054600790935292205461054a929161053e916104b090670de0b6b3a7640000906104a49061051990899063ffffffff610ede16565b6001600160a01b038d166000908152600160205260409020549063ffffffff610f2916565b9063ffffffff610ede16565b9250600093505050915091565b425b90565b8060008080808061056b610557565b6001600160a01b038816600090815260066020908152604080832054600b90925282205490975095509091506105a088610436565b6001600160a01b0389166000908152600b60205260409020549092506105d2915061053e836105cd610557565b61101e565b93506105df818984611093565b92505091939550919395565b60008060008060006105fb610804565b600354600454919650935061061e90670de0b6b3a764000063ffffffff610f8216565b935060035485101561065b57610654610647600f61049888600354610ede90919063ffffffff16565b429063ffffffff610fc416565b9150610688565b610685610678600f61049860035489610ede90919063ffffffff16565b429063ffffffff610ede16565b91505b60085490509091929394565b600a5481565b600d546001600160a01b031681565b60035481565b600c546001600160a01b0316331461070e576040805162461bcd60e51b815260206004820152601e60248201527f6f6e6c7920636f6e7472616374206f776e65722063616e206368616e67650000604482015290519081900360640190fd5b600d80546001600160a01b038381166001600160a01b0319831681179093556040805163095ea7b360e01b81526004810194909452600019602485015251911691730538a9b4f4dcb0cb01a7fa34e17c0ac947c2255391829163095ea7b39160448083019260209291908290030181600087803b15801561078e57600080fd5b505af11580156107a2573d6000803e3d6000fd5b505050506040513d60208110156107b857600080fd5b5050604080516001600160a01b0380851682528516602082015281517f792c21b3a699347e8ba7f050a0a835bed14336a5284e2476670fae2e20a269f1929181900390910190a1505050565b4390565b6000610812610804565b6000549091501561086b576000600354821061083057600354610832565b815b9050600254811115610869576108656005546104b06000546104a460045461049860025488610ede90919063ffffffff16565b6005555b505b60028190556001600160a01b03821615610928576001600160a01b0382166000908152600760205260408120546005546108aa9163ffffffff610ede16565b90508015610926576001600160a01b0383166000908152600660209081526040808320546001909252909120546108fa91906104b090670de0b6b3a7640000906104a4908663ffffffff610f2916565b6001600160a01b0384166000908152600660209081526040808320939093556005546007909152919020555b505b5050565b6001600160a01b0381166000908152600160205260409020545b919050565b600b6020526000908152604090205481565b600061096833610808565b336000908152600b6020908152604080832054600690925290912054610995919061053e906105cd610557565b9050801561055957336000908152600b60205260409020546109bd908263ffffffff610fc416565b336000818152600b60205260408082209390935582516340c10f1960e01b81526004810192909252602482018490529151730538a9b4f4dcb0cb01a7fa34e17c0ac947c22553926340c10f19926044808201939182900301818387803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b50506040805184815290513393507f6fe937bf2c13cbdc6c3e1644deef42cd89a7694c31f592ce251e90727af12e2792509081900360200190a290565b60005490565b600c546001600160a01b031681565b6000610a9733610808565b3360009081526006602052604090205480831180610abe5750600d546001600160a01b0316155b15610acd576000915050610946565b336000908152600660205260408082208054869003905580516340c10f1960e01b8152306004820152602481018690529051730538a9b4f4dcb0cb01a7fa34e17c0ac947c22553926340c10f19926044808201939182900301818387803b158015610b3757600080fd5b505af1158015610b4b573d6000803e3d6000fd5b5050600d54600854600a546009546040805163caa32b9160e01b8152600481018b9052336024820152604481019490945260648401929092526084830152516001600160a01b03909216935083925063caa32b919160a480830192600092919082900301818387803b158015610bc057600080fd5b505af1158015610bd4573d6000803e3d6000fd5b505060085460408051888152602081019290925280513394507f8b8ede3b1a5bbf7eb12af900b210a8f77a6251f55ef3a3caab5250dcf1589c4b9350918290030190a25050919050565b610c2733610808565b811561092857600054610c40908363ffffffff610ede16565b600090815533815260016020526040902054610c62908363ffffffff610ede16565b33600081815260016020526040902091909155610c9b9073be55c87dff2a9f5c95cb5c07572c51fd91fe0732908463ffffffff61112316565b60408051838152905133917f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f75919081900360200190a25050565b60025490565b610ce433610808565b8015610d9057600054610cfd908263ffffffff610fc416565b600090815533815260016020526040902054610d1f908263ffffffff610fc416565b33600081815260016020526040902091909155610d599073be55c87dff2a9f5c95cb5c07572c51fd91fe073290308463ffffffff61117516565b60408051828152905133917f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d919081900360200190a25b50565b600c546001600160a01b03163314610df2576040805162461bcd60e51b815260206004820152601b60248201527f63616e2062652063616c6c6564206279206f776e6572206f6e6c790000000000604482015290519081900360640190fd5b610dfc6000610808565b610e078383836111d5565b60045460035460085460408051938452602084019290925282820152517f42bc0b5308138fcf9b84f2d9cabfe315aa695643792e122d567b1bf0f3af3ac59181900360600190a1505050565b730538a9b4f4dcb0cb01a7fa34e17c0ac947c2255381565b73be55c87dff2a9f5c95cb5c07572c51fd91fe073281565b60085481565b60095481565b600080600091506000600454611680029050610ed6670de0b6b3a76400006104a486610498610ec989600054610fc490919063ffffffff16565b869063ffffffff610f8216565b915050915091565b6000610f2083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611201565b90505b92915050565b600082610f3857506000610f23565b82820282848281610f4557fe5b0414610f205760405162461bcd60e51b81526004018080602001828103825260218152602001806114ed6021913960400191505060405180910390fd5b6000610f2083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611298565b600082820183811015610f20576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600060085482101561103257506000610f23565b8261103f57506000610f23565b600061106160016104b06009546104a460085488610ede90919063ffffffff16565b9050600061107e600a546104a48488610f2990919063ffffffff16565b90508481111561108b5750835b949350505050565b6001600160a01b0382166000908152600660205260408120546110b6858461101e565b14156110c45750600061111c565b60085482116110d6575060085461111c565b60006110f860016104b06009546104a460085488610ede90919063ffffffff16565b905060006111176008546104b060095485610f2990919063ffffffff16565b925050505b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526109269084906112fd565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526111cf9085906112fd565b50505050565b670de0b6b3a764000083026004556116808202836111f5826104b0610804565b60035550506008555050565b600081848411156112905760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561125557818101518382015260200161123d565b50505050905090810190601f1680156112825780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836112e75760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561125557818101518382015260200161123d565b5060008385816112f357fe5b0495945050505050565b61130f826001600160a01b03166114b5565b611360576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b6020831061139e5780518252601f19909201916020918201910161137f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611400576040519150601f19603f3d011682016040523d82523d6000602084013e611405565b606091505b50915091508161145c576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156111cf5780806020019051602081101561147857600080fd5b50516111cf5760405162461bcd60e51b815260040180806020018281038252602a81526020018061150e602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470811580159061108b575014159291505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a72315820457ce1defb414a277df5ab2b0f6c28d2fafd109635516b2592036bc887117f7c64736f6c63430005110032
Deployed Bytecode Sourcemap
15290:12121:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15290:12121:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21820:1023;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21820:1023:0;-1:-1:-1;;;;;21820:1023:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;24392:95;;;:::i;:::-;;;;;;;;;;;;;;;;25866:711;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25866:711:0;-1:-1:-1;;;;;25866:711:0;;:::i;:::-;;;;-1:-1:-1;;;;;25866:711:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22851:671;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16352:29;;;:::i;16591:32::-;;;:::i;:::-;;;;-1:-1:-1;;;;;16591:32:0;;;;;;;;;;;;;;15786:30;;;:::i;21337:475::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21337:475:0;-1:-1:-1;;;;;21337:475:0;;:::i;:::-;;24290:90;;;:::i;18566:1274::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18566:1274:0;-1:-1:-1;;;;;18566:1274:0;;:::i;24069:112::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24069:112:0;-1:-1:-1;;;;;24069:112:0;;:::i;16413:49::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16413:49:0;-1:-1:-1;;;;;16413:49:0;;:::i;25404:450::-;;;:::i;24189:93::-;;;:::i;16471:20::-;;;:::i;20629:700::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20629:700:0;;:::i;:::-;;;;;;;;;;;;;;;;;;20227:392;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20227:392:0;;;;;;;;;:::i;23961:100::-;;;:::i;19848:371::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19848:371:0;;:::i;18124:434::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18124:434:0;;;;;;;;;;;;:::i;15499:88::-;;;:::i;15401:87::-;;;:::i;16216:37::-;;;:::i;16289:30::-;;;:::i;23652:301::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23652:301:0;;:::i;21820:1023::-;21875:14;21891:18;21957:15;21975:13;:11;:13::i;:::-;22041:22;;22009:29;22182:12;21957:31;;-1:-1:-1;22041:22:0;22182:16;22178:410;;22229:27;22269:15;;22259:7;:25;:53;;22297:15;;22259:53;;;22287:7;22259:53;22229:83;;22353:16;;22331:19;:38;22327:250;;;22414:147;22539:21;22414:102;22503:12;;22414:84;22478:19;;22414:41;22438:16;;22414:19;:23;;:41;;;;:::i;:::-;:63;:84;:63;:84;:::i;:::-;:88;:102;:88;:102;:::i;:::-;:124;:147;:124;:147;:::i;:::-;22390:171;;22327:250;22178:410;;-1:-1:-1;;;;;22781:22:0;;;;;;:13;:22;;;;;;;;;22744:12;:21;;;;;;22672:26;:35;;;;;;22613:191;;22781:22;22613:153;;:116;;22724:4;;22613:96;;22646:62;;:21;;:62;:25;:62;:::i;:::-;-1:-1:-1;;;;;22613:18:0;;;;;;:9;:18;;;;;;;:96;:32;:96;:::i;:153::-;:167;:191;:167;:191;:::i;:::-;22600:204;;22834:1;22825:10;;21820:1023;;;;;:::o;24392:95::-;24464:15;24392:95;;:::o;25866:711::-;26145:12;25943:19;;;;;26182:16;:14;:16::i;:::-;-1:-1:-1;;;;;26233:26:0;;;;;;:12;:26;;;;;;;;;26282:13;:27;;;;;;26233:26;;-1:-1:-1;26282:27:0;-1:-1:-1;26168:30:0;;-1:-1:-1;26346:21:0;26246:12;26346:7;:21::i;:::-;-1:-1:-1;;;;;26447:26:0;;;;;;:13;:26;;;;;;26320:47;;-1:-1:-1;26397:77:0;;-1:-1:-1;26397:45:0;26320:47;26425:16;:14;:16::i;:::-;26397:15;:45::i;:77::-;26378:96;;26501:58;26521:10;26533:12;26547:11;26501:19;:58::i;:::-;26485:74;;25866:711;;;;;;;;:::o;22851:671::-;22900:20;22922:26;22950:29;22981:28;23011:26;23065:13;:11;:13::i;:::-;23113:15;;23160:19;;23050:28;;-1:-1:-1;23113:15:0;-1:-1:-1;23160:29:0;;23184:4;23160:29;:23;:29;:::i;:::-;23139:50;;23219:15;;23204:12;:30;23200:263;;;23273:62;23293:41;23331:2;23293:33;23313:12;23293:15;;:19;;:33;;;;:::i;:41::-;23273:15;;:62;:19;:62;:::i;:::-;23250:85;;23200:263;;;23389:62;23409:41;23447:2;23409:33;23426:15;;23409:12;:16;;:33;;;;:::i;:41::-;23389:15;;:62;:19;:62;:::i;:::-;23366:85;;23200:263;23492:22;;23473:41;;22851:671;;;;;:::o;16352:29::-;;;;:::o;16591:32::-;;;-1:-1:-1;;;;;16591:32:0;;:::o;15786:30::-;;;;:::o;21337:475::-;21423:5;;-1:-1:-1;;;;;21423:5:0;21409:10;:19;21401:62;;;;;-1:-1:-1;;;21401:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21497:17;;;-1:-1:-1;;;;;21525:33:0;;;-1:-1:-1;;;;;;21525:33:0;;;;;;;21636:106;;;-1:-1:-1;;;21636:106:0;;;;;;;;;-1:-1:-1;;21636:106:0;;;;;21497:17;;;15544:42;;;;21636:23;;:106;;;;;;;;;;;;;;21476:18;15544:42;21636:106;;;5:2:-1;;;;30:1;27;20:12;5:2;21636:106:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21636:106:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;21760:44:0;;;-1:-1:-1;;;;;21760:44:0;;;;;;;21636:106;21760:44;;;;;;;;;;;;;;;;21337:475;;;:::o;24290:90::-;24360:12;24290:90;:::o;18566:1274::-;18729:15;18747:13;:11;:13::i;:::-;18894:1;18879:12;18729:31;;-1:-1:-1;18879:16:0;18875:398;;18912:27;18952:15;;18942:7;:25;:53;;18980:15;;18942:53;;;18970:7;18942:53;18912:83;;19036:16;;19014:19;:38;19010:252;;;19098:148;19223:22;;19098:102;19187:12;;19098:84;19162:19;;19098:41;19122:16;;19098:19;:23;;:41;;;;:::i;:148::-;19073:22;:173;19010:252;18875:398;;19285:16;:26;;;-1:-1:-1;;;;;19328:21:0;;;19324:509;;-1:-1:-1;;;;;19433:35:0;;19368;19433;;;:26;:35;;;;;;19406:22;;:63;;;:26;:63;:::i;:::-;19368:101;-1:-1:-1;19490:31:0;;19486:336;;-1:-1:-1;;;;;19703:21:0;;;;;;:12;:21;;;;;;;;;19583:9;:18;;;;;;;:142;;19703:21;19583:97;;19675:4;;19583:69;;19624:27;19583:69;:40;:69;:::i;:142::-;-1:-1:-1;;;;;19542:21:0;;;;;;:12;:21;;;;;;;;:183;;;;19784:22;;19746:26;:35;;;;;;:60;19486:336;19324:509;;18566:1274;;:::o;24069:112::-;-1:-1:-1;;;;;24155:18:0;;24128:7;24155:18;;;:9;:18;;;;;;24069:112;;;;:::o;16413:49::-;;;;;;;;;;;;;:::o;25404:450::-;25446:14;25472:24;25485:10;25472:12;:24::i;:::-;25594:10;25580:25;;;;:13;:25;;;;;;;;;25532:12;:24;;;;;;;25516:90;;25580:25;25516:59;;25558:16;:14;:16::i;25516:90::-;25507:99;-1:-1:-1;25630:10:0;;25627:220;;25698:10;25684:25;;;;:13;:25;;;;;;:37;;25714:6;25684:37;:29;:37;:::i;:::-;25670:10;25656:25;;;;:13;:25;;;;;;:65;;;;25738:35;;-1:-1:-1;;;25738:35:0;;;;;;;;;;;;;;;;;15544:42;;25738:15;;:35;;;;;;;;;;;25656:25;15544:42;25738:35;;;5:2:-1;;;;30:1;27;20:12;5:2;25738:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;25795:40:0;;;;;;;;25816:10;;-1:-1:-1;25795:40:0;;-1:-1:-1;25795:40:0;;;;;;;;25404:450;:::o;24189:93::-;24235:7;24262:12;24189:93;:::o;16471:20::-;;;-1:-1:-1;;;;;16471:20:0;;:::o;20629:700::-;20687:4;20704:24;20717:10;20704:12;:24::i;:::-;20773:10;20739:18;20760:24;;;:12;:24;;;;;;20803:19;;;;:54;;-1:-1:-1;20826:17:0;;-1:-1:-1;;;;;20826:17:0;:31;20803:54;20799:99;;;20881:5;20874:12;;;;;20799:99;20923:10;20910:24;;;;:12;:24;;;;;;:34;;;;;;;21032:38;;-1:-1:-1;;;21032:38:0;;21056:4;21032:38;;;;;;;;;;;;15544:42;;21032:15;;:38;;;;;;;;;;;20910:24;15544:42;21032:38;;;5:2:-1;;;;30:1;27;20:12;5:2;21032:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;21120:17:0;;21193:22;;21217:14;;21233:15;;21149:100;;;-1:-1:-1;;;21149:100:0;;;;;;;;21181:10;21149:100;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21120:17:0;;;;-1:-1:-1;21120:17:0;;-1:-1:-1;21149:22:0;;:100;;;;;21083:22;;21149:100;;;;;;;21083:22;21120:17;21149:100;;;5:2:-1;;;;30:1;27;20:12;5:2;21149:100:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;21298:22:0;;21265:56;;;;;;;;;;;;;;;21278:10;;-1:-1:-1;21265:56:0;;-1:-1:-1;21265:56:0;;;;;;;20629:700;;;;;:::o;20227:392::-;20290:24;20303:10;20290:12;:24::i;:::-;20331:10;;20327:261;;20373:12;;:24;;20390:6;20373:24;:16;:24;:::i;:::-;20358:12;:39;;;20446:10;20436:21;;:9;:21;;;;;;:33;;20462:6;20436:33;:25;:33;:::i;:::-;20422:10;20412:21;;;;:9;:21;;;;;:57;;;;20484:44;;15445:42;;20521:6;20484:44;:24;:44;:::i;:::-;20548:28;;;;;;;;20557:10;;20548:28;;;;;;;;;;-1:-1:-1;;20227:392:0:o;23961:100::-;24037:16;;23961:100;:::o;19848:371::-;19897:24;19910:10;19897:12;:24::i;:::-;19938:10;;19934:278;;19980:12;;:24;;19997:6;19980:24;:16;:24;:::i;:::-;19965:12;:39;;;20053:10;20043:21;;:9;:21;;;;;;:33;;20069:6;20043:33;:25;:33;:::i;:::-;20029:10;20019:21;;;;:9;:21;;;;;:57;;;;20091:63;;15445:42;;20140:4;20147:6;20091:63;:28;:63;:::i;:::-;20174:26;;;;;;;;20181:10;;20174:26;;;;;;;;;;19934:278;19848:371;:::o;18124:434::-;18279:5;;-1:-1:-1;;;;;18279:5:0;18265:10;:19;18257:59;;;;;-1:-1:-1;;;18257:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18327:24;18348:1;18327:12;:24::i;:::-;18364:83;18391:19;18412:23;18437:9;18364:26;:83::i;:::-;18489:19;;18510:15;;18527:22;;18465:85;;;;;;;;;;;;;;;;;;;;;;;;;;;18124:434;;;:::o;15499:88::-;15544:42;15499:88;:::o;15401:87::-;15445:42;15401:87;:::o;16216:37::-;;;;:::o;16289:30::-;;;;:::o;23652:301::-;23721:14;23737:18;23777:1;23768:10;;23789:29;23821:19;;23843:4;23821:26;23789:58;;23872:73;23940:4;23872:63;23928:6;23872:51;23898:24;23915:6;23898:12;;:16;;:24;;;;:::i;:::-;23872:21;;:51;:25;:51;:::i;:73::-;23858:87;;23652: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;;;;;;;;;;;;;;;;;;;;;;;;;;;24499:887;24583:7;24678:22;;24671:4;:29;24668:68;;;-1:-1:-1;24723:1:0;24716:8;;24668:68;24792:17;24788:57;;-1:-1:-1;24832:1:0;24825:8;;24788:57;24937:25;24974:80;25052:1;24974:63;25021:15;;24974:32;24983:22;;24974:4;:8;;:32;;;;:::i;:80::-;24937:117;;25141:21;25174:75;25234:14;;25174:45;25201:17;25174:12;:26;;:45;;;;:::i;:75::-;25141:108;;25280:12;25265;:27;25262:85;;;-1:-1:-1;25323:12:0;25262:85;25366:12;24499:887;-1:-1:-1;;;;24499:887:0:o;26589:819::-;-1:-1:-1;;;;;26824:25:0;;26697:7;26824:25;;;:12;:25;;;;;;26785:35;26801:12;26815:4;26785:15;:35::i;:::-;:64;26782:103;;;-1:-1:-1;26872:1:0;26865:8;;26782:103;26988:22;;26980:4;:30;26977:90;;-1:-1:-1;27033:22:0;;27026:29;;26977:90;27116:25;27153:80;27231:1;27153:63;27200:15;;27153:32;27162:22;;27153:4;:8;;:32;;;;:::i;:80::-;27116:117;;27246:21;27279:86;27342:22;;27279:48;27311:15;;27279:17;:31;;:48;;;;:::i;:86::-;27246:119;-1:-1:-1;;;26589: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;17671:445::-;17988:4;17966:27;;17944:19;:49;17868:4;17842:30;;17912:19;18022:39;17842:30;18022:13;:11;:13::i;:39::-;18004:15;:57;-1:-1:-1;;18074:22:0;:34;-1:-1:-1;;17671: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://457ce1defb414a277df5ab2b0f6c28d2fafd109635516b2592036bc887117f7c
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.