Source Code
Overview
ETH Balance
0 ETH
ETH Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 74 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Earn | 354271071 | 155 days ago | IN | 0 ETH | 0.00000061 | ||||
| Earn | 352531525 | 160 days ago | IN | 0 ETH | 0.0000006 | ||||
| Earn | 352182218 | 161 days ago | IN | 0 ETH | 0.00000062 | ||||
| Earn | 350773064 | 165 days ago | IN | 0 ETH | 0.00000381 | ||||
| Earn | 350426368 | 166 days ago | IN | 0 ETH | 0.00000751 | ||||
| Earn | 350073617 | 167 days ago | IN | 0 ETH | 0.00000181 | ||||
| Earn | 349724259 | 168 days ago | IN | 0 ETH | 0.00000062 | ||||
| Earn | 349289343 | 169 days ago | IN | 0 ETH | 0.00000062 | ||||
| Earn | 348594402 | 171 days ago | IN | 0 ETH | 0.00000094 | ||||
| Earn | 347895896 | 173 days ago | IN | 0 ETH | 0.00000063 | ||||
| Earn | 347545216 | 174 days ago | IN | 0 ETH | 0.00000061 | ||||
| Earn | 347195311 | 175 days ago | IN | 0 ETH | 0.00000061 | ||||
| Earn | 346844967 | 176 days ago | IN | 0 ETH | 0.00000064 | ||||
| Earn | 346493258 | 177 days ago | IN | 0 ETH | 0.00000063 | ||||
| Earn | 346137756 | 178 days ago | IN | 0 ETH | 0.00000065 | ||||
| Earn | 345782023 | 180 days ago | IN | 0 ETH | 0.00000062 | ||||
| Earn | 345435515 | 181 days ago | IN | 0 ETH | 0.00000061 | ||||
| Earn | 345087572 | 182 days ago | IN | 0 ETH | 0.00000063 | ||||
| Earn | 283993030 | 359 days ago | IN | 0 ETH | 0.00000386 | ||||
| Earn | 283662863 | 360 days ago | IN | 0 ETH | 0.00000239 | ||||
| Earn | 282636190 | 363 days ago | IN | 0 ETH | 0.00000101 | ||||
| Earn | 281947338 | 365 days ago | IN | 0 ETH | 0.0000035 | ||||
| Earn | 281602722 | 366 days ago | IN | 0 ETH | 0.00000245 | ||||
| Earn | 281257429 | 367 days ago | IN | 0 ETH | 0.00000227 | ||||
| Earn | 280914696 | 368 days ago | IN | 0 ETH | 0.00000174 |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
VaultSushiWethWbtc
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/**
*Submitted for verification at Arbiscan.io on 2023-03-13
*/
// Sources flattened with hardhat v2.10.1-gzeon-c8fe47dd4 https://hardhat.org
// File contracts/interfaces/controller.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.4;
interface IController {
function vaults(address) external view returns (address);
function rewards() external view returns (address);
function devfund() external view returns (address);
function treasury() external view returns (address);
function balanceOf(address) external view returns (uint256);
function withdraw(address, uint256) external;
function earn(address, uint256) external;
// For Big Green Button:
function setVault(address _token, address _vault) external;
function approveStrategy(address _token, address _strategy) external;
function revokeStrategy(address _token, address _strategy) external;
function setStrategy(address _token, address _strategy) external;
function setStrategist(address _strategist) external;
function setGovernance(address _governance) external;
function setTimelock(address _timelock) external;
}
// File contracts/lib/safe-math.sol
pragma solidity 0.8.4;
/**
* @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) {
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 contracts/lib/context.sol
pragma solidity 0.8.4;
/*
* @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 GSN 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 payable) {
return payable(msg.sender);
}
function _msgData() internal view virtual returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
// File contracts/lib/erc20.sol
// File: contracts/GSN/Context.sol
pragma solidity 0.8.4;
// File: contracts/token/ERC20/IERC20.sol
/**
* @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: contracts/utils/Address.sol
/**
* @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");
return _functionCallWithValue(target, data, value, errorMessage);
}
function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
require(isContract(target), "Address: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
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: contracts/token/ERC20/ERC20.sol
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* We have followed general OpenZeppelin guidelines: functions revert instead
* of returning `false` on failure. This behavior is nonetheless conventional
* and does not conflict with the expectations of ERC20 applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
* functions have been added to mitigate the well-known issues around setting
* allowances. See {IERC20-approve}.
*/
contract ERC20 is Context, IERC20 {
using SafeMath for uint256;
using Address for address;
mapping (address => uint256) private _balances;
mapping (address => mapping (address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
uint8 private _decimals;
/**
* @dev Sets the values for {name} and {symbol}, initializes {decimals} with
* a default value of 18.
*
* To select a different value for {decimals}, use {_setupDecimals}.
*
* All three of these values are immutable: they can only be set once during
* construction.
*/
constructor (string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
_decimals = 18;
}
/**
* @dev Returns the name of the token.
*/
function name() public view returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5,05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is
* called.
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view returns (uint8) {
return _decimals;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `recipient` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20};
*
* Requirements:
* - `sender` and `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
* - the caller must have allowance for ``sender``'s tokens of at least
* `amount`.
*/
function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
return true;
}
/**
* @dev Moves tokens `amount` from `sender` to `recipient`.
*
* This is internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `sender` cannot be the zero address.
* - `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
*/
function _transfer(address sender, address recipient, uint256 amount) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(sender, recipient, amount);
_balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
_balances[recipient] = _balances[recipient].add(amount);
emit Transfer(sender, recipient, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements
*
* - `to` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply = _totalSupply.add(amount);
_balances[account] = _balances[account].add(amount);
emit Transfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
_balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
_totalSupply = _totalSupply.sub(amount);
emit Transfer(account, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(address owner, address spender, uint256 amount) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Sets {decimals} to a value other than the default one of 18.
*
* WARNING: This function should only be called from the constructor. Most
* applications that interact with token contracts will not expect
* {decimals} to ever change, and may work incorrectly if it does.
*/
function _setupDecimals(uint8 decimals_) internal {
_decimals = decimals_;
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be to transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
}
/**
* @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 contracts/vaults/sushi/vault-sushi-weth-wbtc.sol
// https://github.com/iearn-finance/vaults/blob/master/contracts/vaults/yVault.sol
pragma solidity 0.8.4;
contract VaultSushiWethWbtc is ERC20 {
using SafeERC20 for IERC20;
using Address for address;
using SafeMath for uint256;
IERC20 public token;
uint256 public min = 9500;
uint256 public constant max = 10000;
address public governance;
address public timelock;
address public controller;
constructor(
address _token,
address _governance,
address _timelock,
address _controller
)
ERC20(
string(abi.encodePacked("freezing ", ERC20(_token).name())),
string(abi.encodePacked("s", ERC20(_token).symbol()))
)
{
_setupDecimals(ERC20(_token).decimals());
token = IERC20(_token);
governance = _governance;
timelock = _timelock;
controller = _controller;
}
function balance() public view returns (uint256) {
return
token.balanceOf(address(this)).add(
IController(controller).balanceOf(address(token))
);
}
function setMin(uint256 _min) external {
require(msg.sender == governance, "!governance");
require(_min <= max, "numerator cannot be greater than denominator");
min = _min;
}
function setGovernance(address _governance) public {
require(msg.sender == governance, "!governance");
governance = _governance;
}
function setTimelock(address _timelock) public {
require(msg.sender == timelock, "!timelock");
timelock = _timelock;
}
function setController(address _controller) public {
require(msg.sender == timelock, "!timelock");
controller = _controller;
}
// Custom logic in here for how much the vault allows to be borrowed
// Sets minimum required on-hand to keep small withdrawals cheap
function available() public view returns (uint256) {
return token.balanceOf(address(this)).mul(min).div(max);
}
function earn() public {
uint256 _bal = available();
token.safeTransfer(controller, _bal);
IController(controller).earn(address(token), _bal);
}
function depositAll() external {
deposit(token.balanceOf(msg.sender));
}
// Declare a Deposit Event
event Deposit(address indexed _from, uint _timestamp, uint _value, uint _shares);
function deposit(uint256 _amount) public {
uint256 _pool = balance();
uint256 _before = token.balanceOf(address(this));
token.safeTransferFrom(msg.sender, address(this), _amount);
uint256 _after = token.balanceOf(address(this));
_amount = _after.sub(_before); // Additional check for deflationary tokens
uint256 shares = 0;
if (totalSupply() == 0) {
shares = _amount;
} else {
shares = (_amount.mul(totalSupply())).div(_pool);
}
_mint(msg.sender, shares);
emit Deposit(tx.origin, block.timestamp,_amount, shares);
}
function withdrawAll() external {
withdraw(balanceOf(msg.sender));
}
// Used to swap any borrowed reserve over the debt limit to liquidate to 'token'
function harvest(address reserve, uint256 amount) external {
require(msg.sender == controller, "!controller");
require(reserve != address(token), "token");
IERC20(reserve).safeTransfer(controller, amount);
}
// Declare a Withdraw Event
event Withdraw(address indexed _from, uint _timestamp, uint _value, uint _shares);
// No rebalance implementation for lower fees and faster swaps
function withdraw(uint256 _shares) public {
uint256 r = (balance().mul(_shares)).div(totalSupply());
_burn(msg.sender, _shares);
// Check balance
uint256 b = token.balanceOf(address(this));
if (b < r) {
uint256 _withdraw = r.sub(b);
IController(controller).withdraw(address(token), _withdraw);
uint256 _after = token.balanceOf(address(this));
uint256 _diff = _after.sub(b);
if (_diff < _withdraw) {
r = b.add(_diff);
}
}
token.safeTransfer(msg.sender, r);
emit Withdraw(tx.origin, block.timestamp, r, _shares);
}
function getRatio() public view returns (uint256) {
return balance().mul(1e18).div(totalSupply());
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_governance","type":"address"},{"internalType":"address","name":"_timelock","type":"address"},{"internalType":"address","name":"_controller","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":false,"internalType":"uint256","name":"_timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_shares","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":false,"internalType":"uint256","name":"_timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_shares","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"available","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"controller","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"reserve","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"max","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"min","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_controller","type":"address"}],"name":"setController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_governance","type":"address"}],"name":"setGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_min","type":"uint256"}],"name":"setMin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_timelock","type":"address"}],"name":"setTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timelock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405261251c6006553480156200001757600080fd5b506040516200211a3803806200211a8339810160408190526200003a9162000362565b836001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b1580156200007457600080fd5b505afa15801562000089573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620000b39190810190620003be565b604051602001620000c59190620004c7565b604051602081830303815290604052846001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156200010e57600080fd5b505afa15801562000123573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200014d9190810190620003be565b6040516020016200015f91906200049c565b60408051601f198184030181529190528151620001849060039060208501906200029f565b5080516200019a9060049060208401906200029f565b50506005805460ff19166012179055506040805163313ce56760e01b8152905162000242916001600160a01b0387169163313ce56791600480820192602092909190829003018186803b158015620001f157600080fd5b505afa15801562000206573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022c919062000472565b6005805460ff191660ff92909216919091179055565b600580546001600160a01b0395861661010002610100600160a81b0319909116179055600780549385166001600160a01b031994851617905560088054928516928416929092179091556009805491909316911617905562000580565b828054620002ad906200052d565b90600052602060002090601f016020900481019282620002d157600085556200031c565b82601f10620002ec57805160ff19168380011785556200031c565b828001600101855582156200031c579182015b828111156200031c578251825591602001919060010190620002ff565b506200032a9291506200032e565b5090565b5b808211156200032a57600081556001016200032f565b80516001600160a01b03811681146200035d57600080fd5b919050565b6000806000806080858703121562000378578384fd5b620003838562000345565b9350620003936020860162000345565b9250620003a36040860162000345565b9150620003b36060860162000345565b905092959194509250565b600060208284031215620003d0578081fd5b81516001600160401b0380821115620003e7578283fd5b818401915084601f830112620003fb578283fd5b8151818111156200041057620004106200056a565b604051601f8201601f19908116603f011681019083821181831017156200043b576200043b6200056a565b8160405282815287602084870101111562000454578586fd5b62000467836020830160208801620004fa565b979650505050505050565b60006020828403121562000484578081fd5b815160ff8116811462000495578182fd5b9392505050565b607360f81b815260008251620004ba816001850160208701620004fa565b9190910160010192915050565b680333932b2bd34b733960bd1b815260008251620004ed816009850160208701620004fa565b9190910160090192915050565b60005b8381101562000517578181015183820152602001620004fd565b8381111562000527576000848401525b50505050565b600181811c908216806200054257607f821691505b602082108114156200056457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b611b8a80620005906000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806395d89b4111610104578063d33219b4116100a2578063ec1ebd7a11610071578063ec1ebd7a146103f3578063f77c4791146103fb578063f88979451461040e578063fc0c546a1461041757600080fd5b8063d33219b414610397578063d389800f146103aa578063dd62ed3e146103b2578063de5f6268146103eb57600080fd5b8063ab033ea9116100de578063ab033ea914610356578063b69ef8a814610369578063b6b55f2514610371578063bdacb3031461038457600080fd5b806395d89b4114610328578063a457c2d714610330578063a9059cbb1461034357600080fd5b8063395093511161017c5780636ac5db191161014b5780636ac5db19146102db57806370a08231146102e4578063853828b61461030d57806392eefe9b1461031557600080fd5b8063395093511461028257806345dc3dd81461029557806348a0d754146102a85780635aa6e675146102b057600080fd5b806318160ddd116101b857806318160ddd1461023557806323b872dd146102475780632e1a7d4d1461025a578063313ce5671461026d57600080fd5b8063018ee9b7146101df57806306fdde03146101f4578063095ea7b314610212575b600080fd5b6101f26101ed36600461190c565b61042f565b005b6101fc6104e5565b60405161020991906119a1565b60405180910390f35b61022561022036600461190c565b610577565b6040519015158152602001610209565b6002545b604051908152602001610209565b6102256102553660046118d1565b61058e565b6101f2610268366004611955565b6105f7565b60055460405160ff9091168152602001610209565b61022561029036600461190c565b61083e565b6101f26102a3366004611955565b610874565b610239610928565b6007546102c3906001600160a01b031681565b6040516001600160a01b039091168152602001610209565b61023961271081565b6102396102f2366004611885565b6001600160a01b031660009081526020819052604090205490565b6101f26109be565b6101f2610323366004611885565b6109d9565b6101fc610a41565b61022561033e36600461190c565b610a50565b61022561035136600461190c565b610a9f565b6101f2610364366004611885565b610aac565b610239610b16565b6101f261037f366004611955565b610c25565b6101f2610392366004611885565b610de7565b6008546102c3906001600160a01b031681565b6101f2610e4f565b6102396103c036600461189f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6101f2610eee565b610239610f70565b6009546102c3906001600160a01b031681565b61023960065481565b6005546102c39061010090046001600160a01b031681565b6009546001600160a01b0316331461047c5760405162461bcd60e51b815260206004820152600b60248201526a10b1b7b73a3937b63632b960a91b60448201526064015b60405180910390fd5b6005546001600160a01b038381166101009092041614156104c75760405162461bcd60e51b81526020600482015260056024820152643a37b5b2b760d91b6044820152606401610473565b6009546104e1906001600160a01b03848116911683610f92565b5050565b6060600380546104f490611a6e565b80601f016020809104026020016040519081016040528092919081815260200182805461052090611a6e565b801561056d5780601f106105425761010080835404028352916020019161056d565b820191906000526020600020905b81548152906001019060200180831161055057829003601f168201915b5050505050905090565b6000610584338484610ffa565b5060015b92915050565b600061059b84848461111f565b6105ed84336105e885604051806060016040528060288152602001611b08602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906112a2565b610ffa565b5060019392505050565b600061061d61060560025490565b61061784610611610b16565b906112dc565b90611362565b905061062933836113a4565b6005546040516370a0823160e01b815230600482015260009161010090046001600160a01b0316906370a082319060240160206040518083038186803b15801561067257600080fd5b505afa158015610686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106aa919061196d565b9050818110156107da5760006106c083836114b0565b60095460055460405163f3fef3a360e01b81526001600160a01b036101009092048216600482015260248101849052929350169063f3fef3a390604401600060405180830381600087803b15801561071757600080fd5b505af115801561072b573d6000803e3d6000fd5b50506005546040516370a0823160e01b8152306004820152600093506101009091046001600160a01b031691506370a082319060240160206040518083038186803b15801561077957600080fd5b505afa15801561078d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b1919061196d565b905060006107bf82856114b0565b9050828110156107d6576107d384826114f2565b94505b5050505b6005546107f69061010090046001600160a01b03163384610f92565b604080514281526020810184905290810184905232907f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca949060600160405180910390a2505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916105849185906105e890866114f2565b6007546001600160a01b031633146108bc5760405162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b6044820152606401610473565b6127108111156109235760405162461bcd60e51b815260206004820152602c60248201527f6e756d657261746f722063616e6e6f742062652067726561746572207468616e60448201526b103232b737b6b4b730ba37b960a11b6064820152608401610473565b600655565b6006546005546040516370a0823160e01b81523060048201526000926109b99261271092610617929161010090046001600160a01b0316906370a082319060240160206040518083038186803b15801561098157600080fd5b505afa158015610995573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610611919061196d565b905090565b336000908152602081905260409020546109d7906105f7565b565b6008546001600160a01b03163314610a1f5760405162461bcd60e51b81526020600482015260096024820152682174696d656c6f636b60b81b6044820152606401610473565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6060600480546104f490611a6e565b600061058433846105e885604051806060016040528060258152602001611b30602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906112a2565b600061058433848461111f565b6007546001600160a01b03163314610af45760405162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b6044820152606401610473565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6009546005546040516370a0823160e01b81526001600160a01b03610100909204821660048201526000926109b99216906370a082319060240160206040518083038186803b158015610b6857600080fd5b505afa158015610b7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba0919061196d565b6005546040516370a0823160e01b81523060048201526101009091046001600160a01b0316906370a082319060240160206040518083038186803b158015610be757600080fd5b505afa158015610bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1f919061196d565b906114f2565b6000610c2f610b16565b6005546040516370a0823160e01b81523060048201529192506000916101009091046001600160a01b0316906370a082319060240160206040518083038186803b158015610c7c57600080fd5b505afa158015610c90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb4919061196d565b600554909150610cd49061010090046001600160a01b0316333086611551565b6005546040516370a0823160e01b815230600482015260009161010090046001600160a01b0316906370a082319060240160206040518083038186803b158015610d1d57600080fd5b505afa158015610d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d55919061196d565b9050610d6181836114b0565b93506000610d6e60025490565b610d79575083610d93565b610d9084610617610d8960025490565b88906112dc565b90505b610d9d338261158f565b604080514281526020810187905290810182905232907f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e9060600160405180910390a25050505050565b6008546001600160a01b03163314610e2d5760405162461bcd60e51b81526020600482015260096024820152682174696d656c6f636b60b81b6044820152606401610473565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e59610928565b600954600554919250610e7e9161010090046001600160a01b03908116911683610f92565b60095460055460405163b02bf4b960e01b81526001600160a01b03610100909204821660048201526024810184905291169063b02bf4b990604401600060405180830381600087803b158015610ed357600080fd5b505af1158015610ee7573d6000803e3d6000fd5b5050505050565b6005546040516370a0823160e01b81523360048201526109d79161010090046001600160a01b0316906370a082319060240160206040518083038186803b158015610f3857600080fd5b505afa158015610f4c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037f919061196d565b60006109b9610f7e60025490565b610617670de0b6b3a7640000610611610b16565b6040516001600160a01b038316602482015260448101829052610ff590849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611666565b505050565b6001600160a01b03831661105c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610473565b6001600160a01b0382166110bd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610473565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166111835760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610473565b6001600160a01b0382166111e55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610473565b61122281604051806060016040528060268152602001611ae2602691396001600160a01b03861660009081526020819052604090205491906112a2565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461125190826114f2565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611112565b600081848411156112c65760405162461bcd60e51b815260040161047391906119a1565b5060006112d38486611a2b565b95945050505050565b6000826112eb57506000610588565b60006112f78385611a0c565b90508261130485836119ec565b1461135b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610473565b9392505050565b600061135b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611738565b6001600160a01b0382166114045760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610473565b61144181604051806060016040528060228152602001611ac0602291396001600160a01b03851660009081526020819052604090205491906112a2565b6001600160a01b03831660009081526020819052604090205560025461146790826114b0565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b600061135b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506112a2565b6000806114ff83856119d4565b90508381101561135b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610473565b6040516001600160a01b03808516602483015283166044820152606481018290526115899085906323b872dd60e01b90608401610fbe565b50505050565b6001600160a01b0382166115e55760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610473565b6002546115f290826114f2565b6002556001600160a01b03821660009081526020819052604090205461161890826114f2565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016114a4565b60006116bb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166117669092919063ffffffff16565b805190915015610ff557808060200190518101906116d99190611935565b610ff55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610473565b600081836117595760405162461bcd60e51b815260040161047391906119a1565b5060006112d384866119ec565b6060611775848460008561177d565b949350505050565b6060843b6117cd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610473565b600080866001600160a01b031685876040516117e99190611985565b60006040518083038185875af1925050503d8060008114611826576040519150601f19603f3d011682016040523d82523d6000602084013e61182b565b606091505b5091509150811561183f5791506117759050565b80511561184f5780518082602001fd5b8360405162461bcd60e51b815260040161047391906119a1565b80356001600160a01b038116811461188057600080fd5b919050565b600060208284031215611896578081fd5b61135b82611869565b600080604083850312156118b1578081fd5b6118ba83611869565b91506118c860208401611869565b90509250929050565b6000806000606084860312156118e5578081fd5b6118ee84611869565b92506118fc60208501611869565b9150604084013590509250925092565b6000806040838503121561191e578182fd5b61192783611869565b946020939093013593505050565b600060208284031215611946578081fd5b8151801515811461135b578182fd5b600060208284031215611966578081fd5b5035919050565b60006020828403121561197e578081fd5b5051919050565b60008251611997818460208701611a42565b9190910192915050565b60208152600082518060208401526119c0816040850160208701611a42565b601f01601f19169190910160400192915050565b600082198211156119e7576119e7611aa9565b500190565b600082611a0757634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611a2657611a26611aa9565b500290565b600082821015611a3d57611a3d611aa9565b500390565b60005b83811015611a5d578181015183820152602001611a45565b838111156115895750506000910152565b600181811c90821680611a8257607f821691505b60208210811415611aa357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208e19054c978990c1995da69f7d5173466cc7cf3f8b71280580ebb8b745f9e1aa64736f6c63430008040033000000000000000000000000515e252b2b5c22b4b2b6df66c2ebeea871aa4d69000000000000000000000000cb410a689a03e06de0a6247b13c13d14237decc8000000000000000000000000cb410a689a03e06de0a6247b13c13d14237decc80000000000000000000000001c233a46eae1f928c0467a3c75228e26ea9888d4
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101da5760003560e01c806395d89b4111610104578063d33219b4116100a2578063ec1ebd7a11610071578063ec1ebd7a146103f3578063f77c4791146103fb578063f88979451461040e578063fc0c546a1461041757600080fd5b8063d33219b414610397578063d389800f146103aa578063dd62ed3e146103b2578063de5f6268146103eb57600080fd5b8063ab033ea9116100de578063ab033ea914610356578063b69ef8a814610369578063b6b55f2514610371578063bdacb3031461038457600080fd5b806395d89b4114610328578063a457c2d714610330578063a9059cbb1461034357600080fd5b8063395093511161017c5780636ac5db191161014b5780636ac5db19146102db57806370a08231146102e4578063853828b61461030d57806392eefe9b1461031557600080fd5b8063395093511461028257806345dc3dd81461029557806348a0d754146102a85780635aa6e675146102b057600080fd5b806318160ddd116101b857806318160ddd1461023557806323b872dd146102475780632e1a7d4d1461025a578063313ce5671461026d57600080fd5b8063018ee9b7146101df57806306fdde03146101f4578063095ea7b314610212575b600080fd5b6101f26101ed36600461190c565b61042f565b005b6101fc6104e5565b60405161020991906119a1565b60405180910390f35b61022561022036600461190c565b610577565b6040519015158152602001610209565b6002545b604051908152602001610209565b6102256102553660046118d1565b61058e565b6101f2610268366004611955565b6105f7565b60055460405160ff9091168152602001610209565b61022561029036600461190c565b61083e565b6101f26102a3366004611955565b610874565b610239610928565b6007546102c3906001600160a01b031681565b6040516001600160a01b039091168152602001610209565b61023961271081565b6102396102f2366004611885565b6001600160a01b031660009081526020819052604090205490565b6101f26109be565b6101f2610323366004611885565b6109d9565b6101fc610a41565b61022561033e36600461190c565b610a50565b61022561035136600461190c565b610a9f565b6101f2610364366004611885565b610aac565b610239610b16565b6101f261037f366004611955565b610c25565b6101f2610392366004611885565b610de7565b6008546102c3906001600160a01b031681565b6101f2610e4f565b6102396103c036600461189f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6101f2610eee565b610239610f70565b6009546102c3906001600160a01b031681565b61023960065481565b6005546102c39061010090046001600160a01b031681565b6009546001600160a01b0316331461047c5760405162461bcd60e51b815260206004820152600b60248201526a10b1b7b73a3937b63632b960a91b60448201526064015b60405180910390fd5b6005546001600160a01b038381166101009092041614156104c75760405162461bcd60e51b81526020600482015260056024820152643a37b5b2b760d91b6044820152606401610473565b6009546104e1906001600160a01b03848116911683610f92565b5050565b6060600380546104f490611a6e565b80601f016020809104026020016040519081016040528092919081815260200182805461052090611a6e565b801561056d5780601f106105425761010080835404028352916020019161056d565b820191906000526020600020905b81548152906001019060200180831161055057829003601f168201915b5050505050905090565b6000610584338484610ffa565b5060015b92915050565b600061059b84848461111f565b6105ed84336105e885604051806060016040528060288152602001611b08602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906112a2565b610ffa565b5060019392505050565b600061061d61060560025490565b61061784610611610b16565b906112dc565b90611362565b905061062933836113a4565b6005546040516370a0823160e01b815230600482015260009161010090046001600160a01b0316906370a082319060240160206040518083038186803b15801561067257600080fd5b505afa158015610686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106aa919061196d565b9050818110156107da5760006106c083836114b0565b60095460055460405163f3fef3a360e01b81526001600160a01b036101009092048216600482015260248101849052929350169063f3fef3a390604401600060405180830381600087803b15801561071757600080fd5b505af115801561072b573d6000803e3d6000fd5b50506005546040516370a0823160e01b8152306004820152600093506101009091046001600160a01b031691506370a082319060240160206040518083038186803b15801561077957600080fd5b505afa15801561078d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b1919061196d565b905060006107bf82856114b0565b9050828110156107d6576107d384826114f2565b94505b5050505b6005546107f69061010090046001600160a01b03163384610f92565b604080514281526020810184905290810184905232907f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca949060600160405180910390a2505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916105849185906105e890866114f2565b6007546001600160a01b031633146108bc5760405162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b6044820152606401610473565b6127108111156109235760405162461bcd60e51b815260206004820152602c60248201527f6e756d657261746f722063616e6e6f742062652067726561746572207468616e60448201526b103232b737b6b4b730ba37b960a11b6064820152608401610473565b600655565b6006546005546040516370a0823160e01b81523060048201526000926109b99261271092610617929161010090046001600160a01b0316906370a082319060240160206040518083038186803b15801561098157600080fd5b505afa158015610995573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610611919061196d565b905090565b336000908152602081905260409020546109d7906105f7565b565b6008546001600160a01b03163314610a1f5760405162461bcd60e51b81526020600482015260096024820152682174696d656c6f636b60b81b6044820152606401610473565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6060600480546104f490611a6e565b600061058433846105e885604051806060016040528060258152602001611b30602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906112a2565b600061058433848461111f565b6007546001600160a01b03163314610af45760405162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b6044820152606401610473565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6009546005546040516370a0823160e01b81526001600160a01b03610100909204821660048201526000926109b99216906370a082319060240160206040518083038186803b158015610b6857600080fd5b505afa158015610b7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba0919061196d565b6005546040516370a0823160e01b81523060048201526101009091046001600160a01b0316906370a082319060240160206040518083038186803b158015610be757600080fd5b505afa158015610bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1f919061196d565b906114f2565b6000610c2f610b16565b6005546040516370a0823160e01b81523060048201529192506000916101009091046001600160a01b0316906370a082319060240160206040518083038186803b158015610c7c57600080fd5b505afa158015610c90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb4919061196d565b600554909150610cd49061010090046001600160a01b0316333086611551565b6005546040516370a0823160e01b815230600482015260009161010090046001600160a01b0316906370a082319060240160206040518083038186803b158015610d1d57600080fd5b505afa158015610d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d55919061196d565b9050610d6181836114b0565b93506000610d6e60025490565b610d79575083610d93565b610d9084610617610d8960025490565b88906112dc565b90505b610d9d338261158f565b604080514281526020810187905290810182905232907f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e9060600160405180910390a25050505050565b6008546001600160a01b03163314610e2d5760405162461bcd60e51b81526020600482015260096024820152682174696d656c6f636b60b81b6044820152606401610473565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e59610928565b600954600554919250610e7e9161010090046001600160a01b03908116911683610f92565b60095460055460405163b02bf4b960e01b81526001600160a01b03610100909204821660048201526024810184905291169063b02bf4b990604401600060405180830381600087803b158015610ed357600080fd5b505af1158015610ee7573d6000803e3d6000fd5b5050505050565b6005546040516370a0823160e01b81523360048201526109d79161010090046001600160a01b0316906370a082319060240160206040518083038186803b158015610f3857600080fd5b505afa158015610f4c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037f919061196d565b60006109b9610f7e60025490565b610617670de0b6b3a7640000610611610b16565b6040516001600160a01b038316602482015260448101829052610ff590849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611666565b505050565b6001600160a01b03831661105c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610473565b6001600160a01b0382166110bd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610473565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166111835760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610473565b6001600160a01b0382166111e55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610473565b61122281604051806060016040528060268152602001611ae2602691396001600160a01b03861660009081526020819052604090205491906112a2565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461125190826114f2565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611112565b600081848411156112c65760405162461bcd60e51b815260040161047391906119a1565b5060006112d38486611a2b565b95945050505050565b6000826112eb57506000610588565b60006112f78385611a0c565b90508261130485836119ec565b1461135b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610473565b9392505050565b600061135b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611738565b6001600160a01b0382166114045760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610473565b61144181604051806060016040528060228152602001611ac0602291396001600160a01b03851660009081526020819052604090205491906112a2565b6001600160a01b03831660009081526020819052604090205560025461146790826114b0565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b600061135b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506112a2565b6000806114ff83856119d4565b90508381101561135b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610473565b6040516001600160a01b03808516602483015283166044820152606481018290526115899085906323b872dd60e01b90608401610fbe565b50505050565b6001600160a01b0382166115e55760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610473565b6002546115f290826114f2565b6002556001600160a01b03821660009081526020819052604090205461161890826114f2565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016114a4565b60006116bb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166117669092919063ffffffff16565b805190915015610ff557808060200190518101906116d99190611935565b610ff55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610473565b600081836117595760405162461bcd60e51b815260040161047391906119a1565b5060006112d384866119ec565b6060611775848460008561177d565b949350505050565b6060843b6117cd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610473565b600080866001600160a01b031685876040516117e99190611985565b60006040518083038185875af1925050503d8060008114611826576040519150601f19603f3d011682016040523d82523d6000602084013e61182b565b606091505b5091509150811561183f5791506117759050565b80511561184f5780518082602001fd5b8360405162461bcd60e51b815260040161047391906119a1565b80356001600160a01b038116811461188057600080fd5b919050565b600060208284031215611896578081fd5b61135b82611869565b600080604083850312156118b1578081fd5b6118ba83611869565b91506118c860208401611869565b90509250929050565b6000806000606084860312156118e5578081fd5b6118ee84611869565b92506118fc60208501611869565b9150604084013590509250925092565b6000806040838503121561191e578182fd5b61192783611869565b946020939093013593505050565b600060208284031215611946578081fd5b8151801515811461135b578182fd5b600060208284031215611966578081fd5b5035919050565b60006020828403121561197e578081fd5b5051919050565b60008251611997818460208701611a42565b9190910192915050565b60208152600082518060208401526119c0816040850160208701611a42565b601f01601f19169190910160400192915050565b600082198211156119e7576119e7611aa9565b500190565b600082611a0757634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611a2657611a26611aa9565b500290565b600082821015611a3d57611a3d611aa9565b500390565b60005b83811015611a5d578181015183820152602001611a45565b838111156115895750506000910152565b600181811c90821680611a8257607f821691505b60208210811415611aa357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208e19054c978990c1995da69f7d5173466cc7cf3f8b71280580ebb8b745f9e1aa64736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000515e252b2b5c22b4b2b6df66c2ebeea871aa4d69000000000000000000000000cb410a689a03e06de0a6247b13c13d14237decc8000000000000000000000000cb410a689a03e06de0a6247b13c13d14237decc80000000000000000000000001c233a46eae1f928c0467a3c75228e26ea9888d4
-----Decoded View---------------
Arg [0] : _token (address): 0x515e252b2b5c22b4b2b6Df66c2eBeeA871AA4d69
Arg [1] : _governance (address): 0xCb410A689A03E06de0a6247b13C13D14237DecC8
Arg [2] : _timelock (address): 0xCb410A689A03E06de0a6247b13C13D14237DecC8
Arg [3] : _controller (address): 0x1C233a46eAE1F928c0467a3C75228E26Ea9888d4
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000515e252b2b5c22b4b2b6df66c2ebeea871aa4d69
Arg [1] : 000000000000000000000000cb410a689a03e06de0a6247b13c13d14237decc8
Arg [2] : 000000000000000000000000cb410a689a03e06de0a6247b13c13d14237decc8
Arg [3] : 0000000000000000000000001c233a46eae1f928c0467a3c75228e26ea9888d4
Deployed Bytecode Sourcemap
31106:4506:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34359:239;;;;;;:::i;:::-;;:::i;:::-;;18483:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20589:169;;;;;;:::i;:::-;;:::i;:::-;;;3287:14:1;;3280:22;3262:41;;3250:2;3235:18;20589:169:0;3217:92:1;19558:100:0;19638:12;;19558:100;;;9740:25:1;;;9728:2;9713:18;19558:100:0;9695:76:1;21232:321:0;;;;;;:::i;:::-;;:::i;34798:689::-;;;;;;:::i;:::-;;:::i;19410:83::-;19476:9;;19410:83;;19476:9;;;;10242:36:1;;10230:2;10215:18;19410:83:0;10197:87:1;21962:218:0;;;;;;:::i;:::-;;:::i;32169:206::-;;;;;;:::i;:::-;;:::i;32994:125::-;;;:::i;31354:25::-;;;;;-1:-1:-1;;;;;31354:25:0;;;;;;-1:-1:-1;;;;;2419:32:1;;;2401:51;;2389:2;2374:18;31354:25:0;2356:102:1;31310:35:0;;31340:5;31310:35;;19721:119;;;;;;:::i;:::-;-1:-1:-1;;;;;19814:18:0;19787:7;19814:18;;;;;;;;;;;;19721:119;34183:82;;;:::i;32693:149::-;;;;;;:::i;:::-;;:::i;18685:87::-;;;:::i;22683:269::-;;;;;;:::i;:::-;;:::i;20053:175::-;;;;;;:::i;:::-;;:::i;32383:153::-;;;;;;:::i;:::-;;:::i;31956:205::-;;;:::i;33527:648::-;;;;;;:::i;:::-;;:::i;32544:141::-;;;;;;:::i;:::-;;:::i;31386:23::-;;;;;-1:-1:-1;;;;;31386:23:0;;;33127:176;;;:::i;20291:151::-;;;;;;:::i;:::-;-1:-1:-1;;;;;20407:18:0;;;20380:7;20407:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20291:151;33311:86;;;:::i;35495:114::-;;;:::i;31416:25::-;;;;;-1:-1:-1;;;;;31416:25:0;;;31278;;;;;;31250:19;;;;;;;;-1:-1:-1;;;;;31250:19:0;;;34359:239;34451:10;;-1:-1:-1;;;;;34451:10:0;34437;:24;34429:48;;;;-1:-1:-1;;;34429:48:0;;5273:2:1;34429:48:0;;;5255:21:1;5312:2;5292:18;;;5285:30;-1:-1:-1;;;5331:18:1;;;5324:41;5382:18;;34429:48:0;;;;;;;;;34515:5;;-1:-1:-1;;;;;34496:25:0;;;34515:5;;;;;34496:25;;34488:43;;;;-1:-1:-1;;;34488:43:0;;6784:2:1;34488:43:0;;;6766:21:1;6823:1;6803:18;;;6796:29;-1:-1:-1;;;6841:18:1;;;6834:35;6886:18;;34488:43:0;6756:154:1;34488:43:0;34571:10;;34542:48;;-1:-1:-1;;;;;34542:28:0;;;;34571:10;34583:6;34542:28;:48::i;:::-;34359:239;;:::o;18483:83::-;18520:13;18553:5;18546:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18483:83;:::o;20589:169::-;20672:4;20689:39;7211:10;20712:7;20721:6;20689:8;:39::i;:::-;-1:-1:-1;20746:4:0;20589:169;;;;;:::o;21232:321::-;21338:4;21355:36;21365:6;21373:9;21384:6;21355:9;:36::i;:::-;21402:121;21411:6;7211:10;21433:89;21471:6;21433:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21433:19:0;;;;;;:11;:19;;;;;;;;7211:10;21433:33;;;;;;;;;;:37;:89::i;:::-;21402:8;:121::i;:::-;-1:-1:-1;21541:4:0;21232:321;;;;;:::o;34798:689::-;34851:9;34863:43;34892:13;19638:12;;;19558:100;34892:13;34864:22;34878:7;34864:9;:7;:9::i;:::-;:13;;:22::i;:::-;34863:28;;:43::i;:::-;34851:55;;34917:26;34923:10;34935:7;34917:5;:26::i;:::-;34994:5;;:30;;-1:-1:-1;;;34994:30:0;;35018:4;34994:30;;;2401:51:1;34982:9:0;;34994:5;;;-1:-1:-1;;;;;34994:5:0;;:15;;2374:18:1;;34994:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34982:42;;35043:1;35039;:5;35035:334;;;35061:17;35081:8;:1;35087;35081:5;:8::i;:::-;35116:10;;35145:5;;35104:59;;-1:-1:-1;;;35104:59:0;;-1:-1:-1;;;;;35116:10:0;35145:5;;;;;35104:59;;;3017:51:1;3084:18;;;3077:34;;;;;-1:-1:-1;35116:10:0;;35104:32;;2990:18:1;;35104:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35195:5:0;;:30;;-1:-1:-1;;;35195:30:0;;35219:4;35195:30;;;2401:51:1;35178:14:0;;-1:-1:-1;35195:5:0;;;;-1:-1:-1;;;;;35195:5:0;;-1:-1:-1;35195:15:0;;2374:18:1;;35195:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35178:47;-1:-1:-1;35240:13:0;35256;35178:47;35267:1;35256:10;:13::i;:::-;35240:29;;35296:9;35288:5;:17;35284:74;;;35330:12;:1;35336:5;35330;:12::i;:::-;35326:16;;35284:74;35035:334;;;;35381:5;;:33;;:5;;;-1:-1:-1;;;;;35381:5:0;35400:10;35412:1;35381:18;:33::i;:::-;35430:48;;;35450:15;9978:25:1;;10034:2;10019:18;;10012:34;;;10062:18;;;10055:34;;;35439:9:0;;35430:48;;9966:2:1;9951:18;35430:48:0;;;;;;;34798:689;;;:::o;21962:218::-;7211:10;22050:4;22099:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22099:34:0;;;;;;;;;;22050:4;;22067:83;;22090:7;;22099:50;;22138:10;22099:38;:50::i;32169:206::-;32241:10;;-1:-1:-1;;;;;32241:10:0;32227;:24;32219:48;;;;-1:-1:-1;;;32219:48:0;;4530:2:1;32219:48:0;;;4512:21:1;4569:2;4549:18;;;4542:30;-1:-1:-1;;;4588:18:1;;;4581:41;4639:18;;32219:48:0;4502:161:1;32219:48:0;31340:5;32286:4;:11;;32278:68;;;;-1:-1:-1;;;32278:68:0;;5613:2:1;32278:68:0;;;5595:21:1;5652:2;5632:18;;;5625:30;5691:34;5671:18;;;5664:62;-1:-1:-1;;;5742:18:1;;;5735:42;5794:19;;32278:68:0;5585:234:1;32278:68:0;32357:3;:10;32169:206::o;32994:125::-;33098:3;;33063:5;;:30;;-1:-1:-1;;;33063:30:0;;33087:4;33063:30;;;2401:51:1;33036:7:0;;33063:48;;31340:5;;33063:39;;33098:3;33063:5;;;-1:-1:-1;;;;;33063:5:0;;:15;;2374:18:1;;33063:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:48::-;33056:55;;32994:125;:::o;34183:82::-;34245:10;19787:7;19814:18;;;;;;;;;;;34226:31;;34798:689;:::i;34226:31::-;34183:82::o;32693:149::-;32777:8;;-1:-1:-1;;;;;32777:8:0;32763:10;:22;32755:44;;;;-1:-1:-1;;;32755:44:0;;9099:2:1;32755:44:0;;;9081:21:1;9138:1;9118:18;;;9111:29;-1:-1:-1;;;9156:18:1;;;9149:39;9205:18;;32755:44:0;9071:158:1;32755:44:0;32810:10;:24;;-1:-1:-1;;;;;;32810:24:0;-1:-1:-1;;;;;32810:24:0;;;;;;;;;;32693:149::o;18685:87::-;18724:13;18757:7;18750:14;;;;;:::i;22683:269::-;22776:4;22793:129;7211:10;22816:7;22825:96;22864:15;22825:96;;;;;;;;;;;;;;;;;7211:10;22825:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22825:34:0;;;;;;;;;;;;:38;:96::i;20053:175::-;20139:4;20156:42;7211:10;20180:9;20191:6;20156:9;:42::i;32383:153::-;32467:10;;-1:-1:-1;;;;;32467:10:0;32453;:24;32445:48;;;;-1:-1:-1;;;32445:48:0;;4530:2:1;32445:48:0;;;4512:21:1;4569:2;4549:18;;;4542:30;-1:-1:-1;;;4588:18:1;;;4581:41;4639:18;;32445:48:0;4502:161:1;32445:48:0;32504:10;:24;;-1:-1:-1;;;;;;32504:24:0;-1:-1:-1;;;;;32504:24:0;;;;;;;;;;32383:153::o;31956:205::-;32101:10;;32131:5;;32089:49;;-1:-1:-1;;;32089:49:0;;-1:-1:-1;;;;;32101:10:0;32131:5;;;;;32089:49;;;2401:51:1;-1:-1:-1;;32036:117:0;;32101:10;;32089:33;;2374:18:1;;32089:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32036:5;;:30;;-1:-1:-1;;;32036:30:0;;32060:4;32036:30;;;2401:51:1;32036:5:0;;;;-1:-1:-1;;;;;32036:5:0;;:15;;2374:18:1;;32036:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:34;;:117::i;33527:648::-;33579:13;33595:9;:7;:9::i;:::-;33633:5;;:30;;-1:-1:-1;;;33633:30:0;;33657:4;33633:30;;;2401:51:1;33579:25:0;;-1:-1:-1;33615:15:0;;33633:5;;;;-1:-1:-1;;;;;33633:5:0;;:15;;2374:18:1;;33633:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33674:5;;33615:48;;-1:-1:-1;33674:58:0;;:5;;;-1:-1:-1;;;;;33674:5:0;33697:10;33717:4;33724:7;33674:22;:58::i;:::-;33760:5;;:30;;-1:-1:-1;;;33760:30:0;;33784:4;33760:30;;;2401:51:1;33743:14:0;;33760:5;;;-1:-1:-1;;;;;33760:5:0;;:15;;2374:18:1;;33760:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33743:47;-1:-1:-1;33811:19:0;33743:47;33822:7;33811:10;:19::i;:::-;33801:29;;33885:14;33918:13;19638:12;;;19558:100;33918:13;33914:148;;-1:-1:-1;33962:7:0;33914:148;;;34011:39;34044:5;34012:26;34024:13;19638:12;;;19558:100;34024:13;34012:7;;:11;:26::i;34011:39::-;34002:48;;33914:148;34072:25;34078:10;34090:6;34072:5;:25::i;:::-;34115:51;;;34134:15;9978:25:1;;10034:2;10019:18;;10012:34;;;10062:18;;;10055:34;;;34123:9:0;;34115:51;;9966:2:1;9951:18;34115:51:0;;;;;;;33527:648;;;;;:::o;32544:141::-;32624:8;;-1:-1:-1;;;;;32624:8:0;32610:10;:22;32602:44;;;;-1:-1:-1;;;32602:44:0;;9099:2:1;32602:44:0;;;9081:21:1;9138:1;9118:18;;;9111:29;-1:-1:-1;;;9156:18:1;;;9149:39;9205:18;;32602:44:0;9071:158:1;32602:44:0;32657:8;:20;;-1:-1:-1;;;;;;32657:20:0;-1:-1:-1;;;;;32657:20:0;;;;;;;;;;32544:141::o;33127:176::-;33161:12;33176:11;:9;:11::i;:::-;33217:10;;33198:5;;33161:26;;-1:-1:-1;33198:36:0;;33217:10;33198:5;;-1:-1:-1;;;;;33198:5:0;;;;33217:10;33161:26;33198:18;:36::i;:::-;33257:10;;33282:5;;33245:50;;-1:-1:-1;;;33245:50:0;;-1:-1:-1;;;;;33257:10:0;33282:5;;;;;33245:50;;;3017:51:1;3084:18;;;3077:34;;;33257:10:0;;;33245:28;;2990:18:1;;33245:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33127:176;:::o;33311:86::-;33361:5;;:27;;-1:-1:-1;;;33361:27:0;;33377:10;33361:27;;;2401:51:1;33353:36:0;;33361:5;;;-1:-1:-1;;;;;33361:5:0;;:15;;2374:18:1;;33361:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;35495:114::-;35536:7;35563:38;35587:13;19638:12;;;19558:100;35587:13;35563:19;35577:4;35563:9;:7;:9::i;27857:177::-;27967:58;;-1:-1:-1;;;;;3035:32:1;;27967:58:0;;;3017:51:1;3084:18;;;3077:34;;;27940:86:0;;27960:5;;-1:-1:-1;;;27990:23:0;2990:18:1;;27967:58:0;;;;-1:-1:-1;;27967:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;27967:58:0;-1:-1:-1;;;;;;27967:58:0;;;;;;;;;;27940:19;:86::i;:::-;27857:177;;;:::o;25828:346::-;-1:-1:-1;;;;;25930:19:0;;25922:68;;;;-1:-1:-1;;;25922:68:0;;7925:2:1;25922:68:0;;;7907:21:1;7964:2;7944:18;;;7937:30;8003:34;7983:18;;;7976:62;-1:-1:-1;;;8054:18:1;;;8047:34;8098:19;;25922:68:0;7897:226:1;25922:68:0;-1:-1:-1;;;;;26009:21:0;;26001:68;;;;-1:-1:-1;;;26001:68:0;;4870:2:1;26001:68:0;;;4852:21:1;4909:2;4889:18;;;4882:30;4948:34;4928:18;;;4921:62;-1:-1:-1;;;4999:18:1;;;4992:32;5041:19;;26001:68:0;4842:224:1;26001:68:0;-1:-1:-1;;;;;26082:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;26134:32;;9740:25:1;;;26134:32:0;;9713:18:1;26134:32:0;;;;;;;;25828:346;;;:::o;23442:539::-;-1:-1:-1;;;;;23548:20:0;;23540:70;;;;-1:-1:-1;;;23540:70:0;;7519:2:1;23540:70:0;;;7501:21:1;7558:2;7538:18;;;7531:30;7597:34;7577:18;;;7570:62;-1:-1:-1;;;7648:18:1;;;7641:35;7693:19;;23540:70:0;7491:227:1;23540:70:0;-1:-1:-1;;;;;23629:23:0;;23621:71;;;;-1:-1:-1;;;23621:71:0;;4126:2:1;23621:71:0;;;4108:21:1;4165:2;4145:18;;;4138:30;4204:34;4184:18;;;4177:62;-1:-1:-1;;;4255:18:1;;;4248:33;4298:19;;23621:71:0;4098:225:1;23621:71:0;23785;23807:6;23785:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23785:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;23765:17:0;;;:9;:17;;;;;;;;;;;:91;;;;23890:20;;;;;;;:32;;23915:6;23890:24;:32::i;:::-;-1:-1:-1;;;;;23867:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;23938:35;9740:25:1;;;23867:20:0;;23938:35;;;;;;9713:18:1;23938:35:0;9695:76:1;2946:192:0;3032:7;3068:12;3060:6;;;;3052:29;;;;-1:-1:-1;;;3052:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3092:9:0;3104:5;3108:1;3104;:5;:::i;:::-;3092:17;2946:192;-1:-1:-1;;;;;2946:192:0:o;3397:471::-;3455:7;3700:6;3696:47;;-1:-1:-1;3730:1:0;3723:8;;3696:47;3755:9;3767:5;3771:1;3767;:5;:::i;:::-;3755:17;-1:-1:-1;3800:1:0;3791:5;3795:1;3755:17;3791:5;:::i;:::-;:10;3783:56;;;;-1:-1:-1;;;3783:56:0;;6382:2:1;3783:56:0;;;6364:21:1;6421:2;6401:18;;;6394:30;6460:34;6440:18;;;6433:62;-1:-1:-1;;;6511:18:1;;;6504:31;6552:19;;3783:56:0;6354:223:1;3783:56:0;3859:1;3397:471;-1:-1:-1;;;3397:471:0:o;4344:132::-;4402:7;4429:39;4433:1;4436;4429:39;;;;;;;;;;;;;;;;;:3;:39::i;24972:418::-;-1:-1:-1;;;;;25056:21:0;;25048:67;;;;-1:-1:-1;;;25048:67:0;;7117:2:1;25048:67:0;;;7099:21:1;7156:2;7136:18;;;7129:30;7195:34;7175:18;;;7168:62;-1:-1:-1;;;7246:18:1;;;7239:31;7287:19;;25048:67:0;7089:223:1;25048:67:0;25211:68;25234:6;25211:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25211:18:0;;:9;:18;;;;;;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;25190:18:0;;:9;:18;;;;;;;;;;:89;25305:12;;:24;;25322:6;25305:16;:24::i;:::-;25290:12;:39;25345:37;;9740:25:1;;;25371:1:0;;-1:-1:-1;;;;;25345:37:0;;;;;9728:2:1;9713:18;25345:37:0;;;;;;;;24972:418;;:::o;2507:136::-;2565:7;2592:43;2596:1;2599;2592:43;;;;;;;;;;;;;;;;;:3;:43::i;2043:181::-;2101:7;;2133:5;2137:1;2133;:5;:::i;:::-;2121:17;;2162:1;2157;:6;;2149:46;;;;-1:-1:-1;;;2149:46:0;;6026:2:1;2149:46:0;;;6008:21:1;6065:2;6045:18;;;6038:30;6104:29;6084:18;;;6077:57;6151:18;;2149:46:0;5998:177:1;28042:205:0;28170:68;;-1:-1:-1;;;;;2721:15:1;;;28170:68:0;;;2703:34:1;2773:15;;2753:18;;;2746:43;2805:18;;;2798:34;;;28143:96:0;;28163:5;;-1:-1:-1;;;28193:27:0;2638:18:1;;28170:68:0;2620:218:1;28143:96:0;28042:205;;;;:::o;24262:378::-;-1:-1:-1;;;;;24346:21:0;;24338:65;;;;-1:-1:-1;;;24338:65:0;;9436:2:1;24338:65:0;;;9418:21:1;9475:2;9455:18;;;9448:30;9514:33;9494:18;;;9487:61;9565:18;;24338:65:0;9408:181:1;24338:65:0;24493:12;;:24;;24510:6;24493:16;:24::i;:::-;24478:12;:39;-1:-1:-1;;;;;24549:18:0;;:9;:18;;;;;;;;;;;:30;;24572:6;24549:22;:30::i;:::-;-1:-1:-1;;;;;24528:18:0;;:9;:18;;;;;;;;;;;:51;;;;24595:37;;9740:25:1;;;24528:18:0;;:9;;24595:37;;9713:18:1;24595:37:0;9695:76:1;30162:761:0;30586:23;30612:69;30640:4;30612:69;;;;;;;;;;;;;;;;;30620:5;-1:-1:-1;;;;;30612:27:0;;;:69;;;;;:::i;:::-;30696:17;;30586:95;;-1:-1:-1;30696:21:0;30692:224;;30838:10;30827:30;;;;;;;;;;;;:::i;:::-;30819:85;;;;-1:-1:-1;;;30819:85:0;;8688:2:1;30819:85:0;;;8670:21:1;8727:2;8707:18;;;8700:30;8766:34;8746:18;;;8739:62;-1:-1:-1;;;8817:18:1;;;8810:40;8867:19;;30819:85:0;8660:232:1;4972:278:0;5058:7;5093:12;5086:5;5078:28;;;;-1:-1:-1;;;5078:28:0;;;;;;;;:::i;:::-;-1:-1:-1;5117:9:0;5129:5;5133:1;5129;:5;:::i;13986:196::-;14089:12;14121:53;14144:6;14152:4;14158:1;14161:12;14121:22;:53::i;:::-;14114:60;13986:196;-1:-1:-1;;;;13986:196:0:o;15363:979::-;15493:12;11435:20;;15518:60;;;;-1:-1:-1;;;15518:60:0;;8330:2:1;15518:60:0;;;8312:21:1;8369:2;8349:18;;;8342:30;8408:31;8388:18;;;8381:59;8457:18;;15518:60:0;8302:179:1;15518:60:0;15652:12;15666:23;15693:6;-1:-1:-1;;;;;15693:11:0;15713:8;15724:4;15693:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15651:78;;;;15744:7;15740:595;;;15775:10;-1:-1:-1;15768:17:0;;-1:-1:-1;15768:17:0;15740:595;15889:17;;:21;15885:439;;16152:10;16146:17;16213:15;16200:10;16196:2;16192:19;16185:44;16100:148;16295:12;16288:20;;-1:-1:-1;;;16288:20:0;;;;;;;;:::i;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;111:2;63:124;;;:::o;192:196::-;251:6;304:2;292:9;283:7;279:23;275:32;272:2;;;325:6;317;310:22;272:2;353:29;372:9;353:29;:::i;393:270::-;461:6;469;522:2;510:9;501:7;497:23;493:32;490:2;;;543:6;535;528:22;490:2;571:29;590:9;571:29;:::i;:::-;561:39;;619:38;653:2;642:9;638:18;619:38;:::i;:::-;609:48;;480:183;;;;;:::o;668:338::-;745:6;753;761;814:2;802:9;793:7;789:23;785:32;782:2;;;835:6;827;820:22;782:2;863:29;882:9;863:29;:::i;:::-;853:39;;911:38;945:2;934:9;930:18;911:38;:::i;:::-;901:48;;996:2;985:9;981:18;968:32;958:42;;772:234;;;;;:::o;1011:264::-;1079:6;1087;1140:2;1128:9;1119:7;1115:23;1111:32;1108:2;;;1161:6;1153;1146:22;1108:2;1189:29;1208:9;1189:29;:::i;:::-;1179:39;1265:2;1250:18;;;;1237:32;;-1:-1:-1;;;1098:177:1:o;1280:297::-;1347:6;1400:2;1388:9;1379:7;1375:23;1371:32;1368:2;;;1421:6;1413;1406:22;1368:2;1458:9;1452:16;1511:5;1504:13;1497:21;1490:5;1487:32;1477:2;;1538:6;1530;1523:22;1582:190;1641:6;1694:2;1682:9;1673:7;1669:23;1665:32;1662:2;;;1715:6;1707;1700:22;1662:2;-1:-1:-1;1743:23:1;;1652:120;-1:-1:-1;1652:120:1:o;1777:194::-;1847:6;1900:2;1888:9;1879:7;1875:23;1871:32;1868:2;;;1921:6;1913;1906:22;1868:2;-1:-1:-1;1949:16:1;;1858:113;-1:-1:-1;1858:113:1:o;1976:274::-;2105:3;2143:6;2137:13;2159:53;2205:6;2200:3;2193:4;2185:6;2181:17;2159:53;:::i;:::-;2228:16;;;;;2113:137;-1:-1:-1;;2113:137:1:o;3536:383::-;3685:2;3674:9;3667:21;3648:4;3717:6;3711:13;3760:6;3755:2;3744:9;3740:18;3733:34;3776:66;3835:6;3830:2;3819:9;3815:18;3810:2;3802:6;3798:15;3776:66;:::i;:::-;3903:2;3882:15;-1:-1:-1;;3878:29:1;3863:45;;;;3910:2;3859:54;;3657:262;-1:-1:-1;;3657:262:1:o;10289:128::-;10329:3;10360:1;10356:6;10353:1;10350:13;10347:2;;;10366:18;;:::i;:::-;-1:-1:-1;10402:9:1;;10337:80::o;10422:217::-;10462:1;10488;10478:2;;-1:-1:-1;;;10513:31:1;;10567:4;10564:1;10557:15;10595:4;10520:1;10585:15;10478:2;-1:-1:-1;10624:9:1;;10468:171::o;10644:168::-;10684:7;10750:1;10746;10742:6;10738:14;10735:1;10732:21;10727:1;10720:9;10713:17;10709:45;10706:2;;;10757:18;;:::i;:::-;-1:-1:-1;10797:9:1;;10696:116::o;10817:125::-;10857:4;10885:1;10882;10879:8;10876:2;;;10890:18;;:::i;:::-;-1:-1:-1;10927:9:1;;10866:76::o;10947:258::-;11019:1;11029:113;11043:6;11040:1;11037:13;11029:113;;;11119:11;;;11113:18;11100:11;;;11093:39;11065:2;11058:10;11029:113;;;11160:6;11157:1;11154:13;11151:2;;;-1:-1:-1;;11195:1:1;11177:16;;11170:27;11000:205::o;11210:380::-;11289:1;11285:12;;;;11332;;;11353:2;;11407:4;11399:6;11395:17;11385:27;;11353:2;11460;11452:6;11449:14;11429:18;11426:38;11423:2;;;11506:10;11501:3;11497:20;11494:1;11487:31;11541:4;11538:1;11531:15;11569:4;11566:1;11559:15;11423:2;;11265:325;;;:::o;11595:127::-;11656:10;11651:3;11647:20;11644:1;11637:31;11687:4;11684:1;11677:15;11711:4;11708:1;11701:15
Swarm Source
ipfs://8e19054c978990c1995da69f7d5173466cc7cf3f8b71280580ebb8b745f9e1aa
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.