ETH Price: $3,446.04 (-0.27%)
Gas: 4 Gwei

Token

Non-Playable Pei (NPEI)
 

Overview

Max Total Supply

420,690,000,000,000 NPEI

Holders

55

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Uniswap V2: NPEI
Balance
0.000424930380264662 NPEI

Value
$0.00
0x6b563f7925618a1e6b4fe69c2960ec2949117bfe
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Token

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-06-14
*/

// SPDX-License-Identifier: MIT



pragma solidity ^0.8.9;

abstract contract Context {
	function _msgSender() internal view virtual returns (address) {
		return msg.sender;
	}

	function _msgData() internal view virtual returns (bytes calldata) {
		this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
		return msg.data;
	}
}

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;
}

interface IUniswapV2Factory {
	event PairCreated(address indexed token0, address indexed token1, address pair, uint);

	function feeTo() external view returns (address);
	function feeToSetter() external view returns (address);

	function getPair(address tokenA, address tokenB) external view returns (address pair);
	function allPairs(uint) external view returns (address pair);
	function allPairsLength() external view returns (uint);

	function createPair(address tokenA, address tokenB) external returns (address pair);

	function setFeeTo(address) external;
	function setFeeToSetter(address) external;
}

interface IERC20 {
	/**
	 * @dev Returns the amount of tokens in existence.
	 */
	function totalSupply() external view returns (uint256);

	/**
	 * @dev Returns the amount of tokens owned by `account`.
	 */
	function balanceOf(address account) external view returns (uint256);

	/**
	 * @dev Moves `amount` tokens from the caller's account to `recipient`.
	 *
	 * Returns a boolean value indicating whether the operation succeeded.
	 *
	 * Emits a {Transfer} event.
	 */
	function transfer(address recipient, uint256 amount) external returns (bool);

	/**
	 * @dev Returns the remaining number of tokens that `spender` will be
	 * allowed to spend on behalf of `owner` through {transferFrom}. This is
	 * zero by default.
	 *
	 * This value changes when {approve} or {transferFrom} are called.
	 */
	function allowance(address owner, address spender) external view returns (uint256);

	/**
	 * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
	 *
	 * Returns a boolean value indicating whether the operation succeeded.
	 *
	 * IMPORTANT: Beware that changing an allowance with this method brings the risk
	 * that someone may use both the old and the new allowance by unfortunate
	 * transaction ordering. One possible solution to mitigate this race
	 * condition is to first reduce the spender's allowance to 0 and set the
	 * desired value afterwards:
	 * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
	 *
	 * Emits an {Approval} event.
	 */
	function approve(address spender, uint256 amount) external returns (bool);

	/**
	 * @dev Moves `amount` tokens from `sender` to `recipient` using the
	 * allowance mechanism. `amount` is then deducted from the caller's
	 * allowance.
	 *
	 * Returns a boolean value indicating whether the operation succeeded.
	 *
	 * Emits a {Transfer} event.
	 */
	function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

	/**
	 * @dev Emitted when `value` tokens are moved from one account (`from`) to
	 * another (`to`).
	 *
	 * Note that `value` may be zero.
	 */
	event Transfer(address indexed from, address indexed to, uint256 value);

	/**
	 * @dev Emitted when the allowance of a `spender` for an `owner` is set by
	 * a call to {approve}. `value` is the new allowance.
	 */
	event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
	/**
	 * @dev Returns the name of the token.
	 */
	function name() external view returns (string memory);

	/**
	 * @dev Returns the symbol of the token.
	 */
	function symbol() external view returns (string memory);

	/**
	 * @dev Returns the decimals places of the token.
	 */
	function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
	using SafeMath for uint256;

	mapping(address => uint256) private _balances;

	mapping(address => mapping(address => uint256)) private _allowances;

	uint256 private _totalSupply;

	string private _name;
	string private _symbol;

	/**
	 * @dev Sets the values for {name} and {symbol}.
	 *
	 * The default value of {decimals} is 18. To select a different value for
	 * {decimals} you should overload it.
	 *
	 * All two of these values are immutable: they can only be set once during
	 * construction.
	 */
	constructor(string memory name_, string memory symbol_) {
		_name = name_;
		_symbol = symbol_;
	}

	/**
	 * @dev Returns the name of the token.
	 */
	function name() public view virtual override returns (string memory) {
		return _name;
	}

	/**
	 * @dev Returns the symbol of the token, usually a shorter version of the
	 * name.
	 */
	function symbol() public view virtual override returns (string memory) {
		return _symbol;
	}

	/**
	 * @dev Returns the number of decimals used to get its user representation.
	 * For example, if `decimals` equals `2`, a balance of `505` tokens should
	 * be displayed to a user as `5,05` (`505 / 10 ** 2`).
	 *
	 * Tokens usually opt for a value of 18, imitating the relationship between
	 * Ether and Wei. This is the value {ERC20} uses, unless this function is
	 * overridden;
	 *
	 * NOTE: This information is only used for _display_ purposes: it in
	 * no way affects any of the arithmetic of the contract, including
	 * {IERC20-balanceOf} and {IERC20-transfer}.
	 */
	function decimals() public view virtual override returns (uint8) {
		return 18;
	}

	/**
	 * @dev See {IERC20-totalSupply}.
	 */
	function totalSupply() public view virtual override returns (uint256) {
		return _totalSupply;
	}

	/**
	 * @dev See {IERC20-balanceOf}.
	 */
	function balanceOf(address account) public view virtual override returns (uint256) {
		return _balances[account];
	}

	/**
	 * @dev See {IERC20-transfer}.
	 *
	 * Requirements:
	 *
	 * - `recipient` cannot be the zero address.
	 * - the caller must have a balance of at least `amount`.
	 */
	function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
		_transfer(_msgSender(), recipient, amount);
		return true;
	}

	/**
	 * @dev See {IERC20-allowance}.
	 */
	function allowance(address owner, address spender) public view virtual override returns (uint256) {
		return _allowances[owner][spender];
	}

	/**
	 * @dev See {IERC20-approve}.
	 *
	 * Requirements:
	 *
	 * - `spender` cannot be the zero address.
	 */
	function approve(address spender, uint256 amount) public virtual override returns (bool) {
		_approve(_msgSender(), spender, amount);
		return true;
	}

	/**
	 * @dev See {IERC20-transferFrom}.
	 *
	 * Emits an {Approval} event indicating the updated allowance. This is not
	 * required by the EIP. See the note at the beginning of {ERC20}.
	 *
	 * Requirements:
	 *
	 * - `sender` and `recipient` cannot be the zero address.
	 * - `sender` must have a balance of at least `amount`.
	 * - the caller must have allowance for ``sender``'s tokens of at least
	 * `amount`.
	 */
	function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
		_transfer(sender, recipient, amount);
		_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, 'ERC20: transfer amount exceeds allowance'));
		return true;
	}

	/**
	 * @dev Atomically increases the allowance granted to `spender` by the caller.
	 *
	 * This is an alternative to {approve} that can be used as a mitigation for
	 * problems described in {IERC20-approve}.
	 *
	 * Emits an {Approval} event indicating the updated allowance.
	 *
	 * Requirements:
	 *
	 * - `spender` cannot be the zero address.
	 */
	function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
		_approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
		return true;
	}

	/**
	 * @dev Atomically decreases the allowance granted to `spender` by the caller.
	 *
	 * This is an alternative to {approve} that can be used as a mitigation for
	 * problems described in {IERC20-approve}.
	 *
	 * Emits an {Approval} event indicating the updated allowance.
	 *
	 * Requirements:
	 *
	 * - `spender` cannot be the zero address.
	 * - `spender` must have allowance for the caller of at least
	 * `subtractedValue`.
	 */
	function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
		_approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, 'ERC20: decreased allowance below zero'));
		return true;
	}

	/**
	 * @dev Moves tokens `amount` from `sender` to `recipient`.
	 *
	 * This is internal function is equivalent to {transfer}, and can be used to
	 * e.g. implement automatic token fees, slashing mechanisms, etc.
	 *
	 * Emits a {Transfer} event.
	 *
	 * Requirements:
	 *
	 * - `sender` cannot be the zero address.
	 * - `recipient` cannot be the zero address.
	 * - `sender` must have a balance of at least `amount`.
	 */
	function _transfer(address sender, address recipient, uint256 amount) internal virtual {
		require(sender != address(0), 'ERC20: transfer from the zero address');
		require(recipient != address(0), 'ERC20: transfer to the zero address');

		_beforeTokenTransfer(sender, recipient, amount);

		_balances[sender] = _balances[sender].sub(amount, 'ERC20: transfer amount exceeds balance');
		_balances[recipient] = _balances[recipient].add(amount);
		emit Transfer(sender, recipient, amount);
	}

	/** @dev Creates `amount` tokens and assigns them to `account`, increasing
	 * the total supply.
	 *
	 * Emits a {Transfer} event with `from` set to the zero address.
	 *
	 * Requirements:
	 *
	 * - `account` cannot be the zero address.
	 */
	function _mint(address account, uint256 amount) internal virtual {
		require(account != address(0), 'ERC20: mint to the zero address');

		_beforeTokenTransfer(address(0), account, amount);

		_totalSupply = _totalSupply.add(amount);
		_balances[account] = _balances[account].add(amount);
		emit Transfer(address(0), account, amount);
	}

	/**
	 * @dev Destroys `amount` tokens from `account`, reducing the
	 * total supply.
	 *
	 * Emits a {Transfer} event with `to` set to the zero address.
	 *
	 * Requirements:
	 *
	 * - `account` cannot be the zero address.
	 * - `account` must have at least `amount` tokens.
	 */
	function _burn(address account, uint256 amount) internal virtual {
		require(account != address(0), 'ERC20: burn from the zero address');

		_beforeTokenTransfer(account, address(0), amount);

		_balances[account] = _balances[account].sub(amount, 'ERC20: burn amount exceeds balance');
		_totalSupply = _totalSupply.sub(amount);
		emit Transfer(account, address(0), amount);
	}

	/**
	 * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
	 *
	 * This internal function is equivalent to `approve`, and can be used to
	 * e.g. set automatic allowances for certain subsystems, etc.
	 *
	 * Emits an {Approval} event.
	 *
	 * Requirements:
	 *
	 * - `owner` cannot be the zero address.
	 * - `spender` cannot be the zero address.
	 */
	function _approve(address owner, address spender, uint256 amount) internal virtual {
		require(owner != address(0), 'ERC20: approve from the zero address');
		require(spender != address(0), 'ERC20: approve to the zero address');

		_allowances[owner][spender] = amount;
		emit Approval(owner, spender, amount);
	}

	/**
	 * @dev Hook that is called before any transfer of tokens. This includes
	 * minting and burning.
	 *
	 * Calling conditions:
	 *
	 * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
	 * will be to transferred to `to`.
	 * - when `from` is zero, `amount` tokens will be minted for `to`.
	 * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
	 * - `from` and `to` are never both zero.
	 *
	 * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
	 */
	function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}

library SafeMath {
	/**
	 * @dev Returns the addition of two unsigned integers, reverting on
	 * overflow.
	 *
	 * Counterpart to Solidity's `+` operator.
	 *
	 * Requirements:
	 *
	 * - Addition cannot overflow.
	 */
	function add(uint256 a, uint256 b) internal pure returns (uint256) {
		uint256 c = a + b;
		require(c >= a, 'SafeMath: addition overflow');

		return c;
	}

	/**
	 * @dev Returns the subtraction of two unsigned integers, reverting on
	 * overflow (when the result is negative).
	 *
	 * Counterpart to Solidity's `-` operator.
	 *
	 * Requirements:
	 *
	 * - Subtraction cannot overflow.
	 */
	function sub(uint256 a, uint256 b) internal pure returns (uint256) {
		return sub(a, b, 'SafeMath: subtraction overflow');
	}

	/**
	 * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
	 * overflow (when the result is negative).
	 *
	 * Counterpart to Solidity's `-` operator.
	 *
	 * Requirements:
	 *
	 * - Subtraction cannot overflow.
	 */
	function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
		require(b <= a, errorMessage);
		uint256 c = a - b;

		return c;
	}

	/**
	 * @dev Returns the multiplication of two unsigned integers, reverting on
	 * overflow.
	 *
	 * Counterpart to Solidity's `*` operator.
	 *
	 * Requirements:
	 *
	 * - Multiplication cannot overflow.
	 */
	function mul(uint256 a, uint256 b) internal pure returns (uint256) {
		// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
		// benefit is lost if 'b' is also tested.
		// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
		if (a == 0) {
			return 0;
		}

		uint256 c = a * b;
		require(c / a == b, 'SafeMath: multiplication overflow');

		return c;
	}

	/**
	 * @dev Returns the integer division of two unsigned integers. Reverts on
	 * division by zero. The result is rounded towards zero.
	 *
	 * Counterpart to Solidity's `/` operator. Note: this function uses a
	 * `revert` opcode (which leaves remaining gas untouched) while Solidity
	 * uses an invalid opcode to revert (consuming all remaining gas).
	 *
	 * Requirements:
	 *
	 * - The divisor cannot be zero.
	 */
	function div(uint256 a, uint256 b) internal pure returns (uint256) {
		return div(a, b, 'SafeMath: division by zero');
	}

	/**
	 * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
	 * division by zero. The result is rounded towards zero.
	 *
	 * Counterpart to Solidity's `/` operator. Note: this function uses a
	 * `revert` opcode (which leaves remaining gas untouched) while Solidity
	 * uses an invalid opcode to revert (consuming all remaining gas).
	 *
	 * Requirements:
	 *
	 * - The divisor cannot be zero.
	 */
	function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
		require(b > 0, errorMessage);
		uint256 c = a / b;
		// assert(a == b * c + a % b); // There is no case in which this doesn't hold

		return c;
	}

	/**
	 * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
	 * Reverts when dividing by zero.
	 *
	 * Counterpart to Solidity's `%` operator. This function uses a `revert`
	 * opcode (which leaves remaining gas untouched) while Solidity uses an
	 * invalid opcode to revert (consuming all remaining gas).
	 *
	 * Requirements:
	 *
	 * - The divisor cannot be zero.
	 */
	function mod(uint256 a, uint256 b) internal pure returns (uint256) {
		return mod(a, b, 'SafeMath: modulo by zero');
	}

	/**
	 * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
	 * Reverts with custom message when dividing by zero.
	 *
	 * Counterpart to Solidity's `%` operator. This function uses a `revert`
	 * opcode (which leaves remaining gas untouched) while Solidity uses an
	 * invalid opcode to revert (consuming all remaining gas).
	 *
	 * Requirements:
	 *
	 * - The divisor cannot be zero.
	 */
	function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
		require(b != 0, errorMessage);
		return a % b;
	}
}

