Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Latest 25 from a total of 113 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw | 11531630 | 1921 days ago | IN | 0 ETH | 0.00424008 | ||||
| Send Unclaimed R... | 11456487 | 1932 days ago | IN | 0 ETH | 0.00553527 | ||||
| Emergency Withdr... | 11456360 | 1933 days ago | IN | 0 ETH | 0.00226259 | ||||
| Boost | 11402351 | 1941 days ago | IN | 0 ETH | 0.00132741 | ||||
| Boost | 11402346 | 1941 days ago | IN | 0 ETH | 0.00132741 | ||||
| Withdraw | 11394608 | 1942 days ago | IN | 0 ETH | 0.00374526 | ||||
| Stake | 11394590 | 1942 days ago | IN | 0 ETH | 0.00579306 | ||||
| Stake | 11394401 | 1942 days ago | IN | 0 ETH | 0.0109434 | ||||
| Boost | 11349490 | 1949 days ago | IN | 0 ETH | 0.00294683 | ||||
| Stake | 11349445 | 1949 days ago | IN | 0 ETH | 0.00368171 | ||||
| Withdraw | 11349285 | 1949 days ago | IN | 0 ETH | 0.00134318 | ||||
| Withdraw | 11323412 | 1953 days ago | IN | 0 ETH | 0.00236358 | ||||
| Boost | 11317240 | 1954 days ago | IN | 0 ETH | 0.00767144 | ||||
| Boost | 11316675 | 1954 days ago | IN | 0 ETH | 0.00475248 | ||||
| Boost | 11312880 | 1955 days ago | IN | 0 ETH | 0.00497214 | ||||
| Boost | 11312188 | 1955 days ago | IN | 0 ETH | 0.00628488 | ||||
| Boost | 11311819 | 1955 days ago | IN | 0 ETH | 0.00657552 | ||||
| Boost | 11311117 | 1955 days ago | IN | 0 ETH | 0.00726047 | ||||
| Boost | 11310355 | 1955 days ago | IN | 0 ETH | 0.00753445 | ||||
| Boost | 11309554 | 1955 days ago | IN | 0 ETH | 0.00327907 | ||||
| Boost | 11309012 | 1955 days ago | IN | 0 ETH | 0.0052668 | ||||
| Boost | 11305793 | 1956 days ago | IN | 0 ETH | 0.0034157 | ||||
| Boost | 11305461 | 1956 days ago | IN | 0 ETH | 0.00597618 | ||||
| Boost | 11304824 | 1956 days ago | IN | 0 ETH | 0.00972629 | ||||
| Boost | 11304026 | 1956 days ago | IN | 0 ETH | 0.00369873 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
BoostVaultRewards
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-10-20
*/
// File: contracts/SafeMath.sol
pragma solidity 0.5.17;
// Note: This file has been modified to include the sqrt function for quadratic voting
/**
* @dev Standard math utilities missing in the Solidity language.
*/
library Math {
/**
* @dev Returns the largest of two numbers.
*/
function max(uint256 a, uint256 b) internal pure returns (uint256) {
return a >= b ? a : b;
}
/**
* @dev Returns the smallest of two numbers.
*/
function min(uint256 a, uint256 b) internal pure returns (uint256) {
return a < b ? a : b;
}
/**
* @dev Returns the average of two numbers. The result is rounded towards
* zero.
*/
function average(uint256 a, uint256 b) internal pure returns (uint256) {
// (a + b) / 2 can overflow, so we distribute
return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);
}
/**
* Imported from: https://github.com/alianse777/solidity-standard-library/blob/master/Math.sol
* @dev Compute square root of x
* @return sqrt(x)
*/
function sqrt(uint256 x) internal pure returns (uint256) {
uint256 n = x / 2;
uint256 lstX = 0;
while (n != lstX){
lstX = n;
n = (n + x/n) / 2;
}
return uint256(n);
}
}
/**
* @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;
}
}
// File: contracts/zeppelin/Address.sol
pragma solidity 0.5.17;
/**
* @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");
}
}
// File: contracts/IERC20.sol
//SPDX-License-Identifier: GPL-3.0-only
pragma solidity 0.5.17;
/**
* @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);
}
// File: contracts/zeppelin/SafeERC20.sol
pragma solidity 0.5.17;
/**
* @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");
}
}
}
// File: contracts/ITreasury.sol
pragma solidity 0.5.17;
interface ITreasury {
function defaultToken() external view returns (IERC20);
function deposit(IERC20 token, uint256 amount) external;
function withdraw(uint256 amount, address withdrawAddress) external;
}
// File: contracts/vaults/IVault.sol
pragma solidity 0.5.17;
interface IVault {
function want() external view returns (IERC20);
function transferFundsToStrategy(address strategy, uint256 amount) external;
function availableFunds() external view returns (uint256);
}
// File: contracts/vaults/IVaultRewards.sol
pragma solidity 0.5.17;
interface IVaultRewards {
function want() external view returns (IERC20);
function notifyRewardAmount(uint256 reward) external;
}
// File: contracts/vaults/IController.sol
pragma solidity 0.5.17;
interface IController {
function currentEpochTime() external view returns (uint256);
function balanceOf(address) external view returns (uint256);
function rewards(address token) external view returns (IVaultRewards);
function vault(address token) external view returns (IVault);
function allowableAmount(address) external view returns (uint256);
function treasury() external view returns (ITreasury);
function approvedStrategies(address, address) external view returns (bool);
function getHarvestInfo(address strategy, address user)
external view returns (
uint256 vaultRewardPercentage,
uint256 hurdleAmount,
uint256 harvestPercentage
);
function withdraw(address, uint256) external;
function earn(address, uint256) external;
function increaseHurdleRate(address token) external;
}
// File: contracts/LPTokenWrapper.sol
//SPDX-License-Identifier: GPL-3.0-only
pragma solidity ^0.5.17;
contract LPTokenWrapper {
using SafeMath for uint256;
using SafeERC20 for IERC20;
IERC20 public stakeToken;
uint256 private _totalSupply;
mapping(address => uint256) private _balances;
constructor(IERC20 _stakeToken) public {
stakeToken = _stakeToken;
}
function totalSupply() public view returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) public view returns (uint256) {
return _balances[account];
}
function stake(uint256 amount) public {
_totalSupply = _totalSupply.add(amount);
_balances[msg.sender] = _balances[msg.sender].add(amount);
// safeTransferFrom shifted to overriden method
}
function withdraw(uint256 amount) public {
_totalSupply = _totalSupply.sub(amount);
_balances[msg.sender] = _balances[msg.sender].sub(amount);
// safeTransferFrom shifted to overriden method
}
}
// File: contracts/vaults/BoostVaultRewards.sol
//SPDX-License-Identifier: MIT
/*
* MIT License
* ===========
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
*/
pragma solidity 0.5.17;
contract BoostVaultRewards is LPTokenWrapper, IVaultRewards {
struct EpochRewards {
uint256 rewardsAvailable;
uint256 rewardsClaimed;
uint256 rewardPerToken;
}
IERC20 public boostToken;
IERC20 public want;
IController public controller;
address public gov;
EpochRewards public previousEpoch;
EpochRewards public currentEpoch;
mapping(address => uint256) public previousEpochUserRewardPerTokenPaid;
mapping(address => uint256) public currentEpochUserRewardPerTokenPaid;
mapping(address => uint256) public previousEpochRewardsClaimable;
mapping(address => uint256) public currentEpochRewardsClaimable;
uint256 public constant EPOCH_DURATION = 1 weeks;
uint256 public currentEpochTime;
uint256 public unclaimedRewards;
// booster variables
// variables to keep track of totalSupply and balances (after accounting for multiplier)
uint256 public boostedTotalSupply;
uint256 public lastBoostPurchase; // timestamp of lastBoostPurchase
mapping(address => uint256) public boostedBalances;
mapping(address => uint256) public numBoostersBought; // each booster = 5% increase in stake amt
mapping(address => uint256) public nextBoostPurchaseTime; // timestamp for which user is eligible to purchase another booster
mapping(address => uint256) public lastActionTime;
uint256 public globalBoosterPrice = 1e18;
uint256 public scaleFactor = 125;
uint256 internal constant PRECISION = 1e18;
uint256 internal constant DENOM = 10000;
uint256 internal constant TREASURY_FEE = 250;
event RewardAdded(uint256 reward);
event RewardPaid(address indexed user, uint256 reward);
constructor(
IERC20 _stakeToken, // bf-token
IERC20 _boostToken,
IController _controller,
address _gov
) public LPTokenWrapper(_stakeToken) {
boostToken = _boostToken;
want = IVault(address(_stakeToken)).want();
controller = _controller;
gov = _gov;
currentEpochTime = controller.currentEpochTime();
lastBoostPurchase = block.timestamp;
}
modifier updateEpochRewards() {
if (block.timestamp > currentEpochTime.add(EPOCH_DURATION)) {
currentEpochTime = currentEpochTime.add(EPOCH_DURATION);
// update unclaimed rewards
unclaimedRewards = unclaimedRewards.add(
previousEpoch.rewardsAvailable.sub(previousEpoch.rewardsClaimed)
);
// replace previous with current epoch
previousEpoch = currentEpoch;
// instantiate new epoch
currentEpoch = EpochRewards({
rewardsAvailable: 0,
rewardsClaimed: 0,
rewardPerToken: 0
});
}
_;
}
function earned(address user) external view returns (uint256) {
return (block.timestamp > currentEpochTime + EPOCH_DURATION) ?
_earned(user, true) :
_earned(user, false).add(_earned(user, true));
}
function setGovernance(address _gov) external updateEpochRewards {
require(msg.sender == gov, "not gov");
gov = _gov;
}
function setController(IController _controller) external updateEpochRewards {
require(msg.sender == gov, "not gov");
controller = _controller;
}
function getReward(address user) external updateEpochRewards {
updateClaimUserRewardAndBooster(user);
}
function sendUnclaimedRewards() external updateEpochRewards {
uint256 pendingRewards = unclaimedRewards;
unclaimedRewards = 0;
want.safeTransfer(address(controller.vault(address(want))), pendingRewards);
}
function sendTreasuryBoost() external updateEpochRewards {
// transfer all collected boost tokens to treasury
uint256 boosterAmount = boostToken.balanceOf(address(this));
boostToken.safeApprove(address(controller.treasury()), boosterAmount);
controller.treasury().deposit(boostToken, boosterAmount);
}
function boost() external updateEpochRewards {
require(
block.timestamp > nextBoostPurchaseTime[msg.sender],
"early boost purchase"
);
updateClaimUserRewardAndBooster(msg.sender);
// save current booster price, since transfer is done last
// since getBoosterPrice() returns new boost balance, avoid re-calculation
(uint256 boosterAmount, uint256 newBoostBalance) = getBoosterPrice(msg.sender);
// user's balance and boostedSupply will be changed in this function
applyBoost(msg.sender, newBoostBalance);
// increase hurdle rate
controller.increaseHurdleRate(address(want));
boostToken.safeTransferFrom(msg.sender, address(this), boosterAmount);
}
// can only be called by vault (withdrawal fee) or approved strategy
// since funds are assumed to have been sent
function notifyRewardAmount(uint256 reward)
external
updateEpochRewards
{
require(
msg.sender == address(stakeToken) ||
controller.approvedStrategies(address(want), msg.sender),
"!authorized"
);
// send treasury fees
uint256 rewardAmount = reward.mul(TREASURY_FEE).div(DENOM);
want.safeApprove(address(controller.treasury()), rewardAmount);
controller.treasury().deposit(want, rewardAmount);
// distribute remaining fees
rewardAmount = reward.sub(rewardAmount);
currentEpoch.rewardsAvailable = currentEpoch.rewardsAvailable.add(rewardAmount);
currentEpoch.rewardPerToken = currentEpoch.rewardPerToken.add(
(boostedTotalSupply == 0) ?
rewardAmount :
rewardAmount.mul(PRECISION).div(boostedTotalSupply)
);
emit RewardAdded(reward);
}
function getBoosterPrice(address user)
public view returns (uint256 boosterPrice, uint256 newBoostBalance)
{
if (boostedTotalSupply == 0) return (0,0);
// 5% increase for each previously user-purchased booster
uint256 boostersBought = numBoostersBought[user];
boosterPrice = globalBoosterPrice.mul(boostersBought.mul(5).add(100)).div(100);
// increment boostersBought by 1
boostersBought = boostersBought.add(1);
// 2.5% decrease for every 2 hour interval since last global boost purchase
// max of 8 iterations
uint256 numIterations = (block.timestamp.sub(lastBoostPurchase)).div(2 hours);
numIterations = Math.min(8, numIterations);
boosterPrice = pow(boosterPrice, 975, 1000, numIterations);
// adjust price based on expected increase in boost supply
// boostersBought has been incremented by 1 already
newBoostBalance = balanceOf(user)
.mul(boostersBought.mul(5).add(100))
.div(100);
uint256 boostBalanceIncrease = newBoostBalance.sub(boostedBalances[user]);
boosterPrice = boosterPrice
.mul(boostBalanceIncrease)
.mul(scaleFactor)
.div(boostedTotalSupply);
}
// stake visibility is public as overriding LPTokenWrapper's stake() function
function stake(uint256 amount) public updateEpochRewards {
require(amount > 0, "Cannot stake 0");
updateClaimUserRewardAndBooster(msg.sender);
super.stake(amount);
// previous boosters do not affect new amounts
boostedBalances[msg.sender] = boostedBalances[msg.sender].add(amount);
boostedTotalSupply = boostedTotalSupply.add(amount);
// transfer token last, to follow CEI pattern
stakeToken.safeTransferFrom(msg.sender, address(this), amount);
}
function withdraw(uint256 amount) public updateEpochRewards {
require(amount > 0, "Cannot withdraw 0");
updateClaimUserRewardAndBooster(msg.sender);
super.withdraw(amount);
// update boosted balance and supply
updateBoostBalanceAndSupply(msg.sender, 0);
stakeToken.safeTransfer(msg.sender, amount);
}
// simpler withdraw method, in case rewards don't update properly
// does not claim rewards nor update user's lastActionTime
function emergencyWithdraw(uint256 amount) public {
super.withdraw(amount);
// reset numBoostersBought
numBoostersBought[msg.sender] = 0;
// update boosted balance and supply
updateBoostBalanceAndSupply(msg.sender, 0);
// transfer tokens to user
stakeToken.safeTransfer(msg.sender, amount);
}
function exit() public updateEpochRewards {
withdraw(balanceOf(msg.sender));
}
function updateBoostBalanceAndSupply(address user, uint256 newBoostBalance) internal {
// subtract existing balance from boostedSupply
boostedTotalSupply = boostedTotalSupply.sub(boostedBalances[user]);
// when applying boosts,
// newBoostBalance has already been calculated in getBoosterPrice()
if (newBoostBalance == 0) {
// each booster adds 5% to current stake amount
newBoostBalance = balanceOf(user).mul(numBoostersBought[user].mul(5).add(100)).div(100);
}
// update user's boosted balance
boostedBalances[user] = newBoostBalance;
// update boostedSupply
boostedTotalSupply = boostedTotalSupply.add(newBoostBalance);
}
function updateClaimUserRewardAndBooster(address user) internal {
// first, reset previous epoch stats and booster count if user's last action exceeds 1 epoch
if (lastActionTime[user].add(EPOCH_DURATION) <= currentEpochTime) {
previousEpochRewardsClaimable[user] = 0;
previousEpochUserRewardPerTokenPaid[user] = 0;
numBoostersBought[user] = 0;
}
// then, update user's claimable amount and booster count for the previous epoch
if (lastActionTime[user] <= currentEpochTime) {
previousEpochRewardsClaimable[user] = _earned(user, false);
previousEpochUserRewardPerTokenPaid[user] = previousEpoch.rewardPerToken;
numBoostersBought[user] = 0;
}
// finally, update user's claimable amount for current epoch
currentEpochRewardsClaimable[user] = _earned(user, true);
currentEpochUserRewardPerTokenPaid[user] = currentEpoch.rewardPerToken;
// get reward claimable for previous epoch
previousEpoch.rewardsClaimed = previousEpoch.rewardsClaimed.add(previousEpochRewardsClaimable[user]);
uint256 reward = previousEpochRewardsClaimable[user];
previousEpochRewardsClaimable[user] = 0;
// get reward claimable for current epoch
currentEpoch.rewardsClaimed = currentEpoch.rewardsClaimed.add(currentEpochRewardsClaimable[user]);
reward = reward.add(currentEpochRewardsClaimable[user]);
currentEpochRewardsClaimable[user] = 0;
if (reward > 0) {
want.safeTransfer(user, reward);
emit RewardPaid(user, reward);
}
// last, update user's action timestamp
lastActionTime[user] = block.timestamp;
}
function applyBoost(address user, uint256 newBoostBalance) internal {
// increase no. of boosters bought
numBoostersBought[user] = numBoostersBought[user].add(1);
updateBoostBalanceAndSupply(user, newBoostBalance);
// increase next purchase eligibility by an hour
nextBoostPurchaseTime[user] = block.timestamp.add(3600);
// increase global booster price by 1%
globalBoosterPrice = globalBoosterPrice.mul(101).div(100);
lastBoostPurchase = block.timestamp;
}
function _earned(address account, bool isCurrentEpoch) internal view returns (uint256) {
uint256 rewardPerToken;
uint256 userRewardPerTokenPaid;
uint256 rewardsClaimable;
if (isCurrentEpoch) {
rewardPerToken = currentEpoch.rewardPerToken;
userRewardPerTokenPaid = currentEpochUserRewardPerTokenPaid[account];
rewardsClaimable = currentEpochRewardsClaimable[account];
} else {
rewardPerToken = previousEpoch.rewardPerToken;
userRewardPerTokenPaid = previousEpochUserRewardPerTokenPaid[account];
rewardsClaimable = previousEpochRewardsClaimable[account];
}
return
boostedBalances[account]
.mul(rewardPerToken.sub(userRewardPerTokenPaid))
.div(1e18)
.add(rewardsClaimable);
}
/// Imported from: https://forum.openzeppelin.com/t/does-safemath-library-need-a-safe-power-function/871/7
/// Modified so that it takes in 3 arguments for base
/// @return a * (b / c)^exponent
function pow(uint256 a, uint256 b, uint256 c, uint256 exponent) internal pure returns (uint256) {
if (exponent == 0) {
return a;
}
else if (exponent == 1) {
return a.mul(b).div(c);
}
else if (a == 0 && exponent != 0) {
return 0;
}
else {
uint256 z = a.mul(b).div(c);
for (uint256 i = 1; i < exponent; i++)
z = z.mul(b).div(c);
return z;
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract IERC20","name":"_stakeToken","type":"address"},{"internalType":"contract IERC20","name":"_boostToken","type":"address"},{"internalType":"contract IController","name":"_controller","type":"address"},{"internalType":"address","name":"_gov","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardPaid","type":"event"},{"constant":true,"inputs":[],"name":"EPOCH_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"boost","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"boostToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boostedBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"boostedTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"controller","outputs":[{"internalType":"contract IController","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentEpoch","outputs":[{"internalType":"uint256","name":"rewardsAvailable","type":"uint256"},{"internalType":"uint256","name":"rewardsClaimed","type":"uint256"},{"internalType":"uint256","name":"rewardPerToken","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"currentEpochRewardsClaimable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentEpochTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"currentEpochUserRewardPerTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"exit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getBoosterPrice","outputs":[{"internalType":"uint256","name":"boosterPrice","type":"uint256"},{"internalType":"uint256","name":"newBoostBalance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"globalBoosterPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gov","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastActionTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastBoostPurchase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nextBoostPurchaseTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"name":"notifyRewardAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numBoostersBought","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"previousEpoch","outputs":[{"internalType":"uint256","name":"rewardsAvailable","type":"uint256"},{"internalType":"uint256","name":"rewardsClaimed","type":"uint256"},{"internalType":"uint256","name":"rewardPerToken","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"previousEpochRewardsClaimable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"previousEpochUserRewardPerTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"scaleFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"sendTreasuryBoost","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"sendUnclaimedRewards","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IController","name":"_controller","type":"address"}],"name":"setController","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_gov","type":"address"}],"name":"setGovernance","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":true,"inputs":[],"name":"stakeToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"unclaimedRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"want","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
6080604052670de0b6b3a7640000601955607d601a553480156200002257600080fd5b506040516200272538038062002725833981810160405260808110156200004857600080fd5b508051602080830151604080850151606090950151600080546001600160a01b038088166001600160a01b0319928316811790935560038054918716919092161790558251631f1fcd5160e01b8152925195969395939491939092631f1fcd51926004808301939192829003018186803b158015620000c657600080fd5b505afa158015620000db573d6000803e3d6000fd5b505050506040513d6020811015620000f257600080fd5b5051600480546001600160a01b03199081166001600160a01b03938416178255600580548216868516179081905560068054909216858516179091556040805163612c101160e01b81529051919093169263612c10119281810192602092909190829003018186803b1580156200016857600080fd5b505afa1580156200017d573d6000803e3d6000fd5b505050506040513d60208110156200019457600080fd5b5051601155505042601455505061257480620001b16000396000f3fe608060405234801561001057600080fd5b50600436106102765760003560e01c806364044fd911610160578063a694fc3a116100d8578063e72c3c421161008c578063eb681e3c11610071578063eb681e3c146105cc578063f77c4791146105f2578063f85f91b4146105fa57610276565b8063e72c3c421461059e578063e9fad8ee146105c457610276565b8063ab033ea9116100bd578063ab033ea91461054a578063c00007b014610570578063c675ccc11461059657610276565b8063a694fc3a14610525578063a70b9f0c1461054257610276565b80637d5c9b2f1161012f57806392eefe9b1161011457806392eefe9b146104d1578063a5fa3c91146104f7578063a66f42c01461051d57610276565b80637d5c9b2f146104a35780638112643c146104c957610276565b806364044fd914610447578063683dd1911461046d57806370a0823114610475578063766718081461049b57610276565b80633a589b97116101f357806351ed6a30116101c25780635cdaab48116101a75780635cdaab48146103f35780635d3b1f3814610419578063612c10111461043f57610276565b806351ed6a30146103ce5780635312ea8e146103d657610276565b80633a589b971461037b5780633ba35551146103835780633c6b16ab146103a95780633fbd474e146103c657610276565b806318160ddd1161024a57806327f0bfd61161022f57806327f0bfd6146103305780632e1a7d4d146103565780633004b4661461037357610276565b806318160ddd146103205780631f1fcd511461032857610276565b80628cc2621461027b5780630128ead8146102b35780630d7373a7146102bd57806312d43a51146102fc575b600080fd5b6102a16004803603602081101561029157600080fd5b50356001600160a01b0316610602565b60408051918252519081900360200190f35b6102bb61064d565b005b6102e3600480360360208110156102d357600080fd5b50356001600160a01b0316610926565b6040805192835260208301919091528051918290030190f35b610304610a6f565b604080516001600160a01b039092168252519081900360200190f35b6102a1610a7e565b610304610a84565b6102a16004803603602081101561034657600080fd5b50356001600160a01b0316610a93565b6102bb6004803603602081101561036c57600080fd5b5035610aa5565b6102a1610bc4565b610304610bca565b6102a16004803603602081101561039957600080fd5b50356001600160a01b0316610bd9565b6102bb600480360360208110156103bf57600080fd5b5035610beb565b6102bb610fd3565b61030461111d565b6102bb600480360360208110156103ec57600080fd5b503561112c565b6103fb611151565b60408051938452602084019290925282820152519081900360600190f35b6102a16004803603602081101561042f57600080fd5b50356001600160a01b031661115d565b6102a161116f565b6102a16004803603602081101561045d57600080fd5b50356001600160a01b0316611175565b6102a1611187565b6102a16004803603602081101561048b57600080fd5b50356001600160a01b031661118d565b6103fb6111a8565b6102a1600480360360208110156104b957600080fd5b50356001600160a01b03166111b4565b6102a16111c6565b6102bb600480360360208110156104e757600080fd5b50356001600160a01b03166111cc565b6102a16004803603602081101561050d57600080fd5b50356001600160a01b03166112f2565b6102bb611304565b6102bb6004803603602081101561053b57600080fd5b50356114bd565b6102a1611615565b6102bb6004803603602081101561056057600080fd5b50356001600160a01b031661161c565b6102bb6004803603602081101561058657600080fd5b50356001600160a01b0316611742565b6102a16117d8565b6102a1600480360360208110156105b457600080fd5b50356001600160a01b03166117de565b6102bb6117f0565b6102a1600480360360208110156105e257600080fd5b50356001600160a01b0316611890565b6103046118a2565b6102a16118b1565b600062093a8060115401421161063c576106376106208360016118b7565b61062b8460006118b7565b9063ffffffff61197716565b610647565b6106478260016118b7565b92915050565b6011546106639062093a8063ffffffff61197716565b4211156106e9576011546106809062093a8063ffffffff61197716565b6011556008546007546106ac9161069d919063ffffffff6119d816565b6012549063ffffffff61197716565b601255600a8054600755600b8054600855600c80546009556040805160608101825260008082526020820181905291018190529283905590829055555b600354604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561074d57600080fd5b505afa158015610761573d6000803e3d6000fd5b505050506040513d602081101561077757600080fd5b5051600554604080517f61d027b30000000000000000000000000000000000000000000000000000000081529051929350610823926001600160a01b03909216916361d027b391600480820192602092909190829003018186803b1580156107de57600080fd5b505afa1580156107f2573d6000803e3d6000fd5b505050506040513d602081101561080857600080fd5b50516003546001600160a01b0316908363ffffffff611a1a16565b600560009054906101000a90046001600160a01b03166001600160a01b03166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b15801561087157600080fd5b505afa158015610885573d6000803e3d6000fd5b505050506040513d602081101561089b57600080fd5b5051600354604080517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101859052905191909216916347e7ef2491604480830192600092919082900301818387803b15801561090b57600080fd5b505af115801561091f573d6000803e3d6000fd5b5050505050565b6000806013546000141561093f57506000905080610a6a565b6001600160a01b03831660009081526016602052604090205461099060646109846109758261062b86600563ffffffff611b7916565b6019549063ffffffff611b7916565b9063ffffffff611bd216565b92506109a381600163ffffffff61197716565b905060006109c2611c20610984601454426119d890919063ffffffff16565b90506109cf600882611c14565b90506109e1846103cf6103e884611c2a565b9350610a156064610984610a008261062b87600563ffffffff611b7916565b610a098961118d565b9063ffffffff611b7916565b6001600160a01b03861660009081526015602052604081205491945090610a4390859063ffffffff6119d816565b9050610a64601354610984601a54610a09858a611b7990919063ffffffff16565b94505050505b915091565b6006546001600160a01b031681565b60015490565b6004546001600160a01b031681565b60186020526000908152604090205481565b601154610abb9062093a8063ffffffff61197716565b421115610b3257601154610ad89062093a8063ffffffff61197716565b601155600854600754610af59161069d919063ffffffff6119d816565b601255600a8054600755600b8054600855600c80546009556040805160608101825260008082526020820181905291018190529283905590829055555b60008111610b87576040805162461bcd60e51b815260206004820152601160248201527f43616e6e6f742077697468647261772030000000000000000000000000000000604482015290519081900360640190fd5b610b9033611cc3565b610b9981611edb565b610ba4336000611f24565b600054610bc1906001600160a01b0316338363ffffffff611fd316565b50565b60145481565b6003546001600160a01b031681565b60156020526000908152604090205481565b601154610c019062093a8063ffffffff61197716565b421115610c7857601154610c1e9062093a8063ffffffff61197716565b601155600854600754610c3b9161069d919063ffffffff6119d816565b601255600a8054600755600b8054600855600c80546009556040805160608101825260008082526020820181905291018190529283905590829055555b6000546001600160a01b0316331480610d29575060055460048054604080517fa1578b6a0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316938101939093523360248401525192169163a1578b6a91604480820192602092909190829003018186803b158015610cfc57600080fd5b505afa158015610d10573d6000803e3d6000fd5b505050506040513d6020811015610d2657600080fd5b50515b610d7a576040805162461bcd60e51b815260206004820152600b60248201527f21617574686f72697a6564000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000610d936127106109848460fa63ffffffff611b7916565b9050610e2b600560009054906101000a90046001600160a01b03166001600160a01b03166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b158015610de657600080fd5b505afa158015610dfa573d6000803e3d6000fd5b505050506040513d6020811015610e1057600080fd5b50516004546001600160a01b0316908363ffffffff611a1a16565b600560009054906101000a90046001600160a01b03166001600160a01b03166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b158015610e7957600080fd5b505afa158015610e8d573d6000803e3d6000fd5b505050506040513d6020811015610ea357600080fd5b505160048054604080517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039283169381019390935260248301859052519216916347e7ef249160448082019260009290919082900301818387803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b50505050610f3f81836119d890919063ffffffff16565b600a54909150610f55908263ffffffff61197716565b600a55601354610f999015610f8857601354610f839061098484670de0b6b3a764000063ffffffff611b7916565b610f8a565b815b600c549063ffffffff61197716565b600c556040805183815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a15050565b601154610fe99062093a8063ffffffff61197716565b421115611060576011546110069062093a8063ffffffff61197716565b6011556008546007546110239161069d919063ffffffff6119d816565b601255600a8054600755600b8054600855600c80546009556040805160608101825260008082526020820181905291018190529283905590829055555b60128054600090915560055460048054604080517ff815c03d0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169381019390935251610bc193919091169163f815c03d916024808301926020929190829003018186803b1580156110d857600080fd5b505afa1580156110ec573d6000803e3d6000fd5b505050506040513d602081101561110257600080fd5b50516004546001600160a01b0316908363ffffffff611fd316565b6000546001600160a01b031681565b61113581611edb565b336000818152601660205260408120819055610ba49190611f24565b60075460085460095483565b600f6020526000908152604090205481565b60115481565b60176020526000908152604090205481565b601a5481565b6001600160a01b031660009081526002602052604090205490565b600a54600b54600c5483565b60106020526000908152604090205481565b60135481565b6011546111e29062093a8063ffffffff61197716565b421115611259576011546111ff9062093a8063ffffffff61197716565b60115560085460075461121c9161069d919063ffffffff6119d816565b601255600a8054600755600b8054600855600c80546009556040805160608101825260008082526020820181905291018190529283905590829055555b6006546001600160a01b031633146112b8576040805162461bcd60e51b815260206004820152600760248201527f6e6f7420676f7600000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b600d6020526000908152604090205481565b60115461131a9062093a8063ffffffff61197716565b421115611391576011546113379062093a8063ffffffff61197716565b6011556008546007546113549161069d919063ffffffff6119d816565b601255600a8054600755600b8054600855600c80546009556040805160608101825260008082526020820181905291018190529283905590829055555b3360009081526017602052604090205442116113f4576040805162461bcd60e51b815260206004820152601460248201527f6561726c7920626f6f7374207075726368617365000000000000000000000000604482015290519081900360640190fd5b6113fd33611cc3565b60008061140933610926565b915091506114173382612053565b60055460048054604080517ff1ac73b90000000000000000000000000000000000000000000000000000000081526001600160a01b03928316938101939093525192169163f1ac73b99160248082019260009290919082900301818387803b15801561148257600080fd5b505af1158015611496573d6000803e3d6000fd5b50506003546114b992506001600160a01b0316905033308563ffffffff6120f116565b5050565b6011546114d39062093a8063ffffffff61197716565b42111561154a576011546114f09062093a8063ffffffff61197716565b60115560085460075461150d9161069d919063ffffffff6119d816565b601255600a8054600755600b8054600855600c80546009556040805160608101825260008082526020820181905291018190529283905590829055555b6000811161159f576040805162461bcd60e51b815260206004820152600e60248201527f43616e6e6f74207374616b652030000000000000000000000000000000000000604482015290519081900360640190fd5b6115a833611cc3565b6115b18161217f565b336000908152601560205260409020546115d1908263ffffffff61197716565b336000908152601560205260409020556013546115f4908263ffffffff61197716565b601355600054610bc1906001600160a01b031633308463ffffffff6120f116565b62093a8081565b6011546116329062093a8063ffffffff61197716565b4211156116a95760115461164f9062093a8063ffffffff61197716565b60115560085460075461166c9161069d919063ffffffff6119d816565b601255600a8054600755600b8054600855600c80546009556040805160608101825260008082526020820181905291018190529283905590829055555b6006546001600160a01b03163314611708576040805162461bcd60e51b815260206004820152600760248201527f6e6f7420676f7600000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6011546117589062093a8063ffffffff61197716565b4211156117cf576011546117759062093a8063ffffffff61197716565b6011556008546007546117929161069d919063ffffffff6119d816565b601255600a8054600755600b8054600855600c80546009556040805160608101825260008082526020820181905291018190529283905590829055555b610bc181611cc3565b60195481565b60166020526000908152604090205481565b6011546118069062093a8063ffffffff61197716565b42111561187d576011546118239062093a8063ffffffff61197716565b6011556008546007546118409161069d919063ffffffff6119d816565b601255600a8054600755600b8054600855600c80546009556040805160608101825260008082526020820181905291018190529283905590829055555b61188e6118893361118d565b610aa5565b565b600e6020526000908152604090205481565b6005546001600160a01b031681565b60125481565b60008060008084156118f6575050600c546001600160a01b0385166000908152600e602090815260408083205460109092529091205491925090611925565b50506009546001600160a01b0385166000908152600d6020908152604080832054600f90925290912054919250905b61196d8161062b670de0b6b3a7640000610984611948888863ffffffff6119d816565b6001600160a01b038c166000908152601560205260409020549063ffffffff611b7916565b9695505050505050565b6000828201838110156119d1576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60006119d183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121b5565b801580611ab95750604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015611a8b57600080fd5b505afa158015611a9f573d6000803e3d6000fd5b505050506040513d6020811015611ab557600080fd5b5051155b611af45760405162461bcd60e51b815260040180806020018281038252603681526020018061250a6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b300000000000000000000000000000000000000000000000000000000179052611b7490849061224c565b505050565b600082611b8857506000610647565b82820282848281611b9557fe5b04146119d15760405162461bcd60e51b81526004018080602001828103825260218152602001806124bf6021913960400191505060405180910390fd5b60006119d183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612422565b6000818310611c2357816119d1565b5090919050565b600081611c38575083611cbb565b8160011415611c5c57611c5583610984878763ffffffff611b7916565b9050611cbb565b84158015611c6957508115155b15611c7657506000611cbb565b6000611c8c84610984888863ffffffff611b7916565b905060015b83811015611cb757611cad85610984848963ffffffff611b7916565b9150600101611c91565b5090505b949350505050565b6011546001600160a01b038216600090815260186020526040902054611cf29062093a8063ffffffff61197716565b11611d28576001600160a01b0381166000908152600f60209081526040808320839055600d825280832083905560169091528120555b6011546001600160a01b03821660009081526018602052604090205411611d8757611d548160006118b7565b6001600160a01b0382166000908152600f6020908152604080832093909355600954600d82528383205560169052908120555b611d928160016118b7565b6001600160a01b038216600090815260106020908152604080832093909355600c54600e825283832055600f90522054600854611dd49163ffffffff61197716565b6008556001600160a01b0381166000908152600f60209081526040808320805490849055601090925290912054600b54611e139163ffffffff61197716565b600b556001600160a01b038216600090815260106020526040902054611e4090829063ffffffff61197716565b6001600160a01b03831660009081526010602052604081205590508015611ebe57600454611e7e906001600160a01b0316838363ffffffff611fd316565b6040805182815290516001600160a01b038416917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a25b506001600160a01b03166000908152601860205260409020429055565b600154611eee908263ffffffff6119d816565b60015533600090815260026020526040902054611f11908263ffffffff6119d816565b3360009081526002602052604090205550565b6001600160a01b038216600090815260156020526040902054601354611f4f9163ffffffff6119d816565b60135580611f9e576001600160a01b038216600090815260166020526040902054611f9b9060649061098490611f9290839061062b90600563ffffffff611b7916565b610a098661118d565b90505b6001600160a01b0382166000908152601560205260409020819055601354611fcc908263ffffffff61197716565b6013555050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611b7490849061224c565b6001600160a01b03821660009081526016602052604090205461207d90600163ffffffff61197716565b6001600160a01b0383166000908152601660205260409020556120a08282611f24565b6120b242610e1063ffffffff61197716565b6001600160a01b0383166000908152601760205260409020556019546120e69060649061098490606563ffffffff611b7916565b601955505042601455565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261217990859061224c565b50505050565b600154612192908263ffffffff61197716565b60015533600090815260026020526040902054611f11908263ffffffff61197716565b600081848411156122445760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156122095781810151838201526020016121f1565b50505050905090810190601f1680156122365780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b61225e826001600160a01b0316612487565b6122af576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b6020831061230b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016122ce565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461236d576040519150601f19603f3d011682016040523d82523d6000602084013e612372565b606091505b5091509150816123c9576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115612179578080602001905160208110156123e557600080fd5b50516121795760405162461bcd60e51b815260040180806020018281038252602a8152602001806124e0602a913960400191505060405180910390fd5b600081836124715760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156122095781810151838201526020016121f1565b50600083858161247d57fe5b0495945050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590611cbb575014159291505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a265627a7a72315820696148880164884cc1ae72b13905b27b99a7de93b1bbb08df1b4fef490edca6264736f6c63430005110032000000000000000000000000f053b13fd62f908d0569099e517cb3b12a2be1b40000000000000000000000003e780920601d61cedb860fe9c4a90c9ea6a35e780000000000000000000000005cf5eecd076d1f2cbcd46b6bef1783b37d89748a000000000000000000000000d87e80bcd2527508b617dc33f4b73dc5dda200a2
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102765760003560e01c806364044fd911610160578063a694fc3a116100d8578063e72c3c421161008c578063eb681e3c11610071578063eb681e3c146105cc578063f77c4791146105f2578063f85f91b4146105fa57610276565b8063e72c3c421461059e578063e9fad8ee146105c457610276565b8063ab033ea9116100bd578063ab033ea91461054a578063c00007b014610570578063c675ccc11461059657610276565b8063a694fc3a14610525578063a70b9f0c1461054257610276565b80637d5c9b2f1161012f57806392eefe9b1161011457806392eefe9b146104d1578063a5fa3c91146104f7578063a66f42c01461051d57610276565b80637d5c9b2f146104a35780638112643c146104c957610276565b806364044fd914610447578063683dd1911461046d57806370a0823114610475578063766718081461049b57610276565b80633a589b97116101f357806351ed6a30116101c25780635cdaab48116101a75780635cdaab48146103f35780635d3b1f3814610419578063612c10111461043f57610276565b806351ed6a30146103ce5780635312ea8e146103d657610276565b80633a589b971461037b5780633ba35551146103835780633c6b16ab146103a95780633fbd474e146103c657610276565b806318160ddd1161024a57806327f0bfd61161022f57806327f0bfd6146103305780632e1a7d4d146103565780633004b4661461037357610276565b806318160ddd146103205780631f1fcd511461032857610276565b80628cc2621461027b5780630128ead8146102b35780630d7373a7146102bd57806312d43a51146102fc575b600080fd5b6102a16004803603602081101561029157600080fd5b50356001600160a01b0316610602565b60408051918252519081900360200190f35b6102bb61064d565b005b6102e3600480360360208110156102d357600080fd5b50356001600160a01b0316610926565b6040805192835260208301919091528051918290030190f35b610304610a6f565b604080516001600160a01b039092168252519081900360200190f35b6102a1610a7e565b610304610a84565b6102a16004803603602081101561034657600080fd5b50356001600160a01b0316610a93565b6102bb6004803603602081101561036c57600080fd5b5035610aa5565b6102a1610bc4565b610304610bca565b6102a16004803603602081101561039957600080fd5b50356001600160a01b0316610bd9565b6102bb600480360360208110156103bf57600080fd5b5035610beb565b6102bb610fd3565b61030461111d565b6102bb600480360360208110156103ec57600080fd5b503561112c565b6103fb611151565b60408051938452602084019290925282820152519081900360600190f35b6102a16004803603602081101561042f57600080fd5b50356001600160a01b031661115d565b6102a161116f565b6102a16004803603602081101561045d57600080fd5b50356001600160a01b0316611175565b6102a1611187565b6102a16004803603602081101561048b57600080fd5b50356001600160a01b031661118d565b6103fb6111a8565b6102a1600480360360208110156104b957600080fd5b50356001600160a01b03166111b4565b6102a16111c6565b6102bb600480360360208110156104e757600080fd5b50356001600160a01b03166111cc565b6102a16004803603602081101561050d57600080fd5b50356001600160a01b03166112f2565b6102bb611304565b6102bb6004803603602081101561053b57600080fd5b50356114bd565b6102a1611615565b6102bb6004803603602081101561056057600080fd5b50356001600160a01b031661161c565b6102bb6004803603602081101561058657600080fd5b50356001600160a01b0316611742565b6102a16117d8565b6102a1600480360360208110156105b457600080fd5b50356001600160a01b03166117de565b6102bb6117f0565b6102a1600480360360208110156105e257600080fd5b50356001600160a01b0316611890565b6103046118a2565b6102a16118b1565b600062093a8060115401421161063c576106376106208360016118b7565b61062b8460006118b7565b9063ffffffff61197716565b610647565b6106478260016118b7565b92915050565b6011546106639062093a8063ffffffff61197716565b4211156106e9576011546106809062093a8063ffffffff61197716565b6011556008546007546106ac9161069d919063ffffffff6119d816565b6012549063ffffffff61197716565b601255600a8054600755600b8054600855600c80546009556040805160608101825260008082526020820181905291018190529283905590829055555b600354604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561074d57600080fd5b505afa158015610761573d6000803e3d6000fd5b505050506040513d602081101561077757600080fd5b5051600554604080517f61d027b30000000000000000000000000000000000000000000000000000000081529051929350610823926001600160a01b03909216916361d027b391600480820192602092909190829003018186803b1580156107de57600080fd5b505afa1580156107f2573d6000803e3d6000fd5b505050506040513d602081101561080857600080fd5b50516003546001600160a01b0316908363ffffffff611a1a16565b600560009054906101000a90046001600160a01b03166001600160a01b03166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b15801561087157600080fd5b505afa158015610885573d6000803e3d6000fd5b505050506040513d602081101561089b57600080fd5b5051600354604080517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101859052905191909216916347e7ef2491604480830192600092919082900301818387803b15801561090b57600080fd5b505af115801561091f573d6000803e3d6000fd5b5050505050565b6000806013546000141561093f57506000905080610a6a565b6001600160a01b03831660009081526016602052604090205461099060646109846109758261062b86600563ffffffff611b7916565b6019549063ffffffff611b7916565b9063ffffffff611bd216565b92506109a381600163ffffffff61197716565b905060006109c2611c20610984601454426119d890919063ffffffff16565b90506109cf600882611c14565b90506109e1846103cf6103e884611c2a565b9350610a156064610984610a008261062b87600563ffffffff611b7916565b610a098961118d565b9063ffffffff611b7916565b6001600160a01b03861660009081526015602052604081205491945090610a4390859063ffffffff6119d816565b9050610a64601354610984601a54610a09858a611b7990919063ffffffff16565b94505050505b915091565b6006546001600160a01b031681565b60015490565b6004546001600160a01b031681565b60186020526000908152604090205481565b601154610abb9062093a8063ffffffff61197716565b421115610b3257601154610ad89062093a8063ffffffff61197716565b601155600854600754610af59161069d919063ffffffff6119d816565b601255600a8054600755600b8054600855600c80546009556040805160608101825260008082526020820181905291018190529283905590829055555b60008111610b87576040805162461bcd60e51b815260206004820152601160248201527f43616e6e6f742077697468647261772030000000000000000000000000000000604482015290519081900360640190fd5b610b9033611cc3565b610b9981611edb565b610ba4336000611f24565b600054610bc1906001600160a01b0316338363ffffffff611fd316565b50565b60145481565b6003546001600160a01b031681565b60156020526000908152604090205481565b601154610c019062093a8063ffffffff61197716565b421115610c7857601154610c1e9062093a8063ffffffff61197716565b601155600854600754610c3b9161069d919063ffffffff6119d816565b601255600a8054600755600b8054600855600c80546009556040805160608101825260008082526020820181905291018190529283905590829055555b6000546001600160a01b0316331480610d29575060055460048054604080517fa1578b6a0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316938101939093523360248401525192169163a1578b6a91604480820192602092909190829003018186803b158015610cfc57600080fd5b505afa158015610d10573d6000803e3d6000fd5b505050506040513d6020811015610d2657600080fd5b50515b610d7a576040805162461bcd60e51b815260206004820152600b60248201527f21617574686f72697a6564000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000610d936127106109848460fa63ffffffff611b7916565b9050610e2b600560009054906101000a90046001600160a01b03166001600160a01b03166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b158015610de657600080fd5b505afa158015610dfa573d6000803e3d6000fd5b505050506040513d6020811015610e1057600080fd5b50516004546001600160a01b0316908363ffffffff611a1a16565b600560009054906101000a90046001600160a01b03166001600160a01b03166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b158015610e7957600080fd5b505afa158015610e8d573d6000803e3d6000fd5b505050506040513d6020811015610ea357600080fd5b505160048054604080517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039283169381019390935260248301859052519216916347e7ef249160448082019260009290919082900301818387803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b50505050610f3f81836119d890919063ffffffff16565b600a54909150610f55908263ffffffff61197716565b600a55601354610f999015610f8857601354610f839061098484670de0b6b3a764000063ffffffff611b7916565b610f8a565b815b600c549063ffffffff61197716565b600c556040805183815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a15050565b601154610fe99062093a8063ffffffff61197716565b421115611060576011546110069062093a8063ffffffff61197716565b6011556008546007546110239161069d919063ffffffff6119d816565b601255600a8054600755600b8054600855600c80546009556040805160608101825260008082526020820181905291018190529283905590829055555b60128054600090915560055460048054604080517ff815c03d0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169381019390935251610bc193919091169163f815c03d916024808301926020929190829003018186803b1580156110d857600080fd5b505afa1580156110ec573d6000803e3d6000fd5b505050506040513d602081101561110257600080fd5b50516004546001600160a01b0316908363ffffffff611fd316565b6000546001600160a01b031681565b61113581611edb565b336000818152601660205260408120819055610ba49190611f24565b60075460085460095483565b600f6020526000908152604090205481565b60115481565b60176020526000908152604090205481565b601a5481565b6001600160a01b031660009081526002602052604090205490565b600a54600b54600c5483565b60106020526000908152604090205481565b60135481565b6011546111e29062093a8063ffffffff61197716565b421115611259576011546111ff9062093a8063ffffffff61197716565b60115560085460075461121c9161069d919063ffffffff6119d816565b601255600a8054600755600b8054600855600c80546009556040805160608101825260008082526020820181905291018190529283905590829055555b6006546001600160a01b031633146112b8576040805162461bcd60e51b815260206004820152600760248201527f6e6f7420676f7600000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b600d6020526000908152604090205481565b60115461131a9062093a8063ffffffff61197716565b421115611391576011546113379062093a8063ffffffff61197716565b6011556008546007546113549161069d919063ffffffff6119d816565b601255600a8054600755600b8054600855600c80546009556040805160608101825260008082526020820181905291018190529283905590829055555b3360009081526017602052604090205442116113f4576040805162461bcd60e51b815260206004820152601460248201527f6561726c7920626f6f7374207075726368617365000000000000000000000000604482015290519081900360640190fd5b6113fd33611cc3565b60008061140933610926565b915091506114173382612053565b60055460048054604080517ff1ac73b90000000000000000000000000000000000000000000000000000000081526001600160a01b03928316938101939093525192169163f1ac73b99160248082019260009290919082900301818387803b15801561148257600080fd5b505af1158015611496573d6000803e3d6000fd5b50506003546114b992506001600160a01b0316905033308563ffffffff6120f116565b5050565b6011546114d39062093a8063ffffffff61197716565b42111561154a576011546114f09062093a8063ffffffff61197716565b60115560085460075461150d9161069d919063ffffffff6119d816565b601255600a8054600755600b8054600855600c80546009556040805160608101825260008082526020820181905291018190529283905590829055555b6000811161159f576040805162461bcd60e51b815260206004820152600e60248201527f43616e6e6f74207374616b652030000000000000000000000000000000000000604482015290519081900360640190fd5b6115a833611cc3565b6115b18161217f565b336000908152601560205260409020546115d1908263ffffffff61197716565b336000908152601560205260409020556013546115f4908263ffffffff61197716565b601355600054610bc1906001600160a01b031633308463ffffffff6120f116565b62093a8081565b6011546116329062093a8063ffffffff61197716565b4211156116a95760115461164f9062093a8063ffffffff61197716565b60115560085460075461166c9161069d919063ffffffff6119d816565b601255600a8054600755600b8054600855600c80546009556040805160608101825260008082526020820181905291018190529283905590829055555b6006546001600160a01b03163314611708576040805162461bcd60e51b815260206004820152600760248201527f6e6f7420676f7600000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6011546117589062093a8063ffffffff61197716565b4211156117cf576011546117759062093a8063ffffffff61197716565b6011556008546007546117929161069d919063ffffffff6119d816565b601255600a8054600755600b8054600855600c80546009556040805160608101825260008082526020820181905291018190529283905590829055555b610bc181611cc3565b60195481565b60166020526000908152604090205481565b6011546118069062093a8063ffffffff61197716565b42111561187d576011546118239062093a8063ffffffff61197716565b6011556008546007546118409161069d919063ffffffff6119d816565b601255600a8054600755600b8054600855600c80546009556040805160608101825260008082526020820181905291018190529283905590829055555b61188e6118893361118d565b610aa5565b565b600e6020526000908152604090205481565b6005546001600160a01b031681565b60125481565b60008060008084156118f6575050600c546001600160a01b0385166000908152600e602090815260408083205460109092529091205491925090611925565b50506009546001600160a01b0385166000908152600d6020908152604080832054600f90925290912054919250905b61196d8161062b670de0b6b3a7640000610984611948888863ffffffff6119d816565b6001600160a01b038c166000908152601560205260409020549063ffffffff611b7916565b9695505050505050565b6000828201838110156119d1576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60006119d183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121b5565b801580611ab95750604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015611a8b57600080fd5b505afa158015611a9f573d6000803e3d6000fd5b505050506040513d6020811015611ab557600080fd5b5051155b611af45760405162461bcd60e51b815260040180806020018281038252603681526020018061250a6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b300000000000000000000000000000000000000000000000000000000179052611b7490849061224c565b505050565b600082611b8857506000610647565b82820282848281611b9557fe5b04146119d15760405162461bcd60e51b81526004018080602001828103825260218152602001806124bf6021913960400191505060405180910390fd5b60006119d183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612422565b6000818310611c2357816119d1565b5090919050565b600081611c38575083611cbb565b8160011415611c5c57611c5583610984878763ffffffff611b7916565b9050611cbb565b84158015611c6957508115155b15611c7657506000611cbb565b6000611c8c84610984888863ffffffff611b7916565b905060015b83811015611cb757611cad85610984848963ffffffff611b7916565b9150600101611c91565b5090505b949350505050565b6011546001600160a01b038216600090815260186020526040902054611cf29062093a8063ffffffff61197716565b11611d28576001600160a01b0381166000908152600f60209081526040808320839055600d825280832083905560169091528120555b6011546001600160a01b03821660009081526018602052604090205411611d8757611d548160006118b7565b6001600160a01b0382166000908152600f6020908152604080832093909355600954600d82528383205560169052908120555b611d928160016118b7565b6001600160a01b038216600090815260106020908152604080832093909355600c54600e825283832055600f90522054600854611dd49163ffffffff61197716565b6008556001600160a01b0381166000908152600f60209081526040808320805490849055601090925290912054600b54611e139163ffffffff61197716565b600b556001600160a01b038216600090815260106020526040902054611e4090829063ffffffff61197716565b6001600160a01b03831660009081526010602052604081205590508015611ebe57600454611e7e906001600160a01b0316838363ffffffff611fd316565b6040805182815290516001600160a01b038416917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a25b506001600160a01b03166000908152601860205260409020429055565b600154611eee908263ffffffff6119d816565b60015533600090815260026020526040902054611f11908263ffffffff6119d816565b3360009081526002602052604090205550565b6001600160a01b038216600090815260156020526040902054601354611f4f9163ffffffff6119d816565b60135580611f9e576001600160a01b038216600090815260166020526040902054611f9b9060649061098490611f9290839061062b90600563ffffffff611b7916565b610a098661118d565b90505b6001600160a01b0382166000908152601560205260409020819055601354611fcc908263ffffffff61197716565b6013555050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611b7490849061224c565b6001600160a01b03821660009081526016602052604090205461207d90600163ffffffff61197716565b6001600160a01b0383166000908152601660205260409020556120a08282611f24565b6120b242610e1063ffffffff61197716565b6001600160a01b0383166000908152601760205260409020556019546120e69060649061098490606563ffffffff611b7916565b601955505042601455565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261217990859061224c565b50505050565b600154612192908263ffffffff61197716565b60015533600090815260026020526040902054611f11908263ffffffff61197716565b600081848411156122445760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156122095781810151838201526020016121f1565b50505050905090810190601f1680156122365780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b61225e826001600160a01b0316612487565b6122af576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b6020831061230b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016122ce565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461236d576040519150601f19603f3d011682016040523d82523d6000602084013e612372565b606091505b5091509150816123c9576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115612179578080602001905160208110156123e557600080fd5b50516121795760405162461bcd60e51b815260040180806020018281038252602a8152602001806124e0602a913960400191505060405180910390fd5b600081836124715760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156122095781810151838201526020016121f1565b50600083858161247d57fe5b0495945050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590611cbb575014159291505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a265627a7a72315820696148880164884cc1ae72b13905b27b99a7de93b1bbb08df1b4fef490edca6264736f6c63430005110032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f053b13fd62f908d0569099e517cb3b12a2be1b40000000000000000000000003e780920601d61cedb860fe9c4a90c9ea6a35e780000000000000000000000005cf5eecd076d1f2cbcd46b6bef1783b37d89748a000000000000000000000000d87e80bcd2527508b617dc33f4b73dc5dda200a2
-----Decoded View---------------
Arg [0] : _stakeToken (address): 0xf053B13FD62f908d0569099E517cB3B12A2BE1B4
Arg [1] : _boostToken (address): 0x3e780920601D61cEdb860fe9c4a90c9EA6A35E78
Arg [2] : _controller (address): 0x5Cf5eeCd076D1f2CBCD46B6bEF1783b37D89748a
Arg [3] : _gov (address): 0xd87e80bCd2527508b617dc33F4b73Dc5DdA200a2
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000f053b13fd62f908d0569099e517cb3b12a2be1b4
Arg [1] : 0000000000000000000000003e780920601d61cedb860fe9c4a90c9ea6a35e78
Arg [2] : 0000000000000000000000005cf5eecd076d1f2cbcd46b6bef1783b37d89748a
Arg [3] : 000000000000000000000000d87e80bcd2527508b617dc33f4b73dc5dda200a2
Deployed Bytecode Sourcemap
20696:13667:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20696:13667:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23596:237;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23596:237:0;-1:-1:-1;;;;;23596:237:0;;:::i;:::-;;;;;;;;;;;;;;;;24536:342;;;:::i;:::-;;26757:1299;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26757:1299:0;-1:-1:-1;;;;;26757:1299:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;20992:18;;;:::i;:::-;;;;-1:-1:-1;;;;;20992:18:0;;;;;;;;;;;;;;18795:91;;;:::i;20931:18::-;;;:::i;22050:49::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22050:49:0;-1:-1:-1;;;;;22050:49:0;;:::i;28682:361::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28682:361:0;;:::i;21687:32::-;;;:::i;20900:24::-;;;:::i;21760:50::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21760:50:0;-1:-1:-1;;;;;21760:50:0;;:::i;25800:949::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25800:949:0;;:::i;24291:237::-;;;:::i;18583:24::-;;;:::i;29186:360::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29186:360:0;;:::i;21019:33::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;21251:64;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21251:64:0;-1:-1:-1;;;;;21251:64:0;;:::i;21449:31::-;;;:::i;21919:56::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21919:56:0;-1:-1:-1;;;;;21919:56:0;;:::i;22155:32::-;;;:::i;18894:110::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18894:110:0;-1:-1:-1;;;;;18894:110:0;;:::i;21059:32::-;;;:::i;21322:63::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21322:63:0;-1:-1:-1;;;;;21322:63:0;;:::i;21647:33::-;;;:::i;23991:167::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23991:167:0;-1:-1:-1;;;;;23991:167:0;;:::i;21098:70::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21098:70:0;-1:-1:-1;;;;;21098:70:0;;:::i;24886:782::-;;;:::i;28147:527::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28147:527:0;;:::i;21394:48::-;;;:::i;23841:142::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23841:142:0;-1:-1:-1;;;;;23841:142:0;;:::i;24166:117::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24166:117:0;-1:-1:-1;;;;;24166:117:0;;:::i;22108:40::-;;;:::i;21817:52::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21817:52:0;-1:-1:-1;;;;;21817:52:0;;:::i;29554:92::-;;;:::i;21175:69::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21175:69:0;-1:-1:-1;;;;;21175:69:0;;:::i;20956:29::-;;;:::i;21487:31::-;;;:::i;23596:237::-;23649:7;21435;23695:16;;:33;23677:15;:51;23676:149;;23780:45;23805:19;23813:4;23819;23805:7;:19::i;:::-;23780:20;23788:4;23794:5;23780:7;:20::i;:::-;:24;:45;:24;:45;:::i;:::-;23676:149;;;23745:19;23753:4;23759;23745:7;:19::i;:::-;23669:156;23596:237;-1:-1:-1;;23596:237:0:o;24536:342::-;22954:16;;:36;;21435:7;22954:36;:20;:36;:::i;:::-;22936:15;:54;22932:637;;;23026:16;;:36;;21435:7;23026:36;:20;:36;:::i;:::-;23007:16;:55;23211:28;;:13;23176:30;23137:118;;23176:64;;:30;:64;:34;:64;:::i;:::-;23137:16;;;:118;:20;:118;:::i;:::-;23118:16;:137;23338:12;23322:28;;:13;:28;-1:-1:-1;23322:28:0;;;;;;;;;23418:139;;;;;;;;23322:28;23418:139;;;;;;;;;;;;;;23403:154;;;;;;;;;22932:637;24688:10;;:35;;;;;;24717:4;24688:35;;;;;;24664:21;;-1:-1:-1;;;;;24688:10:0;;:20;;:35;;;;;;;;;;;;;;:10;:35;;;5:2:-1;;;;30:1;27;20:12;5:2;24688:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24688:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24688:35:0;24765:10;;:21;;;;;;;;24688:35;;-1:-1:-1;24734:69:0;;-1:-1:-1;;;;;24765:10:0;;;;:19;;:21;;;;;24688:35;;24765:21;;;;;;;;:10;:21;;;5:2:-1;;;;30:1;27;20:12;5:2;24765:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24765:21:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24765:21:0;24734:10;;-1:-1:-1;;;;;24734:10:0;;24789:13;24734:69;:22;:69;:::i;:::-;24814:10;;;;;;;;;-1:-1:-1;;;;;24814:10:0;-1:-1:-1;;;;;24814:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24814:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24814:21:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24814:21:0;24844:10;;24814:56;;;;;;-1:-1:-1;;;;;24844:10:0;;;24814:56;;;;;;;;;;;;:29;;;;;;;:56;;;;;24844:10;;24814:56;;;;;;;24844:10;24814:29;:56;;;5:2:-1;;;;30:1;27;20:12;5:2;24814:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24814:56:0;;;;23579:1;24536:342::o;26757:1299::-;26826:20;26848:23;26893:18;;26915:1;26893:23;26889:41;;;-1:-1:-1;26926:1:0;;-1:-1:-1;26926:1:0;26918:12;;26889:41;-1:-1:-1;;;;;27035:23:0;;27010:22;27035:23;;;:17;:23;;;;;;27084:63;27143:3;27084:54;27107:30;27143:3;27107:21;27035:23;27126:1;27107:21;:18;:21;:::i;:30::-;27084:18;;;:54;:22;:54;:::i;:::-;:58;:63;:58;:63;:::i;:::-;27069:78;-1:-1:-1;27219:21:0;:14;27238:1;27219:21;:18;:21;:::i;:::-;27202:38;;27370:21;27394:53;27439:7;27395:38;27415:17;;27395:15;:19;;:38;;;;:::i;27394:53::-;27370:77;;27474:26;27483:1;27486:13;27474:8;:26::i;:::-;27458:42;;27526:43;27530:12;27544:3;27549:4;27555:13;27526:3;:43::i;:::-;27511:58;-1:-1:-1;27729:88:0;27813:3;27729:65;27763:30;27813:3;27763:21;:14;27782:1;27763:21;:18;:21;:::i;:30::-;27729:15;27739:4;27729:9;:15::i;:::-;:33;:65;:33;:65;:::i;:88::-;-1:-1:-1;;;;;27879:21:0;;27828:28;27879:21;;;:15;:21;;;;;;27711:106;;-1:-1:-1;27828:28:0;27859:42;;27711:106;;27859:42;:19;:42;:::i;:::-;27828:73;;27927:121;28029:18;;27927:83;27998:11;;27927:52;27958:20;27927:12;:30;;:52;;;;:::i;:121::-;27912:136;;26757:1299;;;;;;;:::o;20992:18::-;;;-1:-1:-1;;;;;20992:18:0;;:::o;18795:91::-;18866:12;;18795:91;:::o;20931:18::-;;;-1:-1:-1;;;;;20931:18:0;;:::o;22050:49::-;;;;;;;;;;;;;:::o;28682:361::-;22954:16;;:36;;21435:7;22954:36;:20;:36;:::i;:::-;22936:15;:54;22932:637;;;23026:16;;:36;;21435:7;23026:36;:20;:36;:::i;:::-;23007:16;:55;23211:28;;:13;23176:30;23137:118;;23176:64;;:30;:64;:34;:64;:::i;23137:118::-;23118:16;:137;23338:12;23322:28;;:13;:28;-1:-1:-1;23322:28:0;;;;;;;;;23418:139;;;;;;;;23322:28;23418:139;;;;;;;;;;;;;;23403:154;;;;;;;;;22932:637;28770:1;28761:6;:10;28753:40;;;;;-1:-1:-1;;;28753:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;28804:43;28836:10;28804:31;:43::i;:::-;28858:22;28873:6;28858:14;:22::i;:::-;28939:42;28967:10;28979:1;28939:27;:42::i;:::-;28992:10;;:43;;-1:-1:-1;;;;;28992:10:0;29016;29028:6;28992:43;:23;:43;:::i;:::-;28682:361;:::o;21687:32::-;;;;:::o;20900:24::-;;;-1:-1:-1;;;;;20900:24:0;;:::o;21760:50::-;;;;;;;;;;;;;:::o;25800:949::-;22954:16;;:36;;21435:7;22954:36;:20;:36;:::i;:::-;22936:15;:54;22932:637;;;23026:16;;:36;;21435:7;23026:36;:20;:36;:::i;:::-;23007:16;:55;23211:28;;:13;23176:30;23137:118;;23176:64;;:30;:64;:34;:64;:::i;23137:118::-;23118:16;:137;23338:12;23322:28;;:13;:28;-1:-1:-1;23322:28:0;;;;;;;;;23418:139;;;;;;;;23322:28;23418:139;;;;;;;;;;;;;;23403:154;;;;;;;;;22932:637;25950:10;;-1:-1:-1;;;;;25950:10:0;25928;:33;;:106;;-1:-1:-1;25978:10:0;;26016:4;;;25978:56;;;;;;-1:-1:-1;;;;;26016:4:0;;;25978:56;;;;;;;26023:10;25978:56;;;;;:10;;;:29;;:56;;;;;;;;;;;;;;;:10;:56;;;5:2:-1;;;;30:1;27;20:12;5:2;25978:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25978:56:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25978:56:0;25928:106;25906:167;;;;;-1:-1:-1;;;25906:167:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26117:20;26140:35;22277:5;26140:24;:6;22330:3;26140:24;:10;:24;:::i;:35::-;26117:58;;26186:62;26211:10;;;;;;;;;-1:-1:-1;;;;;26211:10:0;-1:-1:-1;;;;;26211:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26211:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26211:21:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26211:21:0;26186:4;;-1:-1:-1;;;;;26186:4:0;;26235:12;26186:62;:16;:62;:::i;:::-;26259:10;;;;;;;;;-1:-1:-1;;;;;26259:10:0;-1:-1:-1;;;;;26259:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26259:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26259:21:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26259:21:0;26289:4;;;26259:49;;;;;;-1:-1:-1;;;;;26289:4:0;;;26259:49;;;;;;;;;;;;;;:29;;;;;:49;;;;;26289:4;;26259:49;;;;;;;;26289:4;26259:29;:49;;;5:2:-1;;;;30:1;27;20:12;5:2;26259:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26259:49:0;;;;26374:24;26385:12;26374:6;:10;;:24;;;;:::i;:::-;26441:12;:29;26359:39;;-1:-1:-1;26441:47:0;;26359:39;26441:47;:33;:47;:::i;:::-;26409:12;:79;26576:18;;26529:177;;26576:23;26575:120;;26676:18;;26644:51;;:27;:12;22232:4;26644:27;:16;:27;:::i;:51::-;26575:120;;;26616:12;26575:120;26529:27;;;:177;:31;:177;:::i;:::-;26499:27;:207;26722:19;;;;;;;;;;;;;;;;;23579:1;25800:949;:::o;24291:237::-;22954:16;;:36;;21435:7;22954:36;:20;:36;:::i;:::-;22936:15;:54;22932:637;;;23026:16;;:36;;21435:7;23026:36;:20;:36;:::i;:::-;23007:16;:55;23211:28;;:13;23176:30;23137:118;;23176:64;;:30;:64;:34;:64;:::i;23137:118::-;23118:16;:137;23338:12;23322:28;;:13;:28;-1:-1:-1;23322:28:0;;;;;;;;;23418:139;;;;;;;;23322:28;23418:139;;;;;;;;;;;;;;23403:154;;;;;;;;;22932:637;24387:16;;;24362:22;24414:20;;;24471:10;;24496:4;;;24471:31;;;;;;-1:-1:-1;;;;;24496:4:0;;;24471:31;;;;;;;;24445:75;;24471:10;;;;;:16;;:31;;;;;;;;;;;;;;:10;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;24471:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24471:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24471:31:0;24445:4;;-1:-1:-1;;;;;24445:4:0;;24505:14;24445:75;:17;:75;:::i;18583:24::-;;;-1:-1:-1;;;;;18583:24:0;;:::o;29186:360::-;29247:22;29262:6;29247:14;:22::i;:::-;29334:10;29348:1;29316:29;;;:17;:29;;;;;:33;;;29406:42;;29334:10;29406:27;:42::i;21019:33::-;;;;;;;;:::o;21251:64::-;;;;;;;;;;;;;:::o;21449:31::-;;;;:::o;21919:56::-;;;;;;;;;;;;;:::o;22155:32::-;;;;:::o;18894:110::-;-1:-1:-1;;;;;18978:18:0;18951:7;18978:18;;;:9;:18;;;;;;;18894:110::o;21059:32::-;;;;;;;;:::o;21322:63::-;;;;;;;;;;;;;:::o;21647:33::-;;;;:::o;23991:167::-;22954:16;;:36;;21435:7;22954:36;:20;:36;:::i;:::-;22936:15;:54;22932:637;;;23026:16;;:36;;21435:7;23026:36;:20;:36;:::i;:::-;23007:16;:55;23211:28;;:13;23176:30;23137:118;;23176:64;;:30;:64;:34;:64;:::i;23137:118::-;23118:16;:137;23338:12;23322:28;;:13;:28;-1:-1:-1;23322:28:0;;;;;;;;;23418:139;;;;;;;;23322:28;23418:139;;;;;;;;;;;;;;23403:154;;;;;;;;;22932:637;24100:3;;-1:-1:-1;;;;;24100:3:0;24086:10;:17;24078:37;;;;;-1:-1:-1;;;24078:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24126:10;:24;;;;-1:-1:-1;;;;;24126:24:0;;;;;;;;;;23991:167::o;21098:70::-;;;;;;;;;;;;;:::o;24886:782::-;22954:16;;:36;;21435:7;22954:36;:20;:36;:::i;:::-;22936:15;:54;22932:637;;;23026:16;;:36;;21435:7;23026:36;:20;:36;:::i;:::-;23007:16;:55;23211:28;;:13;23176:30;23137:118;;23176:64;;:30;:64;:34;:64;:::i;23137:118::-;23118:16;:137;23338:12;23322:28;;:13;:28;-1:-1:-1;23322:28:0;;;;;;;;;23418:139;;;;;;;;23322:28;23418:139;;;;;;;;;;;;;;23403:154;;;;;;;;;22932:637;25004:10;24982:33;;;;:21;:33;;;;;;24964:15;:51;24942:121;;;;;-1:-1:-1;;;24942:121:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;25074:43;25106:10;25074:31;:43::i;:::-;25283:21;25306:23;25333:27;25349:10;25333:15;:27::i;:::-;25282:78;;;;25449:39;25460:10;25472:15;25449:10;:39::i;:::-;25534:10;;25572:4;;;25534:44;;;;;;-1:-1:-1;;;;;25572:4:0;;;25534:44;;;;;;;;:10;;;:29;;:44;;;;;:10;;:44;;;;;;;;:10;;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;25534:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;25591:10:0;;:69;;-1:-1:-1;;;;;;25591:10:0;;-1:-1:-1;25619:10:0;25639:4;25646:13;25591:69;:27;:69;:::i;:::-;23579:1;;24886:782::o;28147:527::-;22954:16;;:36;;21435:7;22954:36;:20;:36;:::i;:::-;22936:15;:54;22932:637;;;23026:16;;:36;;21435:7;23026:36;:20;:36;:::i;:::-;23007:16;:55;23211:28;;:13;23176:30;23137:118;;23176:64;;:30;:64;:34;:64;:::i;23137:118::-;23118:16;:137;23338:12;23322:28;;:13;:28;-1:-1:-1;23322:28:0;;;;;;;;;23418:139;;;;;;;;23322:28;23418:139;;;;;;;;;;;;;;23403:154;;;;;;;;;22932:637;28232:1;28223:6;:10;28215:37;;;;;-1:-1:-1;;;28215:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;28263:43;28295:10;28263:31;:43::i;:::-;28317:19;28329:6;28317:11;:19::i;:::-;28451:10;28435:27;;;;:15;:27;;;;;;:39;;28467:6;28435:39;:31;:39;:::i;:::-;28421:10;28405:27;;;;:15;:27;;;;;:69;28506:18;;:30;;28529:6;28506:30;:22;:30;:::i;:::-;28485:18;:51;28604:10;;:62;;-1:-1:-1;;;;;28604:10:0;28632;28652:4;28659:6;28604:62;:27;:62;:::i;21394:48::-;21435:7;21394:48;:::o;23841:142::-;22954:16;;:36;;21435:7;22954:36;:20;:36;:::i;:::-;22936:15;:54;22932:637;;;23026:16;;:36;;21435:7;23026:36;:20;:36;:::i;:::-;23007:16;:55;23211:28;;:13;23176:30;23137:118;;23176:64;;:30;:64;:34;:64;:::i;23137:118::-;23118:16;:137;23338:12;23322:28;;:13;:28;-1:-1:-1;23322:28:0;;;;;;;;;23418:139;;;;;;;;23322:28;23418:139;;;;;;;;;;;;;;23403:154;;;;;;;;;22932:637;23939:3;;-1:-1:-1;;;;;23939:3:0;23925:10;:17;23917:37;;;;;-1:-1:-1;;;23917:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23965:3;:10;;;;-1:-1:-1;;;;;23965:10:0;;;;;;;;;;23841:142::o;24166:117::-;22954:16;;:36;;21435:7;22954:36;:20;:36;:::i;:::-;22936:15;:54;22932:637;;;23026:16;;:36;;21435:7;23026:36;:20;:36;:::i;:::-;23007:16;:55;23211:28;;:13;23176:30;23137:118;;23176:64;;:30;:64;:34;:64;:::i;23137:118::-;23118:16;:137;23338:12;23322:28;;:13;:28;-1:-1:-1;23322:28:0;;;;;;;;;23418:139;;;;;;;;23322:28;23418:139;;;;;;;;;;;;;;23403:154;;;;;;;;;22932:637;24238:37;24270:4;24238:31;:37::i;22108:40::-;;;;:::o;21817:52::-;;;;;;;;;;;;;:::o;29554:92::-;22954:16;;:36;;21435:7;22954:36;:20;:36;:::i;:::-;22936:15;:54;22932:637;;;23026:16;;:36;;21435:7;23026:36;:20;:36;:::i;:::-;23007:16;:55;23211:28;;:13;23176:30;23137:118;;23176:64;;:30;:64;:34;:64;:::i;23137:118::-;23118:16;:137;23338:12;23322:28;;:13;:28;-1:-1:-1;23322:28:0;;;;;;;;;23418:139;;;;;;;;23322:28;23418:139;;;;;;;;;;;;;;23403:154;;;;;;;;;22932:637;29607:31;29616:21;29626:10;29616:9;:21::i;:::-;29607:8;:31::i;:::-;29554:92::o;21175:69::-;;;;;;;;;;;;;:::o;20956:29::-;;;-1:-1:-1;;;;;20956:29:0;;:::o;21487:31::-;;;;:::o;32751:884::-;32829:7;32849:22;32882:30;32923:24;32964:14;32960:479;;;-1:-1:-1;;33012:27:0;;-1:-1:-1;;;;;33079:43:0;;;;;;:34;:43;;;;;;;;;33156:28;:37;;;;;;;33012:27;;-1:-1:-1;33079:43:0;32960:479;;;-1:-1:-1;;33243:28:0;;-1:-1:-1;;;;;33311:44:0;;;;;;:35;:44;;;;;;;;;33389:29;:38;;;;;;;33243:28;;-1:-1:-1;33311:44:0;32960:479;33469:158;33610:16;33469:118;33582:4;33469:90;33516:42;:14;33535:22;33516:42;:18;:42;:::i;:::-;-1:-1:-1;;;;;33469:24:0;;;;;;:15;:24;;;;;;;:90;:46;:90;:::i;:158::-;33449:178;32751:884;-1:-1:-1;;;;;;32751:884:0:o;2171:181::-;2229:7;2261:5;;;2285:6;;;;2277:46;;;;;-1:-1:-1;;;2277:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;2343:1;2171:181;-1:-1:-1;;;2171:181:0:o;2627:136::-;2685:7;2712:43;2716:1;2719;2712:43;;;;;;;;;;;;;;;;;:3;:43::i;13827:621::-;14197:10;;;14196:62;;-1:-1:-1;14213:39:0;;;;;;14237:4;14213:39;;;;-1:-1:-1;;;;;14213:39:0;;;;;;;;;:15;;;;;;:39;;;;;;;;;;;;;;;:15;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;14213:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14213:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14213:39:0;:44;14196:62;14188:152;;;;-1:-1:-1;;;14188:152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14377:62;;;-1:-1:-1;;;;;14377:62:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;14377:62:0;;;;;;;;25:18:-1;;61:17;;14377:62:0;182:15:-1;14400:22:0;179:29:-1;160:49;;14351:89:0;;14370:5;;14351:18;:89::i;:::-;13827:621;;;:::o;3543:471::-;3601:7;3846:6;3842:47;;-1:-1:-1;3876:1:0;3869:8;;3842:47;3913:5;;;3917:1;3913;:5;:1;3937:5;;;;;:10;3929:56;;;;-1:-1:-1;;;3929:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4482:132;4540:7;4567:39;4571:1;4574;4567:39;;;;;;;;;;;;;;;;;:3;:39::i;497:106::-;555:7;586:1;582;:5;:13;;594:1;582:13;;;-1:-1:-1;590:1:0;;497:106;-1:-1:-1;497:106:0:o;33848:512::-;33935:7;33959:13;33955:398;;-1:-1:-1;33996:1:0;33989:8;;33955:398;34028:8;34040:1;34028:13;34024:329;;;34065:15;34078:1;34065:8;:1;34071;34065:8;:5;:8;:::i;:15::-;34058:22;;;;34024:329;34111:6;;:23;;;;-1:-1:-1;34121:13:0;;;34111:23;34107:246;;;-1:-1:-1;34158:1:0;34151:8;;34107:246;34201:9;34213:15;34226:1;34213:8;:1;34219;34213:8;:5;:8;:::i;:15::-;34201:27;-1:-1:-1;34260:1:0;34243:75;34267:8;34263:1;:12;34243:75;;;34303:15;34316:1;34303:8;:1;34309;34303:8;:5;:8;:::i;:15::-;34299:19;-1:-1:-1;34277:3:0;;34243:75;;;-1:-1:-1;34340:1:0;-1:-1:-1;34107:246:0;33848:512;;;;;;:::o;30413:1780::-;30638:16;;-1:-1:-1;;;;;30594:20:0;;;;;;:14;:20;;;;;;:40;;21435:7;30594:40;:24;:40;:::i;:::-;:60;30590:234;;-1:-1:-1;;;;;30671:35:0;;30709:1;30671:35;;;:29;:35;;;;;;;;:39;;;30725:35;:41;;;;;:45;;;30785:17;:23;;;;;:27;30590:234;30952:16;;-1:-1:-1;;;;;30928:20:0;;;;;;:14;:20;;;;;;:40;30924:260;;31023:20;31031:4;31037:5;31023:7;:20::i;:::-;-1:-1:-1;;;;;30985:35:0;;;;;;:29;:35;;;;;;;;:58;;;;31102:28;;31058:35;:41;;;;;:72;31145:17;:23;;;;;:27;30924:260;31301:19;31309:4;31315;31301:7;:19::i;:::-;-1:-1:-1;;;;;31264:34:0;;;;;;:28;:34;;;;;;;;:56;;;;31374:27;;31331:34;:40;;;;;:70;31530:29;:35;;;;31497:28;;:69;;;:32;:69;:::i;:::-;31466:28;:100;-1:-1:-1;;;;;31594:35:0;;31577:14;31594:35;;;:29;:35;;;;;;;;;;31640:39;;;;31805:28;:34;;;;;;;31773:27;;:67;;;:31;:67;:::i;:::-;31743:27;:97;-1:-1:-1;;;;;31871:34:0;;;;;;:28;:34;;;;;;31860:46;;:6;;:46;:10;:46;:::i;:::-;-1:-1:-1;;;;;31917:34:0;;31954:1;31917:34;;;:28;:34;;;;;:38;31851:55;-1:-1:-1;31972:10:0;;31968:118;;31999:4;;:31;;-1:-1:-1;;;;;31999:4:0;32017;32023:6;31999:31;:17;:31;:::i;:::-;32050:24;;;;;;;;-1:-1:-1;;;;;32050:24:0;;;;;;;;;;;;;31968:118;-1:-1:-1;;;;;;32147:20:0;;;;;:14;:20;;;;;32170:15;32147:38;;30413:1780::o;19241:224::-;19308:12;;:24;;19325:6;19308:24;:16;:24;:::i;:::-;19293:12;:39;19377:10;19367:21;;;;:9;:21;;;;;;:33;;19393:6;19367:33;:25;:33;:::i;:::-;19353:10;19343:21;;;;:9;:21;;;;;:57;-1:-1:-1;19241:224:0:o;29654:751::-;-1:-1:-1;;;;;29851:21:0;;;;;;:15;:21;;;;;;29828:18;;:45;;;:22;:45;:::i;:::-;29807:18;:66;30001:20;29997:201;;-1:-1:-1;;;;;30137:23:0;;;;;;:17;:23;;;;;;30117:69;;30182:3;;30117:60;;30137:39;;30182:3;;30137:30;;30165:1;30137:30;:27;:30;:::i;:39::-;30117:15;30127:4;30117:9;:15::i;:69::-;30099:87;;29997:201;-1:-1:-1;;;;;30252:21:0;;;;;;:15;:21;;;;;:39;;;30358:18;;:39;;30276:15;30358:39;:22;:39;:::i;:::-;30337:18;:60;-1:-1:-1;;29654:751:0:o;13431:176::-;13540:58;;;-1:-1:-1;;;;;13540:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;13540:58:0;;;;;;;;25:18:-1;;61:17;;13540:58:0;182:15:-1;13563:23:0;179:29:-1;160:49;;13514:85:0;;13533:5;;13514:18;:85::i;32201:542::-;-1:-1:-1;;;;;32350:23:0;;;;;;:17;:23;;;;;;:30;;32378:1;32350:30;:27;:30;:::i;:::-;-1:-1:-1;;;;;32324:23:0;;;;;;:17;:23;;;;;:56;32393:50;32342:4;32427:15;32393:27;:50::i;:::-;32544:25;:15;32564:4;32544:25;:19;:25;:::i;:::-;-1:-1:-1;;;;;32514:27:0;;;;;;:21;:27;;;;;:55;32651:18;;:36;;32683:3;;32651:27;;32674:3;32651:27;:22;:27;:::i;:36::-;32630:18;:57;-1:-1:-1;;32720:15:0;32700:17;:35;32201:542::o;13615:204::-;13742:68;;;-1:-1:-1;;;;;13742:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;13742:68:0;;;;;;;;25:18:-1;;61:17;;13742:68:0;182:15:-1;13765:27:0;179:29:-1;160:49;;13716:95:0;;13735:5;;13716:18;:95::i;:::-;13615:204;;;;:::o;19012:221::-;19076:12;;:24;;19093:6;19076:24;:16;:24;:::i;:::-;19061:12;:39;19145:10;19135:21;;;;:9;:21;;;;;;:33;;19161:6;19135:33;:25;:33;:::i;3100:192::-;3186:7;3222:12;3214:6;;;;3206:29;;;;-1:-1:-1;;;3206: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;3206:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3258:5:0;;;3100:192::o;15470:1114::-;16074:27;16082:5;-1:-1:-1;;;;;16074:25:0;;:27::i;:::-;16066:71;;;;;-1:-1:-1;;;16066:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16211:12;16225:23;16260:5;-1:-1:-1;;;;;16252:19:0;16272:4;16252:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;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;;;16252: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;;16210:67:0;;;;16296:7;16288:52;;;;;-1:-1:-1;;;16288:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16357:17;;:21;16353:224;;16499:10;16488:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16488:30:0;16480:85;;;;-1:-1:-1;;;16480:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5144:345;5230:7;5332:12;5325:5;5317:28;;;;-1:-1:-1;;;5317:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;5317:28:0;;5356:9;5372:1;5368;:5;;;;;;;5144:345;-1:-1:-1;;;;;5144:345:0:o;7387:810::-;7447:4;8106:20;;7949:66;8146:15;;;;;:42;;-1:-1:-1;8165:23:0;;;8138:51;-1:-1:-1;;7387:810:0:o
Swarm Source
bzzr://696148880164884cc1ae72b13905b27b99a7de93b1bbb08df1b4fef490edca62
Loading...
Loading
Loading...
Loading
Net Worth in USD
$4.02
Net Worth in ETH
0.001884
Token Allocations
BOOST
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $0.00 | 20.8952 | $0.00 |
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.