Source Code
Latest 25 from a total of 1,628 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Unstake | 14076301 | 1512 days ago | IN | 0 ETH | 0.00531498 | ||||
| Unstake | 13819474 | 1552 days ago | IN | 0 ETH | 0.00199811 | ||||
| Unstake | 13638271 | 1580 days ago | IN | 0 ETH | 0.00321802 | ||||
| Unstake | 13544937 | 1595 days ago | IN | 0 ETH | 0.00712953 | ||||
| Unstake | 13544873 | 1595 days ago | IN | 0 ETH | 0.0058516 | ||||
| Unstake | 13543190 | 1595 days ago | IN | 0 ETH | 0.00357739 | ||||
| Unstake | 13387756 | 1620 days ago | IN | 0 ETH | 0.00253044 | ||||
| Unstake | 13387688 | 1620 days ago | IN | 0 ETH | 0.00171776 | ||||
| Unstake | 13385851 | 1620 days ago | IN | 0 ETH | 0.00680485 | ||||
| Unstake | 13385807 | 1620 days ago | IN | 0 ETH | 0.00627369 | ||||
| Unstake | 13385791 | 1620 days ago | IN | 0 ETH | 0.00756688 | ||||
| Unstake | 13385777 | 1620 days ago | IN | 0 ETH | 0.00794896 | ||||
| Unstake | 13358618 | 1624 days ago | IN | 0 ETH | 0.00189473 | ||||
| Unstake | 13356669 | 1625 days ago | IN | 0 ETH | 0.00657659 | ||||
| Unstake | 13349691 | 1626 days ago | IN | 0 ETH | 0.00332359 | ||||
| Unstake | 13349330 | 1626 days ago | IN | 0 ETH | 0.00695842 | ||||
| Unstake | 13342282 | 1627 days ago | IN | 0 ETH | 0.00453302 | ||||
| Unstake | 13312673 | 1632 days ago | IN | 0 ETH | 0.00767571 | ||||
| Unstake | 13311742 | 1632 days ago | IN | 0 ETH | 0.00844915 | ||||
| Unstake | 13311653 | 1632 days ago | IN | 0 ETH | 0.01189338 | ||||
| Unstake | 13238744 | 1643 days ago | IN | 0 ETH | 0.01104802 | ||||
| Unstake | 13208440 | 1648 days ago | IN | 0 ETH | 0.00645853 | ||||
| Unstake | 13154892 | 1656 days ago | IN | 0 ETH | 0.01464595 | ||||
| Unstake | 13088737 | 1666 days ago | IN | 0 ETH | 0.00457218 | ||||
| Unstake | 13063959 | 1670 days ago | IN | 0 ETH | 0.0016184 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
CourtFarming_MatterStake
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_MatterStake {
using SafeMath for uint256;
using SafeERC20 for IERC20;
IERC20 public constant stakedToken = IERC20(0x1C9491865a1DE77C5b6e19d2E6a5F1D7a6F2b25F);
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 = 8267195767195767;
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
60806040523480156200001157600080fd5b50600c80546001600160a01b0319163317905563609d30e06008819055620151806009556001600a55661d5ef882fe087790605a906200005e90839083906001600160e01b036200007d16565b620000716001600160e01b03620000c916565b600255506200012f9050565b670de0b6b3a76400008302600455611680820283620000bd82620000a96001600160e01b03620000c916565b620000cd60201b62000fc41790919060201c565b60035550506008555050565b4390565b60008282018381101562000128576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b61156c806200013f6000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c806372dacd79116100de578063a694fc3a11610097578063cc7a262e11610071578063cc7a262e14610401578063d6db152d14610409578063eb09b6cb14610411578063ef0b75691461041957610173565b8063a694fc3a146103b3578063aed5900f146103d0578063c3443b69146103f957610173565b806372dacd791461033d578063817b1cd2146103455780638da5cb5b1461034d57806399b015f0146103555780639ebea88c14610386578063a218141b146103ab57610173565b8063568c9a7011610130578063568c9a701461029357806357371ade1461029b57806357e871e7146102c3578063632447c9146102cb57806370a08231146102f157806371f61cae1461031757610173565b80630700037d1461017857806329cb924d146101b7578063366dc083146101d1578063374d496a146102345780633d99af2e14610267578063528ebbda1461026f575b600080fd5b61019e6004803603602081101561018e57600080fd5b50356001600160a01b0316610436565b6040805192835260208301919091528051918290030190f35b6101bf610557565b60408051918252519081900360200190f35b6101f7600480360360208110156101e757600080fd5b50356001600160a01b031661055c565b604080516001600160a01b0390971687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b61023c6105eb565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b6101bf610694565b61027761069a565b604080516001600160a01b039092168252519081900360200190f35b6101bf6106a9565b6102c1600480360360208110156102b157600080fd5b50356001600160a01b03166106af565b005b6101bf610804565b6102c1600480360360208110156102e157600080fd5b50356001600160a01b0316610808565b6101bf6004803603602081101561030757600080fd5b50356001600160a01b031661092c565b6101bf6004803603602081101561032d57600080fd5b50356001600160a01b031661094b565b6101bf61095d565b6101bf610a77565b610277610a7d565b6103726004803603602081101561036b57600080fd5b5035610a8c565b604080519115158252519081900360200190f35b6102c16004803603604081101561039c57600080fd5b50803590602001351515610c1e565b6101bf610cd5565b6102c1600480360360208110156103c957600080fd5b5035610cdb565b6102c1600480360360608110156103e657600080fd5b5080359060208101359060400135610d93565b610277610e53565b610277610e6b565b6101bf610e83565b6101bf610e89565b61019e6004803603602081101561042f57600080fd5b5035610e8f565b6000806000610443610804565b60055460005491925090156104c1576000600354831061046557600354610467565b825b90506002548111156104bf576104bc826104b06000546104a460045461049860025488610ede90919063ffffffff16565b9063ffffffff610f2916565b9063ffffffff610f8216565b9063ffffffff610fc416565b91505b505b6001600160a01b0385166000908152600b60209081526040808320546006835281842054600790935292205461054a929161053e916104b090670de0b6b3a7640000906104a49061051990899063ffffffff610ede16565b6001600160a01b038d166000908152600160205260409020549063ffffffff610f2916565b9063ffffffff610ede16565b9250600093505050915091565b425b90565b8060008080808061056b610557565b6001600160a01b038816600090815260066020908152604080832054600b90925282205490975095509091506105a088610436565b6001600160a01b0389166000908152600b60205260409020549092506105d2915061053e836105cd610557565b61101e565b93506105df818984611093565b92505091939550919395565b60008060008060006105fb610804565b600354600454919650935061061e90670de0b6b3a764000063ffffffff610f8216565b935060035485101561065b57610654610647600f61049888600354610ede90919063ffffffff16565b429063ffffffff610fc416565b9150610688565b610685610678600f61049860035489610ede90919063ffffffff16565b429063ffffffff610ede16565b91505b60085490509091929394565b600a5481565b600d546001600160a01b031681565b60035481565b600c546001600160a01b0316331461070e576040805162461bcd60e51b815260206004820152601e60248201527f6f6e6c7920636f6e7472616374206f776e65722063616e206368616e67650000604482015290519081900360640190fd5b600d80546001600160a01b038381166001600160a01b0319831681179093556040805163095ea7b360e01b81526004810194909452600019602485015251911691730538a9b4f4dcb0cb01a7fa34e17c0ac947c2255391829163095ea7b39160448083019260209291908290030181600087803b15801561078e57600080fd5b505af11580156107a2573d6000803e3d6000fd5b505050506040513d60208110156107b857600080fd5b5050604080516001600160a01b0380851682528516602082015281517f792c21b3a699347e8ba7f050a0a835bed14336a5284e2476670fae2e20a269f1929181900390910190a1505050565b4390565b6000610812610804565b6000549091501561086b576000600354821061083057600354610832565b815b9050600254811115610869576108656005546104b06000546104a460045461049860025488610ede90919063ffffffff16565b6005555b505b60028190556001600160a01b03821615610928576001600160a01b0382166000908152600760205260408120546005546108aa9163ffffffff610ede16565b90508015610926576001600160a01b0383166000908152600660209081526040808320546001909252909120546108fa91906104b090670de0b6b3a7640000906104a4908663ffffffff610f2916565b6001600160a01b0384166000908152600660209081526040808320939093556005546007909152919020555b505b5050565b6001600160a01b0381166000908152600160205260409020545b919050565b600b6020526000908152604090205481565b600061096833610808565b336000908152600b6020908152604080832054600690925290912054610995919061053e906105cd610557565b9050801561055957336000908152600b60205260409020546109bd908263ffffffff610fc416565b336000818152600b60205260408082209390935582516340c10f1960e01b81526004810192909252602482018490529151730538a9b4f4dcb0cb01a7fa34e17c0ac947c22553926340c10f19926044808201939182900301818387803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b50506040805184815290513393507f6fe937bf2c13cbdc6c3e1644deef42cd89a7694c31f592ce251e90727af12e2792509081900360200190a290565b60005490565b600c546001600160a01b031681565b6000610a9733610808565b3360009081526006602052604090205480831180610abe5750600d546001600160a01b0316155b15610acd576000915050610946565b336000908152600660205260408082208054869003905580516340c10f1960e01b8152306004820152602481018690529051730538a9b4f4dcb0cb01a7fa34e17c0ac947c22553926340c10f19926044808201939182900301818387803b158015610b3757600080fd5b505af1158015610b4b573d6000803e3d6000fd5b5050600d54600854600a546009546040805163caa32b9160e01b8152600481018b9052336024820152604481019490945260648401929092526084830152516001600160a01b03909216935083925063caa32b919160a480830192600092919082900301818387803b158015610bc057600080fd5b505af1158015610bd4573d6000803e3d6000fd5b505060085460408051888152602081019290925280513394507f8b8ede3b1a5bbf7eb12af900b210a8f77a6251f55ef3a3caab5250dcf1589c4b9350918290030190a25050919050565b610c2733610808565b811561092857600054610c40908363ffffffff610ede16565b600090815533815260016020526040902054610c62908363ffffffff610ede16565b33600081815260016020526040902091909155610c9b90731c9491865a1de77c5b6e19d2e6a5f1d7a6f2b25f908463ffffffff61112316565b60408051838152905133917f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f75919081900360200190a25050565b60025490565b610ce433610808565b8015610d9057600054610cfd908263ffffffff610fc416565b600090815533815260016020526040902054610d1f908263ffffffff610fc416565b33600081815260016020526040902091909155610d5990731c9491865a1de77c5b6e19d2e6a5f1d7a6f2b25f90308463ffffffff61117516565b60408051828152905133917f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d919081900360200190a25b50565b600c546001600160a01b03163314610df2576040805162461bcd60e51b815260206004820152601b60248201527f63616e2062652063616c6c6564206279206f776e6572206f6e6c790000000000604482015290519081900360640190fd5b610dfc6000610808565b610e078383836111d5565b60045460035460085460408051938452602084019290925282820152517f42bc0b5308138fcf9b84f2d9cabfe315aa695643792e122d567b1bf0f3af3ac59181900360600190a1505050565b730538a9b4f4dcb0cb01a7fa34e17c0ac947c2255381565b731c9491865a1de77c5b6e19d2e6a5f1d7a6f2b25f81565b60085481565b60095481565b600080600091506000600454611680029050610ed6670de0b6b3a76400006104a486610498610ec989600054610fc490919063ffffffff16565b869063ffffffff610f8216565b915050915091565b6000610f2083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611201565b90505b92915050565b600082610f3857506000610f23565b82820282848281610f4557fe5b0414610f205760405162461bcd60e51b81526004018080602001828103825260218152602001806114ed6021913960400191505060405180910390fd5b6000610f2083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611298565b600082820183811015610f20576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600060085482101561103257506000610f23565b8261103f57506000610f23565b600061106160016104b06009546104a460085488610ede90919063ffffffff16565b9050600061107e600a546104a48488610f2990919063ffffffff16565b90508481111561108b5750835b949350505050565b6001600160a01b0382166000908152600660205260408120546110b6858461101e565b14156110c45750600061111c565b60085482116110d6575060085461111c565b60006110f860016104b06009546104a460085488610ede90919063ffffffff16565b905060006111176008546104b060095485610f2990919063ffffffff16565b925050505b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526109269084906112fd565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526111cf9085906112fd565b50505050565b670de0b6b3a764000083026004556116808202836111f5826104b0610804565b60035550506008555050565b600081848411156112905760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561125557818101518382015260200161123d565b50505050905090810190601f1680156112825780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836112e75760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561125557818101518382015260200161123d565b5060008385816112f357fe5b0495945050505050565b61130f826001600160a01b03166114b5565b611360576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b6020831061139e5780518252601f19909201916020918201910161137f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611400576040519150601f19603f3d011682016040523d82523d6000602084013e611405565b606091505b50915091508161145c576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156111cf5780806020019051602081101561147857600080fd5b50516111cf5760405162461bcd60e51b815260040180806020018281038252602a81526020018061150e602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470811580159061108b575014159291505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a7231582095a73124ed8906e6ef82f79a0d3ac6aba4edf34a09e1b0b20152f022b6e066c064736f6c63430005110032
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101735760003560e01c806372dacd79116100de578063a694fc3a11610097578063cc7a262e11610071578063cc7a262e14610401578063d6db152d14610409578063eb09b6cb14610411578063ef0b75691461041957610173565b8063a694fc3a146103b3578063aed5900f146103d0578063c3443b69146103f957610173565b806372dacd791461033d578063817b1cd2146103455780638da5cb5b1461034d57806399b015f0146103555780639ebea88c14610386578063a218141b146103ab57610173565b8063568c9a7011610130578063568c9a701461029357806357371ade1461029b57806357e871e7146102c3578063632447c9146102cb57806370a08231146102f157806371f61cae1461031757610173565b80630700037d1461017857806329cb924d146101b7578063366dc083146101d1578063374d496a146102345780633d99af2e14610267578063528ebbda1461026f575b600080fd5b61019e6004803603602081101561018e57600080fd5b50356001600160a01b0316610436565b6040805192835260208301919091528051918290030190f35b6101bf610557565b60408051918252519081900360200190f35b6101f7600480360360208110156101e757600080fd5b50356001600160a01b031661055c565b604080516001600160a01b0390971687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b61023c6105eb565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b6101bf610694565b61027761069a565b604080516001600160a01b039092168252519081900360200190f35b6101bf6106a9565b6102c1600480360360208110156102b157600080fd5b50356001600160a01b03166106af565b005b6101bf610804565b6102c1600480360360208110156102e157600080fd5b50356001600160a01b0316610808565b6101bf6004803603602081101561030757600080fd5b50356001600160a01b031661092c565b6101bf6004803603602081101561032d57600080fd5b50356001600160a01b031661094b565b6101bf61095d565b6101bf610a77565b610277610a7d565b6103726004803603602081101561036b57600080fd5b5035610a8c565b604080519115158252519081900360200190f35b6102c16004803603604081101561039c57600080fd5b50803590602001351515610c1e565b6101bf610cd5565b6102c1600480360360208110156103c957600080fd5b5035610cdb565b6102c1600480360360608110156103e657600080fd5b5080359060208101359060400135610d93565b610277610e53565b610277610e6b565b6101bf610e83565b6101bf610e89565b61019e6004803603602081101561042f57600080fd5b5035610e8f565b6000806000610443610804565b60055460005491925090156104c1576000600354831061046557600354610467565b825b90506002548111156104bf576104bc826104b06000546104a460045461049860025488610ede90919063ffffffff16565b9063ffffffff610f2916565b9063ffffffff610f8216565b9063ffffffff610fc416565b91505b505b6001600160a01b0385166000908152600b60209081526040808320546006835281842054600790935292205461054a929161053e916104b090670de0b6b3a7640000906104a49061051990899063ffffffff610ede16565b6001600160a01b038d166000908152600160205260409020549063ffffffff610f2916565b9063ffffffff610ede16565b9250600093505050915091565b425b90565b8060008080808061056b610557565b6001600160a01b038816600090815260066020908152604080832054600b90925282205490975095509091506105a088610436565b6001600160a01b0389166000908152600b60205260409020549092506105d2915061053e836105cd610557565b61101e565b93506105df818984611093565b92505091939550919395565b60008060008060006105fb610804565b600354600454919650935061061e90670de0b6b3a764000063ffffffff610f8216565b935060035485101561065b57610654610647600f61049888600354610ede90919063ffffffff16565b429063ffffffff610fc416565b9150610688565b610685610678600f61049860035489610ede90919063ffffffff16565b429063ffffffff610ede16565b91505b60085490509091929394565b600a5481565b600d546001600160a01b031681565b60035481565b600c546001600160a01b0316331461070e576040805162461bcd60e51b815260206004820152601e60248201527f6f6e6c7920636f6e7472616374206f776e65722063616e206368616e67650000604482015290519081900360640190fd5b600d80546001600160a01b038381166001600160a01b0319831681179093556040805163095ea7b360e01b81526004810194909452600019602485015251911691730538a9b4f4dcb0cb01a7fa34e17c0ac947c2255391829163095ea7b39160448083019260209291908290030181600087803b15801561078e57600080fd5b505af11580156107a2573d6000803e3d6000fd5b505050506040513d60208110156107b857600080fd5b5050604080516001600160a01b0380851682528516602082015281517f792c21b3a699347e8ba7f050a0a835bed14336a5284e2476670fae2e20a269f1929181900390910190a1505050565b4390565b6000610812610804565b6000549091501561086b576000600354821061083057600354610832565b815b9050600254811115610869576108656005546104b06000546104a460045461049860025488610ede90919063ffffffff16565b6005555b505b60028190556001600160a01b03821615610928576001600160a01b0382166000908152600760205260408120546005546108aa9163ffffffff610ede16565b90508015610926576001600160a01b0383166000908152600660209081526040808320546001909252909120546108fa91906104b090670de0b6b3a7640000906104a4908663ffffffff610f2916565b6001600160a01b0384166000908152600660209081526040808320939093556005546007909152919020555b505b5050565b6001600160a01b0381166000908152600160205260409020545b919050565b600b6020526000908152604090205481565b600061096833610808565b336000908152600b6020908152604080832054600690925290912054610995919061053e906105cd610557565b9050801561055957336000908152600b60205260409020546109bd908263ffffffff610fc416565b336000818152600b60205260408082209390935582516340c10f1960e01b81526004810192909252602482018490529151730538a9b4f4dcb0cb01a7fa34e17c0ac947c22553926340c10f19926044808201939182900301818387803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b50506040805184815290513393507f6fe937bf2c13cbdc6c3e1644deef42cd89a7694c31f592ce251e90727af12e2792509081900360200190a290565b60005490565b600c546001600160a01b031681565b6000610a9733610808565b3360009081526006602052604090205480831180610abe5750600d546001600160a01b0316155b15610acd576000915050610946565b336000908152600660205260408082208054869003905580516340c10f1960e01b8152306004820152602481018690529051730538a9b4f4dcb0cb01a7fa34e17c0ac947c22553926340c10f19926044808201939182900301818387803b158015610b3757600080fd5b505af1158015610b4b573d6000803e3d6000fd5b5050600d54600854600a546009546040805163caa32b9160e01b8152600481018b9052336024820152604481019490945260648401929092526084830152516001600160a01b03909216935083925063caa32b919160a480830192600092919082900301818387803b158015610bc057600080fd5b505af1158015610bd4573d6000803e3d6000fd5b505060085460408051888152602081019290925280513394507f8b8ede3b1a5bbf7eb12af900b210a8f77a6251f55ef3a3caab5250dcf1589c4b9350918290030190a25050919050565b610c2733610808565b811561092857600054610c40908363ffffffff610ede16565b600090815533815260016020526040902054610c62908363ffffffff610ede16565b33600081815260016020526040902091909155610c9b90731c9491865a1de77c5b6e19d2e6a5f1d7a6f2b25f908463ffffffff61112316565b60408051838152905133917f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f75919081900360200190a25050565b60025490565b610ce433610808565b8015610d9057600054610cfd908263ffffffff610fc416565b600090815533815260016020526040902054610d1f908263ffffffff610fc416565b33600081815260016020526040902091909155610d5990731c9491865a1de77c5b6e19d2e6a5f1d7a6f2b25f90308463ffffffff61117516565b60408051828152905133917f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d919081900360200190a25b50565b600c546001600160a01b03163314610df2576040805162461bcd60e51b815260206004820152601b60248201527f63616e2062652063616c6c6564206279206f776e6572206f6e6c790000000000604482015290519081900360640190fd5b610dfc6000610808565b610e078383836111d5565b60045460035460085460408051938452602084019290925282820152517f42bc0b5308138fcf9b84f2d9cabfe315aa695643792e122d567b1bf0f3af3ac59181900360600190a1505050565b730538a9b4f4dcb0cb01a7fa34e17c0ac947c2255381565b731c9491865a1de77c5b6e19d2e6a5f1d7a6f2b25f81565b60085481565b60095481565b600080600091506000600454611680029050610ed6670de0b6b3a76400006104a486610498610ec989600054610fc490919063ffffffff16565b869063ffffffff610f8216565b915050915091565b6000610f2083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611201565b90505b92915050565b600082610f3857506000610f23565b82820282848281610f4557fe5b0414610f205760405162461bcd60e51b81526004018080602001828103825260218152602001806114ed6021913960400191505060405180910390fd5b6000610f2083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611298565b600082820183811015610f20576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600060085482101561103257506000610f23565b8261103f57506000610f23565b600061106160016104b06009546104a460085488610ede90919063ffffffff16565b9050600061107e600a546104a48488610f2990919063ffffffff16565b90508481111561108b5750835b949350505050565b6001600160a01b0382166000908152600660205260408120546110b6858461101e565b14156110c45750600061111c565b60085482116110d6575060085461111c565b60006110f860016104b06009546104a460085488610ede90919063ffffffff16565b905060006111176008546104b060095485610f2990919063ffffffff16565b925050505b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526109269084906112fd565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526111cf9085906112fd565b50505050565b670de0b6b3a764000083026004556116808202836111f5826104b0610804565b60035550506008555050565b600081848411156112905760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561125557818101518382015260200161123d565b50505050905090810190601f1680156112825780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836112e75760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561125557818101518382015260200161123d565b5060008385816112f357fe5b0495945050505050565b61130f826001600160a01b03166114b5565b611360576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b6020831061139e5780518252601f19909201916020918201910161137f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611400576040519150601f19603f3d011682016040523d82523d6000602084013e611405565b606091505b50915091508161145c576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156111cf5780806020019051602081101561147857600080fd5b50516111cf5760405162461bcd60e51b815260040180806020018281038252602a81526020018061150e602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470811580159061108b575014159291505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a7231582095a73124ed8906e6ef82f79a0d3ac6aba4edf34a09e1b0b20152f022b6e066c064736f6c63430005110032
Deployed Bytecode Sourcemap
15290:12126:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15290:12126:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21819:1023;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21819:1023:0;-1:-1:-1;;;;;21819:1023:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;24391:95;;;:::i;:::-;;;;;;;;;;;;;;;;25865:711;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25865:711:0;-1:-1:-1;;;;;25865:711:0;;:::i;:::-;;;;-1:-1:-1;;;;;25865:711:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22850:671;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16352:29;;;:::i;16591:32::-;;;:::i;:::-;;;;-1:-1:-1;;;;;16591:32:0;;;;;;;;;;;;;;15786:30;;;:::i;21336:475::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21336:475:0;-1:-1:-1;;;;;21336:475:0;;:::i;:::-;;24289:90;;;:::i;18565:1274::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18565:1274:0;-1:-1:-1;;;;;18565:1274:0;;:::i;24068:112::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24068:112:0;-1:-1:-1;;;;;24068: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;25403:450::-;;;:::i;24188:93::-;;;:::i;16471:20::-;;;:::i;20628:700::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20628:700:0;;:::i;:::-;;;;;;;;;;;;;;;;;;20226:392;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20226:392:0;;;;;;;;;:::i;23960:100::-;;;:::i;19847:371::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19847:371:0;;:::i;18123:434::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18123:434:0;;;;;;;;;;;;:::i;15499:88::-;;;:::i;15401:87::-;;;:::i;16216:37::-;;;:::i;16289:30::-;;;:::i;23651:301::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23651:301:0;;:::i;21819:1023::-;21874:14;21890:18;21956:15;21974:13;:11;:13::i;:::-;22040:22;;22008:29;22181:12;21956:31;;-1:-1:-1;22040:22:0;22181:16;22177:410;;22228:27;22268:15;;22258:7;:25;:53;;22296:15;;22258:53;;;22286:7;22258:53;22228:83;;22352:16;;22330:19;:38;22326:250;;;22413:147;22538:21;22413:102;22502:12;;22413:84;22477:19;;22413:41;22437:16;;22413:19;:23;;:41;;;;:::i;:::-;:63;:84;:63;:84;:::i;:::-;:88;:102;:88;:102;:::i;:::-;:124;:147;:124;:147;:::i;:::-;22389:171;;22326:250;22177:410;;-1:-1:-1;;;;;22780:22:0;;;;;;:13;:22;;;;;;;;;22743:12;:21;;;;;;22671:26;:35;;;;;;22612:191;;22780:22;22612:153;;:116;;22723:4;;22612:96;;22645:62;;:21;;:62;:25;:62;:::i;:::-;-1:-1:-1;;;;;22612:18:0;;;;;;:9;:18;;;;;;;:96;:32;:96;:::i;:153::-;:167;:191;:167;:191;:::i;:::-;22599:204;;22833:1;22824:10;;21819:1023;;;;;:::o;24391:95::-;24463:15;24391:95;;:::o;25865:711::-;26144:12;25942:19;;;;;26181:16;:14;:16::i;:::-;-1:-1:-1;;;;;26232:26:0;;;;;;:12;:26;;;;;;;;;26281:13;:27;;;;;;26232:26;;-1:-1:-1;26281:27:0;-1:-1:-1;26167:30:0;;-1:-1:-1;26345:21:0;26245:12;26345:7;:21::i;:::-;-1:-1:-1;;;;;26446:26:0;;;;;;:13;:26;;;;;;26319:47;;-1:-1:-1;26396:77:0;;-1:-1:-1;26396:45:0;26319:47;26424:16;:14;:16::i;:::-;26396:15;:45::i;:77::-;26377:96;;26500:58;26520:10;26532:12;26546:11;26500:19;:58::i;:::-;26484:74;;25865:711;;;;;;;;:::o;22850:671::-;22899:20;22921:26;22949:29;22980:28;23010:26;23064:13;:11;:13::i;:::-;23112:15;;23159:19;;23049:28;;-1:-1:-1;23112:15:0;-1:-1:-1;23159:29:0;;23183:4;23159:29;:23;:29;:::i;:::-;23138:50;;23218:15;;23203:12;:30;23199:263;;;23272:62;23292:41;23330:2;23292:33;23312:12;23292:15;;:19;;:33;;;;:::i;:41::-;23272:15;;:62;:19;:62;:::i;:::-;23249:85;;23199:263;;;23388:62;23408:41;23446:2;23408:33;23425:15;;23408:12;:16;;:33;;;;:::i;:41::-;23388:15;;:62;:19;:62;:::i;:::-;23365:85;;23199:263;23491:22;;23472:41;;22850:671;;;;;:::o;16352:29::-;;;;:::o;16591:32::-;;;-1:-1:-1;;;;;16591:32:0;;:::o;15786:30::-;;;;:::o;21336:475::-;21422:5;;-1:-1:-1;;;;;21422:5:0;21408:10;:19;21400:62;;;;;-1:-1:-1;;;21400:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21496:17;;;-1:-1:-1;;;;;21524:33:0;;;-1:-1:-1;;;;;;21524:33:0;;;;;;;21635:106;;;-1:-1:-1;;;21635:106:0;;;;;;;;;-1:-1:-1;;21635:106:0;;;;;21496:17;;;15544:42;;;;21635:23;;:106;;;;;;;;;;;;;;21475:18;15544:42;21635:106;;;5:2:-1;;;;30:1;27;20:12;5:2;21635:106:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21635:106:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;21759:44:0;;;-1:-1:-1;;;;;21759:44:0;;;;;;;21635:106;21759:44;;;;;;;;;;;;;;;;21336:475;;;:::o;24289:90::-;24359:12;24289:90;:::o;18565:1274::-;18728:15;18746:13;:11;:13::i;:::-;18893:1;18878:12;18728:31;;-1:-1:-1;18878:16:0;18874:398;;18911:27;18951:15;;18941:7;:25;:53;;18979:15;;18941:53;;;18969:7;18941:53;18911:83;;19035:16;;19013:19;:38;19009:252;;;19097:148;19222:22;;19097:102;19186:12;;19097:84;19161:19;;19097:41;19121:16;;19097:19;:23;;:41;;;;:::i;:148::-;19072:22;:173;19009:252;18874:398;;19284:16;:26;;;-1:-1:-1;;;;;19327:21:0;;;19323:509;;-1:-1:-1;;;;;19432:35:0;;19367;19432;;;:26;:35;;;;;;19405:22;;:63;;;:26;:63;:::i;:::-;19367:101;-1:-1:-1;19489:31:0;;19485:336;;-1:-1:-1;;;;;19702:21:0;;;;;;:12;:21;;;;;;;;;19582:9;:18;;;;;;;:142;;19702:21;19582:97;;19674:4;;19582:69;;19623:27;19582:69;:40;:69;:::i;:142::-;-1:-1:-1;;;;;19541:21:0;;;;;;:12;:21;;;;;;;;:183;;;;19783:22;;19745:26;:35;;;;;;:60;19485:336;19323:509;;18565:1274;;:::o;24068:112::-;-1:-1:-1;;;;;24154:18:0;;24127:7;24154:18;;;:9;:18;;;;;;24068:112;;;;:::o;16413:49::-;;;;;;;;;;;;;:::o;25403:450::-;25445:14;25471:24;25484:10;25471:12;:24::i;:::-;25593:10;25579:25;;;;:13;:25;;;;;;;;;25531:12;:24;;;;;;;25515:90;;25579:25;25515:59;;25557:16;:14;:16::i;25515:90::-;25506:99;-1:-1:-1;25629:10:0;;25626:220;;25697:10;25683:25;;;;:13;:25;;;;;;:37;;25713:6;25683:37;:29;:37;:::i;:::-;25669:10;25655:25;;;;:13;:25;;;;;;:65;;;;25737:35;;-1:-1:-1;;;25737:35:0;;;;;;;;;;;;;;;;;15544:42;;25737:15;;:35;;;;;;;;;;;25655:25;15544:42;25737:35;;;5:2:-1;;;;30:1;27;20:12;5:2;25737:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;25794:40:0;;;;;;;;25815:10;;-1:-1:-1;25794:40:0;;-1:-1:-1;25794:40:0;;;;;;;;25403:450;:::o;24188:93::-;24234:7;24261:12;24188:93;:::o;16471:20::-;;;-1:-1:-1;;;;;16471:20:0;;:::o;20628:700::-;20686:4;20703:24;20716:10;20703:12;:24::i;:::-;20772:10;20738:18;20759:24;;;:12;:24;;;;;;20802:19;;;;:54;;-1:-1:-1;20825:17:0;;-1:-1:-1;;;;;20825:17:0;:31;20802:54;20798:99;;;20880:5;20873:12;;;;;20798:99;20922:10;20909:24;;;;:12;:24;;;;;;:34;;;;;;;21031:38;;-1:-1:-1;;;21031:38:0;;21055:4;21031:38;;;;;;;;;;;;15544:42;;21031:15;;:38;;;;;;;;;;;20909:24;15544:42;21031:38;;;5:2:-1;;;;30:1;27;20:12;5:2;21031:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;21119:17:0;;21192:22;;21216:14;;21232:15;;21148:100;;;-1:-1:-1;;;21148:100:0;;;;;;;;21180:10;21148:100;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21119:17:0;;;;-1:-1:-1;21119:17:0;;-1:-1:-1;21148:22:0;;:100;;;;;21082:22;;21148:100;;;;;;;21082:22;21119:17;21148:100;;;5:2:-1;;;;30:1;27;20:12;5:2;21148:100:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;21297:22:0;;21264:56;;;;;;;;;;;;;;;21277:10;;-1:-1:-1;21264:56:0;;-1:-1:-1;21264:56:0;;;;;;;20628:700;;;;;:::o;20226:392::-;20289:24;20302:10;20289:12;:24::i;:::-;20330:10;;20326:261;;20372:12;;:24;;20389:6;20372:24;:16;:24;:::i;:::-;20357:12;:39;;;20445:10;20435:21;;:9;:21;;;;;;:33;;20461:6;20435:33;:25;:33;:::i;:::-;20421:10;20411:21;;;;:9;:21;;;;;:57;;;;20483:44;;15445:42;;20520:6;20483:44;:24;:44;:::i;:::-;20547:28;;;;;;;;20556:10;;20547:28;;;;;;;;;;-1:-1:-1;;20226:392:0:o;23960:100::-;24036:16;;23960:100;:::o;19847:371::-;19896:24;19909:10;19896:12;:24::i;:::-;19937:10;;19933:278;;19979:12;;:24;;19996:6;19979:24;:16;:24;:::i;:::-;19964:12;:39;;;20052:10;20042:21;;:9;:21;;;;;;:33;;20068:6;20042:33;:25;:33;:::i;:::-;20028:10;20018:21;;;;:9;:21;;;;;:57;;;;20090:63;;15445:42;;20139:4;20146:6;20090:63;:28;:63;:::i;:::-;20173:26;;;;;;;;20180:10;;20173:26;;;;;;;;;;19933:278;19847:371;:::o;18123:434::-;18278:5;;-1:-1:-1;;;;;18278:5:0;18264:10;:19;18256:59;;;;;-1:-1:-1;;;18256:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18326:24;18347:1;18326:12;:24::i;:::-;18363:83;18390:19;18411:23;18436:9;18363:26;:83::i;:::-;18488:19;;18509:15;;18526:22;;18464:85;;;;;;;;;;;;;;;;;;;;;;;;;;;18123:434;;;:::o;15499:88::-;15544:42;15499:88;:::o;15401:87::-;15445:42;15401:87;:::o;16216:37::-;;;;:::o;16289:30::-;;;;:::o;23651:301::-;23720:14;23736:18;23776:1;23767:10;;23788:29;23820:19;;23842:4;23820:26;23788:58;;23871:73;23939:4;23871:63;23927:6;23871:51;23897:24;23914:6;23897:12;;:16;;:24;;;;:::i;:::-;23871:21;;:51;:25;:51;:::i;:73::-;23857:87;;23651: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;;;;;;;;;;;;;;;;;;;;;;;;;;;24498:887;24582:7;24677:22;;24670:4;:29;24667:68;;;-1:-1:-1;24722:1:0;24715:8;;24667:68;24791:17;24787:57;;-1:-1:-1;24831:1:0;24824:8;;24787:57;24936:25;24973:80;25051:1;24973:63;25020:15;;24973:32;24982:22;;24973:4;:8;;:32;;;;:::i;:80::-;24936:117;;25140:21;25173:75;25233:14;;25173:45;25200:17;25173:12;:26;;:45;;;;:::i;:75::-;25140:108;;25279:12;25264;:27;25261:85;;;-1:-1:-1;25322:12:0;25261:85;25365:12;24498:887;-1:-1:-1;;;;24498:887:0:o;26588:819::-;-1:-1:-1;;;;;26823:25:0;;26696:7;26823:25;;;:12;:25;;;;;;26784:35;26800:12;26814:4;26784:15;:35::i;:::-;:64;26781:103;;;-1:-1:-1;26871:1:0;26864:8;;26781:103;26987:22;;26979:4;:30;26976:90;;-1:-1:-1;27032:22:0;;27025:29;;26976:90;27115:25;27152:80;27230:1;27152:63;27199:15;;27152:32;27161:22;;27152:4;:8;;:32;;;;:::i;:80::-;27115:117;;27245:21;27278:86;27341:22;;27278:48;27310:15;;27278:17;:31;;:48;;;;:::i;:86::-;27245:119;-1:-1:-1;;;26588: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;17670:445::-;17987:4;17965:27;;17943:19;:49;17867:4;17841:30;;17911:19;18021:39;17841:30;18021:13;:11;:13::i;:39::-;18003:15;:57;-1:-1:-1;;18073:22:0;:34;-1:-1:-1;;17670: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://95a73124ed8906e6ef82f79a0d3ac6aba4edf34a09e1b0b20152f022b6e066c0
Loading...
Loading
Loading...
Loading
Net Worth in USD
$3.36
Net Worth in ETH
0.001453
Token Allocations
BNB
100.00%
Multichain Portfolio | 33 Chains
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.