Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 250 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 14892102 | 356 days ago | IN | 0 ETH | 0.00000018 | ||||
| Approve | 10449808 | 459 days ago | IN | 0 ETH | 0.00000012 | ||||
| Transfer | 9713735 | 476 days ago | IN | 0 ETH | 0.00000009 | ||||
| Approve | 9710788 | 476 days ago | IN | 0 ETH | 0.00000014 | ||||
| Approve | 8500091 | 504 days ago | IN | 0 ETH | 0.00000012 | ||||
| Transfer | 8068817 | 514 days ago | IN | 0 ETH | 0.00000122 | ||||
| Approve | 7723523 | 522 days ago | IN | 0 ETH | 0.00000036 | ||||
| Approve | 7553560 | 526 days ago | IN | 0 ETH | 0.00000041 | ||||
| Approve | 7468392 | 528 days ago | IN | 0 ETH | 0.00000019 | ||||
| Transfer | 7467258 | 528 days ago | IN | 0 ETH | 0.0000001 | ||||
| Transfer | 7467199 | 528 days ago | IN | 0 ETH | 0.0000001 | ||||
| Transfer | 7467167 | 528 days ago | IN | 0 ETH | 0.00000014 | ||||
| Transfer | 7467157 | 528 days ago | IN | 0 ETH | 0.0000001 | ||||
| Transfer | 7467134 | 528 days ago | IN | 0 ETH | 0.0000001 | ||||
| Transfer | 7467119 | 528 days ago | IN | 0 ETH | 0.0000001 | ||||
| Transfer | 7467108 | 528 days ago | IN | 0 ETH | 0.00000014 | ||||
| Transfer | 7467096 | 528 days ago | IN | 0 ETH | 0.00000014 | ||||
| Transfer | 7467087 | 528 days ago | IN | 0 ETH | 0.0000001 | ||||
| Transfer | 7467077 | 528 days ago | IN | 0 ETH | 0.00000013 | ||||
| Transfer | 7467066 | 528 days ago | IN | 0 ETH | 0.00000013 | ||||
| Transfer | 7467057 | 528 days ago | IN | 0 ETH | 0.0000001 | ||||
| Transfer | 7467047 | 528 days ago | IN | 0 ETH | 0.0000001 | ||||
| Transfer | 7467037 | 528 days ago | IN | 0 ETH | 0.0000001 | ||||
| Transfer | 7467027 | 528 days ago | IN | 0 ETH | 0.00000011 | ||||
| Transfer | 7467018 | 528 days ago | IN | 0 ETH | 0.00000014 |
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 228490 | 695 days ago | 1 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
BlastNyanToken
Compiler Version
v0.8.8+commit.dddeac2f
Contract Source Code (Solidity)
/**
*Submitted for verification at blastscan.io on 2024-03-01
*/
/*
⠀⠀⠀⠀⠀⠀⢀⣀⣀⣀⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣀⣀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⣾⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠀⠀⠀⠀⢀⠀⠈⡇⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⣿⠀⠁⠀⠘⠁⠀⠀⠀⠀⠀⣀⡀⠀⠀⠀⠈⠀⠀⡇⠀⠀⠀⠀
⣀⣀⣀⠀⠀⠀⣿⠀⠀⠀⠀⠀⠄⠀⠀⠸⢰⡏⠉⠳⣄⠰⠀⠀⢰⣷⠶⠛⣧⠀
⢻⡀⠈⠙⠲⡄⣿⠀⠀⠀⠀⠀⠀⠀⠠⠀⢸⠀⠀⠀⠈⠓⠒⠒⠛⠁⠀⠀⣿⠀
⠀⠻⣄⠀⠀⠙⣿⠀⠀⠀⠈⠁⠀⢠⠄⣰⠟⠀⢀⡔⢠⠀⠀⠀⠀⣠⠠⡄⠘⢧
⠀⠀⠈⠛⢦⣀⣿⠀⠀⢠⡆⠀⠀⠈⠀⣯⠀⠀⠈⠛⠛⠀⠠⢦⠄⠙⠛⠃⠀⢸
⠀⠀⠀⠀⠀⠉⣿⠀⠀⠀⢠⠀⠀⢠⠀⠹⣆⠀⠀⠀⠢⢤⠠⠞⠤⡠⠄⠀⢀⡾
⠀⠀⠀⠀⠀⢀⡿⠦⢤⣤⣤⣤⣤⣤⣤⣤⡼⣷⠶⠤⢤⣤⣤⡤⢤⡤⠶⠖⠋⠀
⠀⠀⠀⠀⠀⠸⣤⡴⠋⠸⣇⣠⠼⠁⠀⠀⠀⠹⣄⣠⠞⠀⢾⡀⣠⠃⠀⠀⠀⠀
____ _ _ _ _ __ __ _ _
| _ \ | | | | | \ | |\ \ / / /\ | \ | |
| |_) || | __ _ ___ | |_ | \| | \ \_/ / / \ | \| | ___ ___ _ __ ___
| _ < | | / _` |/ __|| __|| . ` | \ / / /\ \ | . ` | / __|/ _ \ | '_ ` _ \
| |_) || || (_| |\__ \| |_ | |\ | | | / ____ \ | |\ | _| (__| (_) || | | | | |
|____/ |_| \__,_||___/ \__||_| \_| |_|/_/ \_\|_| \_|(_)\___|\___/ |_| |_| |_|
This Little Kitty Has Endless YIELD
*/
// File: @openzeppelin\contracts\token\ERC20\IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @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 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 `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount) external returns (bool);
}
// File: @openzeppelin\contracts\token\ERC20\extensions\IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
// File: @openzeppelin\contracts\utils\Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.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 meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: @openzeppelin\contracts\token\ERC20\ERC20.sol
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)
pragma solidity ^0.8.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 {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* The default value of {decimals} is 18. To change this, you should override
* this function so it returns a different value.
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead 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, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* All two of these values are immutable: they can only be set once during
* construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual override 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 default value returned by this function, unless
* it's overridden.
*
* 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 virtual override returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address to, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_transfer(owner, to, 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}.
*
* NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
* `transferFrom`. This is semantically equivalent to an infinite approval.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_approve(owner, 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}.
*
* NOTE: Does not update the allowance if the current allowance
* is the maximum `uint256`.
*
* Requirements:
*
* - `from` and `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
* - the caller must have allowance for ``from``'s tokens of at least
* `amount`.
*/
function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, amount);
_transfer(from, to, amount);
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) {
address owner = _msgSender();
_approve(owner, spender, allowance(owner, spender) + 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) {
address owner = _msgSender();
uint256 currentAllowance = allowance(owner, spender);
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
/**
* @dev Moves `amount` of tokens from `from` to `to`.
*
* This 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:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
*/
function _transfer(address from, address to, uint256 amount) internal virtual {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(from, to, amount);
uint256 fromBalance = _balances[from];
require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[from] = fromBalance - amount;
// Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
// decrementing then incrementing.
_balances[to] += amount;
}
emit Transfer(from, to, amount);
_afterTokenTransfer(from, to, 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:
*
* - `account` 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 += amount;
unchecked {
// Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
_balances[account] += amount;
}
emit Transfer(address(0), account, amount);
_afterTokenTransfer(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);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
// Overflow not possible: amount <= accountBalance <= totalSupply.
_totalSupply -= amount;
}
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(address owner, address spender, uint256 amount) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Updates `owner` s allowance for `spender` based on spent `amount`.
*
* Does not update the allowance amount in case of infinite allowance.
* Revert if not enough allowance is available.
*
* Might emit an {Approval} event.
*/
function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(currentAllowance >= amount, "ERC20: insufficient allowance");
unchecked {
_approve(owner, spender, currentAllowance - amount);
}
}
}
/**
* @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 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 {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* has been transferred to `to`.
* - when `from` is zero, `amount` tokens have been minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens have been 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 _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}
// File: @openzeppelin\contracts\access\Ownable.sol
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(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");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: @uniswap\v2-periphery\contracts\interfaces\IUniswapV2Router01.sol
pragma solidity >=0.6.2;
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB);
function removeLiquidityETH(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountToken, uint amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountA, uint amountB);
function removeLiquidityETHWithPermit(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountToken, uint amountETH);
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapTokensForExactTokens(
uint amountOut,
uint amountInMax,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
// File: @uniswap\v2-periphery\contracts\interfaces\IUniswapV2Router02.sol
pragma solidity >=0.6.2;
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
// File: @uniswap\v2-core\contracts\interfaces\IUniswapV2Factory.sol
pragma solidity >=0.5.0;
interface IUniswapV2Factory {
event PairCreated(address indexed token0, address indexed token1, address pair, uint);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(address tokenA, address tokenB) external view returns (address pair);
function allPairs(uint) external view returns (address pair);
function allPairsLength() external view returns (uint);
function createPair(address tokenA, address tokenB) external returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
// File: @uniswap\v2-core\contracts\interfaces\IUniswapV2Pair.sol
pragma solidity >=0.5.0;
interface IUniswapV2Pair {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint value) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint);
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
event Mint(address indexed sender, uint amount0, uint amount1);
event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
event Swap(
address indexed sender,
uint amount0In,
uint amount1In,
uint amount0Out,
uint amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
function price0CumulativeLast() external view returns (uint);
function price1CumulativeLast() external view returns (uint);
function kLast() external view returns (uint);
function mint(address to) external returns (uint liquidity);
function burn(address to) external returns (uint amount0, uint amount1);
function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
// File: contracts\interface\IBlast.sol
pragma solidity ^0.8.7;
enum YieldMode {
AUTOMATIC,
VOID,
CLAIMABLE
}
enum GasMode {
VOID,
CLAIMABLE
}
interface IBlast {
// configure
function configureContract(address contractAddress, YieldMode _yield, GasMode gasMode, address governor) external;
function configure(YieldMode _yield, GasMode gasMode, address governor) external;
function configure(YieldMode) external returns (uint256);
// base configuration options
function configureClaimableYield() external;
function configureClaimableYieldOnBehalf(address contractAddress) external;
function configureAutomaticYield() external;
function configureAutomaticYieldOnBehalf(address contractAddress) external;
function configureVoidYield() external;
function configureVoidYieldOnBehalf(address contractAddress) external;
function configureClaimableGas() external;
function configureClaimableGasOnBehalf(address contractAddress) external;
function configureVoidGas() external;
function configureVoidGasOnBehalf(address contractAddress) external;
function configureGovernor(address _governor) external;
function configureGovernorOnBehalf(address _newGovernor, address contractAddress) external;
// claim yield
function claimYield(address contractAddress, address recipientOfYield, uint256 amount) external returns (uint256);
function claimAllYield(address contractAddress, address recipientOfYield) external returns (uint256);
// claim gas
function claimAllGas(address contractAddress, address recipientOfGas) external returns (uint256);
function claimGasAtMinClaimRate(address contractAddress, address recipientOfGas, uint256 minClaimRateBips) external returns (uint256);
function claimMaxGas(address contractAddress, address recipientOfGas) external returns (uint256);
function claimGas(address contractAddress, address recipientOfGas, uint256 gasToClaim, uint256 gasSecondsToConsume) external returns (uint256);
// read functions
function readClaimableYield(address contractAddress) external view returns (uint256);
function readYieldConfiguration(address contractAddress) external view returns (uint8);
function readGasParams(address contractAddress) external view returns (uint256 etherSeconds, uint256 etherBalance, uint256 lastUpdated, GasMode);
//Other Functions
function getClaimableAmount(address account) external view returns (uint256);
function claim(address recipient, uint256 amount) external returns (uint256);
}
// File: contracts\BlastNyanToken.sol
pragma solidity ^0.8.7;
interface IStaking {
function distribute() external;
}
contract BlastNyanToken is ERC20, Ownable {
IBlast public constant BLAST = IBlast(0x4300000000000000000000000000000000000002);
IUniswapV2Router02 public uniswapV2Router;
address public immutable uniswapV2Pair;
address public constant deadAddress = address(0xdead);
address public WETH;
bool private swapping;
address public revWallet;
uint256 public swapTokensAtAmount;
bool public limitsInEffect = true;
bool public feeDistroEnabled = false;
bool public swapBackEnabled = false;
bool public liquidityAdded = false;
uint256 public totalFees;
/******************/
// exclude from fees
mapping(address => bool) public _isExcludedFromFees;
// used for other v2 pairs beyond the main thruster pair
mapping(address => bool) public isDexPair;
event ExcludeFromFees(address indexed account, bool isExcluded);
event AddDexPair(address indexed account, bool isPair);
event revWalletUpdated(
address indexed newWallet,
address indexed oldWallet
);
constructor(address _router) ERC20("Blast NYAN", "blNYAN") {
IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_router);
WETH = _uniswapV2Router.WETH();
uniswapV2Router = _uniswapV2Router;
address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
.createPair(WETH, address(this));
uniswapV2Pair = _uniswapV2Pair;
isDexPair[_uniswapV2Pair] = true;
uint256 totalSupply = 500000 ether;
swapTokensAtAmount = (totalSupply * 1) / 100000; // 0.001% swap wallet
totalFees = 1000;
revWallet = owner(); // set as dev wallet
// exclude from paying fees or having max transaction amount
excludeFromFees(owner(), true);
excludeFromFees(address(uniswapV2Router), true);
excludeFromFees(address(this), true);
excludeFromFees(address(0xdead), true);
excludeFromFees(address(0), true);
/*
_mint is an internal function in ERC20.sol that is only called here,
and CANNOT be called ever again
*/
_mint(msg.sender, totalSupply);
BLAST.configureClaimableGas();
IBlast(WETH).configure(YieldMode.AUTOMATIC);
}
receive() external payable {}
// remove limits after token is stable
function removeLimits() external onlyOwner returns (bool) {
limitsInEffect = false;
return true;
}
function addDexPair(address pair, bool state) external onlyOwner {
isDexPair[pair] = state;
emit AddDexPair(pair, state);
}
// change the minimum amount of tokens to sell from fees
function updateSwapTokensAtAmount(
uint256 newAmount
) external onlyOwner returns (bool) {
require(
newAmount >= (totalSupply() * 1) / 100000,
"Swap amount cannot be lower than 0.001% total supply."
);
require(
newAmount <= (totalSupply() * 5) / 1000,
"Swap amount cannot be higher than 0.5% total supply."
);
swapTokensAtAmount = newAmount;
return true;
}
function updateFees(uint256 _totalFees) external onlyOwner {
totalFees = _totalFees;
require(totalFees <= 1250, "Must keep fees at 12.5% or less");
}
function excludeFromFees(address account, bool excluded) public onlyOwner {
_isExcludedFromFees[account] = excluded;
emit ExcludeFromFees(account, excluded);
}
function updateRevWallet(address newRevWallet) external onlyOwner {
emit revWalletUpdated(newRevWallet, revWallet);
revWallet = newRevWallet;
}
function isExcludedFromFees(address account) public view returns (bool) {
return _isExcludedFromFees[account];
}
function _transfer(
address from,
address to,
uint256 amount
) internal override {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
if (amount == 0) {
super._transfer(from, to, 0);
return;
}
uint256 contractTokenBalance = balanceOf(address(this));
bool canSwap = contractTokenBalance >= swapTokensAtAmount;
if (
canSwap &&
!swapping &&
to == uniswapV2Pair &&
!_isExcludedFromFees[from] &&
!_isExcludedFromFees[to]
) {
swapping = true;
swapBack();
swapping = false;
}
bool takeFee = !swapping;
// if any account belongs to _isExcludedFromFee account then remove the fee
if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
takeFee = false;
}
uint256 fees = 0;
// only take fees on buys/sells, do not take on wallet transfers
if (takeFee) {
// on sell
if (isDexPair[to] && totalFees > 0) {
fees = (amount * totalFees) / 10000;
}
// on buy
else if (isDexPair[from] && totalFees > 0) {
fees = (amount * totalFees) / 10000;
}
if (fees > 0) {
super._transfer(from, address(this), fees);
}
amount -= fees;
}
super._transfer(from, to, amount);
}
function handlePendingFees() external {
swapBack();
if (!feeDistroEnabled) {
try IStaking(revWallet).distribute() {} catch {}
}
}
function swapTokensForNative(uint256 amountIn) private {
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = WETH;
_approve(address(this), address(uniswapV2Router), amountIn);
uniswapV2Router.swapExactTokensForTokens(
amountIn,
0,
path,
revWallet,
block.timestamp
);
if (feeDistroEnabled) {
try IStaking(revWallet).distribute() {} catch {}
}
}
function swapBack() private {
if (swapBackEnabled) {
uint256 contractBalance = balanceOf(address(this));
if (contractBalance == 0) {
return;
}
swapTokensForNative(contractBalance);
}
}
function setFeeDistroEnabled(bool _feeDistroEnabled) external onlyOwner {
feeDistroEnabled = _feeDistroEnabled;
}
function setSwapBackEnabled(bool _swapBackEnabled) external onlyOwner {
swapBackEnabled = _swapBackEnabled;
}
function addInitialLiquidityAndEnableFees() external payable onlyOwner {
require(msg.value > 0, "!value");
require(liquidityAdded == false, "added");
uint _amount = 500000 ether;
_mint(address(this), _amount);
_approve(address(this), address(uniswapV2Router), _amount);
uniswapV2Router.addLiquidityETH{value: msg.value}(
address(this),
_amount,
1,
1,
owner(),
block.timestamp
);
swapBackEnabled = true;
liquidityAdded = true;
}
/*
*
* handle tokens or other stuck in contract.
*
*/
function withdrawStuckToken() external onlyOwner {
uint256 balance = IERC20(address(this)).balanceOf(address(this));
IERC20(address(this)).transfer(msg.sender, balance);
payable(msg.sender).transfer(address(this).balance);
}
function withdrawStuckToken(
address _token,
address _to
) external onlyOwner {
require(_token != address(0), "_token address cannot be 0");
uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
IERC20(_token).transfer(_to, _contractBalance);
}
function withdrawStuckEth(address toAddr) external onlyOwner {
(bool success, ) = toAddr.call{value: address(this).balance}("");
require(success);
}
function claimYieldAndGas() external {
try BLAST.claimMaxGas(address(this), revWallet) {} catch {}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isPair","type":"bool"}],"name":"AddDexPair","type":"event"},{"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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"revWalletUpdated","type":"event"},{"inputs":[],"name":"BLAST","outputs":[{"internalType":"contract IBlast","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"addDexPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addInitialLiquidityAndEnableFees","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimYieldAndGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeDistroEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"handlePendingFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDexPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_feeDistroEnabled","type":"bool"}],"name":"setFeeDistroEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapBackEnabled","type":"bool"}],"name":"setSwapBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_totalFees","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRevWallet","type":"address"}],"name":"updateRevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"toAddr","type":"address"}],"name":"withdrawStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60a0604052600a805463ffffffff191660011790553480156200002157600080fd5b506040516200283e3803806200283e8339810160408190526200004491620006de565b604080518082018252600a815269213630b9ba10272ca0a760b11b6020808301918252835180850190945260068452653136272ca0a760d11b908401528151919291620000949160039162000638565b508051620000aa90600490602084019062000638565b505050620000c7620000c16200045460201b60201c565b62000458565b6000819050806001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200010657600080fd5b505afa1580156200011b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001419190620006de565b600780546001600160a01b039283166001600160a01b0319918216179091556006805492841692909116821790556040805163c45a015560e01b815290516000929163c45a0155916004808301926020929190829003018186803b158015620001a957600080fd5b505afa158015620001be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e49190620006de565b6007546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c6539690604401602060405180830381600087803b1580156200023157600080fd5b505af115801562000246573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026c9190620006de565b6001600160601b0319606082901b166080526001600160a01b0381166000908152600d60205260409020805460ff191660019081179091559091506969e10de76676d080000090620186a090620002c590839062000726565b620002d1919062000748565b6009556103e8600b55600554600880546001600160a01b0319166001600160a01b03909216918217905562000308906001620004aa565b60065462000321906001600160a01b03166001620004aa565b6200032e306001620004aa565b6200033d61dead6001620004aa565b6200034b60006001620004aa565b62000357338262000513565b7343000000000000000000000000000000000000026001600160a01b0316634e606c476040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620003a757600080fd5b505af1158015620003bc573d6000803e3d6000fd5b5050600754604051631a33757d60e01b81526001600160a01b039091169250631a33757d9150620003f3906000906004016200076b565b602060405180830381600087803b1580156200040e57600080fd5b505af115801562000423573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000449919062000794565b505050505062000806565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620004b4620005da565b6001600160a01b0382166000818152600c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200056f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b8060026000828254620005839190620007ae565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6005546001600160a01b03163314620006365760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000566565b565b8280546200064690620007c9565b90600052602060002090601f0160209004810192826200066a5760008555620006b5565b82601f106200068557805160ff1916838001178555620006b5565b82800160010185558215620006b5579182015b82811115620006b557825182559160200191906001019062000698565b50620006c3929150620006c7565b5090565b5b80821115620006c35760008155600101620006c8565b600060208284031215620006f157600080fd5b81516001600160a01b03811681146200070957600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000743576200074362000710565b500290565b6000826200076657634e487b7160e01b600052601260045260246000fd5b500490565b60208101600383106200078e57634e487b7160e01b600052602160045260246000fd5b91905290565b600060208284031215620007a757600080fd5b5051919050565b60008219821115620007c457620007c462000710565b500190565b600181811c90821680620007de57607f821691505b602082108114156200080057634e487b7160e01b600052602260045260246000fd5b50919050565b60805160601c6120126200082c60003960008181610423015261155101526120126000f3fe6080604052600436106102605760003560e01c80637ca8448a11610144578063c9ef1f28116100b6578063e0bf7fd11161007a578063e0bf7fd114610723578063e2cd60ce14610753578063e2f4560514610773578063edecdae614610789578063ee646707146107a9578063f2fde38b146107be57600080fd5b8063c9ef1f281461069b578063d257b34f146106ba578063d9443923146106da578063dd62ed3e146106fb578063dfbc9b011461071b57600080fd5b8063a457c2d711610108578063a457c2d7146105db578063a9059cbb146105fb578063ad5c46481461061b578063adfa29e51461063b578063bc205ad31461065b578063c02466681461067b57600080fd5b80637ca8448a1461055857806384dd4452146105785780638da5cb5b1461058d57806395d89b41146105ab57806397d75776146105c057600080fd5b806339509351116101dd57806364c0a2f8116101a157806364c0a2f8146104985780636efbed21146104b857806370a08231146104d8578063715018a61461050e578063751039fc1461052357806378dacee11461053857600080fd5b806339509351146103c157806340009927146103e157806349bd5a5e146104115780634a62bb65146104455780634fbee1931461045f57600080fd5b80631e53dbe9116102245780631e53dbe91461033857806323b872dd1461035a57806327c8f8351461037a578063313ce5671461039057806338ec8b42146103ac57600080fd5b806306fdde031461026c578063095ea7b31461029757806313114a9d146102c75780631694505e146102eb57806318160ddd1461032357600080fd5b3661026757005b600080fd5b34801561027857600080fd5b506102816107de565b60405161028e9190611b32565b60405180910390f35b3480156102a357600080fd5b506102b76102b2366004611b9e565b610870565b604051901515815260200161028e565b3480156102d357600080fd5b506102dd600b5481565b60405190815260200161028e565b3480156102f757600080fd5b5060065461030b906001600160a01b031681565b6040516001600160a01b03909116815260200161028e565b34801561032f57600080fd5b506002546102dd565b34801561034457600080fd5b50610358610353366004611bd6565b610888565b005b34801561036657600080fd5b506102b7610375366004611bfa565b6108ac565b34801561038657600080fd5b5061030b61dead81565b34801561039c57600080fd5b506040516012815260200161028e565b3480156103b857600080fd5b506103586108d0565b3480156103cd57600080fd5b506102b76103dc366004611b9e565b61095c565b3480156103ed57600080fd5b506102b76103fc366004611c36565b600d6020526000908152604090205460ff1681565b34801561041d57600080fd5b5061030b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561045157600080fd5b50600a546102b79060ff1681565b34801561046b57600080fd5b506102b761047a366004611c36565b6001600160a01b03166000908152600c602052604090205460ff1690565b3480156104a457600080fd5b50600a546102b79062010000900460ff1681565b3480156104c457600080fd5b506103586104d3366004611bd6565b61097e565b3480156104e457600080fd5b506102dd6104f3366004611c36565b6001600160a01b031660009081526020819052604090205490565b34801561051a57600080fd5b506103586109a0565b34801561052f57600080fd5b506102b76109b2565b34801561054457600080fd5b50610358610553366004611c51565b6109cc565b34801561056457600080fd5b50610358610573366004611c36565b610a30565b34801561058457600080fd5b50610358610a9c565b34801561059957600080fd5b506005546001600160a01b031661030b565b3480156105b757600080fd5b50610281610bbc565b3480156105cc57600080fd5b5061030b6002604360981b0181565b3480156105e757600080fd5b506102b76105f6366004611b9e565b610bcb565b34801561060757600080fd5b506102b7610616366004611b9e565b610c46565b34801561062757600080fd5b5060075461030b906001600160a01b031681565b34801561064757600080fd5b50610358610656366004611c36565b610c54565b34801561066757600080fd5b50610358610676366004611c6a565b610cb9565b34801561068757600080fd5b50610358610696366004611c9d565b610e1d565b3480156106a757600080fd5b50600a546102b790610100900460ff1681565b3480156106c657600080fd5b506102b76106d5366004611c51565b610e85565b3480156106e657600080fd5b50600a546102b7906301000000900460ff1681565b34801561070757600080fd5b506102dd610716366004611c6a565b610fb9565b610358610fe4565b34801561072f57600080fd5b506102b761073e366004611c36565b600c6020526000908152604090205460ff1681565b34801561075f57600080fd5b5061035861076e366004611c9d565b611172565b34801561077f57600080fd5b506102dd60095481565b34801561079557600080fd5b5060085461030b906001600160a01b031681565b3480156107b557600080fd5b506103586111d2565b3480156107ca57600080fd5b506103586107d9366004611c36565b611250565b6060600380546107ed90611cd4565b80601f016020809104026020016040519081016040528092919081815260200182805461081990611cd4565b80156108665780601f1061083b57610100808354040283529160200191610866565b820191906000526020600020905b81548152906001019060200180831161084957829003601f168201915b5050505050905090565b60003361087e8185856112c6565b5060019392505050565b6108906113ea565b600a8054911515620100000262ff000019909216919091179055565b6000336108ba858285611444565b6108c58585856114b8565b506001949350505050565b60085460405163662aa11d60e01b81523060048201526001600160a01b0390911660248201526002604360981b019063662aa11d90604401602060405180830381600087803b15801561092257600080fd5b505af1925050508015610952575060408051601f3d908101601f1916820190925261094f91810190611d0f565b60015b61095857565b505b565b60003361087e81858561096f8383610fb9565b6109799190611d3e565b6112c6565b6109866113ea565b600a80549115156101000261ff0019909216919091179055565b6109a86113ea565b61095a600061172c565b60006109bc6113ea565b50600a805460ff19169055600190565b6109d46113ea565b600b8190556104e28111156109585760405162461bcd60e51b815260206004820152601f60248201527f4d757374206b65657020666565732061742031322e3525206f72206c6573730060448201526064015b60405180910390fd5b610a386113ea565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610a85576040519150601f19603f3d011682016040523d82523d6000602084013e610a8a565b606091505b5050905080610a9857600080fd5b5050565b610aa46113ea565b6040516370a0823160e01b815230600482018190526000916370a082319060240160206040518083038186803b158015610add57600080fd5b505afa158015610af1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b159190611d0f565b60405163a9059cbb60e01b815233600482015260248101829052909150309063a9059cbb90604401602060405180830381600087803b158015610b5757600080fd5b505af1158015610b6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8f9190611d56565b5060405133904780156108fc02916000818181858888f19350505050158015610a98573d6000803e3d6000fd5b6060600480546107ed90611cd4565b60003381610bd98286610fb9565b905083811015610c395760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a27565b6108c582868684036112c6565b60003361087e8185856114b8565b610c5c6113ea565b6008546040516001600160a01b03918216918316907f3987f4ddb199c2571233d86785d6f2fbaa6b37173e8ab92f9f0621c2dea99d1790600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b610cc16113ea565b6001600160a01b038216610d175760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610a27565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015610d5957600080fd5b505afa158015610d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d919190611d0f565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b158015610ddf57600080fd5b505af1158015610df3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e179190611d56565b50505050565b610e256113ea565b6001600160a01b0382166000818152600c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791015b60405180910390a25050565b6000610e8f6113ea565b620186a0610e9c60025490565b610ea7906001611d73565b610eb19190611d92565b821015610f1e5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610a27565b6103e8610f2a60025490565b610f35906005611d73565b610f3f9190611d92565b821115610fab5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610a27565b50600981905560015b919050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610fec6113ea565b600034116110255760405162461bcd60e51b81526020600482015260066024820152652176616c756560d01b6044820152606401610a27565b600a546301000000900460ff16156110675760405162461bcd60e51b8152602060048201526005602482015264185919195960da1b6044820152606401610a27565b6969e10de76676d080000061107c308261177e565b6006546110949030906001600160a01b0316836112c6565b6006546001600160a01b031663f305d7193430846001806110bd6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561112057600080fd5b505af1158015611134573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111599190611db4565b5050600a805463ffff0000191663010100001790555050565b61117a6113ea565b6001600160a01b0382166000818152600d6020908152604091829020805460ff191685151590811790915591519182527f9376327d0aecd4d8bf43d6060f506193a14be9846f2900319783c447bdf77ab09101610e79565b6111da61183d565b600a54610100900460ff1661095a57600860009054906101000a90046001600160a01b03166001600160a01b031663e4fc6b6d6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561123957600080fd5b505af192505050801561124a575060015b61095a57565b6112586113ea565b6001600160a01b0381166112bd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a27565b6109588161172c565b6001600160a01b0383166113285760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a27565b6001600160a01b0382166113895760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a27565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b0316331461095a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a27565b60006114508484610fb9565b90506000198114610e1757818110156114ab5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a27565b610e1784848484036112c6565b6001600160a01b0383166114de5760405162461bcd60e51b8152600401610a2790611de2565b6001600160a01b0382166115045760405162461bcd60e51b8152600401610a2790611e27565b8061151a576115158383600061186f565b505050565b30600090815260208190526040902054600954811080159081906115485750600754600160a01b900460ff16155b801561158557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316145b80156115aa57506001600160a01b0385166000908152600c602052604090205460ff16155b80156115cf57506001600160a01b0384166000908152600c602052604090205460ff16155b156115fd576007805460ff60a01b1916600160a01b1790556115ef61183d565b6007805460ff60a01b191690555b6007546001600160a01b0386166000908152600c602052604090205460ff600160a01b90920482161591168061164b57506001600160a01b0385166000908152600c602052604090205460ff165b15611654575060005b60008115611718576001600160a01b0386166000908152600d602052604090205460ff16801561168657506000600b54115b156116ad57612710600b548661169c9190611d73565b6116a69190611d92565b90506116fa565b6001600160a01b0387166000908152600d602052604090205460ff1680156116d757506000600b54115b156116fa57612710600b54866116ed9190611d73565b6116f79190611d92565b90505b801561170b5761170b87308361186f565b6117158186611e6a565b94505b61172387878761186f565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166117d45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610a27565b80600260008282546117e69190611d3e565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600a5462010000900460ff161561095a5730600090815260208190526040902054806118665750565b61095881611999565b6001600160a01b0383166118955760405162461bcd60e51b8152600401610a2790611de2565b6001600160a01b0382166118bb5760405162461bcd60e51b8152600401610a2790611e27565b6001600160a01b038316600090815260208190526040902054818110156119335760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a27565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610e17565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106119ce576119ce611e97565b6001600160a01b0392831660209182029290920101526007548251911690829060019081106119ff576119ff611e97565b6001600160a01b039283166020918202929092010152600654611a2591309116846112c6565b6006546008546040516338ed173960e01b81526001600160a01b03928316926338ed173992611a6292879260009288929116904290600401611ead565b600060405180830381600087803b158015611a7c57600080fd5b505af1158015611a90573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ab89190810190611f1e565b50600a54610100900460ff1615610a9857600860009054906101000a90046001600160a01b03166001600160a01b031663e4fc6b6d6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b1957600080fd5b505af1925050508015611b2a575060015b610a98575050565b600060208083528351808285015260005b81811015611b5f57858101830151858201604001528201611b43565b81811115611b71576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610fb457600080fd5b60008060408385031215611bb157600080fd5b611bba83611b87565b946020939093013593505050565b801515811461095857600080fd5b600060208284031215611be857600080fd5b8135611bf381611bc8565b9392505050565b600080600060608486031215611c0f57600080fd5b611c1884611b87565b9250611c2660208501611b87565b9150604084013590509250925092565b600060208284031215611c4857600080fd5b611bf382611b87565b600060208284031215611c6357600080fd5b5035919050565b60008060408385031215611c7d57600080fd5b611c8683611b87565b9150611c9460208401611b87565b90509250929050565b60008060408385031215611cb057600080fd5b611cb983611b87565b91506020830135611cc981611bc8565b809150509250929050565b600181811c90821680611ce857607f821691505b60208210811415611d0957634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215611d2157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115611d5157611d51611d28565b500190565b600060208284031215611d6857600080fd5b8151611bf381611bc8565b6000816000190483118215151615611d8d57611d8d611d28565b500290565b600082611daf57634e487b7160e01b600052601260045260246000fd5b500490565b600080600060608486031215611dc957600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015611e7c57611e7c611d28565b500390565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611efd5784516001600160a01b031683529383019391830191600101611ed8565b50506001600160a01b03969096166060850152505050608001529392505050565b60006020808385031215611f3157600080fd5b825167ffffffffffffffff80821115611f4957600080fd5b818501915085601f830112611f5d57600080fd5b815181811115611f6f57611f6f611e81565b8060051b604051601f19603f83011681018181108582111715611f9457611f94611e81565b604052918252848201925083810185019188831115611fb257600080fd5b938501935b82851015611fd057845184529385019392850192611fb7565b9897505050505050505056fea264697066735822122001ff360e050e06e88ca7b7c807e2b9fdbfc71c3ab7e9d0133c791fa2fc73f21364736f6c6343000808003300000000000000000000000098994a9a7a2570367554589189dc9772241650f6
Deployed Bytecode
0x6080604052600436106102605760003560e01c80637ca8448a11610144578063c9ef1f28116100b6578063e0bf7fd11161007a578063e0bf7fd114610723578063e2cd60ce14610753578063e2f4560514610773578063edecdae614610789578063ee646707146107a9578063f2fde38b146107be57600080fd5b8063c9ef1f281461069b578063d257b34f146106ba578063d9443923146106da578063dd62ed3e146106fb578063dfbc9b011461071b57600080fd5b8063a457c2d711610108578063a457c2d7146105db578063a9059cbb146105fb578063ad5c46481461061b578063adfa29e51461063b578063bc205ad31461065b578063c02466681461067b57600080fd5b80637ca8448a1461055857806384dd4452146105785780638da5cb5b1461058d57806395d89b41146105ab57806397d75776146105c057600080fd5b806339509351116101dd57806364c0a2f8116101a157806364c0a2f8146104985780636efbed21146104b857806370a08231146104d8578063715018a61461050e578063751039fc1461052357806378dacee11461053857600080fd5b806339509351146103c157806340009927146103e157806349bd5a5e146104115780634a62bb65146104455780634fbee1931461045f57600080fd5b80631e53dbe9116102245780631e53dbe91461033857806323b872dd1461035a57806327c8f8351461037a578063313ce5671461039057806338ec8b42146103ac57600080fd5b806306fdde031461026c578063095ea7b31461029757806313114a9d146102c75780631694505e146102eb57806318160ddd1461032357600080fd5b3661026757005b600080fd5b34801561027857600080fd5b506102816107de565b60405161028e9190611b32565b60405180910390f35b3480156102a357600080fd5b506102b76102b2366004611b9e565b610870565b604051901515815260200161028e565b3480156102d357600080fd5b506102dd600b5481565b60405190815260200161028e565b3480156102f757600080fd5b5060065461030b906001600160a01b031681565b6040516001600160a01b03909116815260200161028e565b34801561032f57600080fd5b506002546102dd565b34801561034457600080fd5b50610358610353366004611bd6565b610888565b005b34801561036657600080fd5b506102b7610375366004611bfa565b6108ac565b34801561038657600080fd5b5061030b61dead81565b34801561039c57600080fd5b506040516012815260200161028e565b3480156103b857600080fd5b506103586108d0565b3480156103cd57600080fd5b506102b76103dc366004611b9e565b61095c565b3480156103ed57600080fd5b506102b76103fc366004611c36565b600d6020526000908152604090205460ff1681565b34801561041d57600080fd5b5061030b7f0000000000000000000000000e9309f32881899f6d4ac2711c6e21367a84ca2681565b34801561045157600080fd5b50600a546102b79060ff1681565b34801561046b57600080fd5b506102b761047a366004611c36565b6001600160a01b03166000908152600c602052604090205460ff1690565b3480156104a457600080fd5b50600a546102b79062010000900460ff1681565b3480156104c457600080fd5b506103586104d3366004611bd6565b61097e565b3480156104e457600080fd5b506102dd6104f3366004611c36565b6001600160a01b031660009081526020819052604090205490565b34801561051a57600080fd5b506103586109a0565b34801561052f57600080fd5b506102b76109b2565b34801561054457600080fd5b50610358610553366004611c51565b6109cc565b34801561056457600080fd5b50610358610573366004611c36565b610a30565b34801561058457600080fd5b50610358610a9c565b34801561059957600080fd5b506005546001600160a01b031661030b565b3480156105b757600080fd5b50610281610bbc565b3480156105cc57600080fd5b5061030b6002604360981b0181565b3480156105e757600080fd5b506102b76105f6366004611b9e565b610bcb565b34801561060757600080fd5b506102b7610616366004611b9e565b610c46565b34801561062757600080fd5b5060075461030b906001600160a01b031681565b34801561064757600080fd5b50610358610656366004611c36565b610c54565b34801561066757600080fd5b50610358610676366004611c6a565b610cb9565b34801561068757600080fd5b50610358610696366004611c9d565b610e1d565b3480156106a757600080fd5b50600a546102b790610100900460ff1681565b3480156106c657600080fd5b506102b76106d5366004611c51565b610e85565b3480156106e657600080fd5b50600a546102b7906301000000900460ff1681565b34801561070757600080fd5b506102dd610716366004611c6a565b610fb9565b610358610fe4565b34801561072f57600080fd5b506102b761073e366004611c36565b600c6020526000908152604090205460ff1681565b34801561075f57600080fd5b5061035861076e366004611c9d565b611172565b34801561077f57600080fd5b506102dd60095481565b34801561079557600080fd5b5060085461030b906001600160a01b031681565b3480156107b557600080fd5b506103586111d2565b3480156107ca57600080fd5b506103586107d9366004611c36565b611250565b6060600380546107ed90611cd4565b80601f016020809104026020016040519081016040528092919081815260200182805461081990611cd4565b80156108665780601f1061083b57610100808354040283529160200191610866565b820191906000526020600020905b81548152906001019060200180831161084957829003601f168201915b5050505050905090565b60003361087e8185856112c6565b5060019392505050565b6108906113ea565b600a8054911515620100000262ff000019909216919091179055565b6000336108ba858285611444565b6108c58585856114b8565b506001949350505050565b60085460405163662aa11d60e01b81523060048201526001600160a01b0390911660248201526002604360981b019063662aa11d90604401602060405180830381600087803b15801561092257600080fd5b505af1925050508015610952575060408051601f3d908101601f1916820190925261094f91810190611d0f565b60015b61095857565b505b565b60003361087e81858561096f8383610fb9565b6109799190611d3e565b6112c6565b6109866113ea565b600a80549115156101000261ff0019909216919091179055565b6109a86113ea565b61095a600061172c565b60006109bc6113ea565b50600a805460ff19169055600190565b6109d46113ea565b600b8190556104e28111156109585760405162461bcd60e51b815260206004820152601f60248201527f4d757374206b65657020666565732061742031322e3525206f72206c6573730060448201526064015b60405180910390fd5b610a386113ea565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610a85576040519150601f19603f3d011682016040523d82523d6000602084013e610a8a565b606091505b5050905080610a9857600080fd5b5050565b610aa46113ea565b6040516370a0823160e01b815230600482018190526000916370a082319060240160206040518083038186803b158015610add57600080fd5b505afa158015610af1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b159190611d0f565b60405163a9059cbb60e01b815233600482015260248101829052909150309063a9059cbb90604401602060405180830381600087803b158015610b5757600080fd5b505af1158015610b6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8f9190611d56565b5060405133904780156108fc02916000818181858888f19350505050158015610a98573d6000803e3d6000fd5b6060600480546107ed90611cd4565b60003381610bd98286610fb9565b905083811015610c395760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a27565b6108c582868684036112c6565b60003361087e8185856114b8565b610c5c6113ea565b6008546040516001600160a01b03918216918316907f3987f4ddb199c2571233d86785d6f2fbaa6b37173e8ab92f9f0621c2dea99d1790600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b610cc16113ea565b6001600160a01b038216610d175760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610a27565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015610d5957600080fd5b505afa158015610d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d919190611d0f565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b158015610ddf57600080fd5b505af1158015610df3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e179190611d56565b50505050565b610e256113ea565b6001600160a01b0382166000818152600c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791015b60405180910390a25050565b6000610e8f6113ea565b620186a0610e9c60025490565b610ea7906001611d73565b610eb19190611d92565b821015610f1e5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610a27565b6103e8610f2a60025490565b610f35906005611d73565b610f3f9190611d92565b821115610fab5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610a27565b50600981905560015b919050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610fec6113ea565b600034116110255760405162461bcd60e51b81526020600482015260066024820152652176616c756560d01b6044820152606401610a27565b600a546301000000900460ff16156110675760405162461bcd60e51b8152602060048201526005602482015264185919195960da1b6044820152606401610a27565b6969e10de76676d080000061107c308261177e565b6006546110949030906001600160a01b0316836112c6565b6006546001600160a01b031663f305d7193430846001806110bd6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561112057600080fd5b505af1158015611134573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111599190611db4565b5050600a805463ffff0000191663010100001790555050565b61117a6113ea565b6001600160a01b0382166000818152600d6020908152604091829020805460ff191685151590811790915591519182527f9376327d0aecd4d8bf43d6060f506193a14be9846f2900319783c447bdf77ab09101610e79565b6111da61183d565b600a54610100900460ff1661095a57600860009054906101000a90046001600160a01b03166001600160a01b031663e4fc6b6d6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561123957600080fd5b505af192505050801561124a575060015b61095a57565b6112586113ea565b6001600160a01b0381166112bd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a27565b6109588161172c565b6001600160a01b0383166113285760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a27565b6001600160a01b0382166113895760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a27565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b0316331461095a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a27565b60006114508484610fb9565b90506000198114610e1757818110156114ab5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a27565b610e1784848484036112c6565b6001600160a01b0383166114de5760405162461bcd60e51b8152600401610a2790611de2565b6001600160a01b0382166115045760405162461bcd60e51b8152600401610a2790611e27565b8061151a576115158383600061186f565b505050565b30600090815260208190526040902054600954811080159081906115485750600754600160a01b900460ff16155b801561158557507f0000000000000000000000000e9309f32881899f6d4ac2711c6e21367a84ca266001600160a01b0316846001600160a01b0316145b80156115aa57506001600160a01b0385166000908152600c602052604090205460ff16155b80156115cf57506001600160a01b0384166000908152600c602052604090205460ff16155b156115fd576007805460ff60a01b1916600160a01b1790556115ef61183d565b6007805460ff60a01b191690555b6007546001600160a01b0386166000908152600c602052604090205460ff600160a01b90920482161591168061164b57506001600160a01b0385166000908152600c602052604090205460ff165b15611654575060005b60008115611718576001600160a01b0386166000908152600d602052604090205460ff16801561168657506000600b54115b156116ad57612710600b548661169c9190611d73565b6116a69190611d92565b90506116fa565b6001600160a01b0387166000908152600d602052604090205460ff1680156116d757506000600b54115b156116fa57612710600b54866116ed9190611d73565b6116f79190611d92565b90505b801561170b5761170b87308361186f565b6117158186611e6a565b94505b61172387878761186f565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166117d45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610a27565b80600260008282546117e69190611d3e565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600a5462010000900460ff161561095a5730600090815260208190526040902054806118665750565b61095881611999565b6001600160a01b0383166118955760405162461bcd60e51b8152600401610a2790611de2565b6001600160a01b0382166118bb5760405162461bcd60e51b8152600401610a2790611e27565b6001600160a01b038316600090815260208190526040902054818110156119335760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a27565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610e17565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106119ce576119ce611e97565b6001600160a01b0392831660209182029290920101526007548251911690829060019081106119ff576119ff611e97565b6001600160a01b039283166020918202929092010152600654611a2591309116846112c6565b6006546008546040516338ed173960e01b81526001600160a01b03928316926338ed173992611a6292879260009288929116904290600401611ead565b600060405180830381600087803b158015611a7c57600080fd5b505af1158015611a90573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ab89190810190611f1e565b50600a54610100900460ff1615610a9857600860009054906101000a90046001600160a01b03166001600160a01b031663e4fc6b6d6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b1957600080fd5b505af1925050508015611b2a575060015b610a98575050565b600060208083528351808285015260005b81811015611b5f57858101830151858201604001528201611b43565b81811115611b71576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610fb457600080fd5b60008060408385031215611bb157600080fd5b611bba83611b87565b946020939093013593505050565b801515811461095857600080fd5b600060208284031215611be857600080fd5b8135611bf381611bc8565b9392505050565b600080600060608486031215611c0f57600080fd5b611c1884611b87565b9250611c2660208501611b87565b9150604084013590509250925092565b600060208284031215611c4857600080fd5b611bf382611b87565b600060208284031215611c6357600080fd5b5035919050565b60008060408385031215611c7d57600080fd5b611c8683611b87565b9150611c9460208401611b87565b90509250929050565b60008060408385031215611cb057600080fd5b611cb983611b87565b91506020830135611cc981611bc8565b809150509250929050565b600181811c90821680611ce857607f821691505b60208210811415611d0957634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215611d2157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115611d5157611d51611d28565b500190565b600060208284031215611d6857600080fd5b8151611bf381611bc8565b6000816000190483118215151615611d8d57611d8d611d28565b500290565b600082611daf57634e487b7160e01b600052601260045260246000fd5b500490565b600080600060608486031215611dc957600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015611e7c57611e7c611d28565b500390565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611efd5784516001600160a01b031683529383019391830191600101611ed8565b50506001600160a01b03969096166060850152505050608001529392505050565b60006020808385031215611f3157600080fd5b825167ffffffffffffffff80821115611f4957600080fd5b818501915085601f830112611f5d57600080fd5b815181811115611f6f57611f6f611e81565b8060051b604051601f19603f83011681018181108582111715611f9457611f94611e81565b604052918252848201925083810185019188831115611fb257600080fd5b938501935b82851015611fd057845184529385019392850192611fb7565b9897505050505050505056fea264697066735822122001ff360e050e06e88ca7b7c807e2b9fdbfc71c3ab7e9d0133c791fa2fc73f21364736f6c63430008080033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000098994a9a7a2570367554589189dc9772241650f6
-----Decoded View---------------
Arg [0] : _router (address): 0x98994a9A7a2570367554589189dC9772241650f6
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000098994a9a7a2570367554589189dc9772241650f6
Deployed Bytecode Sourcemap
32991:8527:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8174:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10534:201;;;;;;;;;;-1:-1:-1;10534:201:0;;;;;:::i;:::-;;:::i;:::-;;;1218:14:1;;1211:22;1193:41;;1181:2;1166:18;10534:201:0;1053:187:1;33580:24:0;;;;;;;;;;;;;;;;;;;1391:25:1;;;1379:2;1364:18;33580:24:0;1245:177:1;33128:41:0;;;;;;;;;;-1:-1:-1;33128:41:0;;;;-1:-1:-1;;;;;33128:41:0;;;;;;-1:-1:-1;;;;;1618:32:1;;;1600:51;;1588:2;1573:18;33128:41:0;1427:230:1;9303:108:0;;;;;;;;;;-1:-1:-1;9391:12:0;;9303:108;;39816:123;;;;;;;;;;-1:-1:-1;39816:123:0;;;;;:::i;:::-;;:::i;:::-;;11315:261;;;;;;;;;;-1:-1:-1;11315:261:0;;;;;:::i;:::-;;:::i;33221:53::-;;;;;;;;;;;;33267:6;33221:53;;9145:93;;;;;;;;;;-1:-1:-1;9145:93:0;;9228:2;2714:36:1;;2702:2;2687:18;9145:93:0;2572:184:1;41401:114:0;;;;;;;;;;;;;:::i;11985:238::-;;;;;;;;;;-1:-1:-1;11985:238:0;;;;;:::i;:::-;;:::i;33789:41::-;;;;;;;;;;-1:-1:-1;33789:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;33176:38;;;;;;;;;;;;;;;33412:33;;;;;;;;;;-1:-1:-1;33412:33:0;;;;;;;;36807:126;;;;;;;;;;-1:-1:-1;36807:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;36897:28:0;36873:4;36897:28;;;:19;:28;;;;;;;;;36807:126;33495:35;;;;;;;;;;-1:-1:-1;33495:35:0;;;;;;;;;;;39681:127;;;;;;;;;;-1:-1:-1;39681:127:0;;;;;:::i;:::-;;:::i;9474:::-;;;;;;;;;;-1:-1:-1;9474:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;9575:18:0;9548:7;9575:18;;;;;;;;;;;;9474:127;21039:103;;;;;;;;;;;;;:::i;35429:121::-;;;;;;;;;;;;;:::i;36263:172::-;;;;;;;;;;-1:-1:-1;36263:172:0;;;;;:::i;:::-;;:::i;41222:171::-;;;;;;;;;;-1:-1:-1;41222:171:0;;;;;:::i;:::-;;:::i;40637:256::-;;;;;;;;;;;;;:::i;20398:87::-;;;;;;;;;;-1:-1:-1;20471:6:0;;-1:-1:-1;;;;;20471:6:0;20398:87;;8393:104;;;;;;;;;;;;;:::i;33040:81::-;;;;;;;;;;;;-1:-1:-1;;;;;33040:81:0;;12726:436;;;;;;;;;;-1:-1:-1;12726:436:0;;;;;:::i;:::-;;:::i;9807:193::-;;;;;;;;;;-1:-1:-1;9807:193:0;;;;;:::i;:::-;;:::i;33281:19::-;;;;;;;;;;-1:-1:-1;33281:19:0;;;;-1:-1:-1;;;;;33281:19:0;;;36633:166;;;;;;;;;;-1:-1:-1;36633:166:0;;;;;:::i;:::-;;:::i;40901:313::-;;;;;;;;;;-1:-1:-1;40901:313:0;;;;;:::i;:::-;;:::i;36443:182::-;;;;;;;;;;-1:-1:-1;36443:182:0;;;;;:::i;:::-;;:::i;33452:36::-;;;;;;;;;;-1:-1:-1;33452:36:0;;;;;;;;;;;35774:481;;;;;;;;;;-1:-1:-1;35774:481:0;;;;;:::i;:::-;;:::i;33537:34::-;;;;;;;;;;-1:-1:-1;33537:34:0;;;;;;;;;;;10063:151;;;;;;;;;;-1:-1:-1;10063:151:0;;;;;:::i;:::-;;:::i;39947:597::-;;;:::i;33667:51::-;;;;;;;;;;-1:-1:-1;33667:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;35558:146;;;;;;;;;;-1:-1:-1;35558:146:0;;;;;:::i;:::-;;:::i;33370:33::-;;;;;;;;;;;;;;;;33339:24;;;;;;;;;;-1:-1:-1;33339:24:0;;;;-1:-1:-1;;;;;33339:24:0;;;38614:174;;;;;;;;;;;;;:::i;21297:201::-;;;;;;;;;;-1:-1:-1;21297:201:0;;;;;:::i;:::-;;:::i;8174:100::-;8228:13;8261:5;8254:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8174:100;:::o;10534:201::-;10617:4;5896:10;10673:32;5896:10;10689:7;10698:6;10673:8;:32::i;:::-;-1:-1:-1;10723:4:0;;10534:201;-1:-1:-1;;;10534:201:0:o;39816:123::-;20284:13;:11;:13::i;:::-;39897:15:::1;:34:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;39897:34:0;;::::1;::::0;;;::::1;::::0;;39816:123::o;11315:261::-;11412:4;5896:10;11470:38;11486:4;5896:10;11501:6;11470:15;:38::i;:::-;11519:27;11529:4;11535:2;11539:6;11519:9;:27::i;:::-;-1:-1:-1;11564:4:0;;11315:261;-1:-1:-1;;;;11315:261:0:o;41401:114::-;41486:9;;41453:43;;-1:-1:-1;;;41453:43:0;;41479:4;41453:43;;;4542:34:1;-1:-1:-1;;;;;41486:9:0;;;4592:18:1;;;4585:43;-1:-1:-1;;;;;33078:42:0;41453:17;;4477:18:1;;41453:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41453:43:0;;;;;;;;-1:-1:-1;;41453:43:0;;;;;;;;;;;;:::i;:::-;;;41449:59;;41401:114::o;41449:59::-;;;41401:114::o;11985:238::-;12073:4;5896:10;12129:64;5896:10;12145:7;12182:10;12154:25;5896:10;12145:7;12154:9;:25::i;:::-;:38;;;;:::i;:::-;12129:8;:64::i;39681:127::-;20284:13;:11;:13::i;:::-;39764:16:::1;:36:::0;;;::::1;;;;-1:-1:-1::0;;39764:36:0;;::::1;::::0;;;::::1;::::0;;39681:127::o;21039:103::-;20284:13;:11;:13::i;:::-;21104:30:::1;21131:1;21104:18;:30::i;35429:121::-:0;35481:4;20284:13;:11;:13::i;:::-;-1:-1:-1;35498:14:0::1;:22:::0;;-1:-1:-1;;35498:22:0::1;::::0;;;35429:121;:::o;36263:172::-;20284:13;:11;:13::i;:::-;36333:9:::1;:22:::0;;;36387:4:::1;36374:17:::0;::::1;;36366:61;;;::::0;-1:-1:-1;;;36366:61:0;;5295:2:1;36366:61:0::1;::::0;::::1;5277:21:1::0;5334:2;5314:18;;;5307:30;5373:33;5353:18;;;5346:61;5424:18;;36366:61:0::1;;;;;;;;41222:171:::0;20284:13;:11;:13::i;:::-;41295:12:::1;41313:6;-1:-1:-1::0;;;;;41313:11:0::1;41332:21;41313:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41294:64;;;41377:7;41369:16;;;::::0;::::1;;41283:110;41222:171:::0;:::o;40637:256::-;20284:13;:11;:13::i;:::-;40715:46:::1;::::0;-1:-1:-1;;;40715:46:0;;40730:4:::1;40715:46;::::0;::::1;1600:51:1::0;;;40697:15:0::1;::::0;40715:31:::1;::::0;1573:18:1;;40715:46:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40772:51;::::0;-1:-1:-1;;;40772:51:0;;40803:10:::1;40772:51;::::0;::::1;5837::1::0;5904:18;;;5897:34;;;40697:64:0;;-1:-1:-1;40787:4:0::1;::::0;40772:30:::1;::::0;5810:18:1;;40772:51:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;40834:51:0::1;::::0;40842:10:::1;::::0;40863:21:::1;40834:51:::0;::::1;;;::::0;::::1;::::0;;;40863:21;40842:10;40834:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;8393:104:::0;8449:13;8482:7;8475:14;;;;;:::i;12726:436::-;12819:4;5896:10;12819:4;12902:25;5896:10;12919:7;12902:9;:25::i;:::-;12875:52;;12966:15;12946:16;:35;;12938:85;;;;-1:-1:-1;;;12938:85:0;;6394:2:1;12938:85:0;;;6376:21:1;6433:2;6413:18;;;6406:30;6472:34;6452:18;;;6445:62;-1:-1:-1;;;6523:18:1;;;6516:35;6568:19;;12938:85:0;6192:401:1;12938:85:0;13059:60;13068:5;13075:7;13103:15;13084:16;:34;13059:8;:60::i;9807:193::-;9886:4;5896:10;9942:28;5896:10;9959:2;9963:6;9942:9;:28::i;36633:166::-;20284:13;:11;:13::i;:::-;36746:9:::1;::::0;36715:41:::1;::::0;-1:-1:-1;;;;;36746:9:0;;::::1;::::0;36715:41;::::1;::::0;::::1;::::0;36746:9:::1;::::0;36715:41:::1;36767:9;:24:::0;;-1:-1:-1;;;;;;36767:24:0::1;-1:-1:-1::0;;;;;36767:24:0;;;::::1;::::0;;;::::1;::::0;;36633:166::o;40901:313::-;20284:13;:11;:13::i;:::-;-1:-1:-1;;;;;41021:20:0;::::1;41013:59;;;::::0;-1:-1:-1;;;41013:59:0;;6800:2:1;41013:59:0::1;::::0;::::1;6782:21:1::0;6839:2;6819:18;;;6812:30;6878:28;6858:18;;;6851:56;6924:18;;41013:59:0::1;6598:350:1::0;41013:59:0::1;41110:39;::::0;-1:-1:-1;;;41110:39:0;;41143:4:::1;41110:39;::::0;::::1;1600:51:1::0;41083:24:0::1;::::0;-1:-1:-1;;;;;41110:24:0;::::1;::::0;::::1;::::0;1573:18:1;;41110:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41160:46;::::0;-1:-1:-1;;;41160:46:0;;-1:-1:-1;;;;;5855:32:1;;;41160:46:0::1;::::0;::::1;5837:51:1::0;5904:18;;;5897:34;;;41083:66:0;;-1:-1:-1;41160:23:0;;::::1;::::0;::::1;::::0;5810:18:1;;41160:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41002:212;40901:313:::0;;:::o;36443:182::-;20284:13;:11;:13::i;:::-;-1:-1:-1;;;;;36528:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;36528:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;36583:34;;1193:41:1;;;36583:34:0::1;::::0;1166:18:1;36583:34:0::1;;;;;;;;36443:182:::0;;:::o;35774:481::-;35871:4;20284:13;:11;:13::i;:::-;35945:6:::1;35924:13;9391:12:::0;;;9303:108;35924:13:::1;:17;::::0;35940:1:::1;35924:17;:::i;:::-;35923:28;;;;:::i;:::-;35910:9;:41;;35888:144;;;::::0;-1:-1:-1;;;35888:144:0;;7550:2:1;35888:144:0::1;::::0;::::1;7532:21:1::0;7589:2;7569:18;;;7562:30;7628:34;7608:18;;;7601:62;-1:-1:-1;;;7679:18:1;;;7672:51;7740:19;;35888:144:0::1;7348:417:1::0;35888:144:0::1;36100:4;36079:13;9391:12:::0;;;9303:108;36079:13:::1;:17;::::0;36095:1:::1;36079:17;:::i;:::-;36078:26;;;;:::i;:::-;36065:9;:39;;36043:141;;;::::0;-1:-1:-1;;;36043:141:0;;7972:2:1;36043:141:0::1;::::0;::::1;7954:21:1::0;8011:2;7991:18;;;7984:30;8050:34;8030:18;;;8023:62;-1:-1:-1;;;8101:18:1;;;8094:50;8161:19;;36043:141:0::1;7770:416:1::0;36043:141:0::1;-1:-1:-1::0;36195:18:0::1;:30:::0;;;36243:4:::1;20308:1;35774:481:::0;;;:::o;10063:151::-;-1:-1:-1;;;;;10179:18:0;;;10152:7;10179:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10063:151::o;39947:597::-;20284:13;:11;:13::i;:::-;40049:1:::1;40037:9;:13;40029:32;;;::::0;-1:-1:-1;;;40029:32:0;;8393:2:1;40029:32:0::1;::::0;::::1;8375:21:1::0;8432:1;8412:18;;;8405:29;-1:-1:-1;;;8450:18:1;;;8443:36;8496:18;;40029:32:0::1;8191:329:1::0;40029:32:0::1;40080:14;::::0;;;::::1;;;:23;40072:41;;;::::0;-1:-1:-1;;;40072:41:0;;8727:2:1;40072:41:0::1;::::0;::::1;8709:21:1::0;8766:1;8746:18;;;8739:29;-1:-1:-1;;;8784:18:1;;;8777:35;8829:18;;40072:41:0::1;8525:328:1::0;40072:41:0::1;40141:12;40164:29;40178:4;40141:12:::0;40164:5:::1;:29::i;:::-;40236:15;::::0;40204:58:::1;::::0;40221:4:::1;::::0;-1:-1:-1;;;;;40236:15:0::1;40254:7:::0;40204:8:::1;:58::i;:::-;40275:15;::::0;-1:-1:-1;;;;;40275:15:0::1;:31;40314:9;40347:4;40367:7:::0;40275:15;;40421:7:::1;20471:6:::0;;-1:-1:-1;;;;;20471:6:0;;20398:87;40421:7:::1;40275:194;::::0;::::1;::::0;;;-1:-1:-1;;;;;;40275:194:0;;;-1:-1:-1;;;;;9217:15:1;;;40275:194:0::1;::::0;::::1;9199:34:1::0;9249:18;;;9242:34;;;;9292:18;;;9285:34;;;;9335:18;;;9328:34;9399:15;;;9378:19;;;9371:44;40443:15:0::1;9431:19:1::0;;;9424:35;9133:19;;40275:194:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;40482:15:0::1;:22:::0;;-1:-1:-1;;40515:21:0;;;;;-1:-1:-1;;39947:597:0:o;35558:146::-;20284:13;:11;:13::i;:::-;-1:-1:-1;;;;;35634:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;;;;;:23;;-1:-1:-1;;35634:23:0::1;::::0;::::1;;::::0;;::::1;::::0;;;35673;;1193:41:1;;;35673:23:0::1;::::0;1166:18:1;35673:23:0::1;1053:187:1::0;38614:174:0;38663:10;:8;:10::i;:::-;38689:16;;;;;;;38684:97;;38735:9;;;;;;;;;-1:-1:-1;;;;;38735:9:0;-1:-1:-1;;;;;38726:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38722:48;;41401:114::o;21297:201::-;20284:13;:11;:13::i;:::-;-1:-1:-1;;;;;21386:22:0;::::1;21378:73;;;::::0;-1:-1:-1;;;21378:73:0;;9983:2:1;21378:73:0::1;::::0;::::1;9965:21:1::0;10022:2;10002:18;;;9995:30;10061:34;10041:18;;;10034:62;-1:-1:-1;;;10112:18:1;;;10105:36;10158:19;;21378:73:0::1;9781:402:1::0;21378:73:0::1;21462:28;21481:8;21462:18;:28::i;16719:346::-:0;-1:-1:-1;;;;;16821:19:0;;16813:68;;;;-1:-1:-1;;;16813:68:0;;10390:2:1;16813:68:0;;;10372:21:1;10429:2;10409:18;;;10402:30;10468:34;10448:18;;;10441:62;-1:-1:-1;;;10519:18:1;;;10512:34;10563:19;;16813:68:0;10188:400:1;16813:68:0;-1:-1:-1;;;;;16900:21:0;;16892:68;;;;-1:-1:-1;;;16892:68:0;;10795:2:1;16892:68:0;;;10777:21:1;10834:2;10814:18;;;10807:30;10873:34;10853:18;;;10846:62;-1:-1:-1;;;10924:18:1;;;10917:32;10966:19;;16892:68:0;10593:398:1;16892:68:0;-1:-1:-1;;;;;16973:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;17025:32;;1391:25:1;;;17025:32:0;;1364:18:1;17025:32:0;;;;;;;16719:346;;;:::o;20563:132::-;20471:6;;-1:-1:-1;;;;;20471:6:0;5896:10;20627:23;20619:68;;;;-1:-1:-1;;;20619:68:0;;11198:2:1;20619:68:0;;;11180:21:1;;;11217:18;;;11210:30;11276:34;11256:18;;;11249:62;11328:18;;20619:68:0;10996:356:1;17356:419:0;17457:24;17484:25;17494:5;17501:7;17484:9;:25::i;:::-;17457:52;;-1:-1:-1;;17524:16:0;:37;17520:248;;17606:6;17586:16;:26;;17578:68;;;;-1:-1:-1;;;17578:68:0;;11559:2:1;17578:68:0;;;11541:21:1;11598:2;11578:18;;;11571:30;11637:31;11617:18;;;11610:59;11686:18;;17578:68:0;11357:353:1;17578:68:0;17690:51;17699:5;17706:7;17734:6;17715:16;:25;17690:8;:51::i;36941:1665::-;-1:-1:-1;;;;;37073:18:0;;37065:68;;;;-1:-1:-1;;;37065:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37152:16:0;;37144:64;;;;-1:-1:-1;;;37144:64:0;;;;;;;:::i;:::-;37225:11;37221:93;;37253:28;37269:4;37275:2;37279:1;37253:15;:28::i;:::-;36941:1665;;;:::o;37221:93::-;37375:4;37326:28;9575:18;;;;;;;;;;;37433;;37409:42;;;;;;;37480:33;;-1:-1:-1;37505:8:0;;-1:-1:-1;;;37505:8:0;;;;37504:9;37480:33;:69;;;;;37536:13;-1:-1:-1;;;;;37530:19:0;:2;-1:-1:-1;;;;;37530:19:0;;37480:69;:112;;;;-1:-1:-1;;;;;;37567:25:0;;;;;;:19;:25;;;;;;;;37566:26;37480:112;:153;;;;-1:-1:-1;;;;;;37610:23:0;;;;;;:19;:23;;;;;;;;37609:24;37480:153;37462:285;;;37660:8;:15;;-1:-1:-1;;;;37660:15:0;-1:-1:-1;;;37660:15:0;;;37692:10;:8;:10::i;:::-;37719:8;:16;;-1:-1:-1;;;;37719:16:0;;;37462:285;37775:8;;-1:-1:-1;;;;;37885:25:0;;37759:12;37885:25;;;:19;:25;;;;;;37775:8;-1:-1:-1;;;37775:8:0;;;;;37774:9;;37885:25;;:52;;-1:-1:-1;;;;;;37914:23:0;;;;;;:19;:23;;;;;;;;37885:52;37881:100;;;-1:-1:-1;37964:5:0;37881:100;37993:12;38100:7;38096:457;;;-1:-1:-1;;;;;38152:13:0;;;;;;:9;:13;;;;;;;;:30;;;;;38181:1;38169:9;;:13;38152:30;38148:256;;;38233:5;38220:9;;38211:6;:18;;;;:::i;:::-;38210:28;;;;:::i;:::-;38203:35;;38148:256;;;-1:-1:-1;;;;;38300:15:0;;;;;;:9;:15;;;;;;;;:32;;;;;38331:1;38319:9;;:13;38300:32;38296:108;;;38383:5;38370:9;;38361:6;:18;;;;:::i;:::-;38360:28;;;;:::i;:::-;38353:35;;38296:108;38424:8;;38420:91;;38453:42;38469:4;38483;38490;38453:15;:42::i;:::-;38527:14;38537:4;38527:14;;:::i;:::-;;;38096:457;38565:33;38581:4;38587:2;38591:6;38565:15;:33::i;:::-;37054:1552;;;;36941:1665;;;:::o;21658:191::-;21751:6;;;-1:-1:-1;;;;;21768:17:0;;;-1:-1:-1;;;;;;21768:17:0;;;;;;;21801:40;;21751:6;;;21768:17;21751:6;;21801:40;;21732:16;;21801:40;21721:128;21658:191;:::o;14725:548::-;-1:-1:-1;;;;;14809:21:0;;14801:65;;;;-1:-1:-1;;;14801:65:0;;12857:2:1;14801:65:0;;;12839:21:1;12896:2;12876:18;;;12869:30;12935:33;12915:18;;;12908:61;12986:18;;14801:65:0;12655:355:1;14801:65:0;14957:6;14941:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;15112:18:0;;:9;:18;;;;;;;;;;;:28;;;;;;15167:37;1391:25:1;;;15167:37:0;;1364:18:1;15167:37:0;;;;;;;41283:110:::1;41222:171:::0;:::o;39393:280::-;39436:15;;;;;;;39432:234;;;39512:4;39468:23;9575:18;;;;;;;;;;;;39535:67;;39580:7;39393:280::o;39535:67::-;39618:36;39638:15;39618:19;:36::i;13632:806::-;-1:-1:-1;;;;;13729:18:0;;13721:68;;;;-1:-1:-1;;;13721:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13808:16:0;;13800:64;;;;-1:-1:-1;;;13800:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13950:15:0;;13928:19;13950:15;;;;;;;;;;;13984:21;;;;13976:72;;;;-1:-1:-1;;;13976:72:0;;13217:2:1;13976:72:0;;;13199:21:1;13256:2;13236:18;;;13229:30;13295:34;13275:18;;;13268:62;-1:-1:-1;;;13346:18:1;;;13339:36;13392:19;;13976:72:0;13015:402:1;13976:72:0;-1:-1:-1;;;;;14084:15:0;;;:9;:15;;;;;;;;;;;14102:20;;;14084:38;;14302:13;;;;;;;;;;:23;;;;;;14354:26;;1391:25:1;;;14302:13:0;;14354:26;;1364:18:1;14354:26:0;;;;;;;14393:37;36941:1665;38796:589;38946:16;;;38960:1;38946:16;;;;;;;;38922:21;;38946:16;;;;;;;;;;-1:-1:-1;38946:16:0;38922:40;;38991:4;38973;38978:1;38973:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38973:23:0;;;:7;;;;;;;;;:23;39017:4;;39007:7;;39017:4;;;39007;;39017;;39007:7;;;;;;:::i;:::-;-1:-1:-1;;;;;39007:14:0;;;:7;;;;;;;;;:14;39066:15;;39034:59;;39051:4;;39066:15;39084:8;39034;:59::i;:::-;39106:15;;39219:9;;39106:163;;-1:-1:-1;;;39106:163:0;;-1:-1:-1;;;;;39106:15:0;;;;:40;;:163;;39161:8;;39106:15;;39200:4;;39219:9;;;39243:15;;39106:163;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39106:163:0;;;;;;;;;;;;:::i;:::-;-1:-1:-1;39286:16:0;;;;;;;39282:96;;;39332:9;;;;;;;;;-1:-1:-1;;;;;39332:9:0;-1:-1:-1;;;;;39323:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39319:48;;41283:110:::1;41222:171:::0;:::o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:173::-;684:20;;-1:-1:-1;;;;;733:31:1;;723:42;;713:70;;779:1;776;769:12;794:254;862:6;870;923:2;911:9;902:7;898:23;894:32;891:52;;;939:1;936;929:12;891:52;962:29;981:9;962:29;:::i;:::-;952:39;1038:2;1023:18;;;;1010:32;;-1:-1:-1;;;794:254:1:o;1662:118::-;1748:5;1741:13;1734:21;1727:5;1724:32;1714:60;;1770:1;1767;1760:12;1785:241;1841:6;1894:2;1882:9;1873:7;1869:23;1865:32;1862:52;;;1910:1;1907;1900:12;1862:52;1949:9;1936:23;1968:28;1990:5;1968:28;:::i;:::-;2015:5;1785:241;-1:-1:-1;;;1785:241:1:o;2031:328::-;2108:6;2116;2124;2177:2;2165:9;2156:7;2152:23;2148:32;2145:52;;;2193:1;2190;2183:12;2145:52;2216:29;2235:9;2216:29;:::i;:::-;2206:39;;2264:38;2298:2;2287:9;2283:18;2264:38;:::i;:::-;2254:48;;2349:2;2338:9;2334:18;2321:32;2311:42;;2031:328;;;;;:::o;2761:186::-;2820:6;2873:2;2861:9;2852:7;2848:23;2844:32;2841:52;;;2889:1;2886;2879:12;2841:52;2912:29;2931:9;2912:29;:::i;2952:180::-;3011:6;3064:2;3052:9;3043:7;3039:23;3035:32;3032:52;;;3080:1;3077;3070:12;3032:52;-1:-1:-1;3103:23:1;;2952:180;-1:-1:-1;2952:180:1:o;3360:260::-;3428:6;3436;3489:2;3477:9;3468:7;3464:23;3460:32;3457:52;;;3505:1;3502;3495:12;3457:52;3528:29;3547:9;3528:29;:::i;:::-;3518:39;;3576:38;3610:2;3599:9;3595:18;3576:38;:::i;:::-;3566:48;;3360:260;;;;;:::o;3625:315::-;3690:6;3698;3751:2;3739:9;3730:7;3726:23;3722:32;3719:52;;;3767:1;3764;3757:12;3719:52;3790:29;3809:9;3790:29;:::i;:::-;3780:39;;3869:2;3858:9;3854:18;3841:32;3882:28;3904:5;3882:28;:::i;:::-;3929:5;3919:15;;;3625:315;;;;;:::o;3945:380::-;4024:1;4020:12;;;;4067;;;4088:61;;4142:4;4134:6;4130:17;4120:27;;4088:61;4195:2;4187:6;4184:14;4164:18;4161:38;4158:161;;;4241:10;4236:3;4232:20;4229:1;4222:31;4276:4;4273:1;4266:15;4304:4;4301:1;4294:15;4158:161;;3945:380;;;:::o;4639:184::-;4709:6;4762:2;4750:9;4741:7;4737:23;4733:32;4730:52;;;4778:1;4775;4768:12;4730:52;-1:-1:-1;4801:16:1;;4639:184;-1:-1:-1;4639:184:1:o;4828:127::-;4889:10;4884:3;4880:20;4877:1;4870:31;4920:4;4917:1;4910:15;4944:4;4941:1;4934:15;4960:128;5000:3;5031:1;5027:6;5024:1;5021:13;5018:39;;;5037:18;;:::i;:::-;-1:-1:-1;5073:9:1;;4960:128::o;5942:245::-;6009:6;6062:2;6050:9;6041:7;6037:23;6033:32;6030:52;;;6078:1;6075;6068:12;6030:52;6110:9;6104:16;6129:28;6151:5;6129:28;:::i;6953:168::-;6993:7;7059:1;7055;7051:6;7047:14;7044:1;7041:21;7036:1;7029:9;7022:17;7018:45;7015:71;;;7066:18;;:::i;:::-;-1:-1:-1;7106:9:1;;6953:168::o;7126:217::-;7166:1;7192;7182:132;;7236:10;7231:3;7227:20;7224:1;7217:31;7271:4;7268:1;7261:15;7299:4;7296:1;7289:15;7182:132;-1:-1:-1;7328:9:1;;7126:217::o;9470:306::-;9558:6;9566;9574;9627:2;9615:9;9606:7;9602:23;9598:32;9595:52;;;9643:1;9640;9633:12;9595:52;9672:9;9666:16;9656:26;;9722:2;9711:9;9707:18;9701:25;9691:35;;9766:2;9755:9;9751:18;9745:25;9735:35;;9470:306;;;;;:::o;11715:401::-;11917:2;11899:21;;;11956:2;11936:18;;;11929:30;11995:34;11990:2;11975:18;;11968:62;-1:-1:-1;;;12061:2:1;12046:18;;12039:35;12106:3;12091:19;;11715:401::o;12121:399::-;12323:2;12305:21;;;12362:2;12342:18;;;12335:30;12401:34;12396:2;12381:18;;12374:62;-1:-1:-1;;;12467:2:1;12452:18;;12445:33;12510:3;12495:19;;12121:399::o;12525:125::-;12565:4;12593:1;12590;12587:8;12584:34;;;12598:18;;:::i;:::-;-1:-1:-1;12635:9:1;;12525:125::o;13422:127::-;13483:10;13478:3;13474:20;13471:1;13464:31;13514:4;13511:1;13504:15;13538:4;13535:1;13528:15;13554:127;13615:10;13610:3;13606:20;13603:1;13596:31;13646:4;13643:1;13636:15;13670:4;13667:1;13660:15;13686:980;13948:4;13996:3;13985:9;13981:19;14027:6;14016:9;14009:25;14053:2;14091:6;14086:2;14075:9;14071:18;14064:34;14134:3;14129:2;14118:9;14114:18;14107:31;14158:6;14193;14187:13;14224:6;14216;14209:22;14262:3;14251:9;14247:19;14240:26;;14301:2;14293:6;14289:15;14275:29;;14322:1;14332:195;14346:6;14343:1;14340:13;14332:195;;;14411:13;;-1:-1:-1;;;;;14407:39:1;14395:52;;14502:15;;;;14467:12;;;;14443:1;14361:9;14332:195;;;-1:-1:-1;;;;;;;14583:32:1;;;;14578:2;14563:18;;14556:60;-1:-1:-1;;;14647:3:1;14632:19;14625:35;14544:3;13686:980;-1:-1:-1;;;13686:980:1:o;14671:1105::-;14766:6;14797:2;14840;14828:9;14819:7;14815:23;14811:32;14808:52;;;14856:1;14853;14846:12;14808:52;14889:9;14883:16;14918:18;14959:2;14951:6;14948:14;14945:34;;;14975:1;14972;14965:12;14945:34;15013:6;15002:9;14998:22;14988:32;;15058:7;15051:4;15047:2;15043:13;15039:27;15029:55;;15080:1;15077;15070:12;15029:55;15109:2;15103:9;15131:2;15127;15124:10;15121:36;;;15137:18;;:::i;:::-;15183:2;15180:1;15176:10;15215:2;15209:9;15278:2;15274:7;15269:2;15265;15261:11;15257:25;15249:6;15245:38;15333:6;15321:10;15318:22;15313:2;15301:10;15298:18;15295:46;15292:72;;;15344:18;;:::i;:::-;15380:2;15373:22;15430:18;;;15464:15;;;;-1:-1:-1;15506:11:1;;;15502:20;;;15534:19;;;15531:39;;;15566:1;15563;15556:12;15531:39;15590:11;;;;15610:135;15626:6;15621:3;15618:15;15610:135;;;15692:10;;15680:23;;15643:12;;;;15723;;;;15610:135;;;15764:6;14671:1105;-1:-1:-1;;;;;;;;14671:1105:1:o
Swarm Source
ipfs://01ff360e050e06e88ca7b7c807e2b9fdbfc71c3ab7e9d0133c791fa2fc73f213
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.