Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Latest 25 from a total of 215 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Redeem Principal... | 19456058 | 690 days ago | IN | 0 ETH | 0.0008168 | ||||
| Claim | 19338160 | 706 days ago | IN | 0 ETH | 0.00193784 | ||||
| Claim | 19337957 | 706 days ago | IN | 0 ETH | 0.00208677 | ||||
| Claim | 19337738 | 706 days ago | IN | 0 ETH | 0.00181205 | ||||
| Redeem Principal... | 19337633 | 706 days ago | IN | 0 ETH | 0.00102328 | ||||
| Claim | 19336184 | 707 days ago | IN | 0 ETH | 0.00267573 | ||||
| Redeem Principal... | 19336180 | 707 days ago | IN | 0 ETH | 0.00169837 | ||||
| Redeem Principal... | 19336178 | 707 days ago | IN | 0 ETH | 0.00155655 | ||||
| Redeem Principal... | 19336101 | 707 days ago | IN | 0 ETH | 0.00167884 | ||||
| Claim | 19307718 | 711 days ago | IN | 0 ETH | 0.00132516 | ||||
| Borrow | 19198557 | 726 days ago | IN | 0.03 ETH | 0.00297743 | ||||
| Claim | 19195052 | 726 days ago | IN | 0 ETH | 0.00118784 | ||||
| Lend | 19152301 | 732 days ago | IN | 0.005 ETH | 0.00138696 | ||||
| Claim | 19137344 | 734 days ago | IN | 0 ETH | 0.0007525 | ||||
| Withdraw To Msig | 19136480 | 735 days ago | IN | 0 ETH | 0.00153944 | ||||
| Withdraw To Msig | 19136480 | 735 days ago | IN | 0 ETH | 0.00114747 | ||||
| Withdraw To Msig | 19136480 | 735 days ago | IN | 0 ETH | 0.00114747 | ||||
| Withdraw To Msig | 19136480 | 735 days ago | IN | 0 ETH | 0.00119457 | ||||
| Withdraw To Msig | 19136480 | 735 days ago | IN | 0 ETH | 0.00114747 | ||||
| Claim | 19136465 | 735 days ago | IN | 0 ETH | 0.00097331 | ||||
| Lend | 19122770 | 736 days ago | IN | 5 ETH | 0.00135285 | ||||
| Lend | 19122303 | 737 days ago | IN | 9 ETH | 0.00205705 | ||||
| Lend | 19121684 | 737 days ago | IN | 1 ETH | 0.00213218 | ||||
| Borrow | 19121444 | 737 days ago | IN | 3 ETH | 0.00191741 | ||||
| Lend | 19085593 | 742 days ago | IN | 0.03589198 ETH | 0.00219837 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 19338160 | 706 days ago | 0.45067499 ETH | ||||
| Transfer | 19337957 | 706 days ago | 0.07092231 ETH | ||||
| Transfer | 19337738 | 706 days ago | 0.01568117 ETH | ||||
| Transfer | 19336184 | 707 days ago | 0.06533824 ETH | ||||
| Transfer | 19307718 | 711 days ago | 0.00522705 ETH | ||||
| Transfer | 19195052 | 726 days ago | 0.33333333 ETH | ||||
| Transfer | 19137344 | 734 days ago | 2.8 ETH | ||||
| Transfer | 19136480 | 735 days ago | 15 ETH | ||||
| Transfer | 19136465 | 735 days ago | 0.2 ETH | ||||
| Transfer | 19064466 | 745 days ago | 3 ETH | ||||
| Transfer | 19062001 | 745 days ago | 0.3 ETH | ||||
| Transfer | 19045333 | 747 days ago | 0.03333333 ETH | ||||
| Transfer | 19013682 | 752 days ago | 0.74 ETH | ||||
| Transfer | 19007358 | 753 days ago | 0.08513513 ETH | ||||
| Transfer | 19006767 | 753 days ago | 0.33445945 ETH | ||||
| Transfer | 19006482 | 753 days ago | 0.0304054 ETH | ||||
| Transfer | 18979642 | 757 days ago | 4 ETH | ||||
| Transfer | 18979641 | 757 days ago | 0.15 ETH | ||||
| Transfer | 18977929 | 757 days ago | 0.550825 ETH | ||||
| Transfer | 18977902 | 757 days ago | 1.00149999 ETH | ||||
| Transfer | 18959283 | 759 days ago | 0.06666666 ETH | ||||
| Transfer | 18935520 | 763 days ago | 10 ETH | ||||
| Transfer | 18935316 | 763 days ago | 1 ETH | ||||
| Transfer | 18878973 | 771 days ago | 0.5 ETH | ||||
| Transfer | 18873648 | 771 days ago | 0.00001359 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Booster
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2023-12-10
*/
// File: src/libraries/SafeMath.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.7.6;
/**
* @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.
*/
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.
*/
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.
*/
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
// File: src/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.7.6;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: src/Ownable.sol
pragma solidity ^0.7.6;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor () internal {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
// File: src/interfaces/IERC20.sol
pragma solidity >=0.7.6;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
// File: src/libraries/Address.sol
pragma solidity >=0.7.6;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
// solhint-disable-next-line no-inline-assembly
assembly { size := extcodesize(account) }
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(bool success, ) = recipient.call{ value: amount }("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain`call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{ value: value }(data);
return _verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.staticcall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.delegatecall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: src/SafeERC20.sol
pragma solidity >=0.7.6;
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using SafeMath for uint256;
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
function safeApprove(IERC20 token, address spender, uint256 value) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
// solhint-disable-next-line max-line-length
require((value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).add(value);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
if (returndata.length > 0) { // Return data is optional
// solhint-disable-next-line max-line-length
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
// File: src/interfaces/IMintableBurnableERC20.sol
pragma solidity >=0.7.6;
interface IMintableBurnableERC20 {
function burn(uint256 _amount) external;
function mint(address _to, uint256 _amount) external;
}
// File: src/Booster.sol
pragma solidity >=0.7.6;
contract Booster is Ownable {
using SafeMath for uint256;
using SafeERC20 for IERC20;
address public immutable msig;
// Start time of epoch 0
uint256 public startTime;
// In seconds
uint256 public epochLength;
address public bstETH;
bool public stopped;
uint256 public finalEpoch;
uint256 public lastCalculated;
bool public calculationComplete;
address public blast;
uint256 public totalAirdrop;
// Epoch to user to loan amounts
mapping(uint256 => mapping(address => uint256)) public loans;
// Epoch to total lent
mapping(uint256 => uint256) public totalLentPerEpoch;
// Epoch to user to borrows
mapping(uint256 => mapping(address => uint256)) public borrows;
// Epoch to total borrowed
mapping(uint256 => uint256) public totalBorrowedPerEpoch;
// Epoch to collected (to msig)
mapping(uint256 => bool) public epochToCollected;
/* Epoch to contributions toward airdrop
* Uses the following formula:
* totalLentPerEpoch[_epoch] * (finalEpoch - _epoch)
* This gives us a representation of an epoch's contribution
* To get proportional contribution toward the airdrop, we divide by sumContributions
*/
mapping(uint256 => uint256) public epochToContributions;
uint256 public sumContributions;
constructor(address _msig, uint256 _epochLength, address _bstETH) {
msig = _msig;
epochLength = _epochLength;
bstETH = _bstETH;
}
event Loan(address indexed user, uint256 indexed timeStamp, uint256 indexed epoch, uint256 amount);
event Borrow(address indexed user, uint256 indexed timeStamp, uint256 indexed epoch, uint256 amount);
event Claim(address indexed user, uint256 indexed timeStamp, uint256 indexed epoch, uint256 amount);
event Refund(address indexed user, uint256 indexed timeStamp, uint256 indexed epoch, uint256 amount);
event RedeemPrincipal(address indexed user, uint256 indexed timeStamp, uint256 amount);
event RedeemAirdrop(address indexed user, uint256 indexed timeStamp, uint256 indexed epoch, uint256 correspondingEthPaid, uint256 airdropAmount);
receive() external payable {}
fallback() external payable {}
// If for some reason ERC20 tokens are sent to the contract, allow withdrawal
function emergencyWithdraw(address _token, address _to, uint256 _amount) external onlyOwner {
IERC20(_token).safeTransfer(_to, _amount);
}
// Emergency ETH withdraw - only msig wallet can run
function emergencyWithdrawETH(uint256 _amount) external {
require(msg.sender == msig, "Not msig");
(bool sent, ) = msig.call{value: _amount}("");
require(sent, "Failed to send Ether");
}
// Withdraw to msig wallet for Blast farming
function withdrawToMsig(uint256 _epoch) external onlyOwner {
require(getCurrentEpoch() > _epoch, "Epoch has not passed");
require(!epochToCollected[_epoch], "Already collected for epoch");
epochToCollected[_epoch] = true;
if (totalLentPerEpoch[_epoch] == 0 || totalBorrowedPerEpoch[_epoch] == 0) {
return;
}
// Send ETH to msig
(bool sent, ) = msig.call{value: totalLentPerEpoch[_epoch]}("");
require(sent, "Failed to send Ether");
}
function lend(address _lender) external payable {
require(!stopped, "Stopped");
require(msg.value > 0, "No ETH sent");
require(startTime != 0, "Not started");
uint256 currentEpoch = getCurrentEpoch();
loans[currentEpoch][_lender] = loans[currentEpoch][_lender].add(msg.value);
totalLentPerEpoch[currentEpoch] = totalLentPerEpoch[currentEpoch].add(msg.value);
// Mint receipt token
IMintableBurnableERC20(bstETH).mint(_lender, msg.value);
// Emit lend event
emit Loan(_lender, block.timestamp, currentEpoch, msg.value);
}
function claim(uint256 _epoch) external {
// If borrowed / lent is 0, users should be collecting their refund
require(totalLentPerEpoch[_epoch] != 0 && totalBorrowedPerEpoch[_epoch] != 0, "Nothing to claim");
require(getCurrentEpoch() > _epoch, "Epoch has not passed");
require(loans[_epoch][msg.sender] > 0, "Nothing lent during epoch");
uint256 lentAmount = loans[_epoch][msg.sender];
loans[_epoch][msg.sender] = 0;
uint256 amountToSend = totalBorrowedPerEpoch[_epoch].mul(lentAmount).div(totalLentPerEpoch[_epoch]);
(bool sent, ) = msg.sender.call{value: amountToSend}("");
require(sent, "Failed to send Ether");
// Emit claim event
emit Claim(msg.sender, block.timestamp, _epoch, amountToSend);
}
function borrow(address _borrower) external payable {
require(!stopped, "Stopped");
require(msg.value > 0, "No ETH sent");
require(startTime != 0, "Not started");
uint256 currentEpoch = getCurrentEpoch();
borrows[currentEpoch][_borrower] = borrows[currentEpoch][_borrower].add(msg.value);
totalBorrowedPerEpoch[currentEpoch] = totalBorrowedPerEpoch[currentEpoch].add(msg.value);
// Emit borrow event
emit Borrow(_borrower, block.timestamp, currentEpoch, msg.value);
}
// Function to get refunded if total lent / borrowed was 0 in an epoch
function refund(uint256 _epoch) external {
require(totalLentPerEpoch[_epoch] == 0 || totalBorrowedPerEpoch[_epoch] == 0, "Nothing to refund this epoch");
require(getCurrentEpoch() > _epoch, "Epoch has not passed");
uint256 ethToRefund = 0;
if (totalLentPerEpoch[_epoch] == 0) {
uint256 userBorrows = borrows[_epoch][msg.sender];
if (userBorrows > 0) {
borrows[_epoch][msg.sender] = 0;
ethToRefund = ethToRefund.add(userBorrows);
}
}
if (totalBorrowedPerEpoch[_epoch] == 0) {
uint256 userLoans = loans[_epoch][msg.sender];
if (userLoans > 0) {
// Burn receipt token
IERC20(bstETH).safeTransferFrom(msg.sender, address(this), userLoans);
IMintableBurnableERC20(bstETH).burn(userLoans);
loans[_epoch][msg.sender] = 0;
ethToRefund = ethToRefund.add(userLoans);
}
}
require(ethToRefund > 0, "Nothing to refund");
// Refund ETH to user
(bool sent, ) = msg.sender.call{value: ethToRefund}("");
require(sent, "Failed to send Ether");
// Emit refund event
emit Refund(msg.sender, block.timestamp, _epoch, ethToRefund);
}
function redeemPrincipalETH(uint256 _amount) external {
require(stopped, "Still ongoing");
// Burn receipt token
IERC20(bstETH).safeTransferFrom(msg.sender, address(this), _amount);
IMintableBurnableERC20(bstETH).burn(_amount);
// Redeem ETH to user
(bool sent, ) = msg.sender.call{value: _amount}("");
require(sent, "Failed to send Ether");
// Emit redeem principal event
emit RedeemPrincipal(msg.sender, block.timestamp, _amount);
}
function redeemBlastAirdrop(uint256 _epoch) external {
require(stopped, "Still ongoing");
require(calculationComplete, "Calculation ongoing");
require(blast != address(0), "No blast address");
require(_epoch <= finalEpoch, "Invalid epoch");
require(totalBorrowedPerEpoch[_epoch] != 0 && totalLentPerEpoch[_epoch] != 0, "Empty epoch");
uint256 borrowedDuringEpoch = borrows[_epoch][msg.sender];
borrows[_epoch][msg.sender] = 0;
uint256 blastOwedForEpoch = epochToContributions[_epoch].mul(borrowedDuringEpoch).mul(totalAirdrop).div(sumContributions).div(totalBorrowedPerEpoch[_epoch]);
IERC20(blast).transfer(msg.sender, blastOwedForEpoch);
// Emit redeem airdrop event
emit RedeemAirdrop(msg.sender, block.timestamp, _epoch, borrowedDuringEpoch, blastOwedForEpoch);
}
function start() external onlyOwner {
require(startTime == 0, "Already started");
startTime = block.timestamp;
}
function stop() external onlyOwner {
require(!stopped, "Already stopped");
stopped = true;
finalEpoch = getCurrentEpoch();
}
// In case we have too many epochs and loop becomes too long, we allow slicing over multiple transactions
function calculateEpochContributions(uint256 _startEpoch, uint256 _endEpoch) external onlyOwner {
require(stopped, "Still ongoing");
require(_endEpoch > _startEpoch, "Invalid range");
require(_startEpoch == 0 || (lastCalculated != 0 && _startEpoch == lastCalculated + 1), "Invalid calc");
require(_endEpoch <= finalEpoch, "Out of range");
require(!calculationComplete, "Already complete");
for (uint256 i = _startEpoch; i < _endEpoch; i++) {
if (totalLentPerEpoch[i] != 0 && totalBorrowedPerEpoch[i] != 0) {
epochToContributions[i] = totalLentPerEpoch[i].mul(finalEpoch.sub(i));
sumContributions = sumContributions.add(epochToContributions[i]);
}
}
lastCalculated = _endEpoch;
if (_endEpoch == finalEpoch) {
calculationComplete = true;
}
}
function modifyParams(uint256 _startTime, uint256 _epochLength, address _bstETH) external onlyOwner {
startTime = _startTime;
epochLength = _epochLength;
bstETH = _bstETH;
}
function setAirdrop(address _blast, uint256 _totalAirdrop) external onlyOwner {
blast = _blast;
totalAirdrop = _totalAirdrop;
}
function getCurrentEpoch() public view returns (uint256) {
return block.timestamp.sub(startTime).div(epochLength);
}
function getEpoch(uint256 _timestamp) public view returns (uint256) {
return _timestamp.sub(startTime).div(epochLength);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_msig","type":"address"},{"internalType":"uint256","name":"_epochLength","type":"uint256"},{"internalType":"address","name":"_bstETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"timeStamp","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Borrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"timeStamp","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"timeStamp","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Loan","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"timeStamp","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"correspondingEthPaid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"airdropAmount","type":"uint256"}],"name":"RedeemAirdrop","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"timeStamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RedeemPrincipal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"timeStamp","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Refund","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"blast","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_borrower","type":"address"}],"name":"borrow","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"borrows","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bstETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startEpoch","type":"uint256"},{"internalType":"uint256","name":"_endEpoch","type":"uint256"}],"name":"calculateEpochContributions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"calculationComplete","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_epoch","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"emergencyWithdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"epochLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"epochToCollected","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"epochToContributions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finalEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"getEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastCalculated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_lender","type":"address"}],"name":"lend","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"loans","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startTime","type":"uint256"},{"internalType":"uint256","name":"_epochLength","type":"uint256"},{"internalType":"address","name":"_bstETH","type":"address"}],"name":"modifyParams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"msig","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_epoch","type":"uint256"}],"name":"redeemBlastAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"redeemPrincipalETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_epoch","type":"uint256"}],"name":"refund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_blast","type":"address"},{"internalType":"uint256","name":"_totalAirdrop","type":"uint256"}],"name":"setAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopped","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sumContributions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAirdrop","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalBorrowedPerEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalLentPerEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_epoch","type":"uint256"}],"name":"withdrawToMsig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60a060405234801561001057600080fd5b50604051620027d8380380620027d88339818101604052606081101561003557600080fd5b508051602082015160409092015190919060006100506100d4565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060609290921b6001600160601b031916608052600255600380546001600160a01b0319166001600160a01b039092169190911790556100d8565b3390565b60805160601c6126d362000105600039806112c0528061132d528061149e528061193052506126d36000f3fe6080604052600436106102135760003560e01c806378e9792511610118578063b97dd9e2116100a0578063cfdd2ffd1161006f578063cfdd2ffd1461064f578063e39bc98d14610679578063e63ea408146106a3578063e8d8d4b7146106e6578063f2fde38b146107255761021a565b8063b97dd9e2146105c2578063bc0bc6ba146105d7578063be9a655514610601578063cb0408b9146106165761021a565b8063961e1a23116100e7578063961e1a23146104f45780639ca8d3471461051e578063abad39cd14610548578063ac88c98414610572578063b656f2e31461059c5761021a565b806378e97925146104a05780637bb453bf146104b55780638da5cb5b146104ca57806390b0ed03146104df5761021a565b80633827e61b1161019b57806357d775f81161016a57806357d775f8146104225780635ce97dbb146104375780636b792c4b1461044c578063715018a61461047657806375f12b211461048b5761021a565b80633827e61b146103a2578063383153d9146103d25780633a98d88e146103e75780633f0ead02146103fc5761021a565b80632206035f116101e25780632206035f146102b2578063278ecde1146102eb578063287eaa451461031557806330b5992c1461034e578063379607f5146103785761021a565b806307da68f51461021c57806310bcc49e14610231578063175e1a7d146102585780631d447774146102895761021a565b3661021a57005b005b34801561022857600080fd5b5061021a610758565b34801561023d57600080fd5b5061024661082b565b60408051918252519081900360200190f35b34801561026457600080fd5b5061026d610831565b604080516001600160a01b039092168252519081900360200190f35b34801561029557600080fd5b5061029e610845565b604080519115158252519081900360200190f35b3480156102be57600080fd5b5061021a600480360360408110156102d557600080fd5b506001600160a01b03813516906020013561084e565b3480156102f757600080fd5b5061021a6004803603602081101561030e57600080fd5b50356108dc565b34801561032157600080fd5b506102466004803603604081101561033857600080fd5b50803590602001356001600160a01b0316610bf7565b34801561035a57600080fd5b506102466004803603602081101561037157600080fd5b5035610c14565b34801561038457600080fd5b5061021a6004803603602081101561039b57600080fd5b5035610c26565b3480156103ae57600080fd5b5061021a600480360360408110156103c557600080fd5b5080359060200135610e72565b3480156103de57600080fd5b506102466110fe565b3480156103f357600080fd5b50610246611104565b61021a6004803603602081101561041257600080fd5b50356001600160a01b031661110a565b34801561042e57600080fd5b506102466112a9565b34801561044357600080fd5b506102466112af565b34801561045857600080fd5b5061021a6004803603602081101561046f57600080fd5b50356112b5565b34801561048257600080fd5b5061021a6113da565b34801561049757600080fd5b5061029e611486565b3480156104ac57600080fd5b50610246611496565b3480156104c157600080fd5b5061026d61149c565b3480156104d657600080fd5b5061026d6114c0565b3480156104eb57600080fd5b5061026d6114cf565b34801561050057600080fd5b5061021a6004803603602081101561051757600080fd5b50356114de565b34801561052a57600080fd5b506102466004803603602081101561054157600080fd5b50356117a4565b34801561055457600080fd5b5061021a6004803603602081101561056b57600080fd5b50356117b6565b34801561057e57600080fd5b506102466004803603602081101561059557600080fd5b503561198d565b61021a600480360360208110156105b257600080fd5b50356001600160a01b031661199f565b3480156105ce57600080fd5b50610246611ba2565b3480156105e357600080fd5b50610246600480360360208110156105fa57600080fd5b5035611bc4565b34801561060d57600080fd5b5061021a611be7565b34801561062257600080fd5b506102466004803603604081101561063957600080fd5b50803590602001356001600160a01b0316611c96565b34801561065b57600080fd5b5061029e6004803603602081101561067257600080fd5b5035611cb3565b34801561068557600080fd5b5061021a6004803603602081101561069c57600080fd5b5035611cc8565b3480156106af57600080fd5b5061021a600480360360608110156106c657600080fd5b506001600160a01b03813581169160208101359091169060400135611e62565b3480156106f257600080fd5b5061021a6004803603606081101561070957600080fd5b50803590602081013590604001356001600160a01b0316611edd565b34801561073157600080fd5b5061021a6004803603602081101561074857600080fd5b50356001600160a01b0316611f69565b61076061206b565b6001600160a01b03166107716114c0565b6001600160a01b0316146107ba576040805162461bcd60e51b81526020600482018190526024820152600080516020612654833981519152604482015290519081900360640190fd5b600354600160a01b900460ff161561080b576040805162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e481cdd1bdc1c1959608a1b604482015290519081900360640190fd5b6003805460ff60a01b1916600160a01b179055610826611ba2565b600455565b60055481565b60065461010090046001600160a01b031681565b60065460ff1681565b61085661206b565b6001600160a01b03166108676114c0565b6001600160a01b0316146108b0576040805162461bcd60e51b81526020600482018190526024820152600080516020612654833981519152604482015290519081900360640190fd5b600680546001600160a01b0390931661010002610100600160a81b031990931692909217909155600755565b600081815260096020526040902054158061090357506000818152600b6020526040902054155b610954576040805162461bcd60e51b815260206004820152601c60248201527f4e6f7468696e6720746f20726566756e6420746869732065706f636800000000604482015290519081900360640190fd5b8061095d611ba2565b116109a6576040805162461bcd60e51b8152602060048201526014602482015273115c1bd8da081a185cc81b9bdd081c185cdcd95960621b604482015290519081900360640190fd5b600081815260096020526040812054610a02576000828152600a602090815260408083203384529091529020548015610a00576000838152600a602090815260408083203384529091528120556109fd828261206f565b91505b505b6000828152600b6020526040902054610adb5760008281526008602090815260408083203384529091529020548015610ad957600354610a4d906001600160a01b03163330846120d0565b60035460408051630852cd8d60e31b81526004810184905290516001600160a01b03909216916342966c689160248082019260009290919082900301818387803b158015610a9a57600080fd5b505af1158015610aae573d6000803e3d6000fd5b505050600084815260086020908152604080832033845290915281205550610ad6828261206f565b91505b505b60008111610b24576040805162461bcd60e51b8152602060048201526011602482015270139bdd1a1a5b99c81d1bc81c99599d5b99607a1b604482015290519081900360640190fd5b604051600090339083908381818185875af1925050503d8060008114610b66576040519150601f19603f3d011682016040523d82523d6000602084013e610b6b565b606091505b5050905080610bb8576040805162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b604482015290519081900360640190fd5b6040805183815290518491429133917fb7048c2ad36aadee977bb16b4543a18866044d27a2ca753e1c7dbcfa7d7a6962919081900360200190a4505050565b600860209081526000928352604080842090915290825290205481565b600d6020526000908152604090205481565b60008181526009602052604090205415801590610c5057506000818152600b602052604090205415155b610c94576040805162461bcd60e51b815260206004820152601060248201526f4e6f7468696e6720746f20636c61696d60801b604482015290519081900360640190fd5b80610c9d611ba2565b11610ce6576040805162461bcd60e51b8152602060048201526014602482015273115c1bd8da081a185cc81b9bdd081c185cdcd95960621b604482015290519081900360640190fd5b6000818152600860209081526040808320338452909152902054610d51576040805162461bcd60e51b815260206004820152601960248201527f4e6f7468696e67206c656e7420647572696e672065706f636800000000000000604482015290519081900360640190fd5b600081815260086020908152604080832033845282528083208054908490558484526009835281842054600b90935290832054909291610d9b91610d959085612130565b90612189565b604051909150600090339083908381818185875af1925050503d8060008114610de0576040519150601f19603f3d011682016040523d82523d6000602084013e610de5565b606091505b5050905080610e32576040805162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b604482015290519081900360640190fd5b6040805183815290518591429133917f45c072aa05b9853b5a993de7a28bc332ee01404a628cec1a23ce0f659f842ef1919081900360200190a450505050565b610e7a61206b565b6001600160a01b0316610e8b6114c0565b6001600160a01b031614610ed4576040805162461bcd60e51b81526020600482018190526024820152600080516020612654833981519152604482015290519081900360640190fd5b600354600160a01b900460ff16610f22576040805162461bcd60e51b815260206004820152600d60248201526c5374696c6c206f6e676f696e6760981b604482015290519081900360640190fd5b818111610f66576040805162461bcd60e51b815260206004820152600d60248201526c496e76616c69642072616e676560981b604482015290519081900360640190fd5b811580610f83575060055415801590610f83575060055460010182145b610fc3576040805162461bcd60e51b815260206004820152600c60248201526b496e76616c69642063616c6360a01b604482015290519081900360640190fd5b600454811115611009576040805162461bcd60e51b815260206004820152600c60248201526b4f7574206f662072616e676560a01b604482015290519081900360640190fd5b60065460ff1615611054576040805162461bcd60e51b815260206004820152601060248201526f416c726561647920636f6d706c65746560801b604482015290519081900360640190fd5b815b818110156110dc576000818152600960205260409020541580159061108857506000818152600b602052604090205415155b156110d4576004546110b39061109e90836121cb565b60008381526009602052604090205490612130565b6000828152600d60205260409020819055600e546110d09161206f565b600e555b600101611056565b5060058190556004548114156110fa576006805460ff191660011790555b5050565b600e5481565b60045481565b600354600160a01b900460ff1615611153576040805162461bcd60e51b815260206004820152600760248201526614dd1bdc1c195960ca1b604482015290519081900360640190fd5b60003411611196576040805162461bcd60e51b815260206004820152600b60248201526a139bc8115512081cd95b9d60aa1b604482015290519081900360640190fd5b6001546111d8576040805162461bcd60e51b815260206004820152600b60248201526a139bdd081cdd185c9d195960aa1b604482015290519081900360640190fd5b60006111e2611ba2565b6000818152600a602090815260408083206001600160a01b0387168452909152902054909150611212903461206f565b6000828152600a602090815260408083206001600160a01b0387168452825280832093909355838252600b9052205461124b903461206f565b600b6000838152602001908152602001600020819055508042836001600160a01b03167f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab80346040518082815260200191505060405180910390a45050565b60025481565b60075481565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461131d576040805162461bcd60e51b81526020600482015260086024820152674e6f74206d73696760c01b604482015290519081900360640190fd5b6040516000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169083908381818185875af1925050503d8060008114611388576040519150601f19603f3d011682016040523d82523d6000602084013e61138d565b606091505b50509050806110fa576040805162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b604482015290519081900360640190fd5b6113e261206b565b6001600160a01b03166113f36114c0565b6001600160a01b03161461143c576040805162461bcd60e51b81526020600482018190526024820152600080516020612654833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600354600160a01b900460ff1681565b60015481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b031690565b6003546001600160a01b031681565b600354600160a01b900460ff1661152c576040805162461bcd60e51b815260206004820152600d60248201526c5374696c6c206f6e676f696e6760981b604482015290519081900360640190fd5b60065460ff16611579576040805162461bcd60e51b815260206004820152601360248201527243616c63756c6174696f6e206f6e676f696e6760681b604482015290519081900360640190fd5b60065461010090046001600160a01b03166115ce576040805162461bcd60e51b815260206004820152601060248201526f4e6f20626c617374206164647265737360801b604482015290519081900360640190fd5b600454811115611615576040805162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840cae0dec6d609b1b604482015290519081900360640190fd5b6000818152600b60205260409020541580159061163f575060008181526009602052604090205415155b61167e576040805162461bcd60e51b815260206004820152600b60248201526a08adae0e8f240cae0dec6d60ab1b604482015290519081900360640190fd5b6000818152600a602090815260408083203384528252808320805490849055848452600b835281842054600e54600754600d909552928520549194936116d7939192610d95929183916116d19089612130565b90612130565b6006546040805163a9059cbb60e01b81523360048201526024810184905290519293506101009091046001600160a01b03169163a9059cbb916044808201926020929091908290030181600087803b15801561173257600080fd5b505af1158015611746573d6000803e3d6000fd5b505050506040513d602081101561175c57600080fd5b5050604080518381526020810183905281518592429233927fe0efb15ea421e3d0429730e25e24b5ea2e595cebe71536f40c5d78dbb727db1a929181900390910190a4505050565b60096020526000908152604090205481565b6117be61206b565b6001600160a01b03166117cf6114c0565b6001600160a01b031614611818576040805162461bcd60e51b81526020600482018190526024820152600080516020612654833981519152604482015290519081900360640190fd5b80611821611ba2565b1161186a576040805162461bcd60e51b8152602060048201526014602482015273115c1bd8da081a185cc81b9bdd081c185cdcd95960621b604482015290519081900360640190fd5b6000818152600c602052604090205460ff16156118ce576040805162461bcd60e51b815260206004820152601b60248201527f416c726561647920636f6c6c656374656420666f722065706f63680000000000604482015290519081900360640190fd5b6000818152600c60209081526040808320805460ff191660011790556009909152902054158061190a57506000818152600b6020526040902054155b156119145761198a565b6000818152600960205260408082205490516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691908381818185875af1925050503d8060008114611388576040519150601f19603f3d011682016040523d82523d6000602084013e61138d565b50565b600b6020526000908152604090205481565b600354600160a01b900460ff16156119e8576040805162461bcd60e51b815260206004820152600760248201526614dd1bdc1c195960ca1b604482015290519081900360640190fd5b60003411611a2b576040805162461bcd60e51b815260206004820152600b60248201526a139bc8115512081cd95b9d60aa1b604482015290519081900360640190fd5b600154611a6d576040805162461bcd60e51b815260206004820152600b60248201526a139bdd081cdd185c9d195960aa1b604482015290519081900360640190fd5b6000611a77611ba2565b60008181526008602090815260408083206001600160a01b0387168452909152902054909150611aa7903461206f565b60008281526008602090815260408083206001600160a01b0387168452825280832093909355838252600990522054611ae0903461206f565b6000828152600960205260408082209290925560035482516340c10f1960e01b81526001600160a01b038681166004830152346024830152935193909116926340c10f199260448084019391929182900301818387803b158015611b4357600080fd5b505af1158015611b57573d6000803e3d6000fd5b505050508042836001600160a01b03167fc2ad9b96e86958983d97154422c868748371d03ae876909d99253d917d1aa730346040518082815260200191505060405180910390a45050565b6000611bbf600254610d95600154426121cb90919063ffffffff16565b905090565b6000611be1600254610d95600154856121cb90919063ffffffff16565b92915050565b611bef61206b565b6001600160a01b0316611c006114c0565b6001600160a01b031614611c49576040805162461bcd60e51b81526020600482018190526024820152600080516020612654833981519152604482015290519081900360640190fd5b60015415611c90576040805162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e481cdd185c9d1959608a1b604482015290519081900360640190fd5b42600155565b600a60209081526000928352604080842090915290825290205481565b600c6020526000908152604090205460ff1681565b600354600160a01b900460ff16611d16576040805162461bcd60e51b815260206004820152600d60248201526c5374696c6c206f6e676f696e6760981b604482015290519081900360640190fd5b600354611d2e906001600160a01b03163330846120d0565b60035460408051630852cd8d60e31b81526004810184905290516001600160a01b03909216916342966c689160248082019260009290919082900301818387803b158015611d7b57600080fd5b505af1158015611d8f573d6000803e3d6000fd5b50506040516000925033915083908381818185875af1925050503d8060008114611dd5576040519150601f19603f3d011682016040523d82523d6000602084013e611dda565b606091505b5050905080611e27576040805162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b604482015290519081900360640190fd5b604080518381529051429133917f0aef9d22e5892970040b99b2a4790cfaa0380b338076301f8910460ce111d6c69181900360200190a35050565b611e6a61206b565b6001600160a01b0316611e7b6114c0565b6001600160a01b031614611ec4576040805162461bcd60e51b81526020600482018190526024820152600080516020612654833981519152604482015290519081900360640190fd5b611ed86001600160a01b038416838361220d565b505050565b611ee561206b565b6001600160a01b0316611ef66114c0565b6001600160a01b031614611f3f576040805162461bcd60e51b81526020600482018190526024820152600080516020612654833981519152604482015290519081900360640190fd5b600192909255600255600380546001600160a01b0319166001600160a01b03909216919091179055565b611f7161206b565b6001600160a01b0316611f826114c0565b6001600160a01b031614611fcb576040805162461bcd60e51b81526020600482018190526024820152600080516020612654833981519152604482015290519081900360640190fd5b6001600160a01b0381166120105760405162461bcd60e51b81526004018080602001828103825260268152602001806125e76026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6000828201838110156120c9576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261212a90859061225b565b50505050565b60008261213f57506000611be1565b8282028284828161214c57fe5b04146120c95760405162461bcd60e51b81526004018080602001828103825260218152602001806126336021913960400191505060405180910390fd5b60006120c983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061230c565b60006120c983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506123ae565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611ed89084905b60006122b0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166124089092919063ffffffff16565b805190915015611ed8578080602001905160208110156122cf57600080fd5b5051611ed85760405162461bcd60e51b815260040180806020018281038252602a815260200180612674602a913960400191505060405180910390fd5b600081836123985760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561235d578181015183820152602001612345565b50505050905090810190601f16801561238a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816123a457fe5b0495945050505050565b600081848411156124005760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561235d578181015183820152602001612345565b505050900390565b6060612417848460008561241f565b949350505050565b6060824710156124605760405162461bcd60e51b815260040180806020018281038252602681526020018061260d6026913960400191505060405180910390fd5b6124698561257a565b6124ba576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b602083106124f85780518252601f1990920191602091820191016124d9565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461255a576040519150601f19603f3d011682016040523d82523d6000602084013e61255f565b606091505b509150915061256f828286612580565b979650505050505050565b3b151590565b6060831561258f5750816120c9565b82511561259f5782518084602001fd5b60405162461bcd60e51b815260206004820181815284516024840152845185939192839260440191908501908083836000831561235d57818101518382015260200161234556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212200e66829c106645347c7967aef721396164a6e725d7a22209ea242c2a696062de64736f6c6343000706003300000000000000000000000056f038f93758a7735de812702fb5aefcbb205647000000000000000000000000000000000000000000000000000000000002a30000000000000000000000000042b333fbbdc8eed2b59fb194c341a3695450da82
Deployed Bytecode
0x6080604052600436106102135760003560e01c806378e9792511610118578063b97dd9e2116100a0578063cfdd2ffd1161006f578063cfdd2ffd1461064f578063e39bc98d14610679578063e63ea408146106a3578063e8d8d4b7146106e6578063f2fde38b146107255761021a565b8063b97dd9e2146105c2578063bc0bc6ba146105d7578063be9a655514610601578063cb0408b9146106165761021a565b8063961e1a23116100e7578063961e1a23146104f45780639ca8d3471461051e578063abad39cd14610548578063ac88c98414610572578063b656f2e31461059c5761021a565b806378e97925146104a05780637bb453bf146104b55780638da5cb5b146104ca57806390b0ed03146104df5761021a565b80633827e61b1161019b57806357d775f81161016a57806357d775f8146104225780635ce97dbb146104375780636b792c4b1461044c578063715018a61461047657806375f12b211461048b5761021a565b80633827e61b146103a2578063383153d9146103d25780633a98d88e146103e75780633f0ead02146103fc5761021a565b80632206035f116101e25780632206035f146102b2578063278ecde1146102eb578063287eaa451461031557806330b5992c1461034e578063379607f5146103785761021a565b806307da68f51461021c57806310bcc49e14610231578063175e1a7d146102585780631d447774146102895761021a565b3661021a57005b005b34801561022857600080fd5b5061021a610758565b34801561023d57600080fd5b5061024661082b565b60408051918252519081900360200190f35b34801561026457600080fd5b5061026d610831565b604080516001600160a01b039092168252519081900360200190f35b34801561029557600080fd5b5061029e610845565b604080519115158252519081900360200190f35b3480156102be57600080fd5b5061021a600480360360408110156102d557600080fd5b506001600160a01b03813516906020013561084e565b3480156102f757600080fd5b5061021a6004803603602081101561030e57600080fd5b50356108dc565b34801561032157600080fd5b506102466004803603604081101561033857600080fd5b50803590602001356001600160a01b0316610bf7565b34801561035a57600080fd5b506102466004803603602081101561037157600080fd5b5035610c14565b34801561038457600080fd5b5061021a6004803603602081101561039b57600080fd5b5035610c26565b3480156103ae57600080fd5b5061021a600480360360408110156103c557600080fd5b5080359060200135610e72565b3480156103de57600080fd5b506102466110fe565b3480156103f357600080fd5b50610246611104565b61021a6004803603602081101561041257600080fd5b50356001600160a01b031661110a565b34801561042e57600080fd5b506102466112a9565b34801561044357600080fd5b506102466112af565b34801561045857600080fd5b5061021a6004803603602081101561046f57600080fd5b50356112b5565b34801561048257600080fd5b5061021a6113da565b34801561049757600080fd5b5061029e611486565b3480156104ac57600080fd5b50610246611496565b3480156104c157600080fd5b5061026d61149c565b3480156104d657600080fd5b5061026d6114c0565b3480156104eb57600080fd5b5061026d6114cf565b34801561050057600080fd5b5061021a6004803603602081101561051757600080fd5b50356114de565b34801561052a57600080fd5b506102466004803603602081101561054157600080fd5b50356117a4565b34801561055457600080fd5b5061021a6004803603602081101561056b57600080fd5b50356117b6565b34801561057e57600080fd5b506102466004803603602081101561059557600080fd5b503561198d565b61021a600480360360208110156105b257600080fd5b50356001600160a01b031661199f565b3480156105ce57600080fd5b50610246611ba2565b3480156105e357600080fd5b50610246600480360360208110156105fa57600080fd5b5035611bc4565b34801561060d57600080fd5b5061021a611be7565b34801561062257600080fd5b506102466004803603604081101561063957600080fd5b50803590602001356001600160a01b0316611c96565b34801561065b57600080fd5b5061029e6004803603602081101561067257600080fd5b5035611cb3565b34801561068557600080fd5b5061021a6004803603602081101561069c57600080fd5b5035611cc8565b3480156106af57600080fd5b5061021a600480360360608110156106c657600080fd5b506001600160a01b03813581169160208101359091169060400135611e62565b3480156106f257600080fd5b5061021a6004803603606081101561070957600080fd5b50803590602081013590604001356001600160a01b0316611edd565b34801561073157600080fd5b5061021a6004803603602081101561074857600080fd5b50356001600160a01b0316611f69565b61076061206b565b6001600160a01b03166107716114c0565b6001600160a01b0316146107ba576040805162461bcd60e51b81526020600482018190526024820152600080516020612654833981519152604482015290519081900360640190fd5b600354600160a01b900460ff161561080b576040805162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e481cdd1bdc1c1959608a1b604482015290519081900360640190fd5b6003805460ff60a01b1916600160a01b179055610826611ba2565b600455565b60055481565b60065461010090046001600160a01b031681565b60065460ff1681565b61085661206b565b6001600160a01b03166108676114c0565b6001600160a01b0316146108b0576040805162461bcd60e51b81526020600482018190526024820152600080516020612654833981519152604482015290519081900360640190fd5b600680546001600160a01b0390931661010002610100600160a81b031990931692909217909155600755565b600081815260096020526040902054158061090357506000818152600b6020526040902054155b610954576040805162461bcd60e51b815260206004820152601c60248201527f4e6f7468696e6720746f20726566756e6420746869732065706f636800000000604482015290519081900360640190fd5b8061095d611ba2565b116109a6576040805162461bcd60e51b8152602060048201526014602482015273115c1bd8da081a185cc81b9bdd081c185cdcd95960621b604482015290519081900360640190fd5b600081815260096020526040812054610a02576000828152600a602090815260408083203384529091529020548015610a00576000838152600a602090815260408083203384529091528120556109fd828261206f565b91505b505b6000828152600b6020526040902054610adb5760008281526008602090815260408083203384529091529020548015610ad957600354610a4d906001600160a01b03163330846120d0565b60035460408051630852cd8d60e31b81526004810184905290516001600160a01b03909216916342966c689160248082019260009290919082900301818387803b158015610a9a57600080fd5b505af1158015610aae573d6000803e3d6000fd5b505050600084815260086020908152604080832033845290915281205550610ad6828261206f565b91505b505b60008111610b24576040805162461bcd60e51b8152602060048201526011602482015270139bdd1a1a5b99c81d1bc81c99599d5b99607a1b604482015290519081900360640190fd5b604051600090339083908381818185875af1925050503d8060008114610b66576040519150601f19603f3d011682016040523d82523d6000602084013e610b6b565b606091505b5050905080610bb8576040805162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b604482015290519081900360640190fd5b6040805183815290518491429133917fb7048c2ad36aadee977bb16b4543a18866044d27a2ca753e1c7dbcfa7d7a6962919081900360200190a4505050565b600860209081526000928352604080842090915290825290205481565b600d6020526000908152604090205481565b60008181526009602052604090205415801590610c5057506000818152600b602052604090205415155b610c94576040805162461bcd60e51b815260206004820152601060248201526f4e6f7468696e6720746f20636c61696d60801b604482015290519081900360640190fd5b80610c9d611ba2565b11610ce6576040805162461bcd60e51b8152602060048201526014602482015273115c1bd8da081a185cc81b9bdd081c185cdcd95960621b604482015290519081900360640190fd5b6000818152600860209081526040808320338452909152902054610d51576040805162461bcd60e51b815260206004820152601960248201527f4e6f7468696e67206c656e7420647572696e672065706f636800000000000000604482015290519081900360640190fd5b600081815260086020908152604080832033845282528083208054908490558484526009835281842054600b90935290832054909291610d9b91610d959085612130565b90612189565b604051909150600090339083908381818185875af1925050503d8060008114610de0576040519150601f19603f3d011682016040523d82523d6000602084013e610de5565b606091505b5050905080610e32576040805162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b604482015290519081900360640190fd5b6040805183815290518591429133917f45c072aa05b9853b5a993de7a28bc332ee01404a628cec1a23ce0f659f842ef1919081900360200190a450505050565b610e7a61206b565b6001600160a01b0316610e8b6114c0565b6001600160a01b031614610ed4576040805162461bcd60e51b81526020600482018190526024820152600080516020612654833981519152604482015290519081900360640190fd5b600354600160a01b900460ff16610f22576040805162461bcd60e51b815260206004820152600d60248201526c5374696c6c206f6e676f696e6760981b604482015290519081900360640190fd5b818111610f66576040805162461bcd60e51b815260206004820152600d60248201526c496e76616c69642072616e676560981b604482015290519081900360640190fd5b811580610f83575060055415801590610f83575060055460010182145b610fc3576040805162461bcd60e51b815260206004820152600c60248201526b496e76616c69642063616c6360a01b604482015290519081900360640190fd5b600454811115611009576040805162461bcd60e51b815260206004820152600c60248201526b4f7574206f662072616e676560a01b604482015290519081900360640190fd5b60065460ff1615611054576040805162461bcd60e51b815260206004820152601060248201526f416c726561647920636f6d706c65746560801b604482015290519081900360640190fd5b815b818110156110dc576000818152600960205260409020541580159061108857506000818152600b602052604090205415155b156110d4576004546110b39061109e90836121cb565b60008381526009602052604090205490612130565b6000828152600d60205260409020819055600e546110d09161206f565b600e555b600101611056565b5060058190556004548114156110fa576006805460ff191660011790555b5050565b600e5481565b60045481565b600354600160a01b900460ff1615611153576040805162461bcd60e51b815260206004820152600760248201526614dd1bdc1c195960ca1b604482015290519081900360640190fd5b60003411611196576040805162461bcd60e51b815260206004820152600b60248201526a139bc8115512081cd95b9d60aa1b604482015290519081900360640190fd5b6001546111d8576040805162461bcd60e51b815260206004820152600b60248201526a139bdd081cdd185c9d195960aa1b604482015290519081900360640190fd5b60006111e2611ba2565b6000818152600a602090815260408083206001600160a01b0387168452909152902054909150611212903461206f565b6000828152600a602090815260408083206001600160a01b0387168452825280832093909355838252600b9052205461124b903461206f565b600b6000838152602001908152602001600020819055508042836001600160a01b03167f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab80346040518082815260200191505060405180910390a45050565b60025481565b60075481565b336001600160a01b037f00000000000000000000000056f038f93758a7735de812702fb5aefcbb205647161461131d576040805162461bcd60e51b81526020600482015260086024820152674e6f74206d73696760c01b604482015290519081900360640190fd5b6040516000906001600160a01b037f00000000000000000000000056f038f93758a7735de812702fb5aefcbb205647169083908381818185875af1925050503d8060008114611388576040519150601f19603f3d011682016040523d82523d6000602084013e61138d565b606091505b50509050806110fa576040805162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b604482015290519081900360640190fd5b6113e261206b565b6001600160a01b03166113f36114c0565b6001600160a01b03161461143c576040805162461bcd60e51b81526020600482018190526024820152600080516020612654833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600354600160a01b900460ff1681565b60015481565b7f00000000000000000000000056f038f93758a7735de812702fb5aefcbb20564781565b6000546001600160a01b031690565b6003546001600160a01b031681565b600354600160a01b900460ff1661152c576040805162461bcd60e51b815260206004820152600d60248201526c5374696c6c206f6e676f696e6760981b604482015290519081900360640190fd5b60065460ff16611579576040805162461bcd60e51b815260206004820152601360248201527243616c63756c6174696f6e206f6e676f696e6760681b604482015290519081900360640190fd5b60065461010090046001600160a01b03166115ce576040805162461bcd60e51b815260206004820152601060248201526f4e6f20626c617374206164647265737360801b604482015290519081900360640190fd5b600454811115611615576040805162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840cae0dec6d609b1b604482015290519081900360640190fd5b6000818152600b60205260409020541580159061163f575060008181526009602052604090205415155b61167e576040805162461bcd60e51b815260206004820152600b60248201526a08adae0e8f240cae0dec6d60ab1b604482015290519081900360640190fd5b6000818152600a602090815260408083203384528252808320805490849055848452600b835281842054600e54600754600d909552928520549194936116d7939192610d95929183916116d19089612130565b90612130565b6006546040805163a9059cbb60e01b81523360048201526024810184905290519293506101009091046001600160a01b03169163a9059cbb916044808201926020929091908290030181600087803b15801561173257600080fd5b505af1158015611746573d6000803e3d6000fd5b505050506040513d602081101561175c57600080fd5b5050604080518381526020810183905281518592429233927fe0efb15ea421e3d0429730e25e24b5ea2e595cebe71536f40c5d78dbb727db1a929181900390910190a4505050565b60096020526000908152604090205481565b6117be61206b565b6001600160a01b03166117cf6114c0565b6001600160a01b031614611818576040805162461bcd60e51b81526020600482018190526024820152600080516020612654833981519152604482015290519081900360640190fd5b80611821611ba2565b1161186a576040805162461bcd60e51b8152602060048201526014602482015273115c1bd8da081a185cc81b9bdd081c185cdcd95960621b604482015290519081900360640190fd5b6000818152600c602052604090205460ff16156118ce576040805162461bcd60e51b815260206004820152601b60248201527f416c726561647920636f6c6c656374656420666f722065706f63680000000000604482015290519081900360640190fd5b6000818152600c60209081526040808320805460ff191660011790556009909152902054158061190a57506000818152600b6020526040902054155b156119145761198a565b6000818152600960205260408082205490516001600160a01b037f00000000000000000000000056f038f93758a7735de812702fb5aefcbb2056471691908381818185875af1925050503d8060008114611388576040519150601f19603f3d011682016040523d82523d6000602084013e61138d565b50565b600b6020526000908152604090205481565b600354600160a01b900460ff16156119e8576040805162461bcd60e51b815260206004820152600760248201526614dd1bdc1c195960ca1b604482015290519081900360640190fd5b60003411611a2b576040805162461bcd60e51b815260206004820152600b60248201526a139bc8115512081cd95b9d60aa1b604482015290519081900360640190fd5b600154611a6d576040805162461bcd60e51b815260206004820152600b60248201526a139bdd081cdd185c9d195960aa1b604482015290519081900360640190fd5b6000611a77611ba2565b60008181526008602090815260408083206001600160a01b0387168452909152902054909150611aa7903461206f565b60008281526008602090815260408083206001600160a01b0387168452825280832093909355838252600990522054611ae0903461206f565b6000828152600960205260408082209290925560035482516340c10f1960e01b81526001600160a01b038681166004830152346024830152935193909116926340c10f199260448084019391929182900301818387803b158015611b4357600080fd5b505af1158015611b57573d6000803e3d6000fd5b505050508042836001600160a01b03167fc2ad9b96e86958983d97154422c868748371d03ae876909d99253d917d1aa730346040518082815260200191505060405180910390a45050565b6000611bbf600254610d95600154426121cb90919063ffffffff16565b905090565b6000611be1600254610d95600154856121cb90919063ffffffff16565b92915050565b611bef61206b565b6001600160a01b0316611c006114c0565b6001600160a01b031614611c49576040805162461bcd60e51b81526020600482018190526024820152600080516020612654833981519152604482015290519081900360640190fd5b60015415611c90576040805162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e481cdd185c9d1959608a1b604482015290519081900360640190fd5b42600155565b600a60209081526000928352604080842090915290825290205481565b600c6020526000908152604090205460ff1681565b600354600160a01b900460ff16611d16576040805162461bcd60e51b815260206004820152600d60248201526c5374696c6c206f6e676f696e6760981b604482015290519081900360640190fd5b600354611d2e906001600160a01b03163330846120d0565b60035460408051630852cd8d60e31b81526004810184905290516001600160a01b03909216916342966c689160248082019260009290919082900301818387803b158015611d7b57600080fd5b505af1158015611d8f573d6000803e3d6000fd5b50506040516000925033915083908381818185875af1925050503d8060008114611dd5576040519150601f19603f3d011682016040523d82523d6000602084013e611dda565b606091505b5050905080611e27576040805162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b604482015290519081900360640190fd5b604080518381529051429133917f0aef9d22e5892970040b99b2a4790cfaa0380b338076301f8910460ce111d6c69181900360200190a35050565b611e6a61206b565b6001600160a01b0316611e7b6114c0565b6001600160a01b031614611ec4576040805162461bcd60e51b81526020600482018190526024820152600080516020612654833981519152604482015290519081900360640190fd5b611ed86001600160a01b038416838361220d565b505050565b611ee561206b565b6001600160a01b0316611ef66114c0565b6001600160a01b031614611f3f576040805162461bcd60e51b81526020600482018190526024820152600080516020612654833981519152604482015290519081900360640190fd5b600192909255600255600380546001600160a01b0319166001600160a01b03909216919091179055565b611f7161206b565b6001600160a01b0316611f826114c0565b6001600160a01b031614611fcb576040805162461bcd60e51b81526020600482018190526024820152600080516020612654833981519152604482015290519081900360640190fd5b6001600160a01b0381166120105760405162461bcd60e51b81526004018080602001828103825260268152602001806125e76026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6000828201838110156120c9576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261212a90859061225b565b50505050565b60008261213f57506000611be1565b8282028284828161214c57fe5b04146120c95760405162461bcd60e51b81526004018080602001828103825260218152602001806126336021913960400191505060405180910390fd5b60006120c983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061230c565b60006120c983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506123ae565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611ed89084905b60006122b0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166124089092919063ffffffff16565b805190915015611ed8578080602001905160208110156122cf57600080fd5b5051611ed85760405162461bcd60e51b815260040180806020018281038252602a815260200180612674602a913960400191505060405180910390fd5b600081836123985760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561235d578181015183820152602001612345565b50505050905090810190601f16801561238a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816123a457fe5b0495945050505050565b600081848411156124005760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561235d578181015183820152602001612345565b505050900390565b6060612417848460008561241f565b949350505050565b6060824710156124605760405162461bcd60e51b815260040180806020018281038252602681526020018061260d6026913960400191505060405180910390fd5b6124698561257a565b6124ba576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b602083106124f85780518252601f1990920191602091820191016124d9565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461255a576040519150601f19603f3d011682016040523d82523d6000602084013e61255f565b606091505b509150915061256f828286612580565b979650505050505050565b3b151590565b6060831561258f5750816120c9565b82511561259f5782518084602001fd5b60405162461bcd60e51b815260206004820181815284516024840152845185939192839260440191908501908083836000831561235d57818101518382015260200161234556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212200e66829c106645347c7967aef721396164a6e725d7a22209ea242c2a696062de64736f6c63430007060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000056f038f93758a7735de812702fb5aefcbb205647000000000000000000000000000000000000000000000000000000000002a30000000000000000000000000042b333fbbdc8eed2b59fb194c341a3695450da82
-----Decoded View---------------
Arg [0] : _msig (address): 0x56F038F93758A7735De812702Fb5AefCbb205647
Arg [1] : _epochLength (uint256): 172800
Arg [2] : _bstETH (address): 0x42B333FbbDc8eED2B59fB194C341a3695450da82
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000056f038f93758a7735de812702fb5aefcbb205647
Arg [1] : 000000000000000000000000000000000000000000000000000000000002a300
Arg [2] : 00000000000000000000000042b333fbbdc8eed2b59fb194c341a3695450da82
Deployed Bytecode Sourcemap
23104:10187:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31449:156;;;;;;;;;;;;;:::i;23440:29::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;23514:20;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;23514:20:0;;;;;;;;;;;;;;23476:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;32856:150;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32856:150:0;;;;;;;;:::i;28553:1332::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28553:1332:0;;:::i;23615:60::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23615:60:0;;;;;;-1:-1:-1;;;;;23615:60:0;;:::i;24359:55::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24359:55:0;;:::i;27109:806::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27109:806:0;;:::i;31724:911::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31724:911:0;;;;;;;:::i;24421:31::-;;;;;;;;;;;;;:::i;23408:25::-;;;;;;;;;;;;;:::i;27923:546::-;;;;;;;;;;;;;;;;-1:-1:-1;27923:546:0;-1:-1:-1;;;;;27923:546:0;;:::i;23321:26::-;;;;;;;;;;;;;:::i;23541:27::-;;;;;;;;;;;;;:::i;25677:218::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25677:218:0;;:::i;7763:148::-;;;;;;;;;;;;;:::i;23382:19::-;;;;;;;;;;;;;:::i;23271:24::-;;;;;;;;;;;;;:::i;23205:29::-;;;;;;;;;;;;;:::i;7112:87::-;;;;;;;;;;;;;:::i;23354:21::-;;;;;;;;;;;;;:::i;30423:875::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30423:875:0;;:::i;23710:52::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23710:52:0;;:::i;25953:523::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25953:523:0;;:::i;23903:56::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23903:56:0;;:::i;26484:617::-;;;;;;;;;;;;;;;;-1:-1:-1;26484:617:0;-1:-1:-1;;;;;26484:617:0;;:::i;33014:130::-;;;;;;;;;;;;;:::i;33152:136::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33152:136:0;;:::i;31306:135::-;;;;;;;;;;;;;:::i;23802:62::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23802:62:0;;;;;;-1:-1:-1;;;;;23802:62:0;;:::i;24003:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24003:48:0;;:::i;29893:522::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29893:522:0;;:::i;25459:152::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25459:152:0;;;;;;;;;;;;;;;;;:::i;32643:205::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32643:205:0;;;;;;;;;;;-1:-1:-1;;;;;32643:205:0;;:::i;8066:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8066:244:0;-1:-1:-1;;;;;8066:244:0;;:::i;31449:156::-;7343:12;:10;:12::i;:::-;-1:-1:-1;;;;;7332:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;7332:23:0;;7324:68;;;;;-1:-1:-1;;;7324:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7324:68:0;;;;;;;;;;;;;;;31504:7:::1;::::0;-1:-1:-1;;;31504:7:0;::::1;;;31503:8;31495:36;;;::::0;;-1:-1:-1;;;31495:36:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;31495:36:0;;;;;;;;;;;;;::::1;;31542:7;:14:::0;;-1:-1:-1;;;;31542:14:0::1;-1:-1:-1::0;;;31542:14:0::1;::::0;;31580:17:::1;:15;:17::i;:::-;31567:10;:30:::0;31449:156::o;23440:29::-;;;;:::o;23514:20::-;;;;;;-1:-1:-1;;;;;23514:20:0;;:::o;23476:31::-;;;;;;:::o;32856:150::-;7343:12;:10;:12::i;:::-;-1:-1:-1;;;;;7332:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;7332:23:0;;7324:68;;;;;-1:-1:-1;;;7324:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7324:68:0;;;;;;;;;;;;;;;32945:5:::1;:14:::0;;-1:-1:-1;;;;;32945:14:0;;::::1;;;-1:-1:-1::0;;;;;;32945:14:0;;::::1;::::0;;;::::1;::::0;;;32970:12:::1;:28:::0;32856:150::o;28553:1332::-;28613:25;;;;:17;:25;;;;;;:30;;:68;;-1:-1:-1;28647:29:0;;;;:21;:29;;;;;;:34;28613:68;28605:109;;;;;-1:-1:-1;;;28605:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;28753:6;28733:17;:15;:17::i;:::-;:26;28725:59;;;;;-1:-1:-1;;;28725:59:0;;;;;;;;;;;;-1:-1:-1;;;28725:59:0;;;;;;;;;;;;;;;28795:19;28833:25;;;:17;:25;;;;;;28829:274;;28880:19;28902:15;;;:7;:15;;;;;;;;28918:10;28902:27;;;;;;;;28948:15;;28944:148;;29014:1;28984:15;;;:7;:15;;;;;;;;29000:10;28984:27;;;;;;;:31;29048:28;:11;29064;29048:15;:28::i;:::-;29034:42;;28944:148;28829:274;;29117:29;;;;:21;:29;;;;;;29113:460;;29168:17;29188:13;;;:5;:13;;;;;;;;29202:10;29188:25;;;;;;;;29232:13;;29228:334;;29312:6;;29305:69;;-1:-1:-1;;;;;29312:6:0;29337:10;29357:4;29364:9;29305:31;:69::i;:::-;29416:6;;29393:46;;;-1:-1:-1;;;29393:46:0;;;;;;;;;;-1:-1:-1;;;;;29416:6:0;;;;29393:35;;:46;;;;;29416:6;;29393:46;;;;;;;;29416:6;;29393:46;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29486:1:0;29458:13;;;:5;:13;;;;;;;;29472:10;29458:25;;;;;;;:29;-1:-1:-1;29520:26:0;:11;29536:9;29520:15;:26::i;:::-;29506:40;;29228:334;29113:460;;29605:1;29591:11;:15;29583:45;;;;;-1:-1:-1;;;29583:45:0;;;;;;;;;;;;-1:-1:-1;;;29583:45:0;;;;;;;;;;;;;;;29686:39;;29671:9;;29686:10;;29709:11;;29671:9;29686:39;29671:9;29686:39;29709:11;29686:10;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29670:55;;;29744:4;29736:37;;;;;-1:-1:-1;;;29736:37:0;;;;;;;;;;;;-1:-1:-1;;;29736:37:0;;;;;;;;;;;;;;;29821:56;;;;;;;;29857:6;;29840:15;;29828:10;;29821:56;;;;;;;;;;28553:1332;;;:::o;23615:60::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;24359:55::-;;;;;;;;;;;;;:::o;27109:806::-;27245:25;;;;:17;:25;;;;;;:30;;;;:68;;-1:-1:-1;27279:29:0;;;;:21;:29;;;;;;:34;;27245:68;27237:97;;;;;-1:-1:-1;;;27237:97:0;;;;;;;;;;;;-1:-1:-1;;;27237:97:0;;;;;;;;;;;;;;;27373:6;27353:17;:15;:17::i;:::-;:26;27345:59;;;;;-1:-1:-1;;;27345:59:0;;;;;;;;;;;;-1:-1:-1;;;27345:59:0;;;;;;;;;;;;;;;27451:1;27423:13;;;:5;:13;;;;;;;;27437:10;27423:25;;;;;;;;27415:67;;;;;-1:-1:-1;;;27415:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;27493:18;27514:13;;;:5;:13;;;;;;;;27528:10;27514:25;;;;;;;;;27550:29;;;;27663:25;;;:17;:25;;;;;;27613:21;:29;;;;;;;27514:25;;27493:18;27613:76;;:45;;27514:25;27613:33;:45::i;:::-;:49;;:76::i;:::-;27716:40;;27590:99;;-1:-1:-1;27701:9:0;;27716:10;;27590:99;;27701:9;27716:40;27701:9;27716:40;27590:99;27716:10;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27700:56;;;27775:4;27767:37;;;;;-1:-1:-1;;;27767:37:0;;;;;;;;;;;;-1:-1:-1;;;27767:37:0;;;;;;;;;;;;;;;27851:56;;;;;;;;27886:6;;27869:15;;27857:10;;27851:56;;;;;;;;;;27109:806;;;;:::o;31724:911::-;7343:12;:10;:12::i;:::-;-1:-1:-1;;;;;7332:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;7332:23:0;;7324:68;;;;;-1:-1:-1;;;7324:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7324:68:0;;;;;;;;;;;;;;;31839:7:::1;::::0;-1:-1:-1;;;31839:7:0;::::1;;;31831:33;;;::::0;;-1:-1:-1;;;31831:33:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;31831:33:0;;;;;;;;;;;;;::::1;;31895:11;31883:9;:23;31875:49;;;::::0;;-1:-1:-1;;;31875:49:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;31875:49:0;;;;;;;;;;;;;::::1;;31943:16:::0;;;:78:::1;;-1:-1:-1::0;31964:14:0::1;::::0;:19;;::::1;::::0;:56:::1;;;32002:14;;32019:1;32002:18;31987:11;:33;31964:56;31935:103;;;::::0;;-1:-1:-1;;;31935:103:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;31935:103:0;;;;;;;;;;;;;::::1;;32070:10;;32057:9;:23;;32049:48;;;::::0;;-1:-1:-1;;;32049:48:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;32049:48:0;;;;;;;;;;;;;::::1;;32117:19;::::0;::::1;;32116:20;32108:49;;;::::0;;-1:-1:-1;;;32108:49:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;32108:49:0;;;;;;;;;;;;;::::1;;32187:11:::0;32170:327:::1;32204:9;32200:1;:13;32170:327;;;32239:20;::::0;;;:17:::1;:20;::::0;;;;;:25;;::::1;::::0;:58:::1;;-1:-1:-1::0;32268:24:0::1;::::0;;;:21:::1;:24;::::0;;;;;:29;::::1;32239:58;32235:251;;;32369:10;::::0;32344:43:::1;::::0;32369:17:::1;::::0;32384:1;32369:14:::1;:17::i;:::-;32344:20;::::0;;;:17:::1;:20;::::0;;;;;;:24:::1;:43::i;:::-;32318:23;::::0;;;:20:::1;:23;::::0;;;;:69;;;32425:16:::1;::::0;:45:::1;::::0;:20:::1;:45::i;:::-;32406:16;:64:::0;32235:251:::1;32215:3;;32170:327;;;-1:-1:-1::0;32509:14:0::1;:26:::0;;;32563:10:::1;::::0;32550:23;::::1;32546:82;;;32590:19;:26:::0;;-1:-1:-1;;32590:26:0::1;32612:4;32590:26;::::0;;32546:82:::1;31724:911:::0;;:::o;24421:31::-;;;;:::o;23408:25::-;;;;:::o;27923:546::-;27995:7;;-1:-1:-1;;;27995:7:0;;;;27994:8;27986:28;;;;;-1:-1:-1;;;27986:28:0;;;;;;;;;;;;-1:-1:-1;;;27986:28:0;;;;;;;;;;;;;;;28045:1;28033:9;:13;28025:37;;;;;-1:-1:-1;;;28025:37:0;;;;;;;;;;;;-1:-1:-1;;;28025:37:0;;;;;;;;;;;;;;;28081:9;;28073:38;;;;;-1:-1:-1;;;28073:38:0;;;;;;;;;;;;-1:-1:-1;;;28073:38:0;;;;;;;;;;;;;;;28122:20;28145:17;:15;:17::i;:::-;28208:21;;;;:7;:21;;;;;;;;-1:-1:-1;;;;;28208:32:0;;;;;;;;;;28122:40;;-1:-1:-1;28208:47:0;;28245:9;28208:36;:47::i;:::-;28173:21;;;;:7;:21;;;;;;;;-1:-1:-1;;;;;28173:32:0;;;;;;;;;:82;;;;28304:35;;;:21;:35;;;;:50;;28344:9;28304:39;:50::i;:::-;28266:21;:35;28288:12;28266:35;;;;;;;;;;;:88;;;;28437:12;28420:15;28409:9;-1:-1:-1;;;;;28402:59:0;;28451:9;28402:59;;;;;;;;;;;;;;;;;;27923:546;;:::o;23321:26::-;;;;:::o;23541:27::-;;;;:::o;25677:218::-;25752:10;-1:-1:-1;;;;;25766:4:0;25752:18;;25744:39;;;;;-1:-1:-1;;;25744:39:0;;;;;;;;;;;;-1:-1:-1;;;25744:39:0;;;;;;;;;;;;;;;25810:29;;25795:9;;-1:-1:-1;;;;;25810:4:0;:9;;25827:7;;25795:9;25810:29;25795:9;25810:29;25827:7;25810:9;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25794:45;;;25858:4;25850:37;;;;;-1:-1:-1;;;25850:37:0;;;;;;;;;;;;-1:-1:-1;;;25850:37:0;;;;;;;;;;;;;;7763:148;7343:12;:10;:12::i;:::-;-1:-1:-1;;;;;7332:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;7332:23:0;;7324:68;;;;;-1:-1:-1;;;7324:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7324:68:0;;;;;;;;;;;;;;;7870:1:::1;7854:6:::0;;7833:40:::1;::::0;-1:-1:-1;;;;;7854:6:0;;::::1;::::0;7833:40:::1;::::0;7870:1;;7833:40:::1;7901:1;7884:19:::0;;-1:-1:-1;;;;;;7884:19:0::1;::::0;;7763:148::o;23382:19::-;;;-1:-1:-1;;;23382:19:0;;;;;:::o;23271:24::-;;;;:::o;23205:29::-;;;:::o;7112:87::-;7158:7;7185:6;-1:-1:-1;;;;;7185:6:0;7112:87;:::o;23354:21::-;;;-1:-1:-1;;;;;23354:21:0;;:::o;30423:875::-;30495:7;;-1:-1:-1;;;30495:7:0;;;;30487:33;;;;;-1:-1:-1;;;30487:33:0;;;;;;;;;;;;-1:-1:-1;;;30487:33:0;;;;;;;;;;;;;;;30539:19;;;;30531:51;;;;;-1:-1:-1;;;30531:51:0;;;;;;;;;;;;-1:-1:-1;;;30531:51:0;;;;;;;;;;;;;;;30601:5;;;;;-1:-1:-1;;;;;30601:5:0;30593:48;;;;;-1:-1:-1;;;30593:48:0;;;;;;;;;;;;-1:-1:-1;;;30593:48:0;;;;;;;;;;;;;;;30670:10;;30660:6;:20;;30652:46;;;;;-1:-1:-1;;;30652:46:0;;;;;;;;;;;;-1:-1:-1;;;30652:46:0;;;;;;;;;;;;;;;30717:29;;;;:21;:29;;;;;;:34;;;;:68;;-1:-1:-1;30755:25:0;;;;:17;:25;;;;;;:30;;30717:68;30709:92;;;;;-1:-1:-1;;;30709:92:0;;;;;;;;;;;;-1:-1:-1;;;30709:92:0;;;;;;;;;;;;;;;30814:27;30844:15;;;:7;:15;;;;;;;;30860:10;30844:27;;;;;;;;;30882:31;;;;31050:29;;;:21;:29;;;;;;31028:16;;31010:12;;30952:20;:28;;;;;;;30844:27;;30814;30952:128;;31050:29;;30952:93;;31028:16;30952:93;;:53;;30844:27;30952:32;:53::i;:::-;:57;;:71::i;:128::-;31098:5;;31091:53;;;-1:-1:-1;;;31091:53:0;;31114:10;31091:53;;;;;;;;;;;;;;-1:-1:-1;31098:5:0;;;;-1:-1:-1;;;;;31098:5:0;;31091:22;;:53;;;;;;;;;;;;;;;-1:-1:-1;31098:5:0;31091:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31200:90:0;;;;;;31091:53;31200:90;;;;;;;31243:6;;31226:15;;31214:10;;31200:90;;;;;;;;;;;30423:875;;;:::o;23710:52::-;;;;;;;;;;;;;:::o;25953:523::-;7343:12;:10;:12::i;:::-;-1:-1:-1;;;;;7332:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;7332:23:0;;7324:68;;;;;-1:-1:-1;;;7324:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7324:68:0;;;;;;;;;;;;;;;26051:6:::1;26031:17;:15;:17::i;:::-;:26;26023:59;;;::::0;;-1:-1:-1;;;26023:59:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26023:59:0;;;;;;;;;;;;;::::1;;26102:24;::::0;;;:16:::1;:24;::::0;;;;;::::1;;26101:25;26093:65;;;::::0;;-1:-1:-1;;;26093:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;26169:24;::::0;;;:16:::1;:24;::::0;;;;;;;:31;;-1:-1:-1;;26169:31:0::1;26196:4;26169:31;::::0;;26215:17:::1;:25:::0;;;;;;:30;;:68:::1;;-1:-1:-1::0;26249:29:0::1;::::0;;;:21:::1;:29;::::0;;;;;:34;26215:68:::1;26211:107;;;26300:7;;26211:107;26358:9;26390:25:::0;;;:17:::1;:25;::::0;;;;;;26373:47;;-1:-1:-1;;;;;26373:4:0::1;:9;::::0;26390:25;26358:9;26373:47;26358:9;26373:47;26390:25;26373:9;:47:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7403:1;25953:523:::0;:::o;23903:56::-;;;;;;;;;;;;;:::o;26484:617::-;26552:7;;-1:-1:-1;;;26552:7:0;;;;26551:8;26543:28;;;;;-1:-1:-1;;;26543:28:0;;;;;;;;;;;;-1:-1:-1;;;26543:28:0;;;;;;;;;;;;;;;26602:1;26590:9;:13;26582:37;;;;;-1:-1:-1;;;26582:37:0;;;;;;;;;;;;-1:-1:-1;;;26582:37:0;;;;;;;;;;;;;;;26638:9;;26630:38;;;;;-1:-1:-1;;;26630:38:0;;;;;;;;;;;;-1:-1:-1;;;26630:38:0;;;;;;;;;;;;;;;26679:20;26702:17;:15;:17::i;:::-;26761:19;;;;:5;:19;;;;;;;;-1:-1:-1;;;;;26761:28:0;;;;;;;;;;26679:40;;-1:-1:-1;26761:43:0;;26794:9;26761:32;:43::i;:::-;26730:19;;;;:5;:19;;;;;;;;-1:-1:-1;;;;;26730:28:0;;;;;;;;;:74;;;;26849:31;;;:17;:31;;;;:46;;26885:9;26849:35;:46::i;:::-;26815:31;;;;:17;:31;;;;;;:80;;;;26960:6;;26937:55;;-1:-1:-1;;;26937:55:0;;-1:-1:-1;;;;;26937:55:0;;;;;;;26982:9;26937:55;;;;;;26960:6;;;;;26937:35;;:55;;;;;26815:31;;26937:55;;;;;;26815:31;26960:6;26937:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27069:12;27052:15;27043:7;-1:-1:-1;;;;;27038:55:0;;27083:9;27038:55;;;;;;;;;;;;;;;;;;26484:617;;:::o;33014:130::-;33062:7;33089:47;33124:11;;33089:30;33109:9;;33089:15;:19;;:30;;;;:::i;:47::-;33082:54;;33014:130;:::o;33152:136::-;33211:7;33238:42;33268:11;;33238:25;33253:9;;33238:10;:14;;:25;;;;:::i;:42::-;33231:49;33152:136;-1:-1:-1;;33152:136:0:o;31306:135::-;7343:12;:10;:12::i;:::-;-1:-1:-1;;;;;7332:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;7332:23:0;;7324:68;;;;;-1:-1:-1;;;7324:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7324:68:0;;;;;;;;;;;;;;;31361:9:::1;::::0;:14;31353:42:::1;;;::::0;;-1:-1:-1;;;31353:42:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;31353:42:0;;;;;;;;;;;;;::::1;;31418:15;31406:9;:27:::0;31306:135::o;23802:62::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;24003:48::-;;;;;;;;;;;;;;;:::o;29893:522::-;29966:7;;-1:-1:-1;;;29966:7:0;;;;29958:33;;;;;-1:-1:-1;;;29958:33:0;;;;;;;;;;;;-1:-1:-1;;;29958:33:0;;;;;;;;;;;;;;;30040:6;;30033:67;;-1:-1:-1;;;;;30040:6:0;30065:10;30085:4;30092:7;30033:31;:67::i;:::-;30134:6;;30111:44;;;-1:-1:-1;;;30111:44:0;;;;;;;;;;-1:-1:-1;;;;;30134:6:0;;;;30111:35;;:44;;;;;30134:6;;30111:44;;;;;;;;30134:6;;30111:44;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30213:35:0;;30198:9;;-1:-1:-1;30213:10:0;;-1:-1:-1;30236:7:0;;30198:9;30213:35;30198:9;30213:35;30236:7;30213:10;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30197:51;;;30267:4;30259:37;;;;;-1:-1:-1;;;30259:37:0;;;;;;;;;;;;-1:-1:-1;;;30259:37:0;;;;;;;;;;;;;;;30354:53;;;;;;;;30382:15;;30370:10;;30354:53;;;;;;;;;29893:522;;:::o;25459:152::-;7343:12;:10;:12::i;:::-;-1:-1:-1;;;;;7332:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;7332:23:0;;7324:68;;;;;-1:-1:-1;;;7324:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7324:68:0;;;;;;;;;;;;;;;25562:41:::1;-1:-1:-1::0;;;;;25562:27:0;::::1;25590:3:::0;25595:7;25562:27:::1;:41::i;:::-;25459:152:::0;;;:::o;32643:205::-;7343:12;:10;:12::i;:::-;-1:-1:-1;;;;;7332:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;7332:23:0;;7324:68;;;;;-1:-1:-1;;;7324:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7324:68:0;;;;;;;;;;;;;;;32754:9:::1;:22:::0;;;;32787:11:::1;:26:::0;32824:6:::1;:16:::0;;-1:-1:-1;;;;;;32824:16:0::1;-1:-1:-1::0;;;;;32824:16:0;;::::1;::::0;;;::::1;::::0;;32643:205::o;8066:244::-;7343:12;:10;:12::i;:::-;-1:-1:-1;;;;;7332:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;7332:23:0;;7324:68;;;;;-1:-1:-1;;;7324:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7324:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;8155:22:0;::::1;8147:73;;;;-1:-1:-1::0;;;8147:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8257:6;::::0;;8236:38:::1;::::0;-1:-1:-1;;;;;8236:38:0;;::::1;::::0;8257:6;::::1;::::0;8236:38:::1;::::0;::::1;8285:6;:17:::0;;-1:-1:-1;;;;;;8285:17:0::1;-1:-1:-1::0;;;;;8285:17:0;;;::::1;::::0;;;::::1;::::0;;8066:244::o;5822:98::-;5902:10;5822:98;:::o;912:167::-;970:7;998:5;;;1018:6;;;;1010:46;;;;;-1:-1:-1;;;1010:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1072:1;912:167;-1:-1:-1;;;912:167:0:o;19922:205::-;20050:68;;;-1:-1:-1;;;;;20050:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20050:68:0;-1:-1:-1;;;20050:68:0;;;20023:96;;20043:5;;20023:19;:96::i;:::-;19922:205;;;;:::o;2168:431::-;2226:7;2455:6;2451:37;;-1:-1:-1;2479:1:0;2472:8;;2451:37;2508:5;;;2512:1;2508;:5;:1;2528:5;;;;;:10;2520:56;;;;-1:-1:-1;;;2520:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3043:126;3101:7;3124:39;3128:1;3131;3124:39;;;;;;;;;;;;;;;;;:3;:39::i;1334:130::-;1392:7;1415:43;1419:1;1422;1415:43;;;;;;;;;;;;;;;;;:3;:43::i;19737:177::-;19847:58;;;-1:-1:-1;;;;;19847:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19847:58:0;-1:-1:-1;;;19847:58:0;;;19820:86;;19840:5;;22042:761;22466:23;22492:69;22520:4;22492:69;;;;;;;;;;;;;;;;;22500:5;-1:-1:-1;;;;;22492:27:0;;;:69;;;;;:::i;:::-;22576:17;;22466:95;;-1:-1:-1;22576:21:0;22572:224;;22718:10;22707:30;;;;;;;;;;;;;;;-1:-1:-1;22707:30:0;22699:85;;;;-1:-1:-1;;;22699:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3633:343;3739:7;3833:12;3826:5;3818:28;;;;-1:-1:-1;;;3818:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3853:9;3869:1;3865;:5;;;;;;;3633:343;-1:-1:-1;;;;;3633:343:0:o;1739:198::-;1845:7;1877:12;1869:6;;;;1861:29;;;;-1:-1:-1;;;1861:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1909:5:0;;;1739:198::o;14769:195::-;14872:12;14904:52;14926:6;14934:4;14940:1;14943:12;14904:21;:52::i;:::-;14897:59;14769:195;-1:-1:-1;;;;14769:195:0:o;15821:530::-;15948:12;16006:5;15981:21;:30;;15973:81;;;;-1:-1:-1;;;15973:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16073:18;16084:6;16073:10;:18::i;:::-;16065:60;;;;;-1:-1:-1;;;16065:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16199:12;16213:23;16240:6;-1:-1:-1;;;;;16240:11:0;16260:5;16268:4;16240:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16240:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16198:75;;;;16291:52;16309:7;16318:10;16330:12;16291:17;:52::i;:::-;16284:59;15821:530;-1:-1:-1;;;;;;;15821:530:0:o;11851:422::-;12218:20;12257:8;;;11851:422::o;18361:742::-;18476:12;18505:7;18501:595;;;-1:-1:-1;18536:10:0;18529:17;;18501:595;18650:17;;:21;18646:439;;18913:10;18907:17;18974:15;18961:10;18957:2;18953:19;18946:44;18861:148;19049:20;;-1:-1:-1;;;19049:20:0;;;;;;;;;;;;;;;;;19056:12;;19049:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://0e66829c106645347c7967aef721396164a6e725d7a22209ea242c2a696062de
Loading...
Loading
Loading...
Loading
Net Worth in USD
$2,799.87
Net Worth in ETH
1.520673
Token Allocations
ETH
100.00%
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $1,841.21 | 1.5207 | $2,799.87 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.