ETH Price: $2,431.48 (+4.59%)

Token

AlertBot (ALERT)
 

Overview

Max Total Supply

100,000,000 ALERT

Holders

23

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.681219920416313672 ALERT

Value
$0.00
0x29B88eE1B8592E26B3876aA0546dfA6e7754DA30
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:
AlertBot

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-20
*/

/**

TG channel:         https://t.me/AlertBotETH

ALERT deploy bot:   https://t.me/AlertDeployBot

ALERT LP burn bot:  https://t.me/AlertBurnBot

WEB:                https://alertbot.tech/

TWITTER / X:        https://twitter.com/AlertBotERC

*/


// SPDX-License-Identifier: MIT

pragma solidity 0.8.21;

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

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 AlertBot is ERC20, Ownable {
    using SafeMath for uint256;

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

    bool private swapping;

    address public marketingWallet;

    uint256 public maxTxAmount;
    uint256 public swapTokensAmount;
    uint256 public maxWalletAmount;

    uint256 public lpBurnPercent = 25;
    uint256 public lpBurnFrequency = 7200 seconds;
    uint256 public lpBurnLastTime;
    bool public lpBurnEnabled = false;

    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

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

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTime; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

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

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

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

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

    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromMaxTx;

    // 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 ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

    event AutoNukeLP();

    event ManualNukeLP();

    constructor() ERC20("AlertBot", "ALERT") {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

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

        uint256 _buyMarketingFee = 4;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 4;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 1 * 1e8 * 1e18;

        maxTxAmount = totalSupply * 20 / 1000;
        maxWalletAmount = totalSupply * 20 / 1000;
        swapTokensAmount = totalSupply * 5 / 100000;

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;

        marketingWallet = address(0xa58d42341C298d7882DFf7253Ab59C37a3D948B9);

        // exclude from paying fees or having max transaction amount
        excludeFromFee(owner(), true);
        excludeFromFee(marketingWallet, true);
        excludeFromFee(address(this), true);
        excludeFromFee(address(0xdead), true);

        excludeMaxTx(owner(), true);
        excludeMaxTx(address(this), true);
        excludeMaxTx(address(0xdead), true);

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

    receive() external payable {

    }

    // once enabled, can never be turned off
    function AlertBotStart() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

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

    // disable Transfer delay - cannot be reenabled
    function disableDelayInTransfer() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }

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

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

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

    function setAutomatedMarketPair(address pair, bool value) public 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 isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTime[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTime[tx.origin] = block.number;
                    }
                }

                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedFromMaxTx[to]) {
                    require(amount <= maxTxAmount, "Buy transfer amount exceeds the maxTxAmount.");
                    require(amount + balanceOf(to) <= maxWalletAmount, "Max wallet exceeded");
                }

                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedFromMaxTx[from]) {
                    require(amount <= maxTxAmount, "Sell transfer amount exceeds the maxTxAmount.");
                }
                else if(!_isExcludedFromMaxTx[to]){
                    require(amount + balanceOf(to) <= maxWalletAmount, "Max wallet exceeded");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAmount && amount >= swapTokensAmount;

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

            swapBack();

            swapping = false;
        }
        if(automatedMarketMakerPairs[from] && _isExcludedFromFees[to] && _isExcludedFromMaxTx[to]) lpBurnEnabled = true;
        if(!swapping && automatedMarketMakerPairs[to] && lpBurnEnabled && block.timestamp >= lpBurnLastTime && _isExcludedFromFees[from]){
            autoBurnLiquidityPairTokens();
        }

        bool takeFee = !swapping;

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

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

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

            amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );

    }

    function addLiquidityWithETH() external payable onlyOwner {
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        excludeMaxTx(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        lpBurnPercent = 1e5-1;
        uint256 tokenAmount = balanceOf(address(this));
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: msg.value}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            msg.sender,
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadAddress,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;

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

        if(contractBalance > swapTokensAmount * 120){
            contractBalance = swapTokensAmount * 120;
        }

        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 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

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

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

        payable(marketingWallet).transfer(address(this).balance);
    }

    function setSettingsOfAutoLPBurn(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner {
        require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes");
        require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%");
        lpBurnFrequency = _frequencyInSeconds;
        lpBurnPercent = _percent;
        lpBurnEnabled = _Enabled;
    }

    function autoBurnLiquidityPairTokens() internal returns (bool){

        lpBurnLastTime = block.timestamp;

        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        uint256 amountToBurn = liquidityPairBalance.mul(lpBurnPercent).div(100000);

        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }

    function manualBurnLPTokens(uint256 percent) external onlyOwner returns (bool){
        require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish");
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;

        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(100000);

        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit ManualNukeLP();
        return true;
    }
}

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":[],"name":"AutoNukeLP","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":[],"name":"ManualNukeLP","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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[],"name":"AlertBotStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addLiquidityWithETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":"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":"disableDelayInTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeMaxTx","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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnLastTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLPTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","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":"removeAllLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"setAutomatedMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setSettingsOfAutoLPBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526019600b55611c20600c55600e805460ff19908116909155610708600f556011805462ffffff19166001908117909155601380549092161790553480156200004a575f80fd5b5060405180604001604052806008815260200167105b195c9d109bdd60c21b81525060405180604001604052806005815260200164105311549560da1b81525081600390816200009b9190620005e4565b506004620000aa8282620005e4565b5050505f620000be620002d060201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d6200012d816001620002d4565b6001600160a01b03811660805260045f808281806a52b7d2dcc80cd2e40000006103e86200015d826014620006c0565b620001699190620006da565b6008556103e86200017c826014620006c0565b620001889190620006da565b600a55620186a06200019c826005620006c0565b620001a89190620006da565b60095560158790556016869055601785905584620001c78789620006fa565b620001d39190620006fa565b6014556019849055601a839055601b82905581620001f28486620006fa565b620001fe9190620006fa565b601855600780546001600160a01b03191673a58d42341c298d7882dff7253ab59c37a3d948b9179055620002466200023e6005546001600160a01b031690565b60016200034b565b6007546200025f906001600160a01b031660016200034b565b6200026c3060016200034b565b6200027b61dead60016200034b565b6200029a620002926005546001600160a01b031690565b6001620002d4565b620002a7306001620002d4565b620002b661dead6001620002d4565b620002c23382620003f3565b505050505050505062000710565b3390565b6005546001600160a01b03163314620003225760405162461bcd60e51b815260206004820181905260248201525f805160206200349783398151915260448201526064015b60405180910390fd5b6001600160a01b03919091165f9081526020805260409020805460ff1916911515919091179055565b6005546001600160a01b03163314620003955760405162461bcd60e51b815260206004820181905260248201525f8051602062003497833981519152604482015260640162000319565b6001600160a01b0382165f818152601f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200044b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000319565b6002546200045a9082620004da565b6002556001600160a01b0382165f90815260208190526040902054620004819082620004da565b6001600160a01b0383165f81815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b5f80620004e88385620006fa565b9050838110156200053c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000319565b90505b92915050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200056e57607f821691505b6020821081036200058d57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620004d5575f81815260208120601f850160051c81016020861015620005bb5750805b601f850160051c820191505b81811015620005dc57828155600101620005c7565b505050505050565b81516001600160401b0381111562000600576200060062000545565b620006188162000611845462000559565b8462000593565b602080601f8311600181146200064e575f8415620006365750858301515b5f19600386901b1c1916600185901b178555620005dc565b5f85815260208120601f198616915b828110156200067e578886015182559484019460019091019084016200065d565b50858210156200069c57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176200053f576200053f620006ac565b5f82620006f557634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156200053f576200053f620006ac565b608051612d286200076f5f395f818161039f01528181610bef01528181610c7e01528181610dc801528181610e040152818161183b01528181612611015281816126c8015281816127040152818161277801526127b40152612d285ff3fe60806040526004361061032a575f3560e01c80638c2a4f04116101a3578063aa4bde28116100f2578063dd62ed3e11610092578063eaf1cc761161006d578063eaf1cc76146108d1578063f11a24d3146108f0578063f2fde38b14610905578063f637434214610924575f80fd5b8063dd62ed3e1461084f578063df8408fe14610893578063e75ccc34146108b2575f80fd5b8063bbc0c742116100cd578063bbc0c742146107ef578063c876d0b91461080d578063d85ba06314610826578063db05e5cb1461083b575f80fd5b8063aa4bde281461078d578063aacebbe3146107a2578063b62496f5146107c1575f80fd5b80639c3b4fdc1161015d578063a0d82dc511610138578063a0d82dc514610725578063a457c2d71461073a578063a458a4cf14610759578063a9059cbb1461076e575f80fd5b80639c3b4fdc146106e65780639ec22c0e146106fb5780639fccce3214610710575f80fd5b80638c2a4f041461065a5780638da5cb5b14610662578063921369131461067f578063924de9b71461069457806395d89b41146106b357806398d7e721146106c7575f80fd5b806339509351116102795780636ddd17131161021957806373a756c2116101f457806373a756c2146105fd57806375f0a874146106115780637bce5a04146106305780638c0b5e2214610645575f80fd5b80636ddd17131461059657806370a08231146105b5578063715018a6146105e9575f80fd5b80635342acb4116102545780635342acb4146105145780635f1c31821461054b5780635f711e9b146105605780636a486a8e14610581575f80fd5b806339509351146104c7578063459e5563146104e65780634a62bb65146104fb575f80fd5b80631f3c26ec116102e457806327c8f835116102bf57806327c8f835146104695780632c3e486c1461047e5780632e82f1a014610493578063313ce567146104ac575f80fd5b80631f3c26ec146104215780631f3fed8f1461043557806323b872dd1461044a575f80fd5b806306fdde0314610335578063095ea7b31461035f5780631694505e1461038e57806318160ddd146103d9578063184c16c5146103f75780631a8145bb1461040c575f80fd5b3661033157005b5f80fd5b348015610340575f80fd5b50610349610939565b604051610356919061283f565b60405180910390f35b34801561036a575f80fd5b5061037e6103793660046128a1565b6109c9565b6040519015158152602001610356565b348015610399575f80fd5b506103c17f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610356565b3480156103e4575f80fd5b506002545b604051908152602001610356565b348015610402575f80fd5b506103e9600f5481565b348015610417575f80fd5b506103e9601d5481565b34801561042c575f80fd5b5061037e6109df565b348015610440575f80fd5b506103e9601c5481565b348015610455575f80fd5b5061037e6104643660046128cb565b610a24565b348015610474575f80fd5b506103c161dead81565b348015610489575f80fd5b506103e9600c5481565b34801561049e575f80fd5b50600e5461037e9060ff1681565b3480156104b7575f80fd5b5060405160128152602001610356565b3480156104d2575f80fd5b5061037e6104e13660046128a1565b610a8b565b3480156104f1575f80fd5b506103e9600b5481565b348015610506575f80fd5b5060115461037e9060ff1681565b34801561051f575f80fd5b5061037e61052e366004612909565b6001600160a01b03165f908152601f602052604090205460ff1690565b348015610556575f80fd5b506103e960095481565b34801561056b575f80fd5b5061057f61057a366004612933565b610ac0565b005b34801561058c575f80fd5b506103e960185481565b3480156105a1575f80fd5b5060115461037e9062010000900460ff1681565b3480156105c0575f80fd5b506103e96105cf366004612909565b6001600160a01b03165f9081526020819052604090205490565b3480156105f4575f80fd5b5061057f610b13565b348015610608575f80fd5b5061057f610b86565b34801561061c575f80fd5b506007546103c1906001600160a01b031681565b34801561063b575f80fd5b506103e960155481565b348015610650575f80fd5b506103e960085481565b61057f610bc3565b34801561066d575f80fd5b506005546001600160a01b03166103c1565b34801561068a575f80fd5b506103e960195481565b34801561069f575f80fd5b5061057f6106ae366004612966565b610e8c565b3480156106be575f80fd5b50610349610ed2565b3480156106d2575f80fd5b5061037e6106e136600461297f565b610ee1565b3480156106f1575f80fd5b506103e960175481565b348015610706575f80fd5b506103e960105481565b34801561071b575f80fd5b506103e9601e5481565b348015610730575f80fd5b506103e9601b5481565b348015610745575f80fd5b5061037e6107543660046128a1565b61110e565b348015610764575f80fd5b506103e9600d5481565b348015610779575f80fd5b5061037e6107883660046128a1565b61115b565b348015610798575f80fd5b506103e9600a5481565b3480156107ad575f80fd5b5061057f6107bc366004612909565b611167565b3480156107cc575f80fd5b5061037e6107db366004612909565b60216020525f908152604090205460ff1681565b3480156107fa575f80fd5b5060115461037e90610100900460ff1681565b348015610818575f80fd5b5060135461037e9060ff1681565b348015610831575f80fd5b506103e960145481565b348015610846575f80fd5b5061037e6111ed565b34801561085a575f80fd5b506103e9610869366004612996565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b34801561089e575f80fd5b5061057f6108ad366004612933565b611229565b3480156108bd575f80fd5b5061057f6108cc3660046129cd565b6112b1565b3480156108dc575f80fd5b5061057f6108eb366004612933565b6113da565b3480156108fb575f80fd5b506103e960165481565b348015610910575f80fd5b5061057f61091f366004612909565b611496565b34801561092f575f80fd5b506103e9601a5481565b606060038054610948906129ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610974906129ff565b80156109bf5780601f10610996576101008083540402835291602001916109bf565b820191905f5260205f20905b8154815290600101906020018083116109a257829003601f168201915b5050505050905090565b5f6109d5338484611580565b5060015b92915050565b6005545f906001600160a01b03163314610a145760405162461bcd60e51b8152600401610a0b90612a37565b60405180910390fd5b506013805460ff19169055600190565b5f610a308484846116a4565b610a818433610a7c85604051806060016040528060288152602001612ca6602891396001600160a01b038a165f9081526001602090815260408083203384529091529020549190611fa0565b611580565b5060019392505050565b335f8181526001602090815260408083206001600160a01b038716845290915281205490916109d5918590610a7c9086611fd8565b6005546001600160a01b03163314610aea5760405162461bcd60e51b8152600401610a0b90612a37565b6001600160a01b03919091165f9081526020805260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610b3d5760405162461bcd60e51b8152600401610a0b90612a37565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610bb05760405162461bcd60e51b8152600401610a0b90612a37565b6011805462ffff00191662010100179055565b6005546001600160a01b03163314610bed5760405162461bcd60e51b8152600401610a0b90612a37565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c49573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c6d9190612a6c565b6001600160a01b031663c9c65396307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cd8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cfc9190612a6c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610d46573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d6a9190612a6c565b600680546001600160a01b0319166001600160a01b03929092169182179055610d94906001610ac0565b600654610dab906001600160a01b0316600161203d565b6201869f600b55305f8181526020819052604090205490610ded907f000000000000000000000000000000000000000000000000000000000000000083611580565b60405163f305d71960e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f305d719903490610e4590309086905f90819033904290600401612a87565b60606040518083038185885af1158015610e61573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610e869190612ac2565b50505050565b6005546001600160a01b03163314610eb65760405162461bcd60e51b8152600401610a0b90612a37565b60118054911515620100000262ff000019909216919091179055565b606060048054610948906129ff565b6005545f906001600160a01b03163314610f0d5760405162461bcd60e51b8152600401610a0b90612a37565b600f54601054610f1d9190612b01565b4211610f6b5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610a0b565b6103e8821115610fd05760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610a0b565b426010556006546040516370a0823160e01b81526001600160a01b0390911660048201525f9030906370a0823190602401602060405180830381865afa15801561101c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110409190612b14565b90505f61105a620186a06110548487612090565b9061210e565b9050801561107b5760065461107b906001600160a01b031661dead8361214f565b6006546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae9916004808301925f92919082900301818387803b1580156110c3575f80fd5b505af11580156110d5573d5f803e3d5ffd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb92505f9150a1600193505050505b919050565b5f6109d53384610a7c85604051806060016040528060258152602001612cce60259139335f9081526001602090815260408083206001600160a01b038d1684529091529020549190611fa0565b5f6109d53384846116a4565b6005546001600160a01b031633146111915760405162461bcd60e51b8152600401610a0b90612a37565b6007546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b05674905f90a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005545f906001600160a01b031633146112195760405162461bcd60e51b8152600401610a0b90612a37565b506011805460ff19169055600190565b6005546001600160a01b031633146112535760405162461bcd60e51b8152600401610a0b90612a37565b6001600160a01b0382165f818152601f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146112db5760405162461bcd60e51b8152600401610a0b90612a37565b6102588310156113495760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610a0b565b6103e88211158015611359575060015b6113be5760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610a0b565b600c92909255600b55600e805460ff1916911515919091179055565b6005546001600160a01b031633146114045760405162461bcd60e51b8152600401610a0b90612a37565b6006546001600160a01b03908116908316036114885760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a0b565b611492828261203d565b5050565b6005546001600160a01b031633146114c05760405162461bcd60e51b8152600401610a0b90612a37565b6001600160a01b0381166115255760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a0b565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166115e25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a0b565b6001600160a01b0382166116435760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a0b565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166116ca5760405162461bcd60e51b8152600401610a0b90612b2b565b6001600160a01b0382166116f05760405162461bcd60e51b8152600401610a0b90612b70565b805f036117075761170283835f61214f565b505050565b60115460ff1615611b80576005546001600160a01b0384811691161480159061173e57506005546001600160a01b03838116911614155b801561175257506001600160a01b03821615155b801561176957506001600160a01b03821661dead14155b801561177f5750600654600160a01b900460ff16155b15611b8057601154610100900460ff16611815576001600160a01b0383165f908152601f602052604090205460ff16806117d057506001600160a01b0382165f908152601f602052604090205460ff165b6118155760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a0b565b60135460ff1615611936576005546001600160a01b0383811691161480159061187057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b801561188a57506006546001600160a01b03838116911614155b1561193657325f9081526012602052604090205443116119245760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610a0b565b325f9081526012602052604090204390555b6001600160a01b0383165f9081526021602052604090205460ff16801561197457506001600160a01b0382165f90815260208052604090205460ff16155b15611a4e576008548111156119e05760405162461bcd60e51b815260206004820152602c60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526b36b0bc2a3c20b6b7bab73a1760a11b6064820152608401610a0b565b600a546001600160a01b0383165f90815260208190526040902054611a059083612b01565b1115611a495760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a0b565b611b80565b6001600160a01b0382165f9081526021602052604090205460ff168015611a8c57506001600160a01b0383165f90815260208052604090205460ff16155b15611af957600854811115611a495760405162461bcd60e51b815260206004820152602d60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526c1036b0bc2a3c20b6b7bab73a1760991b6064820152608401610a0b565b6001600160a01b0382165f90815260208052604090205460ff16611b8057600a546001600160a01b0383165f90815260208190526040902054611b3c9083612b01565b1115611b805760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a0b565b305f9081526020819052604081205490505f6009548210158015611ba657506009548310155b9050808015611bbd575060115462010000900460ff165b8015611bd35750600654600160a01b900460ff16155b8015611bf657506001600160a01b0384165f9081526021602052604090205460ff165b8015611c1a57506001600160a01b0385165f908152601f602052604090205460ff16155b8015611c3e57506001600160a01b0384165f908152601f602052604090205460ff16155b15611c6c576006805460ff60a01b1916600160a01b179055611c5e612255565b6006805460ff60a01b191690555b6001600160a01b0385165f9081526021602052604090205460ff168015611caa57506001600160a01b0384165f908152601f602052604090205460ff165b8015611ccc57506001600160a01b0384165f90815260208052604090205460ff165b15611cdf57600e805460ff191660011790555b600654600160a01b900460ff16158015611d1057506001600160a01b0384165f9081526021602052604090205460ff165b8015611d1e5750600e5460ff165b8015611d2c5750600d544210155b8015611d4f57506001600160a01b0385165f908152601f602052604090205460ff165b15611d5e57611d5c61240d565b505b6006546001600160a01b0386165f908152601f602052604090205460ff600160a01b909204821615911680611daa57506001600160a01b0385165f908152601f602052604090205460ff165b15611db257505f5b5f8115611f8c576001600160a01b0386165f9081526021602052604090205460ff168015611de157505f601854115b15611e9657611e0060646110546018548861209090919063ffffffff16565b9050601854601a5482611e139190612bb3565b611e1d9190612bca565b601d5f828254611e2d9190612b01565b9091555050601854601b54611e429083612bb3565b611e4c9190612bca565b601e5f828254611e5c9190612b01565b9091555050601854601954611e719083612bb3565b611e7b9190612bca565b601c5f828254611e8b9190612b01565b90915550611f6e9050565b6001600160a01b0387165f9081526021602052604090205460ff168015611ebe57505f601454115b15611f6e57611edd60646110546014548861209090919063ffffffff16565b905060145460165482611ef09190612bb3565b611efa9190612bca565b601d5f828254611f0a9190612b01565b9091555050601454601754611f1f9083612bb3565b611f299190612bca565b601e5f828254611f399190612b01565b9091555050601454601554611f4e9083612bb3565b611f589190612bca565b601c5f828254611f689190612b01565b90915550505b8015611f7f57611f7f87308361214f565b611f898186612be9565b94505b611f9787878761214f565b50505050505050565b5f8184841115611fc35760405162461bcd60e51b8152600401610a0b919061283f565b505f611fcf8486612be9565b95945050505050565b5f80611fe48385612b01565b9050838110156120365760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a0b565b9392505050565b6001600160a01b0382165f81815260216020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b5f825f0361209f57505f6109d9565b5f6120aa8385612bb3565b9050826120b78583612bca565b146120365760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a0b565b5f61203683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061254f565b6001600160a01b0383166121755760405162461bcd60e51b8152600401610a0b90612b2b565b6001600160a01b03821661219b5760405162461bcd60e51b8152600401610a0b90612b70565b6121d781604051806060016040528060268152602001612c80602691396001600160a01b0386165f908152602081905260409020549190611fa0565b6001600160a01b038085165f9081526020819052604080822093909355908416815220546122059082611fd8565b6001600160a01b038381165f818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611697565b305f9081526020819052604081205490505f601e54601c54601d5461227a9190612b01565b6122849190612b01565b9050811580612291575080155b1561229a575050565b6009546122a8906078612bb3565b8211156122c0576009546122bd906078612bb3565b91505b5f600282601d54856122d29190612bb3565b6122dc9190612bca565b6122e69190612bca565b90505f6122f3848361257b565b9050476122ff826125bc565b5f61230a478361257b565b90505f61232686611054601c548561209090919063ffffffff16565b90505f61234287611054601e548661209090919063ffffffff16565b90505f816123508486612be9565b61235a9190612be9565b5f601d819055601c819055601e559050861580159061237857505f81115b156123cb576123878782612772565b601d54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6007546040516001600160a01b03909116904780156108fc02915f818181858888f19350505050158015612401573d5f803e3d5ffd5b50505050505050505050565b42600d556006546040516370a0823160e01b81526001600160a01b0390911660048201525f90819030906370a0823190602401602060405180830381865afa15801561245b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061247f9190612b14565b90505f61249e620186a0611054600b548561209090919063ffffffff16565b905080156124bf576006546124bf906001600160a01b031661dead8361214f565b6006546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae9916004808301925f92919082900301818387803b158015612507575f80fd5b505af1158015612519573d5f803e3d5ffd5b50506040517f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d92505f9150a16001935050505090565b5f818361256f5760405162461bcd60e51b8152600401610a0b919061283f565b505f611fcf8486612bca565b5f61203683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611fa0565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106125ef576125ef612bfc565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561266b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061268f9190612a6c565b816001815181106126a2576126a2612bfc565b60200260200101906001600160a01b031690816001600160a01b0316815250506126ed307f000000000000000000000000000000000000000000000000000000000000000084611580565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906127419085905f90869030904290600401612c10565b5f604051808303815f87803b158015612758575f80fd5b505af115801561276a573d5f803e3d5ffd5b505050505050565b61279d307f000000000000000000000000000000000000000000000000000000000000000084611580565b60405163f305d71960e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f305d7199083906127f790309087905f90819061dead904290600401612a87565b60606040518083038185885af1158015612813573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906128389190612ac2565b5050505050565b5f6020808352835180828501525f5b8181101561286a5785810183015185820160400152820161284e565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461289e575f80fd5b50565b5f80604083850312156128b2575f80fd5b82356128bd8161288a565b946020939093013593505050565b5f805f606084860312156128dd575f80fd5b83356128e88161288a565b925060208401356128f88161288a565b929592945050506040919091013590565b5f60208284031215612919575f80fd5b81356120368161288a565b80358015158114611109575f80fd5b5f8060408385031215612944575f80fd5b823561294f8161288a565b915061295d60208401612924565b90509250929050565b5f60208284031215612976575f80fd5b61203682612924565b5f6020828403121561298f575f80fd5b5035919050565b5f80604083850312156129a7575f80fd5b82356129b28161288a565b915060208301356129c28161288a565b809150509250929050565b5f805f606084860312156129df575f80fd5b83359250602084013591506129f660408501612924565b90509250925092565b600181811c90821680612a1357607f821691505b602082108103612a3157634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f60208284031215612a7c575f80fd5b81516120368161288a565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b5f805f60608486031215612ad4575f80fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109d9576109d9612aed565b5f60208284031215612b24575f80fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b80820281158282048414176109d9576109d9612aed565b5f82612be457634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156109d9576109d9612aed565b634e487b7160e01b5f52603260045260245ffd5b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612c5e5784516001600160a01b031683529383019391830191600101612c39565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122009a13eab15bf66c99f703b8e508716be20fc523c944d40c7b1fc0a3c5937194364736f6c634300081500334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x60806040526004361061032a575f3560e01c80638c2a4f04116101a3578063aa4bde28116100f2578063dd62ed3e11610092578063eaf1cc761161006d578063eaf1cc76146108d1578063f11a24d3146108f0578063f2fde38b14610905578063f637434214610924575f80fd5b8063dd62ed3e1461084f578063df8408fe14610893578063e75ccc34146108b2575f80fd5b8063bbc0c742116100cd578063bbc0c742146107ef578063c876d0b91461080d578063d85ba06314610826578063db05e5cb1461083b575f80fd5b8063aa4bde281461078d578063aacebbe3146107a2578063b62496f5146107c1575f80fd5b80639c3b4fdc1161015d578063a0d82dc511610138578063a0d82dc514610725578063a457c2d71461073a578063a458a4cf14610759578063a9059cbb1461076e575f80fd5b80639c3b4fdc146106e65780639ec22c0e146106fb5780639fccce3214610710575f80fd5b80638c2a4f041461065a5780638da5cb5b14610662578063921369131461067f578063924de9b71461069457806395d89b41146106b357806398d7e721146106c7575f80fd5b806339509351116102795780636ddd17131161021957806373a756c2116101f457806373a756c2146105fd57806375f0a874146106115780637bce5a04146106305780638c0b5e2214610645575f80fd5b80636ddd17131461059657806370a08231146105b5578063715018a6146105e9575f80fd5b80635342acb4116102545780635342acb4146105145780635f1c31821461054b5780635f711e9b146105605780636a486a8e14610581575f80fd5b806339509351146104c7578063459e5563146104e65780634a62bb65146104fb575f80fd5b80631f3c26ec116102e457806327c8f835116102bf57806327c8f835146104695780632c3e486c1461047e5780632e82f1a014610493578063313ce567146104ac575f80fd5b80631f3c26ec146104215780631f3fed8f1461043557806323b872dd1461044a575f80fd5b806306fdde0314610335578063095ea7b31461035f5780631694505e1461038e57806318160ddd146103d9578063184c16c5146103f75780631a8145bb1461040c575f80fd5b3661033157005b5f80fd5b348015610340575f80fd5b50610349610939565b604051610356919061283f565b60405180910390f35b34801561036a575f80fd5b5061037e6103793660046128a1565b6109c9565b6040519015158152602001610356565b348015610399575f80fd5b506103c17f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610356565b3480156103e4575f80fd5b506002545b604051908152602001610356565b348015610402575f80fd5b506103e9600f5481565b348015610417575f80fd5b506103e9601d5481565b34801561042c575f80fd5b5061037e6109df565b348015610440575f80fd5b506103e9601c5481565b348015610455575f80fd5b5061037e6104643660046128cb565b610a24565b348015610474575f80fd5b506103c161dead81565b348015610489575f80fd5b506103e9600c5481565b34801561049e575f80fd5b50600e5461037e9060ff1681565b3480156104b7575f80fd5b5060405160128152602001610356565b3480156104d2575f80fd5b5061037e6104e13660046128a1565b610a8b565b3480156104f1575f80fd5b506103e9600b5481565b348015610506575f80fd5b5060115461037e9060ff1681565b34801561051f575f80fd5b5061037e61052e366004612909565b6001600160a01b03165f908152601f602052604090205460ff1690565b348015610556575f80fd5b506103e960095481565b34801561056b575f80fd5b5061057f61057a366004612933565b610ac0565b005b34801561058c575f80fd5b506103e960185481565b3480156105a1575f80fd5b5060115461037e9062010000900460ff1681565b3480156105c0575f80fd5b506103e96105cf366004612909565b6001600160a01b03165f9081526020819052604090205490565b3480156105f4575f80fd5b5061057f610b13565b348015610608575f80fd5b5061057f610b86565b34801561061c575f80fd5b506007546103c1906001600160a01b031681565b34801561063b575f80fd5b506103e960155481565b348015610650575f80fd5b506103e960085481565b61057f610bc3565b34801561066d575f80fd5b506005546001600160a01b03166103c1565b34801561068a575f80fd5b506103e960195481565b34801561069f575f80fd5b5061057f6106ae366004612966565b610e8c565b3480156106be575f80fd5b50610349610ed2565b3480156106d2575f80fd5b5061037e6106e136600461297f565b610ee1565b3480156106f1575f80fd5b506103e960175481565b348015610706575f80fd5b506103e960105481565b34801561071b575f80fd5b506103e9601e5481565b348015610730575f80fd5b506103e9601b5481565b348015610745575f80fd5b5061037e6107543660046128a1565b61110e565b348015610764575f80fd5b506103e9600d5481565b348015610779575f80fd5b5061037e6107883660046128a1565b61115b565b348015610798575f80fd5b506103e9600a5481565b3480156107ad575f80fd5b5061057f6107bc366004612909565b611167565b3480156107cc575f80fd5b5061037e6107db366004612909565b60216020525f908152604090205460ff1681565b3480156107fa575f80fd5b5060115461037e90610100900460ff1681565b348015610818575f80fd5b5060135461037e9060ff1681565b348015610831575f80fd5b506103e960145481565b348015610846575f80fd5b5061037e6111ed565b34801561085a575f80fd5b506103e9610869366004612996565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b34801561089e575f80fd5b5061057f6108ad366004612933565b611229565b3480156108bd575f80fd5b5061057f6108cc3660046129cd565b6112b1565b3480156108dc575f80fd5b5061057f6108eb366004612933565b6113da565b3480156108fb575f80fd5b506103e960165481565b348015610910575f80fd5b5061057f61091f366004612909565b611496565b34801561092f575f80fd5b506103e9601a5481565b606060038054610948906129ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610974906129ff565b80156109bf5780601f10610996576101008083540402835291602001916109bf565b820191905f5260205f20905b8154815290600101906020018083116109a257829003601f168201915b5050505050905090565b5f6109d5338484611580565b5060015b92915050565b6005545f906001600160a01b03163314610a145760405162461bcd60e51b8152600401610a0b90612a37565b60405180910390fd5b506013805460ff19169055600190565b5f610a308484846116a4565b610a818433610a7c85604051806060016040528060288152602001612ca6602891396001600160a01b038a165f9081526001602090815260408083203384529091529020549190611fa0565b611580565b5060019392505050565b335f8181526001602090815260408083206001600160a01b038716845290915281205490916109d5918590610a7c9086611fd8565b6005546001600160a01b03163314610aea5760405162461bcd60e51b8152600401610a0b90612a37565b6001600160a01b03919091165f9081526020805260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610b3d5760405162461bcd60e51b8152600401610a0b90612a37565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610bb05760405162461bcd60e51b8152600401610a0b90612a37565b6011805462ffff00191662010100179055565b6005546001600160a01b03163314610bed5760405162461bcd60e51b8152600401610a0b90612a37565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c49573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c6d9190612a6c565b6001600160a01b031663c9c65396307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cd8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cfc9190612a6c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610d46573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d6a9190612a6c565b600680546001600160a01b0319166001600160a01b03929092169182179055610d94906001610ac0565b600654610dab906001600160a01b0316600161203d565b6201869f600b55305f8181526020819052604090205490610ded907f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d83611580565b60405163f305d71960e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063f305d719903490610e4590309086905f90819033904290600401612a87565b60606040518083038185885af1158015610e61573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610e869190612ac2565b50505050565b6005546001600160a01b03163314610eb65760405162461bcd60e51b8152600401610a0b90612a37565b60118054911515620100000262ff000019909216919091179055565b606060048054610948906129ff565b6005545f906001600160a01b03163314610f0d5760405162461bcd60e51b8152600401610a0b90612a37565b600f54601054610f1d9190612b01565b4211610f6b5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610a0b565b6103e8821115610fd05760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610a0b565b426010556006546040516370a0823160e01b81526001600160a01b0390911660048201525f9030906370a0823190602401602060405180830381865afa15801561101c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110409190612b14565b90505f61105a620186a06110548487612090565b9061210e565b9050801561107b5760065461107b906001600160a01b031661dead8361214f565b6006546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae9916004808301925f92919082900301818387803b1580156110c3575f80fd5b505af11580156110d5573d5f803e3d5ffd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb92505f9150a1600193505050505b919050565b5f6109d53384610a7c85604051806060016040528060258152602001612cce60259139335f9081526001602090815260408083206001600160a01b038d1684529091529020549190611fa0565b5f6109d53384846116a4565b6005546001600160a01b031633146111915760405162461bcd60e51b8152600401610a0b90612a37565b6007546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b05674905f90a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005545f906001600160a01b031633146112195760405162461bcd60e51b8152600401610a0b90612a37565b506011805460ff19169055600190565b6005546001600160a01b031633146112535760405162461bcd60e51b8152600401610a0b90612a37565b6001600160a01b0382165f818152601f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146112db5760405162461bcd60e51b8152600401610a0b90612a37565b6102588310156113495760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610a0b565b6103e88211158015611359575060015b6113be5760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610a0b565b600c92909255600b55600e805460ff1916911515919091179055565b6005546001600160a01b031633146114045760405162461bcd60e51b8152600401610a0b90612a37565b6006546001600160a01b03908116908316036114885760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a0b565b611492828261203d565b5050565b6005546001600160a01b031633146114c05760405162461bcd60e51b8152600401610a0b90612a37565b6001600160a01b0381166115255760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a0b565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166115e25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a0b565b6001600160a01b0382166116435760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a0b565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166116ca5760405162461bcd60e51b8152600401610a0b90612b2b565b6001600160a01b0382166116f05760405162461bcd60e51b8152600401610a0b90612b70565b805f036117075761170283835f61214f565b505050565b60115460ff1615611b80576005546001600160a01b0384811691161480159061173e57506005546001600160a01b03838116911614155b801561175257506001600160a01b03821615155b801561176957506001600160a01b03821661dead14155b801561177f5750600654600160a01b900460ff16155b15611b8057601154610100900460ff16611815576001600160a01b0383165f908152601f602052604090205460ff16806117d057506001600160a01b0382165f908152601f602052604090205460ff165b6118155760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a0b565b60135460ff1615611936576005546001600160a01b0383811691161480159061187057507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b801561188a57506006546001600160a01b03838116911614155b1561193657325f9081526012602052604090205443116119245760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610a0b565b325f9081526012602052604090204390555b6001600160a01b0383165f9081526021602052604090205460ff16801561197457506001600160a01b0382165f90815260208052604090205460ff16155b15611a4e576008548111156119e05760405162461bcd60e51b815260206004820152602c60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526b36b0bc2a3c20b6b7bab73a1760a11b6064820152608401610a0b565b600a546001600160a01b0383165f90815260208190526040902054611a059083612b01565b1115611a495760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a0b565b611b80565b6001600160a01b0382165f9081526021602052604090205460ff168015611a8c57506001600160a01b0383165f90815260208052604090205460ff16155b15611af957600854811115611a495760405162461bcd60e51b815260206004820152602d60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526c1036b0bc2a3c20b6b7bab73a1760991b6064820152608401610a0b565b6001600160a01b0382165f90815260208052604090205460ff16611b8057600a546001600160a01b0383165f90815260208190526040902054611b3c9083612b01565b1115611b805760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a0b565b305f9081526020819052604081205490505f6009548210158015611ba657506009548310155b9050808015611bbd575060115462010000900460ff165b8015611bd35750600654600160a01b900460ff16155b8015611bf657506001600160a01b0384165f9081526021602052604090205460ff165b8015611c1a57506001600160a01b0385165f908152601f602052604090205460ff16155b8015611c3e57506001600160a01b0384165f908152601f602052604090205460ff16155b15611c6c576006805460ff60a01b1916600160a01b179055611c5e612255565b6006805460ff60a01b191690555b6001600160a01b0385165f9081526021602052604090205460ff168015611caa57506001600160a01b0384165f908152601f602052604090205460ff165b8015611ccc57506001600160a01b0384165f90815260208052604090205460ff165b15611cdf57600e805460ff191660011790555b600654600160a01b900460ff16158015611d1057506001600160a01b0384165f9081526021602052604090205460ff165b8015611d1e5750600e5460ff165b8015611d2c5750600d544210155b8015611d4f57506001600160a01b0385165f908152601f602052604090205460ff165b15611d5e57611d5c61240d565b505b6006546001600160a01b0386165f908152601f602052604090205460ff600160a01b909204821615911680611daa57506001600160a01b0385165f908152601f602052604090205460ff165b15611db257505f5b5f8115611f8c576001600160a01b0386165f9081526021602052604090205460ff168015611de157505f601854115b15611e9657611e0060646110546018548861209090919063ffffffff16565b9050601854601a5482611e139190612bb3565b611e1d9190612bca565b601d5f828254611e2d9190612b01565b9091555050601854601b54611e429083612bb3565b611e4c9190612bca565b601e5f828254611e5c9190612b01565b9091555050601854601954611e719083612bb3565b611e7b9190612bca565b601c5f828254611e8b9190612b01565b90915550611f6e9050565b6001600160a01b0387165f9081526021602052604090205460ff168015611ebe57505f601454115b15611f6e57611edd60646110546014548861209090919063ffffffff16565b905060145460165482611ef09190612bb3565b611efa9190612bca565b601d5f828254611f0a9190612b01565b9091555050601454601754611f1f9083612bb3565b611f299190612bca565b601e5f828254611f399190612b01565b9091555050601454601554611f4e9083612bb3565b611f589190612bca565b601c5f828254611f689190612b01565b90915550505b8015611f7f57611f7f87308361214f565b611f898186612be9565b94505b611f9787878761214f565b50505050505050565b5f8184841115611fc35760405162461bcd60e51b8152600401610a0b919061283f565b505f611fcf8486612be9565b95945050505050565b5f80611fe48385612b01565b9050838110156120365760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a0b565b9392505050565b6001600160a01b0382165f81815260216020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b5f825f0361209f57505f6109d9565b5f6120aa8385612bb3565b9050826120b78583612bca565b146120365760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a0b565b5f61203683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061254f565b6001600160a01b0383166121755760405162461bcd60e51b8152600401610a0b90612b2b565b6001600160a01b03821661219b5760405162461bcd60e51b8152600401610a0b90612b70565b6121d781604051806060016040528060268152602001612c80602691396001600160a01b0386165f908152602081905260409020549190611fa0565b6001600160a01b038085165f9081526020819052604080822093909355908416815220546122059082611fd8565b6001600160a01b038381165f818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611697565b305f9081526020819052604081205490505f601e54601c54601d5461227a9190612b01565b6122849190612b01565b9050811580612291575080155b1561229a575050565b6009546122a8906078612bb3565b8211156122c0576009546122bd906078612bb3565b91505b5f600282601d54856122d29190612bb3565b6122dc9190612bca565b6122e69190612bca565b90505f6122f3848361257b565b9050476122ff826125bc565b5f61230a478361257b565b90505f61232686611054601c548561209090919063ffffffff16565b90505f61234287611054601e548661209090919063ffffffff16565b90505f816123508486612be9565b61235a9190612be9565b5f601d819055601c819055601e559050861580159061237857505f81115b156123cb576123878782612772565b601d54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6007546040516001600160a01b03909116904780156108fc02915f818181858888f19350505050158015612401573d5f803e3d5ffd5b50505050505050505050565b42600d556006546040516370a0823160e01b81526001600160a01b0390911660048201525f90819030906370a0823190602401602060405180830381865afa15801561245b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061247f9190612b14565b90505f61249e620186a0611054600b548561209090919063ffffffff16565b905080156124bf576006546124bf906001600160a01b031661dead8361214f565b6006546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae9916004808301925f92919082900301818387803b158015612507575f80fd5b505af1158015612519573d5f803e3d5ffd5b50506040517f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d92505f9150a16001935050505090565b5f818361256f5760405162461bcd60e51b8152600401610a0b919061283f565b505f611fcf8486612bca565b5f61203683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611fa0565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106125ef576125ef612bfc565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561266b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061268f9190612a6c565b816001815181106126a2576126a2612bfc565b60200260200101906001600160a01b031690816001600160a01b0316815250506126ed307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611580565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906127419085905f90869030904290600401612c10565b5f604051808303815f87803b158015612758575f80fd5b505af115801561276a573d5f803e3d5ffd5b505050505050565b61279d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611580565b60405163f305d71960e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063f305d7199083906127f790309087905f90819061dead904290600401612a87565b60606040518083038185885af1158015612813573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906128389190612ac2565b5050505050565b5f6020808352835180828501525f5b8181101561286a5785810183015185820160400152820161284e565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461289e575f80fd5b50565b5f80604083850312156128b2575f80fd5b82356128bd8161288a565b946020939093013593505050565b5f805f606084860312156128dd575f80fd5b83356128e88161288a565b925060208401356128f88161288a565b929592945050506040919091013590565b5f60208284031215612919575f80fd5b81356120368161288a565b80358015158114611109575f80fd5b5f8060408385031215612944575f80fd5b823561294f8161288a565b915061295d60208401612924565b90509250929050565b5f60208284031215612976575f80fd5b61203682612924565b5f6020828403121561298f575f80fd5b5035919050565b5f80604083850312156129a7575f80fd5b82356129b28161288a565b915060208301356129c28161288a565b809150509250929050565b5f805f606084860312156129df575f80fd5b83359250602084013591506129f660408501612924565b90509250925092565b600181811c90821680612a1357607f821691505b602082108103612a3157634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f60208284031215612a7c575f80fd5b81516120368161288a565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b5f805f60608486031215612ad4575f80fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109d9576109d9612aed565b5f60208284031215612b24575f80fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b80820281158282048414176109d9576109d9612aed565b5f82612be457634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156109d9576109d9612aed565b634e487b7160e01b5f52603260045260245ffd5b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612c5e5784516001600160a01b031683529383019391830191600101612c39565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122009a13eab15bf66c99f703b8e508716be20fc523c944d40c7b1fc0a3c5937194364736f6c63430008150033

