ERC-20
Overview
Max Total Supply
500,000,000 FOMO
Holders
3,327
Market
Price
$0.00 @ 0.000000 ETH (-15.47%)
Onchain Market Cap
$57,300.00
Circulating Supply Market Cap
$55,124.00
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000000000000000001 FOMOValue
$0.00 ( ~0 Eth) [0.0000%]Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
FOMO
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-03-19 */ // SPDX-License-Identifier: MIT /* Website: https://fomonetwork.io Telegram: https://t.me/FOMONetwork Twitter: https://twitter.com/FOMO_Network */ pragma solidity ^0.8.1; library Address { function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } pragma solidity ^0.8.0; interface IERC20 { event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, 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 from, address to, uint256 amount) external returns (bool); } 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; } } 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; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } function _transfer(address from, address to, uint256 amount) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } 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 _spendAllowance(address owner, address spender, uint256 amount) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {} function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {} } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _transferOwnership(_msgSender()); } modifier onlyOwner() { _checkOwner(); _; } function owner() public view virtual returns (address) { return _owner; } function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IERC20Permit { function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; function nonces(address owner) external view returns (uint256); function DOMAIN_SEPARATOR() external view returns (bytes32); } library SafeERC20 { using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 oldAllowance = token.allowance(address(this), spender); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value)); } } function forceApprove(IERC20 token, address spender, uint256 value) internal { bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value); if (!_callOptionalReturnBool(token, approvalCall)) { _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0)); _callOptionalReturn(token, approvalCall); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); } function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); require(returndata.length == 0 || abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false // and not revert is the subcall reverts. (bool success, bytes memory returndata) = address(token).call(data); return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && Address.isContract(address(token)); } } library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { // Solidity will revert if denominator == 0, unlike the div opcode on its own. // The surrounding unchecked block does not change this fact. // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic. return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1, "Math: mulDiv overflow"); uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works // in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10 ** 64) { value /= 10 ** 64; result += 64; } if (value >= 10 ** 32) { value /= 10 ** 32; result += 32; } if (value >= 10 ** 16) { value /= 10 ** 16; result += 16; } if (value >= 10 ** 8) { value /= 10 ** 8; result += 8; } if (value >= 10 ** 4) { value /= 10 ** 4; result += 4; } if (value >= 10 ** 2) { value /= 10 ** 2; result += 2; } if (value >= 10 ** 1) { result += 1; } } return result; } function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0); } } function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0); } } } pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); 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(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } pragma solidity 0.8.19; contract FOMO is ERC20, Ownable { using SafeERC20 for IERC20; uint256 private constant MAX = ~uint256(0); uint8 private _decimals; /////////////////////////////////////////////////////////////////////////// address public baseTokenForMarket; bool private inSwapAndLiquify; uint24 public sellLiquidityFee; uint24 public buyLiquidityFee; uint24 public sellMarketingFee; uint24 public buyMarketingFee; address public marketingWallet; uint256 public minAmountToTakeFee; uint256 public maxWallet; uint256 public maxTransactionAmount; address public mainRouter; address public mainPair; mapping(address => bool) public isExcludedFromMaxTransactionAmount; mapping(address => bool) public isExcludedFromFee; mapping(address => bool) public automatedMarketMakerPairs; uint256 private _liquidityFeeTokens; uint256 private _marketingFeeTokens; event UpdateLiquidityFee( uint24 newSellLiquidityFee, uint24 newBuyLiquidityFee, uint24 oldSellLiquidityFee, uint24 oldBuyLiquidityFee ); event UpdateMarketingFee( uint24 newSellMarketingFee, uint24 newBuyMarketingFee, uint24 oldSellMarketingFee, uint24 oldBuyMarketingFee ); event UpdateMarketingWallet( address indexed newMarketingWallet, address indexed oldMarketingWallet ); event ExcludedFromMaxTransactionAmount(address indexed account, bool isExcluded); event UpdateMinAmountToTakeFee(uint256 newMinAmountToTakeFee, uint256 oldMinAmountToTakeFee); event SetAutomatedMarketMakerPair(address indexed pair, bool value); event ExcludedFromFee(address indexed account, bool isEx); event SwapAndLiquify( uint256 tokensForLiquidity, uint256 baseTokenForLiquidity ); event MarketingFeeTaken( uint256 marketingFeeTokens, uint256 marketingFeeBaseTokenSwapped ); event MainRouterUpdated( address mainRouter, address mainPair, address baseTokenForMarket ); event UpdateMaxWallet(uint256 newMaxWallet, uint256 oldMaxWallet); event UpdateMaxTransactionAmount(uint256 newMaxTransactionAmount, uint256 oldMaxTransactionAmount); /////////////////////////////////////////////////////////////////////////////// constructor( address _mainRouter, address _marketingWallet ) ERC20("FOMO Network", "FOMO") { _decimals = 18; _mint(msg.sender, 500000000000000000000000000); mainRouter=_mainRouter; baseTokenForMarket = IUniswapV2Router02(mainRouter).WETH(); require(_marketingWallet!=address(0), "marketing wallet can not be 0"); require(_mainRouter!=address(0), "Router address can not be 0"); marketingWallet=_marketingWallet; emit UpdateMarketingWallet( marketingWallet, address(0) ); _approve(address(this), mainRouter, MAX); emit MainRouterUpdated(mainRouter, mainPair, baseTokenForMarket); mainPair = IUniswapV2Factory(IUniswapV2Router02(mainRouter).factory()).createPair( address(this), baseTokenForMarket ); maxWallet=500000000000000000000000000; emit UpdateMaxWallet(maxWallet, 0); maxTransactionAmount=500000000000000000000000000; emit UpdateMaxTransactionAmount(maxTransactionAmount, 0); sellLiquidityFee=0; buyLiquidityFee=0; emit UpdateLiquidityFee(sellLiquidityFee, buyLiquidityFee, 0, 0); sellMarketingFee=30000; buyMarketingFee=30000; emit UpdateMarketingFee( sellMarketingFee, buyMarketingFee, 0, 0 ); minAmountToTakeFee=50000000000000000000000; emit UpdateMinAmountToTakeFee(minAmountToTakeFee, 0); isExcludedFromFee[address(this)]=true; isExcludedFromFee[marketingWallet]=true; isExcludedFromFee[_msgSender()]=true; isExcludedFromFee[address(0xdead)] = true; isExcludedFromMaxTransactionAmount[address(0xdead)]=true; isExcludedFromMaxTransactionAmount[address(this)]=true; isExcludedFromMaxTransactionAmount[marketingWallet]=true; isExcludedFromMaxTransactionAmount[_msgSender()]=true; _setAutomatedMarketMakerPair(mainPair, true); } function decimals() public view override returns (uint8) { return _decimals; } function updateMainPair( address _mainRouter ) external onlyOwner { baseTokenForMarket = IUniswapV2Router02(mainRouter).WETH(); if(mainRouter != _mainRouter){ _approve(address(this), _mainRouter, MAX); mainRouter = _mainRouter; } mainPair = IUniswapV2Factory(IUniswapV2Router02(mainRouter).factory()).createPair( address(this), baseTokenForMarket ); emit MainRouterUpdated(mainRouter, mainPair, baseTokenForMarket); _setAutomatedMarketMakerPair(mainPair, true); } ///////////////////////////////////////////////////////////////////////////////// modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } function updateLiquidityFee( uint24 _sellLiquidityFee, uint24 _buyLiquidityFee ) external onlyOwner { require( _sellLiquidityFee + sellMarketingFee <= 200000, "sell fee <= 20%" ); require(_buyLiquidityFee + buyMarketingFee <= 200000, "buy fee <= 20%"); emit UpdateLiquidityFee( _sellLiquidityFee, _buyLiquidityFee, sellLiquidityFee, buyLiquidityFee ); sellLiquidityFee = _sellLiquidityFee; buyLiquidityFee = _buyLiquidityFee; } function updateMaxWallet(uint256 _maxWallet) external onlyOwner { require(_maxWallet>=totalSupply() / 10000, "maxWallet >= total supply / 10000"); emit UpdateMaxWallet(_maxWallet, maxWallet); maxWallet = _maxWallet; } function updateMaxTransactionAmount(uint256 _maxTransactionAmount) external onlyOwner { require(_maxTransactionAmount>=totalSupply() / 10000, "maxTransactionAmount >= total supply / 10000"); emit UpdateMaxTransactionAmount(_maxTransactionAmount, maxTransactionAmount); maxTransactionAmount = _maxTransactionAmount; } function updateMarketingFee( uint24 _sellMarketingFee, uint24 _buyMarketingFee ) external onlyOwner { require( _sellMarketingFee + sellLiquidityFee <= 200000, "sell fee <= 20%" ); require(_buyMarketingFee + buyLiquidityFee <= 200000, "buy fee <= 20%"); emit UpdateMarketingFee( _sellMarketingFee, _buyMarketingFee, sellMarketingFee, buyMarketingFee ); sellMarketingFee = _sellMarketingFee; buyMarketingFee = _buyMarketingFee; } function updateMarketingWallet( address _marketingWallet ) external onlyOwner { require(_marketingWallet != address(0), "marketing wallet can't be 0"); emit UpdateMarketingWallet(_marketingWallet, marketingWallet); marketingWallet = _marketingWallet; isExcludedFromFee[_marketingWallet] = true; isExcludedFromMaxTransactionAmount[_marketingWallet] = true; } function updateMinAmountToTakeFee(uint256 _minAmountToTakeFee) external onlyOwner { require(_minAmountToTakeFee > 0, "minAmountToTakeFee > 0"); emit UpdateMinAmountToTakeFee(_minAmountToTakeFee, minAmountToTakeFee); minAmountToTakeFee = _minAmountToTakeFee; } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require( automatedMarketMakerPairs[pair] != value, "Automated market maker pair is already set to that value" ); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; isExcludedFromMaxTransactionAmount[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function excludeFromFee(address account, bool isEx) external onlyOwner { require(isExcludedFromFee[account] != isEx, "already"); isExcludedFromFee[account] = isEx; emit ExcludedFromFee(account, isEx); } function excludeFromMaxTransactionAmount(address account, bool isEx) external onlyOwner { require(isExcludedFromMaxTransactionAmount[account]!=isEx, "already"); isExcludedFromMaxTransactionAmount[account] = isEx; emit ExcludedFromMaxTransactionAmount(account, isEx); } 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"); uint256 contractTokenBalance = balanceOf(address(this)); uint256 totalTokensTaken = _liquidityFeeTokens + _marketingFeeTokens; bool overMinimumTokenBalance = totalTokensTaken >= minAmountToTakeFee && totalTokensTaken <= contractTokenBalance; // Take Fee if ( !inSwapAndLiquify && balanceOf(mainPair) > 0 && overMinimumTokenBalance && automatedMarketMakerPairs[to] ) { takeFee(); } uint256 _liquidityFee; uint256 _marketingFee; // If any account belongs to isExcludedFromFee account then remove the fee if ( !inSwapAndLiquify && !isExcludedFromFee[from] && !isExcludedFromFee[to] ) { // Buy if (automatedMarketMakerPairs[from]) { _liquidityFee = amount * buyLiquidityFee / 1000000; _marketingFee = amount * buyMarketingFee / 1000000; } // Sell else if (automatedMarketMakerPairs[to]) { _liquidityFee = amount * sellLiquidityFee / 1000000; _marketingFee = amount * sellMarketingFee / 1000000; } uint256 _feeTotal = _liquidityFee + _marketingFee; if (_feeTotal > 0) super._transfer(from, address(this), _feeTotal); amount = amount - _liquidityFee - _marketingFee; _liquidityFeeTokens = _liquidityFeeTokens + _liquidityFee; _marketingFeeTokens = _marketingFeeTokens + _marketingFee; } super._transfer(from, to, amount); if (!inSwapAndLiquify) { if (!isExcludedFromMaxTransactionAmount[from]) { require( amount <= maxTransactionAmount, "ERC20: exceeds transfer limit" ); } if (!isExcludedFromMaxTransactionAmount[to]) { require( balanceOf(to) <= maxWallet, "ERC20: exceeds max wallet limit" ); } } } function takeFee() private lockTheSwap { // Halve the amount of liquidity tokens uint256 tokensForLiquidity = _liquidityFeeTokens / 2; uint256 initialBaseTokenBalance = address(this).balance; uint256 baseTokenForLiquidity; uint256 tokensForSwap=tokensForLiquidity+_marketingFeeTokens; if(tokensForSwap>0) swapTokensForBaseToken(tokensForSwap); uint256 baseTokenBalance = address(this).balance - initialBaseTokenBalance; uint256 baseTokenAmountForMarketing = (baseTokenBalance * _marketingFeeTokens) / tokensForSwap; baseTokenForLiquidity = baseTokenBalance - baseTokenAmountForMarketing; if(baseTokenAmountForMarketing>0){ (bool success, )=address(marketingWallet).call{value: baseTokenAmountForMarketing}(""); if(success){ emit MarketingFeeTaken(0, baseTokenAmountForMarketing); } } if (tokensForLiquidity > 0 && baseTokenForLiquidity > 0) { addLiquidity(tokensForLiquidity, baseTokenForLiquidity); emit SwapAndLiquify(tokensForLiquidity, baseTokenForLiquidity); } _marketingFeeTokens = 0; _liquidityFeeTokens = 0; if(balanceOf(address(this))>0){ if(owner()!=address(0)){ _transfer(address(this), owner(), balanceOf(address(this))); }else{ _transfer(address(this), address(0xdead), balanceOf(address(this))); } } } function swapTokensForBaseToken(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = baseTokenForMarket; IUniswapV2Router02(mainRouter).swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of BaseToken path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 baseTokenAmount) private { IUniswapV2Router02(mainRouter).addLiquidityETH{value: baseTokenAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(0xdead), block.timestamp ); } function withdrawETH() external onlyOwner { (bool success, )=address(owner()).call{value: address(this).balance}(""); require(success, "Failed in withdrawal"); } function withdrawToken(address token) external onlyOwner{ require(address(this) != token, "Not allowed"); IERC20(token).safeTransfer(owner(), IERC20(token).balanceOf(address(this))); } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_mainRouter","type":"address"},{"internalType":"address","name":"_marketingWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isEx","type":"bool"}],"name":"ExcludedFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxTransactionAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"mainRouter","type":"address"},{"indexed":false,"internalType":"address","name":"mainPair","type":"address"},{"indexed":false,"internalType":"address","name":"baseTokenForMarket","type":"address"}],"name":"MainRouterUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingFeeTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFeeBaseTokenSwapped","type":"uint256"}],"name":"MarketingFeeTaken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensForLiquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"baseTokenForLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint24","name":"newSellLiquidityFee","type":"uint24"},{"indexed":false,"internalType":"uint24","name":"newBuyLiquidityFee","type":"uint24"},{"indexed":false,"internalType":"uint24","name":"oldSellLiquidityFee","type":"uint24"},{"indexed":false,"internalType":"uint24","name":"oldBuyLiquidityFee","type":"uint24"}],"name":"UpdateLiquidityFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint24","name":"newSellMarketingFee","type":"uint24"},{"indexed":false,"internalType":"uint24","name":"newBuyMarketingFee","type":"uint24"},{"indexed":false,"internalType":"uint24","name":"oldSellMarketingFee","type":"uint24"},{"indexed":false,"internalType":"uint24","name":"oldBuyMarketingFee","type":"uint24"}],"name":"UpdateMarketingFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newMarketingWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldMarketingWallet","type":"address"}],"name":"UpdateMarketingWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaxTransactionAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldMaxTransactionAmount","type":"uint256"}],"name":"UpdateMaxTransactionAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaxWallet","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldMaxWallet","type":"uint256"}],"name":"UpdateMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMinAmountToTakeFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldMinAmountToTakeFee","type":"uint256"}],"name":"UpdateMinAmountToTakeFee","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenForMarket","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minAmountToTakeFee","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint24","name":"_sellLiquidityFee","type":"uint24"},{"internalType":"uint24","name":"_buyLiquidityFee","type":"uint24"}],"name":"updateLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mainRouter","type":"address"}],"name":"updateMainPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint24","name":"_sellMarketingFee","type":"uint24"},{"internalType":"uint24","name":"_buyMarketingFee","type":"uint24"}],"name":"updateMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransactionAmount","type":"uint256"}],"name":"updateMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minAmountToTakeFee","type":"uint256"}],"name":"updateMinAmountToTakeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620033ae380380620033ae83398101604081905262000034916200099c565b6040518060400160405280600c81526020016b464f4d4f204e6574776f726b60a01b81525060405180604001604052806004815260200163464f4d4f60e01b815250816003908162000087919062000a78565b50600462000096828262000a78565b505050620000b3620000ad620006c960201b60201c565b620006cd565b6005805460ff60a01b1916600960a11b179055620000de336b019d971e4fe8401e740000006200071f565b600b80546001600160a01b0319166001600160a01b038416908117909155604080516315ab88c960e31b8152905163ad5c4648916004808201926020929091908290030181865afa15801562000138573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200015e919062000b44565b600680546001600160a01b0319166001600160a01b039283161790558116620001ce5760405162461bcd60e51b815260206004820152601d60248201527f6d61726b6574696e672077616c6c65742063616e206e6f74206265203000000060448201526064015b60405180910390fd5b6001600160a01b038216620002265760405162461bcd60e51b815260206004820152601b60248201527f526f7574657220616464726573732063616e206e6f74206265203000000000006044820152606401620001c5565b600780546301000000600160b81b03191663010000006001600160a01b038481168202929092179283905560405160009391909104909116907facf03c50dcf01e53e2775267d12acd0158d87c2f20fb84226837142693b36ae7908390a3600b54620002a09030906001600160a01b0316600019620007e2565b600b54600c54600654604080516001600160a01b039485168152928416602084015292168183015290517f113a6e83812f48b2f83795e33cb009afb4ba6e240c9c643c5dc75791e4ce7ab69181900360600190a1600b60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000348573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036e919062000b44565b6006546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af1158015620003c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e6919062000b44565b600c80546001600160a01b0319166001600160a01b03929092169190911790556b019d971e4fe8401e74000000600981905560408051918252600060208301527fff64d41f60feb77d52f64ae64a9fc3929d57a89d0cc55728762468bae5e0fe52910160405180910390a16b019d971e4fe8401e74000000600a81905560408051918252600060208301527f35eec0711af6fbe3039535323be51b57996b6945b0d55862607c7a02e52e4507910160405180910390a16006805465ffffffffffff60a81b1916908190556040805162ffffff600160a81b840481168252600160c01b9093049092166020830152600090820181905260608201527fdec183740138e3a28dfd6f973ecd3bf00cd5d9b2544f6763c0a87f721444c5d19060800160405180910390a16006805461075360dc1b62ffffff60d81b1990911617908190556007805462ffffff191661753090811790915560408051600160d81b90930462ffffff1683526020830191909152600090820181905260608201527f70748cb9cb3bcb4dfd4fff8f2a6f23f636067b33e0244631f9abd38159c1de859060800160405180910390a1690a968163f0a57b400000600881905560408051918252600060208301527f772a06bc936eb749842080c472181e970cd4f23bd1ab7d0b84a80aec26910434910160405180910390a1306000818152600e602090815260408083208054600160ff199182168117909255600780546001600160a01b036301000000918290048116885285882080548516861790553380895286892080548616871790557ff77e91909e61d18f67b875b2bfcae1f683a8d555e55382e3a6b082e2c59ea57a8054861687179055600d9097527fdc7fafdc41998a74ecacb8f8bd877011aba1f1d03a3a0d37a2e7879a393b1d6a805485168617905597875284872080548416851790559054048616855282852080548216831790559284529220805490911682179055600c54620006c19216906200090a565b505062000b91565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620007775760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620001c5565b80600260008282546200078b919062000b69565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038316620008465760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401620001c5565b6001600160a01b038216620008a95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620001c5565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382166000818152600f60209081526040808320805486151560ff199182168117909255600d84529382902080549094168117909355519182527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab910160405180910390a25050565b505050565b80516001600160a01b03811681146200099757600080fd5b919050565b60008060408385031215620009b057600080fd5b620009bb836200097f565b9150620009cb602084016200097f565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620009ff57607f821691505b60208210810362000a2057634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200097a57600081815260208120601f850160051c8101602086101562000a4f5750805b601f850160051c820191505b8181101562000a705782815560010162000a5b565b505050505050565b81516001600160401b0381111562000a945762000a94620009d4565b62000aac8162000aa58454620009ea565b8462000a26565b602080601f83116001811462000ae4576000841562000acb5750858301515b600019600386901b1c1916600185901b17855562000a70565b600085815260208120601f198616915b8281101562000b155788860151825594840194600190910190840162000af4565b508582101562000b345787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000b5757600080fd5b62000b62826200097f565b9392505050565b8082018082111562000b8b57634e487b7160e01b600052601160045260246000fd5b92915050565b61280d8062000ba16000396000f3fe60806040526004361061023f5760003560e01c80639a7a23d61161012e578063dd62ed3e116100ab578063f11a24d31161006f578063f11a24d314610708578063f2fde38b1461072b578063f63743421461074b578063f8b45b051461076e578063fc59d23d1461078457600080fd5b8063dd62ed3e14610663578063df8408fe14610683578063e086e5ec146106a3578063e9481eee146106b8578063ec44adc8146106e857600080fd5b8063b62496f5116100f2578063b62496f5146105bd578063b95d11be146105ed578063c8c8ebe41461060d578063cf188ad014610623578063d5bf72b71461064357600080fd5b80639a7a23d61461051d578063a457c2d71461053d578063a9059cbb1461055d578063aa4980231461057d578063aacebbe31461059d57600080fd5b806370a08231116101bc57806385af30c51161018057806385af30c51461048757806389476069146104a75780638da5cb5b146104c757806392136913146104e557806395d89b411461050857600080fd5b806370a08231146103db578063715018a6146103fb57806373b9e82c1461041057806375f0a874146104305780637bce5a041461045757600080fd5b80632ae2f121116102035780632ae2f12114610307578063313ce56714610327578063395093511461035357806348a5317e146103735780635342acb4146103ab57600080fd5b806306fdde031461024b578063095ea7b31461027657806318160ddd146102a65780631c499ab0146102c557806323b872dd146102e757600080fd5b3661024657005b600080fd5b34801561025757600080fd5b5061026061079a565b60405161026d91906123a7565b60405180910390f35b34801561028257600080fd5b506102966102913660046123ef565b61082c565b604051901515815260200161026d565b3480156102b257600080fd5b506002545b60405190815260200161026d565b3480156102d157600080fd5b506102e56102e036600461241b565b610846565b005b3480156102f357600080fd5b50610296610302366004612434565b610904565b34801561031357600080fd5b506102e5610322366004612483565b610928565b34801561033357600080fd5b50600554600160a01b900460ff1660405160ff909116815260200161026d565b34801561035f57600080fd5b5061029661036e3660046123ef565b6109ea565b34801561037f57600080fd5b50600654610393906001600160a01b031681565b6040516001600160a01b03909116815260200161026d565b3480156103b757600080fd5b506102966103c63660046124bc565b600e6020526000908152604090205460ff1681565b3480156103e757600080fd5b506102b76103f63660046124bc565b610a0c565b34801561040757600080fd5b506102e5610a27565b34801561041c57600080fd5b506102e561042b36600461241b565b610a3b565b34801561043c57600080fd5b5060075461039390630100000090046001600160a01b031681565b34801561046357600080fd5b506007546104739062ffffff1681565b60405162ffffff909116815260200161026d565b34801561049357600080fd5b50600c54610393906001600160a01b031681565b3480156104b357600080fd5b506102e56104c23660046124bc565b610ace565b3480156104d357600080fd5b506005546001600160a01b0316610393565b3480156104f157600080fd5b5060065461047390600160d81b900462ffffff1681565b34801561051457600080fd5b50610260610bad565b34801561052957600080fd5b506102e5610538366004612483565b610bbc565b34801561054957600080fd5b506102966105583660046123ef565b610c68565b34801561056957600080fd5b506102966105783660046123ef565b610ce3565b34801561058957600080fd5b506102e561059836600461241b565b610cf1565b3480156105a957600080fd5b506102e56105b83660046124bc565b610db5565b3480156105c957600080fd5b506102966105d83660046124bc565b600f6020526000908152604090205460ff1681565b3480156105f957600080fd5b506102e56106083660046124bc565b610eb1565b34801561061957600080fd5b506102b7600a5481565b34801561062f57600080fd5b50600b54610393906001600160a01b031681565b34801561064f57600080fd5b506102e561065e3660046124f8565b6110ef565b34801561066f57600080fd5b506102b761067e36600461252b565b611251565b34801561068f57600080fd5b506102e561069e366004612483565b61127c565b3480156106af57600080fd5b506102e5611336565b3480156106c457600080fd5b506102966106d33660046124bc565b600d6020526000908152604090205460ff1681565b3480156106f457600080fd5b506102e56107033660046124f8565b6113e9565b34801561071457600080fd5b5060065461047390600160c01b900462ffffff1681565b34801561073757600080fd5b506102e56107463660046124bc565b611543565b34801561075757600080fd5b5060065461047390600160a81b900462ffffff1681565b34801561077a57600080fd5b506102b760095481565b34801561079057600080fd5b506102b760085481565b6060600380546107a990612559565b80601f01602080910402602001604051908101604052809291908181526020018280546107d590612559565b80156108225780601f106107f757610100808354040283529160200191610822565b820191906000526020600020905b81548152906001019060200180831161080557829003601f168201915b5050505050905090565b60003361083a8185856115b9565b60019150505b92915050565b61084e6116dd565b61271061085a60025490565b61086491906125a9565b8110156108c25760405162461bcd60e51b815260206004820152602160248201527f6d617857616c6c6574203e3d20746f74616c20737570706c79202f20313030306044820152600360fc1b60648201526084015b60405180910390fd5b6009546040805183815260208101929092527fff64d41f60feb77d52f64ae64a9fc3929d57a89d0cc55728762468bae5e0fe52910160405180910390a1600955565b600033610912858285611737565b61091d8585856117b1565b506001949350505050565b6109306116dd565b6001600160a01b0382166000908152600d602052604090205481151560ff90911615150361098a5760405162461bcd60e51b8152602060048201526007602482015266616c726561647960c81b60448201526064016108b9565b6001600160a01b0382166000818152600d6020908152604091829020805460ff191685151590811790915591519182527f82170bbd72c16b30c410014b7382121a699ed119a182e48a0b6cadcc89104ac991015b60405180910390a25050565b60003361083a8185856109fd8383611251565b610a0791906125cb565b6115b9565b6001600160a01b031660009081526020819052604090205490565b610a2f6116dd565b610a396000611b57565b565b610a436116dd565b60008111610a8c5760405162461bcd60e51b815260206004820152601660248201527506d696e416d6f756e74546f54616b65466565203e20360541b60448201526064016108b9565b6008546040805183815260208101929092527f772a06bc936eb749842080c472181e970cd4f23bd1ab7d0b84a80aec26910434910160405180910390a1600855565b610ad66116dd565b6001600160a01b0381163003610b1c5760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b60448201526064016108b9565b610baa610b316005546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610b75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9991906125de565b6001600160a01b0384169190611ba9565b50565b6060600480546107a990612559565b610bc46116dd565b6001600160a01b0382166000908152600f602052604090205481151560ff909116151503610c5a5760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084016108b9565b610c648282611c00565b5050565b60003381610c768286611251565b905083811015610cd65760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108b9565b61091d82868684036115b9565b60003361083a8185856117b1565b610cf96116dd565b612710610d0560025490565b610d0f91906125a9565b811015610d735760405162461bcd60e51b815260206004820152602c60248201527f6d61785472616e73616374696f6e416d6f756e74203e3d20746f74616c20737560448201526b070706c79202f2031303030360a41b60648201526084016108b9565b600a546040805183815260208101929092527f35eec0711af6fbe3039535323be51b57996b6945b0d55862607c7a02e52e4507910160405180910390a1600a55565b610dbd6116dd565b6001600160a01b038116610e135760405162461bcd60e51b815260206004820152601b60248201527f6d61726b6574696e672077616c6c65742063616e27742062652030000000000060448201526064016108b9565b6007546040516001600160a01b0363010000009092048216918316907facf03c50dcf01e53e2775267d12acd0158d87c2f20fb84226837142693b36ae790600090a3600780546301000000600160b81b03191663010000006001600160a01b03939093169283021790556000908152600e60209081526040808320805460ff199081166001908117909255600d909352922080549091169091179055565b610eb96116dd565b600b60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3091906125f7565b600680546001600160a01b0319166001600160a01b03928316179055600b54828216911614610f8257610f6630826000196115b9565b600b80546001600160a01b0319166001600160a01b0383161790555b600b60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff991906125f7565b6006546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af115801561104a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106e91906125f7565b600c80546001600160a01b0319166001600160a01b03928316908117909155600b546006546040805192851683526020830193909352909216908201527f113a6e83812f48b2f83795e33cb009afb4ba6e240c9c643c5dc75791e4ce7ab69060600160405180910390a1600c54610baa906001600160a01b03166001611c00565b6110f76116dd565b60065462030d409061111590600160d81b900462ffffff1684612614565b62ffffff16111561115a5760405162461bcd60e51b815260206004820152600f60248201526e73656c6c20666565203c3d2032302560881b60448201526064016108b9565b60075462030d40906111719062ffffff1683612614565b62ffffff1611156111b55760405162461bcd60e51b815260206004820152600e60248201526d62757920666565203c3d2032302560901b60448201526064016108b9565b6006546040805162ffffff85811682528481166020830152600160a81b8404811682840152600160c01b9093049092166060830152517fdec183740138e3a28dfd6f973ecd3bf00cd5d9b2544f6763c0a87f721444c5d19181900360800190a16006805465ffffffffffff60a81b1916600160a81b62ffffff9485160262ffffff60c01b191617600160c01b9290931691909102919091179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6112846116dd565b6001600160a01b0382166000908152600e602052604090205481151560ff9091161515036112de5760405162461bcd60e51b8152602060048201526007602482015266616c726561647960c81b60448201526064016108b9565b6001600160a01b0382166000818152600e6020908152604091829020805460ff191685151590811790915591519182527f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa991016109de565b61133e6116dd565b60006113526005546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d806000811461139c576040519150601f19603f3d011682016040523d82523d6000602084013e6113a1565b606091505b5050905080610baa5760405162461bcd60e51b815260206004820152601460248201527311985a5b1959081a5b881dda5d1a191c985dd85b60621b60448201526064016108b9565b6113f16116dd565b60065462030d409061140f90600160a81b900462ffffff1684612614565b62ffffff1611156114545760405162461bcd60e51b815260206004820152600f60248201526e73656c6c20666565203c3d2032302560881b60448201526064016108b9565b60065462030d409061147290600160c01b900462ffffff1683612614565b62ffffff1611156114b65760405162461bcd60e51b815260206004820152600e60248201526d62757920666565203c3d2032302560901b60448201526064016108b9565b6006546007546040805162ffffff86811682528581166020830152600160d81b909404841681830152929091166060830152517f70748cb9cb3bcb4dfd4fff8f2a6f23f636067b33e0244631f9abd38159c1de859181900360800190a16006805462ffffff60d81b1916600160d81b62ffffff948516021790556007805462ffffff191691909216179055565b61154b6116dd565b6001600160a01b0381166115b05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108b9565b610baa81611b57565b6001600160a01b03831661161b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108b9565b6001600160a01b03821661167c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108b9565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610a395760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b9565b60006117438484611251565b905060001981146117ab578181101561179e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016108b9565b6117ab84848484036115b9565b50505050565b6001600160a01b0383166117d75760405162461bcd60e51b81526004016108b990612637565b6001600160a01b0382166117fd5760405162461bcd60e51b81526004016108b99061267c565b600061180830610a0c565b9050600060115460105461181c91906125cb565b9050600060085482101580156118325750828211155b600654909150600160a01b900460ff161580156118645750600c54600090611862906001600160a01b0316610a0c565b115b801561186d5750805b801561189157506001600160a01b0385166000908152600f602052604090205460ff165b1561189e5761189e611c69565b6006546000908190600160a01b900460ff161580156118d657506001600160a01b0388166000908152600e602052604090205460ff16155b80156118fb57506001600160a01b0387166000908152600e602052604090205460ff16155b15611a45576001600160a01b0388166000908152600f602052604090205460ff161561197457600654620f42409061193f90600160c01b900462ffffff16886126bf565b61194991906125a9565b600754909250620f4240906119639062ffffff16886126bf565b61196d91906125a9565b90506119eb565b6001600160a01b0387166000908152600f602052604090205460ff16156119eb57600654620f4240906119b390600160a81b900462ffffff16886126bf565b6119bd91906125a9565b600654909250620f4240906119de90600160d81b900462ffffff16886126bf565b6119e891906125a9565b90505b60006119f782846125cb565b90508015611a0a57611a0a893083611e78565b81611a1584896126d6565b611a1f91906126d6565b965082601054611a2f91906125cb565b601055601154611a409083906125cb565b601155505b611a50888888611e78565b600654600160a01b900460ff16611b4d576001600160a01b0388166000908152600d602052604090205460ff16611ad357600a54861115611ad35760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2065786365656473207472616e73666572206c696d697400000060448201526064016108b9565b6001600160a01b0387166000908152600d602052604090205460ff16611b4d57600954611aff88610a0c565b1115611b4d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a2065786365656473206d61782077616c6c6574206c696d69740060448201526064016108b9565b5050505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611bfb908490611fa2565b505050565b6001600160a01b0382166000818152600f60209081526040808320805486151560ff199182168117909255600d84529382902080549094168117909355519182527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91016109de565b6006805460ff60a01b1916600160a01b179055601054600090611c8e906002906125a9565b9050600047905060008060115484611ca691906125cb565b90508015611cb757611cb781612077565b6000611cc384476126d6565b905060008260115483611cd691906126bf565b611ce091906125a9565b9050611cec81836126d6565b93508015611d9457600754604051600091630100000090046001600160a01b03169083908381818185875af1925050503d8060008114611d48576040519150601f19603f3d011682016040523d82523d6000602084013e611d4d565b606091505b505090508015611d92576040805160008152602081018490527f6f92bce3e91466137aa4d5474fe565c002872fb18ed6af4a856959be0a81277a910160405180910390a15b505b600086118015611da45750600084115b15611ded57611db38685612159565b60408051878152602081018690527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b600060118190556010819055611e0230610a0c565b1115611e63576000611e1c6005546001600160a01b031690565b6001600160a01b031614611e5357611e4e30611e406005546001600160a01b031690565b611e4930610a0c565b6117b1565b611e63565b611e633061dead611e4930610a0c565b50506006805460ff60a01b1916905550505050565b6001600160a01b038316611e9e5760405162461bcd60e51b81526004016108b990612637565b6001600160a01b038216611ec45760405162461bcd60e51b81526004016108b99061267c565b6001600160a01b03831660009081526020819052604090205481811015611f3c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016108b9565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36117ab565b6000611ff7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166121f39092919063ffffffff16565b905080516000148061201857508080602001905181019061201891906126e9565b611bfb5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016108b9565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106120ac576120ac612706565b6001600160a01b0392831660209182029290920101526006548251911690829060019081106120dd576120dd612706565b6001600160a01b039283166020918202929092010152600b5460405163791ac94760e01b815291169063791ac9479061212390859060009086903090429060040161271c565b600060405180830381600087803b15801561213d57600080fd5b505af1158015612151573d6000803e3d6000fd5b505050505050565b600b5460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156121c7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906121ec919061278d565b5050505050565b6060612202848460008561220a565b949350505050565b60608247101561226b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016108b9565b600080866001600160a01b0316858760405161228791906127bb565b60006040518083038185875af1925050503d80600081146122c4576040519150601f19603f3d011682016040523d82523d6000602084013e6122c9565b606091505b50915091506122da878383876122e5565b979650505050505050565b6060831561235457825160000361234d576001600160a01b0385163b61234d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108b9565b5081612202565b61220283838151156123695781518083602001fd5b8060405162461bcd60e51b81526004016108b991906123a7565b60005b8381101561239e578181015183820152602001612386565b50506000910152565b60208152600082518060208401526123c6816040850160208701612383565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610baa57600080fd5b6000806040838503121561240257600080fd5b823561240d816123da565b946020939093013593505050565b60006020828403121561242d57600080fd5b5035919050565b60008060006060848603121561244957600080fd5b8335612454816123da565b92506020840135612464816123da565b929592945050506040919091013590565b8015158114610baa57600080fd5b6000806040838503121561249657600080fd5b82356124a1816123da565b915060208301356124b181612475565b809150509250929050565b6000602082840312156124ce57600080fd5b81356124d9816123da565b9392505050565b803562ffffff811681146124f357600080fd5b919050565b6000806040838503121561250b57600080fd5b612514836124e0565b9150612522602084016124e0565b90509250929050565b6000806040838503121561253e57600080fd5b8235612549816123da565b915060208301356124b1816123da565b600181811c9082168061256d57607f821691505b60208210810361258d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000826125c657634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561084057610840612593565b6000602082840312156125f057600080fd5b5051919050565b60006020828403121561260957600080fd5b81516124d9816123da565b62ffffff81811683821601908082111561263057612630612593565b5092915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b808202811582820484141761084057610840612593565b8181038181111561084057610840612593565b6000602082840312156126fb57600080fd5b81516124d981612475565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561276c5784516001600160a01b031683529383019391830191600101612747565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156127a257600080fd5b8351925060208401519150604084015190509250925092565b600082516127cd818460208701612383565b919091019291505056fea2646970667358221220eda93767869cd43039595302c39ae7a1e6eeda5fea0f18da91bbc0dc25a799f264736f6c634300081300330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000094bd434a937732ff1f9e8c830189c3761a7b4501
Deployed Bytecode
0x60806040526004361061023f5760003560e01c80639a7a23d61161012e578063dd62ed3e116100ab578063f11a24d31161006f578063f11a24d314610708578063f2fde38b1461072b578063f63743421461074b578063f8b45b051461076e578063fc59d23d1461078457600080fd5b8063dd62ed3e14610663578063df8408fe14610683578063e086e5ec146106a3578063e9481eee146106b8578063ec44adc8146106e857600080fd5b8063b62496f5116100f2578063b62496f5146105bd578063b95d11be146105ed578063c8c8ebe41461060d578063cf188ad014610623578063d5bf72b71461064357600080fd5b80639a7a23d61461051d578063a457c2d71461053d578063a9059cbb1461055d578063aa4980231461057d578063aacebbe31461059d57600080fd5b806370a08231116101bc57806385af30c51161018057806385af30c51461048757806389476069146104a75780638da5cb5b146104c757806392136913146104e557806395d89b411461050857600080fd5b806370a08231146103db578063715018a6146103fb57806373b9e82c1461041057806375f0a874146104305780637bce5a041461045757600080fd5b80632ae2f121116102035780632ae2f12114610307578063313ce56714610327578063395093511461035357806348a5317e146103735780635342acb4146103ab57600080fd5b806306fdde031461024b578063095ea7b31461027657806318160ddd146102a65780631c499ab0146102c557806323b872dd146102e757600080fd5b3661024657005b600080fd5b34801561025757600080fd5b5061026061079a565b60405161026d91906123a7565b60405180910390f35b34801561028257600080fd5b506102966102913660046123ef565b61082c565b604051901515815260200161026d565b3480156102b257600080fd5b506002545b60405190815260200161026d565b3480156102d157600080fd5b506102e56102e036600461241b565b610846565b005b3480156102f357600080fd5b50610296610302366004612434565b610904565b34801561031357600080fd5b506102e5610322366004612483565b610928565b34801561033357600080fd5b50600554600160a01b900460ff1660405160ff909116815260200161026d565b34801561035f57600080fd5b5061029661036e3660046123ef565b6109ea565b34801561037f57600080fd5b50600654610393906001600160a01b031681565b6040516001600160a01b03909116815260200161026d565b3480156103b757600080fd5b506102966103c63660046124bc565b600e6020526000908152604090205460ff1681565b3480156103e757600080fd5b506102b76103f63660046124bc565b610a0c565b34801561040757600080fd5b506102e5610a27565b34801561041c57600080fd5b506102e561042b36600461241b565b610a3b565b34801561043c57600080fd5b5060075461039390630100000090046001600160a01b031681565b34801561046357600080fd5b506007546104739062ffffff1681565b60405162ffffff909116815260200161026d565b34801561049357600080fd5b50600c54610393906001600160a01b031681565b3480156104b357600080fd5b506102e56104c23660046124bc565b610ace565b3480156104d357600080fd5b506005546001600160a01b0316610393565b3480156104f157600080fd5b5060065461047390600160d81b900462ffffff1681565b34801561051457600080fd5b50610260610bad565b34801561052957600080fd5b506102e5610538366004612483565b610bbc565b34801561054957600080fd5b506102966105583660046123ef565b610c68565b34801561056957600080fd5b506102966105783660046123ef565b610ce3565b34801561058957600080fd5b506102e561059836600461241b565b610cf1565b3480156105a957600080fd5b506102e56105b83660046124bc565b610db5565b3480156105c957600080fd5b506102966105d83660046124bc565b600f6020526000908152604090205460ff1681565b3480156105f957600080fd5b506102e56106083660046124bc565b610eb1565b34801561061957600080fd5b506102b7600a5481565b34801561062f57600080fd5b50600b54610393906001600160a01b031681565b34801561064f57600080fd5b506102e561065e3660046124f8565b6110ef565b34801561066f57600080fd5b506102b761067e36600461252b565b611251565b34801561068f57600080fd5b506102e561069e366004612483565b61127c565b3480156106af57600080fd5b506102e5611336565b3480156106c457600080fd5b506102966106d33660046124bc565b600d6020526000908152604090205460ff1681565b3480156106f457600080fd5b506102e56107033660046124f8565b6113e9565b34801561071457600080fd5b5060065461047390600160c01b900462ffffff1681565b34801561073757600080fd5b506102e56107463660046124bc565b611543565b34801561075757600080fd5b5060065461047390600160a81b900462ffffff1681565b34801561077a57600080fd5b506102b760095481565b34801561079057600080fd5b506102b760085481565b6060600380546107a990612559565b80601f01602080910402602001604051908101604052809291908181526020018280546107d590612559565b80156108225780601f106107f757610100808354040283529160200191610822565b820191906000526020600020905b81548152906001019060200180831161080557829003601f168201915b5050505050905090565b60003361083a8185856115b9565b60019150505b92915050565b61084e6116dd565b61271061085a60025490565b61086491906125a9565b8110156108c25760405162461bcd60e51b815260206004820152602160248201527f6d617857616c6c6574203e3d20746f74616c20737570706c79202f20313030306044820152600360fc1b60648201526084015b60405180910390fd5b6009546040805183815260208101929092527fff64d41f60feb77d52f64ae64a9fc3929d57a89d0cc55728762468bae5e0fe52910160405180910390a1600955565b600033610912858285611737565b61091d8585856117b1565b506001949350505050565b6109306116dd565b6001600160a01b0382166000908152600d602052604090205481151560ff90911615150361098a5760405162461bcd60e51b8152602060048201526007602482015266616c726561647960c81b60448201526064016108b9565b6001600160a01b0382166000818152600d6020908152604091829020805460ff191685151590811790915591519182527f82170bbd72c16b30c410014b7382121a699ed119a182e48a0b6cadcc89104ac991015b60405180910390a25050565b60003361083a8185856109fd8383611251565b610a0791906125cb565b6115b9565b6001600160a01b031660009081526020819052604090205490565b610a2f6116dd565b610a396000611b57565b565b610a436116dd565b60008111610a8c5760405162461bcd60e51b815260206004820152601660248201527506d696e416d6f756e74546f54616b65466565203e20360541b60448201526064016108b9565b6008546040805183815260208101929092527f772a06bc936eb749842080c472181e970cd4f23bd1ab7d0b84a80aec26910434910160405180910390a1600855565b610ad66116dd565b6001600160a01b0381163003610b1c5760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b60448201526064016108b9565b610baa610b316005546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610b75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9991906125de565b6001600160a01b0384169190611ba9565b50565b6060600480546107a990612559565b610bc46116dd565b6001600160a01b0382166000908152600f602052604090205481151560ff909116151503610c5a5760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084016108b9565b610c648282611c00565b5050565b60003381610c768286611251565b905083811015610cd65760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108b9565b61091d82868684036115b9565b60003361083a8185856117b1565b610cf96116dd565b612710610d0560025490565b610d0f91906125a9565b811015610d735760405162461bcd60e51b815260206004820152602c60248201527f6d61785472616e73616374696f6e416d6f756e74203e3d20746f74616c20737560448201526b070706c79202f2031303030360a41b60648201526084016108b9565b600a546040805183815260208101929092527f35eec0711af6fbe3039535323be51b57996b6945b0d55862607c7a02e52e4507910160405180910390a1600a55565b610dbd6116dd565b6001600160a01b038116610e135760405162461bcd60e51b815260206004820152601b60248201527f6d61726b6574696e672077616c6c65742063616e27742062652030000000000060448201526064016108b9565b6007546040516001600160a01b0363010000009092048216918316907facf03c50dcf01e53e2775267d12acd0158d87c2f20fb84226837142693b36ae790600090a3600780546301000000600160b81b03191663010000006001600160a01b03939093169283021790556000908152600e60209081526040808320805460ff199081166001908117909255600d909352922080549091169091179055565b610eb96116dd565b600b60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3091906125f7565b600680546001600160a01b0319166001600160a01b03928316179055600b54828216911614610f8257610f6630826000196115b9565b600b80546001600160a01b0319166001600160a01b0383161790555b600b60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff991906125f7565b6006546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af115801561104a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106e91906125f7565b600c80546001600160a01b0319166001600160a01b03928316908117909155600b546006546040805192851683526020830193909352909216908201527f113a6e83812f48b2f83795e33cb009afb4ba6e240c9c643c5dc75791e4ce7ab69060600160405180910390a1600c54610baa906001600160a01b03166001611c00565b6110f76116dd565b60065462030d409061111590600160d81b900462ffffff1684612614565b62ffffff16111561115a5760405162461bcd60e51b815260206004820152600f60248201526e73656c6c20666565203c3d2032302560881b60448201526064016108b9565b60075462030d40906111719062ffffff1683612614565b62ffffff1611156111b55760405162461bcd60e51b815260206004820152600e60248201526d62757920666565203c3d2032302560901b60448201526064016108b9565b6006546040805162ffffff85811682528481166020830152600160a81b8404811682840152600160c01b9093049092166060830152517fdec183740138e3a28dfd6f973ecd3bf00cd5d9b2544f6763c0a87f721444c5d19181900360800190a16006805465ffffffffffff60a81b1916600160a81b62ffffff9485160262ffffff60c01b191617600160c01b9290931691909102919091179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6112846116dd565b6001600160a01b0382166000908152600e602052604090205481151560ff9091161515036112de5760405162461bcd60e51b8152602060048201526007602482015266616c726561647960c81b60448201526064016108b9565b6001600160a01b0382166000818152600e6020908152604091829020805460ff191685151590811790915591519182527f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa991016109de565b61133e6116dd565b60006113526005546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d806000811461139c576040519150601f19603f3d011682016040523d82523d6000602084013e6113a1565b606091505b5050905080610baa5760405162461bcd60e51b815260206004820152601460248201527311985a5b1959081a5b881dda5d1a191c985dd85b60621b60448201526064016108b9565b6113f16116dd565b60065462030d409061140f90600160a81b900462ffffff1684612614565b62ffffff1611156114545760405162461bcd60e51b815260206004820152600f60248201526e73656c6c20666565203c3d2032302560881b60448201526064016108b9565b60065462030d409061147290600160c01b900462ffffff1683612614565b62ffffff1611156114b65760405162461bcd60e51b815260206004820152600e60248201526d62757920666565203c3d2032302560901b60448201526064016108b9565b6006546007546040805162ffffff86811682528581166020830152600160d81b909404841681830152929091166060830152517f70748cb9cb3bcb4dfd4fff8f2a6f23f636067b33e0244631f9abd38159c1de859181900360800190a16006805462ffffff60d81b1916600160d81b62ffffff948516021790556007805462ffffff191691909216179055565b61154b6116dd565b6001600160a01b0381166115b05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108b9565b610baa81611b57565b6001600160a01b03831661161b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108b9565b6001600160a01b03821661167c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108b9565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610a395760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b9565b60006117438484611251565b905060001981146117ab578181101561179e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016108b9565b6117ab84848484036115b9565b50505050565b6001600160a01b0383166117d75760405162461bcd60e51b81526004016108b990612637565b6001600160a01b0382166117fd5760405162461bcd60e51b81526004016108b99061267c565b600061180830610a0c565b9050600060115460105461181c91906125cb565b9050600060085482101580156118325750828211155b600654909150600160a01b900460ff161580156118645750600c54600090611862906001600160a01b0316610a0c565b115b801561186d5750805b801561189157506001600160a01b0385166000908152600f602052604090205460ff165b1561189e5761189e611c69565b6006546000908190600160a01b900460ff161580156118d657506001600160a01b0388166000908152600e602052604090205460ff16155b80156118fb57506001600160a01b0387166000908152600e602052604090205460ff16155b15611a45576001600160a01b0388166000908152600f602052604090205460ff161561197457600654620f42409061193f90600160c01b900462ffffff16886126bf565b61194991906125a9565b600754909250620f4240906119639062ffffff16886126bf565b61196d91906125a9565b90506119eb565b6001600160a01b0387166000908152600f602052604090205460ff16156119eb57600654620f4240906119b390600160a81b900462ffffff16886126bf565b6119bd91906125a9565b600654909250620f4240906119de90600160d81b900462ffffff16886126bf565b6119e891906125a9565b90505b60006119f782846125cb565b90508015611a0a57611a0a893083611e78565b81611a1584896126d6565b611a1f91906126d6565b965082601054611a2f91906125cb565b601055601154611a409083906125cb565b601155505b611a50888888611e78565b600654600160a01b900460ff16611b4d576001600160a01b0388166000908152600d602052604090205460ff16611ad357600a54861115611ad35760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2065786365656473207472616e73666572206c696d697400000060448201526064016108b9565b6001600160a01b0387166000908152600d602052604090205460ff16611b4d57600954611aff88610a0c565b1115611b4d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a2065786365656473206d61782077616c6c6574206c696d69740060448201526064016108b9565b5050505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611bfb908490611fa2565b505050565b6001600160a01b0382166000818152600f60209081526040808320805486151560ff199182168117909255600d84529382902080549094168117909355519182527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91016109de565b6006805460ff60a01b1916600160a01b179055601054600090611c8e906002906125a9565b9050600047905060008060115484611ca691906125cb565b90508015611cb757611cb781612077565b6000611cc384476126d6565b905060008260115483611cd691906126bf565b611ce091906125a9565b9050611cec81836126d6565b93508015611d9457600754604051600091630100000090046001600160a01b03169083908381818185875af1925050503d8060008114611d48576040519150601f19603f3d011682016040523d82523d6000602084013e611d4d565b606091505b505090508015611d92576040805160008152602081018490527f6f92bce3e91466137aa4d5474fe565c002872fb18ed6af4a856959be0a81277a910160405180910390a15b505b600086118015611da45750600084115b15611ded57611db38685612159565b60408051878152602081018690527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b600060118190556010819055611e0230610a0c565b1115611e63576000611e1c6005546001600160a01b031690565b6001600160a01b031614611e5357611e4e30611e406005546001600160a01b031690565b611e4930610a0c565b6117b1565b611e63565b611e633061dead611e4930610a0c565b50506006805460ff60a01b1916905550505050565b6001600160a01b038316611e9e5760405162461bcd60e51b81526004016108b990612637565b6001600160a01b038216611ec45760405162461bcd60e51b81526004016108b99061267c565b6001600160a01b03831660009081526020819052604090205481811015611f3c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016108b9565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36117ab565b6000611ff7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166121f39092919063ffffffff16565b905080516000148061201857508080602001905181019061201891906126e9565b611bfb5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016108b9565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106120ac576120ac612706565b6001600160a01b0392831660209182029290920101526006548251911690829060019081106120dd576120dd612706565b6001600160a01b039283166020918202929092010152600b5460405163791ac94760e01b815291169063791ac9479061212390859060009086903090429060040161271c565b600060405180830381600087803b15801561213d57600080fd5b505af1158015612151573d6000803e3d6000fd5b505050505050565b600b5460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156121c7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906121ec919061278d565b5050505050565b6060612202848460008561220a565b949350505050565b60608247101561226b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016108b9565b600080866001600160a01b0316858760405161228791906127bb565b60006040518083038185875af1925050503d80600081146122c4576040519150601f19603f3d011682016040523d82523d6000602084013e6122c9565b606091505b50915091506122da878383876122e5565b979650505050505050565b6060831561235457825160000361234d576001600160a01b0385163b61234d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108b9565b5081612202565b61220283838151156123695781518083602001fd5b8060405162461bcd60e51b81526004016108b991906123a7565b60005b8381101561239e578181015183820152602001612386565b50506000910152565b60208152600082518060208401526123c6816040850160208701612383565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610baa57600080fd5b6000806040838503121561240257600080fd5b823561240d816123da565b946020939093013593505050565b60006020828403121561242d57600080fd5b5035919050565b60008060006060848603121561244957600080fd5b8335612454816123da565b92506020840135612464816123da565b929592945050506040919091013590565b8015158114610baa57600080fd5b6000806040838503121561249657600080fd5b82356124a1816123da565b915060208301356124b181612475565b809150509250929050565b6000602082840312156124ce57600080fd5b81356124d9816123da565b9392505050565b803562ffffff811681146124f357600080fd5b919050565b6000806040838503121561250b57600080fd5b612514836124e0565b9150612522602084016124e0565b90509250929050565b6000806040838503121561253e57600080fd5b8235612549816123da565b915060208301356124b1816123da565b600181811c9082168061256d57607f821691505b60208210810361258d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000826125c657634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561084057610840612593565b6000602082840312156125f057600080fd5b5051919050565b60006020828403121561260957600080fd5b81516124d9816123da565b62ffffff81811683821601908082111561263057612630612593565b5092915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b808202811582820484141761084057610840612593565b8181038181111561084057610840612593565b6000602082840312156126fb57600080fd5b81516124d981612475565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561276c5784516001600160a01b031683529383019391830191600101612747565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156127a257600080fd5b8351925060208401519150604084015190509250925092565b600082516127cd818460208701612383565b919091019291505056fea2646970667358221220eda93767869cd43039595302c39ae7a1e6eeda5fea0f18da91bbc0dc25a799f264736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000094bd434a937732ff1f9e8c830189c3761a7b4501
-----Decoded View---------------
Arg [0] : _mainRouter (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : _marketingWallet (address): 0x94bD434a937732fF1F9E8C830189C3761a7b4501
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 00000000000000000000000094bd434a937732ff1f9e8c830189c3761a7b4501
Deployed Bytecode Sourcemap
36022:14765:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6147:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7065:201;;;;;;;;;;-1:-1:-1;7065:201:0;;;;;:::i;:::-;;:::i;:::-;;;1291:14:1;;1284:22;1266:41;;1254:2;1239:18;7065:201:0;1126:187:1;6462:108:0;;;;;;;;;;-1:-1:-1;6550:12:0;;6462:108;;;1464:25:1;;;1452:2;1437:18;6462:108:0;1318:177:1;42111:249:0;;;;;;;;;;-1:-1:-1;42111:249:0;;;;;:::i;:::-;;:::i;:::-;;7272:261;;;;;;;;;;-1:-1:-1;7272:261:0;;;;;:::i;:::-;;:::i;44953:323::-;;;;;;;;;;-1:-1:-1;44953:323:0;;;;;:::i;:::-;;:::i;40566:92::-;;;;;;;;;;-1:-1:-1;40641:9:0;;-1:-1:-1;;;40641:9:0;;;;40566:92;;2828:4:1;2816:17;;;2798:36;;2786:2;2771:18;40566:92:0;2656:184:1;7539:238:0;;;;;;;;;;-1:-1:-1;7539:238:0;;;;;:::i;:::-;;:::i;36262:33::-;;;;;;;;;;-1:-1:-1;36262:33:0;;;;-1:-1:-1;;;;;36262:33:0;;;;;;-1:-1:-1;;;;;3009:32:1;;;2991:51;;2979:2;2964:18;36262:33:0;2845:203:1;36781:49:0;;;;;;;;;;-1:-1:-1;36781:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6576:127;;;;;;;;;;-1:-1:-1;6576:127:0;;;;;:::i;:::-;;:::i;11781:103::-;;;;;;;;;;;;;:::i;43795:319::-;;;;;;;;;;-1:-1:-1;43795:319:0;;;;;:::i;:::-;;:::i;36488:30::-;;;;;;;;;;-1:-1:-1;36488:30:0;;;;;;;-1:-1:-1;;;;;36488:30:0;;;36450:29;;;;;;;;;;-1:-1:-1;36450:29:0;;;;;;;;;;;3479:8:1;3467:21;;;3449:40;;3437:2;3422:18;36450:29:0;3305:190:1;36674:23:0;;;;;;;;;;-1:-1:-1;36674:23:0;;;;-1:-1:-1;;;;;36674:23:0;;;50542:207;;;;;;;;;;-1:-1:-1;50542:207:0;;;;;:::i;:::-;;:::i;11550:87::-;;;;;;;;;;-1:-1:-1;11623:6:0;;-1:-1:-1;;;;;11623:6:0;11550:87;;36413:30;;;;;;;;;;-1:-1:-1;36413:30:0;;;;-1:-1:-1;;;36413:30:0;;;;;;6253:104;;;;;;;;;;;;;:::i;44122:320::-;;;;;;;;;;-1:-1:-1;44122:320:0;;;;;:::i;:::-;;:::i;7783:436::-;;;;;;;;;;-1:-1:-1;7783:436:0;;;;;:::i;:::-;;:::i;6709:193::-;;;;;;;;;;-1:-1:-1;6709:193:0;;;;;:::i;:::-;;:::i;42368:371::-;;;;;;;;;;-1:-1:-1;42368:371:0;;;;;:::i;:::-;;:::i;43353:434::-;;;;;;;;;;-1:-1:-1;43353:434:0;;;;;:::i;:::-;;:::i;36837:57::-;;;;;;;;;;-1:-1:-1;36837:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;40666:613;;;;;;;;;;-1:-1:-1;40666:613:0;;;;;:::i;:::-;;:::i;36598:35::-;;;;;;;;;;;;;;;;36642:25;;;;;;;;;;-1:-1:-1;36642:25:0;;;;-1:-1:-1;;;;;36642:25:0;;;41496:607;;;;;;;;;;-1:-1:-1;41496:607:0;;;;;:::i;:::-;;:::i;6908:151::-;;;;;;;;;;-1:-1:-1;6908:151:0;;;;;:::i;:::-;;:::i;44711:234::-;;;;;;;;;;-1:-1:-1;44711:234:0;;;;;:::i;:::-;;:::i;50352:184::-;;;;;;;;;;;;;:::i;36708:66::-;;;;;;;;;;-1:-1:-1;36708:66:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;42747:598;;;;;;;;;;-1:-1:-1;42747:598:0;;;;;:::i;:::-;;:::i;36375:29::-;;;;;;;;;;-1:-1:-1;36375:29:0;;;;-1:-1:-1;;;36375:29:0;;;;;;11890:201;;;;;;;;;;-1:-1:-1;11890:201:0;;;;;:::i;:::-;;:::i;36338:30::-;;;;;;;;;;-1:-1:-1;36338:30:0;;;;-1:-1:-1;;;36338:30:0;;;;;;36567:24;;;;;;;;;;;;;;;;36527:33;;;;;;;;;;;;;;;;6147:100;6201:13;6234:5;6227:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6147:100;:::o;7065:201::-;7148:4;5611:10;7204:32;5611:10;7220:7;7229:6;7204:8;:32::i;:::-;7254:4;7247:11;;;7065:201;;;;;:::o;42111:249::-;11511:13;:11;:13::i;:::-;42222:5:::1;42206:13;6550:12:::0;;;6462:108;42206:13:::1;:21;;;;:::i;:::-;42194:10;:33;;42186:79;;;::::0;-1:-1:-1;;;42186:79:0;;5261:2:1;42186:79:0::1;::::0;::::1;5243:21:1::0;5300:2;5280:18;;;5273:30;5339:34;5319:18;;;5312:62;-1:-1:-1;;;5390:18:1;;;5383:31;5431:19;;42186:79:0::1;;;;;;;;;42309:9;::::0;42281:38:::1;::::0;;5635:25:1;;;5691:2;5676:18;;5669:34;;;;42281:38:0::1;::::0;5608:18:1;42281:38:0::1;;;;;;;42330:9;:22:::0;42111:249::o;7272:261::-;7369:4;5611:10;7427:38;7443:4;5611:10;7458:6;7427:15;:38::i;:::-;7476:27;7486:4;7492:2;7496:6;7476:9;:27::i;:::-;-1:-1:-1;7521:4:0;;7272:261;-1:-1:-1;;;;7272:261:0:o;44953:323::-;11511:13;:11;:13::i;:::-;-1:-1:-1;;;;;45083:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:49;::::1;;:43;::::0;;::::1;:49;;::::0;45075:69:::1;;;::::0;-1:-1:-1;;;45075:69:0;;5916:2:1;45075:69:0::1;::::0;::::1;5898:21:1::0;5955:1;5935:18;;;5928:29;-1:-1:-1;;;5973:18:1;;;5966:37;6020:18;;45075:69:0::1;5714:330:1::0;45075:69:0::1;-1:-1:-1::0;;;;;45155:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:50;;-1:-1:-1;;45155:50:0::1;::::0;::::1;;::::0;;::::1;::::0;;;45221:47;;1266:41:1;;;45221:47:0::1;::::0;1239:18:1;45221:47:0::1;;;;;;;;44953:323:::0;;:::o;7539:238::-;7627:4;5611:10;7683:64;5611:10;7699:7;7736:10;7708:25;5611:10;7699:7;7708:9;:25::i;:::-;:38;;;;:::i;:::-;7683:8;:64::i;6576:127::-;-1:-1:-1;;;;;6677:18:0;6650:7;6677:18;;;;;;;;;;;;6576:127::o;11781:103::-;11511:13;:11;:13::i;:::-;11846:30:::1;11873:1;11846:18;:30::i;:::-;11781:103::o:0;43795:319::-;11511:13;:11;:13::i;:::-;43941:1:::1;43919:19;:23;43911:58;;;::::0;-1:-1:-1;;;43911:58:0;;6381:2:1;43911:58:0::1;::::0;::::1;6363:21:1::0;6420:2;6400:18;;;6393:30;-1:-1:-1;;;6439:18:1;;;6432:52;6501:18;;43911:58:0::1;6179:346:1::0;43911:58:0::1;44031:18;::::0;43985:65:::1;::::0;;5635:25:1;;;5691:2;5676:18;;5669:34;;;;43985:65:0::1;::::0;5608:18:1;43985:65:0::1;;;;;;;44061:18;:40:::0;43795:319::o;50542:207::-;11511:13;:11;:13::i;:::-;-1:-1:-1;;;;;50617:22:0;::::1;50625:4;50617:22:::0;50609:46:::1;;;::::0;-1:-1:-1;;;50609:46:0;;6732:2:1;50609:46:0::1;::::0;::::1;6714:21:1::0;6771:2;6751:18;;;6744:30;-1:-1:-1;;;6790:18:1;;;6783:41;6841:18;;50609:46:0::1;6530:335:1::0;50609:46:0::1;50666:75;50693:7;11623:6:::0;;-1:-1:-1;;;;;11623:6:0;;11550:87;50693:7:::1;50702:38;::::0;-1:-1:-1;;;50702:38:0;;50734:4:::1;50702:38;::::0;::::1;2991:51:1::0;-1:-1:-1;;;;;50702:23:0;::::1;::::0;::::1;::::0;2964:18:1;;50702:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;50666:26:0;::::1;::::0;:75;:26:::1;:75::i;:::-;50542:207:::0;:::o;6253:104::-;6309:13;6342:7;6335:14;;;;;:::i;44122:320::-;11511:13;:11;:13::i;:::-;-1:-1:-1;;;;;44258:31:0;::::1;;::::0;;;:25:::1;:31;::::0;;;;;:40;::::1;;:31;::::0;;::::1;:40;;::::0;44236:146:::1;;;::::0;-1:-1:-1;;;44236:146:0;;7261:2:1;44236:146:0::1;::::0;::::1;7243:21:1::0;7300:2;7280:18;;;7273:30;7339:34;7319:18;;;7312:62;7410:26;7390:18;;;7383:54;7454:19;;44236:146:0::1;7059:420:1::0;44236:146:0::1;44393:41;44422:4;44428:5;44393:28;:41::i;:::-;44122:320:::0;;:::o;7783:436::-;7876:4;5611:10;7876:4;7959:25;5611:10;7976:7;7959:9;:25::i;:::-;7932:52;;8023:15;8003:16;:35;;7995:85;;;;-1:-1:-1;;;7995:85:0;;7686:2:1;7995:85:0;;;7668:21:1;7725:2;7705:18;;;7698:30;7764:34;7744:18;;;7737:62;-1:-1:-1;;;7815:18:1;;;7808:35;7860:19;;7995:85:0;7484:401:1;7995:85:0;8116:60;8125:5;8132:7;8160:15;8141:16;:34;8116:8;:60::i;6709:193::-;6788:4;5611:10;6844:28;5611:10;6861:2;6865:6;6844:9;:28::i;42368:371::-;11511:13;:11;:13::i;:::-;42535:5:::1;42519:13;6550:12:::0;;;6462:108;42519:13:::1;:21;;;;:::i;:::-;42496;:44;;42488:101;;;::::0;-1:-1:-1;;;42488:101:0;;8092:2:1;42488:101:0::1;::::0;::::1;8074:21:1::0;8131:2;8111:18;;;8104:30;8170:34;8150:18;;;8143:62;-1:-1:-1;;;8221:18:1;;;8214:42;8273:19;;42488:101:0::1;7890:408:1::0;42488:101:0::1;42655:20;::::0;42605:71:::1;::::0;;5635:25:1;;;5691:2;5676:18;;5669:34;;;;42605:71:0::1;::::0;5608:18:1;42605:71:0::1;;;;;;;42687:20;:44:::0;42368:371::o;43353:434::-;11511:13;:11;:13::i;:::-;-1:-1:-1;;;;;43464:30:0;::::1;43456:70;;;::::0;-1:-1:-1;;;43456:70:0;;8505:2:1;43456:70:0::1;::::0;::::1;8487:21:1::0;8544:2;8524:18;;;8517:30;8583:29;8563:18;;;8556:57;8630:18;;43456:70:0::1;8303:351:1::0;43456:70:0::1;43595:15;::::0;43542:69:::1;::::0;-1:-1:-1;;;;;43595:15:0;;;::::1;::::0;::::1;::::0;43542:69;::::1;::::0;::::1;::::0;;;::::1;43622:15;:34:::0;;-1:-1:-1;;;;;;43622:34:0::1;::::0;-1:-1:-1;;;;;43622:34:0;;;::::1;::::0;;::::1;;::::0;;-1:-1:-1;43667:35:0;;;:17:::1;:35;::::0;;;;;;;:42;;-1:-1:-1;;43667:42:0;;::::1;-1:-1:-1::0;43667:42:0;;::::1;::::0;;;43720:34:::1;:52:::0;;;;;:59;;;;::::1;::::0;;::::1;::::0;;43353:434::o;40666:613::-;11511:13;:11;:13::i;:::-;40797:10:::1;;;;;;;;;-1:-1:-1::0;;;;;40797:10:0::1;-1:-1:-1::0;;;;;40778:35:0::1;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40757:18;:58:::0;;-1:-1:-1;;;;;;40757:58:0::1;-1:-1:-1::0;;;;;40757:58:0;;::::1;;::::0;;40829:10:::1;::::0;:25;;::::1;:10:::0;::::1;:25;40826:136;;40870:41;40887:4;40894:11:::0;-1:-1:-1;;40870:8:0::1;:41::i;:::-;40926:10;:24:::0;;-1:-1:-1;;;;;;40926:24:0::1;-1:-1:-1::0;;;;;40926:24:0;::::1;;::::0;;40826:136:::1;41021:10;;;;;;;;;-1:-1:-1::0;;;;;41021:10:0::1;-1:-1:-1::0;;;;;41002:38:0::1;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41097:18;::::0;40984:142:::1;::::0;-1:-1:-1;;;40984:142:0;;41077:4:::1;40984:142;::::0;::::1;9127:34:1::0;-1:-1:-1;;;;;41097:18:0;;::::1;9177::1::0;;;9170:43;40984:70:0;::::1;::::0;::::1;::::0;9062:18:1;;40984:142:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40973:8;:153:::0;;-1:-1:-1;;;;;;40973:153:0::1;-1:-1:-1::0;;;;;40973:153:0;;::::1;::::0;;::::1;::::0;;;41175:10:::1;::::0;41197:18:::1;::::0;41157:59:::1;::::0;;41175:10;;::::1;9464:34:1::0;;9529:2;9514:18;;9507:43;;;;41197:18:0;;::::1;9566::1::0;;;9559:43;41157:59:0::1;::::0;9414:2:1;9399:18;41157:59:0::1;;;;;;;41256:8;::::0;41227:44:::1;::::0;-1:-1:-1;;;;;41256:8:0::1;::::0;41227:28:::1;:44::i;41496:607::-:0;11511:13;:11;:13::i;:::-;41672:16:::1;::::0;41692:6:::1;::::0;41652:36:::1;::::0;-1:-1:-1;;;41672:16:0;::::1;;;41652:17:::0;:36:::1;:::i;:::-;:46;;;;41630:111;;;::::0;-1:-1:-1;;;41630:111:0;;9990:2:1;41630:111:0::1;::::0;::::1;9972:21:1::0;10029:2;10009:18;;;10002:30;-1:-1:-1;;;10048:18:1;;;10041:45;10103:18;;41630:111:0::1;9788:339:1::0;41630:111:0::1;41779:15;::::0;41798:6:::1;::::0;41760:34:::1;::::0;41779:15:::1;;41760:16:::0;:34:::1;:::i;:::-;:44;;;;41752:71;;;::::0;-1:-1:-1;;;41752:71:0;;10334:2:1;41752:71:0::1;::::0;::::1;10316:21:1::0;10373:2;10353:18;;;10346:30;-1:-1:-1;;;10392:18:1;;;10385:44;10446:18;;41752:71:0::1;10132:338:1::0;41752:71:0::1;41935:16;::::0;41839:153:::1;::::0;;41935:16:::1;10743:15:1::0;;;10725:34;;10795:15;;;10790:2;10775:18;;10768:43;-1:-1:-1;;;41935:16:0;::::1;::::0;::::1;10827:18:1::0;;;10820:43;-1:-1:-1;;;41966:15:0;;::::1;::::0;;::::1;10894:2:1::0;10879:18;;10872:43;41839:153:0;::::1;::::0;;;;10685:3:1;41839:153:0;;::::1;42003:16;:36:::0;;-1:-1:-1;;;;42050:34:0;-1:-1:-1;;;42003:36:0::1;::::0;;::::1;;-1:-1:-1::0;;;;42050:34:0;;-1:-1:-1;;;42050:34:0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;41496:607::o;6908:151::-;-1:-1:-1;;;;;7024:18:0;;;6997:7;7024:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6908:151::o;44711:234::-;11511:13;:11;:13::i;:::-;-1:-1:-1;;;;;44801:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;:34;::::1;;:26;::::0;;::::1;:34;;::::0;44793:54:::1;;;::::0;-1:-1:-1;;;44793:54:0;;5916:2:1;44793:54:0::1;::::0;::::1;5898:21:1::0;5955:1;5935:18;;;5928:29;-1:-1:-1;;;5973:18:1;;;5966:37;6020:18;;44793:54:0::1;5714:330:1::0;44793:54:0::1;-1:-1:-1::0;;;;;44858:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;;;;:33;;-1:-1:-1;;44858:33:0::1;::::0;::::1;;::::0;;::::1;::::0;;;44907:30;;1266:41:1;;;44907:30:0::1;::::0;1239:18:1;44907:30:0::1;1126:187:1::0;50352:184:0;11511:13;:11;:13::i;:::-;50406:12:::1;50430:7;11623:6:::0;;-1:-1:-1;;;;;11623:6:0;;11550:87;50430:7:::1;-1:-1:-1::0;;;;;50422:21:0::1;50451;50422:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50405:72;;;50496:7;50488:40;;;::::0;-1:-1:-1;;;50488:40:0;;11338:2:1;50488:40:0::1;::::0;::::1;11320:21:1::0;11377:2;11357:18;;;11350:30;-1:-1:-1;;;11396:18:1;;;11389:50;11456:18;;50488:40:0::1;11136:344:1::0;42747:598:0;11511:13;:11;:13::i;:::-;42923:16:::1;::::0;42943:6:::1;::::0;42903:36:::1;::::0;-1:-1:-1;;;42923:16:0;::::1;;;42903:17:::0;:36:::1;:::i;:::-;:46;;;;42881:111;;;::::0;-1:-1:-1;;;42881:111:0;;9990:2:1;42881:111:0::1;::::0;::::1;9972:21:1::0;10029:2;10009:18;;;10002:30;-1:-1:-1;;;10048:18:1;;;10041:45;10103:18;;42881:111:0::1;9788:339:1::0;42881:111:0::1;43030:15;::::0;43049:6:::1;::::0;43011:34:::1;::::0;-1:-1:-1;;;43030:15:0;::::1;;;43011:16:::0;:34:::1;:::i;:::-;:44;;;;43003:71;;;::::0;-1:-1:-1;;;43003:71:0;;10334:2:1;43003:71:0::1;::::0;::::1;10316:21:1::0;10373:2;10353:18;;;10346:30;-1:-1:-1;;;10392:18:1;;;10385:44;10446:18;;43003:71:0::1;10132:338:1::0;43003:71:0::1;43186:16;::::0;43217:15:::1;::::0;43090:153:::1;::::0;;43186:16:::1;10743:15:1::0;;;10725:34;;10795:15;;;10790:2;10775:18;;10768:43;-1:-1:-1;;;43186:16:0;;::::1;::::0;::::1;10827:18:1::0;;;10820:43;43217:15:0;;;::::1;10894:2:1::0;10879:18;;10872:43;43090:153:0;::::1;::::0;;;;10685:3:1;43090:153:0;;::::1;43254:16;:36:::0;;-1:-1:-1;;;;43254:36:0::1;-1:-1:-1::0;;;43254:36:0::1;::::0;;::::1;;;::::0;;43301:15:::1;:34:::0;;-1:-1:-1;;43301:34:0::1;::::0;;;::::1;;::::0;;42747:598::o;11890:201::-;11511:13;:11;:13::i;:::-;-1:-1:-1;;;;;11979:22:0;::::1;11971:73;;;::::0;-1:-1:-1;;;11971:73:0;;11687:2:1;11971:73:0::1;::::0;::::1;11669:21:1::0;11726:2;11706:18;;;11699:30;11765:34;11745:18;;;11738:62;-1:-1:-1;;;11816:18:1;;;11809:36;11862:19;;11971:73:0::1;11485:402:1::0;11971:73:0::1;12055:28;12074:8;12055:18;:28::i;10272:346::-:0;-1:-1:-1;;;;;10374:19:0;;10366:68;;;;-1:-1:-1;;;10366:68:0;;12094:2:1;10366:68:0;;;12076:21:1;12133:2;12113:18;;;12106:30;12172:34;12152:18;;;12145:62;-1:-1:-1;;;12223:18:1;;;12216:34;12267:19;;10366:68:0;11892:400:1;10366:68:0;-1:-1:-1;;;;;10453:21:0;;10445:68;;;;-1:-1:-1;;;10445:68:0;;12499:2:1;10445:68:0;;;12481:21:1;12538:2;12518:18;;;12511:30;12577:34;12557:18;;;12550:62;-1:-1:-1;;;12628:18:1;;;12621:32;12670:19;;10445:68:0;12297:398:1;10445:68:0;-1:-1:-1;;;;;10526:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10578:32;;1464:25:1;;;10578:32:0;;1437:18:1;10578:32:0;;;;;;;10272:346;;;:::o;11643:132::-;11623:6;;-1:-1:-1;;;;;11623:6:0;5611:10;11707:23;11699:68;;;;-1:-1:-1;;;11699:68:0;;12902:2:1;11699:68:0;;;12884:21:1;;;12921:18;;;12914:30;12980:34;12960:18;;;12953:62;13032:18;;11699:68:0;12700:356:1;10624:419:0;10725:24;10752:25;10762:5;10769:7;10752:9;:25::i;:::-;10725:52;;-1:-1:-1;;10792:16:0;:37;10788:248;;10874:6;10854:16;:26;;10846:68;;;;-1:-1:-1;;;10846:68:0;;13263:2:1;10846:68:0;;;13245:21:1;13302:2;13282:18;;;13275:30;13341:31;13321:18;;;13314:59;13390:18;;10846:68:0;13061:353:1;10846:68:0;10958:51;10967:5;10974:7;11002:6;10983:16;:25;10958:8;:51::i;:::-;10714:329;10624:419;;;:::o;45284:2458::-;-1:-1:-1;;;;;45416:18:0;;45408:68;;;;-1:-1:-1;;;45408:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45495:16:0;;45487:64;;;;-1:-1:-1;;;45487:64:0;;;;;;;:::i;:::-;45562:28;45593:24;45611:4;45593:9;:24::i;:::-;45562:55;;45638:24;45687:19;;45665;;:41;;;;:::i;:::-;45638:68;;45717:28;45781:18;;45748:16;:51;;:95;;;;;45823:20;45803:16;:40;;45748:95;45894:16;;45717:126;;-1:-1:-1;;;;45894:16:0;;;;45893:17;:57;;;;-1:-1:-1;45937:8:0;;45949:1;;45927:19;;-1:-1:-1;;;;;45937:8:0;45927:9;:19::i;:::-;:23;45893:57;:97;;;;;45967:23;45893:97;:143;;;;-1:-1:-1;;;;;;46007:29:0;;;;;;:25;:29;;;;;;;;45893:143;45875:209;;;46063:9;:7;:9::i;:::-;46265:16;;46096:21;;;;-1:-1:-1;;;46265:16:0;;;;46264:17;:58;;;;-1:-1:-1;;;;;;46299:23:0;;;;;;:17;:23;;;;;;;;46298:24;46264:58;:97;;;;-1:-1:-1;;;;;;46340:21:0;;;;;;:17;:21;;;;;;;;46339:22;46264:97;46246:946;;;-1:-1:-1;;;;;46412:31:0;;;;;;:25;:31;;;;;;;;46408:422;;;46489:15;;46507:7;;46480:24;;-1:-1:-1;;;46489:15:0;;;;46480:6;:24;:::i;:::-;:34;;;;:::i;:::-;46558:15;;46464:50;;-1:-1:-1;46576:7:0;;46549:24;;46558:15;;46549:6;:24;:::i;:::-;:34;;;;:::i;:::-;46533:50;;46408:422;;;-1:-1:-1;;;;;46643:29:0;;;;;;:25;:29;;;;;;;;46639:191;;;46718:16;;46737:7;;46709:25;;-1:-1:-1;;;46718:16:0;;;;46709:6;:25;:::i;:::-;:35;;;;:::i;:::-;46788:16;;46693:51;;-1:-1:-1;46807:7:0;;46779:25;;-1:-1:-1;;;46788:16:0;;;;46779:6;:25;:::i;:::-;:35;;;;:::i;:::-;46763:51;;46639:191;46844:17;46864:29;46880:13;46864;:29;:::i;:::-;46844:49;-1:-1:-1;46912:13:0;;46908:66;;46927:47;46943:4;46957;46964:9;46927:15;:47::i;:::-;47023:13;46998:22;47007:13;46998:6;:22;:::i;:::-;:38;;;;:::i;:::-;46989:47;;47095:13;47073:19;;:35;;;;:::i;:::-;47051:19;:57;47145:19;;:35;;47167:13;;47145:35;:::i;:::-;47123:19;:57;-1:-1:-1;46246:946:0;47202:33;47218:4;47224:2;47228:6;47202:15;:33::i;:::-;47251:16;;-1:-1:-1;;;47251:16:0;;;;47246:489;;-1:-1:-1;;;;;47289:40:0;;;;;;:34;:40;;;;;;;;47284:215;;47390:20;;47380:6;:30;;47350:133;;;;-1:-1:-1;;;47350:133:0;;14737:2:1;47350:133:0;;;14719:21:1;14776:2;14756:18;;;14749:30;14815:31;14795:18;;;14788:59;14864:18;;47350:133:0;14535:353:1;47350:133:0;-1:-1:-1;;;;;47518:38:0;;;;;;:34;:38;;;;;;;;47513:211;;47624:9;;47607:13;47617:2;47607:9;:13::i;:::-;:26;;47577:131;;;;-1:-1:-1;;;47577:131:0;;15095:2:1;47577:131:0;;;15077:21:1;15134:2;15114:18;;;15107:30;15173:33;15153:18;;;15146:61;15224:18;;47577:131:0;14893:355:1;47577:131:0;45397:2345;;;;;45284:2458;;;:::o;12097:191::-;12190:6;;;-1:-1:-1;;;;;12207:17:0;;;-1:-1:-1;;;;;;12207:17:0;;;;;;;12240:40;;12190:6;;;12207:17;12190:6;;12240:40;;12171:16;;12240:40;12160:128;12097:191;:::o;12715:177::-;12825:58;;;-1:-1:-1;;;;;15445:32:1;;12825:58:0;;;15427:51:1;15494:18;;;;15487:34;;;12825:58:0;;;;;;;;;;15400:18:1;;;;12825:58:0;;;;;;;;-1:-1:-1;;;;;12825:58:0;-1:-1:-1;;;12825:58:0;;;12798:86;;12818:5;;12798:19;:86::i;:::-;12715:177;;;:::o;44450:253::-;-1:-1:-1;;;;;44541:31:0;;;;;;:25;:31;;;;;;;;:39;;;;;-1:-1:-1;;44541:39:0;;;;;;;;44591:34;:40;;;;;;:48;;;;;;;;;;44655:40;1266:41:1;;;44655:40:0;;1239:18:1;44655:40:0;1126:187:1;47750:1707:0;41410:16;:23;;-1:-1:-1;;;;41410:23:0;-1:-1:-1;;;41410:23:0;;;47880:19:::1;::::0;41410:23;;47880::::1;::::0;47902:1:::1;::::0;47880:23:::1;:::i;:::-;47851:52;;47914:31;47948:21;47914:55;;47999:29;48043:21:::0;48084:19:::1;;48065:18;:38;;;;:::i;:::-;48043:60:::0;-1:-1:-1;48121:15:0;;48118:74:::1;;48155:37;48178:13;48155:22;:37::i;:::-;48207:24;48234:47;48258:23:::0;48234:21:::1;:47;:::i;:::-;48207:74;;48296:35;48394:13;48371:19;;48335:16;:55;;;;:::i;:::-;48334:73;;;;:::i;:::-;48296:111:::0;-1:-1:-1;48446:46:0::1;48296:111:::0;48446:16;:46:::1;:::i;:::-;48422:70:::0;-1:-1:-1;48510:29:0;;48507:327:::1;;48588:15;::::0;48580:69:::1;::::0;48564:12:::1;::::0;48588:15;;::::1;-1:-1:-1::0;;;;;48588:15:0::1;::::0;48617:27;;48564:12;48580:69;48564:12;48580:69;48617:27;48588:15;48580:69:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48563:86;;;48675:7;48672:116;;;48715:49;::::0;;48733:1:::1;5635:25:1::0;;5691:2;5676:18;;5669:34;;;48715:49:0::1;::::0;5608:18:1;48715:49:0::1;;;;;;;48672:116;48540:294;48507:327;48893:1;48872:18;:22;:51;;;;;48922:1;48898:21;:25;48872:51;48868:216;;;48940:55;48953:18;48973:21;48940:12;:55::i;:::-;49015:57;::::0;;5635:25:1;;;5691:2;5676:18;;5669:34;;;49015:57:0::1;::::0;5608:18:1;49015:57:0::1;;;;;;;48868:216;49116:1;49094:19;:23:::0;;;49128:19:::1;:23:::0;;;49169:24:::1;49187:4;49169:9;:24::i;:::-;:26;49166:283;;;49231:1;49214:7;11623:6:::0;;-1:-1:-1;;;;;11623:6:0;;11550:87;49214:7:::1;-1:-1:-1::0;;;;;49214:19:0::1;;49211:227;;49253:59;49271:4;49278:7;11623:6:::0;;-1:-1:-1;;;;;11623:6:0;;11550:87;49278:7:::1;49287:24;49305:4;49287:9;:24::i;:::-;49253:9;:59::i;:::-;49211:227;;;49353:67;49371:4;49386:6;49395:24;49413:4;49395:9;:24::i;49353:67::-;-1:-1:-1::0;;41456:16:0;:24;;-1:-1:-1;;;;41456:24:0;;;-1:-1:-1;;;;47750:1707:0:o;8225:806::-;-1:-1:-1;;;;;8322:18:0;;8314:68;;;;-1:-1:-1;;;8314:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8401:16:0;;8393:64;;;;-1:-1:-1;;;8393:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8543:15:0;;8521:19;8543:15;;;;;;;;;;;8577:21;;;;8569:72;;;;-1:-1:-1;;;8569:72:0;;15995:2:1;8569:72:0;;;15977:21:1;16034:2;16014:18;;;16007:30;16073:34;16053:18;;;16046:62;-1:-1:-1;;;16124:18:1;;;16117:36;16170:19;;8569:72:0;15793:402:1;8569:72:0;-1:-1:-1;;;;;8677:15:0;;;:9;:15;;;;;;;;;;;8695:20;;;8677:38;;8895:13;;;;;;;;;;:23;;;;;;8947:26;;1464:25:1;;;8895:13:0;;8947:26;;1437:18:1;8947:26:0;;;;;;;8986:37;12715:177;15320:649;15744:23;15770:69;15798:4;15770:69;;;;;;;;;;;;;;;;;15778:5;-1:-1:-1;;;;;15770:27:0;;;:69;;;;;:::i;:::-;15744:95;;15858:10;:17;15879:1;15858:22;:56;;;;15895:10;15884:30;;;;;;;;;;;;:::i;:::-;15850:111;;;;-1:-1:-1;;;15850:111:0;;16652:2:1;15850:111:0;;;16634:21:1;16691:2;16671:18;;;16664:30;16730:34;16710:18;;;16703:62;-1:-1:-1;;;16781:18:1;;;16774:40;16831:19;;15850:111:0;16450:406:1;49465:473:0;49561:16;;;49575:1;49561:16;;;;;;;;49537:21;;49561:16;;;;;;;;;;-1:-1:-1;49561:16:0;49537:40;;49606:4;49588;49593:1;49588:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;49588:23:0;;;:7;;;;;;;;;:23;49632:18;;49622:7;;49632:18;;;49622:4;;49632:18;;49622:7;;;;;;:::i;:::-;-1:-1:-1;;;;;49622:28:0;;;:7;;;;;;;;;:28;49685:10;;49666:245;;-1:-1:-1;;;49666:245:0;;49685:10;;;49666:81;;:245;;49762:11;;49685:10;;49838:4;;49865;;49885:15;;49666:245;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49526:412;49465:473;:::o;49946:398::-;50066:10;;50047:281;;-1:-1:-1;;;50047:281:0;;50140:4;50047:281;;;18451:34:1;18501:18;;;18494:34;;;50066:10:0;18544:18:1;;;18537:34;;;18587:18;;;18580:34;50280:6:0;18630:19:1;;;18623:44;50302:15:0;18683:19:1;;;18676:35;-1:-1:-1;;;;;50066:10:0;;;;50047:46;;50101:15;;18385:19:1;;50047:281:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;49946:398;;:::o;1053:229::-;1190:12;1222:52;1244:6;1252:4;1258:1;1261:12;1222:21;:52::i;:::-;1215:59;1053:229;-1:-1:-1;;;;1053:229:0:o;1520:455::-;1690:12;1748:5;1723:21;:30;;1715:81;;;;-1:-1:-1;;;1715:81:0;;19235:2:1;1715:81:0;;;19217:21:1;19274:2;19254:18;;;19247:30;19313:34;19293:18;;;19286:62;-1:-1:-1;;;19364:18:1;;;19357:36;19410:19;;1715:81:0;19033:402:1;1715:81:0;1808:12;1822:23;1849:6;-1:-1:-1;;;;;1849:11:0;1868:5;1875:4;1849:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1807:73;;;;1898:69;1925:6;1933:7;1942:10;1954:12;1898:26;:69::i;:::-;1891:76;1520:455;-1:-1:-1;;;;;;;1520:455:0:o;3069:644::-;3254:12;3283:7;3279:427;;;3311:10;:17;3332:1;3311:22;3307:290;;-1:-1:-1;;;;;500:19:0;;;3521:60;;;;-1:-1:-1;;;3521:60:0;;19934:2:1;3521:60:0;;;19916:21:1;19973:2;19953:18;;;19946:30;20012:31;19992:18;;;19985:59;20061:18;;3521:60:0;19732:353:1;3521:60:0;-1:-1:-1;3618:10:0;3611:17;;3279:427;3661:33;3669:10;3681:12;4191:17;;:21;4187:388;;4423:10;4417:17;4480:15;4467:10;4463:2;4459:19;4452:44;4187:388;4550:12;4543:20;;-1:-1:-1;;;4543:20:0;;;;;;;;:::i;14:250:1:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:1;238:16;;231:27;14:250::o;269:396::-;418:2;407:9;400:21;381:4;450:6;444:13;493:6;488:2;477:9;473:18;466:34;509:79;581:6;576:2;565:9;561:18;556:2;548:6;544:15;509:79;:::i;:::-;649:2;628:15;-1:-1:-1;;624:29:1;609:45;;;;656:2;605:54;;269:396;-1:-1:-1;;269:396:1:o;670:131::-;-1:-1:-1;;;;;745:31:1;;735:42;;725:70;;791:1;788;781:12;806:315;874:6;882;935:2;923:9;914:7;910:23;906:32;903:52;;;951:1;948;941:12;903:52;990:9;977:23;1009:31;1034:5;1009:31;:::i;:::-;1059:5;1111:2;1096:18;;;;1083:32;;-1:-1:-1;;;806:315:1:o;1500:180::-;1559:6;1612:2;1600:9;1591:7;1587:23;1583:32;1580:52;;;1628:1;1625;1618:12;1580:52;-1:-1:-1;1651:23:1;;1500:180;-1:-1:-1;1500:180:1:o;1685:456::-;1762:6;1770;1778;1831:2;1819:9;1810:7;1806:23;1802:32;1799:52;;;1847:1;1844;1837:12;1799:52;1886:9;1873:23;1905:31;1930:5;1905:31;:::i;:::-;1955:5;-1:-1:-1;2012:2:1;1997:18;;1984:32;2025:33;1984:32;2025:33;:::i;:::-;1685:456;;2077:7;;-1:-1:-1;;;2131:2:1;2116:18;;;;2103:32;;1685:456::o;2146:118::-;2232:5;2225:13;2218:21;2211:5;2208:32;2198:60;;2254:1;2251;2244:12;2269:382;2334:6;2342;2395:2;2383:9;2374:7;2370:23;2366:32;2363:52;;;2411:1;2408;2401:12;2363:52;2450:9;2437:23;2469:31;2494:5;2469:31;:::i;:::-;2519:5;-1:-1:-1;2576:2:1;2561:18;;2548:32;2589:30;2548:32;2589:30;:::i;:::-;2638:7;2628:17;;;2269:382;;;;;:::o;3053:247::-;3112:6;3165:2;3153:9;3144:7;3140:23;3136:32;3133:52;;;3181:1;3178;3171:12;3133:52;3220:9;3207:23;3239:31;3264:5;3239:31;:::i;:::-;3289:5;3053:247;-1:-1:-1;;;3053:247:1:o;3500:161::-;3567:20;;3627:8;3616:20;;3606:31;;3596:59;;3651:1;3648;3641:12;3596:59;3500:161;;;:::o;3666:256::-;3732:6;3740;3793:2;3781:9;3772:7;3768:23;3764:32;3761:52;;;3809:1;3806;3799:12;3761:52;3832:28;3850:9;3832:28;:::i;:::-;3822:38;;3879:37;3912:2;3901:9;3897:18;3879:37;:::i;:::-;3869:47;;3666:256;;;;;:::o;3927:388::-;3995:6;4003;4056:2;4044:9;4035:7;4031:23;4027:32;4024:52;;;4072:1;4069;4062:12;4024:52;4111:9;4098:23;4130:31;4155:5;4130:31;:::i;:::-;4180:5;-1:-1:-1;4237:2:1;4222:18;;4209:32;4250:33;4209:32;4250:33;:::i;4320:380::-;4399:1;4395:12;;;;4442;;;4463:61;;4517:4;4509:6;4505:17;4495:27;;4463:61;4570:2;4562:6;4559:14;4539:18;4536:38;4533:161;;4616:10;4611:3;4607:20;4604:1;4597:31;4651:4;4648:1;4641:15;4679:4;4676:1;4669:15;4533:161;;4320:380;;;:::o;4705:127::-;4766:10;4761:3;4757:20;4754:1;4747:31;4797:4;4794:1;4787:15;4821:4;4818:1;4811:15;4837:217;4877:1;4903;4893:132;;4947:10;4942:3;4938:20;4935:1;4928:31;4982:4;4979:1;4972:15;5010:4;5007:1;5000:15;4893:132;-1:-1:-1;5039:9:1;;4837:217::o;6049:125::-;6114:9;;;6135:10;;;6132:36;;;6148:18;;:::i;6870:184::-;6940:6;6993:2;6981:9;6972:7;6968:23;6964:32;6961:52;;;7009:1;7006;6999:12;6961:52;-1:-1:-1;7032:16:1;;6870:184;-1:-1:-1;6870:184:1:o;8659:251::-;8729:6;8782:2;8770:9;8761:7;8757:23;8753:32;8750:52;;;8798:1;8795;8788:12;8750:52;8830:9;8824:16;8849:31;8874:5;8849:31;:::i;9613:170::-;9680:8;9708:10;;;9720;;;9704:27;;9743:11;;;9740:37;;;9757:18;;:::i;:::-;9740:37;9613:170;;;;:::o;13419:401::-;13621:2;13603:21;;;13660:2;13640:18;;;13633:30;13699:34;13694:2;13679:18;;13672:62;-1:-1:-1;;;13765:2:1;13750:18;;13743:35;13810:3;13795:19;;13419:401::o;13825:399::-;14027:2;14009:21;;;14066:2;14046:18;;;14039:30;14105:34;14100:2;14085:18;;14078:62;-1:-1:-1;;;14171:2:1;14156:18;;14149:33;14214:3;14199:19;;13825:399::o;14229:168::-;14302:9;;;14333;;14350:15;;;14344:22;;14330:37;14320:71;;14371:18;;:::i;14402:128::-;14469:9;;;14490:11;;;14487:37;;;14504:18;;:::i;16200:245::-;16267:6;16320:2;16308:9;16299:7;16295:23;16291:32;16288:52;;;16336:1;16333;16326:12;16288:52;16368:9;16362:16;16387:28;16409:5;16387:28;:::i;16993:127::-;17054:10;17049:3;17045:20;17042:1;17035:31;17085:4;17082:1;17075:15;17109:4;17106:1;17099:15;17125:980;17387:4;17435:3;17424:9;17420:19;17466:6;17455:9;17448:25;17492:2;17530:6;17525:2;17514:9;17510:18;17503:34;17573:3;17568:2;17557:9;17553:18;17546:31;17597:6;17632;17626:13;17663:6;17655;17648:22;17701:3;17690:9;17686:19;17679:26;;17740:2;17732:6;17728:15;17714:29;;17761:1;17771:195;17785:6;17782:1;17779:13;17771:195;;;17850:13;;-1:-1:-1;;;;;17846:39:1;17834:52;;17941:15;;;;17906:12;;;;17882:1;17800:9;17771:195;;;-1:-1:-1;;;;;;;18022:32:1;;;;18017:2;18002:18;;17995:60;-1:-1:-1;;;18086:3:1;18071:19;18064:35;17983:3;17125:980;-1:-1:-1;;;17125:980:1:o;18722:306::-;18810:6;18818;18826;18879:2;18867:9;18858:7;18854:23;18850:32;18847:52;;;18895:1;18892;18885:12;18847:52;18924:9;18918:16;18908:26;;18974:2;18963:9;18959:18;18953:25;18943:35;;19018:2;19007:9;19003:18;18997:25;18987:35;;18722:306;;;;;:::o;19440:287::-;19569:3;19607:6;19601:13;19623:66;19682:6;19677:3;19670:4;19662:6;19658:17;19623:66;:::i;:::-;19705:16;;;;;19440:287;-1:-1:-1;;19440:287:1:o
Swarm Source
ipfs://eda93767869cd43039595302c39ae7a1e6eeda5fea0f18da91bbc0dc25a799f2
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.