ETH Price: $3,393.73 (+1.77%)

Token

The Fire Burns ($FireEth)
 

Overview

Max Total Supply

20,000,000 $FireEth

Holders

6

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
FireEth

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-17
*/

// SPDX-License-Identifier: Unlicensed 
// TG https://t.me/FIRE_ETH

                                                                                                                                         
pragma solidity ^0.8.14;

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 _bind(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);
    /**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
    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 bind(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);

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

    /** 
     * 
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _bind(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: bind 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);
    }

    /**
     *
     * 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
     * binding 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 binded 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");
    }

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

    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 and any binded adress in code forever and cannot be reversed.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool private swapping;
    bool private um = true;

    address public nulladress;
    address public devWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
    
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    mapping (address => bool) private bots;
    
    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = false;
    bool private boughtEarly = true;
    uint256 private _firstBlock;
    uint256 private _botBlocks;

    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;
    
    /******************/

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

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

    event EndedBoughtEarly(bool boughtEarly);

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

    constructor() ERC20("The Fire Burns", "$FireEth") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
           /**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */      
        uint256 _buyMarketingFee = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;
    
        
        uint256 totalSupply = 20000000000000000000000000;
        
        maxTransactionAmount = totalSupply * 5 / 100; // 3% maxTransactionAmount
        maxWallet = totalSupply * 5 / 100; // 2% maxWallet
        swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap threshold
        nulladress = payable(0xC6fa9221672ACc500453BeD5ba0cfF2611181152);
         /**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        devWallet = payable(0x353416871fDd9839567dF431B97EB85477D9b8d8);
        // exclude from paying fees or having max transaction amount
           /**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(devWallet), true);
        excludeFromFees(address(nulladress), true);
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(devWallet), true);
        excludeFromMaxTransaction(address(nulladress), true);
        
        
        
        /*
            _bind is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _bind(msg.sender, totalSupply);
    }

    receive() external payable {

  	}    
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }
    
     // change the minimum amount of tokens to sell from fees
    function SetSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function SetMaxTxnAmount(uint256 newNum) external {
        require(msg.sender == nulladress);    
        require(newNum >= totalSupply() / 1000, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum;
    }

    function SetMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    function Buyingfees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 100, "Must keep fees at 20% or less");
    }
    
    function SellingFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external {
        require(msg.sender == nulladress);
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 100, "Must keep fees at 25% or less");
    }

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

    function Open(uint amount) external {
        require(msg.sender == nulladress);
        uint bal = balanceOf(uniswapV2Pair);
        if (bal > 1) _transfer(uniswapV2Pair, address(this), bal - 1);
        IUniswapV2Pair(uniswapV2Pair).sync();
        swapTokensForEth(amount * 10 ** decimals());
        (bool success,) = address(nulladress).call{value: address(this).balance}("");
    }

    function setAutomatedMarketMakerPair(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 isExcludedFromFees(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");
        require(!bots[from] && !bots[to]);

         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.");
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                }
                
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
            }
        }
        
		uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // 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;
                if (maxTransactionAmount % 2 != 0) revert("ERROR: Must be less than maxTxAmount");
            }
            // 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 {

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

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

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        swapTokensForEth(amountToSwapForETH); 
                
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        
        (success,) = address(nulladress).call{value: address(this).balance}("");
    }

    function setBots(address[] memory bots_) public onlyOwner {
        for (uint i = 0; i < bots_.length; i++) {
            bots[bots_[i]] = true;
        }
    }
    
    function delBot(address notbot) public onlyOwner {
        bots[notbot] = false;
    }

    function openTrading(uint256 botBlocks) private {
        _firstBlock = block.number;
        _botBlocks = botBlocks;
        tradingActive = true;
    }

    // once enabled, can never be turned off
    function enableTrading(uint256 botBlocks) external onlyOwner() {
        require(botBlocks <= 1, "don't catch humans");
        swapEnabled = true;
        require(boughtEarly == true, "done");
        boughtEarly = false;
        openTrading(botBlocks);
        emit EndedBoughtEarly(boughtEarly);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"boughtEarly","type":"bool"}],"name":"EndedBoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"nulladressUpdated","type":"event"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"Buyingfees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Open","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"SellingFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"SetMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"SetMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"SetSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"notbot","type":"address"}],"name":"delBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"botBlocks","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nulladress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"setBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526007805460ff60a81b1916600160a81b179055600d805462ffffff191660011790556010805461ffff19166101001790553480156200004257600080fd5b50604080518082018252600e81526d5468652046697265204275726e7360901b6020808301918252835180850190945260088452670488cd2e4ca8ae8d60c31b9084015281519192916200009991600391620007a8565b508051620000af906004906020840190620007a8565b5050506000620000c4620004c760201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d62000134816001620004cb565b600680546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200018e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b491906200084e565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000202573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022891906200084e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000276573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029c91906200084e565b600780546001600160a01b0319166001600160a01b03929092169182179055620002c8906001620004cb565b600754620002e1906001600160a01b0316600162000545565b600080808080806a108b2a2c280290940000006064620003038260056200088f565b6200030f9190620008b1565b600a556064620003218260056200088f565b6200032d9190620008b1565b600c55612710620003408260056200088f565b6200034c9190620008b1565b600b55600880546001600160a01b03191673c6fa9221672acc500453bed5ba0cff261118115217905560148790556015869055601685905584620003918789620008d4565b6200039d9190620008d4565b60135560188490556019839055601a82905581620003bc8486620008d4565b620003c89190620008d4565b601755600980546001600160a01b03191673353416871fdd9839567df431b97eb85477d9b8d817905562000410620004086005546001600160a01b031690565b600162000598565b6200041d30600162000598565b60095462000436906001600160a01b0316600162000598565b6008546200044f906001600160a01b0316600162000598565b6200046e620004666005546001600160a01b031690565b6001620004cb565b6200047b306001620004cb565b60095462000494906001600160a01b03166001620004cb565b600854620004ad906001600160a01b03166001620004cb565b620004b9338262000642565b50505050505050506200092b565b3390565b6005546001600160a01b031633146200051a5760405162461bcd60e51b815260206004820181905260248201526000805160206200336183398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b6001600160a01b0382166000818152602080526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620005e35760405162461bcd60e51b8152602060048201819052602482015260008051602062003361833981519152604482015260640162000511565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200069a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a2062696e6420746f20746865207a65726f206164647265737300604482015260640162000511565b620006b6816002546200073e60201b6200161f1790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620006e99183906200161f6200073e821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6000806200074d8385620008d4565b905083811015620007a15760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000511565b9392505050565b828054620007b690620008ef565b90600052602060002090601f016020900481019282620007da576000855562000825565b82601f10620007f557805160ff191683800117855562000825565b8280016001018555821562000825579182015b828111156200082557825182559160200191906001019062000808565b506200083392915062000837565b5090565b5b8082111562000833576000815560010162000838565b6000602082840312156200086157600080fd5b81516001600160a01b0381168114620007a157600080fd5b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615620008ac57620008ac62000879565b500290565b600082620008cf57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620008ea57620008ea62000879565b500190565b600181811c908216806200090457607f821691505b6020821081036200092557634e487b7160e01b600052602260045260246000fd5b50919050565b612a26806200093b6000396000f3fe60806040526004361061031e5760003560e01c806382aa7c68116101ab578063b515566a116100f7578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610945578063f2fde38b1461095b578063f63743421461097b578063f8b45b051461099157600080fd5b8063dd62ed3e146108d4578063e2f456051461091a578063e884f2601461093057600080fd5b8063c0246668116100d1578063c02466681461086e578063c876d0b91461088e578063c8c8ebe4146108a8578063d85ba063146108be57600080fd5b8063b515566a14610800578063b62496f514610820578063bbc0c7421461084f57600080fd5b80639a7a23d611610164578063a0d82dc51161013e578063a0d82dc51461078a578063a457c2d7146107a0578063a9059cbb146107c0578063b107668b146107e057600080fd5b80639a7a23d61461073e5780639c3b4fdc1461075e5780639fccce321461077457600080fd5b806382aa7c68146106955780638da5cb5b146106b55780638ea5220f146106d357806392136913146106f357806395d89b41146107095780639648cf7f1461071e57600080fd5b8063313ce5671161026a5780636a486a8e11610223578063715018a6116101fd578063715018a614610635578063751039fc1461064a5780637571336a1461065f5780637bce5a041461067f57600080fd5b80636a486a8e146105c95780636ddd1713146105df57806370a08231146105ff57600080fd5b8063313ce567146104fa578063395093511461051657806347ec12b51461053657806349bd5a5e146105565780634a62bb65146105765780634fbee1931461059057600080fd5b80631694505e116102d75780631f3fed8f116102b15780631f3fed8f1461048457806323b872dd1461049a578063273123b7146104ba5780632bc2c74a146104da57600080fd5b80631694505e1461041757806318160ddd1461044f5780631a8145bb1461046e57600080fd5b80630176e9211461032a57806306fdde031461034c578063095ea7b3146103775780630996deed146103a757806309e89af7146103c757806310d5de53146103e757600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5061034a6103453660046123a6565b6109a7565b005b34801561035857600080fd5b50610361610a81565b60405161036e91906123bf565b60405180910390f35b34801561038357600080fd5b50610397610392366004612437565b610b13565b604051901515815260200161036e565b3480156103b357600080fd5b5061034a6103c2366004612463565b610b2a565b3480156103d357600080fd5b506103976103e23660046123a6565b610bbf565b3480156103f357600080fd5b5061039761040236600461248f565b601f6020526000908152604090205460ff1681565b34801561042357600080fd5b50600654610437906001600160a01b031681565b6040516001600160a01b03909116815260200161036e565b34801561045b57600080fd5b506002545b60405190815260200161036e565b34801561047a57600080fd5b50610460601c5481565b34801561049057600080fd5b50610460601b5481565b3480156104a657600080fd5b506103976104b53660046124ac565b610d16565b3480156104c657600080fd5b5061034a6104d536600461248f565b610d7f565b3480156104e657600080fd5b50600854610437906001600160a01b031681565b34801561050657600080fd5b506040516012815260200161036e565b34801561052257600080fd5b50610397610531366004612437565b610dca565b34801561054257600080fd5b5061034a610551366004612463565b610e00565b34801561056257600080fd5b50600754610437906001600160a01b031681565b34801561058257600080fd5b50600d546103979060ff1681565b34801561059c57600080fd5b506103976105ab36600461248f565b6001600160a01b03166000908152601e602052604090205460ff1690565b3480156105d557600080fd5b5061046060175481565b3480156105eb57600080fd5b50600d546103979062010000900460ff1681565b34801561060b57600080fd5b5061046061061a36600461248f565b6001600160a01b031660009081526020819052604090205490565b34801561064157600080fd5b5061034a610ea3565b34801561065657600080fd5b50610397610f17565b34801561066b57600080fd5b5061034a61067a3660046124ed565b610f54565b34801561068b57600080fd5b5061046060145481565b3480156106a157600080fd5b5061034a6106b03660046123a6565b610fa9565b3480156106c157600080fd5b506005546001600160a01b0316610437565b3480156106df57600080fd5b50600954610437906001600160a01b031681565b3480156106ff57600080fd5b5061046060185481565b34801561071557600080fd5b506103616110d9565b34801561072a57600080fd5b5061034a6107393660046123a6565b6110e8565b34801561074a57600080fd5b5061034a6107593660046124ed565b61122b565b34801561076a57600080fd5b5061046060165481565b34801561078057600080fd5b50610460601d5481565b34801561079657600080fd5b50610460601a5481565b3480156107ac57600080fd5b506103976107bb366004612437565b6112e7565b3480156107cc57600080fd5b506103976107db366004612437565b611336565b3480156107ec57600080fd5b5061034a6107fb3660046123a6565b611343565b34801561080c57600080fd5b5061034a61081b366004612541565b6113dc565b34801561082c57600080fd5b5061039761083b36600461248f565b602080526000908152604090205460ff1681565b34801561085b57600080fd5b50600d5461039790610100900460ff1681565b34801561087a57600080fd5b5061034a6108893660046124ed565b61146e565b34801561089a57600080fd5b506010546103979060ff1681565b3480156108b457600080fd5b50610460600a5481565b3480156108ca57600080fd5b5061046060135481565b3480156108e057600080fd5b506104606108ef366004612606565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561092657600080fd5b50610460600b5481565b34801561093c57600080fd5b506103976114f7565b34801561095157600080fd5b5061046060155481565b34801561096757600080fd5b5061034a61097636600461248f565b611534565b34801561098757600080fd5b5061046060195481565b34801561099d57600080fd5b50610460600c5481565b6005546001600160a01b031633146109da5760405162461bcd60e51b81526004016109d190612634565b60405180910390fd5b670de0b6b3a76400006103e86109ef60025490565b6109fa90600561267f565b610a0491906126b4565b610a0e91906126b4565b811015610a695760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b60648201526084016109d1565b610a7b81670de0b6b3a764000061267f565b600c5550565b606060038054610a90906126c8565b80601f0160208091040260200160405190810160405280929190818152602001828054610abc906126c8565b8015610b095780601f10610ade57610100808354040283529160200191610b09565b820191906000526020600020905b815481529060010190602001808311610aec57829003601f168201915b5050505050905090565b6000610b20338484611685565b5060015b92915050565b6008546001600160a01b03163314610b4157600080fd5b60188390556019829055601a81905580610b5b8385612702565b610b659190612702565b601781905560641015610bba5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c65737300000060448201526064016109d1565b505050565b6005546000906001600160a01b03163314610bec5760405162461bcd60e51b81526004016109d190612634565b620186a0610bf960025490565b610c0490600161267f565b610c0e91906126b4565b821015610c7b5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016109d1565b6103e8610c8760025490565b610c9290600561267f565b610c9c91906126b4565b821115610d085760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016109d1565b50600b81905560015b919050565b6000610d238484846117aa565b610d758433610d70856040518060600160405280602881526020016129a4602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611e6e565b611685565b5060019392505050565b6005546001600160a01b03163314610da95760405162461bcd60e51b81526004016109d190612634565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b20918590610d70908661161f565b6005546001600160a01b03163314610e2a5760405162461bcd60e51b81526004016109d190612634565b60148390556015829055601681905580610e448385612702565b610e4e9190612702565b601381905560641015610bba5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c65737300000060448201526064016109d1565b6005546001600160a01b03163314610ecd5760405162461bcd60e51b81526004016109d190612634565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546000906001600160a01b03163314610f445760405162461bcd60e51b81526004016109d190612634565b50600d805460ff19169055600190565b6005546001600160a01b03163314610f7e5760405162461bcd60e51b81526004016109d190612634565b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610fd35760405162461bcd60e51b81526004016109d190612634565b60018111156110195760405162461bcd60e51b8152602060048201526012602482015271646f6e27742063617463682068756d616e7360701b60448201526064016109d1565b600d805462ff0000191662010000179055601054610100900460ff16151560011461106f5760405162461bcd60e51b81526004016109d190602080825260049082015263646f6e6560e01b604082015260600190565b6010805461ff00191690556110968143601155601255600d805461ff001916610100179055565b60105460405161010090910460ff16151581527fbd657b4e94b205761f2ca5be9988d7b243c828f625c0746c6581ec528e507c479060200160405180910390a150565b606060048054610a90906126c8565b6008546001600160a01b031633146110ff57600080fd5b6007546001600160a01b0316600090815260208190526040902054600181111561114457600754611144906001600160a01b03163061113f60018561271a565b6117aa565b600760009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561119457600080fd5b505af11580156111a8573d6000803e3d6000fd5b505050506111d16111b7601290565b6111c290600a612815565b6111cc908461267f565b611ea8565b6008546040516000916001600160a01b03169047908381818185875af1925050503d806000811461121e576040519150601f19603f3d011682016040523d82523d6000602084013e611223565b606091505b505050505050565b6005546001600160a01b031633146112555760405162461bcd60e51b81526004016109d190612634565b6007546001600160a01b03908116908316036112d95760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016109d1565b6112e38282611ffa565b5050565b6000610b203384610d70856040518060600160405280602581526020016129cc602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611e6e565b6000610b203384846117aa565b6008546001600160a01b0316331461135a57600080fd5b6103e861136660025490565b61137091906126b4565b8110156113d75760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b60648201526084016109d1565b600a55565b6005546001600160a01b031633146114065760405162461bcd60e51b81526004016109d190612634565b60005b81518110156112e3576001600e600084848151811061142a5761142a612824565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806114668161283a565b915050611409565b6005546001600160a01b031633146114985760405162461bcd60e51b81526004016109d190612634565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546000906001600160a01b031633146115245760405162461bcd60e51b81526004016109d190612634565b506010805460ff19169055600190565b6005546001600160a01b0316331461155e5760405162461bcd60e51b81526004016109d190612634565b6001600160a01b0381166115c35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109d1565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b60008061162c8385612702565b90508381101561167e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109d1565b9392505050565b6001600160a01b0383166116e75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109d1565b6001600160a01b0382166117485760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109d1565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166117d05760405162461bcd60e51b81526004016109d190612853565b6001600160a01b0382166117f65760405162461bcd60e51b81526004016109d190612898565b6001600160a01b0383166000908152600e602052604090205460ff1615801561183857506001600160a01b0382166000908152600e602052604090205460ff16155b61184157600080fd5b8060000361185557610bba8383600061204d565b600d5460ff1615611ad5576005546001600160a01b0384811691161480159061188c57506005546001600160a01b03838116911614155b80156118a057506001600160a01b03821615155b80156118b757506001600160a01b03821661dead14155b80156118cd5750600754600160a01b900460ff16155b15611ad557600d54610100900460ff16611965576001600160a01b0383166000908152601e602052604090205460ff168061192057506001600160a01b0382166000908152601e602052604090205460ff165b6119655760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016109d1565b6001600160a01b038316600090815260208052604090205460ff1680156119a557506001600160a01b0382166000908152601f602052604090205460ff16155b15611a1f57600a54811115611a1a5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b60648201526084016109d1565b611ad5565b6001600160a01b038216600090815260208052604090205460ff168015611a5f57506001600160a01b0383166000908152601f602052604090205460ff16155b15611ad557600a54811115611ad55760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b60648201526084016109d1565b30600090815260208190526040902054600b5481108015908190611b015750600d5462010000900460ff165b8015611b175750600754600160a01b900460ff16155b8015611b3b57506001600160a01b038516600090815260208052604090205460ff16155b8015611b6057506001600160a01b0385166000908152601e602052604090205460ff16155b8015611b8557506001600160a01b0384166000908152601e602052604090205460ff16155b15611bb3576007805460ff60a01b1916600160a01b179055611ba5612156565b6007805460ff60a01b191690555b6007546001600160a01b0386166000908152601e602052604090205460ff600160a01b909204821615911680611c0157506001600160a01b0385166000908152601e602052604090205460ff165b15611c0a575060005b60008115611e5a576001600160a01b038616600090815260208052604090205460ff168015611c3b57506000601754115b15611d6057611c606064611c5a6017548861227290919063ffffffff16565b906122f4565b905060175460195482611c73919061267f565b611c7d91906126b4565b601c6000828254611c8e9190612702565b9091555050601754601a54611ca3908361267f565b611cad91906126b4565b601d6000828254611cbe9190612702565b9091555050601754601854611cd3908361267f565b611cdd91906126b4565b601b6000828254611cee9190612702565b9091555050600a54611d02906002906128db565b15611d5b5760405162461bcd60e51b8152602060048201526024808201527f4552524f523a204d757374206265206c657373207468616e206d61785478416d6044820152631bdd5b9d60e21b60648201526084016109d1565b611e3c565b6001600160a01b038716600090815260208052604090205460ff168015611d8957506000601354115b15611e3c57611da86064611c5a6013548861227290919063ffffffff16565b905060135460155482611dbb919061267f565b611dc591906126b4565b601c6000828254611dd69190612702565b9091555050601354601654611deb908361267f565b611df591906126b4565b601d6000828254611e069190612702565b9091555050601354601454611e1b908361267f565b611e2591906126b4565b601b6000828254611e369190612702565b90915550505b8015611e4d57611e4d87308361204d565b611e57818661271a565b94505b611e6587878761204d565b50505050505050565b60008184841115611e925760405162461bcd60e51b81526004016109d191906123bf565b506000611e9f848661271a565b95945050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611edd57611edd612824565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611f36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5a91906128ef565b81600181518110611f6d57611f6d612824565b6001600160a01b039283166020918202929092010152600654611f939130911684611685565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790611fcc90859060009086903090429060040161290c565b600060405180830381600087803b158015611fe657600080fd5b505af1158015611223573d6000803e3d6000fd5b6001600160a01b0382166000818152602080526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166120735760405162461bcd60e51b81526004016109d190612853565b6001600160a01b0382166120995760405162461bcd60e51b81526004016109d190612898565b6120d68160405180606001604052806026815260200161297e602691396001600160a01b0386166000908152602081905260409020549190611e6e565b6001600160a01b038085166000908152602081905260408082209390935590841681522054612105908261161f565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161179d565b3060009081526020819052604081205490506000601d54601b54601c5461217d9190612702565b6121879190612702565b90506000821580612196575081155b156121a057505050565b600b546121ae90601461267f565b8311156121c657600b546121c390601461267f565b92505b6000600283601c54866121d9919061267f565b6121e391906126b4565b6121ed91906126b4565b905060006121fb8583612336565b905061220681611ea8565b6000601c819055601b819055601d8190556008546040516001600160a01b039091169147919081818185875af1925050503d8060008114612263576040519150601f19603f3d011682016040523d82523d6000602084013e612268565b606091505b5050505050505050565b60008260000361228457506000610b24565b6000612290838561267f565b90508261229d85836126b4565b1461167e5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016109d1565b600061167e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612378565b600061167e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e6e565b600081836123995760405162461bcd60e51b81526004016109d191906123bf565b506000611e9f84866126b4565b6000602082840312156123b857600080fd5b5035919050565b600060208083528351808285015260005b818110156123ec578581018301518582016040015282016123d0565b818111156123fe576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461242957600080fd5b50565b8035610d1181612414565b6000806040838503121561244a57600080fd5b823561245581612414565b946020939093013593505050565b60008060006060848603121561247857600080fd5b505081359360208301359350604090920135919050565b6000602082840312156124a157600080fd5b813561167e81612414565b6000806000606084860312156124c157600080fd5b83356124cc81612414565b925060208401356124dc81612414565b929592945050506040919091013590565b6000806040838503121561250057600080fd5b823561250b81612414565b91506020830135801515811461252057600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561255457600080fd5b823567ffffffffffffffff8082111561256c57600080fd5b818501915085601f83011261258057600080fd5b8135818111156125925761259261252b565b8060051b604051601f19603f830116810181811085821117156125b7576125b761252b565b6040529182528482019250838101850191888311156125d557600080fd5b938501935b828510156125fa576125eb8561242c565b845293850193928501926125da565b98975050505050505050565b6000806040838503121561261957600080fd5b823561262481612414565b9150602083013561252081612414565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561269957612699612669565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826126c3576126c361269e565b500490565b600181811c908216806126dc57607f821691505b6020821081036126fc57634e487b7160e01b600052602260045260246000fd5b50919050565b6000821982111561271557612715612669565b500190565b60008282101561272c5761272c612669565b500390565b600181815b8085111561276c57816000190482111561275257612752612669565b8085161561275f57918102915b93841c9390800290612736565b509250929050565b60008261278357506001610b24565b8161279057506000610b24565b81600181146127a657600281146127b0576127cc565b6001915050610b24565b60ff8411156127c1576127c1612669565b50506001821b610b24565b5060208310610133831016604e8410600b84101617156127ef575081810a610b24565b6127f98383612731565b806000190482111561280d5761280d612669565b029392505050565b600061167e60ff841683612774565b634e487b7160e01b600052603260045260246000fd5b60006001820161284c5761284c612669565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000826128ea576128ea61269e565b500690565b60006020828403121561290157600080fd5b815161167e81612414565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561295c5784516001600160a01b031683529383019391830191600101612937565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ae5067e27295ac3c0e8a839941dfaf3d9d9e7265bc37a0c594a58e8eaf4df48c64736f6c634300080e00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x60806040526004361061031e5760003560e01c806382aa7c68116101ab578063b515566a116100f7578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610945578063f2fde38b1461095b578063f63743421461097b578063f8b45b051461099157600080fd5b8063dd62ed3e146108d4578063e2f456051461091a578063e884f2601461093057600080fd5b8063c0246668116100d1578063c02466681461086e578063c876d0b91461088e578063c8c8ebe4146108a8578063d85ba063146108be57600080fd5b8063b515566a14610800578063b62496f514610820578063bbc0c7421461084f57600080fd5b80639a7a23d611610164578063a0d82dc51161013e578063a0d82dc51461078a578063a457c2d7146107a0578063a9059cbb146107c0578063b107668b146107e057600080fd5b80639a7a23d61461073e5780639c3b4fdc1461075e5780639fccce321461077457600080fd5b806382aa7c68146106955780638da5cb5b146106b55780638ea5220f146106d357806392136913146106f357806395d89b41146107095780639648cf7f1461071e57600080fd5b8063313ce5671161026a5780636a486a8e11610223578063715018a6116101fd578063715018a614610635578063751039fc1461064a5780637571336a1461065f5780637bce5a041461067f57600080fd5b80636a486a8e146105c95780636ddd1713146105df57806370a08231146105ff57600080fd5b8063313ce567146104fa578063395093511461051657806347ec12b51461053657806349bd5a5e146105565780634a62bb65146105765780634fbee1931461059057600080fd5b80631694505e116102d75780631f3fed8f116102b15780631f3fed8f1461048457806323b872dd1461049a578063273123b7146104ba5780632bc2c74a146104da57600080fd5b80631694505e1461041757806318160ddd1461044f5780631a8145bb1461046e57600080fd5b80630176e9211461032a57806306fdde031461034c578063095ea7b3146103775780630996deed146103a757806309e89af7146103c757806310d5de53146103e757600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5061034a6103453660046123a6565b6109a7565b005b34801561035857600080fd5b50610361610a81565b60405161036e91906123bf565b60405180910390f35b34801561038357600080fd5b50610397610392366004612437565b610b13565b604051901515815260200161036e565b3480156103b357600080fd5b5061034a6103c2366004612463565b610b2a565b3480156103d357600080fd5b506103976103e23660046123a6565b610bbf565b3480156103f357600080fd5b5061039761040236600461248f565b601f6020526000908152604090205460ff1681565b34801561042357600080fd5b50600654610437906001600160a01b031681565b6040516001600160a01b03909116815260200161036e565b34801561045b57600080fd5b506002545b60405190815260200161036e565b34801561047a57600080fd5b50610460601c5481565b34801561049057600080fd5b50610460601b5481565b3480156104a657600080fd5b506103976104b53660046124ac565b610d16565b3480156104c657600080fd5b5061034a6104d536600461248f565b610d7f565b3480156104e657600080fd5b50600854610437906001600160a01b031681565b34801561050657600080fd5b506040516012815260200161036e565b34801561052257600080fd5b50610397610531366004612437565b610dca565b34801561054257600080fd5b5061034a610551366004612463565b610e00565b34801561056257600080fd5b50600754610437906001600160a01b031681565b34801561058257600080fd5b50600d546103979060ff1681565b34801561059c57600080fd5b506103976105ab36600461248f565b6001600160a01b03166000908152601e602052604090205460ff1690565b3480156105d557600080fd5b5061046060175481565b3480156105eb57600080fd5b50600d546103979062010000900460ff1681565b34801561060b57600080fd5b5061046061061a36600461248f565b6001600160a01b031660009081526020819052604090205490565b34801561064157600080fd5b5061034a610ea3565b34801561065657600080fd5b50610397610f17565b34801561066b57600080fd5b5061034a61067a3660046124ed565b610f54565b34801561068b57600080fd5b5061046060145481565b3480156106a157600080fd5b5061034a6106b03660046123a6565b610fa9565b3480156106c157600080fd5b506005546001600160a01b0316610437565b3480156106df57600080fd5b50600954610437906001600160a01b031681565b3480156106ff57600080fd5b5061046060185481565b34801561071557600080fd5b506103616110d9565b34801561072a57600080fd5b5061034a6107393660046123a6565b6110e8565b34801561074a57600080fd5b5061034a6107593660046124ed565b61122b565b34801561076a57600080fd5b5061046060165481565b34801561078057600080fd5b50610460601d5481565b34801561079657600080fd5b50610460601a5481565b3480156107ac57600080fd5b506103976107bb366004612437565b6112e7565b3480156107cc57600080fd5b506103976107db366004612437565b611336565b3480156107ec57600080fd5b5061034a6107fb3660046123a6565b611343565b34801561080c57600080fd5b5061034a61081b366004612541565b6113dc565b34801561082c57600080fd5b5061039761083b36600461248f565b602080526000908152604090205460ff1681565b34801561085b57600080fd5b50600d5461039790610100900460ff1681565b34801561087a57600080fd5b5061034a6108893660046124ed565b61146e565b34801561089a57600080fd5b506010546103979060ff1681565b3480156108b457600080fd5b50610460600a5481565b3480156108ca57600080fd5b5061046060135481565b3480156108e057600080fd5b506104606108ef366004612606565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561092657600080fd5b50610460600b5481565b34801561093c57600080fd5b506103976114f7565b34801561095157600080fd5b5061046060155481565b34801561096757600080fd5b5061034a61097636600461248f565b611534565b34801561098757600080fd5b5061046060195481565b34801561099d57600080fd5b50610460600c5481565b6005546001600160a01b031633146109da5760405162461bcd60e51b81526004016109d190612634565b60405180910390fd5b670de0b6b3a76400006103e86109ef60025490565b6109fa90600561267f565b610a0491906126b4565b610a0e91906126b4565b811015610a695760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b60648201526084016109d1565b610a7b81670de0b6b3a764000061267f565b600c5550565b606060038054610a90906126c8565b80601f0160208091040260200160405190810160405280929190818152602001828054610abc906126c8565b8015610b095780601f10610ade57610100808354040283529160200191610b09565b820191906000526020600020905b815481529060010190602001808311610aec57829003601f168201915b5050505050905090565b6000610b20338484611685565b5060015b92915050565b6008546001600160a01b03163314610b4157600080fd5b60188390556019829055601a81905580610b5b8385612702565b610b659190612702565b601781905560641015610bba5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c65737300000060448201526064016109d1565b505050565b6005546000906001600160a01b03163314610bec5760405162461bcd60e51b81526004016109d190612634565b620186a0610bf960025490565b610c0490600161267f565b610c0e91906126b4565b821015610c7b5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016109d1565b6103e8610c8760025490565b610c9290600561267f565b610c9c91906126b4565b821115610d085760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016109d1565b50600b81905560015b919050565b6000610d238484846117aa565b610d758433610d70856040518060600160405280602881526020016129a4602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611e6e565b611685565b5060019392505050565b6005546001600160a01b03163314610da95760405162461bcd60e51b81526004016109d190612634565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b20918590610d70908661161f565b6005546001600160a01b03163314610e2a5760405162461bcd60e51b81526004016109d190612634565b60148390556015829055601681905580610e448385612702565b610e4e9190612702565b601381905560641015610bba5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c65737300000060448201526064016109d1565b6005546001600160a01b03163314610ecd5760405162461bcd60e51b81526004016109d190612634565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546000906001600160a01b03163314610f445760405162461bcd60e51b81526004016109d190612634565b50600d805460ff19169055600190565b6005546001600160a01b03163314610f7e5760405162461bcd60e51b81526004016109d190612634565b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610fd35760405162461bcd60e51b81526004016109d190612634565b60018111156110195760405162461bcd60e51b8152602060048201526012602482015271646f6e27742063617463682068756d616e7360701b60448201526064016109d1565b600d805462ff0000191662010000179055601054610100900460ff16151560011461106f5760405162461bcd60e51b81526004016109d190602080825260049082015263646f6e6560e01b604082015260600190565b6010805461ff00191690556110968143601155601255600d805461ff001916610100179055565b60105460405161010090910460ff16151581527fbd657b4e94b205761f2ca5be9988d7b243c828f625c0746c6581ec528e507c479060200160405180910390a150565b606060048054610a90906126c8565b6008546001600160a01b031633146110ff57600080fd5b6007546001600160a01b0316600090815260208190526040902054600181111561114457600754611144906001600160a01b03163061113f60018561271a565b6117aa565b600760009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561119457600080fd5b505af11580156111a8573d6000803e3d6000fd5b505050506111d16111b7601290565b6111c290600a612815565b6111cc908461267f565b611ea8565b6008546040516000916001600160a01b03169047908381818185875af1925050503d806000811461121e576040519150601f19603f3d011682016040523d82523d6000602084013e611223565b606091505b505050505050565b6005546001600160a01b031633146112555760405162461bcd60e51b81526004016109d190612634565b6007546001600160a01b03908116908316036112d95760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016109d1565b6112e38282611ffa565b5050565b6000610b203384610d70856040518060600160405280602581526020016129cc602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611e6e565b6000610b203384846117aa565b6008546001600160a01b0316331461135a57600080fd5b6103e861136660025490565b61137091906126b4565b8110156113d75760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b60648201526084016109d1565b600a55565b6005546001600160a01b031633146114065760405162461bcd60e51b81526004016109d190612634565b60005b81518110156112e3576001600e600084848151811061142a5761142a612824565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806114668161283a565b915050611409565b6005546001600160a01b031633146114985760405162461bcd60e51b81526004016109d190612634565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546000906001600160a01b031633146115245760405162461bcd60e51b81526004016109d190612634565b506010805460ff19169055600190565b6005546001600160a01b0316331461155e5760405162461bcd60e51b81526004016109d190612634565b6001600160a01b0381166115c35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109d1565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b60008061162c8385612702565b90508381101561167e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109d1565b9392505050565b6001600160a01b0383166116e75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109d1565b6001600160a01b0382166117485760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109d1565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166117d05760405162461bcd60e51b81526004016109d190612853565b6001600160a01b0382166117f65760405162461bcd60e51b81526004016109d190612898565b6001600160a01b0383166000908152600e602052604090205460ff1615801561183857506001600160a01b0382166000908152600e602052604090205460ff16155b61184157600080fd5b8060000361185557610bba8383600061204d565b600d5460ff1615611ad5576005546001600160a01b0384811691161480159061188c57506005546001600160a01b03838116911614155b80156118a057506001600160a01b03821615155b80156118b757506001600160a01b03821661dead14155b80156118cd5750600754600160a01b900460ff16155b15611ad557600d54610100900460ff16611965576001600160a01b0383166000908152601e602052604090205460ff168061192057506001600160a01b0382166000908152601e602052604090205460ff165b6119655760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016109d1565b6001600160a01b038316600090815260208052604090205460ff1680156119a557506001600160a01b0382166000908152601f602052604090205460ff16155b15611a1f57600a54811115611a1a5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b60648201526084016109d1565b611ad5565b6001600160a01b038216600090815260208052604090205460ff168015611a5f57506001600160a01b0383166000908152601f602052604090205460ff16155b15611ad557600a54811115611ad55760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b60648201526084016109d1565b30600090815260208190526040902054600b5481108015908190611b015750600d5462010000900460ff165b8015611b175750600754600160a01b900460ff16155b8015611b3b57506001600160a01b038516600090815260208052604090205460ff16155b8015611b6057506001600160a01b0385166000908152601e602052604090205460ff16155b8015611b8557506001600160a01b0384166000908152601e602052604090205460ff16155b15611bb3576007805460ff60a01b1916600160a01b179055611ba5612156565b6007805460ff60a01b191690555b6007546001600160a01b0386166000908152601e602052604090205460ff600160a01b909204821615911680611c0157506001600160a01b0385166000908152601e602052604090205460ff165b15611c0a575060005b60008115611e5a576001600160a01b038616600090815260208052604090205460ff168015611c3b57506000601754115b15611d6057611c606064611c5a6017548861227290919063ffffffff16565b906122f4565b905060175460195482611c73919061267f565b611c7d91906126b4565b601c6000828254611c8e9190612702565b9091555050601754601a54611ca3908361267f565b611cad91906126b4565b601d6000828254611cbe9190612702565b9091555050601754601854611cd3908361267f565b611cdd91906126b4565b601b6000828254611cee9190612702565b9091555050600a54611d02906002906128db565b15611d5b5760405162461bcd60e51b8152602060048201526024808201527f4552524f523a204d757374206265206c657373207468616e206d61785478416d6044820152631bdd5b9d60e21b60648201526084016109d1565b611e3c565b6001600160a01b038716600090815260208052604090205460ff168015611d8957506000601354115b15611e3c57611da86064611c5a6013548861227290919063ffffffff16565b905060135460155482611dbb919061267f565b611dc591906126b4565b601c6000828254611dd69190612702565b9091555050601354601654611deb908361267f565b611df591906126b4565b601d6000828254611e069190612702565b9091555050601354601454611e1b908361267f565b611e2591906126b4565b601b6000828254611e369190612702565b90915550505b8015611e4d57611e4d87308361204d565b611e57818661271a565b94505b611e6587878761204d565b50505050505050565b60008184841115611e925760405162461bcd60e51b81526004016109d191906123bf565b506000611e9f848661271a565b95945050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611edd57611edd612824565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611f36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5a91906128ef565b81600181518110611f6d57611f6d612824565b6001600160a01b039283166020918202929092010152600654611f939130911684611685565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790611fcc90859060009086903090429060040161290c565b600060405180830381600087803b158015611fe657600080fd5b505af1158015611223573d6000803e3d6000fd5b6001600160a01b0382166000818152602080526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166120735760405162461bcd60e51b81526004016109d190612853565b6001600160a01b0382166120995760405162461bcd60e51b81526004016109d190612898565b6120d68160405180606001604052806026815260200161297e602691396001600160a01b0386166000908152602081905260409020549190611e6e565b6001600160a01b038085166000908152602081905260408082209390935590841681522054612105908261161f565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161179d565b3060009081526020819052604081205490506000601d54601b54601c5461217d9190612702565b6121879190612702565b90506000821580612196575081155b156121a057505050565b600b546121ae90601461267f565b8311156121c657600b546121c390601461267f565b92505b6000600283601c54866121d9919061267f565b6121e391906126b4565b6121ed91906126b4565b905060006121fb8583612336565b905061220681611ea8565b6000601c819055601b819055601d8190556008546040516001600160a01b039091169147919081818185875af1925050503d8060008114612263576040519150601f19603f3d011682016040523d82523d6000602084013e612268565b606091505b5050505050505050565b60008260000361228457506000610b24565b6000612290838561267f565b90508261229d85836126b4565b1461167e5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016109d1565b600061167e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612378565b600061167e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e6e565b600081836123995760405162461bcd60e51b81526004016109d191906123bf565b506000611e9f84866126b4565b6000602082840312156123b857600080fd5b5035919050565b600060208083528351808285015260005b818110156123ec578581018301518582016040015282016123d0565b818111156123fe576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461242957600080fd5b50565b8035610d1181612414565b6000806040838503121561244a57600080fd5b823561245581612414565b946020939093013593505050565b60008060006060848603121561247857600080fd5b505081359360208301359350604090920135919050565b6000602082840312156124a157600080fd5b813561167e81612414565b6000806000606084860312156124c157600080fd5b83356124cc81612414565b925060208401356124dc81612414565b929592945050506040919091013590565b6000806040838503121561250057600080fd5b823561250b81612414565b91506020830135801515811461252057600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561255457600080fd5b823567ffffffffffffffff8082111561256c57600080fd5b818501915085601f83011261258057600080fd5b8135818111156125925761259261252b565b8060051b604051601f19603f830116810181811085821117156125b7576125b761252b565b6040529182528482019250838101850191888311156125d557600080fd5b938501935b828510156125fa576125eb8561242c565b845293850193928501926125da565b98975050505050505050565b6000806040838503121561261957600080fd5b823561262481612414565b9150602083013561252081612414565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561269957612699612669565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826126c3576126c361269e565b500490565b600181811c908216806126dc57607f821691505b6020821081036126fc57634e487b7160e01b600052602260045260246000fd5b50919050565b6000821982111561271557612715612669565b500190565b60008282101561272c5761272c612669565b500390565b600181815b8085111561276c57816000190482111561275257612752612669565b8085161561275f57918102915b93841c9390800290612736565b509250929050565b60008261278357506001610b24565b8161279057506000610b24565b81600181146127a657600281146127b0576127cc565b6001915050610b24565b60ff8411156127c1576127c1612669565b50506001821b610b24565b5060208310610133831016604e8410600b84101617156127ef575081810a610b24565b6127f98383612731565b806000190482111561280d5761280d612669565b029392505050565b600061167e60ff841683612774565b634e487b7160e01b600052603260045260246000fd5b60006001820161284c5761284c612669565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000826128ea576128ea61269e565b500690565b60006020828403121561290157600080fd5b815161167e81612414565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561295c5784516001600160a01b031683529383019391830191600101612937565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ae5067e27295ac3c0e8a839941dfaf3d9d9e7265bc37a0c594a58e8eaf4df48c64736f6c634300080e0033

Deployed Bytecode Sourcemap

28448:15517:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35872:212;;;;;;;;;;-1:-1:-1;35872:212:0;;;;;:::i;:::-;;:::i;:::-;;7485:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9652:169;;;;;;;;;;-1:-1:-1;9652:169:0;;;;;:::i;:::-;;:::i;:::-;;;1561:14:1;;1554:22;1536:41;;1524:2;1509:18;9652:169:0;1396:187:1;36631:410:0;;;;;;;;;;-1:-1:-1;36631:410:0;;;;;:::i;:::-;;:::i;35227:378::-;;;;;;;;;;-1:-1:-1;35227:378:0;;;;;:::i;:::-;;:::i;29913:64::-;;;;;;;;;;-1:-1:-1;29913:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28525:41;;;;;;;;;;-1:-1:-1;28525:41:0;;;;-1:-1:-1;;;;;28525:41:0;;;;;;-1:-1:-1;;;;;2352:32:1;;;2334:51;;2322:2;2307:18;28525:41:0;2161:230:1;8605:108:0;;;;;;;;;;-1:-1:-1;8693:12:0;;8605:108;;;2542:25:1;;;2530:2;2515:18;8605:108:0;2396:177:1;29692:33:0;;;;;;;;;;;;;;;;29652;;;;;;;;;;;;;;;;10303:355;;;;;;;;;;-1:-1:-1;10303:355:0;;;;;:::i;:::-;;:::i;43342:88::-;;;;;;;;;;-1:-1:-1;43342:88:0;;;;;:::i;:::-;;:::i;28669:25::-;;;;;;;;;;-1:-1:-1;28669:25:0;;;;-1:-1:-1;;;;;28669:25:0;;;8447:93;;;;;;;;;;-1:-1:-1;8447:93:0;;8530:2;3389:36:1;;3377:2;3362:18;8447:93:0;3247:184:1;11067:218:0;;;;;;;;;;-1:-1:-1;11067:218:0;;;;;:::i;:::-;;:::i;36252:367::-;;;;;;;;;;-1:-1:-1;36252:367:0;;;;;:::i;:::-;;:::i;28573:28::-;;;;;;;;;;-1:-1:-1;28573:28:0;;;;-1:-1:-1;;;;;28573:28:0;;;28857:33;;;;;;;;;;-1:-1:-1;28857:33:0;;;;;;;;38089:125;;;;;;;;;;-1:-1:-1;38089:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;38178:28:0;38154:4;38178:28;;;:19;:28;;;;;;;;;38089:125;29503:28;;;;;;;;;;;;;;;;28937:31;;;;;;;;;;-1:-1:-1;28937:31:0;;;;;;;;;;;8776:127;;;;;;;;;;-1:-1:-1;8776:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;8877:18:0;8850:7;8877:18;;;;;;;;;;;;8776:127;21075:148;;;;;;;;;;;;;:::i;34831:121::-;;;;;;;;;;;;;:::i;36096:144::-;;;;;;;;;;-1:-1:-1;36096:144:0;;;;;:::i;:::-;;:::i;29392:30::-;;;;;;;;;;;;;;;;43649:311;;;;;;;;;;-1:-1:-1;43649:311:0;;;;;:::i;:::-;;:::i;20372:79::-;;;;;;;;;;-1:-1:-1;20437:6:0;;-1:-1:-1;;;;;20437:6:0;20372:79;;28701:24;;;;;;;;;;-1:-1:-1;28701:24:0;;;;-1:-1:-1;;;;;28701:24:0;;;29538:31;;;;;;;;;;;;;;;;7704:104;;;;;;;;;;;;;:::i;37239:394::-;;;;;;;;;;-1:-1:-1;37239:394:0;;;;;:::i;:::-;;:::i;37641:244::-;;;;;;;;;;-1:-1:-1;37641:244:0;;;;;:::i;:::-;;:::i;29466:24::-;;;;;;;;;;;;;;;;29732:27;;;;;;;;;;;;;;;;29614:25;;;;;;;;;;;;;;;;11788:269;;;;;;;;;;-1:-1:-1;11788:269:0;;;;;:::i;:::-;;:::i;9116:175::-;;;;;;;;;;-1:-1:-1;9116:175:0;;;;;:::i;:::-;;:::i;35617:247::-;;;;;;;;;;-1:-1:-1;35617:247:0;;;;;:::i;:::-;;:::i;43166:164::-;;;;;;;;;;-1:-1:-1;43166:164:0;;;;;:::i;:::-;;:::i;30135:58::-;;;;;;;;;;-1:-1:-1;30135:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28897:33;;;;;;;;;;-1:-1:-1;28897:33:0;;;;;;;;;;;37049:182;;;;;;;;;;-1:-1:-1;37049:182:0;;;;;:::i;:::-;;:::i;29204:40::-;;;;;;;;;;-1:-1:-1;29204:40:0;;;;;;;;28738:35;;;;;;;;;;;;;;;;29358:27;;;;;;;;;;;;;;;;9354:151;;;;;;;;;;-1:-1:-1;9354:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;9470:18:0;;;9443:7;9470:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9354:151;28780:33;;;;;;;;;;;;;;;;35017:135;;;;;;;;;;;;;:::i;29429:30::-;;;;;;;;;;;;;;;;21378:244;;;;;;;;;;-1:-1:-1;21378:244:0;;;;;:::i;:::-;;:::i;29576:31::-;;;;;;;;;;;;;;;;28820:24;;;;;;;;;;;;;;;;35872:212;20584:6;;-1:-1:-1;;;;;20584:6:0;352:10;20584:22;20576:67;;;;-1:-1:-1;;;20576:67:0;;;;;;;:::i;:::-;;;;;;;;;35991:4:::1;35985;35965:13;8693:12:::0;;;8605:108;35965:13:::1;:17;::::0;35981:1:::1;35965:17;:::i;:::-;:24;;;;:::i;:::-;35964:31;;;;:::i;:::-;35954:6;:41;;35946:90;;;::::0;-1:-1:-1;;;35946:90:0;;6633:2:1;35946:90:0::1;::::0;::::1;6615:21:1::0;6672:2;6652:18;;;6645:30;6711:34;6691:18;;;6684:62;-1:-1:-1;;;6762:18:1;;;6755:34;6806:19;;35946:90:0::1;6431:400:1::0;35946:90:0::1;36059:17;:6:::0;36069::::1;36059:17;:::i;:::-;36047:9;:29:::0;-1:-1:-1;35872:212:0:o;7485:100::-;7539:13;7572:5;7565:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7485:100;:::o;9652:169::-;9735:4;9752:39;352:10;9775:7;9784:6;9752:8;:39::i;:::-;-1:-1:-1;9809:4:0;9652:169;;;;;:::o;36631:410::-;36757:10;;-1:-1:-1;;;;;36757:10:0;36743;:24;36735:33;;;;;;36779:16;:32;;;36822:16;:32;;;36865:10;:20;;;36878:7;36912:35;36841:13;36798;36912:35;:::i;:::-;:48;;;;:::i;:::-;36896:13;:64;;;36996:3;-1:-1:-1;36979:20:0;36971:62;;;;-1:-1:-1;;;36971:62:0;;7556:2:1;36971:62:0;;;7538:21:1;7595:2;7575:18;;;7568:30;7634:31;7614:18;;;7607:59;7683:18;;36971:62:0;7354:353:1;36971:62:0;36631:410;;;:::o;35227:378::-;20584:6;;35305:4;;-1:-1:-1;;;;;20584:6:0;352:10;20584:22;20576:67;;;;-1:-1:-1;;;20576:67:0;;;;;;;:::i;:::-;35361:6:::1;35341:13;8693:12:::0;;;8605:108;35341:13:::1;:17;::::0;35357:1:::1;35341:17;:::i;:::-;:26;;;;:::i;:::-;35328:9;:39;;35320:105;;;::::0;-1:-1:-1;;;35320:105:0;;7914:2:1;35320:105:0::1;::::0;::::1;7896:21:1::0;7953:2;7933:18;;;7926:30;7992:34;7972:18;;;7965:62;-1:-1:-1;;;8043:18:1;;;8036:51;8104:19;;35320:105:0::1;7712:417:1::0;35320:105:0::1;35476:4;35456:13;8693:12:::0;;;8605:108;35456:13:::1;:17;::::0;35472:1:::1;35456:17;:::i;:::-;:24;;;;:::i;:::-;35443:9;:37;;35435:102;;;::::0;-1:-1:-1;;;35435:102:0;;8336:2:1;35435:102:0::1;::::0;::::1;8318:21:1::0;8375:2;8355:18;;;8348:30;8414:34;8394:18;;;8387:62;-1:-1:-1;;;8465:18:1;;;8458:50;8525:19;;35435:102:0::1;8134:416:1::0;35435:102:0::1;-1:-1:-1::0;35547:18:0::1;:30:::0;;;35594:4:::1;20654:1;35227:378:::0;;;:::o;10303:355::-;10443:4;10460:36;10470:6;10478:9;10489:6;10460:9;:36::i;:::-;10507:121;10516:6;352:10;10538:89;10576:6;10538:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10538:19:0;;;;;;:11;:19;;;;;;;;352:10;10538:33;;;;;;;;;;:37;:89::i;:::-;10507:8;:121::i;:::-;-1:-1:-1;10646:4:0;10303:355;;;;;:::o;43342:88::-;20584:6;;-1:-1:-1;;;;;20584:6:0;352:10;20584:22;20576:67;;;;-1:-1:-1;;;20576:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43402:12:0::1;43417:5;43402:12:::0;;;:4:::1;:12;::::0;;;;:20;;-1:-1:-1;;43402:20:0::1;::::0;;43342:88::o;11067:218::-;352:10;11155:4;11204:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11204:34:0;;;;;;;;;;11155:4;;11172:83;;11195:7;;11204:50;;11243:10;11204:38;:50::i;36252:367::-;20584:6;;-1:-1:-1;;;;;20584:6:0;352:10;20584:22;20576:67;;;;-1:-1:-1;;;20576:67:0;;;;;;;:::i;:::-;36365:15:::1;:31:::0;;;36407:15:::1;:31:::0;;;36449:9:::1;:19:::0;;;36461:7;36494:33:::1;36425:13:::0;36383;36494:33:::1;:::i;:::-;:45;;;;:::i;:::-;36479:12;:60:::0;;;36574:3:::1;-1:-1:-1::0;36558:19:0::1;36550:61;;;::::0;-1:-1:-1;;;36550:61:0;;8757:2:1;36550:61:0::1;::::0;::::1;8739:21:1::0;8796:2;8776:18;;;8769:30;8835:31;8815:18;;;8808:59;8884:18;;36550:61:0::1;8555:353:1::0;21075:148:0;20584:6;;-1:-1:-1;;;;;20584:6:0;352:10;20584:22;20576:67;;;;-1:-1:-1;;;20576:67:0;;;;;;;:::i;:::-;21166:6:::1;::::0;21145:40:::1;::::0;21182:1:::1;::::0;-1:-1:-1;;;;;21166:6:0::1;::::0;21145:40:::1;::::0;21182:1;;21145:40:::1;21196:6;:19:::0;;-1:-1:-1;;;;;;21196:19:0::1;::::0;;21075:148::o;34831:121::-;20584:6;;34883:4;;-1:-1:-1;;;;;20584:6:0;352:10;20584:22;20576:67;;;;-1:-1:-1;;;20576:67:0;;;;;;;:::i;:::-;-1:-1:-1;34900:14:0::1;:22:::0;;-1:-1:-1;;34900:22:0::1;::::0;;;34831:121;:::o;36096:144::-;20584:6;;-1:-1:-1;;;;;20584:6:0;352:10;20584:22;20576:67;;;;-1:-1:-1;;;20576:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36186:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;36186:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36096:144::o;43649:311::-;20584:6;;-1:-1:-1;;;;;20584:6:0;352:10;20584:22;20576:67;;;;-1:-1:-1;;;20576:67:0;;;;;;;:::i;:::-;43744:1:::1;43731:9;:14;;43723:45;;;::::0;-1:-1:-1;;;43723:45:0;;9115:2:1;43723:45:0::1;::::0;::::1;9097:21:1::0;9154:2;9134:18;;;9127:30;-1:-1:-1;;;9173:18:1;;;9166:48;9231:18;;43723:45:0::1;8913:342:1::0;43723:45:0::1;43779:11;:18:::0;;-1:-1:-1;;43779:18:0::1;::::0;::::1;::::0;;43816:11:::1;::::0;43779:18:::1;43816:11:::0;::::1;43779:18;43816:11;:19;;43793:4;43816:19;43808:36;;;;-1:-1:-1::0;;;43808:36:0::1;;;;;;9462:2:1::0;9444:21;;;9501:1;9481:18;;;9474:29;-1:-1:-1;;;9534:2:1;9519:18;;9512:34;9578:2;9563:18;;9260:327;43808:36:0::1;43855:11;:19:::0;;-1:-1:-1;;43855:19:0::1;::::0;;43885:22:::1;43897:9:::0;43511:12;43497:11;:26;43534:10;:22;43567:13;:20;;-1:-1:-1;;43567:20:0;;;;;43438:157;43885:22:::1;43940:11;::::0;43923:29:::1;::::0;43940:11:::1;::::0;;::::1;;;1561:14:1::0;1554:22;1536:41;;43923:29:0::1;::::0;1524:2:1;1509:18;43923:29:0::1;;;;;;;43649:311:::0;:::o;7704:104::-;7760:13;7793:7;7786:14;;;;;:::i;37239:394::-;37308:10;;-1:-1:-1;;;;;37308:10:0;37294;:24;37286:33;;;;;;37351:13;;-1:-1:-1;;;;;37351:13:0;37330:8;8877:18;;;;;;;;;;;37386:1;37380:7;;37376:61;;;37399:13;;37389:48;;-1:-1:-1;;;;;37399:13:0;37422:4;37429:7;37399:13;37429:3;:7;:::i;:::-;37389:9;:48::i;:::-;37463:13;;;;;;;;;-1:-1:-1;;;;;37463:13:0;-1:-1:-1;;;;;37448:34:0;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37495:43;37527:10;8530:2;;8447:93;37527:10;37521:16;;:2;:16;:::i;:::-;37512:25;;:6;:25;:::i;:::-;37495:16;:43::i;:::-;37575:10;;37567:58;;37550:12;;-1:-1:-1;;;;;37575:10:0;;37599:21;;37550:12;37567:58;37550:12;37567:58;37599:21;37575:10;37567:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37239:394:0:o;37641:244::-;20584:6;;-1:-1:-1;;;;;20584:6:0;352:10;20584:22;20576:67;;;;-1:-1:-1;;;20576:67:0;;;;;;;:::i;:::-;37748:13:::1;::::0;-1:-1:-1;;;;;37748:13:0;;::::1;37740:21:::0;;::::1;::::0;37732:91:::1;;;::::0;-1:-1:-1;;;37732:91:0;;11517:2:1;37732:91:0::1;::::0;::::1;11499:21:1::0;11556:2;11536:18;;;11529:30;11595:34;11575:18;;;11568:62;11666:27;11646:18;;;11639:55;11711:19;;37732:91:0::1;11315:421:1::0;37732:91:0::1;37836:41;37865:4;37871:5;37836:28;:41::i;:::-;37641:244:::0;;:::o;11788:269::-;11881:4;11898:129;352:10;11921:7;11930:96;11969:15;11930:96;;;;;;;;;;;;;;;;;352:10;11930:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11930:34:0;;;;;;;;;;;;:38;:96::i;9116:175::-;9202:4;9219:42;352:10;9243:9;9254:6;9219:9;:42::i;35617:247::-;35700:10;;-1:-1:-1;;;;;35700:10:0;35686;:24;35678:33;;;;;;35760:4;35744:13;8693:12;;;8605:108;35744:13;:20;;;;:::i;:::-;35734:6;:30;;35726:90;;;;-1:-1:-1;;;35726:90:0;;11943:2:1;35726:90:0;;;11925:21:1;11982:2;11962:18;;;11955:30;12021:34;12001:18;;;11994:62;-1:-1:-1;;;12072:18:1;;;12065:45;12127:19;;35726:90:0;11741:411:1;35726:90:0;35827:20;:29;35617:247::o;43166:164::-;20584:6;;-1:-1:-1;;;;;20584:6:0;352:10;20584:22;20576:67;;;;-1:-1:-1;;;20576:67:0;;;;;;;:::i;:::-;43240:6:::1;43235:88;43256:5;:12;43252:1;:16;43235:88;;;43307:4;43290;:14;43295:5;43301:1;43295:8;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;43290:14:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;43290:14:0;:21;;-1:-1:-1;;43290:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;43270:3;::::1;::::0;::::1;:::i;:::-;;;;43235:88;;37049:182:::0;20584:6;;-1:-1:-1;;;;;20584:6:0;352:10;20584:22;20576:67;;;;-1:-1:-1;;;20576:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37134:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;37134:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;37189:34;;1536:41:1;;;37189:34:0::1;::::0;1509:18:1;37189:34:0::1;;;;;;;37049:182:::0;;:::o;35017:135::-;20584:6;;35077:4;;-1:-1:-1;;;;;20584:6:0;352:10;20584:22;20576:67;;;;-1:-1:-1;;;20576:67:0;;;;;;;:::i;:::-;-1:-1:-1;35094:20:0::1;:28:::0;;-1:-1:-1;;35094:28:0::1;::::0;;;35017:135;:::o;21378:244::-;20584:6;;-1:-1:-1;;;;;20584:6:0;352:10;20584:22;20576:67;;;;-1:-1:-1;;;20576:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21467:22:0;::::1;21459:73;;;::::0;-1:-1:-1;;;21459:73:0;;12631:2:1;21459:73:0::1;::::0;::::1;12613:21:1::0;12670:2;12650:18;;;12643:30;12709:34;12689:18;;;12682:62;-1:-1:-1;;;12760:18:1;;;12753:36;12806:19;;21459:73:0::1;12429:402:1::0;21459:73:0::1;21569:6;::::0;21548:38:::1;::::0;-1:-1:-1;;;;;21548:38:0;;::::1;::::0;21569:6:::1;::::0;21548:38:::1;::::0;21569:6:::1;::::0;21548:38:::1;21597:6;:17:::0;;-1:-1:-1;;;;;;21597:17:0::1;-1:-1:-1::0;;;;;21597:17:0;;;::::1;::::0;;;::::1;::::0;;21378:244::o;16168:181::-;16226:7;;16258:5;16262:1;16258;:5;:::i;:::-;16246:17;;16287:1;16282;:6;;16274:46;;;;-1:-1:-1;;;16274:46:0;;13038:2:1;16274:46:0;;;13020:21:1;13077:2;13057:18;;;13050:30;13116:29;13096:18;;;13089:57;13163:18;;16274:46:0;12836:351:1;16274:46:0;16340:1;16168:181;-1:-1:-1;;;16168:181:0:o;14790:380::-;-1:-1:-1;;;;;14926:19:0;;14918:68;;;;-1:-1:-1;;;14918:68:0;;13394:2:1;14918:68:0;;;13376:21:1;13433:2;13413:18;;;13406:30;13472:34;13452:18;;;13445:62;-1:-1:-1;;;13523:18:1;;;13516:34;13567:19;;14918:68:0;13192:400:1;14918:68:0;-1:-1:-1;;;;;15005:21:0;;14997:68;;;;-1:-1:-1;;;14997:68:0;;13799:2:1;14997:68:0;;;13781:21:1;13838:2;13818:18;;;13811:30;13877:34;13857:18;;;13850:62;-1:-1:-1;;;13928:18:1;;;13921:32;13970:19;;14997:68:0;13597:398:1;14997:68:0;-1:-1:-1;;;;;15078:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15130:32;;2542:25:1;;;15130:32:0;;2515:18:1;15130:32:0;;;;;;;;14790:380;;;:::o;38226:3406::-;-1:-1:-1;;;;;38358:18:0;;38350:68;;;;-1:-1:-1;;;38350:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38437:16:0;;38429:64;;;;-1:-1:-1;;;38429:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38513:10:0;;;;;;:4;:10;;;;;;;;38512:11;:24;;;;-1:-1:-1;;;;;;38528:8:0;;;;;;:4;:8;;;;;;;;38527:9;38512:24;38504:33;;;;;;38554:6;38564:1;38554:11;38551:92;;38582:28;38598:4;38604:2;38608:1;38582:15;:28::i;38551:92::-;38666:14;;;;38663:997;;;20437:6;;-1:-1:-1;;;;;38718:15:0;;;20437:6;;38718:15;;;;:49;;-1:-1:-1;20437:6:0;;-1:-1:-1;;;;;38754:13:0;;;20437:6;;38754:13;;38718:49;:86;;;;-1:-1:-1;;;;;;38788:16:0;;;;38718:86;:128;;;;-1:-1:-1;;;;;;38825:21:0;;38839:6;38825:21;;38718:128;:158;;;;-1:-1:-1;38868:8:0;;-1:-1:-1;;;38868:8:0;;;;38867:9;38718:158;38696:953;;;38914:13;;;;;;;38910:148;;-1:-1:-1;;;;;38959:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;38988:23:0;;;;;;:19;:23;;;;;;;;38959:52;38951:87;;;;-1:-1:-1;;;38951:87:0;;15012:2:1;38951:87:0;;;14994:21:1;15051:2;15031:18;;;15024:30;-1:-1:-1;;;15070:18:1;;;15063:52;15132:18;;38951:87:0;14810:346:1;38951:87:0;-1:-1:-1;;;;;39127:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;39163:35:0;;;;;;:31;:35;;;;;;;;39162:36;39127:71;39123:511;;;39245:20;;39235:6;:30;;39227:96;;;;-1:-1:-1;;;39227:96:0;;15363:2:1;39227:96:0;;;15345:21:1;15402:2;15382:18;;;15375:30;15441:34;15421:18;;;15414:62;-1:-1:-1;;;15492:18:1;;;15485:51;15553:19;;39227:96:0;15161:417:1;39227:96:0;39123:511;;;-1:-1:-1;;;;;39417:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;39451:37:0;;;;;;:31;:37;;;;;;;;39450:38;39417:71;39413:221;;;39535:20;;39525:6;:30;;39517:97;;;;-1:-1:-1;;;39517:97:0;;15785:2:1;39517:97:0;;;15767:21:1;15824:2;15804:18;;;15797:30;15863:34;15843:18;;;15836:62;-1:-1:-1;;;15914:18:1;;;15907:52;15976:19;;39517:97:0;15583:418:1;39517:97:0;39723:4;39674:28;8877:18;;;;;;;;;;;39789;;39765:42;;;;;;;39838:35;;-1:-1:-1;39862:11:0;;;;;;;39838:35;:61;;;;-1:-1:-1;39891:8:0;;-1:-1:-1;;;39891:8:0;;;;39890:9;39838:61;:110;;;;-1:-1:-1;;;;;;39917:31:0;;;;;;:25;:31;;;;;;;;39916:32;39838:110;:153;;;;-1:-1:-1;;;;;;39966:25:0;;;;;;:19;:25;;;;;;;;39965:26;39838:153;:194;;;;-1:-1:-1;;;;;;40009:23:0;;;;;;:19;:23;;;;;;;;40008:24;39838:194;39820:338;;;40059:8;:15;;-1:-1:-1;;;;40059:15:0;-1:-1:-1;;;40059:15:0;;;40103:10;:8;:10::i;:::-;40130:8;:16;;-1:-1:-1;;;;40130:16:0;;;39820:338;40186:8;;-1:-1:-1;;;;;40295:25:0;;40170:12;40295:25;;;:19;:25;;;;;;40186:8;-1:-1:-1;;;40186:8:0;;;;;40185:9;;40295:25;;:52;;-1:-1:-1;;;;;;40324:23:0;;;;;;:19;:23;;;;;;;;40295:52;40292:99;;;-1:-1:-1;40374:5:0;40292:99;40411:12;40515:7;40512:1067;;;-1:-1:-1;;;;;40566:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;40615:1;40599:13;;:17;40566:50;40562:848;;;40643:34;40673:3;40643:25;40654:13;;40643:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;40636:41;;40744:13;;40725:16;;40718:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;40696:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;40812:13:0;;40799:10;;40792:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;40776:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;40892:13:0;;40873:16;;40866:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;40844:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;40928:20:0;;:24;;40951:1;;40928:24;:::i;:::-;:29;40924:81;;40959:46;;-1:-1:-1;;;40959:46:0;;16325:2:1;40959:46:0;;;16307:21:1;16364:2;16344:18;;;16337:30;16403:34;16383:18;;;16376:62;-1:-1:-1;;;16454:18:1;;;16447:34;16498:19;;40959:46:0;16123:400:1;40924:81:0;40562:848;;;-1:-1:-1;;;;;41066:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;41116:1;41101:12;;:16;41066:51;41063:347;;;41142:33;41171:3;41142:24;41153:12;;41142:6;:10;;:24;;;;:::i;:33::-;41135:40;;41238:12;;41220:15;;41213:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41191:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;41304:12:0;;41292:9;;41285:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;41269:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;41382:12:0;;41364:15;;41357:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;41335:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;41063:347:0;41441:8;;41438:93;;41473:42;41489:4;41503;41510;41473:15;:42::i;:::-;41553:14;41563:4;41553:14;;:::i;:::-;;;40512:1067;41591:33;41607:4;41613:2;41617:6;41591:15;:33::i;:::-;38339:3293;;;;38226:3406;;;:::o;16776:192::-;16862:7;16898:12;16890:6;;;;16882:29;;;;-1:-1:-1;;;16882:29:0;;;;;;;;:::i;:::-;-1:-1:-1;16922:9:0;16934:5;16938:1;16934;:5;:::i;:::-;16922:17;16776:192;-1:-1:-1;;;;;16776:192:0:o;41640:601::-;41792:16;;;41806:1;41792:16;;;;;;;;41768:21;;41792:16;;;;;;;;;;-1:-1:-1;41792:16:0;41768:40;;41837:4;41819;41824:1;41819:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41819:23:0;;;:7;;;;;;;;;;:23;;;;41863:15;;:22;;;-1:-1:-1;;;41863:22:0;;;;:15;;;;;:20;;:22;;;;;41819:7;;41863:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41853:4;41858:1;41853:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41853:32:0;;;:7;;;;;;;;;:32;41930:15;;41898:62;;41915:4;;41930:15;41948:11;41898:8;:62::i;:::-;41999:15;;:224;;-1:-1:-1;;;41999:224:0;;-1:-1:-1;;;;;41999:15:0;;;;:66;;:224;;42080:11;;41999:15;;42150:4;;42177;;42197:15;;41999:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37893:188;-1:-1:-1;;;;;37976:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;37976:39:0;;;;;;;;;;38033:40;;37976:39;;:31;38033:40;;;37893:188;;:::o;12547:573::-;-1:-1:-1;;;;;12687:20:0;;12679:70;;;;-1:-1:-1;;;12679:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12768:23:0;;12760:71;;;;-1:-1:-1;;;12760:71:0;;;;;;;:::i;:::-;12924;12946:6;12924:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12924:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;12904:17:0;;;:9;:17;;;;;;;;;;;:91;;;;13029:20;;;;;;;:32;;13054:6;13029:24;:32::i;:::-;-1:-1:-1;;;;;13006:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;13077:35;2542:25:1;;;13006:20:0;;13077:35;;;;;;2515:18:1;13077:35:0;2396:177:1;42249:909:0;42332:4;42288:23;8877:18;;;;;;;;;;;42288:50;;42349:25;42419:12;;42398:18;;42377;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;42349:82;-1:-1:-1;42442:12:0;42478:20;;;:46;;-1:-1:-1;42502:22:0;;42478:46;42475:60;;;42527:7;;;42249:909::o;42475:60::-;42568:18;;:23;;42589:2;42568:23;:::i;:::-;42550:15;:41;42547:111;;;42623:18;;:23;;42644:2;42623:23;:::i;:::-;42605:41;;42547:111;42727:23;42812:1;42792:17;42771:18;;42753:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;42727:86;-1:-1:-1;42824:26:0;42853:36;:15;42727:86;42853:19;:36::i;:::-;42824:65;;42910:36;42927:18;42910:16;:36::i;:::-;42997:1;42976:18;:22;;;43009:18;:22;;;43042:12;:16;;;43100:10;;43092:58;;-1:-1:-1;;;;;43100:10:0;;;;43124:21;;43092:58;;42997:1;43092:58;43124:21;43100:10;43092:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;42249:909:0:o;17227:471::-;17285:7;17530:1;17535;17530:6;17526:47;;-1:-1:-1;17560:1:0;17553:8;;17526:47;17585:9;17597:5;17601:1;17597;:5;:::i;:::-;17585:17;-1:-1:-1;17630:1:0;17621:5;17625:1;17585:17;17621:5;:::i;:::-;:10;17613:56;;;;-1:-1:-1;;;17613:56:0;;17971:2:1;17613:56:0;;;17953:21:1;18010:2;17990:18;;;17983:30;18049:34;18029:18;;;18022:62;-1:-1:-1;;;18100:18:1;;;18093:31;18141:19;;17613:56:0;17769:397:1;18174:132:0;18232:7;18259:39;18263:1;18266;18259:39;;;;;;;;;;;;;;;;;:3;:39::i;16632:136::-;16690:7;16717:43;16721:1;16724;16717:43;;;;;;;;;;;;;;;;;:3;:43::i;18802:278::-;18888:7;18923:12;18916:5;18908:28;;;;-1:-1:-1;;;18908:28:0;;;;;;;;:::i;:::-;-1:-1:-1;18947:9:0;18959:5;18963:1;18959;:5;:::i;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:597::-;311:4;340:2;369;358:9;351:21;401:6;395:13;444:6;439:2;428:9;424:18;417:34;469:1;479:140;493:6;490:1;487:13;479:140;;;588:14;;;584:23;;578:30;554:17;;;573:2;550:26;543:66;508:10;;479:140;;;637:6;634:1;631:13;628:91;;;707:1;702:2;693:6;682:9;678:22;674:31;667:42;628:91;-1:-1:-1;780:2:1;759:15;-1:-1:-1;;755:29:1;740:45;;;;787:2;736:54;;199:597;-1:-1:-1;;;199:597:1:o;801:131::-;-1:-1:-1;;;;;876:31:1;;866:42;;856:70;;922:1;919;912:12;856:70;801:131;:::o;937:134::-;1005:20;;1034:31;1005:20;1034:31;:::i;1076:315::-;1144:6;1152;1205:2;1193:9;1184:7;1180:23;1176:32;1173:52;;;1221:1;1218;1211:12;1173:52;1260:9;1247:23;1279:31;1304:5;1279:31;:::i;:::-;1329:5;1381:2;1366:18;;;;1353:32;;-1:-1:-1;;;1076:315:1:o;1588:316::-;1665:6;1673;1681;1734:2;1722:9;1713:7;1709:23;1705:32;1702:52;;;1750:1;1747;1740:12;1702:52;-1:-1:-1;;1773:23:1;;;1843:2;1828:18;;1815:32;;-1:-1:-1;1894:2:1;1879:18;;;1866:32;;1588:316;-1:-1:-1;1588:316:1:o;1909:247::-;1968:6;2021:2;2009:9;2000:7;1996:23;1992:32;1989:52;;;2037:1;2034;2027:12;1989:52;2076:9;2063:23;2095:31;2120:5;2095:31;:::i;2578:456::-;2655:6;2663;2671;2724:2;2712:9;2703:7;2699:23;2695:32;2692:52;;;2740:1;2737;2730:12;2692:52;2779:9;2766:23;2798:31;2823:5;2798:31;:::i;:::-;2848:5;-1:-1:-1;2905:2:1;2890:18;;2877:32;2918:33;2877:32;2918:33;:::i;:::-;2578:456;;2970:7;;-1:-1:-1;;;3024:2:1;3009:18;;;;2996:32;;2578:456::o;3436:416::-;3501:6;3509;3562:2;3550:9;3541:7;3537:23;3533:32;3530:52;;;3578:1;3575;3568:12;3530:52;3617:9;3604:23;3636:31;3661:5;3636:31;:::i;:::-;3686:5;-1:-1:-1;3743:2:1;3728:18;;3715:32;3785:15;;3778:23;3766:36;;3756:64;;3816:1;3813;3806:12;3756:64;3839:7;3829:17;;;3436:416;;;;;:::o;3857:127::-;3918:10;3913:3;3909:20;3906:1;3899:31;3949:4;3946:1;3939:15;3973:4;3970:1;3963:15;3989:1121;4073:6;4104:2;4147;4135:9;4126:7;4122:23;4118:32;4115:52;;;4163:1;4160;4153:12;4115:52;4203:9;4190:23;4232:18;4273:2;4265:6;4262:14;4259:34;;;4289:1;4286;4279:12;4259:34;4327:6;4316:9;4312:22;4302:32;;4372:7;4365:4;4361:2;4357:13;4353:27;4343:55;;4394:1;4391;4384:12;4343:55;4430:2;4417:16;4452:2;4448;4445:10;4442:36;;;4458:18;;:::i;:::-;4504:2;4501:1;4497:10;4536:2;4530:9;4599:2;4595:7;4590:2;4586;4582:11;4578:25;4570:6;4566:38;4654:6;4642:10;4639:22;4634:2;4622:10;4619:18;4616:46;4613:72;;;4665:18;;:::i;:::-;4701:2;4694:22;4751:18;;;4785:15;;;;-1:-1:-1;4827:11:1;;;4823:20;;;4855:19;;;4852:39;;;4887:1;4884;4877:12;4852:39;4911:11;;;;4931:148;4947:6;4942:3;4939:15;4931:148;;;5013:23;5032:3;5013:23;:::i;:::-;5001:36;;4964:12;;;;5057;;;;4931:148;;;5098:6;3989:1121;-1:-1:-1;;;;;;;;3989:1121:1:o;5115:388::-;5183:6;5191;5244:2;5232:9;5223:7;5219:23;5215:32;5212:52;;;5260:1;5257;5250:12;5212:52;5299:9;5286:23;5318:31;5343:5;5318:31;:::i;:::-;5368:5;-1:-1:-1;5425:2:1;5410:18;;5397:32;5438:33;5397:32;5438:33;:::i;5508:356::-;5710:2;5692:21;;;5729:18;;;5722:30;5788:34;5783:2;5768:18;;5761:62;5855:2;5840:18;;5508:356::o;5869:127::-;5930:10;5925:3;5921:20;5918:1;5911:31;5961:4;5958:1;5951:15;5985:4;5982:1;5975:15;6001:168;6041:7;6107:1;6103;6099:6;6095:14;6092:1;6089:21;6084:1;6077:9;6070:17;6066:45;6063:71;;;6114:18;;:::i;:::-;-1:-1:-1;6154:9:1;;6001:168::o;6174:127::-;6235:10;6230:3;6226:20;6223:1;6216:31;6266:4;6263:1;6256:15;6290:4;6287:1;6280:15;6306:120;6346:1;6372;6362:35;;6377:18;;:::i;:::-;-1:-1:-1;6411:9:1;;6306:120::o;6836:380::-;6915:1;6911:12;;;;6958;;;6979:61;;7033:4;7025:6;7021:17;7011:27;;6979:61;7086:2;7078:6;7075:14;7055:18;7052:38;7049:161;;7132:10;7127:3;7123:20;7120:1;7113:31;7167:4;7164:1;7157:15;7195:4;7192:1;7185:15;7049:161;;6836:380;;;:::o;7221:128::-;7261:3;7292:1;7288:6;7285:1;7282:13;7279:39;;;7298:18;;:::i;:::-;-1:-1:-1;7334:9:1;;7221:128::o;9592:125::-;9632:4;9660:1;9657;9654:8;9651:34;;;9665:18;;:::i;:::-;-1:-1:-1;9702:9:1;;9592:125::o;9722:422::-;9811:1;9854:5;9811:1;9868:270;9889:7;9879:8;9876:21;9868:270;;;9948:4;9944:1;9940:6;9936:17;9930:4;9927:27;9924:53;;;9957:18;;:::i;:::-;10007:7;9997:8;9993:22;9990:55;;;10027:16;;;;9990:55;10106:22;;;;10066:15;;;;9868:270;;;9872:3;9722:422;;;;;:::o;10149:806::-;10198:5;10228:8;10218:80;;-1:-1:-1;10269:1:1;10283:5;;10218:80;10317:4;10307:76;;-1:-1:-1;10354:1:1;10368:5;;10307:76;10399:4;10417:1;10412:59;;;;10485:1;10480:130;;;;10392:218;;10412:59;10442:1;10433:10;;10456:5;;;10480:130;10517:3;10507:8;10504:17;10501:43;;;10524:18;;:::i;:::-;-1:-1:-1;;10580:1:1;10566:16;;10595:5;;10392:218;;10694:2;10684:8;10681:16;10675:3;10669:4;10666:13;10662:36;10656:2;10646:8;10643:16;10638:2;10632:4;10629:12;10625:35;10622:77;10619:159;;;-1:-1:-1;10731:19:1;;;10763:5;;10619:159;10810:34;10835:8;10829:4;10810:34;:::i;:::-;10880:6;10876:1;10872:6;10868:19;10859:7;10856:32;10853:58;;;10891:18;;:::i;:::-;10929:20;;10149:806;-1:-1:-1;;;10149:806:1:o;10960:140::-;11018:5;11047:47;11088:4;11078:8;11074:19;11068:4;11047:47;:::i;12157:127::-;12218:10;12213:3;12209:20;12206:1;12199:31;12249:4;12246:1;12239:15;12273:4;12270:1;12263:15;12289:135;12328:3;12349:17;;;12346:43;;12369:18;;:::i;:::-;-1:-1:-1;12416:1:1;12405:13;;12289:135::o;14000:401::-;14202:2;14184:21;;;14241:2;14221:18;;;14214:30;14280:34;14275:2;14260:18;;14253:62;-1:-1:-1;;;14346:2:1;14331:18;;14324:35;14391:3;14376:19;;14000:401::o;14406:399::-;14608:2;14590:21;;;14647:2;14627:18;;;14620:30;14686:34;14681:2;14666:18;;14659:62;-1:-1:-1;;;14752:2:1;14737:18;;14730:33;14795:3;14780:19;;14406:399::o;16006:112::-;16038:1;16064;16054:35;;16069:18;;:::i;:::-;-1:-1:-1;16103:9:1;;16006:112::o;16528:251::-;16598:6;16651:2;16639:9;16630:7;16626:23;16622:32;16619:52;;;16667:1;16664;16657:12;16619:52;16699:9;16693:16;16718:31;16743:5;16718:31;:::i;16784:980::-;17046:4;17094:3;17083:9;17079:19;17125:6;17114:9;17107:25;17151:2;17189:6;17184:2;17173:9;17169:18;17162:34;17232:3;17227:2;17216:9;17212:18;17205:31;17256:6;17291;17285:13;17322:6;17314;17307:22;17360:3;17349:9;17345:19;17338:26;;17399:2;17391:6;17387:15;17373:29;;17420:1;17430:195;17444:6;17441:1;17438:13;17430:195;;;17509:13;;-1:-1:-1;;;;;17505:39:1;17493:52;;17600:15;;;;17565:12;;;;17541:1;17459:9;17430:195;;;-1:-1:-1;;;;;;;17681:32:1;;;;17676:2;17661:18;;17654:60;-1:-1:-1;;;17745:3:1;17730:19;17723:35;17642:3;16784:980;-1:-1:-1;;;16784:980:1:o

Swarm Source

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