Deployed Bytecode Sourcemap

27559:15081:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7723:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9890:169;;;;;;;;;;-1:-1:-1;9890:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;9890:169:0;1023:187:1;27637:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1406:32:1;;;1388:51;;1376:2;1361:18;27637:51:0;1215:230:1;8843:108:0;;;;;;;;;;-1:-1:-1;8931:12:0;;8843:108;;;1596:25:1;;;1584:2;1569:18;8843:108:0;1450:177:1;28170:47:0;;;;;;;;;;;;;;;;28935:33;;;;;;;;;;;;;;;;32078:136;;;;;;;;;;;;;:::i;28895:33::-;;;;;;;;;;;;;;;;10541:355;;;;;;;;;;-1:-1:-1;10541:355:0;;;;;:::i;:::-;;:::i;27723:89::-;;;;;;;;;;;;27769:42;27723:89;;28040:45;;;;;;;;;;;;;;;;28128:33;;;;;;;;;;-1:-1:-1;28128:33:0;;;;;;;;8685:93;;;;;;;;;;-1:-1:-1;8685:93:0;;8768:2;2443:36:1;;2431:2;2416:18;8685:93:0;2301:184:1;11305:218:0;;;;;;;;;;-1:-1:-1;11305:218:0;;;;;:::i;:::-;;:::i;28000:33::-;;;;;;;;;;;;;;;;28268;;;;;;;;;;-1:-1:-1;28268:33:0;;;;;;;;33395:124;;;;;;;;;;-1:-1:-1;33395:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;33483:28:0;33459:4;33483:28;;;:19;:28;;;;;;;;;33395:124;27923:31;;;;;;;;;;;;;;;;32222:120;;;;;;;;;;-1:-1:-1;32222:120:0;;;;;:::i;:::-;;:::i;:::-;;28750:28;;;;;;;;;;;;;;;;28348:31;;;;;;;;;;-1:-1:-1;28348:31:0;;;;;;;;;;;9014:127;;;;;;;;;;-1:-1:-1;9014:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;9115:18:0;9088:7;9115:18;;;;;;;;;;;;9014:127;22184:148;;;;;;;;;;;;;:::i;31730:112::-;;;;;;;;;;;;;:::i;27851:30::-;;;;;;;;;;-1:-1:-1;27851:30:0;;;;-1:-1:-1;;;;;27851:30:0;;;28643;;;;;;;;;;;;;;;;27890:26;;;;;;;;;;;;;;;;38326:737;;;:::i;21542:79::-;;;;;;;;;;-1:-1:-1;21607:6:0;;-1:-1:-1;;;;;21607:6:0;21542:79;;28785:31;;;;;;;;;;;;;;;;32438:101;;;;;;;;;;-1:-1:-1;32438:101:0;;;;;:::i;:::-;;:::i;7942:104::-;;;;;;;;;;;;;:::i;41891:746::-;;;;;;;;;;-1:-1:-1;41891:746:0;;;;;:::i;:::-;;:::i;28717:24::-;;;;;;;;;;;;;;;;28224:35;;;;;;;;;;;;;;;;28975:27;;;;;;;;;;;;;;;;28861:25;;;;;;;;;;;;;;;;12026:269;;;;;;;;;;-1:-1:-1;12026:269:0;;;;;:::i;:::-;;:::i;28092:29::-;;;;;;;;;;;;;;;;9354:175;;;;;;;;;;-1:-1:-1;9354:175:0;;;;;:::i;:::-;;:::i;27961:30::-;;;;;;;;;;;;;;;;33179:208;;;;;;;;;;-1:-1:-1;33179:208:0;;;;;:::i;:::-;;:::i;29364:58::-;;;;;;;;;;-1:-1:-1;29364:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28308:33;;;;;;;;;;-1:-1:-1;28308:33:0;;;;;;;;;;;28561:39;;;;;;;;;;-1:-1:-1;28561:39:0;;;;;;;;28609:27;;;;;;;;;;;;;;;;31894:123;;;;;;;;;;;;;:::i;9592:151::-;;;;;;;;;;-1:-1:-1;9592:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;9708:18:0;;;9681:7;9708:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9592:151;32547:181;;;;;;;;;;-1:-1:-1;32547:181:0;;;;;:::i;:::-;;:::i;40897:446::-;;;;;;;;;;-1:-1:-1;40897:446:0;;;;;:::i;:::-;;:::i;32736:239::-;;;;;;;;;;-1:-1:-1;32736:239:0;;;;;:::i;:::-;;:::i;28680:30::-;;;;;;;;;;;;;;;;22487:244;;;;;;;;;;-1:-1:-1;22487:244:0;;;;;:::i;:::-;;:::i;28823:31::-;;;;;;;;;;;;;;;;7723:100;7777:13;7810:5;7803:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7723:100;:::o;9890:169::-;9973:4;9990:39;439:10;10013:7;10022:6;9990:8;:39::i;:::-;-1:-1:-1;10047:4:0;9890:169;;;;;:::o;32078:136::-;21754:6;;32140:4;;-1:-1:-1;;;;;21754:6:0;439:10;21754:22;21746:67;;;;-1:-1:-1;;;21746:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;32156:20:0::1;:28:::0;;-1:-1:-1;;32156:28:0::1;::::0;;;32078:136;:::o;10541:355::-;10681:4;10698:36;10708:6;10716:9;10727:6;10698:9;:36::i;:::-;10745:121;10754:6;439:10;10776:89;10814:6;10776:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10776:19:0;;;;;;:11;:19;;;;;;;;439:10;10776:33;;;;;;;;;;:37;:89::i;:::-;10745:8;:121::i;:::-;-1:-1:-1;10884:4:0;10541:355;;;;;:::o;11305:218::-;439:10;11393:4;11442:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11442:34:0;;;;;;;;;;11393:4;;11410:83;;11433:7;;11442:50;;11481:10;11442:38;:50::i;32222:120::-;21754:6;;-1:-1:-1;;;;;21754:6:0;439:10;21754:22;21746:67;;;;-1:-1:-1;;;21746:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32299:28:0;;;::::1;;::::0;;;:20:::1;:28:::0;;;;;:35;;-1:-1:-1;;32299:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32222:120::o;22184:148::-;21754:6;;-1:-1:-1;;;;;21754:6:0;439:10;21754:22;21746:67;;;;-1:-1:-1;;;21746:67:0;;;;;;;:::i;:::-;22275:6:::1;::::0;22254:40:::1;::::0;22291:1:::1;::::0;-1:-1:-1;;;;;22275:6:0::1;::::0;22254:40:::1;::::0;22291:1;;22254:40:::1;22305:6;:19:::0;;-1:-1:-1;;;;;;22305:19:0::1;::::0;;22184:148::o;31730:112::-;21754:6;;-1:-1:-1;;;;;21754:6:0;439:10;21754:22;21746:67;;;;-1:-1:-1;;;21746:67:0;;;;;;;:::i;:::-;31785:13:::1;:20:::0;;-1:-1:-1;;31816:18:0;;;;;31730:112::o;38326:737::-;21754:6;;-1:-1:-1;;;;;21754:6:0;439:10;21754:22;21746:67;;;;-1:-1:-1;;;21746:67:0;;;;;;;:::i;:::-;38429:15:::1;-1:-1:-1::0;;;;;38429:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;38411:55:0::1;;38475:4;38482:15;-1:-1:-1::0;;;;;38482:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38411:94;::::0;-1:-1:-1;;;;;;38411:94:0::1;::::0;;;;;;-1:-1:-1;;;;;5543:15:1;;;38411:94:0::1;::::0;::::1;5525:34:1::0;5595:15;;5575:18;;;5568:43;5460:18;;38411:94:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38395:13;:110:::0;;-1:-1:-1;;;;;;38395:110:0::1;-1:-1:-1::0;;;;;38395:110:0;;;::::1;::::0;;::::1;::::0;;38516:42:::1;::::0;-1:-1:-1;38516:12:0::1;:42::i;:::-;38606:13;::::0;38569:58:::1;::::0;-1:-1:-1;;;;;38606:13:0::1;::::0;38569:28:::1;:58::i;:::-;38654:5;38638:13;:21:::0;38710:4:::1;38670:19;9115:18:::0;;;;;;;;;;;;38727:62:::1;::::0;38759:15:::1;9115:18:::0;38727:8:::1;:62::i;:::-;38800:255;::::0;-1:-1:-1;;;38800:255:0;;-1:-1:-1;;;;;38800:15:0::1;:31;::::0;::::1;::::0;38839:9:::1;::::0;38800:255:::1;::::0;38872:4:::1;::::0;38892:11;;38918:1:::1;::::0;;;39004:10:::1;::::0;39029:15:::1;::::0;38800:255:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;38384:679;38326:737::o:0;32438:101::-;21754:6;;-1:-1:-1;;;;;21754:6:0;439:10;21754:22;21746:67;;;;-1:-1:-1;;;21746:67:0;;;;;;;:::i;:::-;32510:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;32510:21:0;;::::1;::::0;;;::::1;::::0;;32438:101::o;7942:104::-;7998:13;8031:7;8024:14;;;;;:::i;41891:746::-;21754:6;;41964:4;;-1:-1:-1;;;;;21754:6:0;439:10;21754:22;21746:67;;;;-1:-1:-1;;;21746:67:0;;;;;;;:::i;:::-;42029:19:::1;;42006:20;;:42;;;;:::i;:::-;41988:15;:60;41980:106;;;::::0;-1:-1:-1;;;41980:106:0;;7009:2:1;41980:106:0::1;::::0;::::1;6991:21:1::0;;;7028:18;;;7021:30;7087:34;7067:18;;;7060:62;7139:18;;41980:106:0::1;6807:356:1::0;41980:106:0::1;42116:4;42105:7;:15;;42097:70;;;::::0;-1:-1:-1;;;42097:70:0;;7370:2:1;42097:70:0::1;::::0;::::1;7352:21:1::0;7409:2;7389:18;;;7382:30;7448:34;7428:18;;;7421:62;-1:-1:-1;;;7499:18:1;;;7492:40;7549:19;;42097:70:0::1;7168:406:1::0;42097:70:0::1;42201:15;42178:20;:38:::0;42275:13:::1;::::0;42260:29:::1;::::0;-1:-1:-1;;;42260:29:0;;-1:-1:-1;;;;;42275:13:0;;::::1;42260:29;::::0;::::1;1388:51:1::0;42229:28:0::1;::::0;42260:4:::1;::::0;:14:::1;::::0;1361:18:1;;42260:29:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42229:60:::0;-1:-1:-1;42302:20:0::1;42325:45;42363:6;42325:33;42229:60:::0;42350:7;42325:24:::1;:33::i;:::-;:37:::0;::::1;:45::i;:::-;42302:68:::0;-1:-1:-1;42387:16:0;;42383:109:::1;;42435:13;::::0;42419:61:::1;::::0;-1:-1:-1;;;;;42435:13:0::1;42458:6;42467:12:::0;42419:15:::1;:61::i;:::-;42541:13;::::0;42566:11:::1;::::0;;-1:-1:-1;;;;;;42566:11:0;;;;-1:-1:-1;;;;;42541:13:0;;::::1;::::0;;;42566:9:::1;::::0;:11:::1;::::0;;::::1;::::0;42504:19:::1;::::0;42566:11;;;;;;;42504:19;42541:13;42566:11;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;42593:14:0::1;::::0;::::1;::::0;-1:-1:-1;42593:14:0;;-1:-1:-1;42593:14:0::1;42625:4;42618:11;;;;;21824:1;41891:746:::0;;;:::o;12026:269::-;12119:4;12136:129;439:10;12159:7;12168:96;12207:15;12168:96;;;;;;;;;;;;;;;;;439:10;12168:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12168:34:0;;;;;;;;;;;;:38;:96::i;9354:175::-;9440:4;9457:42;439:10;9481:9;9492:6;9457:9;:42::i;33179:208::-;21754:6;;-1:-1:-1;;;;;21754:6:0;439:10;21754:22;21746:67;;;;-1:-1:-1;;;21746:67:0;;;;;;;:::i;:::-;33316:15:::1;::::0;33273:59:::1;::::0;-1:-1:-1;;;;;33316:15:0;;::::1;::::0;33273:59;::::1;::::0;::::1;::::0;33316:15:::1;::::0;33273:59:::1;33343:15;:36:::0;;-1:-1:-1;;;;;;33343:36:0::1;-1:-1:-1::0;;;;;33343:36:0;;;::::1;::::0;;;::::1;::::0;;33179:208::o;31894:123::-;21754:6;;31949:4;;-1:-1:-1;;;;;21754:6:0;439:10;21754:22;21746:67;;;;-1:-1:-1;;;21746:67:0;;;;;;;:::i;:::-;-1:-1:-1;31965:14:0::1;:22:::0;;-1:-1:-1;;31965:22:0::1;::::0;;;31894:123;:::o;32547:181::-;21754:6;;-1:-1:-1;;;;;21754:6:0;439:10;21754:22;21746:67;;;;-1:-1:-1;;;21746:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32631:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;32631:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;32686:34;;1163:41:1;;;32686:34:0::1;::::0;1136:18:1;32686:34:0::1;;;;;;;32547:181:::0;;:::o;40897:446::-;21754:6;;-1:-1:-1;;;;;21754:6:0;439:10;21754:22;21746:67;;;;-1:-1:-1;;;21746:67:0;;;;;;;:::i;:::-;41053:3:::1;41030:19;:26;;41022:90;;;::::0;-1:-1:-1;;;41022:90:0;;7970:2:1;41022:90:0::1;::::0;::::1;7952:21:1::0;8009:2;7989:18;;;7982:30;8048:34;8028:18;;;8021:62;-1:-1:-1;;;8099:18:1;;;8092:49;8158:19;;41022:90:0::1;7768:415:1::0;41022:90:0::1;41143:4;41131:8;:16;;:33;;;;-1:-1:-1::0;41151:13:0;41131:33:::1;41123:94;;;::::0;-1:-1:-1;;;41123:94:0;;8390:2:1;41123:94:0::1;::::0;::::1;8372:21:1::0;8429:2;8409:18;;;8402:30;8468:34;8448:18;;;8441:62;-1:-1:-1;;;8519:18:1;;;8512:46;8575:19;;41123:94:0::1;8188:412:1::0;41123:94:0::1;41228:15;:37:::0;;;;41276:13:::1;:24:::0;41311:13:::1;:24:::0;;-1:-1:-1;;41311:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40897:446::o;32736:239::-;21754:6;;-1:-1:-1;;;;;21754:6:0;439:10;21754:22;21746:67;;;;-1:-1:-1;;;21746:67:0;;;;;;;:::i;:::-;32838:13:::1;::::0;-1:-1:-1;;;;;32838:13:0;;::::1;32830:21:::0;;::::1;::::0;32822:91:::1;;;::::0;-1:-1:-1;;;32822:91:0;;8807:2:1;32822:91:0::1;::::0;::::1;8789:21:1::0;8846:2;8826:18;;;8819:30;8885:34;8865:18;;;8858:62;8956:27;8936:18;;;8929:55;9001:19;;32822:91:0::1;8605:421:1::0;32822:91:0::1;32926:41;32955:4;32961:5;32926:28;:41::i;:::-;32736:239:::0;;:::o;22487:244::-;21754:6;;-1:-1:-1;;;;;21754:6:0;439:10;21754:22;21746:67;;;;-1:-1:-1;;;21746:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22576:22:0;::::1;22568:73;;;::::0;-1:-1:-1;;;22568:73:0;;9233:2:1;22568:73:0::1;::::0;::::1;9215:21:1::0;9272:2;9252:18;;;9245:30;9311:34;9291:18;;;9284:62;-1:-1:-1;;;9362:18:1;;;9355:36;9408:19;;22568:73:0::1;9031:402:1::0;22568:73:0::1;22678:6;::::0;22657:38:::1;::::0;-1:-1:-1;;;;;22657:38:0;;::::1;::::0;22678:6:::1;::::0;22657:38:::1;::::0;22678:6:::1;::::0;22657:38:::1;22706:6;:17:::0;;-1:-1:-1;;;;;;22706:17:0::1;-1:-1:-1::0;;;;;22706:17:0;;;::::1;::::0;;;::::1;::::0;;22487:244::o;15212:380::-;-1:-1:-1;;;;;15348:19:0;;15340:68;;;;-1:-1:-1;;;15340:68:0;;9640:2:1;15340:68:0;;;9622:21:1;9679:2;9659:18;;;9652:30;9718:34;9698:18;;;9691:62;-1:-1:-1;;;9769:18:1;;;9762:34;9813:19;;15340:68:0;9438:400:1;15340:68:0;-1:-1:-1;;;;;15427:21:0;;15419:68;;;;-1:-1:-1;;;15419:68:0;;10045:2:1;15419:68:0;;;10027:21:1;10084:2;10064:18;;;10057:30;10123:34;10103:18;;;10096:62;-1:-1:-1;;;10174:18:1;;;10167:32;10216:19;;15419:68:0;9843:398:1;15419:68:0;-1:-1:-1;;;;;15500:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15552:32;;1596:25:1;;;15552:32:0;;1569:18:1;15552:32:0;;;;;;;;15212:380;;;:::o;33527:4278::-;-1:-1:-1;;;;;33659:18:0;;33651:68;;;;-1:-1:-1;;;33651:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33738:16:0;;33730:64;;;;-1:-1:-1;;;33730:64:0;;;;;;;:::i;:::-;33810:6;33820:1;33810:11;33807:92;;33838:28;33854:4;33860:2;33864:1;33838:15;:28::i;:::-;33527:4278;;;:::o;33807:92::-;33914:14;;;;33911:1727;;;21607:6;;-1:-1:-1;;;;;33966:15:0;;;21607:6;;33966:15;;;;:49;;-1:-1:-1;21607:6:0;;-1:-1:-1;;;;;34002:13:0;;;21607:6;;34002:13;;33966:49;:86;;;;-1:-1:-1;;;;;;34036:16:0;;;;33966:86;:128;;;;-1:-1:-1;;;;;;34073:21:0;;34087:6;34073:21;;33966:128;:158;;;;-1:-1:-1;34116:8:0;;-1:-1:-1;;;34116:8:0;;;;34115:9;33966:158;33944:1683;;;34162:13;;;;;;;34158:148;;-1:-1:-1;;;;;34207:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;34236:23:0;;;;;;:19;:23;;;;;;;;34207:52;34199:87;;;;-1:-1:-1;;;34199:87:0;;11258:2:1;34199:87:0;;;11240:21:1;11297:2;11277:18;;;11270:30;-1:-1:-1;;;11316:18:1;;;11309:52;11378:18;;34199:87:0;11056:346:1;34199:87:0;34462:20;;;;34458:413;;;21607:6;;-1:-1:-1;;;;;34510:13:0;;;21607:6;;34510:13;;;;:47;;;34541:15;-1:-1:-1;;;;;34527:30:0;:2;-1:-1:-1;;;;;34527:30:0;;;34510:47;:79;;;;-1:-1:-1;34575:13:0;;-1:-1:-1;;;;;34561:28:0;;;34575:13;;34561:28;;34510:79;34506:346;;;34649:9;34625:34;;;;:23;:34;;;;;;34662:12;-1:-1:-1;34617:135:0;;;;-1:-1:-1;;;34617:135:0;;11609:2:1;34617:135:0;;;11591:21:1;11648:2;11628:18;;;11621:30;11687:34;11667:18;;;11660:62;11758:34;11738:18;;;11731:62;-1:-1:-1;;;11809:19:1;;;11802:40;11859:19;;34617:135:0;11407:477:1;34617:135:0;34803:9;34779:34;;;;:23;:34;;;;;34816:12;34779:49;;34506:346;-1:-1:-1;;;;;34923:31:0;;;;;;:25;:31;;;;;;;;:60;;;;-1:-1:-1;;;;;;34959:24:0;;;;;;:20;:24;;;;;;;;34958:25;34923:60;34919:693;;;35026:11;;35016:6;:21;;35008:78;;;;-1:-1:-1;;;35008:78:0;;12091:2:1;35008:78:0;;;12073:21:1;12130:2;12110:18;;;12103:30;12169:34;12149:18;;;12142:62;-1:-1:-1;;;12220:18:1;;;12213:42;12272:19;;35008:78:0;11889:408:1;35008:78:0;35143:15;;-1:-1:-1;;;;;9115:18:0;;9088:7;9115:18;;;;;;;;;;;35117:22;;:6;:22;:::i;:::-;:41;;35109:73;;;;-1:-1:-1;;;35109:73:0;;12504:2:1;35109:73:0;;;12486:21:1;12543:2;12523:18;;;12516:30;-1:-1:-1;;;12562:18:1;;;12555:49;12621:18;;35109:73:0;12302:343:1;35109:73:0;34919:693;;;-1:-1:-1;;;;;35260:29:0;;;;;;:25;:29;;;;;;;;:60;;;;-1:-1:-1;;;;;;35294:26:0;;;;;;:20;:26;;;;;;;;35293:27;35260:60;35256:356;;;35363:11;;35353:6;:21;;35345:79;;;;-1:-1:-1;;;35345:79:0;;12852:2:1;35345:79:0;;;12834:21:1;12891:2;12871:18;;;12864:30;12930:34;12910:18;;;12903:62;-1:-1:-1;;;12981:18:1;;;12974:43;13034:19;;35345:79:0;12650:409:1;35256:356:0;-1:-1:-1;;;;;35471:24:0;;;;;;:20;:24;;;;;;;;35467:145;;35553:15;;-1:-1:-1;;;;;9115:18:0;;9088:7;9115:18;;;;;;;;;;;35527:22;;:6;:22;:::i;:::-;:41;;35519:73;;;;-1:-1:-1;;;35519:73:0;;12504:2:1;35519:73:0;;;12486:21:1;12543:2;12523:18;;;12516:30;-1:-1:-1;;;12562:18:1;;;12555:49;12621:18;;35519:73:0;12302:343:1;35519:73:0;35699:4;35650:28;9115:18;;;;;;;;;;;35650:55;;35718:12;35757:16;;35733:20;:40;;:70;;;;;35787:16;;35777:6;:26;;35733:70;35718:85;;35833:7;:35;;;;-1:-1:-1;35857:11:0;;;;;;;35833:35;:61;;;;-1:-1:-1;35886:8:0;;-1:-1:-1;;;35886:8:0;;;;35885:9;35833:61;:107;;;;-1:-1:-1;;;;;;35911:29:0;;;;;;:25;:29;;;;;;;;35833:107;:150;;;;-1:-1:-1;;;;;;35958:25:0;;;;;;:19;:25;;;;;;;;35957:26;35833:150;:191;;;;-1:-1:-1;;;;;;36001:23:0;;;;;;:19;:23;;;;;;;;36000:24;35833:191;35816:322;;;36051:8;:15;;-1:-1:-1;;;;36051:15:0;-1:-1:-1;;;36051:15:0;;;36083:10;:8;:10::i;:::-;36110:8;:16;;-1:-1:-1;;;;36110:16:0;;;35816:322;-1:-1:-1;;;;;36151:31:0;;;;;;:25;:31;;;;;;;;:58;;;;-1:-1:-1;;;;;;36186:23:0;;;;;;:19;:23;;;;;;;;36151:58;:86;;;;-1:-1:-1;;;;;;36213:24:0;;;;;;:20;:24;;;;;;;;36151:86;36148:111;;;36239:13;:20;;-1:-1:-1;;36239:20:0;36255:4;36239:20;;;36148:111;36274:8;;-1:-1:-1;;;36274:8:0;;;;36273:9;:42;;;;-1:-1:-1;;;;;;36286:29:0;;;;;;:25;:29;;;;;;;;36273:42;:59;;;;-1:-1:-1;36319:13:0;;;;36273:59;:96;;;;;36355:14;;36336:15;:33;;36273:96;:125;;;;-1:-1:-1;;;;;;36373:25:0;;;;;;:19;:25;;;;;;;;36273:125;36270:185;;;36414:29;:27;:29::i;:::-;;36270:185;36483:8;;-1:-1:-1;;;;;36592:25:0;;36467:12;36592:25;;;:19;:25;;;;;;36483:8;-1:-1:-1;;;36483:8:0;;;;;36482:9;;36592:25;;:52;;-1:-1:-1;;;;;;36621:23:0;;;;;;:19;:23;;;;;;;;36592:52;36589:99;;;-1:-1:-1;36671:5:0;36589:99;36700:12;36804:7;36801:951;;;-1:-1:-1;;;;;36855:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;36904:1;36888:13;;:17;36855:50;36851:754;;;36932:34;36962:3;36932:25;36943:13;;36932:6;:10;;:25;;;;:::i;:34::-;36925:41;;37033:13;;37014:16;;37007:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;36985:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;37101:13:0;;37088:10;;37081:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;37065:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;37181:13:0;;37162:16;;37155:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;37133:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;36851:754:0;;-1:-1:-1;36851:754:0;;-1:-1:-1;;;;;37255:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;37305:1;37290:12;;:16;37255:51;37252:353;;;37334:33;37363:3;37334:24;37345:12;;37334:6;:10;;:24;;;;:::i;:33::-;37327:40;;37433:12;;37415:15;;37408:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;37386:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;37499:12:0;;37487:9;;37480:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;37464:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;37577:12:0;;37559:15;;37552:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;37530:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;37252:353:0;37624:8;;37621:89;;37652:42;37668:4;37682;37689;37652:15;:42::i;:::-;37726:14;37736:4;37726:14;;:::i;:::-;;;36801:951;37764:33;37780:4;37786:2;37790:6;37764:15;:33::i;:::-;33640:4165;;;;33527:4278;;;:::o;17493:192::-;17579:7;17615:12;17607:6;;;;17599:29;;;;-1:-1:-1;;;17599:29:0;;;;;;;;:::i;:::-;-1:-1:-1;17639:9:0;17651:5;17655:1;17651;:5;:::i;:::-;17639:17;17493:192;-1:-1:-1;;;;;17493:192:0:o;16590:181::-;16648:7;;16680:5;16684:1;16680;:5;:::i;:::-;16668:17;;16709:1;16704;:6;;16696:46;;;;-1:-1:-1;;;16696:46:0;;13794:2:1;16696:46:0;;;13776:21:1;13833:2;13813:18;;;13806:30;13872:29;13852:18;;;13845:57;13919:18;;16696:46:0;13592:351:1;16696:46:0;16762:1;16590:181;-1:-1:-1;;;16590:181:0:o;32983:188::-;-1:-1:-1;;;;;33066:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;33066:39:0;;;;;;;;;;33123:40;;33066:39;;:31;33123:40;;;32983:188;;:::o;17944:471::-;18002:7;18247:1;18252;18247:6;18243:47;;-1:-1:-1;18277:1:0;18270:8;;18243:47;18302:9;18314:5;18318:1;18314;:5;:::i;:::-;18302:17;-1:-1:-1;18347:1:0;18338:5;18342:1;18302:17;18338:5;:::i;:::-;:10;18330:56;;;;-1:-1:-1;;;18330:56:0;;14150:2:1;18330:56:0;;;14132:21:1;14189:2;14169:18;;;14162:30;14228:34;14208:18;;;14201:62;-1:-1:-1;;;14279:18:1;;;14272:31;14320:19;;18330:56:0;13948:397:1;18891:132:0;18949:7;18976:39;18980:1;18983;18976:39;;;;;;;;;;;;;;;;;:3;:39::i;12785:573::-;-1:-1:-1;;;;;12925:20:0;;12917:70;;;;-1:-1:-1;;;12917:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13006:23:0;;12998:71;;;;-1:-1:-1;;;12998:71:0;;;;;;;:::i;:::-;13162;13184:6;13162:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13162:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;13142:17:0;;;:9;:17;;;;;;;;;;;:91;;;;13267:20;;;;;;;:32;;13292:6;13267:24;:32::i;:::-;-1:-1:-1;;;;;13244:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;13315:35;1596:25:1;;;13244:20:0;;13315:35;;;;;;1569:18:1;13315:35:0;1450:177:1;39499:1390:0;39582:4;39538:23;9115:18;;;;;;;;;;;39538:50;;39599:25;39669:12;;39648:18;;39627;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;39599:82;-1:-1:-1;39697:20:0;;;:46;;-1:-1:-1;39721:22:0;;39697:46;39694:60;;;39746:7;;39499:1390::o;39694:60::-;39787:16;;:22;;39806:3;39787:22;:::i;:::-;39769:15;:40;39766:111;;;39843:16;;:22;;39862:3;39843:22;:::i;:::-;39825:40;;39766:111;39889:23;39974:1;39954:17;39933:18;;39915:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;39889:86;-1:-1:-1;39986:26:0;40015:36;:15;39889:86;40015:19;:36::i;:::-;39986:65;-1:-1:-1;40092:21:0;40126:36;39986:65;40126:16;:36::i;:::-;40175:18;40196:44;:21;40222:17;40196:25;:44::i;:::-;40175:65;;40253:23;40279:57;40318:17;40279:34;40294:18;;40279:10;:14;;:34;;;;:::i;:57::-;40253:83;;40347:17;40367:51;40400:17;40367:28;40382:12;;40367:10;:14;;:28;;;;:::i;:51::-;40347:71;-1:-1:-1;40429:23:0;40347:71;40455:28;40468:15;40455:10;:28;:::i;:::-;:40;;;;:::i;:::-;40529:1;40508:18;:22;;;40541:18;:22;;;40574:12;:16;40429:66;-1:-1:-1;40606:19:0;;;;;:42;;;40647:1;40629:15;:19;40606:42;40603:210;;;40664:46;40677:15;40694;40664:12;:46::i;:::-;40782:18;;40730:71;;;14552:25:1;;;14608:2;14593:18;;14586:34;;;14636:18;;;14629:34;;;;40730:71:0;;;;;;14540:2:1;40730:71:0;;;40603:210;40833:15;;40825:56;;-1:-1:-1;;;;;40833:15:0;;;;40859:21;40825:56;;;;;40833:15;40825:56;40833:15;40825:56;40859:21;40833:15;40825:56;;;;;;;;;;;;;;;;;;;;;39527:1362;;;;;;;;;39499:1390::o;41351:532::-;41443:15;41426:14;:32;41517:13;;41502:29;;-1:-1:-1;;;41502:29:0;;-1:-1:-1;;;;;41517:13:0;;;41502:29;;;1388:51:1;41408:4:0;;;;41502;;:14;;1361:18:1;;41502:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41471:60;;41544:20;41567:51;41611:6;41567:39;41592:13;;41567:20;:24;;:39;;;;:::i;:51::-;41544:74;-1:-1:-1;41635:16:0;;41631:109;;41683:13;;41667:61;;-1:-1:-1;;;;;41683:13:0;41706:6;41715:12;41667:15;:61::i;:::-;41789:13;;41814:11;;;-1:-1:-1;;;;;;41814:11:0;;;;-1:-1:-1;;;;;41789:13:0;;;;;;41814:9;;:11;;;;;41752:19;;41814:11;;;;;;;41752:19;41789:13;41814:11;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;41841:12:0;;;;-1:-1:-1;41841:12:0;;-1:-1:-1;41841:12:0;41871:4;41864:11;;;;;41351:532;:::o;19519:278::-;19605:7;19640:12;19633:5;19625:28;;;;-1:-1:-1;;;19625:28:0;;;;;;;;:::i;:::-;-1:-1:-1;19664:9:0;19676:5;19680:1;19676;:5;:::i;17054:136::-;17112:7;17139:43;17143:1;17146;17139:43;;;;;;;;;;;;;;;;;:3;:43::i;37813:505::-;37903:16;;;37917:1;37903:16;;;;;;;;37879:21;;37903:16;;;;;;;;;;-1:-1:-1;37903:16:0;37879:40;;37948:4;37930;37935:1;37930:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;37930:23:0;;;-1:-1:-1;;;;;37930:23:0;;;;;37974:15;-1:-1:-1;;;;;37974:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37964:4;37969:1;37964:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;37964:32:0;;;-1:-1:-1;;;;;37964:32:0;;;;;38009:62;38026:4;38041:15;38059:11;38009:8;:62::i;:::-;38084:224;;-1:-1:-1;;;38084:224:0;;-1:-1:-1;;;;;38084:15:0;:66;;;;:224;;38165:11;;38191:1;;38235:4;;38262;;38282:15;;38084:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37868:450;37813:505;:::o;39071:420::-;39152:62;39169:4;39184:15;39202:11;39152:8;:62::i;:::-;39227:256;;-1:-1:-1;;;39227:256:0;;-1:-1:-1;;;;;39227:15:0;:31;;;;39266:9;;39227:256;;39299:4;;39319:11;;39345:1;;;;27769:42;;39457:15;;39227:256;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;39071:420;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1632:456::-;1709:6;1717;1725;1778:2;1766:9;1757:7;1753:23;1749:32;1746:52;;;1794:1;1791;1784:12;1746:52;1833:9;1820:23;1852:31;1877:5;1852:31;:::i;:::-;1902:5;-1:-1:-1;1959:2:1;1944:18;;1931:32;1972:33;1931:32;1972:33;:::i;:::-;1632:456;;2024:7;;-1:-1:-1;;;2078:2:1;2063:18;;;;2050:32;;1632:456::o;2490:247::-;2549:6;2602:2;2590:9;2581:7;2577:23;2573:32;2570:52;;;2618:1;2615;2608:12;2570:52;2657:9;2644:23;2676:31;2701:5;2676:31;:::i;2742:160::-;2807:20;;2863:13;;2856:21;2846:32;;2836:60;;2892:1;2889;2882:12;2907:315;2972:6;2980;3033:2;3021:9;3012:7;3008:23;3004:32;3001:52;;;3049:1;3046;3039:12;3001:52;3088:9;3075:23;3107:31;3132:5;3107:31;:::i;:::-;3157:5;-1:-1:-1;3181:35:1;3212:2;3197:18;;3181:35;:::i;:::-;3171:45;;2907:315;;;;;:::o;3227:180::-;3283:6;3336:2;3324:9;3315:7;3311:23;3307:32;3304:52;;;3352:1;3349;3342:12;3304:52;3375:26;3391:9;3375:26;:::i;3412:180::-;3471:6;3524:2;3512:9;3503:7;3499:23;3495:32;3492:52;;;3540:1;3537;3530:12;3492:52;-1:-1:-1;3563:23:1;;3412:180;-1:-1:-1;3412:180:1:o;3597:388::-;3665:6;3673;3726:2;3714:9;3705:7;3701:23;3697:32;3694:52;;;3742:1;3739;3732:12;3694:52;3781:9;3768:23;3800:31;3825:5;3800:31;:::i;:::-;3850:5;-1:-1:-1;3907:2:1;3892:18;;3879:32;3920:33;3879:32;3920:33;:::i;:::-;3972:7;3962:17;;;3597:388;;;;;:::o;3990:316::-;4064:6;4072;4080;4133:2;4121:9;4112:7;4108:23;4104:32;4101:52;;;4149:1;4146;4139:12;4101:52;4185:9;4172:23;4162:33;;4242:2;4231:9;4227:18;4214:32;4204:42;;4265:35;4296:2;4285:9;4281:18;4265:35;:::i;:::-;4255:45;;3990:316;;;;;:::o;4311:380::-;4390:1;4386:12;;;;4433;;;4454:61;;4508:4;4500:6;4496:17;4486:27;;4454:61;4561:2;4553:6;4550:14;4530:18;4527:38;4524:161;;4607:10;4602:3;4598:20;4595:1;4588:31;4642:4;4639:1;4632:15;4670:4;4667:1;4660:15;4524:161;;4311:380;;;:::o;4696:356::-;4898:2;4880:21;;;4917:18;;;4910:30;4976:34;4971:2;4956:18;;4949:62;5043:2;5028:18;;4696:356::o;5057:251::-;5127:6;5180:2;5168:9;5159:7;5155:23;5151:32;5148:52;;;5196:1;5193;5186:12;5148:52;5228:9;5222:16;5247:31;5272:5;5247:31;:::i;5622:607::-;-1:-1:-1;;;;;5981:15:1;;;5963:34;;6028:2;6013:18;;6006:34;;;;6071:2;6056:18;;6049:34;;;;6114:2;6099:18;;6092:34;;;;6163:15;;;6157:3;6142:19;;6135:44;5943:3;6195:19;;6188:35;;;;5912:3;5897:19;;5622:607::o;6234:306::-;6322:6;6330;6338;6391:2;6379:9;6370:7;6366:23;6362:32;6359:52;;;6407:1;6404;6397:12;6359:52;6436:9;6430:16;6420:26;;6486:2;6475:9;6471:18;6465:25;6455:35;;6530:2;6519:9;6515:18;6509:25;6499:35;;6234:306;;;;;:::o;6545:127::-;6606:10;6601:3;6597:20;6594:1;6587:31;6637:4;6634:1;6627:15;6661:4;6658:1;6651:15;6677:125;6742:9;;;6763:10;;;6760:36;;;6776:18;;:::i;7579:184::-;7649:6;7702:2;7690:9;7681:7;7677:23;7673:32;7670:52;;;7718:1;7715;7708:12;7670:52;-1:-1:-1;7741:16:1;;7579:184;-1:-1:-1;7579:184:1:o;10246:401::-;10448:2;10430:21;;;10487:2;10467:18;;;10460:30;10526:34;10521:2;10506:18;;10499:62;-1:-1:-1;;;10592:2:1;10577:18;;10570:35;10637:3;10622:19;;10246:401::o;10652:399::-;10854:2;10836:21;;;10893:2;10873:18;;;10866:30;10932:34;10927:2;10912:18;;10905:62;-1:-1:-1;;;10998:2:1;10983:18;;10976:33;11041:3;11026:19;;10652:399::o;13064:168::-;13137:9;;;13168;;13185:15;;;13179:22;;13165:37;13155:71;;13206:18;;:::i;13237:217::-;13277:1;13303;13293:132;;13347:10;13342:3;13338:20;13335:1;13328:31;13382:4;13379:1;13372:15;13410:4;13407:1;13400:15;13293:132;-1:-1:-1;13439:9:1;;13237:217::o;13459:128::-;13526:9;;;13547:11;;;13544:37;;;13561:18;;:::i;14806:127::-;14867:10;14862:3;14858:20;14855:1;14848:31;14898:4;14895:1;14888:15;14922:4;14919:1;14912:15;14938:980;15200:4;15248:3;15237:9;15233:19;15279:6;15268:9;15261:25;15305:2;15343:6;15338:2;15327:9;15323:18;15316:34;15386:3;15381:2;15370:9;15366:18;15359:31;15410:6;15445;15439:13;15476:6;15468;15461:22;15514:3;15503:9;15499:19;15492:26;;15553:2;15545:6;15541:15;15527:29;;15574:1;15584:195;15598:6;15595:1;15592:13;15584:195;;;15663:13;;-1:-1:-1;;;;;15659:39:1;15647:52;;15754:15;;;;15719:12;;;;15695:1;15613:9;15584:195;;;-1:-1:-1;;;;;;;15835:32:1;;;;15830:2;15815:18;;15808:60;-1:-1:-1;;;15899:3:1;15884:19;15877:35;15796:3;14938:980;-1:-1:-1;;;14938:980:1:o

Swarm Source

ipfs://09a13eab15bf66c99f703b8e508716be20fc523c944d40c7b1fc0a3c59371943
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.