contract Ownable is Context {
	address private _owner;

	event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

	/**
	 * @dev Initializes the contract setting the deployer as the initial owner.
	 */
	constructor() {
		address msgSender = _msgSender();
		_owner = msgSender;
		emit OwnershipTransferred(address(0), msgSender);
	}

	/**
	 * @dev Returns the address of the current owner.
	 */
	function owner() public view returns (address) {
		return _owner;
	}

	/**
	 * @dev Throws if called by any account other than the owner.
	 */
	modifier onlyOwner() {
		require(_owner == _msgSender(), 'Ownable: caller is not the owner');
		_;
	}

	/**
	 * @dev Leaves the contract without owner. It will not be possible to call
	 * `onlyOwner` functions anymore. Can only be called by the current owner.
	 *
	 * NOTE: Renouncing ownership will leave the contract without an owner,
	 * thereby removing any functionality that is only available to the owner.
	 */
	function renounceOwnership() public virtual onlyOwner {
		emit OwnershipTransferred(_owner, address(0));
		_owner = address(0);
	}

	/**
	 * @dev Transfers ownership of the contract to a new account (`newOwner`).
	 * Can only be called by the current owner.
	 */
	function transferOwnership(address newOwner) public virtual onlyOwner {
		require(newOwner != address(0), 'Ownable: new owner is the zero address');
		emit OwnershipTransferred(_owner, newOwner);
		_owner = newOwner;
	}
}

library SafeMathInt {
	int256 private constant MIN_INT256 = int256(1) << 255;
	int256 private constant MAX_INT256 = ~(int256(1) << 255);

	/**
	 * @dev Multiplies two int256 variables and fails on overflow.
	 */
	function mul(int256 a, int256 b) internal pure returns (int256) {
		int256 c = a * b;

		// Detect overflow when multiplying MIN_INT256 with -1
		require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
		require((b == 0) || (c / b == a));
		return c;
	}

	/**
	 * @dev Division of two int256 variables and fails on overflow.
	 */
	function div(int256 a, int256 b) internal pure returns (int256) {
		// Prevent overflow when dividing MIN_INT256 by -1
		require(b != -1 || a != MIN_INT256);

		// Solidity already throws when dividing by 0.
		return a / b;
	}

	/**
	 * @dev Subtracts two int256 variables and fails on overflow.
	 */
	function sub(int256 a, int256 b) internal pure returns (int256) {
		int256 c = a - b;
		require((b >= 0 && c <= a) || (b < 0 && c > a));
		return c;
	}

	/**
	 * @dev Adds two int256 variables and fails on overflow.
	 */
	function add(int256 a, int256 b) internal pure returns (int256) {
		int256 c = a + b;
		require((b >= 0 && c >= a) || (b < 0 && c < a));
		return c;
	}

	/**
	 * @dev Converts to absolute value, and fails on overflow.
	 */
	function abs(int256 a) internal pure returns (int256) {
		require(a != MIN_INT256);
		return a < 0 ? -a : a;
	}

	function toUint256Safe(int256 a) internal pure returns (uint256) {
		require(a >= 0);
		return uint256(a);
	}
}

library SafeMathUint {
	function toInt256Safe(uint256 a) internal pure returns (int256) {
		int256 b = int256(a);
		require(b >= 0);
		return b;
	}
}

interface IUniswapV2Router01 {
	function factory() external pure returns (address);
	function WETH() external pure returns (address);

	function addLiquidity(address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline) external returns (uint amountA, uint amountB, uint liquidity);
	function addLiquidityETH(address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external payable returns (uint amountToken, uint amountETH, uint liquidity);
	function removeLiquidity(address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline) external returns (uint amountA, uint amountB);
	function removeLiquidityETH(address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external returns (uint amountToken, uint amountETH);
	function removeLiquidityWithPermit(address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external returns (uint amountA, uint amountB);
	function removeLiquidityETHWithPermit(address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external returns (uint amountToken, uint amountETH);
	function swapExactTokensForTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts);
	function swapTokensForExactTokens(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts);
	function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts);
	function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts);
	function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts);
	function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts);

	function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
	function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
	function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
	function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
	function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
	function removeLiquidityETHSupportingFeeOnTransferTokens(address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external returns (uint amountETH);
	function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external returns (uint amountETH);

	function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
	function swapExactETHForTokensSupportingFeeOnTransferTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable;
	function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
}

