Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 187 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 11456673 | 1915 days ago | IN | 0 ETH | 0.00164656 | ||||
| Approve | 11456672 | 1915 days ago | IN | 0 ETH | 0.00096188 | ||||
| Withdraw All | 11197062 | 1955 days ago | IN | 0 ETH | 0.00598251 | ||||
| Deposit All | 11197016 | 1955 days ago | IN | 0 ETH | 0.00569236 | ||||
| Withdraw All | 11197002 | 1955 days ago | IN | 0 ETH | 0.00581633 | ||||
| Approve | 11196983 | 1955 days ago | IN | 0 ETH | 0.00150592 | ||||
| Deposit All | 11196979 | 1955 days ago | IN | 0 ETH | 0.00552972 | ||||
| Withdraw All | 11183664 | 1957 days ago | IN | 0 ETH | 0.00714578 | ||||
| Withdraw All | 11179782 | 1957 days ago | IN | 0 ETH | 0.00548397 | ||||
| Deposit All | 11179758 | 1957 days ago | IN | 0 ETH | 0.00487208 | ||||
| Withdraw All | 11178878 | 1957 days ago | IN | 0 ETH | 0.00907086 | ||||
| Withdraw | 11176161 | 1958 days ago | IN | 0 ETH | 0.00595868 | ||||
| Deposit | 11175879 | 1958 days ago | IN | 0 ETH | 0.00524944 | ||||
| Withdraw All | 11173138 | 1958 days ago | IN | 0 ETH | 0.00382216 | ||||
| Withdraw All | 11171495 | 1958 days ago | IN | 0 ETH | 0.00362834 | ||||
| Deposit | 11171172 | 1959 days ago | IN | 0 ETH | 0.00381748 | ||||
| Set Governance | 11161740 | 1960 days ago | IN | 0 ETH | 0.00088257 | ||||
| Earn | 11161677 | 1960 days ago | IN | 0 ETH | 0.0018352 | ||||
| Set Min | 11161669 | 1960 days ago | IN | 0 ETH | 0.00039657 | ||||
| Set Governance | 11161607 | 1960 days ago | IN | 0 ETH | 0.00085813 | ||||
| Withdraw All | 11158286 | 1961 days ago | IN | 0 ETH | 0.01030136 | ||||
| Withdraw All | 11155642 | 1961 days ago | IN | 0 ETH | 0.01196287 | ||||
| Approve | 11155463 | 1961 days ago | IN | 0 ETH | 0.00252464 | ||||
| Deposit All | 11155455 | 1961 days ago | IN | 0 ETH | 0.01012371 | ||||
| Withdraw All | 11155313 | 1961 days ago | IN | 0 ETH | 0.0417767 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Vault
Compiler Version
v0.5.16+commit.9c3226ce
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-09-24
*/
// File: @openzeppelin/contracts/math/SafeMath.sol
pragma solidity ^0.5.0;
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*
* _Available since v2.4.0._
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*
* _Available since v2.4.0._
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
// Solidity only automatically asserts when dividing by 0
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*
* _Available since v2.4.0._
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
// File: @openzeppelin/contracts/GSN/Context.sol
pragma solidity ^0.5.0;
/*
* @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.
*/
contract Context {
// Empty internal constructor, to prevent people from mistakenly deploying
// an instance of this contract, which should be used via inheritance.
constructor () internal { }
// solhint-disable-previous-line no-empty-blocks
function _msgSender() internal view returns (address payable) {
return msg.sender;
}
function _msgData() internal view returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
pragma solidity ^0.5.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP. Does not include
* the optional functions; to access them see {ERC20Detailed}.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
// File: @openzeppelin/contracts/token/ERC20/ERC20.sol
pragma solidity ^0.5.0;
/**
* @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 {ERC20Mintable}.
*
* 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;
mapping (address => uint256) private _balances;
mapping (address => mapping (address => uint256)) private _allowances;
uint256 private _totalSupply;
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view 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 returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public 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 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 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 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 {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
_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 {
require(account != address(0), "ERC20: mint to the zero address");
_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 {
require(account != address(0), "ERC20: burn from the zero address");
_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 is 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 {
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 Destroys `amount` tokens from `account`.`amount` is then deducted
* from the caller's allowance.
*
* See {_burn} and {_approve}.
*/
function _burnFrom(address account, uint256 amount) internal {
_burn(account, amount);
_approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "ERC20: burn amount exceeds allowance"));
}
}
// File: @openzeppelin/contracts/token/ERC20/ERC20Detailed.sol
pragma solidity ^0.5.0;
/**
* @dev Optional functions from the ERC20 standard.
*/
contract ERC20Detailed is IERC20 {
string private _name;
string private _symbol;
uint8 private _decimals;
/**
* @dev Sets the values for `name`, `symbol`, and `decimals`. All three of
* these values are immutable: they can only be set once during
* construction.
*/
constructor (string memory name, string memory symbol, uint8 decimals) public {
_name = name;
_symbol = symbol;
_decimals = decimals;
}
/**
* @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.
*
* 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;
}
}
// File: @openzeppelin/contracts/utils/Address.sol
pragma solidity ^0.5.5;
/**
* @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) {
// According to EIP-1052, 0x0 is the value returned for not-yet created accounts
// and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
// for accounts without code, i.e. `keccak256('')`
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
// solhint-disable-next-line no-inline-assembly
assembly { codehash := extcodehash(account) }
return (codehash != accountHash && codehash != 0x0);
}
/**
* @dev Converts an `address` into `address payable`. Note that this is
* simply a type cast: the actual underlying value is not changed.
*
* _Available since v2.4.0._
*/
function toPayable(address account) internal pure returns (address payable) {
return address(uint160(account));
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*
* _Available since v2.4.0._
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-call-value
(bool success, ) = recipient.call.value(amount)("");
require(success, "Address: unable to send value, recipient may have reverted");
}
}
// File: @openzeppelin/contracts/token/ERC20/SafeERC20.sol
pragma solidity ^0.5.0;
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using SafeMath for uint256;
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
function safeApprove(IERC20 token, address spender, uint256 value) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
// solhint-disable-next-line max-line-length
require((value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).add(value);
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves.
// A Solidity high level call has three parts:
// 1. The target address is checked to verify it contains contract code
// 2. The call itself is made, and success asserted
// 3. The return value is decoded, which in turn checks the size of the returned data.
// solhint-disable-next-line max-line-length
require(address(token).isContract(), "SafeERC20: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = address(token).call(data);
require(success, "SafeERC20: low-level call failed");
if (returndata.length > 0) { // Return data is optional
// solhint-disable-next-line max-line-length
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
// File: contracts/Vault.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0;
interface VaultController {
function withdraw(address, uint) external;
function balanceOf(address) external view returns (uint);
function earn(address, uint) external;
function rewards() external view returns (address);
}
contract Vault is ERC20, ERC20Detailed {
using Address for address;
using SafeERC20 for IERC20;
using SafeMath for uint256;
IERC20 public token;
uint public min = 9500;
uint public constant max = 10000;
uint public withdrawalFee = 50;
uint constant public withdrawalMax = 10000;
address public governance;
address public controller;
constructor (address _token, address _controller) public ERC20Detailed(
string(abi.encodePacked("plouto ", ERC20Detailed(_token).name())),
string(abi.encodePacked("p", ERC20Detailed(_token).symbol())),
ERC20Detailed(_token).decimals()
) {
token = IERC20(_token);
governance = tx.origin;
controller = _controller;
}
function balance() public view returns (uint) {
return token.balanceOf(address(this)).add(VaultController(controller).balanceOf(address(token)));
}
function setMin(uint _min) external {
require(msg.sender == governance, "!governance");
min = _min;
}
function setWithdrawalFee(uint _withdrawalFee) external {
require(msg.sender == governance, "!governance");
withdrawalFee = _withdrawalFee;
}
function setGovernance(address _governance) public {
require(msg.sender == governance, "!governance");
governance = _governance;
}
function setController(address _controller) public {
require(msg.sender == governance, "!governance");
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 (uint) {
return token.balanceOf(address(this)).mul(min).div(max);
}
function earn() public {
uint _bal = available();
token.safeTransfer(controller, _bal);
VaultController(controller).earn(address(token), _bal);
}
function depositAll() external {
deposit(token.balanceOf(msg.sender));
}
function deposit(uint _amount) public {
uint _pool = balance();
uint _before = token.balanceOf(address(this));
token.safeTransferFrom(msg.sender, address(this), _amount);
uint _after = token.balanceOf(address(this));
_amount = _after.sub(_before); // Additional check for deflationary tokens
uint shares = 0;
if (totalSupply() == 0) {
shares = _amount;
} else {
shares = (_amount.mul(totalSupply())).div(_pool);
}
_mint(msg.sender, shares);
}
function withdrawAll() external {
withdraw(balanceOf(msg.sender));
}
// No rebalance implementation for lower fees and faster swaps
function withdraw(uint _shares) public {
uint r = (balance().mul(_shares)).div(totalSupply());
_burn(msg.sender, _shares);
// Check balance
uint b = token.balanceOf(address(this));
if (b < r) {
uint _withdraw = r.sub(b);
VaultController(controller).withdraw(address(token), _withdraw);
uint _after = token.balanceOf(address(this));
uint _diff = _after.sub(b);
if (_diff < _withdraw) {
r = b.add(_diff);
}
}
uint _fee = r.mul(withdrawalFee).div(withdrawalMax);
token.safeTransfer(VaultController(controller).rewards(), _fee);
token.safeTransfer(msg.sender, r.sub(_fee));
}
function getPricePerFullShare() public view returns (uint) {
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":"_controller","type":"address"}],"payable":false,"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":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"available","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"controller","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"depositAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"earn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getPricePerFullShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"max","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"min","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_controller","type":"address"}],"name":"setController","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_governance","type":"address"}],"name":"setGovernance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_min","type":"uint256"}],"name":"setMin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_withdrawalFee","type":"uint256"}],"name":"setWithdrawalFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"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"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdrawAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"withdrawalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"withdrawalMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]Contract Creation Code
608060405261251c60065560326007553480156200001c57600080fd5b50604051620036e5380380620036e5833981810160405260408110156200004257600080fd5b8101908080519060200190929190805190602001909291905050508173ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b158015620000a457600080fd5b505afa158015620000b9573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015620000e457600080fd5b81019080805160405193929190846401000000008211156200010557600080fd5b838201915060208201858111156200011c57600080fd5b82518660018202830111640100000000821117156200013a57600080fd5b8083526020830192505050908051906020019080838360005b838110156200017057808201518184015260208101905062000153565b50505050905090810190601f1680156200019e5780820380516001836020036101000a031916815260200191505b5060405250505060405160200180807f706c6f75746f200000000000000000000000000000000000000000000000000081525060070182805190602001908083835b60208310620002055780518252602082019150602081019050602083039250620001e0565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528273ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156200028057600080fd5b505afa15801562000295573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015620002c057600080fd5b8101908080516040519392919084640100000000821115620002e157600080fd5b83820191506020820185811115620002f857600080fd5b82518660018202830111640100000000821117156200031657600080fd5b8083526020830192505050908051906020019080838360005b838110156200034c5780820151818401526020810190506200032f565b50505050905090810190601f1680156200037a5780820380516001836020036101000a031916815260200191505b5060405250505060405160200180807f700000000000000000000000000000000000000000000000000000000000000081525060010182805190602001908083835b60208310620003e15780518252602082019150602081019050602083039250620003bc565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200045c57600080fd5b505afa15801562000471573d6000803e3d6000fd5b505050506040513d60208110156200048857600080fd5b81019080805190602001909291905050508260039080519060200190620004b1929190620005b4565b508160049080519060200190620004ca929190620005b4565b5080600560006101000a81548160ff021916908360ff16021790555050505081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555032600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000663565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620005f757805160ff191683800117855562000628565b8280016001018555821562000628579182015b82811115620006275782518255916020019190600101906200060a565b5b5090506200063791906200063b565b5090565b6200066091905b808211156200065c57600081600090555060010162000642565b5090565b90565b61307280620006736000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806392eefe9b11610104578063b6b55f25116100a2578063de5f626811610071578063de5f626814610867578063f77c479114610871578063f8897945146108bb578063fc0c546a146108d9576101da565b8063b6b55f2514610799578063d389800f146107c7578063d5c1ff73146107d1578063dd62ed3e146107ef576101da565b8063a9059cbb116100de578063a9059cbb146106a3578063ab033ea914610709578063ac1e50251461074d578063b69ef8a81461077b576101da565b806392eefe9b1461057657806395d89b41146105ba578063a457c2d71461063d576101da565b806345dc3dd81161017c57806370a082311161014b57806370a08231146104d857806377c7b8fc14610530578063853828b61461054e5780638bc7e8c414610558576101da565b806345dc3dd81461042457806348a0d754146104525780635aa6e675146104705780636ac5db19146104ba576101da565b806323b872dd116101b857806323b872dd146102e65780632e1a7d4d1461036c578063313ce5671461039a57806339509351146103be576101da565b806306fdde03146101df578063095ea7b31461026257806318160ddd146102c8575b600080fd5b6101e7610923565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561022757808201518184015260208101905061020c565b50505050905090810190601f1680156102545780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102ae6004803603604081101561027857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506109c5565b604051808215151515815260200191505060405180910390f35b6102d06109e3565b6040518082815260200191505060405180910390f35b610352600480360360608110156102fc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506109ed565b604051808215151515815260200191505060405180910390f35b6103986004803603602081101561038257600080fd5b8101908080359060200190929190505050610ac6565b005b6103a2610f7f565b604051808260ff1660ff16815260200191505060405180910390f35b61040a600480360360408110156103d457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f96565b604051808215151515815260200191505060405180910390f35b6104506004803603602081101561043a57600080fd5b8101908080359060200190929190505050611049565b005b61045a611116565b6040518082815260200191505060405180910390f35b61047861121f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104c2611245565b6040518082815260200191505060405180910390f35b61051a600480360360208110156104ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061124b565b6040518082815260200191505060405180910390f35b610538611293565b6040518082815260200191505060405180910390f35b6105566112d5565b005b6105606112e8565b6040518082815260200191505060405180910390f35b6105b86004803603602081101561058c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ee565b005b6105c26113f5565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106025780820151818401526020810190506105e7565b50505050905090810190601f16801561062f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106896004803603604081101561065357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611497565b604051808215151515815260200191505060405180910390f35b6106ef600480360360408110156106b957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611564565b604051808215151515815260200191505060405180910390f35b61074b6004803603602081101561071f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611582565b005b6107796004803603602081101561076357600080fd5b8101908080359060200190929190505050611689565b005b610783611756565b6040518082815260200191505060405180910390f35b6107c5600480360360208110156107af57600080fd5b8101908080359060200190929190505050611944565b005b6107cf611bcd565b005b6107d9611d2e565b6040518082815260200191505060405180910390f35b6108516004803603604081101561080557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d34565b6040518082815260200191505060405180910390f35b61086f611dbb565b005b610879611e9f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108c3611ec5565b6040518082815260200191505060405180910390f35b6108e1611ecb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b606060038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109bb5780601f10610990576101008083540402835291602001916109bb565b820191906000526020600020905b81548152906001019060200180831161099e57829003601f168201915b5050505050905090565b60006109d96109d2611ef1565b8484611ef9565b6001905092915050565b6000600254905090565b60006109fa8484846120f0565b610abb84610a06611ef1565b610ab685604051806060016040528060288152602001612f5d60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a6c611ef1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123a69092919063ffffffff16565b611ef9565b600190509392505050565b6000610afb610ad36109e3565b610aed84610adf611756565b61246690919063ffffffff16565b6124ec90919063ffffffff16565b9050610b073383612536565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610ba857600080fd5b505afa158015610bbc573d6000803e3d6000fd5b505050506040513d6020811015610bd257600080fd5b8101908080519060200190929190505050905081811015610dfe576000610c0282846126ee90919063ffffffff16565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f3fef3a3600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015610ccf57600080fd5b505af1158015610ce3573d6000803e3d6000fd5b505050506000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610d8857600080fd5b505afa158015610d9c573d6000803e3d6000fd5b505050506040513d6020811015610db257600080fd5b810190808051906020019092919050505090506000610dda84836126ee90919063ffffffff16565b905082811015610dfa57610df7818561273890919063ffffffff16565b94505b5050505b6000610e29612710610e1b6007548661246690919063ffffffff16565b6124ec90919063ffffffff16565b9050610f1a600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639ec5a8946040518163ffffffff1660e01b815260040160206040518083038186803b158015610e9657600080fd5b505afa158015610eaa573d6000803e3d6000fd5b505050506040513d6020811015610ec057600080fd5b810190808051906020019092919050505082600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166127c09092919063ffffffff16565b610f7933610f3183866126ee90919063ffffffff16565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166127c09092919063ffffffff16565b50505050565b6000600560009054906101000a900460ff16905090565b600061103f610fa3611ef1565b8461103a8560016000610fb4611ef1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461273890919063ffffffff16565b611ef9565b6001905092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461110c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21676f7665726e616e636500000000000000000000000000000000000000000081525060200191505060405180910390fd5b8060068190555050565b600061121a61271061120c600654600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156111c357600080fd5b505afa1580156111d7573d6000803e3d6000fd5b505050506040513d60208110156111ed57600080fd5b810190808051906020019092919050505061246690919063ffffffff16565b6124ec90919063ffffffff16565b905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61271081565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006112d06112a06109e3565b6112c2670de0b6b3a76400006112b4611756565b61246690919063ffffffff16565b6124ec90919063ffffffff16565b905090565b6112e66112e13361124b565b610ac6565b565b60075481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21676f7665726e616e636500000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060048054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561148d5780601f106114625761010080835404028352916020019161148d565b820191906000526020600020905b81548152906001019060200180831161147057829003601f168201915b5050505050905090565b600061155a6114a4611ef1565b846115558560405180606001604052806025815260200161301960259139600160006114ce611ef1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123a69092919063ffffffff16565b611ef9565b6001905092915050565b6000611578611571611ef1565b84846120f0565b6001905092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21676f7665726e616e636500000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461174c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21676f7665726e616e636500000000000000000000000000000000000000000081525060200191505060405180910390fd5b8060078190555050565b600061193f600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561181c57600080fd5b505afa158015611830573d6000803e3d6000fd5b505050506040513d602081101561184657600080fd5b8101908080519060200190929190505050600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156118f657600080fd5b505afa15801561190a573d6000803e3d6000fd5b505050506040513d602081101561192057600080fd5b810190808051906020019092919050505061273890919063ffffffff16565b905090565b600061194e611756565b90506000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156119f157600080fd5b505afa158015611a05573d6000803e3d6000fd5b505050506040513d6020811015611a1b57600080fd5b81019080805190602001909291905050509050611a7d333085600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612891909392919063ffffffff16565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611b1e57600080fd5b505afa158015611b32573d6000803e3d6000fd5b505050506040513d6020811015611b4857600080fd5b81019080805190602001909291905050509050611b6e82826126ee90919063ffffffff16565b935060008090506000611b7f6109e3565b1415611b8d57849050611bbc565b611bb984611bab611b9c6109e3565b8861246690919063ffffffff16565b6124ec90919063ffffffff16565b90505b611bc63382612997565b5050505050565b6000611bd7611116565b9050611c48600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166127c09092919063ffffffff16565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b02bf4b9600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611d1357600080fd5b505af1158015611d27573d6000803e3d6000fd5b5050505050565b61271081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611e9d600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611e5d57600080fd5b505afa158015611e71573d6000803e3d6000fd5b505050506040513d6020811015611e8757600080fd5b8101908080519060200190929190505050611944565b565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180612fcb6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612ef46022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612176576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180612fa66025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121fc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612eaf6023913960400191505060405180910390fd5b61226781604051806060016040528060268152602001612f16602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123a69092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506122fa816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461273890919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290612453576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156124185780820151818401526020810190506123fd565b50505050905090810190601f1680156124455780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083141561247957600090506124e6565b600082840290508284828161248a57fe5b04146124e1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612f3c6021913960400191505060405180910390fd5b809150505b92915050565b600061252e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612b52565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125bc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612f856021913960400191505060405180910390fd5b61262781604051806060016040528060228152602001612ed2602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123a69092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061267e816002546126ee90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600061273083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506123a6565b905092915050565b6000808284019050838110156127b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b61288c838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612c18565b505050565b612991848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612c18565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b612a4f8160025461273890919063ffffffff16565b600281905550612aa6816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461273890919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60008083118290612bfe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612bc3578082015181840152602081019050612ba8565b50505050905090810190601f168015612bf05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612c0a57fe5b049050809150509392505050565b612c378273ffffffffffffffffffffffffffffffffffffffff16612e63565b612ca9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b60208310612cf85780518252602082019150602081019050602083039250612cd5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612d5a576040519150601f19603f3d011682016040523d82523d6000602084013e612d5f565b606091505b509150915081612dd7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b600081511115612e5d57808060200190516020811015612df657600080fd5b8101908080519060200190929190505050612e5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612fef602a913960400191505060405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f9150808214158015612ea557506000801b8214155b9250505091905056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a72315820da0345486e132f06405ff076fdcbc27183d6c98d735d9032d11f052f55eab18664736f6c634300051000320000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000bd74255ca2226f11ccedb5977e25876be50bf603
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101da5760003560e01c806392eefe9b11610104578063b6b55f25116100a2578063de5f626811610071578063de5f626814610867578063f77c479114610871578063f8897945146108bb578063fc0c546a146108d9576101da565b8063b6b55f2514610799578063d389800f146107c7578063d5c1ff73146107d1578063dd62ed3e146107ef576101da565b8063a9059cbb116100de578063a9059cbb146106a3578063ab033ea914610709578063ac1e50251461074d578063b69ef8a81461077b576101da565b806392eefe9b1461057657806395d89b41146105ba578063a457c2d71461063d576101da565b806345dc3dd81161017c57806370a082311161014b57806370a08231146104d857806377c7b8fc14610530578063853828b61461054e5780638bc7e8c414610558576101da565b806345dc3dd81461042457806348a0d754146104525780635aa6e675146104705780636ac5db19146104ba576101da565b806323b872dd116101b857806323b872dd146102e65780632e1a7d4d1461036c578063313ce5671461039a57806339509351146103be576101da565b806306fdde03146101df578063095ea7b31461026257806318160ddd146102c8575b600080fd5b6101e7610923565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561022757808201518184015260208101905061020c565b50505050905090810190601f1680156102545780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102ae6004803603604081101561027857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506109c5565b604051808215151515815260200191505060405180910390f35b6102d06109e3565b6040518082815260200191505060405180910390f35b610352600480360360608110156102fc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506109ed565b604051808215151515815260200191505060405180910390f35b6103986004803603602081101561038257600080fd5b8101908080359060200190929190505050610ac6565b005b6103a2610f7f565b604051808260ff1660ff16815260200191505060405180910390f35b61040a600480360360408110156103d457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f96565b604051808215151515815260200191505060405180910390f35b6104506004803603602081101561043a57600080fd5b8101908080359060200190929190505050611049565b005b61045a611116565b6040518082815260200191505060405180910390f35b61047861121f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104c2611245565b6040518082815260200191505060405180910390f35b61051a600480360360208110156104ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061124b565b6040518082815260200191505060405180910390f35b610538611293565b6040518082815260200191505060405180910390f35b6105566112d5565b005b6105606112e8565b6040518082815260200191505060405180910390f35b6105b86004803603602081101561058c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ee565b005b6105c26113f5565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106025780820151818401526020810190506105e7565b50505050905090810190601f16801561062f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106896004803603604081101561065357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611497565b604051808215151515815260200191505060405180910390f35b6106ef600480360360408110156106b957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611564565b604051808215151515815260200191505060405180910390f35b61074b6004803603602081101561071f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611582565b005b6107796004803603602081101561076357600080fd5b8101908080359060200190929190505050611689565b005b610783611756565b6040518082815260200191505060405180910390f35b6107c5600480360360208110156107af57600080fd5b8101908080359060200190929190505050611944565b005b6107cf611bcd565b005b6107d9611d2e565b6040518082815260200191505060405180910390f35b6108516004803603604081101561080557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d34565b6040518082815260200191505060405180910390f35b61086f611dbb565b005b610879611e9f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108c3611ec5565b6040518082815260200191505060405180910390f35b6108e1611ecb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b606060038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109bb5780601f10610990576101008083540402835291602001916109bb565b820191906000526020600020905b81548152906001019060200180831161099e57829003601f168201915b5050505050905090565b60006109d96109d2611ef1565b8484611ef9565b6001905092915050565b6000600254905090565b60006109fa8484846120f0565b610abb84610a06611ef1565b610ab685604051806060016040528060288152602001612f5d60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a6c611ef1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123a69092919063ffffffff16565b611ef9565b600190509392505050565b6000610afb610ad36109e3565b610aed84610adf611756565b61246690919063ffffffff16565b6124ec90919063ffffffff16565b9050610b073383612536565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610ba857600080fd5b505afa158015610bbc573d6000803e3d6000fd5b505050506040513d6020811015610bd257600080fd5b8101908080519060200190929190505050905081811015610dfe576000610c0282846126ee90919063ffffffff16565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f3fef3a3600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015610ccf57600080fd5b505af1158015610ce3573d6000803e3d6000fd5b505050506000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610d8857600080fd5b505afa158015610d9c573d6000803e3d6000fd5b505050506040513d6020811015610db257600080fd5b810190808051906020019092919050505090506000610dda84836126ee90919063ffffffff16565b905082811015610dfa57610df7818561273890919063ffffffff16565b94505b5050505b6000610e29612710610e1b6007548661246690919063ffffffff16565b6124ec90919063ffffffff16565b9050610f1a600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639ec5a8946040518163ffffffff1660e01b815260040160206040518083038186803b158015610e9657600080fd5b505afa158015610eaa573d6000803e3d6000fd5b505050506040513d6020811015610ec057600080fd5b810190808051906020019092919050505082600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166127c09092919063ffffffff16565b610f7933610f3183866126ee90919063ffffffff16565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166127c09092919063ffffffff16565b50505050565b6000600560009054906101000a900460ff16905090565b600061103f610fa3611ef1565b8461103a8560016000610fb4611ef1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461273890919063ffffffff16565b611ef9565b6001905092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461110c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21676f7665726e616e636500000000000000000000000000000000000000000081525060200191505060405180910390fd5b8060068190555050565b600061121a61271061120c600654600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156111c357600080fd5b505afa1580156111d7573d6000803e3d6000fd5b505050506040513d60208110156111ed57600080fd5b810190808051906020019092919050505061246690919063ffffffff16565b6124ec90919063ffffffff16565b905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61271081565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006112d06112a06109e3565b6112c2670de0b6b3a76400006112b4611756565b61246690919063ffffffff16565b6124ec90919063ffffffff16565b905090565b6112e66112e13361124b565b610ac6565b565b60075481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21676f7665726e616e636500000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060048054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561148d5780601f106114625761010080835404028352916020019161148d565b820191906000526020600020905b81548152906001019060200180831161147057829003601f168201915b5050505050905090565b600061155a6114a4611ef1565b846115558560405180606001604052806025815260200161301960259139600160006114ce611ef1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123a69092919063ffffffff16565b611ef9565b6001905092915050565b6000611578611571611ef1565b84846120f0565b6001905092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21676f7665726e616e636500000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461174c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21676f7665726e616e636500000000000000000000000000000000000000000081525060200191505060405180910390fd5b8060078190555050565b600061193f600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561181c57600080fd5b505afa158015611830573d6000803e3d6000fd5b505050506040513d602081101561184657600080fd5b8101908080519060200190929190505050600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156118f657600080fd5b505afa15801561190a573d6000803e3d6000fd5b505050506040513d602081101561192057600080fd5b810190808051906020019092919050505061273890919063ffffffff16565b905090565b600061194e611756565b90506000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156119f157600080fd5b505afa158015611a05573d6000803e3d6000fd5b505050506040513d6020811015611a1b57600080fd5b81019080805190602001909291905050509050611a7d333085600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612891909392919063ffffffff16565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611b1e57600080fd5b505afa158015611b32573d6000803e3d6000fd5b505050506040513d6020811015611b4857600080fd5b81019080805190602001909291905050509050611b6e82826126ee90919063ffffffff16565b935060008090506000611b7f6109e3565b1415611b8d57849050611bbc565b611bb984611bab611b9c6109e3565b8861246690919063ffffffff16565b6124ec90919063ffffffff16565b90505b611bc63382612997565b5050505050565b6000611bd7611116565b9050611c48600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166127c09092919063ffffffff16565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b02bf4b9600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611d1357600080fd5b505af1158015611d27573d6000803e3d6000fd5b5050505050565b61271081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611e9d600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611e5d57600080fd5b505afa158015611e71573d6000803e3d6000fd5b505050506040513d6020811015611e8757600080fd5b8101908080519060200190929190505050611944565b565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180612fcb6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612ef46022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612176576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180612fa66025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121fc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612eaf6023913960400191505060405180910390fd5b61226781604051806060016040528060268152602001612f16602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123a69092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506122fa816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461273890919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290612453576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156124185780820151818401526020810190506123fd565b50505050905090810190601f1680156124455780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083141561247957600090506124e6565b600082840290508284828161248a57fe5b04146124e1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612f3c6021913960400191505060405180910390fd5b809150505b92915050565b600061252e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612b52565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125bc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612f856021913960400191505060405180910390fd5b61262781604051806060016040528060228152602001612ed2602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123a69092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061267e816002546126ee90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600061273083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506123a6565b905092915050565b6000808284019050838110156127b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b61288c838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612c18565b505050565b612991848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612c18565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b612a4f8160025461273890919063ffffffff16565b600281905550612aa6816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461273890919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60008083118290612bfe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612bc3578082015181840152602081019050612ba8565b50505050905090810190601f168015612bf05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612c0a57fe5b049050809150509392505050565b612c378273ffffffffffffffffffffffffffffffffffffffff16612e63565b612ca9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b60208310612cf85780518252602082019150602081019050602083039250612cd5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612d5a576040519150601f19603f3d011682016040523d82523d6000602084013e612d5f565b606091505b509150915081612dd7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b600081511115612e5d57808060200190516020811015612df657600080fd5b8101908080519060200190929190505050612e5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612fef602a913960400191505060405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f9150808214158015612ea557506000801b8214155b9250505091905056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a72315820da0345486e132f06405ff076fdcbc27183d6c98d735d9032d11f052f55eab18664736f6c63430005100032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000bd74255ca2226f11ccedb5977e25876be50bf603
-----Decoded View---------------
Arg [0] : _token (address): 0x6B175474E89094C44Da98b954EedeAC495271d0F
Arg [1] : _controller (address): 0xbd74255Ca2226F11CceDB5977E25876Be50bf603
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [1] : 000000000000000000000000bd74255ca2226f11ccedb5977e25876be50bf603
Deployed Bytecode Sourcemap
26769:3451:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26769:3451:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18592:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;18592:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12136:152;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12136:152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11157:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12760:304;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12760:304:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;29420:674;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29420:674:0;;;;;;;;;;;;;;;;;:::i;:::-;;19444:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13473:210;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13473:210:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27662:114;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27662:114:0;;;;;;;;;;;;;;;;;:::i;:::-;;28380:116;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27083:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;26960:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11311:110;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11311:110:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30100:117;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29272:76;;;:::i;:::-;;26999:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28091:143;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28091:143:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;18794:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;18794:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14186:261;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14186:261:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11634:158;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11634:158:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27942:143;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27942:143:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;27782:154;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27782:154:0;;;;;;;;;;;;;;;;;:::i;:::-;;27501:155;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28757:509;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28757:509:0;;;;;;;;;;;;;;;;;:::i;:::-;;28502:163;;;:::i;:::-;;27034:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11855:134;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11855:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28671:80;;;:::i;:::-;;27113:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;26933:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26907:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18592:83;18629:13;18662:5;18655:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18592:83;:::o;12136:152::-;12202:4;12219:39;12228:12;:10;:12::i;:::-;12242:7;12251:6;12219:8;:39::i;:::-;12276:4;12269:11;;12136:152;;;;:::o;11157:91::-;11201:7;11228:12;;11221:19;;11157:91;:::o;12760:304::-;12849:4;12866:36;12876:6;12884:9;12895:6;12866:9;:36::i;:::-;12913:121;12922:6;12930:12;:10;:12::i;:::-;12944:89;12982:6;12944:89;;;;;;;;;;;;;;;;;:11;:19;12956:6;12944:19;;;;;;;;;;;;;;;:33;12964:12;:10;:12::i;:::-;12944:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;12913:8;:121::i;:::-;13052:4;13045:11;;12760:304;;;;;:::o;29420:674::-;29466:6;29475:43;29504:13;:11;:13::i;:::-;29476:22;29490:7;29476:9;:7;:9::i;:::-;:13;;:22;;;;:::i;:::-;29475:28;;:43;;;;:::i;:::-;29466:52;;29525:26;29531:10;29543:7;29525:5;:26::i;:::-;29582:6;29591:5;;;;;;;;;;;:15;;;29615:4;29591:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29591:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29591:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29591:30:0;;;;;;;;;;;;;;;;29582:39;;29636:1;29632;:5;29628:281;;;29648:14;29665:8;29671:1;29665;:5;;:8;;;;:::i;:::-;29648:25;;29698:10;;;;;;;;;;;29682:36;;;29727:5;;;;;;;;;;;29735:9;29682:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29682:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29682:63:0;;;;29754:11;29768:5;;;;;;;;;;;:15;;;29792:4;29768:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29768:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29768:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29768:30:0;;;;;;;;;;;;;;;;29754:44;;29807:10;29820:13;29831:1;29820:6;:10;;:13;;;;:::i;:::-;29807:26;;29854:9;29846:5;:17;29842:60;;;29880:12;29886:5;29880:1;:5;;:12;;;;:::i;:::-;29876:16;;29842:60;29628:281;;;;29917:9;29929:39;27071:5;29929:20;29935:13;;29929:1;:5;;:20;;;;:::i;:::-;:24;;:39;;;;:::i;:::-;29917:51;;29975:63;30010:10;;;;;;;;;;;29994:35;;;:37;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29994:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29994:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29994:37:0;;;;;;;;;;;;;;;;30033:4;29975:5;;;;;;;;;;;:18;;;;:63;;;;;:::i;:::-;30045:43;30064:10;30076:11;30082:4;30076:1;:5;;:11;;;;:::i;:::-;30045:5;;;;;;;;;;;:18;;;;:43;;;;;:::i;:::-;29420:674;;;;:::o;19444:83::-;19485:5;19510:9;;;;;;;;;;;19503:16;;19444:83;:::o;13473:210::-;13553:4;13570:83;13579:12;:10;:12::i;:::-;13593:7;13602:50;13641:10;13602:11;:25;13614:12;:10;:12::i;:::-;13602:25;;;;;;;;;;;;;;;:34;13628:7;13602:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;13570:8;:83::i;:::-;13671:4;13664:11;;13473:210;;;;:::o;27662:114::-;27727:10;;;;;;;;;;;27713:24;;:10;:24;;;27705:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27766:4;27760:3;:10;;;;27662:114;:::o;28380:116::-;28422:4;28442:48;26987:5;28442:39;28477:3;;28442:5;;;;;;;;;;;:15;;;28466:4;28442:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28442:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28442:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28442:30:0;;;;;;;;;;;;;;;;:34;;:39;;;;:::i;:::-;:43;;:48;;;;:::i;:::-;28435:55;;28380:116;:::o;27083:25::-;;;;;;;;;;;;;:::o;26960:32::-;26987:5;26960:32;:::o;11311:110::-;11368:7;11395:9;:18;11405:7;11395:18;;;;;;;;;;;;;;;;11388:25;;11311:110;;;:::o;30100:117::-;30153:4;30173:38;30197:13;:11;:13::i;:::-;30173:19;30187:4;30173:9;:7;:9::i;:::-;:13;;:19;;;;:::i;:::-;:23;;:38;;;;:::i;:::-;30166:45;;30100:117;:::o;29272:76::-;29311:31;29320:21;29330:10;29320:9;:21::i;:::-;29311:8;:31::i;:::-;29272:76::o;26999:30::-;;;;:::o;28091:143::-;28171:10;;;;;;;;;;;28157:24;;:10;:24;;;28149:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28217:11;28204:10;;:24;;;;;;;;;;;;;;;;;;28091:143;:::o;18794:87::-;18833:13;18866:7;18859:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18794:87;:::o;14186:261::-;14271:4;14288:129;14297:12;:10;:12::i;:::-;14311:7;14320:96;14359:15;14320:96;;;;;;;;;;;;;;;;;:11;:25;14332:12;:10;:12::i;:::-;14320:25;;;;;;;;;;;;;;;:34;14346:7;14320:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;14288:8;:129::i;:::-;14435:4;14428:11;;14186:261;;;;:::o;11634:158::-;11703:4;11720:42;11730:12;:10;:12::i;:::-;11744:9;11755:6;11720:9;:42::i;:::-;11780:4;11773:11;;11634:158;;;;:::o;27942:143::-;28022:10;;;;;;;;;;;28008:24;;:10;:24;;;28000:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28068:11;28055:10;;:24;;;;;;;;;;;;;;;;;;27942:143;:::o;27782:154::-;27867:10;;;;;;;;;;;27853:24;;:10;:24;;;27845:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27916:14;27900:13;:30;;;;27782:154;:::o;27501:155::-;27541:4;27561:89;27612:10;;;;;;;;;;;27596:37;;;27642:5;;;;;;;;;;;27596:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27596:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27596:53:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27596:53:0;;;;;;;;;;;;;;;;27561:5;;;;;;;;;;;:15;;;27585:4;27561:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27561:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27561:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27561:30:0;;;;;;;;;;;;;;;;:34;;:89;;;;:::i;:::-;27554:96;;27501:155;:::o;28757:509::-;28802:10;28815:9;:7;:9::i;:::-;28802:22;;28831:12;28846:5;;;;;;;;;;;:15;;;28870:4;28846:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28846:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28846:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28846:30:0;;;;;;;;;;;;;;;;28831:45;;28883:58;28906:10;28926:4;28933:7;28883:5;;;;;;;;;;;:22;;;;:58;;;;;;:::i;:::-;28948:11;28962:5;;;;;;;;;;;:15;;;28986:4;28962:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28962:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28962:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28962:30:0;;;;;;;;;;;;;;;;28948:44;;29009:19;29020:7;29009:6;:10;;:19;;;;:::i;:::-;28999:29;;29079:11;29093:1;29079:15;;29122:1;29105:13;:11;:13::i;:::-;:18;29101:128;;;29143:7;29134:16;;29101:128;;;29182:39;29215:5;29183:26;29195:13;:11;:13::i;:::-;29183:7;:11;;:26;;;;:::i;:::-;29182:32;;:39;;;;:::i;:::-;29173:48;;29101:128;29235:25;29241:10;29253:6;29235:5;:25::i;:::-;28757:509;;;;;:::o;28502:163::-;28532:9;28544:11;:9;:11::i;:::-;28532:23;;28562:36;28581:10;;;;;;;;;;;28593:4;28562:5;;;;;;;;;;;:18;;;;:36;;;;;:::i;:::-;28621:10;;;;;;;;;;;28605:32;;;28646:5;;;;;;;;;;;28654:4;28605:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28605:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28605:54:0;;;;28502:163;:::o;27034:42::-;27071:5;27034:42;:::o;11855:134::-;11927:7;11954:11;:18;11966:5;11954:18;;;;;;;;;;;;;;;:27;11973:7;11954:27;;;;;;;;;;;;;;;;11947:34;;11855:134;;;;:::o;28671:80::-;28709:36;28717:5;;;;;;;;;;;:15;;;28733:10;28717:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28717:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28717:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28717:27:0;;;;;;;;;;;;;;;;28709:7;:36::i;:::-;28671:80::o;27113:25::-;;;;;;;;;;;;;:::o;26933:22::-;;;;:::o;26907:19::-;;;;;;;;;;;;;:::o;6368:98::-;6413:15;6448:10;6441:17;;6368:98;:::o;17117:338::-;17228:1;17211:19;;:5;:19;;;;17203:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17309:1;17290:21;;:7;:21;;;;17282:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17393:6;17363:11;:18;17375:5;17363:18;;;;;;;;;;;;;;;:27;17382:7;17363:27;;;;;;;;;;;;;;;:36;;;;17431:7;17415:32;;17424:5;17415:32;;;17440:6;17415:32;;;;;;;;;;;;;;;;;;17117:338;;;:::o;14937:471::-;15053:1;15035:20;;:6;:20;;;;15027:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15137:1;15116:23;;:9;:23;;;;15108:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15212;15234:6;15212:71;;;;;;;;;;;;;;;;;:9;:17;15222:6;15212:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;15192:9;:17;15202:6;15192:17;;;;;;;;;;;;;;;:91;;;;15317:32;15342:6;15317:9;:20;15327:9;15317:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;15294:9;:20;15304:9;15294:20;;;;;;;;;;;;;;;:55;;;;15382:9;15365:35;;15374:6;15365:35;;;15393:6;15365:35;;;;;;;;;;;;;;;;;;14937:471;;;:::o;1842:192::-;1928:7;1961:1;1956;:6;;1964:12;1948:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1948:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1988:9;2004:1;2000;:5;1988:17;;2025:1;2018:8;;;1842:192;;;;;:::o;2285:471::-;2343:7;2593:1;2588;:6;2584:47;;;2618:1;2611:8;;;;2584:47;2643:9;2659:1;2655;:5;2643:17;;2688:1;2683;2679;:5;;;;;;:10;2671:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2747:1;2740:8;;;2285:471;;;;;:::o;3224:132::-;3282:7;3309:39;3313:1;3316;3309:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3302:46;;3224:132;;;;:::o;16329:348::-;16424:1;16405:21;;:7;:21;;;;16397:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16498:68;16521:6;16498:68;;;;;;;;;;;;;;;;;:9;:18;16508:7;16498:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;16477:9;:18;16487:7;16477:18;;;;;;;;;;;;;;;:89;;;;16592:24;16609:6;16592:12;;:16;;:24;;;;:::i;:::-;16577:12;:39;;;;16658:1;16632:37;;16641:7;16632:37;;;16662:6;16632:37;;;;;;;;;;;;;;;;;;16329:348;;:::o;1369:136::-;1427:7;1454:43;1458:1;1461;1454:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1447:50;;1369:136;;;;:::o;913:181::-;971:7;991:9;1007:1;1003;:5;991:17;;1032:1;1027;:6;;1019:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1085:1;1078:8;;;913:181;;;;:::o;23268:176::-;23351:85;23370:5;23400;:14;;;:23;;;;23425:2;23429:5;23377:58;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;23377:58:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;23377:58:0;23351:18;:85::i;:::-;23268:176;;;:::o;23452:204::-;23553:95;23572:5;23602;:18;;;:27;;;;23631:4;23637:2;23641:5;23579:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;23579:68:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;23579:68:0;23553:18;:95::i;:::-;23452:204;;;;:::o;15689:308::-;15784:1;15765:21;;:7;:21;;;;15757:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15850:24;15867:6;15850:12;;:16;;:24;;;;:::i;:::-;15835:12;:39;;;;15906:30;15929:6;15906:9;:18;15916:7;15906:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;15885:9;:18;15895:7;15885:18;;;;;;;;;;;;;;;:51;;;;15973:7;15952:37;;15969:1;15952:37;;;15982:6;15952:37;;;;;;;;;;;;;;;;;;15689:308;;:::o;3886:345::-;3972:7;4071:1;4067;:5;4074:12;4059:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;4059:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4098:9;4114:1;4110;:5;;;;;;4098:17;;4222:1;4215:8;;;3886:345;;;;;:::o;25307:1114::-;25911:27;25919:5;25911:25;;;:27::i;:::-;25903:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26048:12;26062:23;26097:5;26089:19;;26109:4;26089:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;26089:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;26047:67:0;;;;26133:7;26125:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26214:1;26194:10;:17;:21;26190:224;;;26336:10;26325:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;26325:30:0;;;;;;;;;;;;;;;;26317:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26190:224;25307:1114;;;;:::o;20297:619::-;20357:4;20619:16;20646:19;20668:66;20646:88;;;;20837:7;20825:20;20813:32;;20877:11;20865:8;:23;;:42;;;;;20904:3;20892:15;;:8;:15;;20865:42;20857:51;;;;20297:619;;;:::o
Swarm Source
bzzr://da0345486e132f06405ff076fdcbc27183d6c98d735d9032d11f052f55eab186
Loading...
Loading
Loading...
Loading
Net Worth in USD
$39.45
Net Worth in ETH
0.018995
Token Allocations
DAI
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $0.999759 | 39.4613 | $39.45 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.