Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 1,283 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 38372515 | 60 days ago | IN | 0 ETH | 0.00000005 | ||||
| Approve | 38372510 | 60 days ago | IN | 0 ETH | 0.00000005 | ||||
| Transfer | 30763686 | 236 days ago | IN | 0 ETH | 0.00000015 | ||||
| Approve | 26948187 | 324 days ago | IN | 0 ETH | 0.00000007 | ||||
| Approve | 26039588 | 346 days ago | IN | 0 ETH | 0.00000084 | ||||
| Approve | 25774269 | 352 days ago | IN | 0 ETH | 0.00000065 | ||||
| Approve | 25774215 | 352 days ago | IN | 0 ETH | 0.00000067 | ||||
| Approve | 25163807 | 366 days ago | IN | 0 ETH | 0.00001242 | ||||
| Approve | 25136239 | 366 days ago | IN | 0 ETH | 0.00000098 | ||||
| Approve | 25087925 | 368 days ago | IN | 0 ETH | 0.0000054 | ||||
| Approve | 24877422 | 372 days ago | IN | 0 ETH | 0.00000027 | ||||
| Approve | 24330144 | 385 days ago | IN | 0 ETH | 0.0000003 | ||||
| Approve | 23711493 | 399 days ago | IN | 0 ETH | 0.00000072 | ||||
| Approve | 23031216 | 415 days ago | IN | 0 ETH | 0.00000332 | ||||
| Approve | 22050961 | 438 days ago | IN | 0 ETH | 0.00000028 | ||||
| Approve | 21658998 | 447 days ago | IN | 0 ETH | 0.00009366 | ||||
| Approve | 18348690 | 524 days ago | IN | 0 ETH | 0.00000026 | ||||
| Transfer | 17491951 | 543 days ago | IN | 0 ETH | 0.00000172 | ||||
| Approve | 17043587 | 554 days ago | IN | 0 ETH | 0.00000021 | ||||
| Approve | 16303001 | 571 days ago | IN | 0 ETH | 0.00000013 | ||||
| Approve | 15989545 | 578 days ago | IN | 0 ETH | 0.00000017 | ||||
| Approve | 15989470 | 578 days ago | IN | 0 ETH | 0.00000029 | ||||
| Approve | 15949044 | 579 days ago | IN | 0 ETH | 0.00000008 | ||||
| Transfer | 15909993 | 580 days ago | IN | 0 ETH | 0.0000835 | ||||
| Transfer | 15909162 | 580 days ago | IN | 0 ETH | 0.00000057 |
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 15328044 | 593 days ago | 0.03164136 ETH | ||||
| 15328044 | 593 days ago | 0.03164136 ETH | ||||
| 15328020 | 593 days ago | 0.022436 ETH | ||||
| 15328020 | 593 days ago | 0.022436 ETH | ||||
| 15328015 | 593 days ago | 0.01521471 ETH | ||||
| 15328015 | 593 days ago | 0.01521471 ETH | ||||
| 15328013 | 593 days ago | 0.01799963 ETH | ||||
| 15328013 | 593 days ago | 0.01799963 ETH | ||||
| 15328013 | 593 days ago | 0.09388223 ETH | ||||
| 15328013 | 593 days ago | 0.09388223 ETH | ||||
| 15328008 | 593 days ago | 0.01928439 ETH | ||||
| 15328008 | 593 days ago | 0.01928439 ETH | ||||
| 15328007 | 593 days ago | 0.02973453 ETH | ||||
| 15328007 | 593 days ago | 0.02973453 ETH | ||||
| 15328003 | 593 days ago | 0.03722982 ETH | ||||
| 15328003 | 593 days ago | 0.03722982 ETH | ||||
| 15328003 | 593 days ago | 0.15222264 ETH | ||||
| 15328003 | 593 days ago | 0.15222264 ETH | ||||
| 15327996 | 593 days ago | 0.13072661 ETH | ||||
| 15327996 | 593 days ago | 0.13072661 ETH | ||||
| 15327971 | 593 days ago | 0.10342577 ETH | ||||
| 15327971 | 593 days ago | 0.10342577 ETH | ||||
| 15327961 | 593 days ago | 0.02139237 ETH | ||||
| 15327961 | 593 days ago | 0.02139237 ETH | ||||
| 15327959 | 593 days ago | 0.02199578 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
SmolDogOnBase
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/**
*Submitted for verification at basescan.org on 2024-05-29
*/
// SPDX-License-Identifier: MIT
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 SmolDogOnBase is ERC20, Ownable {
using SafeERC20 for IERC20;
struct Fee {
uint24 sellLiquidityFee;
uint24 buyLiquidityFee;
uint24 sellMarketingFee;
uint24 buyMarketingFee;
}
Fee public fee;
uint256 private constant MAX = ~uint256(0);
uint8 private _decimals;
///////////////////////////////////////////////////////////////////////////
bool private inSwapAndLiquify;
uint24 public feeDecrements;
uint256 public tradingEnabledTimeStamp;
uint256 public decrementInterval;
address public marketingWallet;
bool public isMarketingFeeBaseToken;
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 TradingEnabled();
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,
bool newIsMarketingFeeBaseToken,
address indexed oldMarketingWallet,
bool oldIsMarketingFeeBaseToken
);
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
);
event UpdateMaxWallet(uint256 newMaxWallet, uint256 oldMaxWallet);
event UpdateMaxTransactionAmount(uint256 newMaxTransactionAmount, uint256 oldMaxTransactionAmount);
///////////////////////////////////////////////////////////////////////////////
constructor(
string memory _name,
string memory _symbol,
uint8 __decimals,
uint256 _totalSupply,
address _marketingWallet,
address _mainRouter,
Fee memory _fee,
uint24 _feeDecrements,
uint256 _decrementInterval
) ERC20(_name, _symbol) {
_decimals = __decimals;
_mint(msg.sender, _totalSupply);
require(_marketingWallet!=address(0), "marketing wallet can not be 0");
require(_mainRouter!=address(0), "Router address can not be 0");
isMarketingFeeBaseToken = true;
marketingWallet=_marketingWallet;
emit UpdateMarketingWallet(
marketingWallet,
isMarketingFeeBaseToken,
address(0),
false
);
mainRouter=_mainRouter;
require(_decrementInterval > 0, "interval > 0");
_approve(address(this), mainRouter, MAX);
emit MainRouterUpdated(mainRouter, mainPair);
mainPair = IUniswapV2Factory(IUniswapV2Router02(mainRouter).factory()).createPair(
address(this),
IUniswapV2Router02(mainRouter).WETH()
);
maxWallet=_totalSupply;
emit UpdateMaxWallet(_totalSupply, 0);
maxTransactionAmount=_totalSupply;
emit UpdateMaxTransactionAmount(_totalSupply, 0);
fee.sellLiquidityFee=_fee.sellLiquidityFee;
fee.buyLiquidityFee=_fee.buyLiquidityFee;
emit UpdateLiquidityFee(fee.sellLiquidityFee, fee.buyLiquidityFee, 0, 0);
fee.sellMarketingFee=_fee.sellMarketingFee;
fee.buyMarketingFee=_fee.buyMarketingFee;
emit UpdateMarketingFee(
fee.sellMarketingFee,
fee.buyMarketingFee,
0,
0
);
feeDecrements = _feeDecrements;
decrementInterval = _decrementInterval;
minAmountToTakeFee=_totalSupply/10000;
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 updateDecrements(uint24 _feeDecrements, uint256 _decrementInterval) external onlyOwner {
require(_decrementInterval > 0, "interval > 0");
feeDecrements = _feeDecrements;
decrementInterval = _decrementInterval;
}
function decimals() public view override returns (uint8) {
return _decimals;
}
function updateMainPair(
address _mainRouter
) external onlyOwner {
if(mainRouter != _mainRouter){
_approve(address(this), _mainRouter, MAX);
mainRouter = _mainRouter;
}
mainPair = IUniswapV2Factory(IUniswapV2Router02(mainRouter).factory()).createPair(
address(this),
IUniswapV2Router02(mainRouter).WETH()
);
emit MainRouterUpdated(mainRouter, mainPair);
_setAutomatedMarketMakerPair(mainPair, true);
}
function startTrading() external onlyOwner {
require(tradingEnabledTimeStamp == 0, "Enabled!");
tradingEnabledTimeStamp = block.timestamp;
emit TradingEnabled();
}
/////////////////////////////////////////////////////////////////////////////////
modifier lockTheSwap() {
inSwapAndLiquify = true;
_;
inSwapAndLiquify = false;
}
function updateLiquidityFee(
uint24 _sellLiquidityFee,
uint24 _buyLiquidityFee
) external onlyOwner {
require(
_sellLiquidityFee + fee.sellMarketingFee <= 300000,
"sell fee <= 30%"
);
require(_buyLiquidityFee + fee.buyMarketingFee <= 300000, "buy fee <= 30%");
emit UpdateLiquidityFee(
_sellLiquidityFee,
_buyLiquidityFee,
fee.sellLiquidityFee,
fee.buyLiquidityFee
);
fee.sellLiquidityFee = _sellLiquidityFee;
fee.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 + fee.sellLiquidityFee <= 300000,
"sell fee <= 30%"
);
require(_buyMarketingFee + fee.buyLiquidityFee <= 300000, "buy fee <= 30%");
emit UpdateMarketingFee(
_sellMarketingFee,
_buyMarketingFee,
fee.sellMarketingFee,
fee.buyMarketingFee
);
fee.sellMarketingFee = _sellMarketingFee;
fee.buyMarketingFee = _buyMarketingFee;
}
function updateMarketingWallet(
address _marketingWallet,
bool _isMarketingFeeBaseToken
) external onlyOwner {
require(_marketingWallet != address(0), "marketing wallet can't be 0");
emit UpdateMarketingWallet(_marketingWallet, _isMarketingFeeBaseToken,
marketingWallet, isMarketingFeeBaseToken);
marketingWallet = _marketingWallet;
isMarketingFeeBaseToken = _isMarketingFeeBaseToken;
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]
) {
require(tradingEnabledTimeStamp > 0, "not enabled");
// Buy
if (automatedMarketMakerPairs[from]) {
_liquidityFee = amount * calculateFee(fee.buyLiquidityFee) / 1000000;
_marketingFee = amount * calculateFee(fee.buyMarketingFee) / 1000000;
}
// Sell
else if (automatedMarketMakerPairs[to]) {
_liquidityFee = amount * calculateFee(fee.sellLiquidityFee) / 1000000;
_marketingFee = amount * calculateFee(fee.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 calculateFee(uint24 _fee) private view returns (uint24) {
uint24 decrements = feeDecrements * uint24((block.timestamp - tradingEnabledTimeStamp) / decrementInterval);
if(_fee > decrements)
return _fee - decrements;
else
return 0;
}
function takeFee() private lockTheSwap {
// Halve the amount of liquidity tokens
uint256 tokensForLiquidity = _liquidityFeeTokens / 2;
uint256 initialBaseTokenBalance = address(this).balance;
uint256 baseTokenForLiquidity;
if (isMarketingFeeBaseToken) {
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);
}
}
} else {
if(tokensForLiquidity>0)
swapTokensForBaseToken(tokensForLiquidity);
baseTokenForLiquidity = address(this).balance - initialBaseTokenBalance;
if(_marketingFeeTokens>0){
_transfer(address(this), marketingWallet, _marketingFeeTokens);
emit MarketingFeeTaken(_marketingFeeTokens, 0);
}
}
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] = IUniswapV2Router02(mainRouter).WETH();
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
Contract ABI
API[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"__decimals","type":"uint8"},{"internalType":"uint256","name":"_totalSupply","type":"uint256"},{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_mainRouter","type":"address"},{"components":[{"internalType":"uint24","name":"sellLiquidityFee","type":"uint24"},{"internalType":"uint24","name":"buyLiquidityFee","type":"uint24"},{"internalType":"uint24","name":"sellMarketingFee","type":"uint24"},{"internalType":"uint24","name":"buyMarketingFee","type":"uint24"}],"internalType":"struct SmolDogOnBase.Fee","name":"_fee","type":"tuple"},{"internalType":"uint24","name":"_feeDecrements","type":"uint24"},{"internalType":"uint256","name":"_decrementInterval","type":"uint256"}],"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"}],"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":[],"name":"TradingEnabled","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":false,"internalType":"bool","name":"newIsMarketingFeeBaseToken","type":"bool"},{"indexed":true,"internalType":"address","name":"oldMarketingWallet","type":"address"},{"indexed":false,"internalType":"bool","name":"oldIsMarketingFeeBaseToken","type":"bool"}],"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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decrementInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"fee","outputs":[{"internalType":"uint24","name":"sellLiquidityFee","type":"uint24"},{"internalType":"uint24","name":"buyLiquidityFee","type":"uint24"},{"internalType":"uint24","name":"sellMarketingFee","type":"uint24"},{"internalType":"uint24","name":"buyMarketingFee","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeDecrements","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","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":"isMarketingFeeBaseToken","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":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","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":[],"name":"tradingEnabledTimeStamp","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":"_feeDecrements","type":"uint24"},{"internalType":"uint256","name":"_decrementInterval","type":"uint256"}],"name":"updateDecrements","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"},{"internalType":"bool","name":"_isMarketingFeeBaseToken","type":"bool"}],"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
60806040523480156200001157600080fd5b50604051620039d5380380620039d5833981016040819052620000349162000b9f565b8888600362000044838262000d12565b50600462000053828262000d12565b505050620000706200006a6200075760201b60201c565b6200075b565b6007805460ff191660ff89161790556200008b3387620007ad565b6001600160a01b038516620000e75760405162461bcd60e51b815260206004820152601d60248201527f6d61726b6574696e672077616c6c65742063616e206e6f74206265203000000060448201526064015b60405180910390fd5b6001600160a01b0384166200013f5760405162461bcd60e51b815260206004820152601b60248201527f526f7574657220616464726573732063616e206e6f74206265203000000000006044820152606401620000de565b600a80546001600160a01b038781166001600160a81b031990921691909117600160a01b908117928390556040805191840460ff161515825260006020830181905293909216917fc8dfdd9b91ac62ee1bd8be3541ea02d8e584461c794c6e49e94ccf21c71ebcca910160405180910390a3600e80546001600160a01b0319166001600160a01b038616179055806200020a5760405162461bcd60e51b815260206004820152600c60248201526b0696e74657276616c203e20360a41b6044820152606401620000de565b600e54620002269030906001600160a01b031660001962000870565b600e54600f54604080516001600160a01b0393841681529290911660208301527f751e970af297d4e5267dabcea7b369ad737038498379b46448d190d9e261f3c5910160405180910390a1600e60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002eb919062000dde565b6001600160a01b031663c9c6539630600e60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200034e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000374919062000dde565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620003c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e8919062000dde565b600f80546001600160a01b0319166001600160a01b0392909216919091179055600c86905560408051878152600060208201527fff64d41f60feb77d52f64ae64a9fc3929d57a89d0cc55728762468bae5e0fe52910160405180910390a1600d86905560408051878152600060208201527f35eec0711af6fbe3039535323be51b57996b6945b0d55862607c7a02e52e4507910160405180910390a182516006805460208087015162ffffff94851665ffffffffffff19909316929092176301000000928516830217928390556040805184861681529290930490931692810192909252600090820181905260608201527fdec183740138e3a28dfd6f973ecd3bf00cd5d9b2544f6763c0a87f721444c5d19060800160405180910390a16040838101516006805460608088015165ffffffffffff60301b19909216660100000000000062ffffff958616810262ffffff60481b19169190911769010000000000000000009386168402179384905585519084048516815291909204909216602083015260009282018390528101919091527f70748cb9cb3bcb4dfd4fff8f2a6f23f636067b33e0244631f9abd38159c1de859060800160405180910390a16007805464ffffff000019166201000062ffffff8516021790556009819055620005d46127108762000e03565b600b81905560408051918252600060208301527f772a06bc936eb749842080c472181e970cd4f23bd1ab7d0b84a80aec26910434910160405180910390a13060009081526011602081905260408083208054600160ff199182168117909255600a546001600160a01b031685529184208054909216811790915591620006573390565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790557f97847ee99463795296047093514439c3127772df3715e628aa85601cf85417168054861660019081179091556010948590527f9e93e1db4a1f807cc22b2aecf4deeb0bf5745f1ecb319e87c68c5624c0fa6b6980548716821790553082528382208054871682179055600a549092168152918220805490941681179093556200070c3390565b6001600160a01b0390811682526020820192909252604001600020805460ff191692151592909217909155600f54620007489116600162000998565b50505050505050505062000e4e565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620008055760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620000de565b806002600082825462000819919062000e26565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038316620008d45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401620000de565b6001600160a01b038216620009375760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620000de565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382166000818152601260209081526040808320805486151560ff199182168117909255601084529382902080549094168117909355519182527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab910160405180910390a25050565b505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562000a4e5762000a4e62000a0d565b604052919050565b600082601f83011262000a6857600080fd5b81516001600160401b0381111562000a845762000a8462000a0d565b602062000a9a601f8301601f1916820162000a23565b828152858284870101111562000aaf57600080fd5b60005b8381101562000acf57858101830151828201840152820162000ab2565b506000928101909101919091529392505050565b80516001600160a01b038116811462000afb57600080fd5b919050565b805162ffffff8116811462000afb57600080fd5b60006080828403121562000b2757600080fd5b604051608081016001600160401b038111828210171562000b4c5762000b4c62000a0d565b60405290508062000b5d8362000b00565b815262000b6d6020840162000b00565b602082015262000b806040840162000b00565b604082015262000b936060840162000b00565b60608201525092915050565b60008060008060008060008060006101808a8c03121562000bbf57600080fd5b89516001600160401b038082111562000bd757600080fd5b62000be58d838e0162000a56565b9a5060208c015191508082111562000bfc57600080fd5b5062000c0b8c828d0162000a56565b98505060408a015160ff8116811462000c2357600080fd5b60608b0151909750955062000c3b60808b0162000ae3565b945062000c4b60a08b0162000ae3565b935062000c5c8b60c08c0162000b14565b925062000c6d6101408b0162000b00565b91506101608a015190509295985092959850929598565b600181811c9082168062000c9957607f821691505b60208210810362000cba57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000a0857600081815260208120601f850160051c8101602086101562000ce95750805b601f850160051c820191505b8181101562000d0a5782815560010162000cf5565b505050505050565b81516001600160401b0381111562000d2e5762000d2e62000a0d565b62000d468162000d3f845462000c84565b8462000cc0565b602080601f83116001811462000d7e576000841562000d655750858301515b600019600386901b1c1916600185901b17855562000d0a565b600085815260208120601f198616915b8281101562000daf5788860151825594840194600190910190840162000d8e565b508582101562000dce5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000df157600080fd5b62000dfc8262000ae3565b9392505050565b60008262000e2157634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000e4857634e487b7160e01b600052601160045260246000fd5b92915050565b612b778062000e5e6000396000f3fe6080604052600436106102555760003560e01c80639a7a23d611610139578063d5bf72b7116100b6578063e2669cf51161007a578063e2669cf51461074c578063e9481eee1461076c578063ec44adc81461079c578063f2fde38b146107bc578063f8b45b05146107dc578063fc59d23d146107f257600080fd5b8063d5bf72b71461066d578063dd62ed3e1461068d578063ddca3f43146106ad578063df8408fe14610717578063e086e5ec1461073757600080fd5b8063b62496f5116100fd578063b62496f5146105d1578063b95d11be14610601578063c8c8ebe414610621578063cda7dd7b14610637578063cf188ad01461064d57600080fd5b80639a7a23d61461053b5780639b3e45b41461055b578063a457c2d714610571578063a9059cbb14610591578063aa498023146105b157600080fd5b80635342acb4116101d257806375f0a8741161019657806375f0a8741461045a57806385af30c51461049257806389476069146104b25780638c40044a146104d25780638da5cb5b1461050857806395d89b411461052657600080fd5b80635342acb4146103b457806357e62b98146103e457806370a0823114610405578063715018a61461042557806373b9e82c1461043a57600080fd5b8063293230b811610219578063293230b81461031d5780632ae2f12114610332578063313ce5671461035257806339509351146103745780634707c5511461039457600080fd5b806306fdde0314610261578063095ea7b31461028c57806318160ddd146102bc5780631c499ab0146102db57806323b872dd146102fd57600080fd5b3661025c57005b600080fd5b34801561026d57600080fd5b50610276610808565b60405161028391906126bf565b60405180910390f35b34801561029857600080fd5b506102ac6102a7366004612707565b61089a565b6040519015158152602001610283565b3480156102c857600080fd5b506002545b604051908152602001610283565b3480156102e757600080fd5b506102fb6102f6366004612733565b6108b4565b005b34801561030957600080fd5b506102ac61031836600461274c565b610972565b34801561032957600080fd5b506102fb610996565b34801561033e57600080fd5b506102fb61034d36600461279b565b610a08565b34801561035e57600080fd5b5060075460405160ff9091168152602001610283565b34801561038057600080fd5b506102ac61038f366004612707565b610aca565b3480156103a057600080fd5b506102fb6103af36600461279b565b610aec565b3480156103c057600080fd5b506102ac6103cf3660046127d4565b60116020526000908152604090205460ff1681565b3480156103f057600080fd5b50600a546102ac90600160a01b900460ff1681565b34801561041157600080fd5b506102cd6104203660046127d4565b610c02565b34801561043157600080fd5b506102fb610c1d565b34801561044657600080fd5b506102fb610455366004612733565b610c31565b34801561046657600080fd5b50600a5461047a906001600160a01b031681565b6040516001600160a01b039091168152602001610283565b34801561049e57600080fd5b50600f5461047a906001600160a01b031681565b3480156104be57600080fd5b506102fb6104cd3660046127d4565b610cc4565b3480156104de57600080fd5b506007546104f49062010000900462ffffff1681565b60405162ffffff9091168152602001610283565b34801561051457600080fd5b506005546001600160a01b031661047a565b34801561053257600080fd5b50610276610da3565b34801561054757600080fd5b506102fb61055636600461279b565b610db2565b34801561056757600080fd5b506102cd60095481565b34801561057d57600080fd5b506102ac61058c366004612707565b610e5e565b34801561059d57600080fd5b506102ac6105ac366004612707565b610ed9565b3480156105bd57600080fd5b506102fb6105cc366004612733565b610ee7565b3480156105dd57600080fd5b506102ac6105ec3660046127d4565b60126020526000908152604090205460ff1681565b34801561060d57600080fd5b506102fb61061c3660046127d4565b610fab565b34801561062d57600080fd5b506102cd600d5481565b34801561064357600080fd5b506102cd60085481565b34801561065957600080fd5b50600e5461047a906001600160a01b031681565b34801561067957600080fd5b506102fb610688366004612809565b6111d5565b34801561069957600080fd5b506102cd6106a836600461283c565b611328565b3480156106b957600080fd5b506006546106e89062ffffff8082169163010000008104821691600160301b8204811691600160481b90041684565b6040805162ffffff95861681529385166020850152918416918301919091529091166060820152608001610283565b34801561072357600080fd5b506102fb61073236600461279b565b611353565b34801561074357600080fd5b506102fb61140d565b34801561075857600080fd5b506102fb61076736600461286a565b6114c0565b34801561077857600080fd5b506102ac6107873660046127d4565b60106020526000908152604090205460ff1681565b3480156107a857600080fd5b506102fb6107b7366004612809565b61152d565b3480156107c857600080fd5b506102fb6107d73660046127d4565b611698565b3480156107e857600080fd5b506102cd600c5481565b3480156107fe57600080fd5b506102cd600b5481565b60606003805461081790612886565b80601f016020809104026020016040519081016040528092919081815260200182805461084390612886565b80156108905780601f1061086557610100808354040283529160200191610890565b820191906000526020600020905b81548152906001019060200180831161087357829003601f168201915b5050505050905090565b6000336108a881858561170e565b60019150505b92915050565b6108bc611832565b6127106108c860025490565b6108d291906128d0565b8110156109305760405162461bcd60e51b815260206004820152602160248201527f6d617857616c6c6574203e3d20746f74616c20737570706c79202f20313030306044820152600360fc1b60648201526084015b60405180910390fd5b600c546040805183815260208101929092527fff64d41f60feb77d52f64ae64a9fc3929d57a89d0cc55728762468bae5e0fe52910160405180910390a1600c55565b60003361098085828561188c565b61098b858585611906565b506001949350505050565b61099e611832565b600854156109d95760405162461bcd60e51b8152602060048201526008602482015267456e61626c65642160c01b6044820152606401610927565b426008556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a1565b610a10611832565b6001600160a01b03821660009081526010602052604090205481151560ff909116151503610a6a5760405162461bcd60e51b8152602060048201526007602482015266616c726561647960c81b6044820152606401610927565b6001600160a01b038216600081815260106020908152604091829020805460ff191685151590811790915591519182527f82170bbd72c16b30c410014b7382121a699ed119a182e48a0b6cadcc89104ac991015b60405180910390a25050565b6000336108a8818585610add8383611328565b610ae791906128f2565b61170e565b610af4611832565b6001600160a01b038216610b4a5760405162461bcd60e51b815260206004820152601b60248201527f6d61726b6574696e672077616c6c65742063616e2774206265203000000000006044820152606401610927565b600a54604080518315158152600160a01b830460ff16151560208201526001600160a01b03928316928516917fc8dfdd9b91ac62ee1bd8be3541ea02d8e584461c794c6e49e94ccf21c71ebcca910160405180910390a3600a8054911515600160a01b026001600160a81b03199092166001600160a01b039093169283179190911790556000908152601160209081526040808320805460ff1990811660019081179092556010909352922080549091169091179055565b6001600160a01b031660009081526020819052604090205490565b610c25611832565b610c2f6000611d1e565b565b610c39611832565b60008111610c825760405162461bcd60e51b815260206004820152601660248201527506d696e416d6f756e74546f54616b65466565203e20360541b6044820152606401610927565b600b546040805183815260208101929092527f772a06bc936eb749842080c472181e970cd4f23bd1ab7d0b84a80aec26910434910160405180910390a1600b55565b610ccc611832565b6001600160a01b0381163003610d125760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b6044820152606401610927565b610da0610d276005546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190612905565b6001600160a01b0384169190611d70565b50565b60606004805461081790612886565b610dba611832565b6001600160a01b03821660009081526012602052604090205481151560ff909116151503610e505760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610927565b610e5a8282611dc7565b5050565b60003381610e6c8286611328565b905083811015610ecc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610927565b61098b828686840361170e565b6000336108a8818585611906565b610eef611832565b612710610efb60025490565b610f0591906128d0565b811015610f695760405162461bcd60e51b815260206004820152602c60248201527f6d61785472616e73616374696f6e416d6f756e74203e3d20746f74616c20737560448201526b070706c79202f2031303030360a41b6064820152608401610927565b600d546040805183815260208101929092527f35eec0711af6fbe3039535323be51b57996b6945b0d55862607c7a02e52e4507910160405180910390a1600d55565b610fb3611832565b600e546001600160a01b03828116911614610ff157610fd5308260001961170e565b600e80546001600160a01b0319166001600160a01b0383161790555b600e60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611044573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611068919061291e565b6001600160a01b031663c9c6539630600e60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ee919061291e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561113b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115f919061291e565b600f80546001600160a01b0319166001600160a01b03928316908117909155600e546040805191909316815260208101919091527f751e970af297d4e5267dabcea7b369ad737038498379b46448d190d9e261f3c5910160405180910390a1600f54610da0906001600160a01b03166001611dc7565b6111dd611832565b600654620493e0906111fb90600160301b900462ffffff168461293b565b62ffffff1611156112405760405162461bcd60e51b815260206004820152600f60248201526e73656c6c20666565203c3d2033302560881b6044820152606401610927565b600654620493e09061125e90600160481b900462ffffff168361293b565b62ffffff1611156112a25760405162461bcd60e51b815260206004820152600e60248201526d62757920666565203c3d2033302560901b6044820152606401610927565b6006546040805162ffffff858116825284811660208301528084168284015263010000009093049092166060830152517fdec183740138e3a28dfd6f973ecd3bf00cd5d9b2544f6763c0a87f721444c5d19181900360800190a16006805462ffffff92831663010000000265ffffffffffff199091169290931691909117919091179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61135b611832565b6001600160a01b03821660009081526011602052604090205481151560ff9091161515036113b55760405162461bcd60e51b8152602060048201526007602482015266616c726561647960c81b6044820152606401610927565b6001600160a01b038216600081815260116020908152604091829020805460ff191685151590811790915591519182527f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa99101610abe565b611415611832565b60006114296005546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114611473576040519150601f19603f3d011682016040523d82523d6000602084013e611478565b606091505b5050905080610da05760405162461bcd60e51b815260206004820152601460248201527311985a5b1959081a5b881dda5d1a191c985dd85b60621b6044820152606401610927565b6114c8611832565b600081116115075760405162461bcd60e51b815260206004820152600c60248201526b0696e74657276616c203e20360a41b6044820152606401610927565b6007805462ffffff909316620100000264ffffff00001990931692909217909155600955565b611535611832565b600654620493e09061154c9062ffffff168461293b565b62ffffff1611156115915760405162461bcd60e51b815260206004820152600f60248201526e73656c6c20666565203c3d2033302560881b6044820152606401610927565b600654620493e0906115af906301000000900462ffffff168361293b565b62ffffff1611156115f35760405162461bcd60e51b815260206004820152600e60248201526d62757920666565203c3d2033302560901b6044820152606401610927565b6006546040805162ffffff85811682528481166020830152600160301b8404811682840152600160481b9093049092166060830152517f70748cb9cb3bcb4dfd4fff8f2a6f23f636067b33e0244631f9abd38159c1de859181900360800190a1600680546bffffffffffff0000000000001916600160301b62ffffff948516026bffffff000000000000000000191617600160481b9290931691909102919091179055565b6116a0611832565b6001600160a01b0381166117055760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610927565b610da081611d1e565b6001600160a01b0383166117705760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610927565b6001600160a01b0382166117d15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610927565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610c2f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610927565b60006118988484611328565b9050600019811461190057818110156118f35760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610927565b611900848484840361170e565b50505050565b6001600160a01b03831661192c5760405162461bcd60e51b81526004016109279061295e565b6001600160a01b0382166119525760405162461bcd60e51b8152600401610927906129a3565b600061195d30610c02565b9050600060145460135461197191906128f2565b90506000600b5482101580156119875750828211155b600754909150610100900460ff161580156119b75750600f546000906119b5906001600160a01b0316610c02565b115b80156119c05750805b80156119e457506001600160a01b03851660009081526012602052604090205460ff165b156119f1576119f1611e30565b6007546000908190610100900460ff16158015611a2757506001600160a01b03881660009081526011602052604090205460ff16155b8015611a4c57506001600160a01b03871660009081526011602052604090205460ff16155b15611c0e57600060085411611a915760405162461bcd60e51b815260206004820152600b60248201526a1b9bdd08195b98589b195960aa1b6044820152606401610927565b6001600160a01b03881660009081526012602052604090205460ff1615611b2857600654620f424090611acf906301000000900462ffffff166120c7565b611ade9062ffffff16886129e6565b611ae891906128d0565b600654909250620f424090611b0890600160481b900462ffffff166120c7565b611b179062ffffff16886129e6565b611b2191906128d0565b9050611bb4565b6001600160a01b03871660009081526012602052604090205460ff1615611bb457600654620f424090611b5f9062ffffff166120c7565b611b6e9062ffffff16886129e6565b611b7891906128d0565b600654909250620f424090611b9890600160301b900462ffffff166120c7565b611ba79062ffffff16886129e6565b611bb191906128d0565b90505b6000611bc082846128f2565b90508015611bd357611bd3893083612131565b81611bde84896129fd565b611be891906129fd565b965082601354611bf891906128f2565b601355601454611c099083906128f2565b601455505b611c19888888612131565b600754610100900460ff16611d14576001600160a01b03881660009081526010602052604090205460ff16611c9a57600d54861115611c9a5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2065786365656473207472616e73666572206c696d69740000006044820152606401610927565b6001600160a01b03871660009081526010602052604090205460ff16611d1457600c54611cc688610c02565b1115611d145760405162461bcd60e51b815260206004820152601f60248201527f45524332303a2065786365656473206d61782077616c6c6574206c696d6974006044820152606401610927565b5050505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611dc290849061225b565b505050565b6001600160a01b0382166000818152601260209081526040808320805486151560ff199182168117909255601084529382902080549094168117909355519182527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab9101610abe565b6007805461ff001916610100179055601354600090611e51906002906128d0565b600a549091504790600090600160a01b900460ff1615611f6a57600060145484611e7b91906128f2565b90508015611e8c57611e8c81612330565b6000611e9884476129fd565b905060008260145483611eab91906129e6565b611eb591906128d0565b9050611ec181836129fd565b93508015611f6257600a546040516000916001600160a01b03169083908381818185875af1925050503d8060008114611f16576040519150601f19603f3d011682016040523d82523d6000602084013e611f1b565b606091505b505090508015611f60576040805160008152602081018490527f6f92bce3e91466137aa4d5474fe565c002872fb18ed6af4a856959be0a81277a910160405180910390a15b505b505050611fe8565b8215611f7957611f7983612330565b611f8382476129fd565b60145490915015611fe857600a54601454611fab9130916001600160a01b0390911690611906565b60145460408051918252600060208301527f6f92bce3e91466137aa4d5474fe565c002872fb18ed6af4a856959be0a81277a910160405180910390a15b600083118015611ff85750600081115b15612041576120078382612471565b60408051848152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b60006014819055601381905561205630610c02565b11156120b75760006120706005546001600160a01b031690565b6001600160a01b0316146120a7576120a2306120946005546001600160a01b031690565b61209d30610c02565b611906565b6120b7565b6120b73061dead61209d30610c02565b50506007805461ff001916905550565b600080600954600854426120db91906129fd565b6120e591906128d0565b6007546120fd919062010000900462ffffff16612a10565b90508062ffffff168362ffffff1611156121225761211b8184612a37565b9392505050565b50600092915050565b50919050565b6001600160a01b0383166121575760405162461bcd60e51b81526004016109279061295e565b6001600160a01b03821661217d5760405162461bcd60e51b8152600401610927906129a3565b6001600160a01b038316600090815260208190526040902054818110156121f55760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610927565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611900565b60006122b0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661250b9092919063ffffffff16565b90508051600014806122d15750808060200190518101906122d19190612a53565b611dc25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610927565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061236557612365612a70565b6001600160a01b03928316602091820292909201810191909152600e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156123be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e2919061291e565b816001815181106123f5576123f5612a70565b6001600160a01b039283166020918202929092010152600e5460405163791ac94760e01b815291169063791ac9479061243b908590600090869030904290600401612a86565b600060405180830381600087803b15801561245557600080fd5b505af1158015612469573d6000803e3d6000fd5b505050505050565b600e5460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156124df573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125049190612af7565b5050505050565b606061251a8484600085612522565b949350505050565b6060824710156125835760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610927565b600080866001600160a01b0316858760405161259f9190612b25565b60006040518083038185875af1925050503d80600081146125dc576040519150601f19603f3d011682016040523d82523d6000602084013e6125e1565b606091505b50915091506125f2878383876125fd565b979650505050505050565b6060831561266c578251600003612665576001600160a01b0385163b6126655760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610927565b508161251a565b61251a83838151156126815781518083602001fd5b8060405162461bcd60e51b815260040161092791906126bf565b60005b838110156126b657818101518382015260200161269e565b50506000910152565b60208152600082518060208401526126de81604085016020870161269b565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610da057600080fd5b6000806040838503121561271a57600080fd5b8235612725816126f2565b946020939093013593505050565b60006020828403121561274557600080fd5b5035919050565b60008060006060848603121561276157600080fd5b833561276c816126f2565b9250602084013561277c816126f2565b929592945050506040919091013590565b8015158114610da057600080fd5b600080604083850312156127ae57600080fd5b82356127b9816126f2565b915060208301356127c98161278d565b809150509250929050565b6000602082840312156127e657600080fd5b813561211b816126f2565b803562ffffff8116811461280457600080fd5b919050565b6000806040838503121561281c57600080fd5b612825836127f1565b9150612833602084016127f1565b90509250929050565b6000806040838503121561284f57600080fd5b823561285a816126f2565b915060208301356127c9816126f2565b6000806040838503121561287d57600080fd5b612725836127f1565b600181811c9082168061289a57607f821691505b60208210810361212b57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000826128ed57634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156108ae576108ae6128ba565b60006020828403121561291757600080fd5b5051919050565b60006020828403121561293057600080fd5b815161211b816126f2565b62ffffff818116838216019080821115612957576129576128ba565b5092915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b80820281158282048414176108ae576108ae6128ba565b818103818111156108ae576108ae6128ba565b62ffffff818116838216028082169190828114612a2f57612a2f6128ba565b505092915050565b62ffffff828116828216039080821115612957576129576128ba565b600060208284031215612a6557600080fd5b815161211b8161278d565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612ad65784516001600160a01b031683529383019391830191600101612ab1565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612b0c57600080fd5b8351925060208401519150604084015190509250925092565b60008251612b3781846020870161269b565b919091019291505056fea264697066735822122025d5df4e6f14332c763af794d0e2de7fe72290403287059c9d8680d2d930f7bc64736f6c63430008130033000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000033b2e3c9fd0803ce80000000000000000000000000000001a8081ee82be211970e16ef05b33dbb99683481d0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000493e000000000000000000000000000000000000000000000000000000000000493e000000000000000000000000000000000000000000000000000000000000186a0000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000011536d616c6c20446f67206f6e2042617365000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000524534d4f47000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102555760003560e01c80639a7a23d611610139578063d5bf72b7116100b6578063e2669cf51161007a578063e2669cf51461074c578063e9481eee1461076c578063ec44adc81461079c578063f2fde38b146107bc578063f8b45b05146107dc578063fc59d23d146107f257600080fd5b8063d5bf72b71461066d578063dd62ed3e1461068d578063ddca3f43146106ad578063df8408fe14610717578063e086e5ec1461073757600080fd5b8063b62496f5116100fd578063b62496f5146105d1578063b95d11be14610601578063c8c8ebe414610621578063cda7dd7b14610637578063cf188ad01461064d57600080fd5b80639a7a23d61461053b5780639b3e45b41461055b578063a457c2d714610571578063a9059cbb14610591578063aa498023146105b157600080fd5b80635342acb4116101d257806375f0a8741161019657806375f0a8741461045a57806385af30c51461049257806389476069146104b25780638c40044a146104d25780638da5cb5b1461050857806395d89b411461052657600080fd5b80635342acb4146103b457806357e62b98146103e457806370a0823114610405578063715018a61461042557806373b9e82c1461043a57600080fd5b8063293230b811610219578063293230b81461031d5780632ae2f12114610332578063313ce5671461035257806339509351146103745780634707c5511461039457600080fd5b806306fdde0314610261578063095ea7b31461028c57806318160ddd146102bc5780631c499ab0146102db57806323b872dd146102fd57600080fd5b3661025c57005b600080fd5b34801561026d57600080fd5b50610276610808565b60405161028391906126bf565b60405180910390f35b34801561029857600080fd5b506102ac6102a7366004612707565b61089a565b6040519015158152602001610283565b3480156102c857600080fd5b506002545b604051908152602001610283565b3480156102e757600080fd5b506102fb6102f6366004612733565b6108b4565b005b34801561030957600080fd5b506102ac61031836600461274c565b610972565b34801561032957600080fd5b506102fb610996565b34801561033e57600080fd5b506102fb61034d36600461279b565b610a08565b34801561035e57600080fd5b5060075460405160ff9091168152602001610283565b34801561038057600080fd5b506102ac61038f366004612707565b610aca565b3480156103a057600080fd5b506102fb6103af36600461279b565b610aec565b3480156103c057600080fd5b506102ac6103cf3660046127d4565b60116020526000908152604090205460ff1681565b3480156103f057600080fd5b50600a546102ac90600160a01b900460ff1681565b34801561041157600080fd5b506102cd6104203660046127d4565b610c02565b34801561043157600080fd5b506102fb610c1d565b34801561044657600080fd5b506102fb610455366004612733565b610c31565b34801561046657600080fd5b50600a5461047a906001600160a01b031681565b6040516001600160a01b039091168152602001610283565b34801561049e57600080fd5b50600f5461047a906001600160a01b031681565b3480156104be57600080fd5b506102fb6104cd3660046127d4565b610cc4565b3480156104de57600080fd5b506007546104f49062010000900462ffffff1681565b60405162ffffff9091168152602001610283565b34801561051457600080fd5b506005546001600160a01b031661047a565b34801561053257600080fd5b50610276610da3565b34801561054757600080fd5b506102fb61055636600461279b565b610db2565b34801561056757600080fd5b506102cd60095481565b34801561057d57600080fd5b506102ac61058c366004612707565b610e5e565b34801561059d57600080fd5b506102ac6105ac366004612707565b610ed9565b3480156105bd57600080fd5b506102fb6105cc366004612733565b610ee7565b3480156105dd57600080fd5b506102ac6105ec3660046127d4565b60126020526000908152604090205460ff1681565b34801561060d57600080fd5b506102fb61061c3660046127d4565b610fab565b34801561062d57600080fd5b506102cd600d5481565b34801561064357600080fd5b506102cd60085481565b34801561065957600080fd5b50600e5461047a906001600160a01b031681565b34801561067957600080fd5b506102fb610688366004612809565b6111d5565b34801561069957600080fd5b506102cd6106a836600461283c565b611328565b3480156106b957600080fd5b506006546106e89062ffffff8082169163010000008104821691600160301b8204811691600160481b90041684565b6040805162ffffff95861681529385166020850152918416918301919091529091166060820152608001610283565b34801561072357600080fd5b506102fb61073236600461279b565b611353565b34801561074357600080fd5b506102fb61140d565b34801561075857600080fd5b506102fb61076736600461286a565b6114c0565b34801561077857600080fd5b506102ac6107873660046127d4565b60106020526000908152604090205460ff1681565b3480156107a857600080fd5b506102fb6107b7366004612809565b61152d565b3480156107c857600080fd5b506102fb6107d73660046127d4565b611698565b3480156107e857600080fd5b506102cd600c5481565b3480156107fe57600080fd5b506102cd600b5481565b60606003805461081790612886565b80601f016020809104026020016040519081016040528092919081815260200182805461084390612886565b80156108905780601f1061086557610100808354040283529160200191610890565b820191906000526020600020905b81548152906001019060200180831161087357829003601f168201915b5050505050905090565b6000336108a881858561170e565b60019150505b92915050565b6108bc611832565b6127106108c860025490565b6108d291906128d0565b8110156109305760405162461bcd60e51b815260206004820152602160248201527f6d617857616c6c6574203e3d20746f74616c20737570706c79202f20313030306044820152600360fc1b60648201526084015b60405180910390fd5b600c546040805183815260208101929092527fff64d41f60feb77d52f64ae64a9fc3929d57a89d0cc55728762468bae5e0fe52910160405180910390a1600c55565b60003361098085828561188c565b61098b858585611906565b506001949350505050565b61099e611832565b600854156109d95760405162461bcd60e51b8152602060048201526008602482015267456e61626c65642160c01b6044820152606401610927565b426008556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a1565b610a10611832565b6001600160a01b03821660009081526010602052604090205481151560ff909116151503610a6a5760405162461bcd60e51b8152602060048201526007602482015266616c726561647960c81b6044820152606401610927565b6001600160a01b038216600081815260106020908152604091829020805460ff191685151590811790915591519182527f82170bbd72c16b30c410014b7382121a699ed119a182e48a0b6cadcc89104ac991015b60405180910390a25050565b6000336108a8818585610add8383611328565b610ae791906128f2565b61170e565b610af4611832565b6001600160a01b038216610b4a5760405162461bcd60e51b815260206004820152601b60248201527f6d61726b6574696e672077616c6c65742063616e2774206265203000000000006044820152606401610927565b600a54604080518315158152600160a01b830460ff16151560208201526001600160a01b03928316928516917fc8dfdd9b91ac62ee1bd8be3541ea02d8e584461c794c6e49e94ccf21c71ebcca910160405180910390a3600a8054911515600160a01b026001600160a81b03199092166001600160a01b039093169283179190911790556000908152601160209081526040808320805460ff1990811660019081179092556010909352922080549091169091179055565b6001600160a01b031660009081526020819052604090205490565b610c25611832565b610c2f6000611d1e565b565b610c39611832565b60008111610c825760405162461bcd60e51b815260206004820152601660248201527506d696e416d6f756e74546f54616b65466565203e20360541b6044820152606401610927565b600b546040805183815260208101929092527f772a06bc936eb749842080c472181e970cd4f23bd1ab7d0b84a80aec26910434910160405180910390a1600b55565b610ccc611832565b6001600160a01b0381163003610d125760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b6044820152606401610927565b610da0610d276005546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190612905565b6001600160a01b0384169190611d70565b50565b60606004805461081790612886565b610dba611832565b6001600160a01b03821660009081526012602052604090205481151560ff909116151503610e505760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610927565b610e5a8282611dc7565b5050565b60003381610e6c8286611328565b905083811015610ecc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610927565b61098b828686840361170e565b6000336108a8818585611906565b610eef611832565b612710610efb60025490565b610f0591906128d0565b811015610f695760405162461bcd60e51b815260206004820152602c60248201527f6d61785472616e73616374696f6e416d6f756e74203e3d20746f74616c20737560448201526b070706c79202f2031303030360a41b6064820152608401610927565b600d546040805183815260208101929092527f35eec0711af6fbe3039535323be51b57996b6945b0d55862607c7a02e52e4507910160405180910390a1600d55565b610fb3611832565b600e546001600160a01b03828116911614610ff157610fd5308260001961170e565b600e80546001600160a01b0319166001600160a01b0383161790555b600e60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611044573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611068919061291e565b6001600160a01b031663c9c6539630600e60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ee919061291e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561113b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115f919061291e565b600f80546001600160a01b0319166001600160a01b03928316908117909155600e546040805191909316815260208101919091527f751e970af297d4e5267dabcea7b369ad737038498379b46448d190d9e261f3c5910160405180910390a1600f54610da0906001600160a01b03166001611dc7565b6111dd611832565b600654620493e0906111fb90600160301b900462ffffff168461293b565b62ffffff1611156112405760405162461bcd60e51b815260206004820152600f60248201526e73656c6c20666565203c3d2033302560881b6044820152606401610927565b600654620493e09061125e90600160481b900462ffffff168361293b565b62ffffff1611156112a25760405162461bcd60e51b815260206004820152600e60248201526d62757920666565203c3d2033302560901b6044820152606401610927565b6006546040805162ffffff858116825284811660208301528084168284015263010000009093049092166060830152517fdec183740138e3a28dfd6f973ecd3bf00cd5d9b2544f6763c0a87f721444c5d19181900360800190a16006805462ffffff92831663010000000265ffffffffffff199091169290931691909117919091179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61135b611832565b6001600160a01b03821660009081526011602052604090205481151560ff9091161515036113b55760405162461bcd60e51b8152602060048201526007602482015266616c726561647960c81b6044820152606401610927565b6001600160a01b038216600081815260116020908152604091829020805460ff191685151590811790915591519182527f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa99101610abe565b611415611832565b60006114296005546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114611473576040519150601f19603f3d011682016040523d82523d6000602084013e611478565b606091505b5050905080610da05760405162461bcd60e51b815260206004820152601460248201527311985a5b1959081a5b881dda5d1a191c985dd85b60621b6044820152606401610927565b6114c8611832565b600081116115075760405162461bcd60e51b815260206004820152600c60248201526b0696e74657276616c203e20360a41b6044820152606401610927565b6007805462ffffff909316620100000264ffffff00001990931692909217909155600955565b611535611832565b600654620493e09061154c9062ffffff168461293b565b62ffffff1611156115915760405162461bcd60e51b815260206004820152600f60248201526e73656c6c20666565203c3d2033302560881b6044820152606401610927565b600654620493e0906115af906301000000900462ffffff168361293b565b62ffffff1611156115f35760405162461bcd60e51b815260206004820152600e60248201526d62757920666565203c3d2033302560901b6044820152606401610927565b6006546040805162ffffff85811682528481166020830152600160301b8404811682840152600160481b9093049092166060830152517f70748cb9cb3bcb4dfd4fff8f2a6f23f636067b33e0244631f9abd38159c1de859181900360800190a1600680546bffffffffffff0000000000001916600160301b62ffffff948516026bffffff000000000000000000191617600160481b9290931691909102919091179055565b6116a0611832565b6001600160a01b0381166117055760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610927565b610da081611d1e565b6001600160a01b0383166117705760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610927565b6001600160a01b0382166117d15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610927565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610c2f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610927565b60006118988484611328565b9050600019811461190057818110156118f35760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610927565b611900848484840361170e565b50505050565b6001600160a01b03831661192c5760405162461bcd60e51b81526004016109279061295e565b6001600160a01b0382166119525760405162461bcd60e51b8152600401610927906129a3565b600061195d30610c02565b9050600060145460135461197191906128f2565b90506000600b5482101580156119875750828211155b600754909150610100900460ff161580156119b75750600f546000906119b5906001600160a01b0316610c02565b115b80156119c05750805b80156119e457506001600160a01b03851660009081526012602052604090205460ff165b156119f1576119f1611e30565b6007546000908190610100900460ff16158015611a2757506001600160a01b03881660009081526011602052604090205460ff16155b8015611a4c57506001600160a01b03871660009081526011602052604090205460ff16155b15611c0e57600060085411611a915760405162461bcd60e51b815260206004820152600b60248201526a1b9bdd08195b98589b195960aa1b6044820152606401610927565b6001600160a01b03881660009081526012602052604090205460ff1615611b2857600654620f424090611acf906301000000900462ffffff166120c7565b611ade9062ffffff16886129e6565b611ae891906128d0565b600654909250620f424090611b0890600160481b900462ffffff166120c7565b611b179062ffffff16886129e6565b611b2191906128d0565b9050611bb4565b6001600160a01b03871660009081526012602052604090205460ff1615611bb457600654620f424090611b5f9062ffffff166120c7565b611b6e9062ffffff16886129e6565b611b7891906128d0565b600654909250620f424090611b9890600160301b900462ffffff166120c7565b611ba79062ffffff16886129e6565b611bb191906128d0565b90505b6000611bc082846128f2565b90508015611bd357611bd3893083612131565b81611bde84896129fd565b611be891906129fd565b965082601354611bf891906128f2565b601355601454611c099083906128f2565b601455505b611c19888888612131565b600754610100900460ff16611d14576001600160a01b03881660009081526010602052604090205460ff16611c9a57600d54861115611c9a5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2065786365656473207472616e73666572206c696d69740000006044820152606401610927565b6001600160a01b03871660009081526010602052604090205460ff16611d1457600c54611cc688610c02565b1115611d145760405162461bcd60e51b815260206004820152601f60248201527f45524332303a2065786365656473206d61782077616c6c6574206c696d6974006044820152606401610927565b5050505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611dc290849061225b565b505050565b6001600160a01b0382166000818152601260209081526040808320805486151560ff199182168117909255601084529382902080549094168117909355519182527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab9101610abe565b6007805461ff001916610100179055601354600090611e51906002906128d0565b600a549091504790600090600160a01b900460ff1615611f6a57600060145484611e7b91906128f2565b90508015611e8c57611e8c81612330565b6000611e9884476129fd565b905060008260145483611eab91906129e6565b611eb591906128d0565b9050611ec181836129fd565b93508015611f6257600a546040516000916001600160a01b03169083908381818185875af1925050503d8060008114611f16576040519150601f19603f3d011682016040523d82523d6000602084013e611f1b565b606091505b505090508015611f60576040805160008152602081018490527f6f92bce3e91466137aa4d5474fe565c002872fb18ed6af4a856959be0a81277a910160405180910390a15b505b505050611fe8565b8215611f7957611f7983612330565b611f8382476129fd565b60145490915015611fe857600a54601454611fab9130916001600160a01b0390911690611906565b60145460408051918252600060208301527f6f92bce3e91466137aa4d5474fe565c002872fb18ed6af4a856959be0a81277a910160405180910390a15b600083118015611ff85750600081115b15612041576120078382612471565b60408051848152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b60006014819055601381905561205630610c02565b11156120b75760006120706005546001600160a01b031690565b6001600160a01b0316146120a7576120a2306120946005546001600160a01b031690565b61209d30610c02565b611906565b6120b7565b6120b73061dead61209d30610c02565b50506007805461ff001916905550565b600080600954600854426120db91906129fd565b6120e591906128d0565b6007546120fd919062010000900462ffffff16612a10565b90508062ffffff168362ffffff1611156121225761211b8184612a37565b9392505050565b50600092915050565b50919050565b6001600160a01b0383166121575760405162461bcd60e51b81526004016109279061295e565b6001600160a01b03821661217d5760405162461bcd60e51b8152600401610927906129a3565b6001600160a01b038316600090815260208190526040902054818110156121f55760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610927565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611900565b60006122b0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661250b9092919063ffffffff16565b90508051600014806122d15750808060200190518101906122d19190612a53565b611dc25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610927565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061236557612365612a70565b6001600160a01b03928316602091820292909201810191909152600e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156123be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e2919061291e565b816001815181106123f5576123f5612a70565b6001600160a01b039283166020918202929092010152600e5460405163791ac94760e01b815291169063791ac9479061243b908590600090869030904290600401612a86565b600060405180830381600087803b15801561245557600080fd5b505af1158015612469573d6000803e3d6000fd5b505050505050565b600e5460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156124df573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125049190612af7565b5050505050565b606061251a8484600085612522565b949350505050565b6060824710156125835760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610927565b600080866001600160a01b0316858760405161259f9190612b25565b60006040518083038185875af1925050503d80600081146125dc576040519150601f19603f3d011682016040523d82523d6000602084013e6125e1565b606091505b50915091506125f2878383876125fd565b979650505050505050565b6060831561266c578251600003612665576001600160a01b0385163b6126655760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610927565b508161251a565b61251a83838151156126815781518083602001fd5b8060405162461bcd60e51b815260040161092791906126bf565b60005b838110156126b657818101518382015260200161269e565b50506000910152565b60208152600082518060208401526126de81604085016020870161269b565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610da057600080fd5b6000806040838503121561271a57600080fd5b8235612725816126f2565b946020939093013593505050565b60006020828403121561274557600080fd5b5035919050565b60008060006060848603121561276157600080fd5b833561276c816126f2565b9250602084013561277c816126f2565b929592945050506040919091013590565b8015158114610da057600080fd5b600080604083850312156127ae57600080fd5b82356127b9816126f2565b915060208301356127c98161278d565b809150509250929050565b6000602082840312156127e657600080fd5b813561211b816126f2565b803562ffffff8116811461280457600080fd5b919050565b6000806040838503121561281c57600080fd5b612825836127f1565b9150612833602084016127f1565b90509250929050565b6000806040838503121561284f57600080fd5b823561285a816126f2565b915060208301356127c9816126f2565b6000806040838503121561287d57600080fd5b612725836127f1565b600181811c9082168061289a57607f821691505b60208210810361212b57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000826128ed57634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156108ae576108ae6128ba565b60006020828403121561291757600080fd5b5051919050565b60006020828403121561293057600080fd5b815161211b816126f2565b62ffffff818116838216019080821115612957576129576128ba565b5092915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b80820281158282048414176108ae576108ae6128ba565b818103818111156108ae576108ae6128ba565b62ffffff818116838216028082169190828114612a2f57612a2f6128ba565b505092915050565b62ffffff828116828216039080821115612957576129576128ba565b600060208284031215612a6557600080fd5b815161211b8161278d565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612ad65784516001600160a01b031683529383019391830191600101612ab1565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612b0c57600080fd5b8351925060208401519150604084015190509250925092565b60008251612b3781846020870161269b565b919091019291505056fea264697066735822122025d5df4e6f14332c763af794d0e2de7fe72290403287059c9d8680d2d930f7bc64736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000033b2e3c9fd0803ce80000000000000000000000000000001a8081ee82be211970e16ef05b33dbb99683481d0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000493e000000000000000000000000000000000000000000000000000000000000493e000000000000000000000000000000000000000000000000000000000000186a0000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000011536d616c6c20446f67206f6e2042617365000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000524534d4f47000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Small Dog on Base
Arg [1] : _symbol (string): $SMOG
Arg [2] : __decimals (uint8): 18
Arg [3] : _totalSupply (uint256): 1000000000000000000000000000
Arg [4] : _marketingWallet (address): 0x1a8081eE82BE211970E16EF05B33Dbb99683481d
Arg [5] : _mainRouter (address): 0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24
Arg [6] : _fee (tuple):
Arg [1] : sellLiquidityFee (uint24): 0
Arg [2] : buyLiquidityFee (uint24): 0
Arg [3] : sellMarketingFee (uint24): 300000
Arg [4] : buyMarketingFee (uint24): 300000
Arg [7] : _feeDecrements (uint24): 100000
Arg [8] : _decrementInterval (uint256): 60
-----Encoded View---------------
16 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [1] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000
Arg [4] : 0000000000000000000000001a8081ee82be211970e16ef05b33dbb99683481d
Arg [5] : 0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad24
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [8] : 00000000000000000000000000000000000000000000000000000000000493e0
Arg [9] : 00000000000000000000000000000000000000000000000000000000000493e0
Arg [10] : 00000000000000000000000000000000000000000000000000000000000186a0
Arg [11] : 000000000000000000000000000000000000000000000000000000000000003c
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000011
Arg [13] : 536d616c6c20446f67206f6e2042617365000000000000000000000000000000
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [15] : 24534d4f47000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
35902:16929:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6027:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6945:201;;;;;;;;;;-1:-1:-1;6945:201:0;;;;;:::i;:::-;;:::i;:::-;;;1291:14:1;;1284:22;1266:41;;1254:2;1239:18;6945:201:0;1126:187:1;6342:108:0;;;;;;;;;;-1:-1:-1;6430:12:0;;6342:108;;;1464:25:1;;;1452:2;1437:18;6342:108:0;1318:177:1;43085:249:0;;;;;;;;;;-1:-1:-1;43085:249:0;;;;;:::i;:::-;;:::i;:::-;;7152:261;;;;;;;;;;-1:-1:-1;7152:261:0;;;;;:::i;:::-;;:::i;42034:195::-;;;;;;;;;;;;;:::i;46103:323::-;;;;;;;;;;-1:-1:-1;46103:323:0;;;;;:::i;:::-;;:::i;41391:92::-;;;;;;;;;;-1:-1:-1;41466:9:0;;41391:92;;41466:9;;;;2798:36:1;;2786:2;2771:18;41391:92:0;2656:184:1;7419:238:0;;;;;;;;;;-1:-1:-1;7419:238:0;;;;;:::i;:::-;;:::i;44351:586::-;;;;;;;;;;-1:-1:-1;44351:586:0;;;;;:::i;:::-;;:::i;36826:49::-;;;;;;;;;;-1:-1:-1;36826:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;36528:35;;;;;;;;;;-1:-1:-1;36528:35:0;;;;-1:-1:-1;;;36528:35:0;;;;;;6456:127;;;;;;;;;;-1:-1:-1;6456:127:0;;;;;:::i;:::-;;:::i;11661:103::-;;;;;;;;;;;;;:::i;44945:319::-;;;;;;;;;;-1:-1:-1;44945:319:0;;;;;:::i;:::-;;:::i;36491:30::-;;;;;;;;;;-1:-1:-1;36491:30:0;;;;-1:-1:-1;;;;;36491:30:0;;;;;;-1:-1:-1;;;;;3261:32:1;;;3243:51;;3231:2;3216:18;36491:30:0;3097:203:1;36719:23:0;;;;;;;;;;-1:-1:-1;36719:23:0;;;;-1:-1:-1;;;;;36719:23:0;;;52586:207;;;;;;;;;;-1:-1:-1;52586:207:0;;;;;:::i;:::-;;:::i;36371:27::-;;;;;;;;;;-1:-1:-1;36371:27:0;;;;;;;;;;;;;;3479:8:1;3467:21;;;3449:40;;3437:2;3422:18;36371:27:0;3305:190:1;11430:87:0;;;;;;;;;;-1:-1:-1;11503:6:0;;-1:-1:-1;;;;;11503:6:0;11430:87;;6133:104;;;;;;;;;;;;;:::i;45272:320::-;;;;;;;;;;-1:-1:-1;45272:320:0;;;;;:::i;:::-;;:::i;36450:32::-;;;;;;;;;;;;;;;;7663:436;;;;;;;;;;-1:-1:-1;7663:436:0;;;;;:::i;:::-;;:::i;6589:193::-;;;;;;;;;;-1:-1:-1;6589:193:0;;;;;:::i;:::-;;:::i;43342:371::-;;;;;;;;;;-1:-1:-1;43342:371:0;;;;;:::i;:::-;;:::i;36882:57::-;;;;;;;;;;-1:-1:-1;36882:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;41491:535;;;;;;;;;;-1:-1:-1;41491:535:0;;;;;:::i;:::-;;:::i;36643:35::-;;;;;;;;;;;;;;;;36405:38;;;;;;;;;;;;;;;;36687:25;;;;;;;;;;-1:-1:-1;36687:25:0;;;;-1:-1:-1;;;;;36687:25:0;;;42446:631;;;;;;;;;;-1:-1:-1;42446:631:0;;;;;:::i;:::-;;:::i;6788:151::-;;;;;;;;;;-1:-1:-1;6788:151:0;;;;;:::i;:::-;;:::i;36144:14::-;;;;;;;;;;-1:-1:-1;36144:14:0;;;;;;;;;;;;;;;-1:-1:-1;;;36144:14:0;;;;;-1:-1:-1;;;36144:14:0;;;;;;;;;4553:8:1;4588:15;;;4570:34;;4640:15;;;4635:2;4620:18;;4613:43;4692:15;;;4672:18;;;4665:43;;;;4744:15;;;4739:2;4724:18;;4717:43;4530:3;4515:19;36144:14:0;4320:446:1;45861:234:0;;;;;;;;;;-1:-1:-1;45861:234:0;;;;;:::i;:::-;;:::i;52396:184::-;;;;;;;;;;;;;:::i;41133:252::-;;;;;;;;;;-1:-1:-1;41133:252:0;;;;;:::i;:::-;;:::i;36753:66::-;;;;;;;;;;-1:-1:-1;36753:66:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;43721:622;;;;;;;;;;-1:-1:-1;43721:622:0;;;;;:::i;:::-;;:::i;11770:201::-;;;;;;;;;;-1:-1:-1;11770:201:0;;;;;:::i;:::-;;:::i;36612:24::-;;;;;;;;;;;;;;;;36572:33;;;;;;;;;;;;;;;;6027:100;6081:13;6114:5;6107:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6027:100;:::o;6945:201::-;7028:4;5491:10;7084:32;5491:10;7100:7;7109:6;7084:8;:32::i;:::-;7134:4;7127:11;;;6945:201;;;;;:::o;43085:249::-;11391:13;:11;:13::i;:::-;43196:5:::1;43180:13;6430:12:::0;;;6342:108;43180:13:::1;:21;;;;:::i;:::-;43168:10;:33;;43160:79;;;::::0;-1:-1:-1;;;43160:79:0;;5969:2:1;43160:79:0::1;::::0;::::1;5951:21:1::0;6008:2;5988:18;;;5981:30;6047:34;6027:18;;;6020:62;-1:-1:-1;;;6098:18:1;;;6091:31;6139:19;;43160:79:0::1;;;;;;;;;43283:9;::::0;43255:38:::1;::::0;;6343:25:1;;;6399:2;6384:18;;6377:34;;;;43255:38:0::1;::::0;6316:18:1;43255:38:0::1;;;;;;;43304:9;:22:::0;43085:249::o;7152:261::-;7249:4;5491:10;7307:38;7323:4;5491:10;7338:6;7307:15;:38::i;:::-;7356:27;7366:4;7372:2;7376:6;7356:9;:27::i;:::-;-1:-1:-1;7401:4:0;;7152:261;-1:-1:-1;;;;7152:261:0:o;42034:195::-;11391:13;:11;:13::i;:::-;42096:23:::1;::::0;:28;42088:49:::1;;;::::0;-1:-1:-1;;;42088:49:0;;6624:2:1;42088:49:0::1;::::0;::::1;6606:21:1::0;6663:1;6643:18;;;6636:29;-1:-1:-1;;;6681:18:1;;;6674:38;6729:18;;42088:49:0::1;6422:331:1::0;42088:49:0::1;42174:15;42148:23;:41:::0;42205:16:::1;::::0;::::1;::::0;;;::::1;42034:195::o:0;46103:323::-;11391:13;:11;:13::i;:::-;-1:-1:-1;;;;;46233:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:49;::::1;;:43;::::0;;::::1;:49;;::::0;46225:69:::1;;;::::0;-1:-1:-1;;;46225:69:0;;6960:2:1;46225:69:0::1;::::0;::::1;6942:21:1::0;6999:1;6979:18;;;6972:29;-1:-1:-1;;;7017:18:1;;;7010:37;7064:18;;46225:69:0::1;6758:330:1::0;46225:69:0::1;-1:-1:-1::0;;;;;46305:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:50;;-1:-1:-1;;46305:50:0::1;::::0;::::1;;::::0;;::::1;::::0;;;46371:47;;1266:41:1;;;46371:47:0::1;::::0;1239:18:1;46371:47:0::1;;;;;;;;46103:323:::0;;:::o;7419:238::-;7507:4;5491:10;7563:64;5491:10;7579:7;7616:10;7588:25;5491:10;7579:7;7588:9;:25::i;:::-;:38;;;;:::i;:::-;7563:8;:64::i;44351:586::-;11391:13;:11;:13::i;:::-;-1:-1:-1;;;;;44502:30:0;::::1;44494:70;;;::::0;-1:-1:-1;;;44494:70:0;;7425:2:1;44494:70:0::1;::::0;::::1;7407:21:1::0;7464:2;7444:18;;;7437:30;7503:29;7483:18;;;7476:57;7550:18;;44494:70:0::1;7223:351:1::0;44494:70:0::1;44659:15;::::0;44580:120:::1;::::0;;7766:14:1;;7759:22;7741:41;;-1:-1:-1;;;44676:23:0;::::1;;;7825:14:1::0;7818:22;7813:2;7798:18;;7791:50;-1:-1:-1;;;;;44659:15:0;;::::1;::::0;44580:120;::::1;::::0;::::1;::::0;7714:18:1;44580:120:0::1;;;;;;;44711:15;:34:::0;;44756:50;::::1;;-1:-1:-1::0;;;44756:50:0::1;-1:-1:-1::0;;;;;;44756:50:0;;;-1:-1:-1;;;;;44711:34:0;;::::1;44756:50:::0;;;;;;::::1;::::0;;44711:15:::1;44817:35:::0;;;:17:::1;:35;::::0;;;;;;;:42;;-1:-1:-1;;44817:42:0;;::::1;44711:34:::0;44817:42;;::::1;::::0;;;44870:34:::1;:52:::0;;;;;:59;;;;::::1;::::0;;::::1;::::0;;44351:586::o;6456:127::-;-1:-1:-1;;;;;6557:18:0;6530:7;6557:18;;;;;;;;;;;;6456:127::o;11661:103::-;11391:13;:11;:13::i;:::-;11726:30:::1;11753:1;11726:18;:30::i;:::-;11661:103::o:0;44945:319::-;11391:13;:11;:13::i;:::-;45091:1:::1;45069:19;:23;45061:58;;;::::0;-1:-1:-1;;;45061:58:0;;8054:2:1;45061:58:0::1;::::0;::::1;8036:21:1::0;8093:2;8073:18;;;8066:30;-1:-1:-1;;;8112:18:1;;;8105:52;8174:18;;45061:58:0::1;7852:346:1::0;45061:58:0::1;45181:18;::::0;45135:65:::1;::::0;;6343:25:1;;;6399:2;6384:18;;6377:34;;;;45135:65:0::1;::::0;6316:18:1;45135:65:0::1;;;;;;;45211:18;:40:::0;44945:319::o;52586:207::-;11391:13;:11;:13::i;:::-;-1:-1:-1;;;;;52661:22:0;::::1;52669:4;52661:22:::0;52653:46:::1;;;::::0;-1:-1:-1;;;52653:46:0;;8405:2:1;52653:46:0::1;::::0;::::1;8387:21:1::0;8444:2;8424:18;;;8417:30;-1:-1:-1;;;8463:18:1;;;8456:41;8514:18;;52653:46:0::1;8203:335:1::0;52653:46:0::1;52710:75;52737:7;11503:6:::0;;-1:-1:-1;;;;;11503:6:0;;11430:87;52737:7:::1;52746:38;::::0;-1:-1:-1;;;52746:38:0;;52778:4:::1;52746:38;::::0;::::1;3243:51:1::0;-1:-1:-1;;;;;52746:23:0;::::1;::::0;::::1;::::0;3216:18:1;;52746:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;52710:26:0;::::1;::::0;:75;:26:::1;:75::i;:::-;52586:207:::0;:::o;6133:104::-;6189:13;6222:7;6215:14;;;;;:::i;45272:320::-;11391:13;:11;:13::i;:::-;-1:-1:-1;;;;;45408:31:0;::::1;;::::0;;;:25:::1;:31;::::0;;;;;:40;::::1;;:31;::::0;;::::1;:40;;::::0;45386:146:::1;;;::::0;-1:-1:-1;;;45386:146:0;;8934:2:1;45386:146:0::1;::::0;::::1;8916:21:1::0;8973:2;8953:18;;;8946:30;9012:34;8992:18;;;8985:62;9083:26;9063:18;;;9056:54;9127:19;;45386:146:0::1;8732:420:1::0;45386:146:0::1;45543:41;45572:4;45578:5;45543:28;:41::i;:::-;45272:320:::0;;:::o;7663:436::-;7756:4;5491:10;7756:4;7839:25;5491:10;7856:7;7839:9;:25::i;:::-;7812:52;;7903:15;7883:16;:35;;7875:85;;;;-1:-1:-1;;;7875:85:0;;9359:2:1;7875:85:0;;;9341:21:1;9398:2;9378:18;;;9371:30;9437:34;9417:18;;;9410:62;-1:-1:-1;;;9488:18:1;;;9481:35;9533:19;;7875:85:0;9157:401:1;7875:85:0;7996:60;8005:5;8012:7;8040:15;8021:16;:34;7996:8;:60::i;6589:193::-;6668:4;5491:10;6724:28;5491:10;6741:2;6745:6;6724:9;:28::i;43342:371::-;11391:13;:11;:13::i;:::-;43509:5:::1;43493:13;6430:12:::0;;;6342:108;43493:13:::1;:21;;;;:::i;:::-;43470;:44;;43462:101;;;::::0;-1:-1:-1;;;43462:101:0;;9765:2:1;43462:101:0::1;::::0;::::1;9747:21:1::0;9804:2;9784:18;;;9777:30;9843:34;9823:18;;;9816:62;-1:-1:-1;;;9894:18:1;;;9887:42;9946:19;;43462:101:0::1;9563:408:1::0;43462:101:0::1;43629:20;::::0;43579:71:::1;::::0;;6343:25:1;;;6399:2;6384:18;;6377:34;;;;43579:71:0::1;::::0;6316:18:1;43579:71:0::1;;;;;;;43661:20;:44:::0;43342:371::o;41491:535::-;11391:13;:11;:13::i;:::-;41585:10:::1;::::0;-1:-1:-1;;;;;41585:25:0;;::::1;:10:::0;::::1;:25;41582:136;;41626:41;41643:4;41650:11:::0;-1:-1:-1;;41626:8:0::1;:41::i;:::-;41682:10;:24:::0;;-1:-1:-1;;;;;;41682:24:0::1;-1:-1:-1::0;;;;;41682:24:0;::::1;;::::0;;41582:136:::1;41777:10;;;;;;;;;-1:-1:-1::0;;;;;41777:10:0::1;-1:-1:-1::0;;;;;41758:38:0::1;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;41740:70:0::1;;41833:4;41872:10;;;;;;;;;-1:-1:-1::0;;;;;41872:10:0::1;-1:-1:-1::0;;;;;41853:35:0::1;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41740:161;::::0;-1:-1:-1;;;;;;41740:161:0::1;::::0;;;;;;-1:-1:-1;;;;;10462:15:1;;;41740:161:0::1;::::0;::::1;10444:34:1::0;10514:15;;10494:18;;;10487:43;10379:18;;41740:161:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41729:8;:172:::0;;-1:-1:-1;;;;;;41729:172:0::1;-1:-1:-1::0;;;;;41729:172:0;;::::1;::::0;;::::1;::::0;;;41942:10:::1;::::0;41924:39:::1;::::0;;41942:10;;;::::1;10444:34:1::0;;10509:2;10494:18;;10487:43;;;;41924:39:0::1;::::0;10379:18:1;41924:39:0::1;;;;;;;42003:8;::::0;41974:44:::1;::::0;-1:-1:-1;;;;;42003:8:0::1;::::0;41974:28:::1;:44::i;42446:631::-:0;11391:13;:11;:13::i;:::-;42622:3:::1;:20:::0;42646:6:::1;::::0;42602:40:::1;::::0;-1:-1:-1;;;42622:20:0;::::1;;;42602:17:::0;:40:::1;:::i;:::-;:50;;;;42580:115;;;::::0;-1:-1:-1;;;42580:115:0;;10918:2:1;42580:115:0::1;::::0;::::1;10900:21:1::0;10957:2;10937:18;;;10930:30;-1:-1:-1;;;10976:18:1;;;10969:45;11031:18;;42580:115:0::1;10716:339:1::0;42580:115:0::1;42733:3;:19:::0;42756:6:::1;::::0;42714:38:::1;::::0;-1:-1:-1;;;42733:19:0;::::1;;;42714:16:::0;:38:::1;:::i;:::-;:48;;;;42706:75;;;::::0;-1:-1:-1;;;42706:75:0;;11262:2:1;42706:75:0::1;::::0;::::1;11244:21:1::0;11301:2;11281:18;;;11274:30;-1:-1:-1;;;11320:18:1;;;11313:44;11374:18;;42706:75:0::1;11060:338:1::0;42706:75:0::1;42893:3;:20:::0;42797:161:::1;::::0;;42893:20:::1;4588:15:1::0;;;4570:34;;4640:15;;;4635:2;4620:18;;4613:43;42893:20:0;;::::1;4672:18:1::0;;;4665:43;42928:19:0;;;::::1;::::0;;::::1;4739:2:1::0;4724:18;;4717:43;42797:161:0;::::1;::::0;;;;4530:3:1;42797:161:0;;::::1;42969:3;:40:::0;;::::1;43020:38:::0;;::::1;::::0;::::1;-1:-1:-1::0;;43020:38:0;;;42969:40;;;::::1;43020:38:::0;;;;;;;::::1;::::0;;42446:631::o;6788:151::-;-1:-1:-1;;;;;6904:18:0;;;6877:7;6904:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6788:151::o;45861:234::-;11391:13;:11;:13::i;:::-;-1:-1:-1;;;;;45951:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;:34;::::1;;:26;::::0;;::::1;:34;;::::0;45943:54:::1;;;::::0;-1:-1:-1;;;45943:54:0;;6960:2:1;45943:54:0::1;::::0;::::1;6942:21:1::0;6999:1;6979:18;;;6972:29;-1:-1:-1;;;7017:18:1;;;7010:37;7064:18;;45943:54:0::1;6758:330:1::0;45943:54:0::1;-1:-1:-1::0;;;;;46008:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;;;;:33;;-1:-1:-1;;46008:33:0::1;::::0;::::1;;::::0;;::::1;::::0;;;46057:30;;1266:41:1;;;46057:30:0::1;::::0;1239:18:1;46057:30:0::1;1126:187:1::0;52396:184:0;11391:13;:11;:13::i;:::-;52450:12:::1;52474:7;11503:6:::0;;-1:-1:-1;;;;;11503:6:0;;11430:87;52474:7:::1;-1:-1:-1::0;;;;;52466:21:0::1;52495;52466:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52449:72;;;52540:7;52532:40;;;::::0;-1:-1:-1;;;52532:40:0;;11815:2:1;52532:40:0::1;::::0;::::1;11797:21:1::0;11854:2;11834:18;;;11827:30;-1:-1:-1;;;11873:18:1;;;11866:50;11933:18;;52532:40:0::1;11613:344:1::0;41133:252:0;11391:13;:11;:13::i;:::-;41269:1:::1;41248:18;:22;41240:47;;;::::0;-1:-1:-1;;;41240:47:0;;12164:2:1;41240:47:0::1;::::0;::::1;12146:21:1::0;12203:2;12183:18;;;12176:30;-1:-1:-1;;;12222:18:1;;;12215:42;12274:18;;41240:47:0::1;11962:336:1::0;41240:47:0::1;41298:13;:30:::0;;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;41298:30:0;;::::1;::::0;;;::::1;::::0;;;41339:17:::1;:38:::0;41133:252::o;43721:622::-;11391:13;:11;:13::i;:::-;43897:3:::1;:20:::0;43921:6:::1;::::0;43877:40:::1;::::0;43897:20:::1;;43877:17:::0;:40:::1;:::i;:::-;:50;;;;43855:115;;;::::0;-1:-1:-1;;;43855:115:0;;10918:2:1;43855:115:0::1;::::0;::::1;10900:21:1::0;10957:2;10937:18;;;10930:30;-1:-1:-1;;;10976:18:1;;;10969:45;11031:18;;43855:115:0::1;10716:339:1::0;43855:115:0::1;44008:3;:19:::0;44031:6:::1;::::0;43989:38:::1;::::0;44008:19;;::::1;;;43989:16:::0;:38:::1;:::i;:::-;:48;;;;43981:75;;;::::0;-1:-1:-1;;;43981:75:0;;11262:2:1;43981:75:0::1;::::0;::::1;11244:21:1::0;11301:2;11281:18;;;11274:30;-1:-1:-1;;;11320:18:1;;;11313:44;11374:18;;43981:75:0::1;11060:338:1::0;43981:75:0::1;44168:3;:20:::0;44072:161:::1;::::0;;44168:20:::1;4588:15:1::0;;;4570:34;;4640:15;;;4635:2;4620:18;;4613:43;-1:-1:-1;;;44168:20:0;::::1;::::0;::::1;4672:18:1::0;;;4665:43;-1:-1:-1;;;44203:19:0;;::::1;::::0;;::::1;4739:2:1::0;4724:18;;4717:43;44072:161:0;::::1;::::0;;;;4530:3:1;44072:161:0;;::::1;44244:3;:40:::0;;-1:-1:-1;;44295:38:0;-1:-1:-1;;;44244:40:0::1;::::0;;::::1;;-1:-1:-1::0;;44295:38:0;;-1:-1:-1;;;44295:38:0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;43721:622::o;11770:201::-;11391:13;:11;:13::i;:::-;-1:-1:-1;;;;;11859:22:0;::::1;11851:73;;;::::0;-1:-1:-1;;;11851:73:0;;12505:2:1;11851:73:0::1;::::0;::::1;12487:21:1::0;12544:2;12524:18;;;12517:30;12583:34;12563:18;;;12556:62;-1:-1:-1;;;12634:18:1;;;12627:36;12680:19;;11851:73:0::1;12303:402:1::0;11851:73:0::1;11935:28;11954:8;11935:18;:28::i;10152:346::-:0;-1:-1:-1;;;;;10254:19:0;;10246:68;;;;-1:-1:-1;;;10246:68:0;;12912:2:1;10246:68:0;;;12894:21:1;12951:2;12931:18;;;12924:30;12990:34;12970:18;;;12963:62;-1:-1:-1;;;13041:18:1;;;13034:34;13085:19;;10246:68:0;12710:400:1;10246:68:0;-1:-1:-1;;;;;10333:21:0;;10325:68;;;;-1:-1:-1;;;10325:68:0;;13317:2:1;10325:68:0;;;13299:21:1;13356:2;13336:18;;;13329:30;13395:34;13375:18;;;13368:62;-1:-1:-1;;;13446:18:1;;;13439:32;13488:19;;10325:68:0;13115:398:1;10325:68:0;-1:-1:-1;;;;;10406:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10458:32;;1464:25:1;;;10458:32:0;;1437:18:1;10458:32:0;;;;;;;10152:346;;;:::o;11523:132::-;11503:6;;-1:-1:-1;;;;;11503:6:0;5491:10;11587:23;11579:68;;;;-1:-1:-1;;;11579:68:0;;13720:2:1;11579:68:0;;;13702:21:1;;;13739:18;;;13732:30;13798:34;13778:18;;;13771:62;13850:18;;11579:68:0;13518:356:1;10504:419:0;10605:24;10632:25;10642:5;10649:7;10632:9;:25::i;:::-;10605:52;;-1:-1:-1;;10672:16:0;:37;10668:248;;10754:6;10734:16;:26;;10726:68;;;;-1:-1:-1;;;10726:68:0;;14081:2:1;10726:68:0;;;14063:21:1;14120:2;14100:18;;;14093:30;14159:31;14139:18;;;14132:59;14208:18;;10726:68:0;13879:353:1;10726:68:0;10838:51;10847:5;10854:7;10882:6;10863:16;:25;10838:8;:51::i;:::-;10594:329;10504:419;;;:::o;46434:2596::-;-1:-1:-1;;;;;46566:18:0;;46558:68;;;;-1:-1:-1;;;46558:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46645:16:0;;46637:64;;;;-1:-1:-1;;;46637:64:0;;;;;;;:::i;:::-;46712:28;46743:24;46761:4;46743:9;:24::i;:::-;46712:55;;46788:24;46837:19;;46815;;:41;;;;:::i;:::-;46788:68;;46867:28;46931:18;;46898:16;:51;;:95;;;;;46973:20;46953:16;:40;;46898:95;47044:16;;46867:126;;-1:-1:-1;47044:16:0;;;;;47043:17;:57;;;;-1:-1:-1;47087:8:0;;47099:1;;47077:19;;-1:-1:-1;;;;;47087:8:0;47077:9;:19::i;:::-;:23;47043:57;:97;;;;;47117:23;47043:97;:143;;;;-1:-1:-1;;;;;;47157:29:0;;;;;;:25;:29;;;;;;;;47043:143;47025:209;;;47213:9;:7;:9::i;:::-;47415:16;;47246:21;;;;47415:16;;;;;47414:17;:58;;;;-1:-1:-1;;;;;;47449:23:0;;;;;;:17;:23;;;;;;;;47448:24;47414:58;:97;;;;-1:-1:-1;;;;;;47490:21:0;;;;;;:17;:21;;;;;;;;47489:22;47414:97;47396:1084;;;47572:1;47546:23;;:27;47538:51;;;;-1:-1:-1;;;47538:51:0;;15249:2:1;47538:51:0;;;15231:21:1;15288:2;15268:18;;;15261:30;-1:-1:-1;;;15307:18:1;;;15300:41;15358:18;;47538:51:0;15047:335:1;47538:51:0;-1:-1:-1;;;;;47628:31:0;;;;;;:25;:31;;;;;;;;47624:494;;;47718:3;:19;47741:7;;47705:33;;47718:19;;;;;47705:12;:33::i;:::-;47696:42;;;;:6;:42;:::i;:::-;:52;;;;:::i;:::-;47805:3;:19;47680:68;;-1:-1:-1;47828:7:0;;47792:33;;-1:-1:-1;;;47805:19:0;;;;47792:12;:33::i;:::-;47783:42;;;;:6;:42;:::i;:::-;:52;;;;:::i;:::-;47767:68;;47624:494;;;-1:-1:-1;;;;;47895:29:0;;;;;;:25;:29;;;;;;;;47891:227;;;47983:3;:20;48007:7;;47970:34;;47983:20;;47970:12;:34::i;:::-;47961:43;;;;:6;:43;:::i;:::-;:53;;;;:::i;:::-;48071:3;:20;47945:69;;-1:-1:-1;48095:7:0;;48058:34;;-1:-1:-1;;;48071:20:0;;;;48058:12;:34::i;:::-;48049:43;;;;:6;:43;:::i;:::-;:53;;;;:::i;:::-;48033:69;;47891:227;48132:17;48152:29;48168:13;48152;:29;:::i;:::-;48132:49;-1:-1:-1;48200:13:0;;48196:66;;48215:47;48231:4;48245;48252:9;48215:15;:47::i;:::-;48311:13;48286:22;48295:13;48286:6;:22;:::i;:::-;:38;;;;:::i;:::-;48277:47;;48383:13;48361:19;;:35;;;;:::i;:::-;48339:19;:57;48433:19;;:35;;48455:13;;48433:35;:::i;:::-;48411:19;:57;-1:-1:-1;47396:1084:0;48490:33;48506:4;48512:2;48516:6;48490:15;:33::i;:::-;48539:16;;;;;;;48534:489;;-1:-1:-1;;;;;48577:40:0;;;;;;:34;:40;;;;;;;;48572:215;;48678:20;;48668:6;:30;;48638:133;;;;-1:-1:-1;;;48638:133:0;;15895:2:1;48638:133:0;;;15877:21:1;15934:2;15914:18;;;15907:30;15973:31;15953:18;;;15946:59;16022:18;;48638:133:0;15693:353:1;48638:133:0;-1:-1:-1;;;;;48806:38:0;;;;;;:34;:38;;;;;;;;48801:211;;48912:9;;48895:13;48905:2;48895:9;:13::i;:::-;:26;;48865:131;;;;-1:-1:-1;;;48865:131:0;;16253:2:1;48865:131:0;;;16235:21:1;16292:2;16272:18;;;16265:30;16331:33;16311:18;;;16304:61;16382:18;;48865:131:0;16051:355:1;48865:131:0;46547:2483;;;;;46434:2596;;;:::o;11977:191::-;12070:6;;;-1:-1:-1;;;;;12087:17:0;;;-1:-1:-1;;;;;;12087:17:0;;;;;;;12120:40;;12070:6;;;12087:17;12070:6;;12120:40;;12051:16;;12120:40;12040:128;11977:191;:::o;12595:177::-;12705:58;;;-1:-1:-1;;;;;16603:32:1;;12705:58:0;;;16585:51:1;16652:18;;;;16645:34;;;12705:58:0;;;;;;;;;;16558:18:1;;;;12705:58:0;;;;;;;;-1:-1:-1;;;;;12705:58:0;-1:-1:-1;;;12705:58:0;;;12678:86;;12698:5;;12678:19;:86::i;:::-;12595:177;;;:::o;45600:253::-;-1:-1:-1;;;;;45691:31:0;;;;;;:25;:31;;;;;;;;:39;;;;;-1:-1:-1;;45691:39:0;;;;;;;;45741:34;:40;;;;;;:48;;;;;;;;;;45805:40;1266:41:1;;;45805:40:0;;1239:18:1;45805:40:0;1126:187:1;49340:2158:0;42360:16;:23;;-1:-1:-1;;42360:23:0;;;;;49470:19:::1;::::0;42360:23;;49470::::1;::::0;49492:1:::1;::::0;49470:23:::1;:::i;:::-;49633;::::0;49441:52;;-1:-1:-1;49538:21:0::1;::::0;49504:31:::1;::::0;-1:-1:-1;;;49633:23:0;::::1;;;49629:1268;;;49673:21;49714:19;;49695:18;:38;;;;:::i;:::-;49673:60:::0;-1:-1:-1;49751:15:0;;49748:74:::1;;49785:37;49808:13;49785:22;:37::i;:::-;49837:24;49864:47;49888:23:::0;49864:21:::1;:47;:::i;:::-;49837:74;;49926:35;50024:13;50001:19;;49965:16;:55;;;;:::i;:::-;49964:73;;;;:::i;:::-;49926:111:::0;-1:-1:-1;50076:46:0::1;49926:111:::0;50076:16;:46:::1;:::i;:::-;50052:70:::0;-1:-1:-1;50140:29:0;;50137:305:::1;;50218:15;::::0;50210:69:::1;::::0;50194:12:::1;::::0;-1:-1:-1;;;;;50218:15:0::1;::::0;50247:27;;50194:12;50210:69;50194:12;50210:69;50247:27;50218:15;50210:69:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50193:86;;;50305:7;50302:116;;;50345:49;::::0;;50363:1:::1;6343:25:1::0;;6399:2;6384:18;;6377:34;;;50345:49:0::1;::::0;6316:18:1;50345:49:0::1;;;;;;;50302:116;50170:272;50137:305;49658:807;;;49629:1268;;;50489:20:::0;;50486:84:::1;;50528:42;50551:18;50528:22;:42::i;:::-;50609:47;50633:23:::0;50609:21:::1;:47;:::i;:::-;50674:19;::::0;50585:71;;-1:-1:-1;50674:21:0;50671:203:::1;;50740:15;::::0;50757:19:::1;::::0;50715:62:::1;::::0;50733:4:::1;::::0;-1:-1:-1;;;;;50740:15:0;;::::1;::::0;50715:9:::1;:62::i;:::-;50819:19;::::0;50801:41:::1;::::0;;6343:25:1;;;50840:1:0::1;6399:2:1::0;6384:18;;6377:34;50801:41:0::1;::::0;6316:18:1;50801:41:0::1;;;;;;;50671:203;50934:1;50913:18;:22;:51;;;;;50963:1;50939:21;:25;50913:51;50909:216;;;50981:55;50994:18;51014:21;50981:12;:55::i;:::-;51056:57;::::0;;6343:25:1;;;6399:2;6384:18;;6377:34;;;51056:57:0::1;::::0;6316:18:1;51056:57:0::1;;;;;;;50909:216;51157:1;51135:19;:23:::0;;;51169:19:::1;:23:::0;;;51210:24:::1;51228:4;51210:9;:24::i;:::-;:26;51207:283;;;51272:1;51255:7;11503:6:::0;;-1:-1:-1;;;;;11503:6:0;;11430:87;51255:7:::1;-1:-1:-1::0;;;;;51255:19:0::1;;51252:227;;51294:59;51312:4;51319:7;11503:6:::0;;-1:-1:-1;;;;;11503:6:0;;11430:87;51319:7:::1;51328:24;51346:4;51328:9;:24::i;:::-;51294:9;:59::i;:::-;51252:227;;;51394:67;51412:4;51427:6;51436:24;51454:4;51436:9;:24::i;51394:67::-;-1:-1:-1::0;;42406:16:0;:24;;-1:-1:-1;;42406:24:0;;;-1:-1:-1;49340:2158:0:o;49036:298::-;49093:6;49112:17;49201;;49174:23;;49156:15;:41;;;;:::i;:::-;49155:63;;;;:::i;:::-;49132:13;;:87;;;:13;;;;;:87;:::i;:::-;49112:107;;49240:10;49233:17;;:4;:17;;;49230:96;;;49272:17;49279:10;49272:4;:17;:::i;:::-;49265:24;49036:298;-1:-1:-1;;;49036:298:0:o;49230:96::-;-1:-1:-1;49325:1:0;;49036:298;-1:-1:-1;;49036:298:0:o;49230:96::-;49101:233;49036:298;;;:::o;8105:806::-;-1:-1:-1;;;;;8202:18:0;;8194:68;;;;-1:-1:-1;;;8194:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8281:16:0;;8273:64;;;;-1:-1:-1;;;8273:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8423:15:0;;8401:19;8423:15;;;;;;;;;;;8457:21;;;;8449:72;;;;-1:-1:-1;;;8449:72:0;;17844:2:1;8449:72:0;;;17826:21:1;17883:2;17863:18;;;17856:30;17922:34;17902:18;;;17895:62;-1:-1:-1;;;17973:18:1;;;17966:36;18019:19;;8449:72:0;17642:402:1;8449:72:0;-1:-1:-1;;;;;8557:15:0;;;:9;:15;;;;;;;;;;;8575:20;;;8557:38;;8775:13;;;;;;;;;;:23;;;;;;8827:26;;1464:25:1;;;8775:13:0;;8827:26;;1437:18:1;8827:26:0;;;;;;;8866:37;12595:177;15200:649;15624:23;15650:69;15678:4;15650:69;;;;;;;;;;;;;;;;;15658:5;-1:-1:-1;;;;;15650:27:0;;;:69;;;;;:::i;:::-;15624:95;;15738:10;:17;15759:1;15738:22;:56;;;;15775:10;15764:30;;;;;;;;;;;;:::i;:::-;15730:111;;;;-1:-1:-1;;;15730:111:0;;18501:2:1;15730:111:0;;;18483:21:1;18540:2;18520:18;;;18513:30;18579:34;18559:18;;;18552:62;-1:-1:-1;;;18630:18:1;;;18623:40;18680:19;;15730:111:0;18299:406:1;51506:477:0;51602:16;;;51616:1;51602:16;;;;;;;;51578:21;;51602:16;;;;;;;;;;-1:-1:-1;51602:16:0;51578:40;;51647:4;51629;51634:1;51629:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;51629:23:0;;;:7;;;;;;;;;;:23;;;;51692:10;;51673:37;;;-1:-1:-1;;;51673:37:0;;;;51692:10;;;;;51673:35;;:37;;;;;51629:7;;51673:37;;;;;51692:10;51673:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51663:4;51668:1;51663:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;51663:47:0;;;:7;;;;;;;;;:47;51745:10;;51726:245;;-1:-1:-1;;;51726:245:0;;51745:10;;;51726:81;;:245;;51822:11;;51745:10;;51898:4;;51925;;51945:15;;51726:245;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51567:416;51506:477;:::o;51991:397::-;52111:10;;52092:281;;-1:-1:-1;;;52092:281:0;;52185:4;52092:281;;;20300:34:1;20350:18;;;20343:34;;;52111:10:0;20393:18:1;;;20386:34;;;20436:18;;;20429:34;52325:6:0;20479:19:1;;;20472:44;52347:15:0;20532:19:1;;;20525:35;-1:-1:-1;;;;;52111:10:0;;;;52092:46;;52146:15;;20234:19:1;;52092:281:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;51991:397;;:::o;933:229::-;1070:12;1102:52;1124:6;1132:4;1138:1;1141:12;1102:21;:52::i;:::-;1095:59;933:229;-1:-1:-1;;;;933:229:0:o;1400:455::-;1570:12;1628:5;1603:21;:30;;1595:81;;;;-1:-1:-1;;;1595:81:0;;21084:2:1;1595:81:0;;;21066:21:1;21123:2;21103:18;;;21096:30;21162:34;21142:18;;;21135:62;-1:-1:-1;;;21213:18:1;;;21206:36;21259:19;;1595:81:0;20882:402:1;1595:81:0;1688:12;1702:23;1729:6;-1:-1:-1;;;;;1729:11:0;1748:5;1755:4;1729:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1687:73;;;;1778:69;1805:6;1813:7;1822:10;1834:12;1778:26;:69::i;:::-;1771:76;1400:455;-1:-1:-1;;;;;;;1400:455:0:o;2949:644::-;3134:12;3163:7;3159:427;;;3191:10;:17;3212:1;3191:22;3187:290;;-1:-1:-1;;;;;380:19:0;;;3401:60;;;;-1:-1:-1;;;3401:60:0;;21783:2:1;3401:60:0;;;21765:21:1;21822:2;21802:18;;;21795:30;21861:31;21841:18;;;21834:59;21910:18;;3401:60:0;21581:353:1;3401:60:0;-1:-1:-1;3498:10:0;3491:17;;3159:427;3541:33;3549:10;3561:12;4071:17;;:21;4067:388;;4303:10;4297:17;4360:15;4347:10;4343:2;4339:19;4332:44;4067:388;4430:12;4423:20;;-1:-1:-1;;;4423: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;2845:247::-;2904:6;2957:2;2945:9;2936:7;2932:23;2928:32;2925:52;;;2973:1;2970;2963:12;2925:52;3012:9;2999:23;3031:31;3056:5;3031:31;:::i;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;4771:252::-;4838:6;4846;4899:2;4887:9;4878:7;4874:23;4870:32;4867:52;;;4915:1;4912;4905:12;4867:52;4938:28;4956:9;4938:28;:::i;5028:380::-;5107:1;5103:12;;;;5150;;;5171:61;;5225:4;5217:6;5213:17;5203:27;;5171:61;5278:2;5270:6;5267:14;5247:18;5244:38;5241:161;;5324:10;5319:3;5315:20;5312:1;5305:31;5359:4;5356:1;5349:15;5387:4;5384:1;5377:15;5413:127;5474:10;5469:3;5465:20;5462:1;5455:31;5505:4;5502:1;5495:15;5529:4;5526:1;5519:15;5545:217;5585:1;5611;5601:132;;5655:10;5650:3;5646:20;5643:1;5636:31;5690:4;5687:1;5680:15;5718:4;5715:1;5708:15;5601:132;-1:-1:-1;5747:9:1;;5545:217::o;7093:125::-;7158:9;;;7179:10;;;7176:36;;;7192:18;;:::i;8543:184::-;8613:6;8666:2;8654:9;8645:7;8641:23;8637:32;8634:52;;;8682:1;8679;8672:12;8634:52;-1:-1:-1;8705:16:1;;8543:184;-1:-1:-1;8543:184:1:o;9976:251::-;10046:6;10099:2;10087:9;10078:7;10074:23;10070:32;10067:52;;;10115:1;10112;10105:12;10067:52;10147:9;10141:16;10166:31;10191:5;10166:31;:::i;10541:170::-;10608:8;10636:10;;;10648;;;10632:27;;10671:11;;;10668:37;;;10685:18;;:::i;:::-;10668:37;10541:170;;;;:::o;14237:401::-;14439:2;14421:21;;;14478:2;14458:18;;;14451:30;14517:34;14512:2;14497:18;;14490:62;-1:-1:-1;;;14583:2:1;14568:18;;14561:35;14628:3;14613:19;;14237:401::o;14643:399::-;14845:2;14827:21;;;14884:2;14864:18;;;14857:30;14923:34;14918:2;14903:18;;14896:62;-1:-1:-1;;;14989:2:1;14974:18;;14967:33;15032:3;15017:19;;14643:399::o;15387:168::-;15460:9;;;15491;;15508:15;;;15502:22;;15488:37;15478:71;;15529:18;;:::i;15560:128::-;15627:9;;;15648:11;;;15645:37;;;15662:18;;:::i;17212:247::-;17283:8;17323:10;;;17335;;;17319:27;17366:20;;;;17283:8;17405:24;;;17395:58;;17433:18;;:::i;:::-;17395:58;;17212:247;;;;:::o;17464:173::-;17532:8;17573:10;;;17561;;;17557:27;;17596:12;;;17593:38;;;17611:18;;:::i;18049:245::-;18116:6;18169:2;18157:9;18148:7;18144:23;18140:32;18137:52;;;18185:1;18182;18175:12;18137:52;18217:9;18211:16;18236:28;18258:5;18236:28;:::i;18842:127::-;18903:10;18898:3;18894:20;18891:1;18884:31;18934:4;18931:1;18924:15;18958:4;18955:1;18948:15;18974:980;19236:4;19284:3;19273:9;19269:19;19315:6;19304:9;19297:25;19341:2;19379:6;19374:2;19363:9;19359:18;19352:34;19422:3;19417:2;19406:9;19402:18;19395:31;19446:6;19481;19475:13;19512:6;19504;19497:22;19550:3;19539:9;19535:19;19528:26;;19589:2;19581:6;19577:15;19563:29;;19610:1;19620:195;19634:6;19631:1;19628:13;19620:195;;;19699:13;;-1:-1:-1;;;;;19695:39:1;19683:52;;19790:15;;;;19755:12;;;;19731:1;19649:9;19620:195;;;-1:-1:-1;;;;;;;19871:32:1;;;;19866:2;19851:18;;19844:60;-1:-1:-1;;;19935:3:1;19920:19;19913:35;19832:3;18974:980;-1:-1:-1;;;18974:980:1:o;20571:306::-;20659:6;20667;20675;20728:2;20716:9;20707:7;20703:23;20699:32;20696:52;;;20744:1;20741;20734:12;20696:52;20773:9;20767:16;20757:26;;20823:2;20812:9;20808:18;20802:25;20792:35;;20867:2;20856:9;20852:18;20846:25;20836:35;;20571:306;;;;;:::o;21289:287::-;21418:3;21456:6;21450:13;21472:66;21531:6;21526:3;21519:4;21511:6;21507:17;21472:66;:::i;:::-;21554:16;;;;;21289:287;-1:-1:-1;;21289:287:1:o
Swarm Source
ipfs://25d5df4e6f14332c763af794d0e2de7fe72290403287059c9d8680d2d930f7bc
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.