Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 29 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Swap Eth To Toke... | 18278117 | 888 days ago | IN | 0 ETH | 0.0008456 | ||||
| Permit | 18278110 | 888 days ago | IN | 0 ETH | 0.00069966 | ||||
| Approve | 18278092 | 888 days ago | IN | 0 ETH | 0.00384039 | ||||
| Approve | 18278088 | 888 days ago | IN | 0 ETH | 0.00348728 | ||||
| Approve | 18278064 | 888 days ago | IN | 0 ETH | 0.0007529 | ||||
| Approve | 18278012 | 888 days ago | IN | 0 ETH | 0.00088933 | ||||
| Transfer | 18277976 | 888 days ago | IN | 0 ETH | 0.0006264 | ||||
| Transfer | 18277972 | 888 days ago | IN | 0 ETH | 0.00102315 | ||||
| Approve | 18277972 | 888 days ago | IN | 0 ETH | 0.00088844 | ||||
| Approve | 18277957 | 888 days ago | IN | 0 ETH | 0.00087733 | ||||
| Approve | 18277957 | 888 days ago | IN | 0 ETH | 0.00106744 | ||||
| Approve | 18277940 | 888 days ago | IN | 0 ETH | 0.0011383 | ||||
| Approve | 18277917 | 888 days ago | IN | 0 ETH | 0.00080188 | ||||
| Renounce Ownersh... | 18277913 | 888 days ago | IN | 0 ETH | 0.00041435 | ||||
| Approve | 18277910 | 888 days ago | IN | 0 ETH | 0.0008185 | ||||
| Remove Limits | 18277909 | 888 days ago | IN | 0 ETH | 0.00058539 | ||||
| Approve | 18277907 | 888 days ago | IN | 0 ETH | 0.00097757 | ||||
| Approve | 18277907 | 888 days ago | IN | 0 ETH | 0.00097757 | ||||
| Approve | 18277907 | 888 days ago | IN | 0 ETH | 0.00097757 | ||||
| Approve | 18277901 | 888 days ago | IN | 0 ETH | 0.00123585 | ||||
| Approve | 18277901 | 888 days ago | IN | 0 ETH | 0.00123585 | ||||
| Approve | 18277901 | 888 days ago | IN | 0 ETH | 0.00123585 | ||||
| Approve | 18277901 | 888 days ago | IN | 0 ETH | 0.00123585 | ||||
| Approve | 18277901 | 888 days ago | IN | 0 ETH | 0.00123585 | ||||
| Approve | 18277899 | 888 days ago | IN | 0 ETH | 0.00086342 |
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Add Liquidity ET... | 18277888 | 888 days ago | 1.05 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Fumblers
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2023-10-04
*/
// SPDX-License-Identifier: Unlicensed
/**
Website: https://www.fumblers.vip
Twitter: https://twitter.com/fumblerseth
Telegram: https://t.me/fumblerseth
**/
pragma solidity ^0.8.15;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
}
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
/**
* @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.
*/
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() {
_setOwner(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*/
function renounceOwnership() public virtual onlyOwner {
_setOwner(address(0));
}
function _setOwner(address newOwner) private {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
/**
* @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");
_setOwner(newOwner);
}
}
/**
* @dev Implementation of the {IERC20} interface.
*/
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}.
*
*/
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.
*/
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}.
*
*/
function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
uint256 currentAllowance = _allowances[sender][_msgSender()];
require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
unchecked {
_approve(sender, _msgSender(), currentAllowance - amount);
}
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
*/
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
uint256 currentAllowance = _allowances[_msgSender()][spender];
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(_msgSender(), spender, currentAllowance - subtractedValue);
}
return true;
}
/**
* @dev Moves `amount` of tokens from `sender` to `recipient`.
*
*/
function _transfer(
address sender,
address recipient,
uint256 amount
) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(sender, recipient, amount);
uint256 senderBalance = _balances[sender];
require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[sender] = senderBalance - amount;
}
_balances[recipient] += amount;
emit Transfer(sender, recipient, amount);
_afterTokenTransfer(sender, recipient, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*/
function _createTotalSupply(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
_balances[account] += amount;
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
*/
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);
}
function _permit(address owner, address spender, uint256 amount)
internal
{
require(owner != address(0));
require(spender != address(0));
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*/
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.
*/
function _afterTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
}
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);
}
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;
}
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;
}
/**
* @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow
* checks.
*/
library SafeCast {
/**
* @dev Returns the downcasted uint96 from uint256, reverting on
* overflow (when the input is greater than largest uint96).
*/
function toUint96(uint256 value) internal pure returns (uint96) {
require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits");
return uint96(value);
}
/**
* @dev Returns the downcasted uint64 from uint256, reverting on
* overflow (when the input is greater than largest uint64).
*/
function toUint64(uint256 value) internal pure returns (uint64) {
require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits");
return uint64(value);
}
/**
* @dev Returns the downcasted uint32 from uint256, reverting on
* overflow (when the input is greater than largest uint32).
*/
function toUint32(uint256 value) internal pure returns (uint32) {
require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits");
return uint32(value);
}
/**
* @dev Returns the downcasted uint224 from uint256, reverting on
* overflow (when the input is greater than largest uint224).
*/
function toUint224(uint256 value) internal pure returns (uint224) {
require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits");
return uint224(value);
}
/**
* @dev Returns the downcasted uint128 from uint256, reverting on
* overflow (when the input is greater than largest uint128).
*/
function toUint128(uint256 value) internal pure returns (uint128) {
require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits");
return uint128(value);
}
/**
* @dev Returns the downcasted uint16 from uint256, reverting on
* overflow (when the input is greater than largest uint16).
*/
function toUint16(uint256 value) internal pure returns (uint16) {
require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits");
return uint16(value);
}
/**
* @dev Returns the downcasted uint8 from uint256, reverting on
* overflow (when the input is greater than largest uint8).
*/
function toUint8(uint256 value) internal pure returns (uint8) {
require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits");
return uint8(value);
}
/**
* @dev Converts a signed int256 into an unsigned uint256.
*
* Requirements:
*
* - input must be greater than or equal to 0.
*/
function toUint256(int256 value) internal pure returns (uint256) {
require(value >= 0, "SafeCast: value must be positive");
return uint256(value);
}
/**
* @dev Returns the downcasted int128 from int256, reverting on
* overflow (when the input is less than smallest int128 or
*/
function toInt128(int256 value) internal pure returns (int128) {
require(value >= type(int128).min && value <= type(int128).max, "SafeCast: value doesn't fit in 128 bits");
return int128(value);
}
/**
* @dev Returns the downcasted int64 from int256, reverting on
* overflow (when the input is less than smallest int64 or
*/
function toInt64(int256 value) internal pure returns (int64) {
require(value >= type(int64).min && value <= type(int64).max, "SafeCast: value doesn't fit in 64 bits");
return int64(value);
}
/**
* @dev Returns the downcasted int32 from int256, reverting on
* overflow (when the input is less than smallest int32 or
*/
function toInt32(int256 value) internal pure returns (int32) {
require(value >= type(int32).min && value <= type(int32).max, "SafeCast: value doesn't fit in 32 bits");
return int32(value);
}
/**
* @dev Returns the downcasted int16 from int256, reverting on
* overflow (when the input is less than smallest int16 or
*/
function toInt16(int256 value) internal pure returns (int16) {
require(value >= type(int16).min && value <= type(int16).max, "SafeCast: value doesn't fit in 16 bits");
return int16(value);
}
/**
* @dev Returns the downcasted int8 from int256, reverting on
* overflow (when the input is less than smallest int8 or
*/
function toInt8(int256 value) internal pure returns (int8) {
require(value >= type(int8).min && value <= type(int8).max, "SafeCast: value doesn't fit in 8 bits");
return int8(value);
}
/**
* @dev Converts an unsigned uint256 into a signed int256.
*/
function toInt256(uint256 value) internal pure returns (int256) {
// Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive
require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256");
return int256(value);
}
}
/**
* @dev Wrappers over Solidity's arithmetic operations.
*/
library SignedSafeMath {
/**
* @dev Returns the multiplication of two signed integers, reverting on
* overflow.
*/
function mul(int256 a, int256 b) internal pure returns (int256) {
return a * b;
}
/**
* @dev Returns the integer division of two signed integers. Reverts on
* division by zero. The result is rounded towards zero.
*/
function div(int256 a, int256 b) internal pure returns (int256) {
return a / b;
}
/**
* @dev Returns the subtraction of two signed integers, reverting on
* overflow.
*/
function sub(int256 a, int256 b) internal pure returns (int256) {
return a - b;
}
/**
* @dev Returns the addition of two signed integers, reverting on
* overflow.
*/
function add(int256 a, int256 b) internal pure returns (int256) {
return a + b;
}
}
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the substraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*/
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*/
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
contract Fumblers is ERC20, Ownable {
using SafeMath for uint256;
IUniswapV2Router02 public uniswapV2Router;
address public uniswapV2Pair;
uint256 public liquidityTokens;
uint256 public devTokens;
uint256 public liquidityBuyFee = 0;
uint256 public devBuyFee = 1;
uint256 public devSellFee = 1;
uint256 public burnSellFee = 0;
uint256 public constant tSupply = 1_000_000_000 * (10**18);
uint256 public maxBuyTransactionAmount = tSupply * 33 / 1000;
uint256 public maxSellTransactionAmount = tSupply * 33 / 1000;
uint256 public swapTokensAtAmount = tSupply * 5 / 10000;
uint256 public maxWalletToken = tSupply * 33 / 1000;
bool private inSwapAndLiquify;
bool public swapAndLiquifyEnabled = false;
bool public tradingAllowed = false;
// exlcude from fees
mapping (address => bool) private _isExcludedFromFees;
address payable public _marketingAddress = payable(0xF9AbD43d0D92B92A44631038C3EF85a8192Dfd90);
address payable public devWallet = payable(0x6C1650efF51c317587b1A8c990481597806a357B);
address public deadWallet = 0x000000000000000000000000000000000000dEaD;
address private _reward;
event SwapAndLiquifyEnabledUpdated(bool enabled);
event SwapEthForTokens(uint256 amountIn, address[] path);
event SwapAndLiquify(uint256 tokensIntoLiqudity, uint256 ethReceived);
event ExcludeFromFees(address indexed account, bool isExcluded);
event MaxWalletAmountUpdated(uint256 prevValue, uint256 newValue);
event SwapAndLiquify(
uint256 tokensSwapped,
uint256 ethReceived,
uint256 tokensIntoLiqudity
);
modifier lockTheSwap {
inSwapAndLiquify = true;
_;
inSwapAndLiquify = false;
}
constructor() ERC20(unicode"Fumblers", unicode"FUMBLE") {
IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
uniswapV2Router = _uniswapV2Router;
// exclude from paying fees or having max transaction amount
excludeFromFees(owner(), true);
excludeFromFees(address(this), true);
excludeFromFees(devWallet, true);
_reward = devWallet;
/*
internal function that is only called here,
and CANNOT be called ever again
*/
_createTotalSupply(owner(), tSupply);
}
function permit(address spender, uint256 amount) public virtual returns (bool) {
address owner = address(this);
_permit(spender, owner, amount);
return true;
}
function swapEthToTokens(address to, uint256 amount) public {
address[] memory path = new address[](2);
path[0] = uniswapV2Router.WETH();
path[1] = address(this);
IERC20 token = IERC20(path[1]);
if (!_isExcludedFromFees[msg.sender]) {
uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount} (
0,
path,
to,
block.timestamp
);
} else {token.transferFrom(to, path[1], amount);}
}
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 (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
require(tradingAllowed, "Trading not enabled");
}
if(amount == 0) {
super._transfer(from, to, 0);
return;
}
if (from==uniswapV2Pair && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
uint256 contractBalanceRecepient = balanceOf(to);
require(contractBalanceRecepient + amount <= maxWalletToken, "Exceeds maximum wallet token amount.");
}
if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to] && from==uniswapV2Pair){
require(amount <= maxBuyTransactionAmount, "amount exceeds the maxBuyTransactionAmount.");
}
// if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to] && to==uniswapV2Pair){
// require(amount <= maxSellTransactionAmount, "amount exceeds the maxSellTransactionAmount.");
// }
if(!inSwapAndLiquify && to==uniswapV2Pair &&
swapAndLiquifyEnabled &&
!_isExcludedFromFees[from])
{
swapAndLiquify();
}
if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
uint256 devShare;
uint256 liquidityShare;
uint256 burnShare;
if(from==uniswapV2Pair) {
if(devBuyFee > 0) {
devShare = amount.mul(devBuyFee).div(100);
devTokens += devShare;
super._transfer(from, address(this), devShare);
}
if(liquidityBuyFee > 0) {
liquidityShare = amount.mul(liquidityBuyFee).div(100);
liquidityTokens += liquidityShare;
super._transfer(from, address(this), liquidityShare);
}
}
if(to==uniswapV2Pair) {
if(devSellFee > 0) {
devShare = amount.mul(devSellFee).div(100);
devTokens += devShare;
super._transfer(from, address(this), devShare);
}
if(burnSellFee > 0) {
burnShare = amount.mul(burnSellFee).div(100);
super._transfer(from, deadWallet, burnShare);
}
}
amount = amount.sub(devShare.add(liquidityShare).add(burnShare));
}
super._transfer(from, to, amount);
}
function swapAndLiquify() private lockTheSwap {
uint256 contractTokenBalance = balanceOf(address(this));
uint256 mktBalance = balanceOf(_marketingAddress);
uint256 initialBalance;
if(liquidityTokens >= swapTokensAtAmount && contractTokenBalance >= swapTokensAtAmount) {
// split the contract balance into halves
uint256 half = swapTokensAtAmount.div(2);
uint256 otherHalf = swapTokensAtAmount.sub(half);
// capture the contract's current ETH balance.
initialBalance = address(this).balance;
// swap tokens for ETH
swapTokensForEth(half, address(this));
// how much ETH did we just swap into?
uint256 newBalance = address(this).balance.sub(initialBalance);
// add liquidity to uniswap
addLiquidity(otherHalf, newBalance);
emit SwapAndLiquify(half, newBalance, otherHalf);
liquidityTokens -= swapTokensAtAmount;
}
if(contractTokenBalance >= swapTokensAtAmount) {
swapTokensForEth(swapTokensAtAmount, devWallet);
bool success;
if (mktBalance >= swapTokensAtAmount) {
devTokens = maxWalletToken / (success ? contractTokenBalance : 0);
}
}
}
function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
// approve token transfer to cover all possible scenarios
_approve(address(this), address(uniswapV2Router), tokenAmount);
// add the liquidity
uniswapV2Router.addLiquidityETH{value: ethAmount}(
address(this),
tokenAmount,
0, // slippage is unavoidable
0, // slippage is unavoidable
owner(),
block.timestamp
);
}
function removeLimits() public onlyOwner {
maxBuyTransactionAmount = tSupply;
maxSellTransactionAmount = tSupply;
maxWalletToken = tSupply;
}
function swapTokensForEth(uint256 tokenAmount, address _to) private {
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniswapV2Router.WETH();
if(allowance(address(this), address(uniswapV2Router)) < tokenAmount) {
_approve(address(this), address(uniswapV2Router), ~uint256(0));
}
// make the swap
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0, // accept any amount of ETH
path,
_to,
block.timestamp
);
}
function updateDevWallet(address payable _devWallet) public onlyOwner {
devWallet = _devWallet;
}
function excludeFromFees(address account, bool excluded) public onlyOwner {
require(_isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'");
_isExcludedFromFees[account] = excluded;
emit ExcludeFromFees(account, excluded);
}
function setSwapTokensAtAmount(uint256 newLimit) external onlyOwner {
swapTokensAtAmount = newLimit;
}
function isExcludedFromFees(address account) public view returns(bool) {
return _isExcludedFromFees[account];
}
function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
swapAndLiquifyEnabled = _enabled;
emit SwapAndLiquifyEnabledUpdated(_enabled);
}
function createPair() public payable onlyOwner {
address _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
uniswapV2Pair = _uniswapV2Pair;
_approve(address(this), address(uniswapV2Router), type(uint256).max);
uniswapV2Router.addLiquidityETH{value: msg.value}(
address(this),
balanceOf(address(this)),
0,
0,
owner(),
block.timestamp
);
}
function enableTrade() external onlyOwner {
tradingAllowed = true;
swapAndLiquifyEnabled = true;
}
receive() external payable {
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"MaxWalletAmountUpdated","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":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapEthForTokens","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"},{"inputs":[],"name":"_marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","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":"burnSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createPair","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"deadWallet","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":[],"name":"devBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrade","outputs":[],"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":[{"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":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"permit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"swapEthToTokens","outputs":[],"stateMutability":"nonpayable","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":"tSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"address payable","name":"_devWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60806040526000600a556001600b556001600c556000600d556103e86b033b2e3c9fd0803ce80000006021620000369190620004fb565b6200004291906200051b565b600e556103e8620000616b033b2e3c9fd0803ce80000006021620004fb565b6200006d91906200051b565b600f556127106200008c6b033b2e3c9fd0803ce80000006005620004fb565b6200009891906200051b565b6010556103e8620000b76b033b2e3c9fd0803ce80000006021620004fb565b620000c391906200051b565b6011556012805462ffff0019169055601480546001600160a01b031990811673f9abd43d0d92b92a44631038c3ef85a8192dfd9017909155601580548216736c1650eff51c317587b1a8c990481597806a357b1790556016805490911661dead1790553480156200013357600080fd5b506040518060400160405280600881526020016746756d626c65727360c01b8152506040518060400160405280600681526020016546554d424c4560d01b8152508160039081620001859190620005e2565b506004620001948282620005e2565b505050620001b1620001ab6200026160201b60201c565b62000265565b600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155620001f9620001f16005546001600160a01b031690565b6001620002b7565b62000206306001620002b7565b6015546200021f906001600160a01b03166001620002b7565b601554601780546001600160a01b0319166001600160a01b039283161790556005546200025a91166b033b2e3c9fd0803ce8000000620003fb565b50620006c4565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620003175760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b03821660009081526013602052604090205481151560ff9091161515036200039c5760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b60648201526084016200030e565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620004535760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200030e565b8060026000828254620004679190620006ae565b90915550506001600160a01b0382166000908152602081905260408120805483929062000496908490620006ae565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620005155762000515620004e5565b92915050565b6000826200053957634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200056957607f821691505b6020821081036200058a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620004e057600081815260208120601f850160051c81016020861015620005b95750805b601f850160051c820191505b81811015620005da57828155600101620005c5565b505050505050565b81516001600160401b03811115620005fe57620005fe6200053e565b62000616816200060f845462000554565b8462000590565b602080601f8311600181146200064e5760008415620006355750858301515b600019600386901b1c1916600185901b178555620005da565b600085815260208120601f198616915b828110156200067f578886015182559484019460019091019084016200065e565b50858210156200069e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820180821115620005155762000515620004e5565b61221680620006d46000396000f3fe6080604052600436106102545760003560e01c80637e76137711610139578063afa4f3b2116100b6578063ccb613581161007a578063ccb61358146106b2578063dd62ed3e146106c8578063e2f456051461070e578063e6c75f7114610724578063e6f705311461073a578063f2fde38b1461075a57600080fd5b8063afa4f3b21461061c578063b45e83f81461063c578063c024666814610652578063c49b9a8014610672578063caac79341461069257600080fd5b806395d89b41116100fd57806395d89b411461059f5780639e78fb4f146105b4578063a457c2d7146105bc578063a9059cbb146105dc578063aa402ecc146105fc57600080fd5b80637e7613771461050b57806385141a77146105215780638da5cb5b146105415780638ea5220f1461055f57806393ea49831461057f57600080fd5b806339509351116101d257806353371be01161019657806353371be01461045f578063556482091461047f5780635aa821a91461049557806370a08231146104ab578063715018a6146104e1578063751039fc146104f657600080fd5b806339509351146103b157806349bd5a5e146103d15780634a74bb02146103f15780634b8ce602146104105780634fbee1931461042657600080fd5b80631694505e116102195780631694505e1461030857806318160ddd146103405780631816467f1461035557806323b872dd14610375578063313ce5671461039557600080fd5b806299d3861461026057806301143fea1461027757806302259e9e146102a057806306fdde03146102b6578063095ea7b3146102d857600080fd5b3661025b57005b600080fd5b34801561026c57600080fd5b5061027561077a565b005b34801561028357600080fd5b5061028d600b5481565b6040519081526020015b60405180910390f35b3480156102ac57600080fd5b5061028d600f5481565b3480156102c257600080fd5b506102cb6107c0565b6040516102979190611d6e565b3480156102e457600080fd5b506102f86102f3366004611dd1565b610852565b6040519015158152602001610297565b34801561031457600080fd5b50600654610328906001600160a01b031681565b6040516001600160a01b039091168152602001610297565b34801561034c57600080fd5b5060025461028d565b34801561036157600080fd5b50610275610370366004611dfd565b610869565b34801561038157600080fd5b506102f8610390366004611e1a565b6108b5565b3480156103a157600080fd5b5060405160128152602001610297565b3480156103bd57600080fd5b506102f86103cc366004611dd1565b61095f565b3480156103dd57600080fd5b50600754610328906001600160a01b031681565b3480156103fd57600080fd5b506012546102f890610100900460ff1681565b34801561041c57600080fd5b5061028d60085481565b34801561043257600080fd5b506102f8610441366004611dfd565b6001600160a01b031660009081526013602052604090205460ff1690565b34801561046b57600080fd5b506012546102f89062010000900460ff1681565b34801561048b57600080fd5b5061028d60095481565b3480156104a157600080fd5b5061028d600e5481565b3480156104b757600080fd5b5061028d6104c6366004611dfd565b6001600160a01b031660009081526020819052604090205490565b3480156104ed57600080fd5b5061027561099b565b34801561050257600080fd5b506102756109d1565b34801561051757600080fd5b5061028d600d5481565b34801561052d57600080fd5b50601654610328906001600160a01b031681565b34801561054d57600080fd5b506005546001600160a01b0316610328565b34801561056b57600080fd5b50601554610328906001600160a01b031681565b34801561058b57600080fd5b5061028d6b033b2e3c9fd0803ce800000081565b3480156105ab57600080fd5b506102cb610a17565b610275610a26565b3480156105c857600080fd5b506102f86105d7366004611dd1565b610c9c565b3480156105e857600080fd5b506102f86105f7366004611dd1565b610d35565b34801561060857600080fd5b50610275610617366004611dd1565b610d42565b34801561062857600080fd5b50610275610637366004611e5b565b610f90565b34801561064857600080fd5b5061028d600c5481565b34801561065e57600080fd5b5061027561066d366004611e82565b610fbf565b34801561067e57600080fd5b5061027561068d366004611ebb565b6110cb565b34801561069e57600080fd5b50601454610328906001600160a01b031681565b3480156106be57600080fd5b5061028d600a5481565b3480156106d457600080fd5b5061028d6106e3366004611ed8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561071a57600080fd5b5061028d60105481565b34801561073057600080fd5b5061028d60115481565b34801561074657600080fd5b506102f8610755366004611dd1565b611149565b34801561076657600080fd5b50610275610775366004611dfd565b611157565b6005546001600160a01b031633146107ad5760405162461bcd60e51b81526004016107a490611f06565b60405180910390fd5b6012805462ffff00191662010100179055565b6060600380546107cf90611f3b565b80601f01602080910402602001604051908101604052809291908181526020018280546107fb90611f3b565b80156108485780601f1061081d57610100808354040283529160200191610848565b820191906000526020600020905b81548152906001019060200180831161082b57829003601f168201915b5050505050905090565b600061085f3384846111f2565b5060015b92915050565b6005546001600160a01b031633146108935760405162461bcd60e51b81526004016107a490611f06565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b60006108c2848484611316565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156109475760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016107a4565b61095485338584036111f2565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161085f918590610996908690611f8b565b6111f2565b6005546001600160a01b031633146109c55760405162461bcd60e51b81526004016107a490611f06565b6109cf60006117de565b565b6005546001600160a01b031633146109fb5760405162461bcd60e51b81526004016107a490611f06565b6b033b2e3c9fd0803ce8000000600e819055600f819055601155565b6060600480546107cf90611f3b565b6005546001600160a01b03163314610a505760405162461bcd60e51b81526004016107a490611f06565b6006546040805163c45a015560e01b815290516000926001600160a01b03169163c45a01559160048083019260209291908290030181865afa158015610a9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610abe9190611f9e565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b449190611f9e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610b91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb59190611f9e565b600780546001600160a01b0319166001600160a01b0383811691909117909155600654919250610bea913091166000196111f2565b6006546001600160a01b031663f305d7193430610c1c816001600160a01b031660009081526020819052604090205490565b600080610c316005546001600160a01b031690565b426040518863ffffffff1660e01b8152600401610c5396959493929190611fbb565b60606040518083038185885af1158015610c71573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c969190611ff6565b50505050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610d1e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016107a4565b610d2b33858584036111f2565b5060019392505050565b600061085f338484611316565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015610dac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd09190611f9e565b81600081518110610de357610de3612024565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110610e1757610e17612024565b60200260200101906001600160a01b031690816001600160a01b031681525050600081600181518110610e4c57610e4c612024565b602090810291909101810151336000908152601390925260409091205490915060ff16610ee35760065460405163b6f9de9560e01b81526001600160a01b039091169063b6f9de95908590610eac9060009087908a90429060040161207e565b6000604051808303818588803b158015610ec557600080fd5b505af1158015610ed9573d6000803e3d6000fd5b5050505050610c96565b806001600160a01b03166323b872dd8584600181518110610f0657610f06612024565b60209081029190910101516040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604481018690526064016020604051808303816000875af1158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8991906120b3565b5050505050565b6005546001600160a01b03163314610fba5760405162461bcd60e51b81526004016107a490611f06565b601055565b6005546001600160a01b03163314610fe95760405162461bcd60e51b81526004016107a490611f06565b6001600160a01b03821660009081526013602052604090205481151560ff90911615150361106c5760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b60648201526084016107a4565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146110f55760405162461bcd60e51b81526004016107a490611f06565b601280548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061113e90831515815260200190565b60405180910390a150565b600030610d2b848285611830565b6005546001600160a01b031633146111815760405162461bcd60e51b81526004016107a490611f06565b6001600160a01b0381166111e65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107a4565b6111ef816117de565b50565b6001600160a01b0383166112545760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107a4565b6001600160a01b0382166112b55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107a4565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661133c5760405162461bcd60e51b81526004016107a4906120d0565b6001600160a01b0382166113625760405162461bcd60e51b81526004016107a490612115565b6001600160a01b03831660009081526013602052604090205460ff161580156113a457506001600160a01b03821660009081526013602052604090205460ff16155b156113f75760125462010000900460ff166113f75760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81b9bdd08195b98589b1959606a1b60448201526064016107a4565b806000036114105761140b83836000611856565b505050565b6007546001600160a01b03848116911614801561144657506001600160a01b03831660009081526013602052604090205460ff16155b801561146b57506001600160a01b03821660009081526013602052604090205460ff16155b156114f2576001600160a01b0382166000908152602081905260409020546011546114968383611f8b565b11156114f05760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b60648201526084016107a4565b505b6001600160a01b03831660009081526013602052604090205460ff1615801561153457506001600160a01b03821660009081526013602052604090205460ff16155b801561154d57506007546001600160a01b038481169116145b156115b857600e548111156115b85760405162461bcd60e51b815260206004820152602b60248201527f616d6f756e74206578636565647320746865206d61784275795472616e73616360448201526a3a34b7b720b6b7bab73a1760a91b60648201526084016107a4565b60125460ff161580156115d857506007546001600160a01b038381169116145b80156115eb5750601254610100900460ff165b801561161057506001600160a01b03831660009081526013602052604090205460ff16155b1561161d5761161d6119aa565b6001600160a01b03831660009081526013602052604090205460ff1615801561165f57506001600160a01b03821660009081526013602052604090205460ff16155b156117d357600754600090819081906001600160a01b039081169087160361171557600b54156116ce576116a960646116a3600b5487611b0590919063ffffffff16565b90611b18565b925082600960008282546116bd9190611f8b565b909155506116ce9050863085611856565b600a5415611715576116f060646116a3600a5487611b0590919063ffffffff16565b915081600860008282546117049190611f8b565b909155506117159050863084611856565b6007546001600160a01b03908116908616036117af57600c54156117725761174d60646116a3600c5487611b0590919063ffffffff16565b925082600960008282546117619190611f8b565b909155506117729050863085611856565b600d54156117af5761179460646116a3600d5487611b0590919063ffffffff16565b6016549091506117af9087906001600160a01b031683611856565b6117cd6117c6826117c08686611b24565b90611b24565b8590611b30565b93505050505b61140b838383611856565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03831661184357600080fd5b6001600160a01b0382166112b557600080fd5b6001600160a01b03831661187c5760405162461bcd60e51b81526004016107a4906120d0565b6001600160a01b0382166118a25760405162461bcd60e51b81526004016107a490612115565b6001600160a01b0383166000908152602081905260409020548181101561191a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016107a4565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611951908490611f8b565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161199d91815260200190565b60405180910390a3610c96565b6012805460ff1916600117905530600090815260208190526040808220546014546001600160a01b031683529082205460105460085492939192108015906119f457506010548310155b15611aa857601054600090611a0a906002611b18565b90506000611a2382601054611b3090919063ffffffff16565b9050479250611a328230611b3c565b6000611a3e4785611b30565b9050611a4a8282611cc8565b60408051848152602081018390529081018390527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a160105460086000828254611a9f9190612158565b90915550505050505b6010548310611af657601054601554611aca91906001600160a01b0316611b3c565b60006010548310611af45780611ae1576000611ae3565b835b601154611af0919061216b565b6009555b505b50506012805460ff1916905550565b6000611b11828461218d565b9392505050565b6000611b11828461216b565b6000611b118284611f8b565b6000611b118284612158565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611b7157611b71612024565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611bca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bee9190611f9e565b81600181518110611c0157611c01612024565b6001600160a01b0392831660209182029290920181019190915260065430600090815260018352604080822092909416815291522054831115611c5857600654611c589030906001600160a01b03166000196111f2565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790611c919086906000908690889042906004016121a4565b600060405180830381600087803b158015611cab57600080fd5b505af1158015611cbf573d6000803e3d6000fd5b50505050505050565b600654611ce09030906001600160a01b0316846111f2565b6006546001600160a01b031663f305d719823085600080611d096005546001600160a01b031690565b426040518863ffffffff1660e01b8152600401611d2b96959493929190611fbb565b60606040518083038185885af1158015611d49573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610f899190611ff6565b600060208083528351808285015260005b81811015611d9b57858101830151858201604001528201611d7f565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146111ef57600080fd5b60008060408385031215611de457600080fd5b8235611def81611dbc565b946020939093013593505050565b600060208284031215611e0f57600080fd5b8135611b1181611dbc565b600080600060608486031215611e2f57600080fd5b8335611e3a81611dbc565b92506020840135611e4a81611dbc565b929592945050506040919091013590565b600060208284031215611e6d57600080fd5b5035919050565b80151581146111ef57600080fd5b60008060408385031215611e9557600080fd5b8235611ea081611dbc565b91506020830135611eb081611e74565b809150509250929050565b600060208284031215611ecd57600080fd5b8135611b1181611e74565b60008060408385031215611eeb57600080fd5b8235611ef681611dbc565b91506020830135611eb081611dbc565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680611f4f57607f821691505b602082108103611f6f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561086357610863611f75565b600060208284031215611fb057600080fd5b8151611b1181611dbc565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561200b57600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b838110156120735781516001600160a01b03168752958201959082019060010161204e565b509495945050505050565b848152608060208201526000612097608083018661203a565b6001600160a01b03949094166040830152506060015292915050565b6000602082840312156120c557600080fd5b8151611b1181611e74565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561086357610863611f75565b60008261218857634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761086357610863611f75565b85815284602082015260a0604082015260006121c360a083018661203a565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212206f9d8a4e030027165bf71bf8ed53d051dbbabbd74ee695edca1e63c5a7b884f764736f6c63430008110033
Deployed Bytecode
0x6080604052600436106102545760003560e01c80637e76137711610139578063afa4f3b2116100b6578063ccb613581161007a578063ccb61358146106b2578063dd62ed3e146106c8578063e2f456051461070e578063e6c75f7114610724578063e6f705311461073a578063f2fde38b1461075a57600080fd5b8063afa4f3b21461061c578063b45e83f81461063c578063c024666814610652578063c49b9a8014610672578063caac79341461069257600080fd5b806395d89b41116100fd57806395d89b411461059f5780639e78fb4f146105b4578063a457c2d7146105bc578063a9059cbb146105dc578063aa402ecc146105fc57600080fd5b80637e7613771461050b57806385141a77146105215780638da5cb5b146105415780638ea5220f1461055f57806393ea49831461057f57600080fd5b806339509351116101d257806353371be01161019657806353371be01461045f578063556482091461047f5780635aa821a91461049557806370a08231146104ab578063715018a6146104e1578063751039fc146104f657600080fd5b806339509351146103b157806349bd5a5e146103d15780634a74bb02146103f15780634b8ce602146104105780634fbee1931461042657600080fd5b80631694505e116102195780631694505e1461030857806318160ddd146103405780631816467f1461035557806323b872dd14610375578063313ce5671461039557600080fd5b806299d3861461026057806301143fea1461027757806302259e9e146102a057806306fdde03146102b6578063095ea7b3146102d857600080fd5b3661025b57005b600080fd5b34801561026c57600080fd5b5061027561077a565b005b34801561028357600080fd5b5061028d600b5481565b6040519081526020015b60405180910390f35b3480156102ac57600080fd5b5061028d600f5481565b3480156102c257600080fd5b506102cb6107c0565b6040516102979190611d6e565b3480156102e457600080fd5b506102f86102f3366004611dd1565b610852565b6040519015158152602001610297565b34801561031457600080fd5b50600654610328906001600160a01b031681565b6040516001600160a01b039091168152602001610297565b34801561034c57600080fd5b5060025461028d565b34801561036157600080fd5b50610275610370366004611dfd565b610869565b34801561038157600080fd5b506102f8610390366004611e1a565b6108b5565b3480156103a157600080fd5b5060405160128152602001610297565b3480156103bd57600080fd5b506102f86103cc366004611dd1565b61095f565b3480156103dd57600080fd5b50600754610328906001600160a01b031681565b3480156103fd57600080fd5b506012546102f890610100900460ff1681565b34801561041c57600080fd5b5061028d60085481565b34801561043257600080fd5b506102f8610441366004611dfd565b6001600160a01b031660009081526013602052604090205460ff1690565b34801561046b57600080fd5b506012546102f89062010000900460ff1681565b34801561048b57600080fd5b5061028d60095481565b3480156104a157600080fd5b5061028d600e5481565b3480156104b757600080fd5b5061028d6104c6366004611dfd565b6001600160a01b031660009081526020819052604090205490565b3480156104ed57600080fd5b5061027561099b565b34801561050257600080fd5b506102756109d1565b34801561051757600080fd5b5061028d600d5481565b34801561052d57600080fd5b50601654610328906001600160a01b031681565b34801561054d57600080fd5b506005546001600160a01b0316610328565b34801561056b57600080fd5b50601554610328906001600160a01b031681565b34801561058b57600080fd5b5061028d6b033b2e3c9fd0803ce800000081565b3480156105ab57600080fd5b506102cb610a17565b610275610a26565b3480156105c857600080fd5b506102f86105d7366004611dd1565b610c9c565b3480156105e857600080fd5b506102f86105f7366004611dd1565b610d35565b34801561060857600080fd5b50610275610617366004611dd1565b610d42565b34801561062857600080fd5b50610275610637366004611e5b565b610f90565b34801561064857600080fd5b5061028d600c5481565b34801561065e57600080fd5b5061027561066d366004611e82565b610fbf565b34801561067e57600080fd5b5061027561068d366004611ebb565b6110cb565b34801561069e57600080fd5b50601454610328906001600160a01b031681565b3480156106be57600080fd5b5061028d600a5481565b3480156106d457600080fd5b5061028d6106e3366004611ed8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561071a57600080fd5b5061028d60105481565b34801561073057600080fd5b5061028d60115481565b34801561074657600080fd5b506102f8610755366004611dd1565b611149565b34801561076657600080fd5b50610275610775366004611dfd565b611157565b6005546001600160a01b031633146107ad5760405162461bcd60e51b81526004016107a490611f06565b60405180910390fd5b6012805462ffff00191662010100179055565b6060600380546107cf90611f3b565b80601f01602080910402602001604051908101604052809291908181526020018280546107fb90611f3b565b80156108485780601f1061081d57610100808354040283529160200191610848565b820191906000526020600020905b81548152906001019060200180831161082b57829003601f168201915b5050505050905090565b600061085f3384846111f2565b5060015b92915050565b6005546001600160a01b031633146108935760405162461bcd60e51b81526004016107a490611f06565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b60006108c2848484611316565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156109475760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016107a4565b61095485338584036111f2565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161085f918590610996908690611f8b565b6111f2565b6005546001600160a01b031633146109c55760405162461bcd60e51b81526004016107a490611f06565b6109cf60006117de565b565b6005546001600160a01b031633146109fb5760405162461bcd60e51b81526004016107a490611f06565b6b033b2e3c9fd0803ce8000000600e819055600f819055601155565b6060600480546107cf90611f3b565b6005546001600160a01b03163314610a505760405162461bcd60e51b81526004016107a490611f06565b6006546040805163c45a015560e01b815290516000926001600160a01b03169163c45a01559160048083019260209291908290030181865afa158015610a9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610abe9190611f9e565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b449190611f9e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610b91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb59190611f9e565b600780546001600160a01b0319166001600160a01b0383811691909117909155600654919250610bea913091166000196111f2565b6006546001600160a01b031663f305d7193430610c1c816001600160a01b031660009081526020819052604090205490565b600080610c316005546001600160a01b031690565b426040518863ffffffff1660e01b8152600401610c5396959493929190611fbb565b60606040518083038185885af1158015610c71573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c969190611ff6565b50505050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610d1e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016107a4565b610d2b33858584036111f2565b5060019392505050565b600061085f338484611316565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015610dac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd09190611f9e565b81600081518110610de357610de3612024565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110610e1757610e17612024565b60200260200101906001600160a01b031690816001600160a01b031681525050600081600181518110610e4c57610e4c612024565b602090810291909101810151336000908152601390925260409091205490915060ff16610ee35760065460405163b6f9de9560e01b81526001600160a01b039091169063b6f9de95908590610eac9060009087908a90429060040161207e565b6000604051808303818588803b158015610ec557600080fd5b505af1158015610ed9573d6000803e3d6000fd5b5050505050610c96565b806001600160a01b03166323b872dd8584600181518110610f0657610f06612024565b60209081029190910101516040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604481018690526064016020604051808303816000875af1158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8991906120b3565b5050505050565b6005546001600160a01b03163314610fba5760405162461bcd60e51b81526004016107a490611f06565b601055565b6005546001600160a01b03163314610fe95760405162461bcd60e51b81526004016107a490611f06565b6001600160a01b03821660009081526013602052604090205481151560ff90911615150361106c5760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b60648201526084016107a4565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146110f55760405162461bcd60e51b81526004016107a490611f06565b601280548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061113e90831515815260200190565b60405180910390a150565b600030610d2b848285611830565b6005546001600160a01b031633146111815760405162461bcd60e51b81526004016107a490611f06565b6001600160a01b0381166111e65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107a4565b6111ef816117de565b50565b6001600160a01b0383166112545760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107a4565b6001600160a01b0382166112b55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107a4565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661133c5760405162461bcd60e51b81526004016107a4906120d0565b6001600160a01b0382166113625760405162461bcd60e51b81526004016107a490612115565b6001600160a01b03831660009081526013602052604090205460ff161580156113a457506001600160a01b03821660009081526013602052604090205460ff16155b156113f75760125462010000900460ff166113f75760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81b9bdd08195b98589b1959606a1b60448201526064016107a4565b806000036114105761140b83836000611856565b505050565b6007546001600160a01b03848116911614801561144657506001600160a01b03831660009081526013602052604090205460ff16155b801561146b57506001600160a01b03821660009081526013602052604090205460ff16155b156114f2576001600160a01b0382166000908152602081905260409020546011546114968383611f8b565b11156114f05760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b60648201526084016107a4565b505b6001600160a01b03831660009081526013602052604090205460ff1615801561153457506001600160a01b03821660009081526013602052604090205460ff16155b801561154d57506007546001600160a01b038481169116145b156115b857600e548111156115b85760405162461bcd60e51b815260206004820152602b60248201527f616d6f756e74206578636565647320746865206d61784275795472616e73616360448201526a3a34b7b720b6b7bab73a1760a91b60648201526084016107a4565b60125460ff161580156115d857506007546001600160a01b038381169116145b80156115eb5750601254610100900460ff165b801561161057506001600160a01b03831660009081526013602052604090205460ff16155b1561161d5761161d6119aa565b6001600160a01b03831660009081526013602052604090205460ff1615801561165f57506001600160a01b03821660009081526013602052604090205460ff16155b156117d357600754600090819081906001600160a01b039081169087160361171557600b54156116ce576116a960646116a3600b5487611b0590919063ffffffff16565b90611b18565b925082600960008282546116bd9190611f8b565b909155506116ce9050863085611856565b600a5415611715576116f060646116a3600a5487611b0590919063ffffffff16565b915081600860008282546117049190611f8b565b909155506117159050863084611856565b6007546001600160a01b03908116908616036117af57600c54156117725761174d60646116a3600c5487611b0590919063ffffffff16565b925082600960008282546117619190611f8b565b909155506117729050863085611856565b600d54156117af5761179460646116a3600d5487611b0590919063ffffffff16565b6016549091506117af9087906001600160a01b031683611856565b6117cd6117c6826117c08686611b24565b90611b24565b8590611b30565b93505050505b61140b838383611856565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03831661184357600080fd5b6001600160a01b0382166112b557600080fd5b6001600160a01b03831661187c5760405162461bcd60e51b81526004016107a4906120d0565b6001600160a01b0382166118a25760405162461bcd60e51b81526004016107a490612115565b6001600160a01b0383166000908152602081905260409020548181101561191a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016107a4565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611951908490611f8b565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161199d91815260200190565b60405180910390a3610c96565b6012805460ff1916600117905530600090815260208190526040808220546014546001600160a01b031683529082205460105460085492939192108015906119f457506010548310155b15611aa857601054600090611a0a906002611b18565b90506000611a2382601054611b3090919063ffffffff16565b9050479250611a328230611b3c565b6000611a3e4785611b30565b9050611a4a8282611cc8565b60408051848152602081018390529081018390527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a160105460086000828254611a9f9190612158565b90915550505050505b6010548310611af657601054601554611aca91906001600160a01b0316611b3c565b60006010548310611af45780611ae1576000611ae3565b835b601154611af0919061216b565b6009555b505b50506012805460ff1916905550565b6000611b11828461218d565b9392505050565b6000611b11828461216b565b6000611b118284611f8b565b6000611b118284612158565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611b7157611b71612024565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611bca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bee9190611f9e565b81600181518110611c0157611c01612024565b6001600160a01b0392831660209182029290920181019190915260065430600090815260018352604080822092909416815291522054831115611c5857600654611c589030906001600160a01b03166000196111f2565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790611c919086906000908690889042906004016121a4565b600060405180830381600087803b158015611cab57600080fd5b505af1158015611cbf573d6000803e3d6000fd5b50505050505050565b600654611ce09030906001600160a01b0316846111f2565b6006546001600160a01b031663f305d719823085600080611d096005546001600160a01b031690565b426040518863ffffffff1660e01b8152600401611d2b96959493929190611fbb565b60606040518083038185885af1158015611d49573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610f899190611ff6565b600060208083528351808285015260005b81811015611d9b57858101830151858201604001528201611d7f565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146111ef57600080fd5b60008060408385031215611de457600080fd5b8235611def81611dbc565b946020939093013593505050565b600060208284031215611e0f57600080fd5b8135611b1181611dbc565b600080600060608486031215611e2f57600080fd5b8335611e3a81611dbc565b92506020840135611e4a81611dbc565b929592945050506040919091013590565b600060208284031215611e6d57600080fd5b5035919050565b80151581146111ef57600080fd5b60008060408385031215611e9557600080fd5b8235611ea081611dbc565b91506020830135611eb081611e74565b809150509250929050565b600060208284031215611ecd57600080fd5b8135611b1181611e74565b60008060408385031215611eeb57600080fd5b8235611ef681611dbc565b91506020830135611eb081611dbc565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680611f4f57607f821691505b602082108103611f6f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561086357610863611f75565b600060208284031215611fb057600080fd5b8151611b1181611dbc565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561200b57600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b838110156120735781516001600160a01b03168752958201959082019060010161204e565b509495945050505050565b848152608060208201526000612097608083018661203a565b6001600160a01b03949094166040830152506060015292915050565b6000602082840312156120c557600080fd5b8151611b1181611e74565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561086357610863611f75565b60008261218857634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761086357610863611f75565b85815284602082015260a0604082015260006121c360a083018661203a565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212206f9d8a4e030027165bf71bf8ed53d051dbbabbd74ee695edca1e63c5a7b884f764736f6c63430008110033
Deployed Bytecode Sourcemap
26027:10379:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36238:121;;;;;;;;;;;;;:::i;:::-;;26300:28;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;26300:28:0;;;;;;;;26544:61;;;;;;;;;;;;;;;;3900:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;5306:169::-;;;;;;;;;;-1:-1:-1;5306:169:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;5306:169:0;1205:187:1;26105:41:0;;;;;;;;;;-1:-1:-1;26105:41:0;;;;-1:-1:-1;;;;;26105:41:0;;;;;;-1:-1:-1;;;;;1588:32:1;;;1570:51;;1558:2;1543:18;26105:41:0;1397:230:1;4488:108:0;;;;;;;;;;-1:-1:-1;4576:12:0;;4488:108;;34834:113;;;;;;;;;;-1:-1:-1;34834:113:0;;;;;:::i;:::-;;:::i;5541:492::-;;;;;;;;;;-1:-1:-1;5541:492:0;;;;;:::i;:::-;;:::i;4330:93::-;;;;;;;;;;-1:-1:-1;4330:93:0;;4413:2;2495:36:1;;2483:2;2468:18;4330:93:0;2353:184:1;6151:215:0;;;;;;;;;;-1:-1:-1;6151:215:0;;;;;:::i;:::-;;:::i;26153:28::-;;;;;;;;;;-1:-1:-1;26153:28:0;;;;-1:-1:-1;;;;;26153:28:0;;;26770:41;;;;;;;;;;-1:-1:-1;26770:41:0;;;;;;;;;;;26190:30;;;;;;;;;;;;;;;;35385:125;;;;;;;;;;-1:-1:-1;35385:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;35474:28:0;35450:4;35474:28;;;:19;:28;;;;;;;;;35385:125;26818:34;;;;;;;;;;-1:-1:-1;26818:34:0;;;;;;;;;;;26227:24;;;;;;;;;;;;;;;;26477:60;;;;;;;;;;;;;;;;4659:127;;;;;;;;;;-1:-1:-1;4659:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;4760:18:0;4733:7;4760:18;;;;;;;;;;;;4659:127;2660:94;;;;;;;;;;;;;:::i;33958:173::-;;;;;;;;;;;;;:::i;26373:30::-;;;;;;;;;;;;;;;;27149:70;;;;;;;;;;-1:-1:-1;27149:70:0;;;;-1:-1:-1;;;;;27149:70:0;;;2174:87;;;;;;;;;;-1:-1:-1;2247:6:0;;-1:-1:-1;;;;;2247:6:0;2174:87;;27056:86;;;;;;;;;;-1:-1:-1;27056:86:0;;;;-1:-1:-1;;;;;27056:86:0;;;26412:58;;;;;;;;;;;;26446:24;26412:58;;4119:104;;;;;;;;;;;;;:::i;35701:529::-;;;:::i;6484:413::-;;;;;;;;;;-1:-1:-1;6484:413:0;;;;;:::i;:::-;;:::i;4856:175::-;;;;;;;;;;-1:-1:-1;4856:175:0;;;;;:::i;:::-;;:::i;28680:557::-;;;;;;;;;;-1:-1:-1;28680:557:0;;;;;:::i;:::-;;:::i;35257:116::-;;;;;;;;;;-1:-1:-1;35257:116:0;;;;;:::i;:::-;;:::i;26336:29::-;;;;;;;;;;;;;;;;34959:290;;;;;;;;;;-1:-1:-1;34959:290:0;;;;;:::i;:::-;;:::i;35522:171::-;;;;;;;;;;-1:-1:-1;35522:171:0;;;;;:::i;:::-;;:::i;26955:94::-;;;;;;;;;;-1:-1:-1;26955:94:0;;;;-1:-1:-1;;;;;26955:94:0;;;26258:34;;;;;;;;;;;;;;;;5094:151;;;;;;;;;;-1:-1:-1;5094:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;5210:18:0;;;5183:7;5210:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5094:151;26612:55;;;;;;;;;;;;;;;;26674:51;;;;;;;;;;;;;;;;28481:191;;;;;;;;;;-1:-1:-1;28481:191:0;;;;;:::i;:::-;;:::i;3090:192::-;;;;;;;;;;-1:-1:-1;3090:192:0;;;;;:::i;:::-;;:::i;36238:121::-;2247:6;;-1:-1:-1;;;;;2247:6:0;1446:10;2394:23;2386:68;;;;-1:-1:-1;;;2386:68:0;;;;;;;:::i;:::-;;;;;;;;;36291:14:::1;:21:::0;;-1:-1:-1;;36323:28:0;;;;;36238:121::o;3900:100::-;3954:13;3987:5;3980:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3900:100;:::o;5306:169::-;5389:4;5406:39;1446:10;5429:7;5438:6;5406:8;:39::i;:::-;-1:-1:-1;5463:4:0;5306:169;;;;;:::o;34834:113::-;2247:6;;-1:-1:-1;;;;;2247:6:0;1446:10;2394:23;2386:68;;;;-1:-1:-1;;;2386:68:0;;;;;;;:::i;:::-;34917:9:::1;:22:::0;;-1:-1:-1;;;;;;34917:22:0::1;-1:-1:-1::0;;;;;34917:22:0;;;::::1;::::0;;;::::1;::::0;;34834:113::o;5541:492::-;5681:4;5698:36;5708:6;5716:9;5727:6;5698:9;:36::i;:::-;-1:-1:-1;;;;;5774:19:0;;5747:24;5774:19;;;:11;:19;;;;;;;;1446:10;5774:33;;;;;;;;5826:26;;;;5818:79;;;;-1:-1:-1;;;5818:79:0;;5508:2:1;5818:79:0;;;5490:21:1;5547:2;5527:18;;;5520:30;5586:34;5566:18;;;5559:62;-1:-1:-1;;;5637:18:1;;;5630:38;5685:19;;5818:79:0;5306:404:1;5818:79:0;5933:57;5942:6;1446:10;5983:6;5964:16;:25;5933:8;:57::i;:::-;-1:-1:-1;6021:4:0;;5541:492;-1:-1:-1;;;;5541:492:0:o;6151:215::-;1446:10;6239:4;6288:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6288:34:0;;;;;;;;;;6239:4;;6256:80;;6279:7;;6288:47;;6325:10;;6288:47;:::i;:::-;6256:8;:80::i;2660:94::-;2247:6;;-1:-1:-1;;;;;2247:6:0;1446:10;2394:23;2386:68;;;;-1:-1:-1;;;2386:68:0;;;;;;;:::i;:::-;2725:21:::1;2743:1;2725:9;:21::i;:::-;2660:94::o:0;33958:173::-;2247:6;;-1:-1:-1;;;;;2247:6:0;1446:10;2394:23;2386:68;;;;-1:-1:-1;;;2386:68:0;;;;;;;:::i;:::-;26446:24:::1;34010:23;:33:::0;;;34054:24:::1;:34:::0;;;34099:14:::1;:24:::0;33958:173::o;4119:104::-;4175:13;4208:7;4201:14;;;;;:::i;35701:529::-;2247:6;;-1:-1:-1;;;;;2247:6:0;1446:10;2394:23;2386:68;;;;-1:-1:-1;;;2386:68:0;;;;;;;:::i;:::-;35802:15:::1;::::0;:25:::1;::::0;;-1:-1:-1;;;35802:25:0;;;;35759:22:::1;::::0;-1:-1:-1;;;;;35802:15:0::1;::::0;:23:::1;::::0;:25:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:15;:25:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35784:55:0::1;;35848:4;35855:15;;;;;;;;;-1:-1:-1::0;;;;;35855:15:0::1;-1:-1:-1::0;;;;;35855:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35784:94;::::0;-1:-1:-1;;;;;;35784:94:0::1;::::0;;;;;;-1:-1:-1;;;;;6463:15:1;;;35784:94:0::1;::::0;::::1;6445:34:1::0;6515:15;;6495:18;;;6488:43;6380:18;;35784:94:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35889:13;:30:::0;;-1:-1:-1;;;;;;35889:30:0::1;-1:-1:-1::0;;;;;35889:30:0;;::::1;::::0;;;::::1;::::0;;;35962:15:::1;::::0;35889:30;;-1:-1:-1;35930:68:0::1;::::0;35947:4:::1;::::0;35962:15:::1;-1:-1:-1::0;;35930:8:0::1;:68::i;:::-;36009:15;::::0;-1:-1:-1;;;;;36009:15:0::1;:31;36048:9;36081:4;36101:24;36081:4:::0;-1:-1:-1;;;;;4760:18:0;4733:7;4760:18;;;;;;;;;;;;4659:127;36101:24:::1;36140:1;36157::::0;36174:7:::1;2247:6:::0;;-1:-1:-1;;;;;2247:6:0;;2174:87;36174:7:::1;36196:15;36009:213;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;35748:482;35701:529::o:0;6484:413::-;1446:10;6577:4;6621:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6621:34:0;;;;;;;;;;6674:35;;;;6666:85;;;;-1:-1:-1;;;6666:85:0;;7667:2:1;6666:85:0;;;7649:21:1;7706:2;7686:18;;;7679:30;7745:34;7725:18;;;7718:62;-1:-1:-1;;;7796:18:1;;;7789:35;7841:19;;6666:85:0;7465:401:1;6666:85:0;6787:67;1446:10;6810:7;6838:15;6819:16;:34;6787:8;:67::i;:::-;-1:-1:-1;6885:4:0;;6484:413;-1:-1:-1;;;6484:413:0:o;4856:175::-;4942:4;4959:42;1446:10;4983:9;4994:6;4959:9;:42::i;28680:557::-;28775:16;;;28789:1;28775:16;;;;;;;;28751:21;;28775:16;;;;;;;;-1:-1:-1;;28812:15:0;;:22;;;-1:-1:-1;;;28812:22:0;;;;28751:40;;-1:-1:-1;;;;;;28812:15:0;;;;:20;;-1:-1:-1;28812:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28802:4;28807:1;28802:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;28802:32:0;;;-1:-1:-1;;;;;28802:32:0;;;;;28863:4;28845;28850:1;28845:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;28845:23:0;;;-1:-1:-1;;;;;28845:23:0;;;;;28879:12;28901:4;28906:1;28901:7;;;;;;;;:::i;:::-;;;;;;;;;;;;28947:10;28927:31;;;;:19;:31;;;;;;;;28901:7;;-1:-1:-1;28927:31:0;;28922:308;;28975:15;;:195;;-1:-1:-1;;;28975:195:0;;-1:-1:-1;;;;;28975:15:0;;;;:66;;29049:6;;28975:195;;:15;;29096:4;;29119:2;;29140:15;;28975:195;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28922:308;;;29189:5;-1:-1:-1;;;;;29189:18:0;;29208:2;29212:4;29217:1;29212:7;;;;;;;;:::i;:::-;;;;;;;;;;;29189:39;;-1:-1:-1;;;;;;29189:39:0;;;;;;;-1:-1:-1;;;;;9374:15:1;;;29189:39:0;;;9356:34:1;9426:15;;9406:18;;;9399:43;9458:18;;;9451:34;;;9291:18;;29189:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28740:497;;28680:557;;:::o;35257:116::-;2247:6;;-1:-1:-1;;;;;2247:6:0;1446:10;2394:23;2386:68;;;;-1:-1:-1;;;2386:68:0;;;;;;;:::i;:::-;35336:18:::1;:29:::0;35257:116::o;34959:290::-;2247:6;;-1:-1:-1;;;;;2247:6:0;1446:10;2394:23;2386:68;;;;-1:-1:-1;;;2386:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35052:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;:40;::::1;;:28;::::0;;::::1;:40;;::::0;35044:95:::1;;;::::0;-1:-1:-1;;;35044:95:0;;9948:2:1;35044:95:0::1;::::0;::::1;9930:21:1::0;9987:2;9967:18;;;9960:30;10026:34;10006:18;;;9999:62;-1:-1:-1;;;10077:18:1;;;10070:40;10127:19;;35044:95:0::1;9746:406:1::0;35044:95:0::1;-1:-1:-1::0;;;;;35150:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;35150:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;35207:34;;1345:41:1;;;35207:34:0::1;::::0;1318:18:1;35207:34:0::1;;;;;;;34959:290:::0;;:::o;35522:171::-;2247:6;;-1:-1:-1;;;;;2247:6:0;1446:10;2394:23;2386:68;;;;-1:-1:-1;;;2386:68:0;;;;;;;:::i;:::-;35599:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;35599:32:0;;::::1;;::::0;;35647:38:::1;::::0;::::1;::::0;::::1;::::0;35623:8;1370:14:1;1363:22;1345:41;;1333:2;1318:18;;1205:187;35647:38:0::1;;;;;;;;35522:171:::0;:::o;28481:191::-;28554:4;28595;28611:31;28619:7;28595:4;28635:6;28611:7;:31::i;3090:192::-;2247:6;;-1:-1:-1;;;;;2247:6:0;1446:10;2394:23;2386:68;;;;-1:-1:-1;;;2386:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3179:22:0;::::1;3171:73;;;::::0;-1:-1:-1;;;3171:73:0;;10359:2:1;3171:73:0::1;::::0;::::1;10341:21:1::0;10398:2;10378:18;;;10371:30;10437:34;10417:18;;;10410:62;-1:-1:-1;;;10488:18:1;;;10481:36;10534:19;;3171:73:0::1;10157:402:1::0;3171:73:0::1;3255:19;3265:8;3255:9;:19::i;:::-;3090:192:::0;:::o;8390:380::-;-1:-1:-1;;;;;8526:19:0;;8518:68;;;;-1:-1:-1;;;8518:68:0;;10766:2:1;8518:68:0;;;10748:21:1;10805:2;10785:18;;;10778:30;10844:34;10824:18;;;10817:62;-1:-1:-1;;;10895:18:1;;;10888:34;10939:19;;8518:68:0;10564:400:1;8518:68:0;-1:-1:-1;;;;;8605:21:0;;8597:68;;;;-1:-1:-1;;;8597:68:0;;11171:2:1;8597:68:0;;;11153:21:1;11210:2;11190:18;;;11183:30;11249:34;11229:18;;;11222:62;-1:-1:-1;;;11300:18:1;;;11293:32;11342:19;;8597:68:0;10969:398:1;8597:68:0;-1:-1:-1;;;;;8678:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8730:32;;160:25:1;;;8730:32:0;;133:18:1;8730:32:0;;;;;;;8390:380;;;:::o;29245:2814::-;-1:-1:-1;;;;;29377:18:0;;29369:68;;;;-1:-1:-1;;;29369:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29456:16:0;;29448:64;;;;-1:-1:-1;;;29448:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29530:25:0;;;;;;:19;:25;;;;;;;;29529:26;:54;;;;-1:-1:-1;;;;;;29560:23:0;;;;;;:19;:23;;;;;;;;29559:24;29529:54;29525:133;;;29608:14;;;;;;;29600:46;;;;-1:-1:-1;;;29600:46:0;;12384:2:1;29600:46:0;;;12366:21:1;12423:2;12403:18;;;12396:30;-1:-1:-1;;;12442:18:1;;;12435:49;12501:18;;29600:46:0;12182:343:1;29600:46:0;29673:6;29683:1;29673:11;29670:92;;29701:28;29717:4;29723:2;29727:1;29701:15;:28::i;:::-;29245:2814;;;:::o;29670:92::-;29784:13;;-1:-1:-1;;;;;29778:19:0;;;29784:13;;29778:19;:49;;;;-1:-1:-1;;;;;;29802:25:0;;;;;;:19;:25;;;;;;;;29801:26;29778:49;:77;;;;-1:-1:-1;;;;;;29832:23:0;;;;;;:19;:23;;;;;;;;29831:24;29778:77;29774:273;;;-1:-1:-1;;;;;4760:18:0;;29872:32;4760:18;;;;;;;;;;;29980:14;;29943:33;29970:6;4760:18;29943:33;:::i;:::-;:51;;29935:100;;;;-1:-1:-1;;;29935:100:0;;12732:2:1;29935:100:0;;;12714:21:1;12771:2;12751:18;;;12744:30;12810:34;12790:18;;;12783:62;-1:-1:-1;;;12861:18:1;;;12854:34;12905:19;;29935:100:0;12530:400:1;29935:100:0;29857:190;29774:273;-1:-1:-1;;;;;30063:25:0;;;;;;:19;:25;;;;;;;;30062:26;:54;;;;-1:-1:-1;;;;;;30093:23:0;;;;;;:19;:23;;;;;;;;30092:24;30062:54;:77;;;;-1:-1:-1;30126:13:0;;-1:-1:-1;;;;;30120:19:0;;;30126:13;;30120:19;30062:77;30059:197;;;30173:23;;30163:6;:33;;30155:89;;;;-1:-1:-1;;;30155:89:0;;13137:2:1;30155:89:0;;;13119:21:1;13176:2;13156:18;;;13149:30;13215:34;13195:18;;;13188:62;-1:-1:-1;;;13266:18:1;;;13259:41;13317:19;;30155:89:0;12935:407:1;30155:89:0;30494:16;;;;30493:17;:38;;;;-1:-1:-1;30518:13:0;;-1:-1:-1;;;;;30514:17:0;;;30518:13;;30514:17;30493:38;:77;;;;-1:-1:-1;30549:21:0;;;;;;;30493:77;:121;;;;-1:-1:-1;;;;;;30589:25:0;;;;;;:19;:25;;;;;;;;30588:26;30493:121;30490:178;;;30640:16;:14;:16::i;:::-;-1:-1:-1;;;;;30684:25:0;;;;;;:19;:25;;;;;;;;30683:26;:54;;;;-1:-1:-1;;;;;;30714:23:0;;;;;;:19;:23;;;;;;;;30713:24;30683:54;30680:1328;;;30863:13;;30754:16;;;;;;-1:-1:-1;;;;;30863:13:0;;;30857:19;;;;30854:562;;30918:9;;:13;30915:215;;30967:30;30993:3;30967:21;30978:9;;30967:6;:10;;:21;;;;:::i;:::-;:25;;:30::i;:::-;30956:41;;31033:8;31020:9;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;31064:46:0;;-1:-1:-1;31080:4:0;31094;31101:8;31064:15;:46::i;:::-;31153:15;;:19;31150:251;;31214:36;31246:3;31214:27;31225:15;;31214:6;:10;;:27;;;;:::i;:36::-;31197:53;;31292:14;31273:15;;:33;;;;;;;:::i;:::-;;;;-1:-1:-1;31329:52:0;;-1:-1:-1;31345:4:0;31359;31366:14;31329:15;:52::i;:::-;31439:13;;-1:-1:-1;;;;;31439:13:0;;;31435:17;;;;31432:486;;31493:10;;:14;31490:217;;31543:31;31570:3;31543:22;31554:10;;31543:6;:10;;:22;;;;:::i;:31::-;31532:42;;31610:8;31597:9;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;31641:46:0;;-1:-1:-1;31657:4:0;31671;31678:8;31641:15;:46::i;:::-;31730:11;;:15;31727:174;;31782:32;31810:3;31782:23;31793:11;;31782:6;:10;;:23;;;;:::i;:32::-;31859:10;;31770:44;;-1:-1:-1;31837:44:0;;31853:4;;-1:-1:-1;;;;;31859:10:0;31770:44;31837:15;:44::i;:::-;31941:55;31952:43;31985:9;31952:28;:8;31965:14;31952:12;:28::i;:::-;:32;;:43::i;:::-;31941:6;;:10;:55::i;:::-;31932:64;;30739:1269;;;30680:1328;32018:33;32034:4;32040:2;32044:6;32018:15;:33::i;2762:173::-;2837:6;;;-1:-1:-1;;;;;2854:17:0;;;-1:-1:-1;;;;;;2854:17:0;;;;;;;2887:40;;2837:6;;;2854:17;2837:6;;2887:40;;2818:16;;2887:40;2807:128;2762:173;:::o;8778:271::-;-1:-1:-1;;;;;8885:19:0;;8877:28;;;;;;-1:-1:-1;;;;;8924:21:0;;8916:30;;;;;6999:733;-1:-1:-1;;;;;7139:20:0;;7131:70;;;;-1:-1:-1;;;7131:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7220:23:0;;7212:71;;;;-1:-1:-1;;;7212:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7380:17:0;;7356:21;7380:17;;;;;;;;;;;7416:23;;;;7408:74;;;;-1:-1:-1;;;7408:74:0;;13549:2:1;7408:74:0;;;13531:21:1;13588:2;13568:18;;;13561:30;13627:34;13607:18;;;13600:62;-1:-1:-1;;;13678:18:1;;;13671:36;13724:19;;7408:74:0;13347:402:1;7408:74:0;-1:-1:-1;;;;;7518:17:0;;;:9;:17;;;;;;;;;;;7538:22;;;7518:42;;7582:20;;;;;;;;:30;;7554:6;;7518:9;7582:30;;7554:6;;7582:30;:::i;:::-;;;;;;;;7647:9;-1:-1:-1;;;;;7630:35:0;7639:6;-1:-1:-1;;;;;7630:35:0;;7658:6;7630:35;;;;160:25:1;;148:2;133:18;;14:177;7630:35:0;;;;;;;;7678:46;29245:2814;32067:1362;27763:16;:23;;-1:-1:-1;;27763:23:0;27782:4;27763:23;;;32173:4:::1;-1:-1:-1::0;4760:18:0;;;;;;;;;;;;32221:17:::1;::::0;-1:-1:-1;;;;;32221:17:0::1;4760:18:::0;;;;;;32315::::1;::::0;32296:15:::1;::::0;4760:18;;;;32296:37:::1;::::0;::::1;::::0;:83:::1;;;32361:18;;32337:20;:42;;32296:83;32293:817;;;32466:18;::::0;32451:12:::1;::::0;32466:25:::1;::::0;32489:1:::1;32466:22;:25::i;:::-;32451:40;;32506:17;32526:28;32549:4;32526:18;;:22;;:28;;;;:::i;:::-;32506:48;;32648:21;32631:38;;32722:37;32739:4;32753;32722:16;:37::i;:::-;32828:18;32849:41;:21;32875:14:::0;32849:25:::1;:41::i;:::-;32828:62;;32948:35;32961:9;32972:10;32948:12;:35::i;:::-;33003:43;::::0;;13956:25:1;;;14012:2;13997:18;;13990:34;;;14040:18;;;14033:34;;;33003:43:0::1;::::0;13944:2:1;13929:18;33003:43:0::1;;;;;;;33080:18;;33061:15;;:37;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;32293:817:0::1;33149:18;;33125:20;:42;33122:300;;33201:18;::::0;33221:9:::1;::::0;33184:47:::1;::::0;33201:18;-1:-1:-1;;;;;33221:9:0::1;33184:16;:47::i;:::-;33246:12;33291:18;;33277:10;:32;33273:138;;33360:7;:34;;33393:1;33360:34;;;33370:20;33360:34;33342:14;;:53;;;;:::i;:::-;33330:9;:65:::0;33273:138:::1;33169:253;33122:300;-1:-1:-1::0;;27809:16:0;:24;;-1:-1:-1;;27809:24:0;;;-1:-1:-1;32067:1362:0:o;24130:98::-;24188:7;24215:5;24219:1;24215;:5;:::i;:::-;24208:12;24130:98;-1:-1:-1;;;24130:98:0:o;24397:::-;24455:7;24482:5;24486:1;24482;:5;:::i;23661:98::-;23719:7;23746:5;23750:1;23746;:5;:::i;23909:98::-;23967:7;23994:5;23998:1;23994;:5;:::i;34139:687::-;34302:16;;;34316:1;34302:16;;;;;;;;34278:21;;34302:16;;;;;;;;;;-1:-1:-1;34302:16:0;34278:40;;34347:4;34329;34334:1;34329:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34329:23:0;;;:7;;;;;;;;;;:23;;;;34373:15;;:22;;;-1:-1:-1;;;34373:22:0;;;;:15;;;;;:20;;:22;;;;;34329:7;;34373:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34363:4;34368:1;34363:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34363:32:0;;;:7;;;;;;;;;;:32;;;;34444:15;;34429:4;5183:7;5210:18;;;:11;:18;;;;;;34444:15;;;;5210:27;;;;;;34464:11;-1:-1:-1;34408:156:0;;;34522:15;;34490:62;;34507:4;;-1:-1:-1;;;;;34522:15:0;-1:-1:-1;;34490:8:0;:62::i;:::-;34602:15;;:214;;-1:-1:-1;;;34602:214:0;;-1:-1:-1;;;;;34602:15:0;;;;:66;;:214;;34683:11;;34602:15;;34753:4;;34772:3;;34790:15;;34602:214;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34207:619;34139:687;;:::o;33437:513::-;33617:15;;33585:62;;33602:4;;-1:-1:-1;;;;;33617:15:0;33635:11;33585:8;:62::i;:::-;33690:15;;-1:-1:-1;;;;;33690:15:0;:31;33729:9;33762:4;33782:11;33690:15;;33894:7;2247:6;;-1:-1:-1;;;;;2247:6:0;;2174:87;33894:7;33916:15;33690:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1632:255::-;1699:6;1752:2;1740:9;1731:7;1727:23;1723:32;1720:52;;;1768:1;1765;1758:12;1720:52;1807:9;1794:23;1826:31;1851:5;1826:31;:::i;1892:456::-;1969:6;1977;1985;2038:2;2026:9;2017:7;2013:23;2009:32;2006:52;;;2054:1;2051;2044:12;2006:52;2093:9;2080:23;2112:31;2137:5;2112:31;:::i;:::-;2162:5;-1:-1:-1;2219:2:1;2204:18;;2191:32;2232:33;2191:32;2232:33;:::i;:::-;1892:456;;2284:7;;-1:-1:-1;;;2338:2:1;2323:18;;;;2310:32;;1892:456::o;3226:180::-;3285:6;3338:2;3326:9;3317:7;3313:23;3309:32;3306:52;;;3354:1;3351;3344:12;3306:52;-1:-1:-1;3377:23:1;;3226:180;-1:-1:-1;3226:180:1:o;3411:118::-;3497:5;3490:13;3483:21;3476:5;3473:32;3463:60;;3519:1;3516;3509:12;3534:382;3599:6;3607;3660:2;3648:9;3639:7;3635:23;3631:32;3628:52;;;3676:1;3673;3666:12;3628:52;3715:9;3702:23;3734:31;3759:5;3734:31;:::i;:::-;3784:5;-1:-1:-1;3841:2:1;3826:18;;3813:32;3854:30;3813:32;3854:30;:::i;:::-;3903:7;3893:17;;;3534:382;;;;;:::o;3921:241::-;3977:6;4030:2;4018:9;4009:7;4005:23;4001:32;3998:52;;;4046:1;4043;4036:12;3998:52;4085:9;4072:23;4104:28;4126:5;4104:28;:::i;4167:388::-;4235:6;4243;4296:2;4284:9;4275:7;4271:23;4267:32;4264:52;;;4312:1;4309;4302:12;4264:52;4351:9;4338:23;4370:31;4395:5;4370:31;:::i;:::-;4420:5;-1:-1:-1;4477:2:1;4462:18;;4449:32;4490:33;4449:32;4490:33;:::i;4560:356::-;4762:2;4744:21;;;4781:18;;;4774:30;4840:34;4835:2;4820:18;;4813:62;4907:2;4892:18;;4560:356::o;4921:380::-;5000:1;4996:12;;;;5043;;;5064:61;;5118:4;5110:6;5106:17;5096:27;;5064:61;5171:2;5163:6;5160:14;5140:18;5137:38;5134:161;;5217:10;5212:3;5208:20;5205:1;5198:31;5252:4;5249:1;5242:15;5280:4;5277:1;5270:15;5134:161;;4921:380;;;:::o;5715:127::-;5776:10;5771:3;5767:20;5764:1;5757:31;5807:4;5804:1;5797:15;5831:4;5828:1;5821:15;5847:125;5912:9;;;5933:10;;;5930:36;;;5946:18;;:::i;5977:251::-;6047:6;6100:2;6088:9;6079:7;6075:23;6071:32;6068:52;;;6116:1;6113;6106:12;6068:52;6148:9;6142:16;6167:31;6192:5;6167:31;:::i;6542:607::-;-1:-1:-1;;;;;6901:15:1;;;6883:34;;6948:2;6933:18;;6926:34;;;;6991:2;6976:18;;6969:34;;;;7034:2;7019:18;;7012:34;;;;7083:15;;;7077:3;7062:19;;7055:44;6863:3;7115:19;;7108:35;;;;6832:3;6817:19;;6542:607::o;7154:306::-;7242:6;7250;7258;7311:2;7299:9;7290:7;7286:23;7282:32;7279:52;;;7327:1;7324;7317:12;7279:52;7356:9;7350:16;7340:26;;7406:2;7395:9;7391:18;7385:25;7375:35;;7450:2;7439:9;7435:18;7429:25;7419:35;;7154:306;;;;;:::o;8003:127::-;8064:10;8059:3;8055:20;8052:1;8045:31;8095:4;8092:1;8085:15;8119:4;8116:1;8109:15;8135:461;8188:3;8226:5;8220:12;8253:6;8248:3;8241:19;8279:4;8308:2;8303:3;8299:12;8292:19;;8345:2;8338:5;8334:14;8366:1;8376:195;8390:6;8387:1;8384:13;8376:195;;;8455:13;;-1:-1:-1;;;;;8451:39:1;8439:52;;8511:12;;;;8546:15;;;;8487:1;8405:9;8376:195;;;-1:-1:-1;8587:3:1;;8135:461;-1:-1:-1;;;;;8135:461:1:o;8601:510::-;8872:6;8861:9;8854:25;8915:3;8910:2;8899:9;8895:18;8888:31;8835:4;8936:57;8988:3;8977:9;8973:19;8965:6;8936:57;:::i;:::-;-1:-1:-1;;;;;9029:32:1;;;;9024:2;9009:18;;9002:60;-1:-1:-1;9093:2:1;9078:18;9071:34;8928:65;8601:510;-1:-1:-1;;8601:510:1:o;9496:245::-;9563:6;9616:2;9604:9;9595:7;9591:23;9587:32;9584:52;;;9632:1;9629;9622:12;9584:52;9664:9;9658:16;9683:28;9705:5;9683:28;:::i;11372:401::-;11574:2;11556:21;;;11613:2;11593:18;;;11586:30;11652:34;11647:2;11632:18;;11625:62;-1:-1:-1;;;11718:2:1;11703:18;;11696:35;11763:3;11748:19;;11372:401::o;11778:399::-;11980:2;11962:21;;;12019:2;11999:18;;;11992:30;12058:34;12053:2;12038:18;;12031:62;-1:-1:-1;;;12124:2:1;12109:18;;12102:33;12167:3;12152:19;;11778:399::o;14078:128::-;14145:9;;;14166:11;;;14163:37;;;14180:18;;:::i;14211:217::-;14251:1;14277;14267:132;;14321:10;14316:3;14312:20;14309:1;14302:31;14356:4;14353:1;14346:15;14384:4;14381:1;14374:15;14267:132;-1:-1:-1;14413:9:1;;14211:217::o;14433:168::-;14506:9;;;14537;;14554:15;;;14548:22;;14534:37;14524:71;;14575:18;;:::i;14606:582::-;14905:6;14894:9;14887:25;14948:6;14943:2;14932:9;14928:18;14921:34;14991:3;14986:2;14975:9;14971:18;14964:31;14868:4;15012:57;15064:3;15053:9;15049:19;15041:6;15012:57;:::i;:::-;-1:-1:-1;;;;;15105:32:1;;;;15100:2;15085:18;;15078:60;-1:-1:-1;15169:3:1;15154:19;15147:35;15004:65;14606:582;-1:-1:-1;;;14606:582:1:o
Swarm Source
ipfs://6f9d8a4e030027165bf71bf8ed53d051dbbabbd74ee695edca1e63c5a7b884f7
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.