contract Token is ERC20, Ownable {
	using SafeMath for uint256;

	IUniswapV2Router02 public immutable uniswapV2Router;
	address public immutable uniswapV2Pair;
	address public constant deadAddress = address(0xdead);

	bool private swapping;

	address public marketingWallet;
	address public devWallet;
	address public buyBackWallet;

	uint256 public maxTransactionAmount;
	uint256 public maxWallet;
	uint8 private _decimals;

	bool public limitsInEffect = true;
	bool public tradingActive = false;
	bool public swapEnabled = false;
	bool public rescueSwap = false;

	uint256 public tradingActiveBlock;

	uint256 public buyTotalFees;
	uint256 public buyMarketingFee;
	uint256 public buyLiquidityFee;
	uint256 public buyDevFee;
	uint256 public buyBuyBackFee;

	uint256 public sellTotalFees;
	uint256 public sellMarketingFee;
	uint256 public sellLiquidityFee;
	uint256 public sellDevFee;
	uint256 public sellBuyBackFee;

	uint256 public tokensForMarketing;
	uint256 public tokensForLiquidity;
	uint256 public tokensForDev;
	uint256 public tokensForBuyBack;

	/******************/

	// exlcude from fees and max transaction amount
	mapping(address => bool) private _isExcludedFromFees;
	mapping(address => bool) public _isExcludedMaxTransactionAmount;

	// store addresses that a automatic market maker pairs. Any transfer *to* these addresses
	// could be subject to a maximum transfer amount
	mapping(address => bool) public automatedMarketMakerPairs;

	event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);

	event ExcludeFromFees(address indexed account, bool isExcluded);

	event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

	event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);

	event devWalletUpdated(address indexed newWallet, address indexed oldWallet);

	event buyBackWalletUpdated(address indexed newWallet, address indexed oldWallet);

	event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);

	event BuyBackTriggered(uint256 amount);

	event OwnerForcedSwapBack(uint256 timestamp);

	constructor() ERC20('Non-Playable Pei', 'NPEI') {
		address _owner = _msgSender();

		_decimals = 18;

		uint256 totalSupply = 42069 * (10 ** 10) * (10 ** _decimals);

		maxTransactionAmount = (totalSupply * 1) / 100; // 1% maxTransactionAmountTxn
		maxWallet = (totalSupply * 1) / 100; // 1% maxWallet

		buyMarketingFee = 0;
		buyLiquidityFee = 0;
		buyDevFee = 0;
		buyBuyBackFee = 0;
		buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee + buyBuyBackFee;

		sellMarketingFee = 0;
		sellLiquidityFee = 0;
		sellDevFee = 0;
		sellBuyBackFee = 0;
		sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee + sellBuyBackFee;

		marketingWallet = address(_owner); // set as marketing wallet
		devWallet = address(_owner); // set as dev wallet
		buyBackWallet = address(_owner); // set as buyBackWallet

		address currentRouter;

		//Adding Variables for all the routers for easier deployment for our customers.
		if (block.chainid == 56) {
			currentRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // PCS Router
		} else if (block.chainid == 97) {
			currentRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // PCS Testnet
		} else if (block.chainid == 43114) {
			currentRouter = 0x60aE616a2155Ee3d9A68541Ba4544862310933d4; //Avax Mainnet
		} else if (block.chainid == 137) {
			currentRouter = 0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff; //Polygon Ropsten
		} else if (block.chainid == 250) {
			currentRouter = 0xF491e7B69E4244ad4002BC14e878a34207E38c29; //SpookySwap FTM
		} else if (block.chainid == 3) {
			currentRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; //Ropsten
		} else if (block.chainid == 1 || block.chainid == 4) {
			currentRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; //Mainnet
		} else {
			revert();
		}

		//End of Router Variables.

		IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(currentRouter);

		excludeFromMaxTransaction(address(_uniswapV2Router), true);
		uniswapV2Router = _uniswapV2Router;

		uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
		excludeFromMaxTransaction(address(uniswapV2Pair), true);
		_setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

		// exclude from paying fees or having max transaction amount
		excludeFromFees(_owner, true);
		excludeFromFees(address(this), true);
		excludeFromFees(address(0xdead), true);

		excludeFromMaxTransaction(_owner, true);
		excludeFromMaxTransaction(address(this), true);
		excludeFromMaxTransaction(address(0xdead), true);

		/*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
		_mint(_owner, totalSupply);
		transferOwnership(_owner);
	}

	receive() external payable {}

	// once enabled, can never be turned off
	function enableTrading() external onlyOwner {
		tradingActive = true;
		swapEnabled = true;
		tradingActiveBlock = block.number;
	}

	// remove limits after token is stable
	function removeLimits() external onlyOwner returns (bool) {
		limitsInEffect = false;
		return true;
	}

	function airdropToWallets(address[] memory airdropWallets, uint256[] memory amounts) external onlyOwner returns (bool) {
		require(!tradingActive, 'Trading is already active, cannot airdrop after launch.');
		require(airdropWallets.length == amounts.length, 'arrays must be the same length');
		require(airdropWallets.length < 200, 'Can only airdrop 200 wallets per txn due to gas limits'); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
		for (uint256 i = 0; i < airdropWallets.length; i++) {
			address wallet = airdropWallets[i];
			uint256 amount = amounts[i];
			_transfer(msg.sender, wallet, amount);
		}
		return true;
	}

	function updateMaxAmount(uint256 newNum) external onlyOwner {
		require(newNum >= ((totalSupply() * 1) / 100) / (10 ** _decimals), 'Cannot set maxTransactionAmount lower than 1%');
		maxTransactionAmount = newNum * (10 ** _decimals);
	}

	function updateMaxWallet(uint256 newNum) external onlyOwner {
		require(newNum >= ((totalSupply() * 1) / 100) / (10 ** _decimals), 'Cannot set maxTransactionAmount lower than 1%');
		maxWallet = newNum * (10 ** _decimals);
	}

	function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
		_isExcludedMaxTransactionAmount[updAds] = isEx;
	}

	function decimals() public view override returns (uint8) {
		return _decimals;
	}

	// only use to disable contract sales if absolutely necessary (emergency use only)
	function updateSwapEnabled(bool enabled) external onlyOwner {
		swapEnabled = enabled;
	}

	// only use this to disable swapback and send tax in form of tokens
	function updateRescueSwap(bool enabled) external onlyOwner {
		rescueSwap = enabled;
	}

	function excludeFromFees(address account, bool excluded) public onlyOwner {
		_isExcludedFromFees[account] = excluded;
		emit ExcludeFromFees(account, excluded);
	}

	function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
		require(pair != uniswapV2Pair, 'The pair cannot be removed from automatedMarketMakerPairs');

		_setAutomatedMarketMakerPair(pair, value);
	}

	function _setAutomatedMarketMakerPair(address pair, bool value) private {
		automatedMarketMakerPairs[pair] = value;

		emit SetAutomatedMarketMakerPair(pair, value);
	}

	function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
		emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
		marketingWallet = newMarketingWallet;
	}

	function updateDevWallet(address newWallet) external onlyOwner {
		emit devWalletUpdated(newWallet, devWallet);
		devWallet = newWallet;
	}

	function updateBuyBackWallet(address newWallet) external onlyOwner {
		emit buyBackWalletUpdated(newWallet, buyBackWallet);
		buyBackWallet = newWallet;
	}

	function isExcludedFromFees(address account) external view returns (bool) {
		return _isExcludedFromFees[account];
	}

	function _transfer(address from, address to, uint256 amount) internal override {
		require(from != address(0), 'ERC20: transfer from the zero address');
		require(to != address(0), 'ERC20: transfer to the zero address');
		if (!tradingActive) {
			require(_isExcludedFromFees[from] || _isExcludedFromFees[to], 'Trading is not active.');
		}
		if (amount == 0) {
			super._transfer(from, to, 0);
			return;
		}

		if (limitsInEffect) {
			if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !(_isExcludedFromFees[from] || _isExcludedFromFees[to]) && !swapping) {
				//when buy
				if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
					require(amount <= maxTransactionAmount, 'Buy transfer amount exceeds the maxTransactionAmount.');
					require(amount + balanceOf(to) <= maxWallet, 'Max wallet exceeded');
				}
				//when sell
				else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
					require(amount <= maxTransactionAmount, 'Sell transfer amount exceeds the maxTransactionAmount.');
				} else {
					require(amount + balanceOf(to) <= maxWallet, 'Max wallet exceeded');
				}
			}
		}

		uint256 contractTokenBalance = balanceOf(address(this));

		bool canSwap = contractTokenBalance > 0;

		if (canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
			swapping = true;

			swapBack();

			swapping = false;
		}

		bool takeFee = !swapping;

		// if any account belongs to _isExcludedFromFee account then remove the fee
		if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
			takeFee = false;
		}

		uint256 fees = 0;
		// only take fees on buys/sells, do not take on wallet transfers
		if (takeFee) {
			if (automatedMarketMakerPairs[to]) {
				if (sellTotalFees > 0) {
					fees = amount.mul(sellTotalFees).div(100);
					tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
					tokensForDev += (fees * sellDevFee) / sellTotalFees;
					tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
					tokensForBuyBack += (fees * sellBuyBackFee) / sellTotalFees;
				}
			}
			// on buy
			else if (automatedMarketMakerPairs[from]) {
				if (buyTotalFees > 0) {
					fees = amount.mul(buyTotalFees).div(100);
					tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
					tokensForDev += (fees * buyDevFee) / buyTotalFees;
					tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
					tokensForBuyBack += (fees * buyBuyBackFee) / buyTotalFees;
				}
			}

			if (fees > 0) {
				super._transfer(from, address(this), fees);
			}

			amount -= fees;
		}

		super._transfer(from, to, amount);
	}

	function swapTokensForEth(uint256 tokenAmount) private {
		// generate the uniswap pair path of token -> weth
		address[] memory path = new address[](2);
		path[0] = address(this);
		path[1] = uniswapV2Router.WETH();

		_approve(address(this), address(uniswapV2Router), tokenAmount);

		// make the swap
		try
			uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
				tokenAmount,
				0, // accept any amount of ETH
				path,
				address(this),
				block.timestamp
			)
		{} catch {}
	}

	function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
		// approve token transfer to cover all possible scenarios
		_approve(address(this), address(uniswapV2Router), tokenAmount);

		// add the liquidity
		try
			uniswapV2Router.addLiquidityETH{ value: ethAmount }(
				address(this),
				tokenAmount,
				0, // slippage is unavoidable
				0, // slippage is unavoidable
				deadAddress,
				block.timestamp
			)
		{} catch {}
	}

	function resetTaxAmount() public onlyOwner {
		tokensForLiquidity = 0;
		tokensForMarketing = 0;
		tokensForDev = 0;
		tokensForBuyBack = 0;
	}

	function swapBack() private {
		uint256 contractBalance = balanceOf(address(this));

		if (rescueSwap) {
			if (contractBalance > 0) {
				super._transfer(address(this), marketingWallet, contractBalance);
			}
			return;
		}

		uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev + tokensForBuyBack;
		bool success;

		if (contractBalance == 0 || totalTokensToSwap == 0) {
			return;
		}

		// Halve the amount of liquidity tokens
		uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2;
		uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

		uint256 initialETHBalance = address(this).balance;

		swapTokensForEth(amountToSwapForETH);

		uint256 ethBalance = address(this).balance.sub(initialETHBalance);

		uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
		uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
		uint256 ethForBuyBack = ethBalance.mul(tokensForBuyBack).div(totalTokensToSwap);

		uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev - ethForBuyBack;

		tokensForLiquidity = 0;
		tokensForMarketing = 0;
		tokensForDev = 0;
		tokensForBuyBack = 0;

		(success, ) = address(devWallet).call{ value: ethForDev }('');
		(success, ) = address(buyBackWallet).call{ value: ethForBuyBack }('');

		if (liquidityTokens > 0 && ethForLiquidity > 0) {
			addLiquidity(liquidityTokens, ethForLiquidity);
			emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
		}

		(success, ) = address(marketingWallet).call{ value: address(this).balance }('');
	}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyBackTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"buyBackWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdropToWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":"buyBackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBuyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"resetTaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBuyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBuyBack","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateBuyBackWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateRescueSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600b805464ffffffff00191661010017905534801562000022575f80fd5b506040518060400160405280601081526020016f4e6f6e2d506c617961626c652050656960801b815250604051806040016040528060048152602001634e50454960e01b81525081600390816200007a91906200096f565b5060046200008982826200096f565b5050505f6200009d6200050d60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f905f80516020620039c7833981519152908290a350600b805460ff1916601290811790915533905f90620000f990600a62000b44565b6200010c9066017e9d8602b40062000b5b565b905060646200011d82600162000b5b565b62000129919062000b75565b60095560646200013b82600162000b5b565b62000147919062000b75565b600a555f600e819055600f81905560108190556011819055806200016c818062000b95565b62000178919062000b95565b62000184919062000b95565b600d555f601381905560148190556015819055601681905580620001a9818062000b95565b620001b5919062000b95565b620001c1919062000b95565b601255600680546001600160a01b0384166001600160a01b03199182168117909255600780548216831790556008805490911690911790555f466038036200021f57507310ed43c718714eb63d5aa57b78b54704e256024e6200030f565b4660610362000244575073d99d1c33f9fc3444f8101754abc46c52416550d16200030f565b4661a86a036200026a57507360ae616a2155ee3d9a68541ba4544862310933d46200030f565b466089036200028f575073a5e0829caced8ffdd4de3c43696c57f7d7a678ff6200030f565b4660fa03620002b4575073f491e7b69e4244ad4002bc14e878a34207e38c296200030f565b46600303620002d95750737a250d5630b4cf539739df2c5dacb4c659f2488d6200030f565b4660011480620002e95750466004145b156200030b5750737a250d5630b4cf539739df2c5dacb4c659f2488d6200030f565b5f80fd5b806200031d81600162000511565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000366573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200038c919062000bab565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003d8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003fe919062000bab565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000449573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200046f919062000bab565b6001600160a01b031660a08190526200048a90600162000511565b60a0516200049a90600162000589565b620004a7846001620005dc565b620004b4306001620005dc565b620004c361dead6001620005dc565b620004d084600162000511565b620004dd30600162000511565b620004ec61dead600162000511565b620004f8848462000684565b620005038462000766565b5050505062000bd3565b3390565b6005546001600160a01b031633146200055f5760405162461bcd60e51b815260206004820181905260248201525f80516020620039a783398151915260448201526064015b60405180910390fd5b6001600160a01b03919091165f908152601c60205260409020805460ff1916911515919091179055565b6001600160a01b0382165f818152601d6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620006265760405162461bcd60e51b815260206004820181905260248201525f80516020620039a7833981519152604482015260640162000556565b6001600160a01b0382165f818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006dc5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000556565b600254620006eb908262000865565b6002556001600160a01b0382165f9081526020819052604090205462000712908262000865565b6001600160a01b0383165f81815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6005546001600160a01b03163314620007b05760405162461bcd60e51b815260206004820181905260248201525f80516020620039a7833981519152604482015260640162000556565b6001600160a01b038116620008175760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000556565b6005546040516001600160a01b038084169216905f80516020620039c7833981519152905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b505050565b5f8062000873838562000b95565b905083811015620008c75760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000556565b90505b92915050565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620008f957607f821691505b6020821081036200091857634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000860575f81815260208120601f850160051c81016020861015620009465750805b601f850160051c820191505b81811015620009675782815560010162000952565b505050505050565b81516001600160401b038111156200098b576200098b620008d0565b620009a3816200099c8454620008e4565b846200091e565b602080601f831160018114620009d9575f8415620009c15750858301515b5f19600386901b1c1916600185901b17855562000967565b5f85815260208120601f198616915b8281101562000a0957888601518255948401946001909101908401620009e8565b508582101562000a2757878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b600181815b8085111562000a8b57815f190482111562000a6f5762000a6f62000a37565b8085161562000a7d57918102915b93841c939080029062000a50565b509250929050565b5f8262000aa357506001620008ca565b8162000ab157505f620008ca565b816001811462000aca576002811462000ad55762000af5565b6001915050620008ca565b60ff84111562000ae95762000ae962000a37565b50506001821b620008ca565b5060208310610133831016604e8410600b841016171562000b1a575081810a620008ca565b62000b26838362000a4b565b805f190482111562000b3c5762000b3c62000a37565b029392505050565b5f62000b5460ff84168362000a93565b9392505050565b8082028115828204841417620008ca57620008ca62000a37565b5f8262000b9057634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115620008ca57620008ca62000a37565b5f6020828403121562000bbc575f80fd5b81516001600160a01b0381168114620008c7575f80fd5b60805160a051612d8862000c1f5f395f818161061d015261123101525f818161047a015281816123d80152818161248f015281816124cb0152818161253f015261259b0152612d885ff3fe608060405260043610610374575f3560e01c80637571336a116101c8578063a0d82dc5116100fd578063c8c8ebe41161009d578063f11a24d31161006d578063f11a24d314610a0e578063f2fde38b14610a23578063f637434214610a42578063f8b45b0514610a57575f80fd5b8063c8c8ebe41461098b578063d85ba063146109a0578063dd62ed3e146109b5578063ee40166e146109f9575f80fd5b8063aacebbe3116100d8578063aacebbe314610900578063b62496f51461091f578063bbc0c7421461094d578063c02466681461096c575f80fd5b8063a0d82dc5146108ad578063a457c2d7146108c2578063a9059cbb146108e1575f80fd5b8063921369131161016857806395d89b411161014357806395d89b41146108505780639a7a23d6146108645780639c3b4fdc146108835780639fccce3214610898575f80fd5b806392136913146107fd578063924de9b714610812578063955b225b14610831575f80fd5b80637dd72e8d116101a35780637dd72e8d146107995780638a8c523c146107ad5780638da5cb5b146107c15780638ea5220f146107de575f80fd5b80637571336a1461074657806375f0a874146107655780637bce5a0414610784575f80fd5b80631fe70a98116102a95780634a62bb65116102495780636ddd1713116102195780636ddd1713146106ca57806370a08231146106ea578063715018a61461071e578063751039fc14610732575f80fd5b80634a62bb651461063f5780634c24c51d1461065d5780634fbee1931461067e5780636a486a8e146106b5575f80fd5b806327c8f8351161028457806327c8f835146105b7578063313ce567146105cc57806339509351146105ed57806349bd5a5e1461060c575f80fd5b80631fe70a98146105645780632307b4411461057957806323b872dd14610598575f80fd5b806318160ddd116103145780631a8145bb116102ef5780631a8145bb146104fc5780631c499ab0146105115780631cd348c0146105305780631f3fed8f1461054f575f80fd5b806318160ddd146104b45780631816467f146104c85780631a221dbb146104e7575f80fd5b80630b166d501161034f5780630b166d50146103f9578063106b5da11461041c57806310d5de531461043b5780631694505e14610469575f80fd5b806306e7b14d1461037f57806306fdde03146103a0578063095ea7b3146103ca575f80fd5b3661037b57005b5f80fd5b34801561038a575f80fd5b5061039e610399366004612656565b610a6c565b005b3480156103ab575f80fd5b506103b4610afb565b6040516103c19190612671565b60405180910390f35b3480156103d5575f80fd5b506103e96103e43660046126bc565b610b8b565b60405190151581526020016103c1565b348015610404575f80fd5b5061040e601a5481565b6040519081526020016103c1565b348015610427575f80fd5b5061039e6104363660046126e6565b610ba1565b348015610446575f80fd5b506103e9610455366004612656565b601c6020525f908152604090205460ff1681565b348015610474575f80fd5b5061049c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103c1565b3480156104bf575f80fd5b5060025461040e565b3480156104d3575f80fd5b5061039e6104e2366004612656565b610c46565b3480156104f2575f80fd5b5061040e60165481565b348015610507575f80fd5b5061040e60185481565b34801561051c575f80fd5b5061039e61052b3660046126e6565b610ccc565b34801561053b575f80fd5b5060085461049c906001600160a01b031681565b34801561055a575f80fd5b5061040e60175481565b34801561056f575f80fd5b5061040e60115481565b348015610584575f80fd5b506103e96105933660046127cd565b610d71565b3480156105a3575f80fd5b506103e96105b2366004612889565b610f4c565b3480156105c2575f80fd5b5061049c61dead81565b3480156105d7575f80fd5b50600b5460405160ff90911681526020016103c1565b3480156105f8575f80fd5b506103e96106073660046126bc565b610fa9565b348015610617575f80fd5b5061049c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561064a575f80fd5b50600b546103e990610100900460ff1681565b348015610668575f80fd5b50600b546103e990640100000000900460ff1681565b348015610689575f80fd5b506103e9610698366004612656565b6001600160a01b03165f908152601b602052604090205460ff1690565b3480156106c0575f80fd5b5061040e60125481565b3480156106d5575f80fd5b50600b546103e9906301000000900460ff1681565b3480156106f5575f80fd5b5061040e610704366004612656565b6001600160a01b03165f9081526020819052604090205490565b348015610729575f80fd5b5061039e610fde565b34801561073d575f80fd5b506103e9611051565b348015610751575f80fd5b5061039e6107603660046128db565b61108e565b348015610770575f80fd5b5060065461049c906001600160a01b031681565b34801561078f575f80fd5b5061040e600e5481565b3480156107a4575f80fd5b5061039e6110e2565b3480156107b8575f80fd5b5061039e611121565b3480156107cc575f80fd5b506005546001600160a01b031661049c565b3480156107e9575f80fd5b5060075461049c906001600160a01b031681565b348015610808575f80fd5b5061040e60135481565b34801561081d575f80fd5b5061039e61082c36600461290e565b611164565b34801561083c575f80fd5b5061039e61084b36600461290e565b6111ac565b34801561085b575f80fd5b506103b46111f6565b34801561086f575f80fd5b5061039e61087e3660046128db565b611205565b34801561088e575f80fd5b5061040e60105481565b3480156108a3575f80fd5b5061040e60195481565b3480156108b8575f80fd5b5061040e60155481565b3480156108cd575f80fd5b506103e96108dc3660046126bc565b6112e4565b3480156108ec575f80fd5b506103e96108fb3660046126bc565b611331565b34801561090b575f80fd5b5061039e61091a366004612656565b61133d565b34801561092a575f80fd5b506103e9610939366004612656565b601d6020525f908152604090205460ff1681565b348015610958575f80fd5b50600b546103e99062010000900460ff1681565b348015610977575f80fd5b5061039e6109863660046128db565b6113c3565b348015610996575f80fd5b5061040e60095481565b3480156109ab575f80fd5b5061040e600d5481565b3480156109c0575f80fd5b5061040e6109cf366004612927565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610a04575f80fd5b5061040e600c5481565b348015610a19575f80fd5b5061040e600f5481565b348015610a2e575f80fd5b5061039e610a3d366004612656565b61144b565b348015610a4d575f80fd5b5061040e60145481565b348015610a62575f80fd5b5061040e600a5481565b6005546001600160a01b03163314610a9f5760405162461bcd60e51b8152600401610a969061295e565b60405180910390fd5b6008546040516001600160a01b03918216918316907f15e571905a1c816ac9ad091c2b82079da1ad3668d345e3894c424c5e5b47d97b905f90a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b606060038054610b0a90612993565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3690612993565b8015610b815780601f10610b5857610100808354040283529160200191610b81565b820191905f5260205f20905b815481529060010190602001808311610b6457829003601f168201915b5050505050905090565b5f610b97338484611535565b5060015b92915050565b6005546001600160a01b03163314610bcb5760405162461bcd60e51b8152600401610a969061295e565b600b54610bdc9060ff16600a612abf565b6064610be760025490565b610bf2906001612acd565b610bfc9190612ae4565b610c069190612ae4565b811015610c255760405162461bcd60e51b8152600401610a9690612b03565b600b54610c369060ff16600a612abf565b610c409082612acd565b60095550565b6005546001600160a01b03163314610c705760405162461bcd60e51b8152600401610a969061295e565b6007546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e743905f90a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610cf65760405162461bcd60e51b8152600401610a969061295e565b600b54610d079060ff16600a612abf565b6064610d1260025490565b610d1d906001612acd565b610d279190612ae4565b610d319190612ae4565b811015610d505760405162461bcd60e51b8152600401610a9690612b03565b600b54610d619060ff16600a612abf565b610d6b9082612acd565b600a5550565b6005545f906001600160a01b03163314610d9d5760405162461bcd60e51b8152600401610a969061295e565b600b5462010000900460ff1615610e1c5760405162461bcd60e51b815260206004820152603760248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201527f742061697264726f70206166746572206c61756e63682e0000000000000000006064820152608401610a96565b8151835114610e6d5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610a96565b60c8835110610edd5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610a96565b5f5b8351811015610f42575f848281518110610efb57610efb612b50565b602002602001015190505f848381518110610f1857610f18612b50565b60200260200101519050610f2d338383611659565b50508080610f3a90612b64565b915050610edf565b5060019392505050565b5f610f58848484611659565b610f428433610fa485604051806060016040528060288152602001612d06602891396001600160a01b038a165f9081526001602090815260408083203384529091529020549190611dcb565b611535565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610b97918590610fa49086611e03565b6005546001600160a01b031633146110085760405162461bcd60e51b8152600401610a969061295e565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005545f906001600160a01b0316331461107d5760405162461bcd60e51b8152600401610a969061295e565b50600b805461ff0019169055600190565b6005546001600160a01b031633146110b85760405162461bcd60e51b8152600401610a969061295e565b6001600160a01b03919091165f908152601c60205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461110c5760405162461bcd60e51b8152600401610a969061295e565b5f601881905560178190556019819055601a55565b6005546001600160a01b0316331461114b5760405162461bcd60e51b8152600401610a969061295e565b600b805463ffff00001916630101000017905543600c55565b6005546001600160a01b0316331461118e5760405162461bcd60e51b8152600401610a969061295e565b600b805491151563010000000263ff00000019909216919091179055565b6005546001600160a01b031633146111d65760405162461bcd60e51b8152600401610a969061295e565b600b80549115156401000000000264ff0000000019909216919091179055565b606060048054610b0a90612993565b6005546001600160a01b0316331461122f5760405162461bcd60e51b8152600401610a969061295e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036112d65760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a96565b6112e08282611e68565b5050565b5f610b973384610fa485604051806060016040528060258152602001612d2e60259139335f9081526001602090815260408083206001600160a01b038d1684529091529020549190611dcb565b5f610b97338484611659565b6005546001600160a01b031633146113675760405162461bcd60e51b8152600401610a969061295e565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b05674905f90a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146113ed5760405162461bcd60e51b8152600401610a969061295e565b6001600160a01b0382165f818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146114755760405162461bcd60e51b8152600401610a969061295e565b6001600160a01b0381166114da5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a96565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166115975760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a96565b6001600160a01b0382166115f85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a96565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661167f5760405162461bcd60e51b8152600401610a9690612b7c565b6001600160a01b0382166116a55760405162461bcd60e51b8152600401610a9690612bc1565b600b5462010000900460ff16611737576001600160a01b0383165f908152601b602052604090205460ff16806116f257506001600160a01b0382165f908152601b602052604090205460ff165b6117375760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a96565b805f0361174e5761174983835f611ebb565b505050565b600b54610100900460ff1615611a56576005546001600160a01b0384811691161480159061178a57506005546001600160a01b03838116911614155b801561179e57506001600160a01b03821615155b80156117b557506001600160a01b03821661dead14155b80156117fb57506001600160a01b0383165f908152601b602052604090205460ff16806117f957506001600160a01b0382165f908152601b602052604090205460ff165b155b80156118115750600554600160a01b900460ff16155b15611a56576001600160a01b0383165f908152601d602052604090205460ff16801561185557506001600160a01b0382165f908152601c602052604090205460ff16155b15611938576009548111156118ca5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610a96565b600a546001600160a01b0383165f908152602081905260409020546118ef9083612c04565b11156119335760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a96565b611a56565b6001600160a01b0382165f908152601d602052604090205460ff16801561197757506001600160a01b0383165f908152601c602052604090205460ff16155b156119ed576009548111156119335760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610a96565b600a546001600160a01b0383165f90815260208190526040902054611a129083612c04565b1115611a565760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a96565b305f9081526020819052604090205480158015908190611a7f5750600b546301000000900460ff165b8015611a955750600554600160a01b900460ff16155b8015611ab957506001600160a01b0385165f908152601d602052604090205460ff16155b8015611add57506001600160a01b0385165f908152601b602052604090205460ff16155b8015611b0157506001600160a01b0384165f908152601b602052604090205460ff16155b15611b2f576005805460ff60a01b1916600160a01b179055611b21611fc1565b6005805460ff60a01b191690555b6005546001600160a01b0386165f908152601b602052604090205460ff600160a01b909204821615911680611b7b57506001600160a01b0385165f908152601b602052604090205460ff165b15611b8357505f5b5f8115611db7576001600160a01b0386165f908152601d602052604090205460ff1615611c975760125415611c9257611bd26064611bcc6012548861228390919063ffffffff16565b90612301565b905060125460145482611be59190612acd565b611bef9190612ae4565b60185f828254611bff9190612c04565b9091555050601254601554611c149083612acd565b611c1e9190612ae4565b60195f828254611c2e9190612c04565b9091555050601254601354611c439083612acd565b611c4d9190612ae4565b60175f828254611c5d9190612c04565b9091555050601254601654611c729083612acd565b611c7c9190612ae4565b601a5f828254611c8c9190612c04565b90915550505b611d99565b6001600160a01b0387165f908152601d602052604090205460ff1615611d9957600d5415611d9957611cd96064611bcc600d548861228390919063ffffffff16565b9050600d54600f5482611cec9190612acd565b611cf69190612ae4565b60185f828254611d069190612c04565b9091555050600d54601054611d1b9083612acd565b611d259190612ae4565b60195f828254611d359190612c04565b9091555050600d54600e54611d4a9083612acd565b611d549190612ae4565b60175f828254611d649190612c04565b9091555050600d54601154611d799083612acd565b611d839190612ae4565b601a5f828254611d939190612c04565b90915550505b8015611daa57611daa873083611ebb565b611db48186612c17565b94505b611dc2878787611ebb565b50505050505050565b5f8184841115611dee5760405162461bcd60e51b8152600401610a969190612671565b505f611dfa8486612c17565b95945050505050565b5f80611e0f8385612c04565b905083811015611e615760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a96565b9392505050565b6001600160a01b0382165f818152601d6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611ee15760405162461bcd60e51b8152600401610a9690612b7c565b6001600160a01b038216611f075760405162461bcd60e51b8152600401610a9690612bc1565b611f4381604051806060016040528060268152602001612ce0602691396001600160a01b0386165f908152602081905260409020549190611dcb565b6001600160a01b038085165f908152602081905260408082209390935590841681522054611f719082611e03565b6001600160a01b038381165f818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161164c565b305f90815260208190526040902054600b54640100000000900460ff1615612004578015612001576006546120019030906001600160a01b031683611ebb565b50565b5f601a5460195460175460185461201b9190612c04565b6120259190612c04565b61202f9190612c04565b90505f82158061203d575081155b1561204757505050565b5f600283601854866120599190612acd565b6120639190612ae4565b61206d9190612ae4565b90505f61207a8583612342565b90504761208682612383565b5f6120914783612342565b90505f6120ad87611bcc6017548561228390919063ffffffff16565b90505f6120c988611bcc6019548661228390919063ffffffff16565b90505f6120e589611bcc601a548761228390919063ffffffff16565b90505f81836120f48688612c17565b6120fe9190612c17565b6121089190612c17565b5f601881905560178190556019819055601a8190556007546040519293506001600160a01b031691859181818185875af1925050503d805f8114612167576040519150601f19603f3d011682016040523d82523d5f602084013e61216c565b606091505b5050600854604051919a506001600160a01b03169083905f81818185875af1925050503d805f81146121b9576040519150601f19603f3d011682016040523d82523d5f602084013e6121be565b606091505b509099505087158015906121d157505f81115b15612224576121e08882612539565b601854604080518981526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b039091169047905f81818185875af1925050503d805f811461226e576040519150601f19603f3d011682016040523d82523d5f602084013e612273565b606091505b5050505050505050505050505050565b5f825f0361229257505f610b9b565b5f61229d8385612acd565b9050826122aa8583612ae4565b14611e615760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a96565b5f611e6183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612616565b5f611e6183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611dcb565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106123b6576123b6612b50565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612432573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124569190612c2a565b8160018151811061246957612469612b50565b60200260200101906001600160a01b031690816001600160a01b0316815250506124b4307f000000000000000000000000000000000000000000000000000000000000000084611535565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906125089085905f90869030904290600401612c45565b5f604051808303815f87803b15801561251f575f80fd5b505af1925050508015612530575060015b156112e0575050565b612564307f000000000000000000000000000000000000000000000000000000000000000084611535565b60405163f305d71960e01b8152306004820152602481018390525f60448201819052606482015261dead60848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af19350505050801561260a575060408051601f3d908101601f1916820190925261260791810190612cb4565b60015b156112e0575050505050565b5f81836126365760405162461bcd60e51b8152600401610a969190612671565b505f611dfa8486612ae4565b6001600160a01b0381168114612001575f80fd5b5f60208284031215612666575f80fd5b8135611e6181612642565b5f6020808352835180828501525f5b8181101561269c57858101830151858201604001528201612680565b505f604082860101526040601f19601f8301168501019250505092915050565b5f80604083850312156126cd575f80fd5b82356126d881612642565b946020939093013593505050565b5f602082840312156126f6575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561273a5761273a6126fd565b604052919050565b5f67ffffffffffffffff82111561275b5761275b6126fd565b5060051b60200190565b5f82601f830112612774575f80fd5b8135602061278961278483612742565b612711565b82815260059290921b840181019181810190868411156127a7575f80fd5b8286015b848110156127c257803583529183019183016127ab565b509695505050505050565b5f80604083850312156127de575f80fd5b823567ffffffffffffffff808211156127f5575f80fd5b818501915085601f830112612808575f80fd5b8135602061281861278483612742565b82815260059290921b84018101918181019089841115612836575f80fd5b948201945b8386101561285d57853561284e81612642565b8252948201949082019061283b565b96505086013592505080821115612872575f80fd5b5061287f85828601612765565b9150509250929050565b5f805f6060848603121561289b575f80fd5b83356128a681612642565b925060208401356128b681612642565b929592945050506040919091013590565b803580151581146128d6575f80fd5b919050565b5f80604083850312156128ec575f80fd5b82356128f781612642565b9150612905602084016128c7565b90509250929050565b5f6020828403121561291e575f80fd5b611e61826128c7565b5f8060408385031215612938575f80fd5b823561294381612642565b9150602083013561295381612642565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806129a757607f821691505b6020821081036129c557634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115612a1957815f19048211156129ff576129ff6129cb565b80851615612a0c57918102915b93841c93908002906129e4565b509250929050565b5f82612a2f57506001610b9b565b81612a3b57505f610b9b565b8160018114612a515760028114612a5b57612a77565b6001915050610b9b565b60ff841115612a6c57612a6c6129cb565b50506001821b610b9b565b5060208310610133831016604e8410600b8410161715612a9a575081810a610b9b565b612aa483836129df565b805f1904821115612ab757612ab76129cb565b029392505050565b5f611e6160ff841683612a21565b8082028115828204841417610b9b57610b9b6129cb565b5f82612afe57634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252602d908201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060408201526c6c6f776572207468616e20312560981b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b5f60018201612b7557612b756129cb565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b80820180821115610b9b57610b9b6129cb565b81810381811115610b9b57610b9b6129cb565b5f60208284031215612c3a575f80fd5b8151611e6181612642565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612c935784516001600160a01b031683529383019391830191600101612c6e565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612cc6575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e449b6e78cbe6c36d6a9162bb0b865e2a6c199442870d898270d5d493a9b966f64736f6c634300081400334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x608060405260043610610374575f3560e01c80637571336a116101c8578063a0d82dc5116100fd578063c8c8ebe41161009d578063f11a24d31161006d578063f11a24d314610a0e578063f2fde38b14610a23578063f637434214610a42578063f8b45b0514610a57575f80fd5b8063c8c8ebe41461098b578063d85ba063146109a0578063dd62ed3e146109b5578063ee40166e146109f9575f80fd5b8063aacebbe3116100d8578063aacebbe314610900578063b62496f51461091f578063bbc0c7421461094d578063c02466681461096c575f80fd5b8063a0d82dc5146108ad578063a457c2d7146108c2578063a9059cbb146108e1575f80fd5b8063921369131161016857806395d89b411161014357806395d89b41146108505780639a7a23d6146108645780639c3b4fdc146108835780639fccce3214610898575f80fd5b806392136913146107fd578063924de9b714610812578063955b225b14610831575f80fd5b80637dd72e8d116101a35780637dd72e8d146107995780638a8c523c146107ad5780638da5cb5b146107c15780638ea5220f146107de575f80fd5b80637571336a1461074657806375f0a874146107655780637bce5a0414610784575f80fd5b80631fe70a98116102a95780634a62bb65116102495780636ddd1713116102195780636ddd1713146106ca57806370a08231146106ea578063715018a61461071e578063751039fc14610732575f80fd5b80634a62bb651461063f5780634c24c51d1461065d5780634fbee1931461067e5780636a486a8e146106b5575f80fd5b806327c8f8351161028457806327c8f835146105b7578063313ce567146105cc57806339509351146105ed57806349bd5a5e1461060c575f80fd5b80631fe70a98146105645780632307b4411461057957806323b872dd14610598575f80fd5b806318160ddd116103145780631a8145bb116102ef5780631a8145bb146104fc5780631c499ab0146105115780631cd348c0146105305780631f3fed8f1461054f575f80fd5b806318160ddd146104b45780631816467f146104c85780631a221dbb146104e7575f80fd5b80630b166d501161034f5780630b166d50146103f9578063106b5da11461041c57806310d5de531461043b5780631694505e14610469575f80fd5b806306e7b14d1461037f57806306fdde03146103a0578063095ea7b3146103ca575f80fd5b3661037b57005b5f80fd5b34801561038a575f80fd5b5061039e610399366004612656565b610a6c565b005b3480156103ab575f80fd5b506103b4610afb565b6040516103c19190612671565b60405180910390f35b3480156103d5575f80fd5b506103e96103e43660046126bc565b610b8b565b60405190151581526020016103c1565b348015610404575f80fd5b5061040e601a5481565b6040519081526020016103c1565b348015610427575f80fd5b5061039e6104363660046126e6565b610ba1565b348015610446575f80fd5b506103e9610455366004612656565b601c6020525f908152604090205460ff1681565b348015610474575f80fd5b5061049c7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103c1565b3480156104bf575f80fd5b5060025461040e565b3480156104d3575f80fd5b5061039e6104e2366004612656565b610c46565b3480156104f2575f80fd5b5061040e60165481565b348015610507575f80fd5b5061040e60185481565b34801561051c575f80fd5b5061039e61052b3660046126e6565b610ccc565b34801561053b575f80fd5b5060085461049c906001600160a01b031681565b34801561055a575f80fd5b5061040e60175481565b34801561056f575f80fd5b5061040e60115481565b348015610584575f80fd5b506103e96105933660046127cd565b610d71565b3480156105a3575f80fd5b506103e96105b2366004612889565b610f4c565b3480156105c2575f80fd5b5061049c61dead81565b3480156105d7575f80fd5b50600b5460405160ff90911681526020016103c1565b3480156105f8575f80fd5b506103e96106073660046126bc565b610fa9565b348015610617575f80fd5b5061049c7f0000000000000000000000006b563f7925618a1e6b4fe69c2960ec2949117bfe81565b34801561064a575f80fd5b50600b546103e990610100900460ff1681565b348015610668575f80fd5b50600b546103e990640100000000900460ff1681565b348015610689575f80fd5b506103e9610698366004612656565b6001600160a01b03165f908152601b602052604090205460ff1690565b3480156106c0575f80fd5b5061040e60125481565b3480156106d5575f80fd5b50600b546103e9906301000000900460ff1681565b3480156106f5575f80fd5b5061040e610704366004612656565b6001600160a01b03165f9081526020819052604090205490565b348015610729575f80fd5b5061039e610fde565b34801561073d575f80fd5b506103e9611051565b348015610751575f80fd5b5061039e6107603660046128db565b61108e565b348015610770575f80fd5b5060065461049c906001600160a01b031681565b34801561078f575f80fd5b5061040e600e5481565b3480156107a4575f80fd5b5061039e6110e2565b3480156107b8575f80fd5b5061039e611121565b3480156107cc575f80fd5b506005546001600160a01b031661049c565b3480156107e9575f80fd5b5060075461049c906001600160a01b031681565b348015610808575f80fd5b5061040e60135481565b34801561081d575f80fd5b5061039e61082c36600461290e565b611164565b34801561083c575f80fd5b5061039e61084b36600461290e565b6111ac565b34801561085b575f80fd5b506103b46111f6565b34801561086f575f80fd5b5061039e61087e3660046128db565b611205565b34801561088e575f80fd5b5061040e60105481565b3480156108a3575f80fd5b5061040e60195481565b3480156108b8575f80fd5b5061040e60155481565b3480156108cd575f80fd5b506103e96108dc3660046126bc565b6112e4565b3480156108ec575f80fd5b506103e96108fb3660046126bc565b611331565b34801561090b575f80fd5b5061039e61091a366004612656565b61133d565b34801561092a575f80fd5b506103e9610939366004612656565b601d6020525f908152604090205460ff1681565b348015610958575f80fd5b50600b546103e99062010000900460ff1681565b348015610977575f80fd5b5061039e6109863660046128db565b6113c3565b348015610996575f80fd5b5061040e60095481565b3480156109ab575f80fd5b5061040e600d5481565b3480156109c0575f80fd5b5061040e6109cf366004612927565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610a04575f80fd5b5061040e600c5481565b348015610a19575f80fd5b5061040e600f5481565b348015610a2e575f80fd5b5061039e610a3d366004612656565b61144b565b348015610a4d575f80fd5b5061040e60145481565b348015610a62575f80fd5b5061040e600a5481565b6005546001600160a01b03163314610a9f5760405162461bcd60e51b8152600401610a969061295e565b60405180910390fd5b6008546040516001600160a01b03918216918316907f15e571905a1c816ac9ad091c2b82079da1ad3668d345e3894c424c5e5b47d97b905f90a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b606060038054610b0a90612993565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3690612993565b8015610b815780601f10610b5857610100808354040283529160200191610b81565b820191905f5260205f20905b815481529060010190602001808311610b6457829003601f168201915b5050505050905090565b5f610b97338484611535565b5060015b92915050565b6005546001600160a01b03163314610bcb5760405162461bcd60e51b8152600401610a969061295e565b600b54610bdc9060ff16600a612abf565b6064610be760025490565b610bf2906001612acd565b610bfc9190612ae4565b610c069190612ae4565b811015610c255760405162461bcd60e51b8152600401610a9690612b03565b600b54610c369060ff16600a612abf565b610c409082612acd565b60095550565b6005546001600160a01b03163314610c705760405162461bcd60e51b8152600401610a969061295e565b6007546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e743905f90a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610cf65760405162461bcd60e51b8152600401610a969061295e565b600b54610d079060ff16600a612abf565b6064610d1260025490565b610d1d906001612acd565b610d279190612ae4565b610d319190612ae4565b811015610d505760405162461bcd60e51b8152600401610a9690612b03565b600b54610d619060ff16600a612abf565b610d6b9082612acd565b600a5550565b6005545f906001600160a01b03163314610d9d5760405162461bcd60e51b8152600401610a969061295e565b600b5462010000900460ff1615610e1c5760405162461bcd60e51b815260206004820152603760248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201527f742061697264726f70206166746572206c61756e63682e0000000000000000006064820152608401610a96565b8151835114610e6d5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610a96565b60c8835110610edd5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610a96565b5f5b8351811015610f42575f848281518110610efb57610efb612b50565b602002602001015190505f848381518110610f1857610f18612b50565b60200260200101519050610f2d338383611659565b50508080610f3a90612b64565b915050610edf565b5060019392505050565b5f610f58848484611659565b610f428433610fa485604051806060016040528060288152602001612d06602891396001600160a01b038a165f9081526001602090815260408083203384529091529020549190611dcb565b611535565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610b97918590610fa49086611e03565b6005546001600160a01b031633146110085760405162461bcd60e51b8152600401610a969061295e565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005545f906001600160a01b0316331461107d5760405162461bcd60e51b8152600401610a969061295e565b50600b805461ff0019169055600190565b6005546001600160a01b031633146110b85760405162461bcd60e51b8152600401610a969061295e565b6001600160a01b03919091165f908152601c60205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461110c5760405162461bcd60e51b8152600401610a969061295e565b5f601881905560178190556019819055601a55565b6005546001600160a01b0316331461114b5760405162461bcd60e51b8152600401610a969061295e565b600b805463ffff00001916630101000017905543600c55565b6005546001600160a01b0316331461118e5760405162461bcd60e51b8152600401610a969061295e565b600b805491151563010000000263ff00000019909216919091179055565b6005546001600160a01b031633146111d65760405162461bcd60e51b8152600401610a969061295e565b600b80549115156401000000000264ff0000000019909216919091179055565b606060048054610b0a90612993565b6005546001600160a01b0316331461122f5760405162461bcd60e51b8152600401610a969061295e565b7f0000000000000000000000006b563f7925618a1e6b4fe69c2960ec2949117bfe6001600160a01b0316826001600160a01b0316036112d65760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a96565b6112e08282611e68565b5050565b5f610b973384610fa485604051806060016040528060258152602001612d2e60259139335f9081526001602090815260408083206001600160a01b038d1684529091529020549190611dcb565b5f610b97338484611659565b6005546001600160a01b031633146113675760405162461bcd60e51b8152600401610a969061295e565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b05674905f90a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146113ed5760405162461bcd60e51b8152600401610a969061295e565b6001600160a01b0382165f818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146114755760405162461bcd60e51b8152600401610a969061295e565b6001600160a01b0381166114da5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a96565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166115975760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a96565b6001600160a01b0382166115f85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a96565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661167f5760405162461bcd60e51b8152600401610a9690612b7c565b6001600160a01b0382166116a55760405162461bcd60e51b8152600401610a9690612bc1565b600b5462010000900460ff16611737576001600160a01b0383165f908152601b602052604090205460ff16806116f257506001600160a01b0382165f908152601b602052604090205460ff165b6117375760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a96565b805f0361174e5761174983835f611ebb565b505050565b600b54610100900460ff1615611a56576005546001600160a01b0384811691161480159061178a57506005546001600160a01b03838116911614155b801561179e57506001600160a01b03821615155b80156117b557506001600160a01b03821661dead14155b80156117fb57506001600160a01b0383165f908152601b602052604090205460ff16806117f957506001600160a01b0382165f908152601b602052604090205460ff165b155b80156118115750600554600160a01b900460ff16155b15611a56576001600160a01b0383165f908152601d602052604090205460ff16801561185557506001600160a01b0382165f908152601c602052604090205460ff16155b15611938576009548111156118ca5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610a96565b600a546001600160a01b0383165f908152602081905260409020546118ef9083612c04565b11156119335760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a96565b611a56565b6001600160a01b0382165f908152601d602052604090205460ff16801561197757506001600160a01b0383165f908152601c602052604090205460ff16155b156119ed576009548111156119335760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610a96565b600a546001600160a01b0383165f90815260208190526040902054611a129083612c04565b1115611a565760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a96565b305f9081526020819052604090205480158015908190611a7f5750600b546301000000900460ff165b8015611a955750600554600160a01b900460ff16155b8015611ab957506001600160a01b0385165f908152601d602052604090205460ff16155b8015611add57506001600160a01b0385165f908152601b602052604090205460ff16155b8015611b0157506001600160a01b0384165f908152601b602052604090205460ff16155b15611b2f576005805460ff60a01b1916600160a01b179055611b21611fc1565b6005805460ff60a01b191690555b6005546001600160a01b0386165f908152601b602052604090205460ff600160a01b909204821615911680611b7b57506001600160a01b0385165f908152601b602052604090205460ff165b15611b8357505f5b5f8115611db7576001600160a01b0386165f908152601d602052604090205460ff1615611c975760125415611c9257611bd26064611bcc6012548861228390919063ffffffff16565b90612301565b905060125460145482611be59190612acd565b611bef9190612ae4565b60185f828254611bff9190612c04565b9091555050601254601554611c149083612acd565b611c1e9190612ae4565b60195f828254611c2e9190612c04565b9091555050601254601354611c439083612acd565b611c4d9190612ae4565b60175f828254611c5d9190612c04565b9091555050601254601654611c729083612acd565b611c7c9190612ae4565b601a5f828254611c8c9190612c04565b90915550505b611d99565b6001600160a01b0387165f908152601d602052604090205460ff1615611d9957600d5415611d9957611cd96064611bcc600d548861228390919063ffffffff16565b9050600d54600f5482611cec9190612acd565b611cf69190612ae4565b60185f828254611d069190612c04565b9091555050600d54601054611d1b9083612acd565b611d259190612ae4565b60195f828254611d359190612c04565b9091555050600d54600e54611d4a9083612acd565b611d549190612ae4565b60175f828254611d649190612c04565b9091555050600d54601154611d799083612acd565b611d839190612ae4565b601a5f828254611d939190612c04565b90915550505b8015611daa57611daa873083611ebb565b611db48186612c17565b94505b611dc2878787611ebb565b50505050505050565b5f8184841115611dee5760405162461bcd60e51b8152600401610a969190612671565b505f611dfa8486612c17565b95945050505050565b5f80611e0f8385612c04565b905083811015611e615760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a96565b9392505050565b6001600160a01b0382165f818152601d6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611ee15760405162461bcd60e51b8152600401610a9690612b7c565b6001600160a01b038216611f075760405162461bcd60e51b8152600401610a9690612bc1565b611f4381604051806060016040528060268152602001612ce0602691396001600160a01b0386165f908152602081905260409020549190611dcb565b6001600160a01b038085165f908152602081905260408082209390935590841681522054611f719082611e03565b6001600160a01b038381165f818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161164c565b305f90815260208190526040902054600b54640100000000900460ff1615612004578015612001576006546120019030906001600160a01b031683611ebb565b50565b5f601a5460195460175460185461201b9190612c04565b6120259190612c04565b61202f9190612c04565b90505f82158061203d575081155b1561204757505050565b5f600283601854866120599190612acd565b6120639190612ae4565b61206d9190612ae4565b90505f61207a8583612342565b90504761208682612383565b5f6120914783612342565b90505f6120ad87611bcc6017548561228390919063ffffffff16565b90505f6120c988611bcc6019548661228390919063ffffffff16565b90505f6120e589611bcc601a548761228390919063ffffffff16565b90505f81836120f48688612c17565b6120fe9190612c17565b6121089190612c17565b5f601881905560178190556019819055601a8190556007546040519293506001600160a01b031691859181818185875af1925050503d805f8114612167576040519150601f19603f3d011682016040523d82523d5f602084013e61216c565b606091505b5050600854604051919a506001600160a01b03169083905f81818185875af1925050503d805f81146121b9576040519150601f19603f3d011682016040523d82523d5f602084013e6121be565b606091505b509099505087158015906121d157505f81115b15612224576121e08882612539565b601854604080518981526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b039091169047905f81818185875af1925050503d805f811461226e576040519150601f19603f3d011682016040523d82523d5f602084013e612273565b606091505b5050505050505050505050505050565b5f825f0361229257505f610b9b565b5f61229d8385612acd565b9050826122aa8583612ae4565b14611e615760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a96565b5f611e6183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612616565b5f611e6183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611dcb565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106123b6576123b6612b50565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612432573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124569190612c2a565b8160018151811061246957612469612b50565b60200260200101906001600160a01b031690816001600160a01b0316815250506124b4307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611535565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906125089085905f90869030904290600401612c45565b5f604051808303815f87803b15801561251f575f80fd5b505af1925050508015612530575060015b156112e0575050565b612564307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611535565b60405163f305d71960e01b8152306004820152602481018390525f60448201819052606482015261dead60848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af19350505050801561260a575060408051601f3d908101601f1916820190925261260791810190612cb4565b60015b156112e0575050505050565b5f81836126365760405162461bcd60e51b8152600401610a969190612671565b505f611dfa8486612ae4565b6001600160a01b0381168114612001575f80fd5b5f60208284031215612666575f80fd5b8135611e6181612642565b5f6020808352835180828501525f5b8181101561269c57858101830151858201604001528201612680565b505f604082860101526040601f19601f8301168501019250505092915050565b5f80604083850312156126cd575f80fd5b82356126d881612642565b946020939093013593505050565b5f602082840312156126f6575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561273a5761273a6126fd565b604052919050565b5f67ffffffffffffffff82111561275b5761275b6126fd565b5060051b60200190565b5f82601f830112612774575f80fd5b8135602061278961278483612742565b612711565b82815260059290921b840181019181810190868411156127a7575f80fd5b8286015b848110156127c257803583529183019183016127ab565b509695505050505050565b5f80604083850312156127de575f80fd5b823567ffffffffffffffff808211156127f5575f80fd5b818501915085601f830112612808575f80fd5b8135602061281861278483612742565b82815260059290921b84018101918181019089841115612836575f80fd5b948201945b8386101561285d57853561284e81612642565b8252948201949082019061283b565b96505086013592505080821115612872575f80fd5b5061287f85828601612765565b9150509250929050565b5f805f6060848603121561289b575f80fd5b83356128a681612642565b925060208401356128b681612642565b929592945050506040919091013590565b803580151581146128d6575f80fd5b919050565b5f80604083850312156128ec575f80fd5b82356128f781612642565b9150612905602084016128c7565b90509250929050565b5f6020828403121561291e575f80fd5b611e61826128c7565b5f8060408385031215612938575f80fd5b823561294381612642565b9150602083013561295381612642565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806129a757607f821691505b6020821081036129c557634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115612a1957815f19048211156129ff576129ff6129cb565b80851615612a0c57918102915b93841c93908002906129e4565b509250929050565b5f82612a2f57506001610b9b565b81612a3b57505f610b9b565b8160018114612a515760028114612a5b57612a77565b6001915050610b9b565b60ff841115612a6c57612a6c6129cb565b50506001821b610b9b565b5060208310610133831016604e8410600b8410161715612a9a575081810a610b9b565b612aa483836129df565b805f1904821115612ab757612ab76129cb565b029392505050565b5f611e6160ff841683612a21565b8082028115828204841417610b9b57610b9b6129cb565b5f82612afe57634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252602d908201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060408201526c6c6f776572207468616e20312560981b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b5f60018201612b7557612b756129cb565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b80820180821115610b9b57610b9b6129cb565b81810381811115610b9b57610b9b6129cb565b5f60208284031215612c3a575f80fd5b8151611e6181612642565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612c935784516001600160a01b031683529383019391830191600101612c6e565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612cc6575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e449b6e78cbe6c36d6a9162bb0b865e2a6c199442870d898270d5d493a9b966f64736f6c63430008140033

Deployed Bytecode Sourcemap

26082:13969:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34133:158;;;;;;;;;;-1:-1:-1;34133:158:0;;;;;:::i;:::-;;:::i;:::-;;6916:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8870:154;;;;;;;;;;-1:-1:-1;8870:154:0;;;;;:::i;:::-;;:::i;:::-;;;1440:14:1;;1433:22;1415:41;;1403:2;1388:18;8870:154:0;1275:187:1;27142:31:0;;;;;;;;;;;;;;;;;;;1613:25:1;;;1601:2;1586:18;27142:31:0;1467:177:1;32152:239:0;;;;;;;;;;-1:-1:-1;32152:239:0;;;;;:::i;:::-;;:::i;27310:63::-;;;;;;;;;;-1:-1:-1;27310:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26151:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2025:32:1;;;2007:51;;1995:2;1980:18;26151:51:0;1834:230:1;7940:99:0;;;;;;;;;;-1:-1:-1;8022:12:0;;7940:99;;33986:142;;;;;;;;;;-1:-1:-1;33986:142:0;;;;;:::i;:::-;;:::i;27002:29::-;;;;;;;;;;;;;;;;27074:33;;;;;;;;;;;;;;;;32396:228;;;;;;;;;;-1:-1:-1;32396:228:0;;;;;:::i;:::-;;:::i;26396:28::-;;;;;;;;;;-1:-1:-1;26396:28:0;;;;-1:-1:-1;;;;;26396:28:0;;;27037:33;;;;;;;;;;;;;;;;26837:28;;;;;;;;;;;;;;;;31458:689;;;;;;;;;;-1:-1:-1;31458:689:0;;;;;:::i;:::-;;:::i;9464:300::-;;;;;;;;;;-1:-1:-1;9464:300:0;;;;;:::i;:::-;;:::i;26248:53::-;;;;;;;;;;;;26294:6;26248:53;;32769:83;;;;;;;;;;-1:-1:-1;32838:9:0;;32769:83;;32838:9;;;;5367:36:1;;5355:2;5340:18;32769:83:0;5225:184:1;10134:203:0;;;;;;;;;;-1:-1:-1;10134:203:0;;;;;:::i;:::-;;:::i;26206:38::-;;;;;;;;;;;;;;;26526:33;;;;;;;;;;-1:-1:-1;26526:33:0;;;;;;;;;;;26635:30;;;;;;;;;;-1:-1:-1;26635:30:0;;;;;;;;;;;34296:119;;;;;;;;;;-1:-1:-1;34296:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;34382:28:0;34364:4;34382:28;;;:19;:28;;;;;;;;;34296:119;26871:28;;;;;;;;;;;;;;;;26600:31;;;;;;;;;;-1:-1:-1;26600:31:0;;;;;;;;;;;8090:118;;;;;;;;;;-1:-1:-1;8090:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;8185:18:0;8164:7;8185:18;;;;;;;;;;;;8090:118;19935:133;;;;;;;;;;;;;:::i;31347:106::-;;;;;;;;;;;;;:::i;32629:135::-;;;;;;;;;;-1:-1:-1;32629:135:0;;;;;:::i;:::-;;:::i;26334:30::-;;;;;;;;;;-1:-1:-1;26334:30:0;;;;-1:-1:-1;;;;;26334:30:0;;;26741;;;;;;;;;;;;;;;;38216:148;;;;;;;;;;;;;:::i;31166:135::-;;;;;;;;;;;;;:::i;19353:70::-;;;;;;;;;;-1:-1:-1;19412:6:0;;-1:-1:-1;;;;;19412:6:0;19353:70;;26368:24;;;;;;;;;;-1:-1:-1;26368:24:0;;;;-1:-1:-1;;;;;26368:24:0;;;26903:31;;;;;;;;;;;;;;;;32942:91;;;;;;;;;;-1:-1:-1;32942:91:0;;;;;:::i;:::-;;:::i;33108:89::-;;;;;;;;;;-1:-1:-1;33108:89:0;;;;;:::i;:::-;;:::i;7111:95::-;;;;;;;;;;;;;:::i;33374:231::-;;;;;;;;;;-1:-1:-1;33374:231:0;;;;;:::i;:::-;;:::i;26809:24::-;;;;;;;;;;;;;;;;27111:27;;;;;;;;;;;;;;;;26973:25;;;;;;;;;;;;;;;;10795:254;;;;;;;;;;-1:-1:-1;10795:254:0;;;;;:::i;:::-;;:::i;8394:160::-;;;;;;;;;;-1:-1:-1;8394:160:0;;;;;:::i;:::-;;:::i;33788:193::-;;;;;;;;;;-1:-1:-1;33788:193:0;;;;;:::i;:::-;;:::i;27522:57::-;;;;;;;;;;-1:-1:-1;27522:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26563:33;;;;;;;;;;-1:-1:-1;26563:33:0;;;;;;;;;;;33202:167;;;;;;;;;;-1:-1:-1;33202:167:0;;;;;:::i;:::-;;:::i;26430:35::-;;;;;;;;;;;;;;;;26710:27;;;;;;;;;;;;;;;;8605:142;;;;;;;;;;-1:-1:-1;8605:142:0;;;;;:::i;:::-;-1:-1:-1;;;;;8715:18:0;;;8694:7;8715:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8605:142;26671:33;;;;;;;;;;;;;;;;26775:30;;;;;;;;;;;;;;;;20208:223;;;;;;;;;;-1:-1:-1;20208:223:0;;;;;:::i;:::-;;:::i;26938:31::-;;;;;;;;;;;;;;;;26469:24;;;;;;;;;;;;;;;;34133:158;19538:6;;-1:-1:-1;;;;;19538:6:0;170:10;19538:22;19530:67;;;;-1:-1:-1;;;19530:67:0;;;;;;;:::i;:::-;;;;;;;;;34242:13:::1;::::0;34210:46:::1;::::0;-1:-1:-1;;;;;34242:13:0;;::::1;::::0;34210:46;::::1;::::0;::::1;::::0;34242:13:::1;::::0;34210:46:::1;34261:13;:25:::0;;-1:-1:-1;;;;;;34261:25:0::1;-1:-1:-1::0;;;;;34261:25:0;;;::::1;::::0;;;::::1;::::0;;34133:158::o;6916:91::-;6970:13;6997:5;6990:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6916:91;:::o;8870:154::-;8953:4;8964:39;170:10;8987:7;8996:6;8964:8;:39::i;:::-;-1:-1:-1;9015:4:0;8870:154;;;;;:::o;32152:239::-;19538:6;;-1:-1:-1;;;;;19538:6:0;170:10;19538:22;19530:67;;;;-1:-1:-1;;;19530:67:0;;;;;;;:::i;:::-;32272:9:::1;::::0;32266:15:::1;::::0;32272:9:::1;;32266:2;:15;:::i;:::-;32258:3;32237:13;8022:12:::0;;;7940:99;32237:13:::1;:17;::::0;32253:1:::1;32237:17;:::i;:::-;32236:25;;;;:::i;:::-;32235:47;;;;:::i;:::-;32225:6;:57;;32217:115;;;;-1:-1:-1::0;;;32217:115:0::1;;;;;;;:::i;:::-;32376:9;::::0;32370:15:::1;::::0;32376:9:::1;;32370:2;:15;:::i;:::-;32360:26;::::0;:6;:26:::1;:::i;:::-;32337:20;:49:::0;-1:-1:-1;32152:239:0:o;33986:142::-;19538:6;;-1:-1:-1;;;;;19538:6:0;170:10;19538:22;19530:67;;;;-1:-1:-1;;;19530:67:0;;;;;;;:::i;:::-;34087:9:::1;::::0;34059:38:::1;::::0;-1:-1:-1;;;;;34087:9:0;;::::1;::::0;34059:38;::::1;::::0;::::1;::::0;34087:9:::1;::::0;34059:38:::1;34102:9;:21:::0;;-1:-1:-1;;;;;;34102:21:0::1;-1:-1:-1::0;;;;;34102:21:0;;;::::1;::::0;;;::::1;::::0;;33986:142::o;32396:228::-;19538:6;;-1:-1:-1;;;;;19538:6:0;170:10;19538:22;19530:67;;;;-1:-1:-1;;;19530:67:0;;;;;;;:::i;:::-;32516:9:::1;::::0;32510:15:::1;::::0;32516:9:::1;;32510:2;:15;:::i;:::-;32502:3;32481:13;8022:12:::0;;;7940:99;32481:13:::1;:17;::::0;32497:1:::1;32481:17;:::i;:::-;32480:25;;;;:::i;:::-;32479:47;;;;:::i;:::-;32469:6;:57;;32461:115;;;;-1:-1:-1::0;;;32461:115:0::1;;;;;;;:::i;:::-;32609:9;::::0;32603:15:::1;::::0;32609:9:::1;;32603:2;:15;:::i;:::-;32593:26;::::0;:6;:26:::1;:::i;:::-;32581:9;:38:::0;-1:-1:-1;32396:228:0:o;31458:689::-;19538:6;;31571:4;;-1:-1:-1;;;;;19538:6:0;170:10;19538:22;19530:67;;;;-1:-1:-1;;;19530:67:0;;;;;;;:::i;:::-;31591:13:::1;::::0;;;::::1;;;31590:14;31582:82;;;::::0;-1:-1:-1;;;31582:82:0;;9749:2:1;31582:82:0::1;::::0;::::1;9731:21:1::0;9788:2;9768:18;;;9761:30;9827:34;9807:18;;;9800:62;9898:25;9878:18;;;9871:53;9941:19;;31582:82:0::1;9547:419:1::0;31582:82:0::1;31702:7;:14;31677;:21;:39;31669:82;;;::::0;-1:-1:-1;;;31669:82:0;;10173:2:1;31669:82:0::1;::::0;::::1;10155:21:1::0;10212:2;10192:18;;;10185:30;10251:32;10231:18;;;10224:60;10301:18;;31669:82:0::1;9971:354:1::0;31669:82:0::1;31788:3;31764:14;:21;:27;31756:94;;;::::0;-1:-1:-1;;;31756:94:0;;10532:2:1;31756:94:0::1;::::0;::::1;10514:21:1::0;10571:2;10551:18;;;10544:30;10610:34;10590:18;;;10583:62;-1:-1:-1;;;10661:18:1;;;10654:52;10723:19;;31756:94:0::1;10330:418:1::0;31756:94:0::1;31958:9;31953:174;31977:14;:21;31973:1;:25;31953:174;;;32011:14;32028;32043:1;32028:17;;;;;;;;:::i;:::-;;;;;;;32011:34;;32051:14;32068:7;32076:1;32068:10;;;;;;;;:::i;:::-;;;;;;;32051:27;;32084:37;32094:10;32106:6;32114;32084:9;:37::i;:::-;32005:122;;32000:3;;;;;:::i;:::-;;;;31953:174;;;-1:-1:-1::0;32138:4:0::1;::::0;31458:689;-1:-1:-1;;;31458:689:0:o;9464:300::-;9570:4;9581:36;9591:6;9599:9;9610:6;9581:9;:36::i;:::-;9622:121;9631:6;170:10;9653:89;9691:6;9653:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9653:19:0;;;;;;:11;:19;;;;;;;;170:10;9653:33;;;;;;;;;;:37;:89::i;:::-;9622:8;:121::i;10134:203::-;170:10;10222:4;10265:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10265:34:0;;;;;;;;;;10222:4;;10233:83;;10256:7;;10265:50;;10304:10;10265:38;:50::i;19935:133::-;19538:6;;-1:-1:-1;;;;;19538:6:0;170:10;19538:22;19530:67;;;;-1:-1:-1;;;19530:67:0;;;;;;;:::i;:::-;20020:6:::1;::::0;19999:40:::1;::::0;20036:1:::1;::::0;-1:-1:-1;;;;;20020:6:0::1;::::0;19999:40:::1;::::0;20036:1;;19999:40:::1;20044:6;:19:::0;;-1:-1:-1;;;;;;20044:19:0::1;::::0;;19935:133::o;31347:106::-;19538:6;;31399:4;;-1:-1:-1;;;;;19538:6:0;170:10;19538:22;19530:67;;;;-1:-1:-1;;;19530:67:0;;;;;;;:::i;:::-;-1:-1:-1;31410:14:0::1;:22:::0;;-1:-1:-1;;31410:22:0::1;::::0;;:14:::1;31347:106:::0;:::o;32629:135::-;19538:6;;-1:-1:-1;;;;;19538:6:0;170:10;19538:22;19530:67;;;;-1:-1:-1;;;19530:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32713:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;32713:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32629:135::o;38216:148::-;19538:6;;-1:-1:-1;;;;;19538:6:0;170:10;19538:22;19530:67;;;;-1:-1:-1;;;19530:67:0;;;;;;;:::i;:::-;38285:1:::1;38264:18;:22:::0;;;38291:18:::1;:22:::0;;;38318:12:::1;:16:::0;;;38339::::1;:20:::0;38216:148::o;31166:135::-;19538:6;;-1:-1:-1;;;;;19538:6:0;170:10;19538:22;19530:67;;;;-1:-1:-1;;;19530:67:0;;;;;;;:::i;:::-;31215:13:::1;:20:::0;;-1:-1:-1;;31240:18:0;;;;;31284:12:::1;31263:18;:33:::0;31166:135::o;32942:91::-;19538:6;;-1:-1:-1;;;;;19538:6:0;170:10;19538:22;19530:67;;;;-1:-1:-1;;;19530:67:0;;;;;;;:::i;:::-;33007:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;33007:21:0;;::::1;::::0;;;::::1;::::0;;32942:91::o;33108:89::-;19538:6;;-1:-1:-1;;;;;19538:6:0;170:10;19538:22;19530:67;;;;-1:-1:-1;;;19530:67:0;;;;;;;:::i;:::-;33172:10:::1;:20:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;33172:20:0;;::::1;::::0;;;::::1;::::0;;33108:89::o;7111:95::-;7167:13;7194:7;7187:14;;;;;:::i;33374:231::-;19538:6;;-1:-1:-1;;;;;19538:6:0;170:10;19538:22;19530:67;;;;-1:-1:-1;;;19530:67:0;;;;;;;:::i;:::-;33477:13:::1;-1:-1:-1::0;;;;;33469:21:0::1;:4;-1:-1:-1::0;;;;;33469:21:0::1;::::0;33461:91:::1;;;::::0;-1:-1:-1;;;33461:91:0;;11227:2:1;33461:91:0::1;::::0;::::1;11209:21:1::0;11266:2;11246:18;;;11239:30;11305:34;11285:18;;;11278:62;11376:27;11356:18;;;11349:55;11421:19;;33461:91:0::1;11025:421:1::0;33461:91:0::1;33559:41;33588:4;33594:5;33559:28;:41::i;:::-;33374:231:::0;;:::o;10795:254::-;10888:4;10899:129;170:10;10922:7;10931:96;10970:15;10931:96;;;;;;;;;;;;;;;;;170:10;10931:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10931:34:0;;;;;;;;;;;;:38;:96::i;8394:160::-;8480:4;8491:42;170:10;8515:9;8526:6;8491:9;:42::i;33788:193::-;19538:6;;-1:-1:-1;;;;;19538:6:0;170:10;19538:22;19530:67;;;;-1:-1:-1;;;19530:67:0;;;;;;;:::i;:::-;33919:15:::1;::::0;33876:59:::1;::::0;-1:-1:-1;;;;;33919:15:0;;::::1;::::0;33876:59;::::1;::::0;::::1;::::0;33919:15:::1;::::0;33876:59:::1;33940:15;:36:::0;;-1:-1:-1;;;;;;33940:36:0::1;-1:-1:-1::0;;;;;33940:36:0;;;::::1;::::0;;;::::1;::::0;;33788:193::o;33202:167::-;19538:6;;-1:-1:-1;;;;;19538:6:0;170:10;19538:22;19530:67;;;;-1:-1:-1;;;19530:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33281:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;33281:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;33330:34;;1415:41:1;;;33330:34:0::1;::::0;1388:18:1;33330:34:0::1;;;;;;;33202:167:::0;;:::o;20208:223::-;19538:6;;-1:-1:-1;;;;;19538:6:0;170:10;19538:22;19530:67;;;;-1:-1:-1;;;19530:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20291:22:0;::::1;20283:73;;;::::0;-1:-1:-1;;;20283:73:0;;11653:2:1;20283:73:0::1;::::0;::::1;11635:21:1::0;11692:2;11672:18;;;11665:30;11731:34;11711:18;;;11704:62;-1:-1:-1;;;11782:18:1;;;11775:36;11828:19;;20283:73:0::1;11451:402:1::0;20283:73:0::1;20387:6;::::0;20366:38:::1;::::0;-1:-1:-1;;;;;20366:38:0;;::::1;::::0;20387:6:::1;::::0;20366:38:::1;::::0;20387:6:::1;::::0;20366:38:::1;20409:6;:17:::0;;-1:-1:-1;;;;;;20409:17:0::1;-1:-1:-1::0;;;;;20409:17:0;;;::::1;::::0;;;::::1;::::0;;20208:223::o;13674:319::-;-1:-1:-1;;;;;13770:19:0;;13762:68;;;;-1:-1:-1;;;13762:68:0;;12060:2:1;13762:68:0;;;12042:21:1;12099:2;12079:18;;;12072:30;12138:34;12118:18;;;12111:62;-1:-1:-1;;;12189:18:1;;;12182:34;12233:19;;13762:68:0;11858:400:1;13762:68:0;-1:-1:-1;;;;;13843:21:0;;13835:68;;;;-1:-1:-1;;;13835:68:0;;12465:2:1;13835:68:0;;;12447:21:1;12504:2;12484:18;;;12477:30;12543:34;12523:18;;;12516:62;-1:-1:-1;;;12594:18:1;;;12587:32;12636:19;;13835:68:0;12263:398:1;13835:68:0;-1:-1:-1;;;;;13910:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13956:32;;1613:25:1;;;13956:32:0;;1586:18:1;13956:32:0;;;;;;;;13674:319;;;:::o;34420:2799::-;-1:-1:-1;;;;;34512:18:0;;34504:68;;;;-1:-1:-1;;;34504:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34585:16:0;;34577:64;;;;-1:-1:-1;;;34577:64:0;;;;;;;:::i;:::-;34651:13;;;;;;;34646:119;;-1:-1:-1;;;;;34680:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;34709:23:0;;;;;;:19;:23;;;;;;;;34680:52;34672:87;;;;-1:-1:-1;;;34672:87:0;;13678:2:1;34672:87:0;;;13660:21:1;13717:2;13697:18;;;13690:30;-1:-1:-1;;;13736:18:1;;;13729:52;13798:18;;34672:87:0;13476:346:1;34672:87:0;34773:6;34783:1;34773:11;34769:69;;34792:28;34808:4;34814:2;34818:1;34792:15;:28::i;:::-;34420:2799;;;:::o;34769:69::-;34848:14;;;;;;;34844:786;;;19412:6;;-1:-1:-1;;;;;34874:15:0;;;19412:6;;34874:15;;;;:32;;-1:-1:-1;19412:6:0;;-1:-1:-1;;;;;34893:13:0;;;19412:6;;34893:13;;34874:32;:52;;;;-1:-1:-1;;;;;;34910:16:0;;;;34874:52;:77;;;;-1:-1:-1;;;;;;34930:21:0;;34944:6;34930:21;;34874:77;:136;;;;-1:-1:-1;;;;;;34957:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;34986:23:0;;;;;;:19;:23;;;;;;;;34957:52;34955:55;34874:136;:149;;;;-1:-1:-1;35015:8:0;;-1:-1:-1;;;35015:8:0;;;;35014:9;34874:149;34870:755;;;-1:-1:-1;;;;;35052:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;35088:35:0;;;;;;:31;:35;;;;;;;;35087:36;35052:71;35048:571;;;35151:20;;35141:6;:30;;35133:96;;;;-1:-1:-1;;;35133:96:0;;14029:2:1;35133:96:0;;;14011:21:1;14068:2;14048:18;;;14041:30;14107:34;14087:18;;;14080:62;-1:-1:-1;;;14158:18:1;;;14151:51;14219:19;;35133:96:0;13827:417:1;35133:96:0;35271:9;;-1:-1:-1;;;;;8185:18:0;;8164:7;8185:18;;;;;;;;;;;35245:22;;:6;:22;:::i;:::-;:35;;35237:67;;;;-1:-1:-1;;;35237:67:0;;14581:2:1;35237:67:0;;;14563:21:1;14620:2;14600:18;;;14593:30;-1:-1:-1;;;14639:18:1;;;14632:49;14698:18;;35237:67:0;14379:343:1;35237:67:0;35048:571;;;-1:-1:-1;;;;;35344:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;35378:37:0;;;;;;:31;:37;;;;;;;;35377:38;35344:71;35340:279;;;35443:20;;35433:6;:30;;35425:97;;;;-1:-1:-1;;;35425:97:0;;14929:2:1;35425:97:0;;;14911:21:1;14968:2;14948:18;;;14941:30;15007:34;14987:18;;;14980:62;-1:-1:-1;;;15058:18:1;;;15051:52;15120:19;;35425:97:0;14727:418:1;35340:279:0;35578:9;;-1:-1:-1;;;;;8185:18:0;;8164:7;8185:18;;;;;;;;;;;35552:22;;:6;:22;:::i;:::-;:35;;35544:67;;;;-1:-1:-1;;;35544:67:0;;14581:2:1;35544:67:0;;;14563:21:1;14620:2;14600:18;;;14593:30;-1:-1:-1;;;14639:18:1;;;14632:49;14698:18;;35544:67:0;14379:343:1;35544:67:0;35685:4;35636:28;8185:18;;;;;;;;;;;35713:24;;;;;;;35748:22;;-1:-1:-1;35759:11:0;;;;;;;35748:22;:35;;;;-1:-1:-1;35775:8:0;;-1:-1:-1;;;35775:8:0;;;;35774:9;35748:35;:71;;;;-1:-1:-1;;;;;;35788:31:0;;;;;;:25;:31;;;;;;;;35787:32;35748:71;:101;;;;-1:-1:-1;;;;;;35824:25:0;;;;;;:19;:25;;;;;;;;35823:26;35748:101;:129;;;;-1:-1:-1;;;;;;35854:23:0;;;;;;:19;:23;;;;;;;;35853:24;35748:129;35744:204;;;35885:8;:15;;-1:-1:-1;;;;35885:15:0;-1:-1:-1;;;35885:15:0;;;35908:10;:8;:10::i;:::-;35926:8;:16;;-1:-1:-1;;;;35926:16:0;;;35744:204;35970:8;;-1:-1:-1;;;;;36068:25:0;;35954:12;36068:25;;;:19;:25;;;;;;35970:8;-1:-1:-1;;;35970:8:0;;;;;35969:9;;36068:25;;:52;;-1:-1:-1;;;;;;36097:23:0;;;;;;:19;:23;;;;;;;;36068:52;36064:85;;;-1:-1:-1;36138:5:0;36064:85;36155:12;36248:7;36244:931;;;-1:-1:-1;;;;;36267:29:0;;;;;;:25;:29;;;;;;;;36263:808;;;36309:13;;:17;36305:348;;36343:34;36373:3;36343:25;36354:13;;36343:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;36336:41;;36435:13;;36415:16;;36408:4;:23;;;;:::i;:::-;36407:41;;;;:::i;:::-;36385:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;36494:13:0;;36480:10;;36473:17;;:4;:17;:::i;:::-;36472:35;;;;:::i;:::-;36456:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;36565:13:0;;36545:16;;36538:23;;:4;:23;:::i;:::-;36537:41;;;;:::i;:::-;36515:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;36632:13:0;;36614:14;;36607:21;;:4;:21;:::i;:::-;36606:39;;;;:::i;:::-;36586:16;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;36305:348:0;36263:808;;;-1:-1:-1;;;;;36687:31:0;;;;;;:25;:31;;;;;;;;36683:388;;;36731:12;;:16;36727:338;;36764:33;36793:3;36764:24;36775:12;;36764:6;:10;;:24;;;;:::i;:33::-;36757:40;;36854:12;;36835:15;;36828:4;:22;;;;:::i;:::-;36827:39;;;;:::i;:::-;36805:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;36911:12:0;;36898:9;;36891:16;;:4;:16;:::i;:::-;36890:33;;;;:::i;:::-;36874:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;36980:12:0;;36961:15;;36954:22;;:4;:22;:::i;:::-;36953:39;;;;:::i;:::-;36931:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;37045:12:0;;37028:13;;37021:20;;:4;:20;:::i;:::-;37020:37;;;;:::i;:::-;37000:16;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;36727:338:0;37082:8;;37078:70;;37099:42;37115:4;37129;37136;37099:15;:42::i;:::-;37155:14;37165:4;37155:14;;:::i;:::-;;;36244:931;37181:33;37197:4;37203:2;37207:6;37181:15;:33::i;:::-;34499:2720;;;;34420:2799;;;:::o;15686:171::-;15772:7;15802:12;15794:6;;;;15786:29;;;;-1:-1:-1;;;15786:29:0;;;;;;;;:::i;:::-;-1:-1:-1;15820:9:0;15832:5;15836:1;15832;:5;:::i;:::-;15820:17;15686:171;-1:-1:-1;;;;;15686:171:0:o;14879:160::-;14937:7;;14963:5;14967:1;14963;:5;:::i;:::-;14951:17;;14986:1;14981;:6;;14973:46;;;;-1:-1:-1;;;14973:46:0;;15485:2:1;14973:46:0;;;15467:21:1;15524:2;15504:18;;;15497:30;15563:29;15543:18;;;15536:57;15610:18;;14973:46:0;15283:351:1;14973:46:0;15033:1;14879:160;-1:-1:-1;;;14879:160:0:o;33610:173::-;-1:-1:-1;;;;;33687:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;33687:39:0;;;;;;;;;;33738:40;;33687:39;;:31;33738:40;;;33610:173;;:::o;11494:500::-;-1:-1:-1;;;;;11594:20:0;;11586:70;;;;-1:-1:-1;;;11586:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11669:23:0;;11661:71;;;;-1:-1:-1;;;11661:71:0;;;;;;;:::i;:::-;11813;11835:6;11813:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11813:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;11793:17:0;;;:9;:17;;;;;;;;;;;:91;;;;11912:20;;;;;;;:32;;11937:6;11912:24;:32::i;:::-;-1:-1:-1;;;;;11889:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;11954:35;1613:25:1;;;11889:20:0;;11954:35;;;;;;1586:18:1;11954:35:0;1467:177:1;38369:1679:0;38446:4;38402:23;8185:18;;;;;;;;;;;38463:10;;;;;;;38459:142;;;38485:19;;38481:103;;38544:15;;38513:64;;38537:4;;-1:-1:-1;;;;;38544:15:0;38561;38513;:64::i;:::-;38589:7;38369:1679::o;38459:142::-;38607:25;38692:16;;38677:12;;38656:18;;38635;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;:73;;;;:::i;:::-;38607:101;-1:-1:-1;38713:12:0;38736:20;;;:46;;-1:-1:-1;38760:22:0;;38736:46;38732:70;;;38790:7;;;38369:1679::o;38732:70::-;38851:23;38938:1;38918:17;38896:18;;38878:15;:36;;;;:::i;:::-;38877:58;;;;:::i;:::-;:62;;;;:::i;:::-;38851:88;-1:-1:-1;38944:26:0;38973:36;:15;38851:88;38973:19;:36::i;:::-;38944:65;-1:-1:-1;39044:21:0;39072:36;38944:65;39072:16;:36::i;:::-;39115:18;39136:44;:21;39162:17;39136:25;:44::i;:::-;39115:65;;39187:23;39213:57;39252:17;39213:34;39228:18;;39213:10;:14;;:34;;;;:::i;:57::-;39187:83;;39275:17;39295:51;39328:17;39295:28;39310:12;;39295:10;:14;;:28;;;;:::i;:51::-;39275:71;;39351:21;39375:55;39412:17;39375:32;39390:16;;39375:10;:14;;:32;;;;:::i;:55::-;39351:79;-1:-1:-1;39437:23:0;39351:79;39494:9;39463:28;39476:15;39463:10;:28;:::i;:::-;:40;;;;:::i;:::-;:56;;;;:::i;:::-;39547:1;39526:18;:22;;;39553:18;:22;;;39580:12;:16;;;39601;:20;;;39650:9;;39642:47;;39437:82;;-1:-1:-1;;;;;;39650:9:0;;39674;;39642:47;39547:1;39642:47;39674:9;39650;39642:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39716:13:0;;39708:55;;39628:61;;-1:-1:-1;;;;;;39716:13:0;;39744;;39708:55;;;;39744:13;39716;39708:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39694:69:0;;-1:-1:-1;;39774:19:0;;;;;:42;;;39815:1;39797:15;:19;39774:42;39770:188;;;39824:46;39837:15;39854;39824:12;:46::i;:::-;39933:18;;39881:71;;;16051:25:1;;;16107:2;16092:18;;16085:34;;;16135:18;;;16128:34;;;;39881:71:0;;;;;;16039:2:1;39881:71:0;;;39770:188;39986:15;;39978:65;;-1:-1:-1;;;;;39986:15:0;;;;40016:21;;39978:65;;;;40016:21;39986:15;39978:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;38369:1679:0:o;16083:411::-;16141:7;16362:1;16367;16362:6;16358:32;;-1:-1:-1;16383:1:0;16376:8;;16358:32;16396:9;16408:5;16412:1;16408;:5;:::i;:::-;16396:17;-1:-1:-1;16435:1:0;16426:5;16430:1;16396:17;16426:5;:::i;:::-;:10;16418:56;;;;-1:-1:-1;;;16418:56:0;;16375:2:1;16418:56:0;;;16357:21:1;16414:2;16394:18;;;16387:30;16453:34;16433:18;;;16426:62;-1:-1:-1;;;16504:18:1;;;16497:31;16545:19;;16418:56:0;16173:397:1;16931:123:0;16989:7;17010:39;17014:1;17017;17010:39;;;;;;;;;;;;;;;;;:3;:39::i;15289:127::-;15347:7;15368:43;15372:1;15375;15368:43;;;;;;;;;;;;;;;;;:3;:43::i;37224:521::-;37362:16;;;37376:1;37362:16;;;;;;;;37338:21;;37362:16;;;;;;;;;;-1:-1:-1;37362:16:0;37338:40;;37401:4;37383;37388:1;37383:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;37383:23:0;;;-1:-1:-1;;;;;37383:23:0;;;;;37421:15;-1:-1:-1;;;;;37421:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37411:4;37416:1;37411:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;37411:32:0;;;-1:-1:-1;;;;;37411:32:0;;;;;37450:62;37467:4;37482:15;37500:11;37450:8;:62::i;:::-;37547:179;;-1:-1:-1;;;37547:179:0;;-1:-1:-1;;;;;37547:15:0;:66;;;;:179;;37620:11;;37638:1;;37674:4;;37693;;37705:15;;37547:179;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37539:202;;;37279:466;37224:521;:::o;37750:461::-;37886:62;37903:4;37918:15;37936:11;37886:8;:62::i;:::-;37987:205;;-1:-1:-1;;;37987:205:0;;38053:4;37987:205;;;18157:34:1;18207:18;;;18200:34;;;38083:1:0;18250:18:1;;;18243:34;;;18293:18;;;18286:34;26294:6:0;18336:19:1;;;18329:44;38171:15:0;18389:19:1;;;18382:35;37987:15:0;-1:-1:-1;;;;;37987:31:0;;;;38027:9;;18091:19:1;;37987:205:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37987:205:0;;;;;;;;-1:-1:-1;;37987:205:0;;;;;;;;;;;;:::i;:::-;;;37979:228;;;;;;37750:461;;:::o;17511:251::-;17597:7;17626:12;17619:5;17611:28;;;;-1:-1:-1;;;17611:28:0;;;;;;;;:::i;:::-;-1:-1:-1;17644:9:0;17656:5;17660:1;17656;:5;:::i;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;402:548::-;514:4;543:2;572;561:9;554:21;604:6;598:13;647:6;642:2;631:9;627:18;620:34;672:1;682:140;696:6;693:1;690:13;682:140;;;791:14;;;787:23;;781:30;757:17;;;776:2;753:26;746:66;711:10;;682:140;;;686:3;871:1;866:2;857:6;846:9;842:22;838:31;831:42;941:2;934;930:7;925:2;917:6;913:15;909:29;898:9;894:45;890:54;882:62;;;;402:548;;;;:::o;955:315::-;1023:6;1031;1084:2;1072:9;1063:7;1059:23;1055:32;1052:52;;;1100:1;1097;1090:12;1052:52;1139:9;1126:23;1158:31;1183:5;1158:31;:::i;:::-;1208:5;1260:2;1245:18;;;;1232:32;;-1:-1:-1;;;955:315:1:o;1649:180::-;1708:6;1761:2;1749:9;1740:7;1736:23;1732:32;1729:52;;;1777:1;1774;1767:12;1729:52;-1:-1:-1;1800:23:1;;1649:180;-1:-1:-1;1649:180:1:o;2277:127::-;2338:10;2333:3;2329:20;2326:1;2319:31;2369:4;2366:1;2359:15;2393:4;2390:1;2383:15;2409:275;2480:2;2474:9;2545:2;2526:13;;-1:-1:-1;;2522:27:1;2510:40;;2580:18;2565:34;;2601:22;;;2562:62;2559:88;;;2627:18;;:::i;:::-;2663:2;2656:22;2409:275;;-1:-1:-1;2409:275:1:o;2689:183::-;2749:4;2782:18;2774:6;2771:30;2768:56;;;2804:18;;:::i;:::-;-1:-1:-1;2849:1:1;2845:14;2861:4;2841:25;;2689:183::o;2877:662::-;2931:5;2984:3;2977:4;2969:6;2965:17;2961:27;2951:55;;3002:1;2999;2992:12;2951:55;3038:6;3025:20;3064:4;3088:60;3104:43;3144:2;3104:43;:::i;:::-;3088:60;:::i;:::-;3182:15;;;3268:1;3264:10;;;;3252:23;;3248:32;;;3213:12;;;;3292:15;;;3289:35;;;3320:1;3317;3310:12;3289:35;3356:2;3348:6;3344:15;3368:142;3384:6;3379:3;3376:15;3368:142;;;3450:17;;3438:30;;3488:12;;;;3401;;3368:142;;;-1:-1:-1;3528:5:1;2877:662;-1:-1:-1;;;;;;2877:662:1:o;3544:1215::-;3662:6;3670;3723:2;3711:9;3702:7;3698:23;3694:32;3691:52;;;3739:1;3736;3729:12;3691:52;3779:9;3766:23;3808:18;3849:2;3841:6;3838:14;3835:34;;;3865:1;3862;3855:12;3835:34;3903:6;3892:9;3888:22;3878:32;;3948:7;3941:4;3937:2;3933:13;3929:27;3919:55;;3970:1;3967;3960:12;3919:55;4006:2;3993:16;4028:4;4052:60;4068:43;4108:2;4068:43;:::i;4052:60::-;4146:15;;;4228:1;4224:10;;;;4216:19;;4212:28;;;4177:12;;;;4252:19;;;4249:39;;;4284:1;4281;4274:12;4249:39;4308:11;;;;4328:217;4344:6;4339:3;4336:15;4328:217;;;4424:3;4411:17;4441:31;4466:5;4441:31;:::i;:::-;4485:18;;4361:12;;;;4523;;;;4328:217;;;4564:5;-1:-1:-1;;4607:18:1;;4594:32;;-1:-1:-1;;4638:16:1;;;4635:36;;;4667:1;4664;4657:12;4635:36;;4690:63;4745:7;4734:8;4723:9;4719:24;4690:63;:::i;:::-;4680:73;;;3544:1215;;;;;:::o;4764:456::-;4841:6;4849;4857;4910:2;4898:9;4889:7;4885:23;4881:32;4878:52;;;4926:1;4923;4916:12;4878:52;4965:9;4952:23;4984:31;5009:5;4984:31;:::i;:::-;5034:5;-1:-1:-1;5091:2:1;5076:18;;5063:32;5104:33;5063:32;5104:33;:::i;:::-;4764:456;;5156:7;;-1:-1:-1;;;5210:2:1;5195:18;;;;5182:32;;4764:456::o;5414:160::-;5479:20;;5535:13;;5528:21;5518:32;;5508:60;;5564:1;5561;5554:12;5508:60;5414:160;;;:::o;5579:315::-;5644:6;5652;5705:2;5693:9;5684:7;5680:23;5676:32;5673:52;;;5721:1;5718;5711:12;5673:52;5760:9;5747:23;5779:31;5804:5;5779:31;:::i;:::-;5829:5;-1:-1:-1;5853:35:1;5884:2;5869:18;;5853:35;:::i;:::-;5843:45;;5579:315;;;;;:::o;5899:180::-;5955:6;6008:2;5996:9;5987:7;5983:23;5979:32;5976:52;;;6024:1;6021;6014:12;5976:52;6047:26;6063:9;6047:26;:::i;6084:388::-;6152:6;6160;6213:2;6201:9;6192:7;6188:23;6184:32;6181:52;;;6229:1;6226;6219:12;6181:52;6268:9;6255:23;6287:31;6312:5;6287:31;:::i;:::-;6337:5;-1:-1:-1;6394:2:1;6379:18;;6366:32;6407:33;6366:32;6407:33;:::i;:::-;6459:7;6449:17;;;6084:388;;;;;:::o;6477:356::-;6679:2;6661:21;;;6698:18;;;6691:30;6757:34;6752:2;6737:18;;6730:62;6824:2;6809:18;;6477:356::o;6838:380::-;6917:1;6913:12;;;;6960;;;6981:61;;7035:4;7027:6;7023:17;7013:27;;6981:61;7088:2;7080:6;7077:14;7057:18;7054:38;7051:161;;7134:10;7129:3;7125:20;7122:1;7115:31;7169:4;7166:1;7159:15;7197:4;7194:1;7187:15;7051:161;;6838:380;;;:::o;7223:127::-;7284:10;7279:3;7275:20;7272:1;7265:31;7315:4;7312:1;7305:15;7339:4;7336:1;7329:15;7355:422;7444:1;7487:5;7444:1;7501:270;7522:7;7512:8;7509:21;7501:270;;;7581:4;7577:1;7573:6;7569:17;7563:4;7560:27;7557:53;;;7590:18;;:::i;:::-;7640:7;7630:8;7626:22;7623:55;;;7660:16;;;;7623:55;7739:22;;;;7699:15;;;;7501:270;;;7505:3;7355:422;;;;;:::o;7782:806::-;7831:5;7861:8;7851:80;;-1:-1:-1;7902:1:1;7916:5;;7851:80;7950:4;7940:76;;-1:-1:-1;7987:1:1;8001:5;;7940:76;8032:4;8050:1;8045:59;;;;8118:1;8113:130;;;;8025:218;;8045:59;8075:1;8066:10;;8089:5;;;8113:130;8150:3;8140:8;8137:17;8134:43;;;8157:18;;:::i;:::-;-1:-1:-1;;8213:1:1;8199:16;;8228:5;;8025:218;;8327:2;8317:8;8314:16;8308:3;8302:4;8299:13;8295:36;8289:2;8279:8;8276:16;8271:2;8265:4;8262:12;8258:35;8255:77;8252:159;;;-1:-1:-1;8364:19:1;;;8396:5;;8252:159;8443:34;8468:8;8462:4;8443:34;:::i;:::-;8513:6;8509:1;8505:6;8501:19;8492:7;8489:32;8486:58;;;8524:18;;:::i;:::-;8562:20;;7782:806;-1:-1:-1;;;7782:806:1:o;8593:140::-;8651:5;8680:47;8721:4;8711:8;8707:19;8701:4;8680:47;:::i;8738:168::-;8811:9;;;8842;;8859:15;;;8853:22;;8839:37;8829:71;;8880:18;;:::i;8911:217::-;8951:1;8977;8967:132;;9021:10;9016:3;9012:20;9009:1;9002:31;9056:4;9053:1;9046:15;9084:4;9081:1;9074:15;8967:132;-1:-1:-1;9113:9:1;;8911:217::o;9133:409::-;9335:2;9317:21;;;9374:2;9354:18;;;9347:30;9413:34;9408:2;9393:18;;9386:62;-1:-1:-1;;;9479:2:1;9464:18;;9457:43;9532:3;9517:19;;9133:409::o;10753:127::-;10814:10;10809:3;10805:20;10802:1;10795:31;10845:4;10842:1;10835:15;10869:4;10866:1;10859:15;10885:135;10924:3;10945:17;;;10942:43;;10965:18;;:::i;:::-;-1:-1:-1;11012:1:1;11001:13;;10885:135::o;12666:401::-;12868:2;12850:21;;;12907:2;12887:18;;;12880:30;12946:34;12941:2;12926:18;;12919:62;-1:-1:-1;;;13012:2:1;12997:18;;12990:35;13057:3;13042:19;;12666:401::o;13072:399::-;13274:2;13256:21;;;13313:2;13293:18;;;13286:30;13352:34;13347:2;13332:18;;13325:62;-1:-1:-1;;;13418:2:1;13403:18;;13396:33;13461:3;13446:19;;13072:399::o;14249:125::-;14314:9;;;14335:10;;;14332:36;;;14348:18;;:::i;15150:128::-;15217:9;;;15238:11;;;15235:37;;;15252:18;;:::i;16575:251::-;16645:6;16698:2;16686:9;16677:7;16673:23;16669:32;16666:52;;;16714:1;16711;16704:12;16666:52;16746:9;16740:16;16765:31;16790:5;16765:31;:::i;16831:980::-;17093:4;17141:3;17130:9;17126:19;17172:6;17161:9;17154:25;17198:2;17236:6;17231:2;17220:9;17216:18;17209:34;17279:3;17274:2;17263:9;17259:18;17252:31;17303:6;17338;17332:13;17369:6;17361;17354:22;17407:3;17396:9;17392:19;17385:26;;17446:2;17438:6;17434:15;17420:29;;17467:1;17477:195;17491:6;17488:1;17485:13;17477:195;;;17556:13;;-1:-1:-1;;;;;17552:39:1;17540:52;;17647:15;;;;17612:12;;;;17588:1;17506:9;17477:195;;;-1:-1:-1;;;;;;;17728:32:1;;;;17723:2;17708:18;;17701:60;-1:-1:-1;;;17792:3:1;17777:19;17770:35;17689:3;16831:980;-1:-1:-1;;;16831:980:1:o;18428:306::-;18516:6;18524;18532;18585:2;18573:9;18564:7;18560:23;18556:32;18553:52;;;18601:1;18598;18591:12;18553:52;18630:9;18624:16;18614:26;;18680:2;18669:9;18665:18;18659:25;18649:35;;18724:2;18713:9;18709:18;18703:25;18693:35;;18428:306;;;;;:::o

Swarm Source

ipfs://e449b6e78cbe6c36d6a9162bb0b865e2a6c199442870d898270d5d493a9b966f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.