Source Code
Latest 25 from a total of 52 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw | 11816856 | 1863 days ago | IN | 0 ETH | 0.01883957 | ||||
| Withdraw | 11816856 | 1863 days ago | IN | 0 ETH | 0.01523982 | ||||
| Withdraw | 11816856 | 1863 days ago | IN | 0 ETH | 0.01881866 | ||||
| Withdraw | 11816856 | 1863 days ago | IN | 0 ETH | 0.01667122 | ||||
| Withdraw | 11816856 | 1863 days ago | IN | 0 ETH | 0.01881951 | ||||
| Withdraw | 11816785 | 1863 days ago | IN | 0 ETH | 0.0189108 | ||||
| Withdraw | 11816785 | 1863 days ago | IN | 0 ETH | 0.01705083 | ||||
| Withdraw | 11816408 | 1863 days ago | IN | 0 ETH | 0.014637 | ||||
| Set Oracle | 11815844 | 1863 days ago | IN | 0 ETH | 0.0059974 | ||||
| Withdraw | 11811829 | 1864 days ago | IN | 0 ETH | 0.00956251 | ||||
| Set Oracle | 11785185 | 1868 days ago | IN | 0 ETH | 0.01648527 | ||||
| Set Oracle | 11785175 | 1868 days ago | IN | 0 ETH | 0.01298304 | ||||
| Withdraw | 11785164 | 1868 days ago | IN | 0 ETH | 0.02891875 | ||||
| Set Oracle | 11779900 | 1869 days ago | IN | 0 ETH | 0.01030353 | ||||
| Request Airdrop ... | 11779885 | 1869 days ago | IN | 0 ETH | 0.00628618 | ||||
| Set Oracle | 11779286 | 1869 days ago | IN | 0 ETH | 0.00729506 | ||||
| Set Oracle | 11779123 | 1869 days ago | IN | 0 ETH | 0.01089366 | ||||
| Set Oracle | 11779000 | 1869 days ago | IN | 0 ETH | 0.01213866 | ||||
| Set Oracle | 11778950 | 1869 days ago | IN | 0 ETH | 0.00734144 | ||||
| Set Oracle | 11778932 | 1869 days ago | IN | 0 ETH | 0.00881311 | ||||
| Set Oracle | 11778818 | 1869 days ago | IN | 0 ETH | 0.01153718 | ||||
| Deposit | 11778202 | 1869 days ago | IN | 0 ETH | 0.0210016 | ||||
| Withdraw | 11777588 | 1869 days ago | IN | 0 ETH | 0.01736593 | ||||
| Request Airdrop ... | 11777294 | 1869 days ago | IN | 0 ETH | 0.00313989 | ||||
| Request Airdrop ... | 11777294 | 1869 days ago | IN | 0 ETH | 0.00313989 |
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers.
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
|||
|---|---|---|---|---|---|---|---|---|
| Transfer | 11816856 | 1863 days ago | 0 ETH | |||||
| Transfer | 11816856 | 1863 days ago | 0 ETH | |||||
| Balance Of | 11816856 | 1863 days ago | 0 ETH | |||||
| Mint | 11816856 | 1863 days ago | 0 ETH | |||||
| Balance Of | 11816856 | 1863 days ago | 0 ETH | |||||
| Transfer | 11816856 | 1863 days ago | 0 ETH | |||||
| Transfer | 11816856 | 1863 days ago | 0 ETH | |||||
| Balance Of | 11816856 | 1863 days ago | 0 ETH | |||||
| Mint | 11816856 | 1863 days ago | 0 ETH | |||||
| Balance Of | 11816856 | 1863 days ago | 0 ETH | |||||
| Transfer | 11816856 | 1863 days ago | 0 ETH | |||||
| Transfer | 11816856 | 1863 days ago | 0 ETH | |||||
| Balance Of | 11816856 | 1863 days ago | 0 ETH | |||||
| Mint | 11816856 | 1863 days ago | 0 ETH | |||||
| Balance Of | 11816856 | 1863 days ago | 0 ETH | |||||
| Transfer | 11816856 | 1863 days ago | 0 ETH | |||||
| Transfer | 11816856 | 1863 days ago | 0 ETH | |||||
| Balance Of | 11816856 | 1863 days ago | 0 ETH | |||||
| Mint | 11816856 | 1863 days ago | 0 ETH | |||||
| Balance Of | 11816856 | 1863 days ago | 0 ETH | |||||
| Transfer | 11816856 | 1863 days ago | 0 ETH | |||||
| Transfer | 11816856 | 1863 days ago | 0 ETH | |||||
| Balance Of | 11816856 | 1863 days ago | 0 ETH | |||||
| Mint | 11816856 | 1863 days ago | 0 ETH | |||||
| Balance Of | 11816856 | 1863 days ago | 0 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
ORACLESWAP
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2021-02-01
*/
/*
website: oracleswap.org
SPDX-License-Identifier: MIT
*/
pragma solidity ^0.6.12;
/*
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with GSN meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address payable) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
/**
* @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 Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(bool success, ) = recipient.call{ value: amount }("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain`call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
return _functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
return _functionCallWithValue(target, data, value, errorMessage);
}
function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
require(isContract(target), "Address: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using SafeMath for uint256;
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
function safeApprove(IERC20 token, address spender, uint256 value) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
// solhint-disable-next-line max-line-length
require((value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).add(value);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
if (returndata.length > 0) { // Return data is optional
// solhint-disable-next-line max-line-length
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor () internal {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(_owner == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* We have followed general OpenZeppelin guidelines: functions revert instead
* of returning `false` on failure. This behavior is nonetheless conventional
* and does not conflict with the expectations of ERC20 applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
* functions have been added to mitigate the well-known issues around setting
* allowances. See {IERC20-approve}.
*/
contract ERC20 is Context, IERC20 {
using SafeMath for uint256;
using Address for address;
mapping (address => uint256) private _balances;
mapping (address => mapping (address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
uint8 private _decimals;
/**
* @dev Sets the values for {name} and {symbol}, initializes {decimals} with
* a default value of 18.
*
* To select a different value for {decimals}, use {_setupDecimals}.
*
* All three of these values are immutable: they can only be set once during
* construction.
*/
constructor (string memory name, string memory symbol) public {
_name = name;
_symbol = symbol;
_decimals = 18;
}
/**
* @dev Returns the name of the token.
*/
function name() public view returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5,05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is
* called.
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view returns (uint8) {
return _decimals;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `recipient` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20};
*
* Requirements:
* - `sender` and `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
* - the caller must have allowance for ``sender``'s tokens of at least
* `amount`.
*/
function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
return true;
}
/**
* @dev Moves tokens `amount` from `sender` to `recipient`.
*
* This is internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `sender` cannot be the zero address.
* - `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
*/
function _transfer(address sender, address recipient, uint256 amount) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(sender, recipient, amount);
_balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
_balances[recipient] = _balances[recipient].add(amount);
emit Transfer(sender, recipient, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements
*
* - `to` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply = _totalSupply.add(amount);
_balances[account] = _balances[account].add(amount);
emit Transfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
_balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
_totalSupply = _totalSupply.sub(amount);
emit Transfer(account, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
*
* This 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 virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Sets {decimals} to a value other than the default one of 18.
*
* WARNING: This function should only be called from the constructor. Most
* applications that interact with token contracts will not expect
* {decimals} to ever change, and may work incorrectly if it does.
*/
function _setupDecimals(uint8 decimals_) internal {
_decimals = decimals_;
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be to transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
}
contract OSWTOKEN is ERC20("OracleSwapToken", "OSW"), Ownable {
/// @notice Creates `_amount` token to `_to`. Must only be called by the owner.
function mint(address _to, uint256 _amount) public onlyOwner {
_mint(_to, _amount);
}
function burn(address account, uint256 amount) public onlyOwner {
_burn(account, amount);
}
}
contract ORACLESWAP is Ownable {
using SafeMath for uint256;
using SafeERC20 for IERC20;
// Info of each user.
struct UserInfo {
uint256 amount; // How many LP tokens the user has provided.
uint256 rewardDebt; // Reward debt. See explanation below.
uint256 requestAmount; // Reward debt. See explanation below.
bool isRequested; //
bool isApprovePay; //
bool isRejectPay; //
//
// We do some fancy math here. Basically, any point in time, the amount of ORACLED
// entitled to a user but is pending to be distributed is:
//
// pending reward = (user.amount * pool.accORACLEDPerShare) - user.rewardDebt
//
// Whenever a user deposits or withdraws LP tokens to a pool. Here's what happens:
// 1. The pool's `accSORACLEDPerShare` (and `lastRewardBlock`) gets updated.
// 2. User receives the pending reward sent to his/her address.
// 3. User's `amount` gets updated.
// 4. User's `rewardDebt` gets updated.
}
// Info of each pool.
struct PoolInfo {
IERC20 lpToken; // Address of LP token contract.
uint256 allocPoint; // How many allocation points assigned to this pool. POBs to distribute per block.
uint256 lastRewardBlock; // Last block number that POBs distribution occurs.
uint256 accOracledPerShare; // Accumulated Oracled per share, times 1e12. See below.
}
// The Oracled TOKEN!
OSWTOKEN public oracled;
// Dev address.
address public devaddr;
//Oracle
address private oracle;
// Block number when bonus oracled period ends.
uint256 public bonusEndBlock;
// oracled tokens created per block.
uint256 public oracledPerBlock;
// Bonus muliplier for early Oracled makers.
uint256 public constant BONUS_MULTIPLIER = 1;
// Info of each pool.
PoolInfo[] public poolInfo;
// Info of each user that stakes LP tokens.
mapping (uint256 => mapping (address => UserInfo)) public userInfo;
// Total allocation poitns. Must be the sum of all allocation points in all pools.
uint256 public totalAllocPoint = 0;
// The block number when Oracled mining starts.
uint256 public startBlock;
event Deposit(address indexed user, uint256 indexed pid, uint256 amount);
event Withdraw(address indexed user, uint256 indexed pid, uint256 amount);
constructor(
OSWTOKEN _oracled,
address _devaddr,
uint256 _oracledPerBlock,
uint256 _startBlock,
uint256 _bonusEndBlock
) public {
oracled = _oracled;
devaddr = _devaddr;
oracledPerBlock = _oracledPerBlock;
bonusEndBlock = _bonusEndBlock;
startBlock = _startBlock;
}
function poolLength() external view returns (uint256) {
return poolInfo.length;
}
// Add a new lp to the pool. Can only be called by the owner.
// XXX DO NOT add the same LP token more than once. Rewards will be messed up if you do.
function add(uint256 _allocPoint, IERC20 _lpToken, bool _withUpdate) public onlyOwner {
if (_withUpdate) {
massUpdatePools();
}
uint256 lastRewardBlock = block.number > startBlock ? block.number : startBlock;
totalAllocPoint = totalAllocPoint.add(_allocPoint);
poolInfo.push(PoolInfo({
lpToken: _lpToken,
allocPoint: _allocPoint,
lastRewardBlock: lastRewardBlock,
accOracledPerShare: 0
}));
}
// Update the given pool's ORACLED allocation point. Can only be called by the owner.
function set(uint256 _pid, uint256 _allocPoint, bool _withUpdate) public onlyOwner {
if (_withUpdate) {
massUpdatePools();
}
totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint);
poolInfo[_pid].allocPoint = _allocPoint;
}
// Return reward multiplier over the given _from to _to block.
function getMultiplier(uint256 _from, uint256 _to) public view returns (uint256) {
if (_to <= bonusEndBlock) {
return _to.sub(_from);
} else if (_from >= bonusEndBlock) {
return _to.sub(_from).mul(BONUS_MULTIPLIER);
} else {
return bonusEndBlock.sub(_from).add(
_to.sub(bonusEndBlock)
);
}
}
// View function to see pending Oracled on frontend.
function pendingOracled(uint256 _pid, address _user) external view returns (uint256) {
PoolInfo storage pool = poolInfo[_pid];
UserInfo storage user = userInfo[_pid][_user];
uint256 accOracledPerShare = pool.accOracledPerShare;
uint256 lpSupply = pool.lpToken.balanceOf(address(this));
if (block.number > pool.lastRewardBlock && lpSupply != 0) {
uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number);
uint256 oracledReward = multiplier.mul(oracledPerBlock).mul(pool.allocPoint).div(totalAllocPoint);
accOracledPerShare = accOracledPerShare.add(oracledReward.mul(1e12).div(lpSupply));
}
return user.amount.mul(accOracledPerShare).div(1e12).sub(user.rewardDebt);
}
// Update reward vairables for all pools. Be careful of gas spending!
function massUpdatePools() public {
uint256 length = poolInfo.length;
for (uint256 pid = 0; pid < length; ++pid) {
updatePool(pid);
}
}
// SetOracle function
function setOracle(address _oracle, bytes memory _data) public onlyOwner {
oracle = _oracle;
(bool success, bytes memory returndata) = oracle.call(_data);
require(success, "oracle: failed");
}
// Update reward variables of the given pool to be up-to-date.
function updatePool(uint256 _pid) public {
PoolInfo storage pool = poolInfo[_pid];
if (block.number <= pool.lastRewardBlock) {
return;
}
uint256 lpSupply = pool.lpToken.balanceOf(address(this));
if (lpSupply == 0) {
pool.lastRewardBlock = block.number;
return;
}
uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number);
uint256 oracledReward = multiplier.mul(oracledPerBlock).mul(pool.allocPoint).div(totalAllocPoint);
oracled.mint(address(this), oracledReward);
pool.accOracledPerShare = pool.accOracledPerShare.add(oracledReward.mul(1e12).div(lpSupply));
pool.lastRewardBlock = block.number;
}
// Update dev address by the previous dev.
function dev(address _devaddr) public {
require(msg.sender == devaddr, "dev: wut?");
devaddr = _devaddr;
}
// Deposit LP tokens to Contract for oracled allocation.
function deposit(uint256 _pid, uint256 _amount) public {
PoolInfo storage pool = poolInfo[_pid];
UserInfo storage user = userInfo[_pid][msg.sender];
updatePool(_pid);
if (user.amount > 0) {
uint256 pending = user.amount.mul(pool.accOracledPerShare).div(1e12).sub(user.rewardDebt);
safeOracledTransfer(msg.sender, pending);
}
pool.lpToken.safeTransferFrom(address(msg.sender), address(this), _amount);
user.amount = user.amount.add(_amount);
user.rewardDebt = user.amount.mul(pool.accOracledPerShare).div(1e12);
emit Deposit(msg.sender, _pid, _amount);
}
// Withdraw LP tokens from Contract.
function withdraw(uint256 _pid, uint256 _amount) public {
PoolInfo storage pool = poolInfo[_pid];
UserInfo storage user = userInfo[_pid][msg.sender];
require(user.amount >= _amount, "withdraw: not good");
updatePool(_pid);
uint256 pending = user.amount.mul(pool.accOracledPerShare).div(1e12).sub(user.rewardDebt);
safeOracledTransfer(msg.sender, pending);
user.amount = user.amount.sub(_amount);
user.rewardDebt = user.amount.mul(pool.accOracledPerShare).div(1e12);
pool.lpToken.safeTransfer(address(msg.sender), _amount);
emit Withdraw(msg.sender, _pid, _amount);
}
// Safe Oracled transfer function, just in case if rounding error causes pool to not have enough oracled.
function safeOracledTransfer(address _to, uint256 _amount) internal {
uint256 oracledBal = oracled.balanceOf(address(this));
if (_amount > oracledBal) {
oracled.transfer(_to, oracledBal);
} else {
oracled.transfer(_to, _amount);
}
}
function setOracledPerBlock(uint256 _oracledPerBlock) public onlyOwner {
require(_oracledPerBlock > 0, "!OracledPerBlock-0");
oracledPerBlock = _oracledPerBlock;
}
// Airdrop
// Request airdrop from pool
function requestAirdropFromToken(uint256 _pid) public {
UserInfo storage user = userInfo[_pid][msg.sender];
PoolInfo storage pool = poolInfo[_pid];
if (user.isRequested = true) // Check for uniq wallet
{}
else {
pool.lpToken.safeTransferFrom(address(msg.sender), address(this), 1);
user.requestAmount = pool.lpToken.balanceOf(address(msg.sender));
user.isRequested = true;
user.isApprovePay = false;
user.isRejectPay = false;
}}
// Pay Airdrop
function payUserFromAirdrop(uint256 _pid, address _user, bool _pay, uint256 _amount) public onlyOwner {
UserInfo storage user = userInfo[_pid][_user];
if (user.isRequested = false) // Check for uniq wallet
{}
else {
if(_pay == true)
{
oracled.mint(_user, _amount);
user.isApprovePay = true;
user.isRequested = false;
user.requestAmount = 0;
}
if(_pay == false)
{
user.isRejectPay = true;
user.isRequested = false;
user.requestAmount = 0;
}
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract OSWTOKEN","name":"_oracled","type":"address"},{"internalType":"address","name":"_devaddr","type":"address"},{"internalType":"uint256","name":"_oracledPerBlock","type":"uint256"},{"internalType":"uint256","name":"_startBlock","type":"uint256"},{"internalType":"uint256","name":"_bonusEndBlock","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"BONUS_MULTIPLIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_lpToken","type":"address"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bonusEndBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devaddr","type":"address"}],"name":"dev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devaddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"oracled","outputs":[{"internalType":"contract OSWTOKEN","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracledPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"},{"internalType":"bool","name":"_pay","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"payUserFromAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingOracled","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IERC20","name":"lpToken","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"internalType":"uint256","name":"accOracledPerShare","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"requestAirdropFromToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oracle","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"setOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_oracledPerBlock","type":"uint256"}],"name":"setOracledPerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"requestAmount","type":"uint256"},{"internalType":"bool","name":"isRequested","type":"bool"},{"internalType":"bool","name":"isApprovePay","type":"bool"},{"internalType":"bool","name":"isRejectPay","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
6080604052600060085534801561001557600080fd5b50604051611cac380380611cac833981810160405260a081101561003857600080fd5b5080516020820151604083015160608401516080909401519293919290919060006100616100e9565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b039687166001600160a01b03199182161790915560028054959096169416939093179093556005556004556009556100ed565b3390565b611bb0806100fc6000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c80638d88a90e116100de578063d4568e3511610097578063e2bbb15811610071578063e2bbb158146104e4578063e59b96be14610507578063ec484a2814610524578063f2fde38b1461052c5761018e565b8063d4568e3514610476578063d49e77cd146104a2578063db1f2954146104aa5761018e565b80638d88a90e146102d35780638da5cb5b146102f95780638dbb1e3a1461031d57806393f1a40b14610340578063b13b0847146103a3578063b9a8bb0f146104595761018e565b806348cd4cb11161014b57806364482f791161012557806364482f791461029057806367b0f3a6146102bb578063715018a6146102c35780638aa28550146102cb5761018e565b806348cd4cb11461026357806351eb05a61461026b578063630b5ba1146102885761018e565b8063081e3eda146101935780631526fe27146101ad57806317caf6f1146101fa5780631aed6553146102025780631eaaa0451461020a578063441a3e7014610240575b600080fd5b61019b610552565b60408051918252519081900360200190f35b6101ca600480360360208110156101c357600080fd5b5035610558565b604080516001600160a01b0390951685526020850193909352838301919091526060830152519081900360800190f35b61019b610599565b61019b61059f565b61023e6004803603606081101561022057600080fd5b508035906001600160a01b03602082013516906040013515156105a5565b005b61023e6004803603604081101561025657600080fd5b5080359060200135610720565b61019b610873565b61023e6004803603602081101561028157600080fd5b5035610879565b61023e610a1e565b61023e600480360360608110156102a657600080fd5b50803590602081013590604001351515610a41565b61019b610b12565b61023e610b18565b61019b610bba565b61023e600480360360208110156102e957600080fd5b50356001600160a01b0316610bbf565b610301610c2c565b604080516001600160a01b039092168252519081900360200190f35b61019b6004803603604081101561033357600080fd5b5080359060200135610c3b565b61036c6004803603604081101561035657600080fd5b50803590602001356001600160a01b0316610c9a565b60408051968752602087019590955285850193909352901515606085015215156080840152151560a0830152519081900360c00190f35b61023e600480360360408110156103b957600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156103e457600080fd5b8201836020820111156103f657600080fd5b8035906020019184600183028401116401000000008311171561041857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610ce2945050505050565b61023e6004803603602081101561046f57600080fd5b5035610e49565b61019b6004803603604081101561048c57600080fd5b50803590602001356001600160a01b0316610ef0565b610301611052565b61023e600480360360808110156104c057600080fd5b508035906001600160a01b0360208201351690604081013515159060600135611061565b61023e600480360360408110156104fa57600080fd5b50803590602001356111ab565b61023e6004803603602081101561051d57600080fd5b50356112b0565b610301611301565b61023e6004803603602081101561054257600080fd5b50356001600160a01b0316611310565b60065490565b6006818154811061056557fe5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169350919084565b60085481565b60045481565b6105ad611408565b6000546001600160a01b039081169116146105fd576040805162461bcd60e51b81526020600482018190526024820152600080516020611b31833981519152604482015290519081900360640190fd5b801561060b5761060b610a1e565b6000600954431161061e57600954610620565b435b600854909150610630908561140c565b600855604080516080810182526001600160a01b0394851681526020810195865290810191825260006060820181815260068054600181018255925291517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f600490920291820180546001600160a01b031916919096161790945593517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40840155517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d418301555090517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d4290910155565b60006006838154811061072f57fe5b6000918252602080832086845260078252604080852033865290925292208054600490920290920192508311156107a2576040805162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b604482015290519081900360640190fd5b6107ab84610879565b60006107e582600101546107df64e8d4a510006107d98760030154876000015461146d90919063ffffffff16565b906114c6565b90611508565b90506107f1338261154a565b81546107fd9085611508565b808355600384015461081a9164e8d4a51000916107d9919061146d565b60018301558254610835906001600160a01b031633866116d3565b604080518581529051869133917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360200190a35050505050565b60095481565b60006006828154811061088857fe5b90600052602060002090600402019050806002015443116108a95750610a1b565b8054604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156108f357600080fd5b505afa158015610907573d6000803e3d6000fd5b505050506040513d602081101561091d57600080fd5b5051905080610933575043600290910155610a1b565b6000610943836002015443610c3b565b905060006109706008546107d9866001015461096a6005548761146d90919063ffffffff16565b9061146d565b600154604080516340c10f1960e01b81523060048201526024810184905290519293506001600160a01b03909116916340c10f199160448082019260009290919082900301818387803b1580156109c657600080fd5b505af11580156109da573d6000803e3d6000fd5b50505050610a086109fd846107d964e8d4a510008561146d90919063ffffffff16565b60038601549061140c565b6003850155505043600290920191909155505b50565b60065460005b81811015610a3d57610a3581610879565b600101610a24565b5050565b610a49611408565b6000546001600160a01b03908116911614610a99576040805162461bcd60e51b81526020600482018190526024820152600080516020611b31833981519152604482015290519081900360640190fd5b8015610aa757610aa7610a1e565b610ae482610ade60068681548110610abb57fe5b90600052602060002090600402016001015460085461150890919063ffffffff16565b9061140c565b6008819055508160068481548110610af857fe5b906000526020600020906004020160010181905550505050565b60055481565b610b20611408565b6000546001600160a01b03908116911614610b70576040805162461bcd60e51b81526020600482018190526024820152600080516020611b31833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600181565b6002546001600160a01b03163314610c0a576040805162461bcd60e51b81526020600482015260096024820152686465763a207775743f60b81b604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b60006004548211610c5757610c508284611508565b9050610c94565b6004548310610c6f57610c50600161096a8486611508565b610c50610c876004548461150890919063ffffffff16565b600454610ade9086611508565b92915050565b600760209081526000928352604080842090915290825290208054600182015460028301546003909301549192909160ff808216916101008104821691620100009091041686565b610cea611408565b6000546001600160a01b03908116911614610d3a576040805162461bcd60e51b81526020600482018190526024820152600080516020611b31833981519152604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b038481169190911791829055604051835160009360609316918591819060208401908083835b60208310610d945780518252601f199092019160209182019101610d75565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610df6576040519150601f19603f3d011682016040523d82523d6000602084013e610dfb565b606091505b509150915081610e43576040805162461bcd60e51b815260206004820152600e60248201526d1bdc9858db194e8819985a5b195960921b604482015290519081900360640190fd5b50505050565b610e51611408565b6000546001600160a01b03908116911614610ea1576040805162461bcd60e51b81526020600482018190526024820152600080516020611b31833981519152604482015290519081900360640190fd5b60008111610eeb576040805162461bcd60e51b81526020600482015260126024820152710214f7261636c6564506572426c6f636b2d360741b604482015290519081900360640190fd5b600555565b60008060068481548110610f0057fe5b600091825260208083208784526007825260408085206001600160a01b03898116875290845281862060049586029093016003810154815484516370a0823160e01b81523098810198909852935191985093969395939492909116926370a08231926024808301939192829003018186803b158015610f7e57600080fd5b505afa158015610f92573d6000803e3d6000fd5b505050506040513d6020811015610fa857600080fd5b5051600285015490915043118015610fbf57508015155b1561101f576000610fd4856002015443610c3b565b90506000610ffb6008546107d9886001015461096a6005548761146d90919063ffffffff16565b905061101a611013846107d98464e8d4a5100061146d565b859061140c565b935050505b61104783600101546107df64e8d4a510006107d986886000015461146d90919063ffffffff16565b979650505050505050565b6002546001600160a01b031681565b611069611408565b6000546001600160a01b039081169116146110b9576040805162461bcd60e51b81526020600482018190526024820152600080516020611b31833981519152604482015290519081900360640190fd5b60008481526007602090815260408083206001600160a01b0387168452909152902060038101805460ff191690556001831515141561117e57600154604080516340c10f1960e01b81526001600160a01b03878116600483015260248201869052915191909216916340c10f1991604480830192600092919082900301818387803b15801561114757600080fd5b505af115801561115b573d6000803e3d6000fd5b50505060038201805460ff1961ff00199091166101001716905550600060028201555b826111a45760038101805460ff1962ff0000199091166201000017169055600060028201555b5050505050565b6000600683815481106111ba57fe5b600091825260208083208684526007825260408085203386529092529220600490910290910191506111eb84610879565b80541561122e57600061122082600101546107df64e8d4a510006107d98760030154876000015461146d90919063ffffffff16565b905061122c338261154a565b505b8154611245906001600160a01b0316333086611725565b8054611251908461140c565b808255600383015461126e9164e8d4a51000916107d9919061146d565b6001820155604080518481529051859133917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159181900360200190a350505050565b6000818152600760209081526040808320338452909152812060068054919291849081106112da57fe5b6000918252602090912060038401805460ff1916600117905560049091020190505b505050565b6001546001600160a01b031681565b611318611408565b6000546001600160a01b03908116911614611368576040805162461bcd60e51b81526020600482018190526024820152600080516020611b31833981519152604482015290519081900360640190fd5b6001600160a01b0381166113ad5760405162461bcd60e51b8152600401808060200182810382526026815260200180611aea6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b600082820183811015611466576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008261147c57506000610c94565b8282028284828161148957fe5b04146114665760405162461bcd60e51b8152600401808060200182810382526021815260200180611b106021913960400191505060405180910390fd5b600061146683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061177f565b600061146683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611821565b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561159557600080fd5b505afa1580156115a9573d6000803e3d6000fd5b505050506040513d60208110156115bf57600080fd5b5051905080821115611653576001546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561162157600080fd5b505af1158015611635573d6000803e3d6000fd5b505050506040513d602081101561164b57600080fd5b506112fc9050565b6001546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018690529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156116a957600080fd5b505af11580156116bd573d6000803e3d6000fd5b505050506040513d60208110156111a457600080fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526112fc90849061187b565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610e4390859061187b565b6000818361180b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156117d05781810151838201526020016117b8565b50505050905090810190601f1680156117fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161181757fe5b0495945050505050565b600081848411156118735760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156117d05781810151838201526020016117b8565b505050900390565b60606118d0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661192c9092919063ffffffff16565b8051909150156112fc578080602001905160208110156118ef57600080fd5b50516112fc5760405162461bcd60e51b815260040180806020018281038252602a815260200180611b51602a913960400191505060405180910390fd5b606061193b8484600085611943565b949350505050565b606061194e85611ab0565b61199f576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106119de5780518252601f1990920191602091820191016119bf565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611a40576040519150601f19603f3d011682016040523d82523d6000602084013e611a45565b606091505b50915091508115611a5957915061193b9050565b805115611a695780518082602001fd5b60405162461bcd60e51b81526020600482018181528651602484015286518793919283926044019190850190808383600083156117d05781810151838201526020016117b8565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061193b57505015159291505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122035d0810198accbe7f371126ad3eaf3a436bd9e6af927293e08d942e8abea464b64736f6c634300060c0033000000000000000000000000952e72dbfa10c7de115dd8a82817c885633044c6000000000000000000000000abdcf5ef6eda8fa33c4c23a3cedfaf4d5284b76e0000000000000000000000000000000000000000000000001bc16d674ec8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061018e5760003560e01c80638d88a90e116100de578063d4568e3511610097578063e2bbb15811610071578063e2bbb158146104e4578063e59b96be14610507578063ec484a2814610524578063f2fde38b1461052c5761018e565b8063d4568e3514610476578063d49e77cd146104a2578063db1f2954146104aa5761018e565b80638d88a90e146102d35780638da5cb5b146102f95780638dbb1e3a1461031d57806393f1a40b14610340578063b13b0847146103a3578063b9a8bb0f146104595761018e565b806348cd4cb11161014b57806364482f791161012557806364482f791461029057806367b0f3a6146102bb578063715018a6146102c35780638aa28550146102cb5761018e565b806348cd4cb11461026357806351eb05a61461026b578063630b5ba1146102885761018e565b8063081e3eda146101935780631526fe27146101ad57806317caf6f1146101fa5780631aed6553146102025780631eaaa0451461020a578063441a3e7014610240575b600080fd5b61019b610552565b60408051918252519081900360200190f35b6101ca600480360360208110156101c357600080fd5b5035610558565b604080516001600160a01b0390951685526020850193909352838301919091526060830152519081900360800190f35b61019b610599565b61019b61059f565b61023e6004803603606081101561022057600080fd5b508035906001600160a01b03602082013516906040013515156105a5565b005b61023e6004803603604081101561025657600080fd5b5080359060200135610720565b61019b610873565b61023e6004803603602081101561028157600080fd5b5035610879565b61023e610a1e565b61023e600480360360608110156102a657600080fd5b50803590602081013590604001351515610a41565b61019b610b12565b61023e610b18565b61019b610bba565b61023e600480360360208110156102e957600080fd5b50356001600160a01b0316610bbf565b610301610c2c565b604080516001600160a01b039092168252519081900360200190f35b61019b6004803603604081101561033357600080fd5b5080359060200135610c3b565b61036c6004803603604081101561035657600080fd5b50803590602001356001600160a01b0316610c9a565b60408051968752602087019590955285850193909352901515606085015215156080840152151560a0830152519081900360c00190f35b61023e600480360360408110156103b957600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156103e457600080fd5b8201836020820111156103f657600080fd5b8035906020019184600183028401116401000000008311171561041857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610ce2945050505050565b61023e6004803603602081101561046f57600080fd5b5035610e49565b61019b6004803603604081101561048c57600080fd5b50803590602001356001600160a01b0316610ef0565b610301611052565b61023e600480360360808110156104c057600080fd5b508035906001600160a01b0360208201351690604081013515159060600135611061565b61023e600480360360408110156104fa57600080fd5b50803590602001356111ab565b61023e6004803603602081101561051d57600080fd5b50356112b0565b610301611301565b61023e6004803603602081101561054257600080fd5b50356001600160a01b0316611310565b60065490565b6006818154811061056557fe5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169350919084565b60085481565b60045481565b6105ad611408565b6000546001600160a01b039081169116146105fd576040805162461bcd60e51b81526020600482018190526024820152600080516020611b31833981519152604482015290519081900360640190fd5b801561060b5761060b610a1e565b6000600954431161061e57600954610620565b435b600854909150610630908561140c565b600855604080516080810182526001600160a01b0394851681526020810195865290810191825260006060820181815260068054600181018255925291517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f600490920291820180546001600160a01b031916919096161790945593517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40840155517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d418301555090517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d4290910155565b60006006838154811061072f57fe5b6000918252602080832086845260078252604080852033865290925292208054600490920290920192508311156107a2576040805162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b604482015290519081900360640190fd5b6107ab84610879565b60006107e582600101546107df64e8d4a510006107d98760030154876000015461146d90919063ffffffff16565b906114c6565b90611508565b90506107f1338261154a565b81546107fd9085611508565b808355600384015461081a9164e8d4a51000916107d9919061146d565b60018301558254610835906001600160a01b031633866116d3565b604080518581529051869133917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360200190a35050505050565b60095481565b60006006828154811061088857fe5b90600052602060002090600402019050806002015443116108a95750610a1b565b8054604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156108f357600080fd5b505afa158015610907573d6000803e3d6000fd5b505050506040513d602081101561091d57600080fd5b5051905080610933575043600290910155610a1b565b6000610943836002015443610c3b565b905060006109706008546107d9866001015461096a6005548761146d90919063ffffffff16565b9061146d565b600154604080516340c10f1960e01b81523060048201526024810184905290519293506001600160a01b03909116916340c10f199160448082019260009290919082900301818387803b1580156109c657600080fd5b505af11580156109da573d6000803e3d6000fd5b50505050610a086109fd846107d964e8d4a510008561146d90919063ffffffff16565b60038601549061140c565b6003850155505043600290920191909155505b50565b60065460005b81811015610a3d57610a3581610879565b600101610a24565b5050565b610a49611408565b6000546001600160a01b03908116911614610a99576040805162461bcd60e51b81526020600482018190526024820152600080516020611b31833981519152604482015290519081900360640190fd5b8015610aa757610aa7610a1e565b610ae482610ade60068681548110610abb57fe5b90600052602060002090600402016001015460085461150890919063ffffffff16565b9061140c565b6008819055508160068481548110610af857fe5b906000526020600020906004020160010181905550505050565b60055481565b610b20611408565b6000546001600160a01b03908116911614610b70576040805162461bcd60e51b81526020600482018190526024820152600080516020611b31833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600181565b6002546001600160a01b03163314610c0a576040805162461bcd60e51b81526020600482015260096024820152686465763a207775743f60b81b604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b60006004548211610c5757610c508284611508565b9050610c94565b6004548310610c6f57610c50600161096a8486611508565b610c50610c876004548461150890919063ffffffff16565b600454610ade9086611508565b92915050565b600760209081526000928352604080842090915290825290208054600182015460028301546003909301549192909160ff808216916101008104821691620100009091041686565b610cea611408565b6000546001600160a01b03908116911614610d3a576040805162461bcd60e51b81526020600482018190526024820152600080516020611b31833981519152604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b038481169190911791829055604051835160009360609316918591819060208401908083835b60208310610d945780518252601f199092019160209182019101610d75565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610df6576040519150601f19603f3d011682016040523d82523d6000602084013e610dfb565b606091505b509150915081610e43576040805162461bcd60e51b815260206004820152600e60248201526d1bdc9858db194e8819985a5b195960921b604482015290519081900360640190fd5b50505050565b610e51611408565b6000546001600160a01b03908116911614610ea1576040805162461bcd60e51b81526020600482018190526024820152600080516020611b31833981519152604482015290519081900360640190fd5b60008111610eeb576040805162461bcd60e51b81526020600482015260126024820152710214f7261636c6564506572426c6f636b2d360741b604482015290519081900360640190fd5b600555565b60008060068481548110610f0057fe5b600091825260208083208784526007825260408085206001600160a01b03898116875290845281862060049586029093016003810154815484516370a0823160e01b81523098810198909852935191985093969395939492909116926370a08231926024808301939192829003018186803b158015610f7e57600080fd5b505afa158015610f92573d6000803e3d6000fd5b505050506040513d6020811015610fa857600080fd5b5051600285015490915043118015610fbf57508015155b1561101f576000610fd4856002015443610c3b565b90506000610ffb6008546107d9886001015461096a6005548761146d90919063ffffffff16565b905061101a611013846107d98464e8d4a5100061146d565b859061140c565b935050505b61104783600101546107df64e8d4a510006107d986886000015461146d90919063ffffffff16565b979650505050505050565b6002546001600160a01b031681565b611069611408565b6000546001600160a01b039081169116146110b9576040805162461bcd60e51b81526020600482018190526024820152600080516020611b31833981519152604482015290519081900360640190fd5b60008481526007602090815260408083206001600160a01b0387168452909152902060038101805460ff191690556001831515141561117e57600154604080516340c10f1960e01b81526001600160a01b03878116600483015260248201869052915191909216916340c10f1991604480830192600092919082900301818387803b15801561114757600080fd5b505af115801561115b573d6000803e3d6000fd5b50505060038201805460ff1961ff00199091166101001716905550600060028201555b826111a45760038101805460ff1962ff0000199091166201000017169055600060028201555b5050505050565b6000600683815481106111ba57fe5b600091825260208083208684526007825260408085203386529092529220600490910290910191506111eb84610879565b80541561122e57600061122082600101546107df64e8d4a510006107d98760030154876000015461146d90919063ffffffff16565b905061122c338261154a565b505b8154611245906001600160a01b0316333086611725565b8054611251908461140c565b808255600383015461126e9164e8d4a51000916107d9919061146d565b6001820155604080518481529051859133917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159181900360200190a350505050565b6000818152600760209081526040808320338452909152812060068054919291849081106112da57fe5b6000918252602090912060038401805460ff1916600117905560049091020190505b505050565b6001546001600160a01b031681565b611318611408565b6000546001600160a01b03908116911614611368576040805162461bcd60e51b81526020600482018190526024820152600080516020611b31833981519152604482015290519081900360640190fd5b6001600160a01b0381166113ad5760405162461bcd60e51b8152600401808060200182810382526026815260200180611aea6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b600082820183811015611466576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008261147c57506000610c94565b8282028284828161148957fe5b04146114665760405162461bcd60e51b8152600401808060200182810382526021815260200180611b106021913960400191505060405180910390fd5b600061146683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061177f565b600061146683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611821565b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561159557600080fd5b505afa1580156115a9573d6000803e3d6000fd5b505050506040513d60208110156115bf57600080fd5b5051905080821115611653576001546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561162157600080fd5b505af1158015611635573d6000803e3d6000fd5b505050506040513d602081101561164b57600080fd5b506112fc9050565b6001546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018690529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156116a957600080fd5b505af11580156116bd573d6000803e3d6000fd5b505050506040513d60208110156111a457600080fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526112fc90849061187b565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610e4390859061187b565b6000818361180b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156117d05781810151838201526020016117b8565b50505050905090810190601f1680156117fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161181757fe5b0495945050505050565b600081848411156118735760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156117d05781810151838201526020016117b8565b505050900390565b60606118d0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661192c9092919063ffffffff16565b8051909150156112fc578080602001905160208110156118ef57600080fd5b50516112fc5760405162461bcd60e51b815260040180806020018281038252602a815260200180611b51602a913960400191505060405180910390fd5b606061193b8484600085611943565b949350505050565b606061194e85611ab0565b61199f576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106119de5780518252601f1990920191602091820191016119bf565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611a40576040519150601f19603f3d011682016040523d82523d6000602084013e611a45565b606091505b50915091508115611a5957915061193b9050565b805115611a695780518082602001fd5b60405162461bcd60e51b81526020600482018181528651602484015286518793919283926044019190850190808383600083156117d05781810151838201526020016117b8565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061193b57505015159291505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122035d0810198accbe7f371126ad3eaf3a436bd9e6af927293e08d942e8abea464b64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000952e72dbfa10c7de115dd8a82817c885633044c6000000000000000000000000abdcf5ef6eda8fa33c4c23a3cedfaf4d5284b76e0000000000000000000000000000000000000000000000001bc16d674ec8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _oracled (address): 0x952E72DbfA10C7De115dD8A82817c885633044c6
Arg [1] : _devaddr (address): 0xabDcf5EF6Eda8fA33C4C23a3CeDfAf4d5284b76e
Arg [2] : _oracledPerBlock (uint256): 2000000000000000000
Arg [3] : _startBlock (uint256): 0
Arg [4] : _bonusEndBlock (uint256): 0
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000952e72dbfa10c7de115dd8a82817c885633044c6
Arg [1] : 000000000000000000000000abdcf5ef6eda8fa33c4c23a3cedfaf4d5284b76e
Arg [2] : 0000000000000000000000000000000000000000000000001bc16d674ec80000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
30662:9484:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33356:89;;;:::i;:::-;;;;;;;;;;;;;;;;32514:26;;;;;;;;;;;;;;;;-1:-1:-1;32514:26:0;;:::i;:::-;;;;-1:-1:-1;;;;;32514:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32749:34;;;:::i;32282:28::-;;;:::i;33608:452::-;;;;;;;;;;;;;;;;-1:-1:-1;33608:452:0;;;-1:-1:-1;;;;;33608:452:0;;;;;;;;;;;;:::i;:::-;;37807:619;;;;;;;;;;;;;;;;-1:-1:-1;37807:619:0;;;;;;;:::i;32839:25::-;;;:::i;36212:689::-;;;;;;;;;;;;;;;;-1:-1:-1;36212:689:0;;:::i;35739:160::-;;;:::i;34155:280::-;;;;;;;;;;;;;;;;-1:-1:-1;34155:280:0;;;;;;;;;;;;;;:::i;32355:30::-;;;:::i;19430:138::-;;;:::i;32438:44::-;;;:::i;36957:119::-;;;;;;;;;;;;;;;;-1:-1:-1;36957:119:0;-1:-1:-1;;;;;36957:119:0;;:::i;18828:73::-;;;:::i;:::-;;;;-1:-1:-1;;;;;18828:73:0;;;;;;;;;;;;;;34509:351;;;;;;;;;;;;;;;;-1:-1:-1;34509:351:0;;;;;;;:::i;32592:66::-;;;;;;;;;;;;;;;;-1:-1:-1;32592:66:0;;;;;;-1:-1:-1;;;;;32592:66:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35930:210;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35930:210:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35930:210:0;;-1:-1:-1;35930:210:0;;-1:-1:-1;;;;;35930:210:0:i;38818:176::-;;;;;;;;;;;;;;;;-1:-1:-1;38818:176:0;;:::i;34922:738::-;;;;;;;;;;;;;;;;-1:-1:-1;34922:738:0;;;;;;-1:-1:-1;;;;;34922:738:0;;:::i;32165:22::-;;;:::i;39564:579::-;;;;;;;;;;;;;;;;-1:-1:-1;39564:579:0;;;-1:-1:-1;;;;;39564:579:0;;;;;;;;;;;;;;;;;:::i;37142:615::-;;;;;;;;;;;;;;;;-1:-1:-1;37142:615:0;;;;;;;:::i;39047:493::-;;;;;;;;;;;;;;;;-1:-1:-1;39047:493:0;;:::i;32118:23::-;;;:::i;19713:230::-;;;;;;;;;;;;;;;;-1:-1:-1;19713:230:0;-1:-1:-1;;;;;19713:230:0;;:::i;33356:89::-;33424:8;:15;33356:89;:::o;32514:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32514:26:0;;;;-1:-1:-1;32514:26:0;;;:::o;32749:34::-;;;;:::o;32282:28::-;;;;:::o;33608:452::-;19032:12;:10;:12::i;:::-;19022:6;;-1:-1:-1;;;;;19022:6:0;;;:22;;;19014:67;;;;;-1:-1:-1;;;19014:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19014:67:0;;;;;;;;;;;;;;;33705:11:::1;33701:51;;;33727:17;:15;:17::i;:::-;33758:23;33799:10;;33784:12;:25;:53;;33827:10;;33784:53;;;33812:12;33784:53;33862:15;::::0;33758:79;;-1:-1:-1;33862:32:0::1;::::0;33882:11;33862:19:::1;:32::i;:::-;33844:15;:50:::0;33915:138:::1;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;33915:138:0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;33915:138:0;;;;;;33901:8:::1;:153:::0;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;33901:153:0::1;::::0;;;::::1;;::::0;;;;;;;;;;;;;;-1:-1:-1;33901:153:0;;;;;;;33608:452::o;37807:619::-;37870:21;37894:8;37903:4;37894:14;;;;;;;;;;;;;;;;37939;;;:8;:14;;;;;;37954:10;37939:26;;;;;;;37980:11;;37894:14;;;;;;;;-1:-1:-1;37980:22:0;-1:-1:-1;37980:22:0;37972:53;;;;;-1:-1:-1;;;37972:53:0;;;;;;;;;;;;-1:-1:-1;;;37972:53:0;;;;;;;;;;;;;;;38032:16;38043:4;38032:10;:16::i;:::-;38055:15;38073:71;38128:4;:15;;;38073:50;38118:4;38073:40;38089:4;:23;;;38073:4;:11;;;:15;;:40;;;;:::i;:::-;:44;;:50::i;:::-;:54;;:71::i;:::-;38055:89;;38151:40;38171:10;38183:7;38151:19;:40::i;:::-;38212:11;;:24;;38228:7;38212:15;:24::i;:::-;38198:38;;;38277:23;;;;38261:50;;38306:4;;38261:40;;38198:38;38261:15;:40::i;:50::-;38243:15;;;:68;38318:12;;:55;;-1:-1:-1;;;;;38318:12:0;38352:10;38365:7;38318:25;:55::i;:::-;38385:35;;;;;;;;38406:4;;38394:10;;38385:35;;;;;;;;;37807:619;;;;;:::o;32839:25::-;;;;:::o;36212:689::-;36260:21;36284:8;36293:4;36284:14;;;;;;;;;;;;;;;;;;36260:38;;36325:4;:20;;;36309:12;:36;36305:65;;36356:7;;;36305:65;36395:12;;:37;;;-1:-1:-1;;;36395:37:0;;36426:4;36395:37;;;;;;36376:16;;-1:-1:-1;;;;;36395:12:0;;:22;;:37;;;;;;;;;;;;;;:12;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36395:37:0;;-1:-1:-1;36443:13:0;36439:86;;-1:-1:-1;36490:12:0;36467:20;;;;:35;36511:7;;36439:86;36531:18;36552:49;36566:4;:20;;;36588:12;36552:13;:49::i;:::-;36531:70;;36608:21;36632:73;36689:15;;36632:52;36668:4;:15;;;36632:31;36647:15;;36632:10;:14;;:31;;;;:::i;:::-;:35;;:52::i;:73::-;36712:7;;:42;;;-1:-1:-1;;;36712:42:0;;36733:4;36712:42;;;;;;;;;;;;36608:97;;-1:-1:-1;;;;;;36712:7:0;;;;:12;;:42;;;;;:7;;:42;;;;;;;;:7;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36787:66;36815:37;36843:8;36815:23;36833:4;36815:13;:17;;:23;;;;:::i;:37::-;36787:23;;;;;:27;:66::i;:::-;36761:23;;;:92;-1:-1:-1;;36883:12:0;36860:20;;;;:35;;;;-1:-1:-1;36212:689:0;;:::o;35739:160::-;35797:8;:15;35780:14;35819:75;35847:6;35841:3;:12;35819:75;;;35871:15;35882:3;35871:10;:15::i;:::-;35855:5;;35819:75;;;;35739:160;:::o;34155:280::-;19032:12;:10;:12::i;:::-;19022:6;;-1:-1:-1;;;;;19022:6:0;;;:22;;;19014:67;;;;;-1:-1:-1;;;19014:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19014:67:0;;;;;;;;;;;;;;;34249:11:::1;34245:51;;;34271:17;:15;:17::i;:::-;34320:63;34371:11;34320:46;34340:8;34349:4;34340:14;;;;;;;;;;;;;;;;;;:25;;;34320:15;;:19;;:46;;;;:::i;:::-;:50:::0;::::1;:63::i;:::-;34302:15;:81;;;;34418:11;34390:8;34399:4;34390:14;;;;;;;;;;;;;;;;;;:25;;:39;;;;34155:280:::0;;;:::o;32355:30::-;;;;:::o;19430:138::-;19032:12;:10;:12::i;:::-;19022:6;;-1:-1:-1;;;;;19022:6:0;;;:22;;;19014:67;;;;;-1:-1:-1;;;19014:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19014:67:0;;;;;;;;;;;;;;;19533:1:::1;19517:6:::0;;19496:40:::1;::::0;-1:-1:-1;;;;;19517:6:0;;::::1;::::0;19496:40:::1;::::0;19533:1;;19496:40:::1;19560:1;19543:19:::0;;-1:-1:-1;;;;;;19543:19:0::1;::::0;;19430:138::o;32438:44::-;32481:1;32438:44;:::o;36957:119::-;37024:7;;-1:-1:-1;;;;;37024:7:0;37010:10;:21;37002:43;;;;;-1:-1:-1;;;37002:43:0;;;;;;;;;;;;-1:-1:-1;;;37002:43:0;;;;;;;;;;;;;;;37052:7;:18;;-1:-1:-1;;;;;;37052:18:0;-1:-1:-1;;;;;37052:18:0;;;;;;;;;;36957:119::o;18828:73::-;18866:7;18889:6;-1:-1:-1;;;;;18889:6:0;18828:73;:::o;34509:351::-;34581:7;34608:13;;34601:3;:20;34597:258;;34639:14;:3;34647:5;34639:7;:14::i;:::-;34632:21;;;;34597:258;34680:13;;34671:5;:22;34667:188;;34711:36;32481:1;34711:14;:3;34719:5;34711:7;:14::i;34667:188::-;34777:70;34816:22;34824:13;;34816:3;:7;;:22;;;;:::i;:::-;34777:13;;:24;;34795:5;34777:17;:24::i;34667:188::-;34509:351;;;;:::o;32592:66::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35930:210::-;19032:12;:10;:12::i;:::-;19022:6;;-1:-1:-1;;;;;19022:6:0;;;:22;;;19014:67;;;;;-1:-1:-1;;;19014:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19014:67:0;;;;;;;;;;;;;;;36010:6:::1;:16:::0;;-1:-1:-1;;;;;;36010:16:0::1;-1:-1:-1::0;;;;;36010:16:0;;::::1;::::0;;;::::1;::::0;;;;36075:18:::1;::::0;;;-1:-1:-1;;36048:23:0::1;::::0;36075:6:::1;::::0;:18;;;;::::1;::::0;::::1;::::0;;;;::::1;;;;;;::::0;;;;-1:-1:-1;;36075:18:0;;;;::::1;::::0;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36033:60;;;;36108:7;36100:34;;;::::0;;-1:-1:-1;;;36100:34:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;36100:34:0;;;;;;;;;;;;;::::1;;19088:1;;35930:210:::0;;:::o;38818:176::-;19032:12;:10;:12::i;:::-;19022:6;;-1:-1:-1;;;;;19022:6:0;;;:22;;;19014:67;;;;;-1:-1:-1;;;19014:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19014:67:0;;;;;;;;;;;;;;;38923:1:::1;38904:16;:20;38896:51;;;::::0;;-1:-1:-1;;;38896:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;38896:51:0;;;;;;;;;;;;;::::1;;38954:15;:34:::0;38818:176::o;34922:738::-;34998:7;35014:21;35038:8;35047:4;35038:14;;;;;;;;;;;;;;;;35083;;;:8;:14;;;;;;-1:-1:-1;;;;;35083:21:0;;;;;;;;;;;35038:14;;;;;;;35140:23;;;;35189:12;;:37;;-1:-1:-1;;;35189:37:0;;35220:4;35189:37;;;;;;;;;35038:14;;-1:-1:-1;35083:21:0;;35140:23;;35038:14;;35189:12;;;;;:22;;:37;;;;;35038:14;;35189:37;;;;;:12;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35189:37:0;35252:20;;;;35189:37;;-1:-1:-1;35237:12:0;:35;:52;;;;-1:-1:-1;35276:13:0;;;35237:52;35233:342;;;35300:18;35321:49;35335:4;:20;;;35357:12;35321:13;:49::i;:::-;35300:70;;35379:21;35403:73;35460:15;;35403:52;35439:4;:15;;;35403:31;35418:15;;35403:10;:14;;:31;;;;:::i;:73::-;35379:97;-1:-1:-1;35506:61:0;35529:37;35557:8;35529:23;35379:97;35547:4;35529:17;:23::i;:37::-;35506:18;;:22;:61::i;:::-;35485:82;;35233:342;;;35588:66;35638:4;:15;;;35588:45;35628:4;35588:35;35604:18;35588:4;:11;;;:15;;:35;;;;:::i;:66::-;35581:73;34922:738;-1:-1:-1;;;;;;;34922:738:0:o;32165:22::-;;;-1:-1:-1;;;;;32165:22:0;;:::o;39564:579::-;19032:12;:10;:12::i;:::-;19022:6;;-1:-1:-1;;;;;19022:6:0;;;:22;;;19014:67;;;;;-1:-1:-1;;;19014:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19014:67:0;;;;;;;;;;;;;;;39673:21:::1;39697:14:::0;;;:8:::1;:14;::::0;;;;;;;-1:-1:-1;;;;;39697:21:0;::::1;::::0;;;;;;;39729:16:::1;::::0;::::1;:24:::0;;-1:-1:-1;;39729:24:0::1;::::0;;39819:4:::1;39811:12:::0;::::1;;;39808:178;;;39843:7;::::0;:28:::1;::::0;;-1:-1:-1;;;39843:28:0;;-1:-1:-1;;;;;39843:28:0;;::::1;;::::0;::::1;::::0;;;;;;;;;:7;;;::::1;::::0;:12:::1;::::0;:28;;;;;:7:::1;::::0;:28;;;;;;;:7;;:28;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;39882:17:0::1;::::0;::::1;:24:::0;;-1:-1:-1;;;;39882:24:0;;::::1;;;39917;::::0;;-1:-1:-1;39882:24:0;39952:18:::1;::::0;::::1;:22:::0;39808:178:::1;39997:13:::0;39994:137:::1;;40030:16;::::0;::::1;:23:::0;;-1:-1:-1;;;;40030:23:0;;::::1;::::0;::::1;40064:24;::::0;;40030:23;:16:::1;40099:18:::0;::::1;:22:::0;39994:137:::1;19088:1;39564:579:::0;;;;:::o;37142:615::-;37204:21;37228:8;37237:4;37228:14;;;;;;;;;;;;;;;;37273;;;:8;:14;;;;;;37288:10;37273:26;;;;;;;37228:14;;;;;;;;-1:-1:-1;37306:16:0;37282:4;37306:10;:16::i;:::-;37333:11;;:15;37329:176;;37359:15;37377:71;37432:4;:15;;;37377:50;37422:4;37377:40;37393:4;:23;;;37377:4;:11;;;:15;;:40;;;;:::i;:71::-;37359:89;;37457:40;37477:10;37489:7;37457:19;:40::i;:::-;37329:176;;37511:12;;:74;;-1:-1:-1;;;;;37511:12:0;37549:10;37570:4;37577:7;37511:29;:74::i;:::-;37606:11;;:24;;37622:7;37606:15;:24::i;:::-;37592:38;;;37671:23;;;;37655:50;;37700:4;;37655:40;;37592:38;37655:15;:40::i;:50::-;37637:15;;;:68;37717:34;;;;;;;;37737:4;;37725:10;;37717:34;;;;;;;;;37142:615;;;;:::o;39047:493::-;39108:21;39132:14;;;:8;:14;;;;;;;;39147:10;39132:26;;;;;;;39189:8;:14;;39132:26;;39108:21;39141:4;;39189:14;;;;;;;;;;;;;;39214:16;;;:23;;-1:-1:-1;;39214:23:0;39233:4;39214:23;;;39189:14;;;;;;-1:-1:-1;39210:329:0;39047:493;;;:::o;32118:23::-;;;-1:-1:-1;;;;;32118:23:0;;:::o;19713:230::-;19032:12;:10;:12::i;:::-;19022:6;;-1:-1:-1;;;;;19022:6:0;;;:22;;;19014:67;;;;;-1:-1:-1;;;19014:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19014:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;19798:22:0;::::1;19790:73;;;;-1:-1:-1::0;;;19790:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19896:6;::::0;;19875:38:::1;::::0;-1:-1:-1;;;;;19875:38:0;;::::1;::::0;19896:6;::::1;::::0;19875:38:::1;::::0;::::1;19920:6;:17:::0;;-1:-1:-1;;;;;;19920:17:0::1;-1:-1:-1::0;;;;;19920:17:0;;;::::1;::::0;;;::::1;::::0;;19713:230::o;638:100::-;722:10;638:100;:::o;4383:167::-;4441:7;4469:5;;;4489:6;;;;4481:46;;;;;-1:-1:-1;;;4481:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4543:1;4383:167;-1:-1:-1;;;4383:167:0:o;5639:431::-;5697:7;5926:6;5922:37;;-1:-1:-1;5950:1:0;5943:8;;5922:37;5979:5;;;5983:1;5979;:5;:1;5999:5;;;;;:10;5991:56;;;;-1:-1:-1;;;5991:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6520:126;6578:7;6601:39;6605:1;6608;6601:39;;;;;;;;;;;;;;;;;:3;:39::i;4813:130::-;4871:7;4894:43;4898:1;4901;4894:43;;;;;;;;;;;;;;;;;:3;:43::i;38543:269::-;38639:7;;:32;;;-1:-1:-1;;;38639:32:0;;38665:4;38639:32;;;;;;38618:18;;-1:-1:-1;;;;;38639:7:0;;:17;;:32;;;;;;;;;;;;;;:7;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38639:32:0;;-1:-1:-1;38682:20:0;;;38678:129;;;38713:7;;:33;;;-1:-1:-1;;;38713:33:0;;-1:-1:-1;;;;;38713:33:0;;;;;;;;;;;;;;;:7;;;;;:16;;:33;;;;;;;;;;;;;;:7;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38678:129:0;;-1:-1:-1;38678:129:0;;38769:7;;:30;;;-1:-1:-1;;;38769:30:0;;-1:-1:-1;;;;;38769:30:0;;;;;;;;;;;;;;;:7;;;;;:16;;:30;;;;;;;;;;;;;;:7;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14919:171;15025:58;;;-1:-1:-1;;;;;15025:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15025:58:0;-1:-1:-1;;;15025:58:0;;;14998:86;;15018:5;;14998:19;:86::i;15096:199::-;15220:68;;;-1:-1:-1;;;;;15220:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15220:68:0;-1:-1:-1;;;15220:68:0;;;15193:96;;15213:5;;15193:19;:96::i;7116:260::-;7202:7;7233:12;7226:5;7218:28;;;;-1:-1:-1;;;7218:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7253:9;7269:1;7265;:5;;;;;;;7116:260;-1:-1:-1;;;;;7116:260:0:o;5224:178::-;5310:7;5342:12;5334:6;;;;5326:29;;;;-1:-1:-1;;;5326:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5374:5:0;;;5224:178::o;17120:723::-;17528:23;17554:69;17582:4;17554:69;;;;;;;;;;;;;;;;;17562:5;-1:-1:-1;;;;;17554:27:0;;;:69;;;;;:::i;:::-;17634:17;;17528:95;;-1:-1:-1;17634:21:0;17630:208;;17764:10;17753:30;;;;;;;;;;;;;;;-1:-1:-1;17753:30:0;17745:85;;;;-1:-1:-1;;;17745:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12181:190;12284:12;12312:53;12335:6;12343:4;12349:1;12352:12;12312:22;:53::i;:::-;12305:60;12181:190;-1:-1:-1;;;;12181:190:0:o;13496:863::-;13626:12;13655:18;13666:6;13655:10;:18::i;:::-;13647:60;;;;;-1:-1:-1;;;13647:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13773:12;13787:23;13814:6;-1:-1:-1;;;;;13814:11:0;13834:8;13845:4;13814:36;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13814:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13772:78;;;;13861:7;13857:497;;;13886:10;-1:-1:-1;13879:17:0;;-1:-1:-1;13879:17:0;13857:497;13984:17;;:21;13980:367;;14213:10;14207:17;14264:15;14251:10;14247:2;14243:19;14236:44;14171:120;14317:20;;-1:-1:-1;;;14317:20:0;;;;;;;;;;;;;;;;;14324:12;;14317:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9208:585;9268:4;9708:20;;9559:66;9744:23;;;;;;:42;;-1:-1:-1;;9771:15:0;;;9736:51;-1:-1:-1;;9208:585:0:o
Swarm Source
ipfs://35d0810198accbe7f371126ad3eaf3a436bd9e6af927293e08d942e8abea464b
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.