ETH Price: $2,756.86 (+5.02%)

Token

ALIENOMICS (ALIENOMICS)
 

Overview

Max Total Supply

55,419,000 ALIENOMICS

Holders

116

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

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-07-13
*/

// SPDX-License-Identifier: Unlicensed

/*

https://www.alienomics.net/
https://x.com/alienomics
https://t.me/alienomics

*/

pragma solidity 0.8.26;
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
 
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
 
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
 
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
 
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
 
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
 
    function initialize(address, address) external;
}
 
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
 
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
 
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
 
    function createPair(address tokenA, address tokenB) external returns (address pair);
 
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
 
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);
 
    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);
 
    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);
 
    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);
 
    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
 
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);
 
    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);
 
    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);
 
    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}
 
 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
 
    mapping(address => uint256) private _balances;
 
    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;
 
    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
 
    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }
 
    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
 
    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }
 
    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
 
    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
 
    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
 
    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
 
    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
 
    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
 
    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
 
        _beforeTokenTransfer(sender, recipient, amount);
 
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
 
    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
 
        _beforeTokenTransfer(address(0), account, amount);
 
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
 
    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
 
        _beforeTokenTransfer(account, address(0), amount);
 
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
 
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
 
    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}
 
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
 
        return c;
    }
 
    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
 
        return c;
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
 
contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
 
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }
 
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
 
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);
 
    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
 
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }
 
    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);
 
        // Solidity already throws when dividing by 0.
        return a / b;
    }
 
    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }
 
    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }
 
    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
 
 
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}
 
 
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
 
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
 
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
 
contract ALIENOMICS is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
 
    bool private swapping;
 
    address private MarketingWallet;
    address private DevWallet;
 
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
 
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
 
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
 
    // Seller Map
    mapping (address => uint256) private _holderFirstBuyTimestamp;
 
    // Blacklist Map
    mapping (address => bool) private _blacklist;
    bool public transferDelayEnabled = true;
 
    uint256 public buyTotalFees;
    uint256 public buyMarketing;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
 
    uint256 public sellTotalFees;
    uint256 public sellMarketing;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
 
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
 
    // block number of opened trading
    uint256 launchedAt;
 
    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
 
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;
 
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
 
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 
    event MarketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event DevWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20("ALIENOMICS", "ALIENOMICS") {
 
        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);
 
        uint256 _buyMarketing = 25;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;
 
        uint256 _sellMarketing = 35;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;
 
       
 
     uint256 totalSupply = 55419 * 10 ** 3 * 10 ** decimals();
 
        maxTransactionAmount = 55419 * 10 ** 1 * 10 ** decimals(); 
        maxWallet = 55419 * 10 ** 1 * 10 ** decimals(); 
        swapTokensAtAmount = totalSupply * 10 / 10000; // 0.1% swap wallet
 
        buyMarketing = _buyMarketing;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketing + buyLiquidityFee + buyDevFee;
 
        sellMarketing = _sellMarketing;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketing + sellLiquidityFee + sellDevFee;
 
        MarketingWallet = address(0xa32c4315b8FAC10c410d3875C8a087Bb07FB77EB); // set as Marketing wallet
        DevWallet = address(0xa32c4315b8FAC10c410d3875C8a087Bb07FB77EB); // set as dev wallet
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }
 
    receive() external payable {
 
    }
 
    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
    }
 
    // 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 updateSwapTokensAtAmount(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 updateMaxTransaction(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }
 
    function updateMaxWallets(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
 
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }

     function updateBuyFees(uint256 _Marketing, uint256 _liquidityFee, uint256 _DevFee) external onlyOwner {
        buyMarketing = _Marketing;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _DevFee;
        buyTotalFees = buyMarketing + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 99, "Must keep fees at 99% or less");
    }
 
    function updateSellFees(uint256 _Marketing, uint256 _liquidityFee, uint256 _DevFee) external onlyOwner {
        sellMarketing = _Marketing;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _DevFee;
        sellTotalFees = sellMarketing + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 99, "Must keep fees at 99% or less");
    }

 
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    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 updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit MarketingWalletUpdated(newMarketingWallet, MarketingWallet);
        MarketingWallet = newMarketingWallet;
    }
 
    function updateDevWallet(address newWallet) external onlyOwner {
        emit DevWalletUpdated(newWallet, DevWallet);
        DevWallet = newWallet;
    }
 
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    event BoughtEarly(address indexed sniper);
 
    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(!_blacklist[to] && !_blacklist[from], "You have been blacklisted from transfering tokens");
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
 
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] <= block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
 
       
        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 * sellMarketing / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketing / 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 addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            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);
 
        uint256 initialETHBalance = address(this).balance;
 
        swapTokensForEth(amountToSwapForETH); 
 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
 
 
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
 
        (success,) = address(DevWallet).call{value: ethForDev}("");
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(MarketingWallet).call{value: address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketingWalletUpdated","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"},{"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":"buyMarketing","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":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"sellMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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"},{"inputs":[{"internalType":"uint256","name":"_Marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_Marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b5f6101000a81548160ff0219169083151502179055505f600b60016101000a81548160ff0219169083151502179055505f600b60026101000a81548160ff0219169083151502179055506001600f5f6101000a81548160ff021916908315150217905550348015610077575f80fd5b506040518060400160405280600a81526020017f414c49454e4f4d494353000000000000000000000000000000000000000000008152506040518060400160405280600a81526020017f414c49454e4f4d4943530000000000000000000000000000000000000000000081525081600390816100f39190610d63565b5080600490816101039190610d63565b5050505f61011561062a60201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f737a250d5630b4cf539739df2c5dacb4c659f2488d90506101db81600161063160201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610258573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061027c9190610e90565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102e1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103059190610e90565b6040518363ffffffff1660e01b8152600401610322929190610eca565b6020604051808303815f875af115801561033e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103629190610e90565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506103a860a051600161063160201b60201c565b6103bb60a051600161072560201b60201c565b5f601990505f805f602390505f805f6103d86107c360201b60201c565b600a6103e49190611059565b63034da0786103f391906110a3565b90506104036107c360201b60201c565b600a61040f9190611059565b620874ce61041d91906110a3565b6008819055506104316107c360201b60201c565b600a61043d9190611059565b620874ce61044b91906110a3565b600a81905550612710600a8261046191906110a3565b61046b9190611111565b6009819055508660118190555085601281905550846013819055506013546012546011546104999190611141565b6104a39190611141565b6010819055508360158190555082601681905550816017819055506017546016546015546104d19190611141565b6104db9190611141565b60148190555073a32c4315b8fac10c410d3875c8a087bb07fb77eb60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a32c4315b8fac10c410d3875c8a087bb07fb77eb60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506105a761059a6107cb60201b60201c565b60016107f360201b60201c565b6105b83060016107f360201b60201c565b6105cb61dead60016107f360201b60201c565b6105e96105dc6107cb60201b60201c565b600161063160201b60201c565b6105fa30600161063160201b60201c565b61060d61dead600161063160201b60201c565b61061d338261093560201b60201c565b5050505050505050611317565b5f33905090565b61063f61062a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c4906111ce565b60405180910390fd5b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f6012905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61080161062a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461088f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610886906111ce565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516109299190611206565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036109a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099a90611269565b60405180910390fd5b6109b45f8383610ac760201b60201c565b6109c981600254610acc60201b90919060201c565b600281905550610a1e815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610acc60201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610abb9190611296565b60405180910390a35050565b505050565b5f808284610ada9190611141565b905083811015610b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b16906112f9565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610ba457607f821691505b602082108103610bb757610bb6610b60565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610c197fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610bde565b610c238683610bde565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610c67610c62610c5d84610c3b565b610c44565b610c3b565b9050919050565b5f819050919050565b610c8083610c4d565b610c94610c8c82610c6e565b848454610bea565b825550505050565b5f90565b610ca8610c9c565b610cb3818484610c77565b505050565b5b81811015610cd657610ccb5f82610ca0565b600181019050610cb9565b5050565b601f821115610d1b57610cec81610bbd565b610cf584610bcf565b81016020851015610d04578190505b610d18610d1085610bcf565b830182610cb8565b50505b505050565b5f82821c905092915050565b5f610d3b5f1984600802610d20565b1980831691505092915050565b5f610d538383610d2c565b9150826002028217905092915050565b610d6c82610b29565b67ffffffffffffffff811115610d8557610d84610b33565b5b610d8f8254610b8d565b610d9a828285610cda565b5f60209050601f831160018114610dcb575f8415610db9578287015190505b610dc38582610d48565b865550610e2a565b601f198416610dd986610bbd565b5f5b82811015610e0057848901518255600182019150602085019450602081019050610ddb565b86831015610e1d5784890151610e19601f891682610d2c565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610e5f82610e36565b9050919050565b610e6f81610e55565b8114610e79575f80fd5b50565b5f81519050610e8a81610e66565b92915050565b5f60208284031215610ea557610ea4610e32565b5b5f610eb284828501610e7c565b91505092915050565b610ec481610e55565b82525050565b5f604082019050610edd5f830185610ebb565b610eea6020830184610ebb565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115610f7357808604811115610f4f57610f4e610ef1565b5b6001851615610f5e5780820291505b8081029050610f6c85610f1e565b9450610f33565b94509492505050565b5f82610f8b5760019050611046565b81610f98575f9050611046565b8160018114610fae5760028114610fb857610fe7565b6001915050611046565b60ff841115610fca57610fc9610ef1565b5b8360020a915084821115610fe157610fe0610ef1565b5b50611046565b5060208310610133831016604e8410600b841016171561101c5782820a90508381111561101757611016610ef1565b5b611046565b6110298484846001610f2a565b925090508184048111156110405761103f610ef1565b5b81810290505b9392505050565b5f60ff82169050919050565b5f61106382610c3b565b915061106e8361104d565b925061109b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610f7c565b905092915050565b5f6110ad82610c3b565b91506110b883610c3b565b92508282026110c681610c3b565b915082820484148315176110dd576110dc610ef1565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61111b82610c3b565b915061112683610c3b565b925082611136576111356110e4565b5b828204905092915050565b5f61114b82610c3b565b915061115683610c3b565b925082820190508082111561116e5761116d610ef1565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6111b8602083611174565b91506111c382611184565b602082019050919050565b5f6020820190508181035f8301526111e5816111ac565b9050919050565b5f8115159050919050565b611200816111ec565b82525050565b5f6020820190506112195f8301846111f7565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f611253601f83611174565b915061125e8261121f565b602082019050919050565b5f6020820190508181035f83015261128081611247565b9050919050565b61129081610c3b565b82525050565b5f6020820190506112a95f830184611287565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6112e3601b83611174565b91506112ee826112af565b602082019050919050565b5f6020820190508181035f830152611310816112d7565b9050919050565b60805160a05161523a6113705f395f81816110e4015281816118b70152612a3e01525f8181610dcd015281816129e601528181613b4a01528181613c2901528181613c5001528181613ce60152613d0d015261523a5ff3fe6080604052600436106102e7575f3560e01c8063924de9b71161018f578063c0246668116100db578063dd62ed3e11610094578063f11a24d31161006e578063f11a24d314610b32578063f2fde38b14610b5c578063f637434214610b84578063f8b45b0514610bae576102ee565b8063dd62ed3e14610aa2578063e2f4560514610ade578063e884f26014610b08576102ee565b8063c024666814610998578063c17b5b8c146109c0578063c876d0b9146109e8578063c8c8ebe414610a12578063d257b34f14610a3c578063d85ba06314610a78576102ee565b8063a0d82dc511610148578063a9059cbb11610122578063a9059cbb146108ce578063aacebbe31461090a578063b62496f514610932578063bbc0c7421461096e576102ee565b8063a0d82dc51461083e578063a457c2d714610868578063a8b9f94d146108a4576102ee565b8063924de9b71461074857806395d89b41146107705780639a7a23d61461079a5780639b18b70e146107c25780639c3b4fdc146107ea5780639fccce3214610814576102ee565b806349bd5a5e1161024e57806370a08231116102075780637571336a116101e15780637571336a146106b85780638095d564146106e05780638a8c523c146107085780638da5cb5b1461071e576102ee565b806370a082311461063c578063715018a614610678578063751039fc1461068e576102ee565b806349bd5a5e1461052e5780634a62bb65146105585780634fbee193146105825780636a486a8e146105be5780636b41ae0c146105e85780636ddd171314610612576102ee565b80631816467f116102a05780631816467f146104105780631a8145bb146104385780631f3fed8f1461046257806323b872dd1461048c578063313ce567146104c857806339509351146104f2576102ee565b80630517d13d146102f257806306fdde031461031a578063095ea7b31461034457806310d5de53146103805780631694505e146103bc57806318160ddd146103e6576102ee565b366102ee57005b5f80fd5b3480156102fd575f80fd5b5061031860048036038101906103139190613e4f565b610bd8565b005b348015610325575f80fd5b5061032e610d01565b60405161033b9190613eea565b60405180910390f35b34801561034f575f80fd5b5061036a60048036038101906103659190613f64565b610d91565b6040516103779190613fbc565b60405180910390f35b34801561038b575f80fd5b506103a660048036038101906103a19190613fd5565b610dae565b6040516103b39190613fbc565b60405180910390f35b3480156103c7575f80fd5b506103d0610dcb565b6040516103dd919061405b565b60405180910390f35b3480156103f1575f80fd5b506103fa610def565b6040516104079190614083565b60405180910390f35b34801561041b575f80fd5b5061043660048036038101906104319190613fd5565b610df8565b005b348015610443575f80fd5b5061044c610f4c565b6040516104599190614083565b60405180910390f35b34801561046d575f80fd5b50610476610f52565b6040516104839190614083565b60405180910390f35b348015610497575f80fd5b506104b260048036038101906104ad919061409c565b610f58565b6040516104bf9190613fbc565b60405180910390f35b3480156104d3575f80fd5b506104dc61102c565b6040516104e99190614107565b60405180910390f35b3480156104fd575f80fd5b5061051860048036038101906105139190613f64565b611034565b6040516105259190613fbc565b60405180910390f35b348015610539575f80fd5b506105426110e2565b60405161054f919061412f565b60405180910390f35b348015610563575f80fd5b5061056c611106565b6040516105799190613fbc565b60405180910390f35b34801561058d575f80fd5b506105a860048036038101906105a39190613fd5565b611118565b6040516105b59190613fbc565b60405180910390f35b3480156105c9575f80fd5b506105d261116a565b6040516105df9190614083565b60405180910390f35b3480156105f3575f80fd5b506105fc611170565b6040516106099190614083565b60405180910390f35b34801561061d575f80fd5b50610626611176565b6040516106339190613fbc565b60405180910390f35b348015610647575f80fd5b50610662600480360381019061065d9190613fd5565b611189565b60405161066f9190614083565b60405180910390f35b348015610683575f80fd5b5061068c6111ce565b005b348015610699575f80fd5b506106a2611321565b6040516106af9190613fbc565b60405180910390f35b3480156106c3575f80fd5b506106de60048036038101906106d99190614172565b6113d8565b005b3480156106eb575f80fd5b50610706600480360381019061070191906141b0565b6114c6565b005b348015610713575f80fd5b5061071c6115df565b005b348015610729575f80fd5b506107326116b4565b60405161073f919061412f565b60405180910390f35b348015610753575f80fd5b5061076e60048036038101906107699190614200565b6116dc565b005b34801561077b575f80fd5b5061078461178f565b6040516107919190613eea565b60405180910390f35b3480156107a5575f80fd5b506107c060048036038101906107bb9190614172565b61181f565b005b3480156107cd575f80fd5b506107e860048036038101906107e39190613e4f565b611951565b005b3480156107f5575f80fd5b506107fe611a7a565b60405161080b9190614083565b60405180910390f35b34801561081f575f80fd5b50610828611a80565b6040516108359190614083565b60405180910390f35b348015610849575f80fd5b50610852611a86565b60405161085f9190614083565b60405180910390f35b348015610873575f80fd5b5061088e60048036038101906108899190613f64565b611a8c565b60405161089b9190613fbc565b60405180910390f35b3480156108af575f80fd5b506108b8611b54565b6040516108c59190614083565b60405180910390f35b3480156108d9575f80fd5b506108f460048036038101906108ef9190613f64565b611b5a565b6040516109019190613fbc565b60405180910390f35b348015610915575f80fd5b50610930600480360381019061092b9190613fd5565b611b77565b005b34801561093d575f80fd5b5061095860048036038101906109539190613fd5565b611ccb565b6040516109659190613fbc565b60405180910390f35b348015610979575f80fd5b50610982611ce8565b60405161098f9190613fbc565b60405180910390f35b3480156109a3575f80fd5b506109be60048036038101906109b99190614172565b611cfb565b005b3480156109cb575f80fd5b506109e660048036038101906109e191906141b0565b611e37565b005b3480156109f3575f80fd5b506109fc611f50565b604051610a099190613fbc565b60405180910390f35b348015610a1d575f80fd5b50610a26611f62565b604051610a339190614083565b60405180910390f35b348015610a47575f80fd5b50610a626004803603810190610a5d9190613e4f565b611f68565b604051610a6f9190613fbc565b60405180910390f35b348015610a83575f80fd5b50610a8c6120d6565b604051610a999190614083565b60405180910390f35b348015610aad575f80fd5b50610ac86004803603810190610ac3919061422b565b6120dc565b604051610ad59190614083565b60405180910390f35b348015610ae9575f80fd5b50610af261215e565b604051610aff9190614083565b60405180910390f35b348015610b13575f80fd5b50610b1c612164565b604051610b299190613fbc565b60405180910390f35b348015610b3d575f80fd5b50610b4661221b565b604051610b539190614083565b60405180910390f35b348015610b67575f80fd5b50610b826004803603810190610b7d9190613fd5565b612221565b005b348015610b8f575f80fd5b50610b986123e3565b604051610ba59190614083565b60405180910390f35b348015610bb9575f80fd5b50610bc26123e9565b604051610bcf9190614083565b60405180910390f35b610be06123ef565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c65906142b3565b60405180910390fd5b670de0b6b3a76400006103e86001610c84610def565b610c8e91906142fe565b610c98919061436c565b610ca2919061436c565b811015610ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdb9061440c565b60405180910390fd5b670de0b6b3a764000081610cf891906142fe565b60088190555050565b606060038054610d1090614457565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3c90614457565b8015610d875780601f10610d5e57610100808354040283529160200191610d87565b820191905f5260205f20905b815481529060010190602001808311610d6a57829003601f168201915b5050505050905090565b5f610da4610d9d6123ef565b84846123f6565b6001905092915050565b601d602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610e006123ef565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e85906142b3565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0db17895a9d092fb3ca24d626f2150dd80c185b0706b36f1040ee239f56cb87160405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b60185481565b5f610f648484846125b9565b61102184610f706123ef565b61101c856040518060600160405280602881526020016151b86028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610fd36123ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546132ea9092919063ffffffff16565b6123f6565b600190509392505050565b5f6012905090565b5f6110d86110406123ef565b846110d38560015f6110506123ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461334c90919063ffffffff16565b6123f6565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b5f9054906101000a900460ff1681565b5f601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60145481565b60155481565b600b60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6111d66123ef565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b906142b3565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f61132a6123ef565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113af906142b3565b60405180910390fd5b5f600b5f6101000a81548160ff0219169083151502179055506001905090565b6113e06123ef565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461146e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611465906142b3565b60405180910390fd5b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6114ce6123ef565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461155c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611553906142b3565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546115849190614487565b61158e9190614487565b601081905550606360105411156115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d190614504565b60405180910390fd5b505050565b6115e76123ef565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166c906142b3565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601b81905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6116e46123ef565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611772576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611769906142b3565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461179e90614457565b80601f01602080910402602001604051908101604052809291908181526020018280546117ca90614457565b80156118155780601f106117ec57610100808354040283529160200191611815565b820191905f5260205f20905b8154815290600101906020018083116117f857829003601f168201915b5050505050905090565b6118276123ef565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ac906142b3565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193a90614592565b60405180910390fd5b61194d82826133a9565b5050565b6119596123ef565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119de906142b3565b60405180910390fd5b670de0b6b3a76400006103e860016119fd610def565b611a0791906142fe565b611a11919061436c565b611a1b919061436c565b811015611a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5490614620565b60405180910390fd5b670de0b6b3a764000081611a7191906142fe565b600a8190555050565b60135481565b601a5481565b60175481565b5f611b4a611a986123ef565b84611b45856040518060600160405280602581526020016151e06025913960015f611ac16123ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546132ea9092919063ffffffff16565b6123f6565b6001905092915050565b60115481565b5f611b6d611b666123ef565b84846125b9565b6001905092915050565b611b7f6123ef565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c04906142b3565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e602052805f5260405f205f915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611d036123ef565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d88906142b3565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e2b9190613fbc565b60405180910390a25050565b611e3f6123ef565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec4906142b3565b60405180910390fd5b826015819055508160168190555080601781905550601754601654601554611ef59190614487565b611eff9190614487565b60148190555060636014541115611f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4290614504565b60405180910390fd5b505050565b600f5f9054906101000a900460ff1681565b60085481565b5f611f716123ef565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff6906142b3565b60405180910390fd5b620186a0600161200d610def565b61201791906142fe565b612021919061436c565b821015612063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205a906146ae565b60405180910390fd5b6103e86005612070610def565b61207a91906142fe565b612084919061436c565b8211156120c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bd9061473c565b60405180910390fd5b8160098190555060019050919050565b60105481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60095481565b5f61216d6123ef565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f2906142b3565b60405180910390fd5b5f600f5f6101000a81548160ff0219169083151502179055506001905090565b60125481565b6122296123ef565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ae906142b3565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231c906147ca565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600a5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245b90614858565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c9906148e6565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125ac9190614083565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261e90614974565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268c90614a02565b60405180910390fd5b600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156127335750600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b612772576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276990614a90565b60405180910390fd5b5f81036127895761278483835f613447565b6132e5565b600b5f9054906101000a900460ff1615612e31576127a56116b4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561281357506127e36116b4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561284b57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612885575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561289e5750600560149054906101000a900460ff16155b15612e3057600b60019054906101000a900460ff1661299257601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806129525750601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298890614af8565b60405180910390fd5b5b600f5f9054906101000a900460ff1615612b56576129ae6116b4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612a3557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a8d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612b555743600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541115612b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0990614bac565b60405180910390fd5b43600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612bf35750601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612c9a57600854811115612c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3490614c3a565b60405180910390fd5b600a54612c4983611189565b82612c549190614487565b1115612c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8c90614ca2565b60405180910390fd5b612e2f565b601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d375750601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612d8657600854811115612d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7890614d30565b60405180910390fd5b612e2e565b601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612e2d57600a54612de083611189565b82612deb9190614487565b1115612e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2390614ca2565b60405180910390fd5b5b5b5b5b5b5f612e3b30611189565b90505f6009548210159050808015612e5f5750600b60029054906101000a900460ff165b8015612e785750600560149054906101000a900460ff16155b8015612ecb5750601e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612f1e5750601c5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612f715750601c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612fb4576001600560146101000a81548160ff021916908315150217905550612f996136d0565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff16159050601c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806130635750601c5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561306c575f90505b5f81156132d557601e5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156130ca57505f601454115b15613194576130f760646130e96014548861399f90919063ffffffff16565b613a1690919063ffffffff16565b90506014546016548261310a91906142fe565b613114919061436c565b60195f8282546131249190614487565b925050819055506014546017548261313c91906142fe565b613146919061436c565b601a5f8282546131569190614487565b925050819055506014546015548261316e91906142fe565b613178919061436c565b60185f8282546131889190614487565b925050819055506132b2565b601e5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156131eb57505f601054115b156132b157613218606461320a6010548861399f90919063ffffffff16565b613a1690919063ffffffff16565b90506010546012548261322b91906142fe565b613235919061436c565b60195f8282546132459190614487565b925050819055506010546013548261325d91906142fe565b613267919061436c565b601a5f8282546132779190614487565b925050819055506010546011548261328f91906142fe565b613299919061436c565b60185f8282546132a99190614487565b925050819055505b5b5f8111156132c6576132c5873083613447565b5b80856132d29190614d4e565b94505b6132e0878787613447565b505050505b505050565b5f838311158290613331576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133289190613eea565b60405180910390fd5b505f838561333f9190614d4e565b9050809150509392505050565b5f80828461335a9190614487565b90508381101561339f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339690614dcb565b60405180910390fd5b8091505092915050565b80601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036134b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ac90614974565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161351a90614a02565b60405180910390fd5b61352e838383613a5f565b61359781604051806060016040528060268152602001615192602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546132ea9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613626815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461334c90919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516136c39190614083565b60405180910390a3505050565b5f6136da30611189565b90505f601a546018546019546136f09190614487565b6136fa9190614487565b90505f8083148061370a57505f82145b156137175750505061399d565b601460095461372691906142fe565b83111561373f57601460095461373c91906142fe565b92505b5f6002836019548661375191906142fe565b61375b919061436c565b613765919061436c565b90505f61377b8286613a6490919063ffffffff16565b90505f47905061378a82613aad565b5f61379e8247613a6490919063ffffffff16565b90505f6137c8876137ba6018548561399f90919063ffffffff16565b613a1690919063ffffffff16565b90505f6137f2886137e4601a548661399f90919063ffffffff16565b613a1690919063ffffffff16565b90505f8183856138029190614d4e565b61380c9190614d4e565b90505f6019819055505f6018819055505f601a8190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161386890614e16565b5f6040518083038185875af1925050503d805f81146138a2576040519150601f19603f3d011682016040523d82523d5f602084013e6138a7565b606091505b5050809850505f871180156138bb57505f81115b15613908576138ca8782613ce0565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826019546040516138ff93929190614e2a565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161394d90614e16565b5f6040518083038185875af1925050503d805f8114613987576040519150601f19603f3d011682016040523d82523d5f602084013e61398c565b606091505b505080985050505050505050505050505b565b5f8083036139af575f9050613a10565b5f82846139bc91906142fe565b90508284826139cb919061436c565b14613a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a0290614ecf565b60405180910390fd5b809150505b92915050565b5f613a5783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613db7565b905092915050565b505050565b5f613aa583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506132ea565b905092915050565b5f600267ffffffffffffffff811115613ac957613ac8614eed565b5b604051908082528060200260200182016040528015613af75781602001602082028036833780820191505090505b50905030815f81518110613b0e57613b0d614f1a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bb1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613bd59190614f5b565b81600181518110613be957613be8614f1a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613c4e307f0000000000000000000000000000000000000000000000000000000000000000846123f6565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613caf959493929190615076565b5f604051808303815f87803b158015613cc6575f80fd5b505af1158015613cd8573d5f803e3d5ffd5b505050505050565b613d0b307f0000000000000000000000000000000000000000000000000000000000000000846123f6565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b8152600401613d6f969594939291906150ce565b60606040518083038185885af1158015613d8b573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190613db09190615141565b5050505050565b5f8083118290613dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613df49190613eea565b60405180910390fd5b505f8385613e0b919061436c565b9050809150509392505050565b5f80fd5b5f819050919050565b613e2e81613e1c565b8114613e38575f80fd5b50565b5f81359050613e4981613e25565b92915050565b5f60208284031215613e6457613e63613e18565b5b5f613e7184828501613e3b565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613ebc82613e7a565b613ec68185613e84565b9350613ed6818560208601613e94565b613edf81613ea2565b840191505092915050565b5f6020820190508181035f830152613f028184613eb2565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613f3382613f0a565b9050919050565b613f4381613f29565b8114613f4d575f80fd5b50565b5f81359050613f5e81613f3a565b92915050565b5f8060408385031215613f7a57613f79613e18565b5b5f613f8785828601613f50565b9250506020613f9885828601613e3b565b9150509250929050565b5f8115159050919050565b613fb681613fa2565b82525050565b5f602082019050613fcf5f830184613fad565b92915050565b5f60208284031215613fea57613fe9613e18565b5b5f613ff784828501613f50565b91505092915050565b5f819050919050565b5f61402361401e61401984613f0a565b614000565b613f0a565b9050919050565b5f61403482614009565b9050919050565b5f6140458261402a565b9050919050565b6140558161403b565b82525050565b5f60208201905061406e5f83018461404c565b92915050565b61407d81613e1c565b82525050565b5f6020820190506140965f830184614074565b92915050565b5f805f606084860312156140b3576140b2613e18565b5b5f6140c086828701613f50565b93505060206140d186828701613f50565b92505060406140e286828701613e3b565b9150509250925092565b5f60ff82169050919050565b614101816140ec565b82525050565b5f60208201905061411a5f8301846140f8565b92915050565b61412981613f29565b82525050565b5f6020820190506141425f830184614120565b92915050565b61415181613fa2565b811461415b575f80fd5b50565b5f8135905061416c81614148565b92915050565b5f806040838503121561418857614187613e18565b5b5f61419585828601613f50565b92505060206141a68582860161415e565b9150509250929050565b5f805f606084860312156141c7576141c6613e18565b5b5f6141d486828701613e3b565b93505060206141e586828701613e3b565b92505060406141f686828701613e3b565b9150509250925092565b5f6020828403121561421557614214613e18565b5b5f6142228482850161415e565b91505092915050565b5f806040838503121561424157614240613e18565b5b5f61424e85828601613f50565b925050602061425f85828601613f50565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61429d602083613e84565b91506142a882614269565b602082019050919050565b5f6020820190508181035f8301526142ca81614291565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61430882613e1c565b915061431383613e1c565b925082820261432181613e1c565b91508282048414831517614338576143376142d1565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61437682613e1c565b915061438183613e1c565b9250826143915761439061433f565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f6143f6602f83613e84565b91506144018261439c565b604082019050919050565b5f6020820190508181035f830152614423816143ea565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061446e57607f821691505b6020821081036144815761448061442a565b5b50919050565b5f61449182613e1c565b915061449c83613e1c565b92508282019050808211156144b4576144b36142d1565b5b92915050565b7f4d757374206b656570206665657320617420393925206f72206c6573730000005f82015250565b5f6144ee601d83613e84565b91506144f9826144ba565b602082019050919050565b5f6020820190508181035f83015261451b816144e2565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f61457c603983613e84565b915061458782614522565b604082019050919050565b5f6020820190508181035f8301526145a981614570565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f61460a602483613e84565b9150614615826145b0565b604082019050919050565b5f6020820190508181035f830152614637816145fe565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614698603583613e84565b91506146a38261463e565b604082019050919050565b5f6020820190508181035f8301526146c58161468c565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614726603483613e84565b9150614731826146cc565b604082019050919050565b5f6020820190508181035f8301526147538161471a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6147b4602683613e84565b91506147bf8261475a565b604082019050919050565b5f6020820190508181035f8301526147e1816147a8565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614842602483613e84565b915061484d826147e8565b604082019050919050565b5f6020820190508181035f83015261486f81614836565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6148d0602283613e84565b91506148db82614876565b604082019050919050565b5f6020820190508181035f8301526148fd816148c4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61495e602583613e84565b915061496982614904565b604082019050919050565b5f6020820190508181035f83015261498b81614952565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6149ec602383613e84565b91506149f782614992565b604082019050919050565b5f6020820190508181035f830152614a19816149e0565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d20745f8201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b5f614a7a603183613e84565b9150614a8582614a20565b604082019050919050565b5f6020820190508181035f830152614aa781614a6e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614ae2601683613e84565b9150614aed82614aae565b602082019050919050565b5f6020820190508181035f830152614b0f81614ad6565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f614b96604983613e84565b9150614ba182614b16565b606082019050919050565b5f6020820190508181035f830152614bc381614b8a565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614c24603583613e84565b9150614c2f82614bca565b604082019050919050565b5f6020820190508181035f830152614c5181614c18565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614c8c601383613e84565b9150614c9782614c58565b602082019050919050565b5f6020820190508181035f830152614cb981614c80565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f614d1a603683613e84565b9150614d2582614cc0565b604082019050919050565b5f6020820190508181035f830152614d4781614d0e565b9050919050565b5f614d5882613e1c565b9150614d6383613e1c565b9250828203905081811115614d7b57614d7a6142d1565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614db5601b83613e84565b9150614dc082614d81565b602082019050919050565b5f6020820190508181035f830152614de281614da9565b9050919050565b5f81905092915050565b50565b5f614e015f83614de9565b9150614e0c82614df3565b5f82019050919050565b5f614e2082614df6565b9150819050919050565b5f606082019050614e3d5f830186614074565b614e4a6020830185614074565b614e576040830184614074565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f614eb9602183613e84565b9150614ec482614e5f565b604082019050919050565b5f6020820190508181035f830152614ee681614ead565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614f5581613f3a565b92915050565b5f60208284031215614f7057614f6f613e18565b5b5f614f7d84828501614f47565b91505092915050565b5f819050919050565b5f614fa9614fa4614f9f84614f86565b614000565b613e1c565b9050919050565b614fb981614f8f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614ff181613f29565b82525050565b5f6150028383614fe8565b60208301905092915050565b5f602082019050919050565b5f61502482614fbf565b61502e8185614fc9565b935061503983614fd9565b805f5b838110156150695781516150508882614ff7565b975061505b8361500e565b92505060018101905061503c565b5085935050505092915050565b5f60a0820190506150895f830188614074565b6150966020830187614fb0565b81810360408301526150a8818661501a565b90506150b76060830185614120565b6150c46080830184614074565b9695505050505050565b5f60c0820190506150e15f830189614120565b6150ee6020830188614074565b6150fb6040830187614fb0565b6151086060830186614fb0565b6151156080830185614120565b61512260a0830184614074565b979650505050505050565b5f8151905061513b81613e25565b92915050565b5f805f6060848603121561515857615157613e18565b5b5f6151658682870161512d565b93505060206151768682870161512d565b92505060406151878682870161512d565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122028752f1d2569c0316ef94db57f748ad8974c9f6ca8ae55820ac6c677fef4052c64736f6c634300081a0033

Deployed Bytecode

0x6080604052600436106102e7575f3560e01c8063924de9b71161018f578063c0246668116100db578063dd62ed3e11610094578063f11a24d31161006e578063f11a24d314610b32578063f2fde38b14610b5c578063f637434214610b84578063f8b45b0514610bae576102ee565b8063dd62ed3e14610aa2578063e2f4560514610ade578063e884f26014610b08576102ee565b8063c024666814610998578063c17b5b8c146109c0578063c876d0b9146109e8578063c8c8ebe414610a12578063d257b34f14610a3c578063d85ba06314610a78576102ee565b8063a0d82dc511610148578063a9059cbb11610122578063a9059cbb146108ce578063aacebbe31461090a578063b62496f514610932578063bbc0c7421461096e576102ee565b8063a0d82dc51461083e578063a457c2d714610868578063a8b9f94d146108a4576102ee565b8063924de9b71461074857806395d89b41146107705780639a7a23d61461079a5780639b18b70e146107c25780639c3b4fdc146107ea5780639fccce3214610814576102ee565b806349bd5a5e1161024e57806370a08231116102075780637571336a116101e15780637571336a146106b85780638095d564146106e05780638a8c523c146107085780638da5cb5b1461071e576102ee565b806370a082311461063c578063715018a614610678578063751039fc1461068e576102ee565b806349bd5a5e1461052e5780634a62bb65146105585780634fbee193146105825780636a486a8e146105be5780636b41ae0c146105e85780636ddd171314610612576102ee565b80631816467f116102a05780631816467f146104105780631a8145bb146104385780631f3fed8f1461046257806323b872dd1461048c578063313ce567146104c857806339509351146104f2576102ee565b80630517d13d146102f257806306fdde031461031a578063095ea7b31461034457806310d5de53146103805780631694505e146103bc57806318160ddd146103e6576102ee565b366102ee57005b5f80fd5b3480156102fd575f80fd5b5061031860048036038101906103139190613e4f565b610bd8565b005b348015610325575f80fd5b5061032e610d01565b60405161033b9190613eea565b60405180910390f35b34801561034f575f80fd5b5061036a60048036038101906103659190613f64565b610d91565b6040516103779190613fbc565b60405180910390f35b34801561038b575f80fd5b506103a660048036038101906103a19190613fd5565b610dae565b6040516103b39190613fbc565b60405180910390f35b3480156103c7575f80fd5b506103d0610dcb565b6040516103dd919061405b565b60405180910390f35b3480156103f1575f80fd5b506103fa610def565b6040516104079190614083565b60405180910390f35b34801561041b575f80fd5b5061043660048036038101906104319190613fd5565b610df8565b005b348015610443575f80fd5b5061044c610f4c565b6040516104599190614083565b60405180910390f35b34801561046d575f80fd5b50610476610f52565b6040516104839190614083565b60405180910390f35b348015610497575f80fd5b506104b260048036038101906104ad919061409c565b610f58565b6040516104bf9190613fbc565b60405180910390f35b3480156104d3575f80fd5b506104dc61102c565b6040516104e99190614107565b60405180910390f35b3480156104fd575f80fd5b5061051860048036038101906105139190613f64565b611034565b6040516105259190613fbc565b60405180910390f35b348015610539575f80fd5b506105426110e2565b60405161054f919061412f565b60405180910390f35b348015610563575f80fd5b5061056c611106565b6040516105799190613fbc565b60405180910390f35b34801561058d575f80fd5b506105a860048036038101906105a39190613fd5565b611118565b6040516105b59190613fbc565b60405180910390f35b3480156105c9575f80fd5b506105d261116a565b6040516105df9190614083565b60405180910390f35b3480156105f3575f80fd5b506105fc611170565b6040516106099190614083565b60405180910390f35b34801561061d575f80fd5b50610626611176565b6040516106339190613fbc565b60405180910390f35b348015610647575f80fd5b50610662600480360381019061065d9190613fd5565b611189565b60405161066f9190614083565b60405180910390f35b348015610683575f80fd5b5061068c6111ce565b005b348015610699575f80fd5b506106a2611321565b6040516106af9190613fbc565b60405180910390f35b3480156106c3575f80fd5b506106de60048036038101906106d99190614172565b6113d8565b005b3480156106eb575f80fd5b50610706600480360381019061070191906141b0565b6114c6565b005b348015610713575f80fd5b5061071c6115df565b005b348015610729575f80fd5b506107326116b4565b60405161073f919061412f565b60405180910390f35b348015610753575f80fd5b5061076e60048036038101906107699190614200565b6116dc565b005b34801561077b575f80fd5b5061078461178f565b6040516107919190613eea565b60405180910390f35b3480156107a5575f80fd5b506107c060048036038101906107bb9190614172565b61181f565b005b3480156107cd575f80fd5b506107e860048036038101906107e39190613e4f565b611951565b005b3480156107f5575f80fd5b506107fe611a7a565b60405161080b9190614083565b60405180910390f35b34801561081f575f80fd5b50610828611a80565b6040516108359190614083565b60405180910390f35b348015610849575f80fd5b50610852611a86565b60405161085f9190614083565b60405180910390f35b348015610873575f80fd5b5061088e60048036038101906108899190613f64565b611a8c565b60405161089b9190613fbc565b60405180910390f35b3480156108af575f80fd5b506108b8611b54565b6040516108c59190614083565b60405180910390f35b3480156108d9575f80fd5b506108f460048036038101906108ef9190613f64565b611b5a565b6040516109019190613fbc565b60405180910390f35b348015610915575f80fd5b50610930600480360381019061092b9190613fd5565b611b77565b005b34801561093d575f80fd5b5061095860048036038101906109539190613fd5565b611ccb565b6040516109659190613fbc565b60405180910390f35b348015610979575f80fd5b50610982611ce8565b60405161098f9190613fbc565b60405180910390f35b3480156109a3575f80fd5b506109be60048036038101906109b99190614172565b611cfb565b005b3480156109cb575f80fd5b506109e660048036038101906109e191906141b0565b611e37565b005b3480156109f3575f80fd5b506109fc611f50565b604051610a099190613fbc565b60405180910390f35b348015610a1d575f80fd5b50610a26611f62565b604051610a339190614083565b60405180910390f35b348015610a47575f80fd5b50610a626004803603810190610a5d9190613e4f565b611f68565b604051610a6f9190613fbc565b60405180910390f35b348015610a83575f80fd5b50610a8c6120d6565b604051610a999190614083565b60405180910390f35b348015610aad575f80fd5b50610ac86004803603810190610ac3919061422b565b6120dc565b604051610ad59190614083565b60405180910390f35b348015610ae9575f80fd5b50610af261215e565b604051610aff9190614083565b60405180910390f35b348015610b13575f80fd5b50610b1c612164565b604051610b299190613fbc565b60405180910390f35b348015610b3d575f80fd5b50610b4661221b565b604051610b539190614083565b60405180910390f35b348015610b67575f80fd5b50610b826004803603810190610b7d9190613fd5565b612221565b005b348015610b8f575f80fd5b50610b986123e3565b604051610ba59190614083565b60405180910390f35b348015610bb9575f80fd5b50610bc26123e9565b604051610bcf9190614083565b60405180910390f35b610be06123ef565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c65906142b3565b60405180910390fd5b670de0b6b3a76400006103e86001610c84610def565b610c8e91906142fe565b610c98919061436c565b610ca2919061436c565b811015610ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdb9061440c565b60405180910390fd5b670de0b6b3a764000081610cf891906142fe565b60088190555050565b606060038054610d1090614457565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3c90614457565b8015610d875780601f10610d5e57610100808354040283529160200191610d87565b820191905f5260205f20905b815481529060010190602001808311610d6a57829003601f168201915b5050505050905090565b5f610da4610d9d6123ef565b84846123f6565b6001905092915050565b601d602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610e006123ef565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e85906142b3565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0db17895a9d092fb3ca24d626f2150dd80c185b0706b36f1040ee239f56cb87160405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b60185481565b5f610f648484846125b9565b61102184610f706123ef565b61101c856040518060600160405280602881526020016151b86028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610fd36123ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546132ea9092919063ffffffff16565b6123f6565b600190509392505050565b5f6012905090565b5f6110d86110406123ef565b846110d38560015f6110506123ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461334c90919063ffffffff16565b6123f6565b6001905092915050565b7f000000000000000000000000709d96bf8edb318397bbff70e46373581c5c2ae981565b600b5f9054906101000a900460ff1681565b5f601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60145481565b60155481565b600b60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6111d66123ef565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b906142b3565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f61132a6123ef565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113af906142b3565b60405180910390fd5b5f600b5f6101000a81548160ff0219169083151502179055506001905090565b6113e06123ef565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461146e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611465906142b3565b60405180910390fd5b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6114ce6123ef565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461155c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611553906142b3565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546115849190614487565b61158e9190614487565b601081905550606360105411156115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d190614504565b60405180910390fd5b505050565b6115e76123ef565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166c906142b3565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601b81905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6116e46123ef565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611772576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611769906142b3565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461179e90614457565b80601f01602080910402602001604051908101604052809291908181526020018280546117ca90614457565b80156118155780601f106117ec57610100808354040283529160200191611815565b820191905f5260205f20905b8154815290600101906020018083116117f857829003601f168201915b5050505050905090565b6118276123ef565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ac906142b3565b60405180910390fd5b7f000000000000000000000000709d96bf8edb318397bbff70e46373581c5c2ae973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193a90614592565b60405180910390fd5b61194d82826133a9565b5050565b6119596123ef565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119de906142b3565b60405180910390fd5b670de0b6b3a76400006103e860016119fd610def565b611a0791906142fe565b611a11919061436c565b611a1b919061436c565b811015611a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5490614620565b60405180910390fd5b670de0b6b3a764000081611a7191906142fe565b600a8190555050565b60135481565b601a5481565b60175481565b5f611b4a611a986123ef565b84611b45856040518060600160405280602581526020016151e06025913960015f611ac16123ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546132ea9092919063ffffffff16565b6123f6565b6001905092915050565b60115481565b5f611b6d611b666123ef565b84846125b9565b6001905092915050565b611b7f6123ef565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c04906142b3565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e602052805f5260405f205f915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611d036123ef565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d88906142b3565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e2b9190613fbc565b60405180910390a25050565b611e3f6123ef565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec4906142b3565b60405180910390fd5b826015819055508160168190555080601781905550601754601654601554611ef59190614487565b611eff9190614487565b60148190555060636014541115611f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4290614504565b60405180910390fd5b505050565b600f5f9054906101000a900460ff1681565b60085481565b5f611f716123ef565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff6906142b3565b60405180910390fd5b620186a0600161200d610def565b61201791906142fe565b612021919061436c565b821015612063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205a906146ae565b60405180910390fd5b6103e86005612070610def565b61207a91906142fe565b612084919061436c565b8211156120c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bd9061473c565b60405180910390fd5b8160098190555060019050919050565b60105481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60095481565b5f61216d6123ef565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f2906142b3565b60405180910390fd5b5f600f5f6101000a81548160ff0219169083151502179055506001905090565b60125481565b6122296123ef565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ae906142b3565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231c906147ca565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600a5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245b90614858565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c9906148e6565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125ac9190614083565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261e90614974565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268c90614a02565b60405180910390fd5b600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156127335750600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b612772576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276990614a90565b60405180910390fd5b5f81036127895761278483835f613447565b6132e5565b600b5f9054906101000a900460ff1615612e31576127a56116b4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561281357506127e36116b4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561284b57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612885575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561289e5750600560149054906101000a900460ff16155b15612e3057600b60019054906101000a900460ff1661299257601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806129525750601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298890614af8565b60405180910390fd5b5b600f5f9054906101000a900460ff1615612b56576129ae6116b4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612a3557507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a8d57507f000000000000000000000000709d96bf8edb318397bbff70e46373581c5c2ae973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612b555743600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541115612b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0990614bac565b60405180910390fd5b43600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612bf35750601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612c9a57600854811115612c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3490614c3a565b60405180910390fd5b600a54612c4983611189565b82612c549190614487565b1115612c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8c90614ca2565b60405180910390fd5b612e2f565b601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d375750601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612d8657600854811115612d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7890614d30565b60405180910390fd5b612e2e565b601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612e2d57600a54612de083611189565b82612deb9190614487565b1115612e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2390614ca2565b60405180910390fd5b5b5b5b5b5b5f612e3b30611189565b90505f6009548210159050808015612e5f5750600b60029054906101000a900460ff165b8015612e785750600560149054906101000a900460ff16155b8015612ecb5750601e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612f1e5750601c5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612f715750601c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612fb4576001600560146101000a81548160ff021916908315150217905550612f996136d0565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff16159050601c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806130635750601c5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561306c575f90505b5f81156132d557601e5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156130ca57505f601454115b15613194576130f760646130e96014548861399f90919063ffffffff16565b613a1690919063ffffffff16565b90506014546016548261310a91906142fe565b613114919061436c565b60195f8282546131249190614487565b925050819055506014546017548261313c91906142fe565b613146919061436c565b601a5f8282546131569190614487565b925050819055506014546015548261316e91906142fe565b613178919061436c565b60185f8282546131889190614487565b925050819055506132b2565b601e5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156131eb57505f601054115b156132b157613218606461320a6010548861399f90919063ffffffff16565b613a1690919063ffffffff16565b90506010546012548261322b91906142fe565b613235919061436c565b60195f8282546132459190614487565b925050819055506010546013548261325d91906142fe565b613267919061436c565b601a5f8282546132779190614487565b925050819055506010546011548261328f91906142fe565b613299919061436c565b60185f8282546132a99190614487565b925050819055505b5b5f8111156132c6576132c5873083613447565b5b80856132d29190614d4e565b94505b6132e0878787613447565b505050505b505050565b5f838311158290613331576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133289190613eea565b60405180910390fd5b505f838561333f9190614d4e565b9050809150509392505050565b5f80828461335a9190614487565b90508381101561339f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339690614dcb565b60405180910390fd5b8091505092915050565b80601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036134b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ac90614974565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161351a90614a02565b60405180910390fd5b61352e838383613a5f565b61359781604051806060016040528060268152602001615192602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546132ea9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613626815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461334c90919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516136c39190614083565b60405180910390a3505050565b5f6136da30611189565b90505f601a546018546019546136f09190614487565b6136fa9190614487565b90505f8083148061370a57505f82145b156137175750505061399d565b601460095461372691906142fe565b83111561373f57601460095461373c91906142fe565b92505b5f6002836019548661375191906142fe565b61375b919061436c565b613765919061436c565b90505f61377b8286613a6490919063ffffffff16565b90505f47905061378a82613aad565b5f61379e8247613a6490919063ffffffff16565b90505f6137c8876137ba6018548561399f90919063ffffffff16565b613a1690919063ffffffff16565b90505f6137f2886137e4601a548661399f90919063ffffffff16565b613a1690919063ffffffff16565b90505f8183856138029190614d4e565b61380c9190614d4e565b90505f6019819055505f6018819055505f601a8190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161386890614e16565b5f6040518083038185875af1925050503d805f81146138a2576040519150601f19603f3d011682016040523d82523d5f602084013e6138a7565b606091505b5050809850505f871180156138bb57505f81115b15613908576138ca8782613ce0565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826019546040516138ff93929190614e2a565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161394d90614e16565b5f6040518083038185875af1925050503d805f8114613987576040519150601f19603f3d011682016040523d82523d5f602084013e61398c565b606091505b505080985050505050505050505050505b565b5f8083036139af575f9050613a10565b5f82846139bc91906142fe565b90508284826139cb919061436c565b14613a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a0290614ecf565b60405180910390fd5b809150505b92915050565b5f613a5783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613db7565b905092915050565b505050565b5f613aa583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506132ea565b905092915050565b5f600267ffffffffffffffff811115613ac957613ac8614eed565b5b604051908082528060200260200182016040528015613af75781602001602082028036833780820191505090505b50905030815f81518110613b0e57613b0d614f1a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bb1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613bd59190614f5b565b81600181518110613be957613be8614f1a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613c4e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846123f6565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613caf959493929190615076565b5f604051808303815f87803b158015613cc6575f80fd5b505af1158015613cd8573d5f803e3d5ffd5b505050505050565b613d0b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846123f6565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b8152600401613d6f969594939291906150ce565b60606040518083038185885af1158015613d8b573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190613db09190615141565b5050505050565b5f8083118290613dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613df49190613eea565b60405180910390fd5b505f8385613e0b919061436c565b9050809150509392505050565b5f80fd5b5f819050919050565b613e2e81613e1c565b8114613e38575f80fd5b50565b5f81359050613e4981613e25565b92915050565b5f60208284031215613e6457613e63613e18565b5b5f613e7184828501613e3b565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613ebc82613e7a565b613ec68185613e84565b9350613ed6818560208601613e94565b613edf81613ea2565b840191505092915050565b5f6020820190508181035f830152613f028184613eb2565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613f3382613f0a565b9050919050565b613f4381613f29565b8114613f4d575f80fd5b50565b5f81359050613f5e81613f3a565b92915050565b5f8060408385031215613f7a57613f79613e18565b5b5f613f8785828601613f50565b9250506020613f9885828601613e3b565b9150509250929050565b5f8115159050919050565b613fb681613fa2565b82525050565b5f602082019050613fcf5f830184613fad565b92915050565b5f60208284031215613fea57613fe9613e18565b5b5f613ff784828501613f50565b91505092915050565b5f819050919050565b5f61402361401e61401984613f0a565b614000565b613f0a565b9050919050565b5f61403482614009565b9050919050565b5f6140458261402a565b9050919050565b6140558161403b565b82525050565b5f60208201905061406e5f83018461404c565b92915050565b61407d81613e1c565b82525050565b5f6020820190506140965f830184614074565b92915050565b5f805f606084860312156140b3576140b2613e18565b5b5f6140c086828701613f50565b93505060206140d186828701613f50565b92505060406140e286828701613e3b565b9150509250925092565b5f60ff82169050919050565b614101816140ec565b82525050565b5f60208201905061411a5f8301846140f8565b92915050565b61412981613f29565b82525050565b5f6020820190506141425f830184614120565b92915050565b61415181613fa2565b811461415b575f80fd5b50565b5f8135905061416c81614148565b92915050565b5f806040838503121561418857614187613e18565b5b5f61419585828601613f50565b92505060206141a68582860161415e565b9150509250929050565b5f805f606084860312156141c7576141c6613e18565b5b5f6141d486828701613e3b565b93505060206141e586828701613e3b565b92505060406141f686828701613e3b565b9150509250925092565b5f6020828403121561421557614214613e18565b5b5f6142228482850161415e565b91505092915050565b5f806040838503121561424157614240613e18565b5b5f61424e85828601613f50565b925050602061425f85828601613f50565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61429d602083613e84565b91506142a882614269565b602082019050919050565b5f6020820190508181035f8301526142ca81614291565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61430882613e1c565b915061431383613e1c565b925082820261432181613e1c565b91508282048414831517614338576143376142d1565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61437682613e1c565b915061438183613e1c565b9250826143915761439061433f565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f6143f6602f83613e84565b91506144018261439c565b604082019050919050565b5f6020820190508181035f830152614423816143ea565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061446e57607f821691505b6020821081036144815761448061442a565b5b50919050565b5f61449182613e1c565b915061449c83613e1c565b92508282019050808211156144b4576144b36142d1565b5b92915050565b7f4d757374206b656570206665657320617420393925206f72206c6573730000005f82015250565b5f6144ee601d83613e84565b91506144f9826144ba565b602082019050919050565b5f6020820190508181035f83015261451b816144e2565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f61457c603983613e84565b915061458782614522565b604082019050919050565b5f6020820190508181035f8301526145a981614570565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f61460a602483613e84565b9150614615826145b0565b604082019050919050565b5f6020820190508181035f830152614637816145fe565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614698603583613e84565b91506146a38261463e565b604082019050919050565b5f6020820190508181035f8301526146c58161468c565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614726603483613e84565b9150614731826146cc565b604082019050919050565b5f6020820190508181035f8301526147538161471a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6147b4602683613e84565b91506147bf8261475a565b604082019050919050565b5f6020820190508181035f8301526147e1816147a8565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614842602483613e84565b915061484d826147e8565b604082019050919050565b5f6020820190508181035f83015261486f81614836565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6148d0602283613e84565b91506148db82614876565b604082019050919050565b5f6020820190508181035f8301526148fd816148c4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61495e602583613e84565b915061496982614904565b604082019050919050565b5f6020820190508181035f83015261498b81614952565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6149ec602383613e84565b91506149f782614992565b604082019050919050565b5f6020820190508181035f830152614a19816149e0565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d20745f8201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b5f614a7a603183613e84565b9150614a8582614a20565b604082019050919050565b5f6020820190508181035f830152614aa781614a6e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614ae2601683613e84565b9150614aed82614aae565b602082019050919050565b5f6020820190508181035f830152614b0f81614ad6565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f614b96604983613e84565b9150614ba182614b16565b606082019050919050565b5f6020820190508181035f830152614bc381614b8a565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614c24603583613e84565b9150614c2f82614bca565b604082019050919050565b5f6020820190508181035f830152614c5181614c18565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614c8c601383613e84565b9150614c9782614c58565b602082019050919050565b5f6020820190508181035f830152614cb981614c80565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f614d1a603683613e84565b9150614d2582614cc0565b604082019050919050565b5f6020820190508181035f830152614d4781614d0e565b9050919050565b5f614d5882613e1c565b9150614d6383613e1c565b9250828203905081811115614d7b57614d7a6142d1565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614db5601b83613e84565b9150614dc082614d81565b602082019050919050565b5f6020820190508181035f830152614de281614da9565b9050919050565b5f81905092915050565b50565b5f614e015f83614de9565b9150614e0c82614df3565b5f82019050919050565b5f614e2082614df6565b9150819050919050565b5f606082019050614e3d5f830186614074565b614e4a6020830185614074565b614e576040830184614074565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f614eb9602183613e84565b9150614ec482614e5f565b604082019050919050565b5f6020820190508181035f830152614ee681614ead565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614f5581613f3a565b92915050565b5f60208284031215614f7057614f6f613e18565b5b5f614f7d84828501614f47565b91505092915050565b5f819050919050565b5f614fa9614fa4614f9f84614f86565b614000565b613e1c565b9050919050565b614fb981614f8f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614ff181613f29565b82525050565b5f6150028383614fe8565b60208301905092915050565b5f602082019050919050565b5f61502482614fbf565b61502e8185614fc9565b935061503983614fd9565b805f5b838110156150695781516150508882614ff7565b975061505b8361500e565b92505060018101905061503c565b5085935050505092915050565b5f60a0820190506150895f830188614074565b6150966020830187614fb0565b81810360408301526150a8818661501a565b90506150b76060830185614120565b6150c46080830184614074565b9695505050505050565b5f60c0820190506150e15f830189614120565b6150ee6020830188614074565b6150fb6040830187614fb0565b6151086060830186614fb0565b6151156080830185614120565b61512260a0830184614074565b979650505050505050565b5f8151905061513b81613e25565b92915050565b5f805f6060848603121561515857615157613e18565b5b5f6151658682870161512d565b93505060206151768682870161512d565b92505060406151878682870161512d565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122028752f1d2569c0316ef94db57f748ad8974c9f6ca8ae55820ac6c677fef4052c64736f6c634300081a0033

Deployed Bytecode Sourcemap

29405:15394:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35165:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7506:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9680:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30935:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29486:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8629:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37583:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30649:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30609;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10332:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8470:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11097:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29544:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29812:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37749:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30466:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30501;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29892:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8801:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22008:148;;;;;;;;;;;;;:::i;:::-;;34379:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35629:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35980:357;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34178:148;;;;;;;;;;;;;:::i;:::-;;21364:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35870:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7726:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36914:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35410:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30432:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30689:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30574:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11819:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30361:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9142:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37366:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31158:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29852:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36723:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36346:366;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30278:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29696:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34770:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30327:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9381:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29738:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34561:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30395:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22312:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30536:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29778:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35165:236;21587:12;:10;:12::i;:::-;21577:22;;:6;;;;;;;;;;;:22;;;21569:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35286:4:::1;35280;35276:1;35260:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35259:31;;;;:::i;:::-;35249:6;:41;;35241:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35386:6;35376;:17;;;;:::i;:::-;35353:20;:40;;;;35165:236:::0;:::o;7506:100::-;7560:13;7593:5;7586:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7506:100;:::o;9680:169::-;9763:4;9780:39;9789:12;:10;:12::i;:::-;9803:7;9812:6;9780:8;:39::i;:::-;9837:4;9830:11;;9680:169;;;;:::o;30935:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29486:51::-;;;:::o;8629:108::-;8690:7;8717:12;;8710:19;;8629:108;:::o;37583:157::-;21587:12;:10;:12::i;:::-;21577:22;;:6;;;;;;;;;;;:22;;;21569:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37690:9:::1;;;;;;;;;;;37662:38;;37679:9;37662:38;;;;;;;;;;;;37723:9;37711;;:21;;;;;;;;;;;;;;;;;;37583:157:::0;:::o;30649:33::-;;;;:::o;30609:::-;;;;:::o;10332:355::-;10472:4;10489:36;10499:6;10507:9;10518:6;10489:9;:36::i;:::-;10536:121;10545:6;10553:12;:10;:12::i;:::-;10567:89;10605:6;10567:89;;;;;;;;;;;;;;;;;:11;:19;10579:6;10567:19;;;;;;;;;;;;;;;:33;10587:12;:10;:12::i;:::-;10567:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10536:8;:121::i;:::-;10675:4;10668:11;;10332:355;;;;;:::o;8470:93::-;8528:5;8553:2;8546:9;;8470:93;:::o;11097:218::-;11185:4;11202:83;11211:12;:10;:12::i;:::-;11225:7;11234:50;11273:10;11234:11;:25;11246:12;:10;:12::i;:::-;11234:25;;;;;;;;;;;;;;;:34;11260:7;11234:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11202:8;:83::i;:::-;11303:4;11296:11;;11097:218;;;;:::o;29544:38::-;;;:::o;29812:33::-;;;;;;;;;;;;;:::o;37749:125::-;37814:4;37838:19;:28;37858:7;37838:28;;;;;;;;;;;;;;;;;;;;;;;;;37831:35;;37749:125;;;:::o;30466:28::-;;;;:::o;30501:::-;;;;:::o;29892:31::-;;;;;;;;;;;;;:::o;8801:127::-;8875:7;8902:9;:18;8912:7;8902:18;;;;;;;;;;;;;;;;8895:25;;8801:127;;;:::o;22008:148::-;21587:12;:10;:12::i;:::-;21577:22;;:6;;;;;;;;;;;:22;;;21569:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22115:1:::1;22078:40;;22099:6;;;;;;;;;;;22078:40;;;;;;;;;;;;22146:1;22129:6;;:19;;;;;;;;;;;;;;;;;;22008:148::o:0;34379:120::-;34431:4;21587:12;:10;:12::i;:::-;21577:22;;:6;;;;;;;;;;;:22;;;21569:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34464:5:::1;34447:14;;:22;;;;;;;;;;;;;;;;;;34487:4;34480:11;;34379:120:::0;:::o;35629:144::-;21587:12;:10;:12::i;:::-;21577:22;;:6;;;;;;;;;;;:22;;;21569:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35761:4:::1;35719:31;:39;35751:6;35719:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35629:144:::0;;:::o;35980:357::-;21587:12;:10;:12::i;:::-;21577:22;;:6;;;;;;;;;;;:22;;;21569:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36108:10:::1;36093:12;:25;;;;36147:13;36129:15;:31;;;;36183:7;36171:9;:19;;;;36249:9;;36231:15;;36216:12;;:30;;;;:::i;:::-;:42;;;;:::i;:::-;36201:12;:57;;;;36293:2;36277:12;;:18;;36269:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35980:357:::0;;;:::o;34178:148::-;21587:12;:10;:12::i;:::-;21577:22;;:6;;;;;;;;;;;:22;;;21569:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34249:4:::1;34233:13;;:20;;;;;;;;;;;;;;;;;;34278:4;34264:11;;:18;;;;;;;;;;;;;;;;;;34306:12;34293:10;:25;;;;34178:148::o:0;21364:79::-;21402:7;21429:6;;;;;;;;;;;21422:13;;21364:79;:::o;35870:101::-;21587:12;:10;:12::i;:::-;21577:22;;:6;;;;;;;;;;;:22;;;21569:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35956:7:::1;35942:11;;:21;;;;;;;;;;;;;;;;;;35870:101:::0;:::o;7726:104::-;7782:13;7815:7;7808:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7726:104;:::o;36914:245::-;21587:12;:10;:12::i;:::-;21577:22;;:6;;;;;;;;;;;:22;;;21569:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37021:13:::1;37013:21;;:4;:21;;::::0;37005:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37110:41;37139:4;37145:5;37110:28;:41::i;:::-;36914:245:::0;;:::o;35410:210::-;21587:12;:10;:12::i;:::-;21577:22;;:6;;;;;;;;;;;:22;;;21569:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35527:4:::1;35521;35517:1;35501:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35500:31;;;;:::i;:::-;35490:6;:41;;35482:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;35605:6;35595;:17;;;;:::i;:::-;35583:9;:29;;;;35410:210:::0;:::o;30432:24::-;;;;:::o;30689:27::-;;;;:::o;30574:25::-;;;;:::o;11819:269::-;11912:4;11929:129;11938:12;:10;:12::i;:::-;11952:7;11961:96;12000:15;11961:96;;;;;;;;;;;;;;;;;:11;:25;11973:12;:10;:12::i;:::-;11961:25;;;;;;;;;;;;;;;:34;11987:7;11961:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11929:8;:129::i;:::-;12076:4;12069:11;;11819:269;;;;:::o;30361:27::-;;;;:::o;9142:175::-;9228:4;9245:42;9255:12;:10;:12::i;:::-;9269:9;9280:6;9245:9;:42::i;:::-;9305:4;9298:11;;9142:175;;;;:::o;37366:208::-;21587:12;:10;:12::i;:::-;21577:22;;:6;;;;;;;;;;;:22;;;21569:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37503:15:::1;;;;;;;;;;;37460:59;;37483:18;37460:59;;;;;;;;;;;;37548:18;37530:15;;:36;;;;;;;;;;;;;;;;;;37366:208:::0;:::o;31158:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;29852:33::-;;;;;;;;;;;;;:::o;36723:182::-;21587:12;:10;:12::i;:::-;21577:22;;:6;;;;;;;;;;;:22;;;21569:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36839:8:::1;36808:19;:28;36828:7;36808:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36879:7;36863:34;;;36888:8;36863:34;;;;;;:::i;:::-;;;;;;;;36723:182:::0;;:::o;36346:366::-;21587:12;:10;:12::i;:::-;21577:22;;:6;;;;;;;;;;;:22;;;21569:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36476:10:::1;36460:13;:26;;;;36516:13;36497:16;:32;;;;36553:7;36540:10;:20;;;;36622:10;;36603:16;;36587:13;;:32;;;;:::i;:::-;:45;;;;:::i;:::-;36571:13;:61;;;;36668:2;36651:13;;:19;;36643:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36346:366:::0;;;:::o;30278:39::-;;;;;;;;;;;;;:::o;29696:35::-;;;;:::o;34770:386::-;34851:4;21587:12;:10;:12::i;:::-;21577:22;;:6;;;;;;;;;;;:22;;;21569:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34908:6:::1;34904:1;34888:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;34875:9;:39;;34867:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;35024:4;35020:1;35004:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34991:9;:37;;34983:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;35117:9;35096:18;:30;;;;35144:4;35137:11;;34770:386:::0;;;:::o;30327:27::-;;;;:::o;9381:151::-;9470:7;9497:11;:18;9509:5;9497:18;;;;;;;;;;;;;;;:27;9516:7;9497:27;;;;;;;;;;;;;;;;9490:34;;9381:151;;;;:::o;29738:33::-;;;;:::o;34561:134::-;34621:4;21587:12;:10;:12::i;:::-;21577:22;;:6;;;;;;;;;;;:22;;;21569:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34660:5:::1;34637:20;;:28;;;;;;;;;;;;;;;;;;34683:4;34676:11;;34561:134:::0;:::o;30395:30::-;;;;:::o;22312:244::-;21587:12;:10;:12::i;:::-;21577:22;;:6;;;;;;;;;;;:22;;;21569:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22421:1:::1;22401:22;;:8;:22;;::::0;22393:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22511:8;22482:38;;22503:6;;;;;;;;;;;22482:38;;;;;;;;;;;;22540:8;22531:6;;:17;;;;;;;;;;;;;;;;;;22312:244:::0;:::o;30536:31::-;;;;:::o;29778:24::-;;;;:::o;197:98::-;250:7;277:10;270:17;;197:98;:::o;15015:381::-;15168:1;15151:19;;:5;:19;;;15143:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15249:1;15230:21;;:7;:21;;;15222:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15334:6;15304:11;:18;15316:5;15304:18;;;;;;;;;;;;;;;:27;15323:7;15304:27;;;;;;;;;;;;;;;:36;;;;15372:7;15356:32;;15365:5;15356:32;;;15381:6;15356:32;;;;;;:::i;:::-;;;;;;;;15015:381;;;:::o;37934:4150::-;38082:1;38066:18;;:4;:18;;;38058:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38159:1;38145:16;;:2;:16;;;38137:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38221:10;:14;38232:2;38221:14;;;;;;;;;;;;;;;;;;;;;;;;;38220:15;:36;;;;;38240:10;:16;38251:4;38240:16;;;;;;;;;;;;;;;;;;;;;;;;;38239:17;38220:36;38212:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;38335:1;38325:6;:11;38322:92;;38353:28;38369:4;38375:2;38379:1;38353:15;:28::i;:::-;38396:7;;38322:92;38430:14;;;;;;;;;;;38427:1812;;;38490:7;:5;:7::i;:::-;38482:15;;:4;:15;;;;:49;;;;;38524:7;:5;:7::i;:::-;38518:13;;:2;:13;;;;38482:49;:86;;;;;38566:1;38552:16;;:2;:16;;;;38482:86;:128;;;;;38603:6;38589:21;;:2;:21;;;;38482:128;:158;;;;;38632:8;;;;;;;;;;;38631:9;38482:158;38460:1768;;;38678:13;;;;;;;;;;;38674:148;;38723:19;:25;38743:4;38723:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38752:19;:23;38772:2;38752:23;;;;;;;;;;;;;;;;;;;;;;;;;38723:52;38715:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38674:148;38981:20;;;;;;;;;;;38977:424;;;39035:7;:5;:7::i;:::-;39029:13;;:2;:13;;;;:47;;;;;39060:15;39046:30;;:2;:30;;;;39029:47;:79;;;;;39094:13;39080:28;;:2;:28;;;;39029:79;39025:357;;;39187:12;39144:28;:39;39173:9;39144:39;;;;;;;;;;;;;;;;:55;;39136:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;39346:12;39304:28;:39;39333:9;39304:39;;;;;;;;;;;;;;;:54;;;;39025:357;38977:424;39454:25;:31;39480:4;39454:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39490:31;:35;39522:2;39490:35;;;;;;;;;;;;;;;;;;;;;;;;;39489:36;39454:71;39450:763;;;39572:20;;39562:6;:30;;39554:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;39711:9;;39694:13;39704:2;39694:9;:13::i;:::-;39685:6;:22;;;;:::i;:::-;:35;;39677:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39450:763;;;39823:25;:29;39849:2;39823:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39857:31;:37;39889:4;39857:37;;;;;;;;;;;;;;;;;;;;;;;;;39856:38;39823:71;39819:394;;;39941:20;;39931:6;:30;;39923:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;39819:394;;;40067:31;:35;40099:2;40067:35;;;;;;;;;;;;;;;;;;;;;;;;;40063:150;;40160:9;;40143:13;40153:2;40143:9;:13::i;:::-;40134:6;:22;;;;:::i;:::-;:35;;40126:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40063:150;39819:394;39450:763;38460:1768;38427:1812;40261:28;40292:24;40310:4;40292:9;:24::i;:::-;40261:55;;40330:12;40369:18;;40345:20;:42;;40330:57;;40419:7;:35;;;;;40443:11;;;;;;;;;;;40419:35;:61;;;;;40472:8;;;;;;;;;;;40471:9;40419:61;:110;;;;;40498:25;:31;40524:4;40498:31;;;;;;;;;;;;;;;;;;;;;;;;;40497:32;40419:110;:153;;;;;40547:19;:25;40567:4;40547:25;;;;;;;;;;;;;;;;;;;;;;;;;40546:26;40419:153;:194;;;;;40590:19;:23;40610:2;40590:23;;;;;;;;;;;;;;;;;;;;;;;;;40589:24;40419:194;40401:328;;;40651:4;40640:8;;:15;;;;;;;;;;;;;;;;;;40673:10;:8;:10::i;:::-;40712:5;40701:8;;:16;;;;;;;;;;;;;;;;;;40401:328;40743:12;40759:8;;;;;;;;;;;40758:9;40743:24;;40869:19;:25;40889:4;40869:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40898:19;:23;40918:2;40898:23;;;;;;;;;;;;;;;;;;;;;;;;;40869:52;40866:99;;;40948:5;40938:15;;40866:99;40978:12;41082:7;41079:951;;;41133:25;:29;41159:2;41133:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;41182:1;41166:13;;:17;41133:50;41129:748;;;41210:34;41240:3;41210:25;41221:13;;41210:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;41203:41;;41311:13;;41292:16;;41285:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;41263:18;;:61;;;;;;;:::i;:::-;;;;;;;;41379:13;;41366:10;;41359:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;41343:12;;:49;;;;;;;:::i;:::-;;;;;;;;41456:13;;41440;;41433:4;:20;;;;:::i;:::-;:36;;;;:::i;:::-;41411:18;;:58;;;;;;;:::i;:::-;;;;;;;;41129:748;;;41530:25;:31;41556:4;41530:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;41580:1;41565:12;;:16;41530:51;41527:350;;;41609:33;41638:3;41609:24;41620:12;;41609:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;41602:40;;41708:12;;41690:15;;41683:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41661:18;;:59;;;;;;;:::i;:::-;;;;;;;;41774:12;;41762:9;;41755:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;41739:12;;:47;;;;;;;:::i;:::-;;;;;;;;41849:12;;41834;;41827:4;:19;;;;:::i;:::-;:34;;;;:::i;:::-;41805:18;;:56;;;;;;;:::i;:::-;;;;;;;;41527:350;41129:748;41904:1;41897:4;:8;41894:93;;;41929:42;41945:4;41959;41966;41929:15;:42::i;:::-;41894:93;42014:4;42004:14;;;;;:::i;:::-;;;41079:951;42043:33;42059:4;42065:2;42069:6;42043:15;:33::i;:::-;38047:4037;;;;37934:4150;;;;:::o;17302:193::-;17388:7;17421:1;17416;:6;;17424:12;17408:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17448:9;17464:1;17460;:5;;;;:::i;:::-;17448:17;;17486:1;17479:8;;;17302:193;;;;;:::o;16396:182::-;16454:7;16474:9;16490:1;16486;:5;;;;:::i;:::-;16474:17;;16515:1;16510;:6;;16502:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16569:1;16562:8;;;16396:182;;;;:::o;37168:189::-;37285:5;37251:25;:31;37277:4;37251:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37343:5;37309:40;;37337:4;37309:40;;;;;;;;;;;;37168:189;;:::o;12579:575::-;12737:1;12719:20;;:6;:20;;;12711:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12821:1;12800:23;;:9;:23;;;12792:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12877:47;12898:6;12906:9;12917:6;12877:20;:47::i;:::-;12958:71;12980:6;12958:71;;;;;;;;;;;;;;;;;:9;:17;12968:6;12958:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12938:9;:17;12948:6;12938:17;;;;;;;;;;;;;;;:91;;;;13063:32;13088:6;13063:9;:20;13073:9;13063:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13040:9;:20;13050:9;13040:20;;;;;;;;;;;;;;;:55;;;;13128:9;13111:35;;13120:6;13111:35;;;13139:6;13111:35;;;;;;:::i;:::-;;;;;;;;12579:575;;;:::o;43228:1568::-;43267:23;43293:24;43311:4;43293:9;:24::i;:::-;43267:50;;43328:25;43398:12;;43377:18;;43356;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;43328:82;;43421:12;43469:1;43450:15;:20;:46;;;;43495:1;43474:17;:22;43450:46;43447:60;;;43499:7;;;;;43447:60;43562:2;43541:18;;:23;;;;:::i;:::-;43523:15;:41;43520:111;;;43617:2;43596:18;;:23;;;;:::i;:::-;43578:41;;43520:111;43693:23;43778:1;43758:17;43737:18;;43719:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;43693:86;;43790:26;43819:36;43839:15;43819;:19;;:36;;;;:::i;:::-;43790:65;;43869:25;43897:21;43869:49;;43932:36;43949:18;43932:16;:36::i;:::-;43983:18;44004:44;44030:17;44004:21;:25;;:44;;;;:::i;:::-;43983:65;;44062:23;44088:57;44127:17;44088:34;44103:18;;44088:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;44062:83;;44156:17;44176:51;44209:17;44176:28;44191:12;;44176:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;44156:71;;44238:23;44295:9;44277:15;44264:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;44238:66;;44342:1;44321:18;:22;;;;44375:1;44354:18;:22;;;;44402:1;44387:12;:16;;;;44438:9;;;;;;;;;;;44430:23;;44461:9;44430:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44417:58;;;;;44510:1;44492:15;:19;:42;;;;;44533:1;44515:15;:19;44492:42;44489:210;;;44550:46;44563:15;44580;44550:12;:46::i;:::-;44616:71;44631:18;44651:15;44668:18;;44616:71;;;;;;;;:::i;:::-;;;;;;;;44489:210;44733:15;;;;;;;;;;;44725:29;;44762:21;44725:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44712:76;;;;;43256:1540;;;;;;;;;;43228:1568;:::o;17755:473::-;17813:7;18063:1;18058;:6;18054:47;;18088:1;18081:8;;;;18054:47;18114:9;18130:1;18126;:5;;;;:::i;:::-;18114:17;;18159:1;18154;18150;:5;;;;:::i;:::-;:10;18142:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18219:1;18212:8;;;17755:473;;;;;:::o;18705:132::-;18763:7;18790:39;18794:1;18797;18790:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18783:46;;18705:132;;;;:::o;16000:125::-;;;;:::o;16862:136::-;16920:7;16947:43;16951:1;16954;16947:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16940:50;;16862:136;;;;:::o;42093:597::-;42222:21;42260:1;42246:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42222:40;;42291:4;42273;42278:1;42273:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42317:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42307:4;42312:1;42307:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;42353:62;42370:4;42385:15;42403:11;42353:8;:62::i;:::-;42455:15;:66;;;42536:11;42562:1;42606:4;42633;42653:15;42455:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42148:542;42093:597;:::o;42699:520::-;42847:62;42864:4;42879:15;42897:11;42847:8;:62::i;:::-;42953:15;:31;;;42992:9;43025:4;43045:11;43071:1;43114;43165:4;43185:15;42953:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;42699:520;;:::o;19334:279::-;19420:7;19452:1;19448;:5;19455:12;19440:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19479:9;19495:1;19491;:5;;;;:::i;:::-;19479:17;;19604:1;19597:8;;;19334:279;;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:99::-;1077:6;1111:5;1105:12;1095:22;;1025:99;;;:::o;1130:169::-;1214:11;1248:6;1243:3;1236:19;1288:4;1283:3;1279:14;1264:29;;1130:169;;;;:::o;1305:139::-;1394:6;1389:3;1384;1378:23;1435:1;1426:6;1421:3;1417:16;1410:27;1305:139;;;:::o;1450:102::-;1491:6;1542:2;1538:7;1533:2;1526:5;1522:14;1518:28;1508:38;;1450:102;;;:::o;1558:377::-;1646:3;1674:39;1707:5;1674:39;:::i;:::-;1729:71;1793:6;1788:3;1729:71;:::i;:::-;1722:78;;1809:65;1867:6;1862:3;1855:4;1848:5;1844:16;1809:65;:::i;:::-;1899:29;1921:6;1899:29;:::i;:::-;1894:3;1890:39;1883:46;;1650:285;1558:377;;;;:::o;1941:313::-;2054:4;2092:2;2081:9;2077:18;2069:26;;2141:9;2135:4;2131:20;2127:1;2116:9;2112:17;2105:47;2169:78;2242:4;2233:6;2169:78;:::i;:::-;2161:86;;1941:313;;;;:::o;2260:126::-;2297:7;2337:42;2330:5;2326:54;2315:65;;2260:126;;;:::o;2392:96::-;2429:7;2458:24;2476:5;2458:24;:::i;:::-;2447:35;;2392:96;;;:::o;2494:122::-;2567:24;2585:5;2567:24;:::i;:::-;2560:5;2557:35;2547:63;;2606:1;2603;2596:12;2547:63;2494:122;:::o;2622:139::-;2668:5;2706:6;2693:20;2684:29;;2722:33;2749:5;2722:33;:::i;:::-;2622:139;;;;:::o;2767:474::-;2835:6;2843;2892:2;2880:9;2871:7;2867:23;2863:32;2860:119;;;2898:79;;:::i;:::-;2860:119;3018:1;3043:53;3088:7;3079:6;3068:9;3064:22;3043:53;:::i;:::-;3033:63;;2989:117;3145:2;3171:53;3216:7;3207:6;3196:9;3192:22;3171:53;:::i;:::-;3161:63;;3116:118;2767:474;;;;;:::o;3247:90::-;3281:7;3324:5;3317:13;3310:21;3299:32;;3247:90;;;:::o;3343:109::-;3424:21;3439:5;3424:21;:::i;:::-;3419:3;3412:34;3343:109;;:::o;3458:210::-;3545:4;3583:2;3572:9;3568:18;3560:26;;3596:65;3658:1;3647:9;3643:17;3634:6;3596:65;:::i;:::-;3458:210;;;;:::o;3674:329::-;3733:6;3782:2;3770:9;3761:7;3757:23;3753:32;3750:119;;;3788:79;;:::i;:::-;3750:119;3908:1;3933:53;3978:7;3969:6;3958:9;3954:22;3933:53;:::i;:::-;3923:63;;3879:117;3674:329;;;;:::o;4009:60::-;4037:3;4058:5;4051:12;;4009:60;;;:::o;4075:142::-;4125:9;4158:53;4176:34;4185:24;4203:5;4185:24;:::i;:::-;4176:34;:::i;:::-;4158:53;:::i;:::-;4145:66;;4075:142;;;:::o;4223:126::-;4273:9;4306:37;4337:5;4306:37;:::i;:::-;4293:50;;4223:126;;;:::o;4355:153::-;4432:9;4465:37;4496:5;4465:37;:::i;:::-;4452:50;;4355:153;;;:::o;4514:185::-;4628:64;4686:5;4628:64;:::i;:::-;4623:3;4616:77;4514:185;;:::o;4705:276::-;4825:4;4863:2;4852:9;4848:18;4840:26;;4876:98;4971:1;4960:9;4956:17;4947:6;4876:98;:::i;:::-;4705:276;;;;:::o;4987:118::-;5074:24;5092:5;5074:24;:::i;:::-;5069:3;5062:37;4987:118;;:::o;5111:222::-;5204:4;5242:2;5231:9;5227:18;5219:26;;5255:71;5323:1;5312:9;5308:17;5299:6;5255:71;:::i;:::-;5111:222;;;;:::o;5339:619::-;5416:6;5424;5432;5481:2;5469:9;5460:7;5456:23;5452:32;5449:119;;;5487:79;;:::i;:::-;5449:119;5607:1;5632:53;5677:7;5668:6;5657:9;5653:22;5632:53;:::i;:::-;5622:63;;5578:117;5734:2;5760:53;5805:7;5796:6;5785:9;5781:22;5760:53;:::i;:::-;5750:63;;5705:118;5862:2;5888:53;5933:7;5924:6;5913:9;5909:22;5888:53;:::i;:::-;5878:63;;5833:118;5339:619;;;;;:::o;5964:86::-;5999:7;6039:4;6032:5;6028:16;6017:27;;5964:86;;;:::o;6056:112::-;6139:22;6155:5;6139:22;:::i;:::-;6134:3;6127:35;6056:112;;:::o;6174:214::-;6263:4;6301:2;6290:9;6286:18;6278:26;;6314:67;6378:1;6367:9;6363:17;6354:6;6314:67;:::i;:::-;6174:214;;;;:::o;6394:118::-;6481:24;6499:5;6481:24;:::i;:::-;6476:3;6469:37;6394:118;;:::o;6518:222::-;6611:4;6649:2;6638:9;6634:18;6626:26;;6662:71;6730:1;6719:9;6715:17;6706:6;6662:71;:::i;:::-;6518:222;;;;:::o;6746:116::-;6816:21;6831:5;6816:21;:::i;:::-;6809:5;6806:32;6796:60;;6852:1;6849;6842:12;6796:60;6746:116;:::o;6868:133::-;6911:5;6949:6;6936:20;6927:29;;6965:30;6989:5;6965:30;:::i;:::-;6868:133;;;;:::o;7007:468::-;7072:6;7080;7129:2;7117:9;7108:7;7104:23;7100:32;7097:119;;;7135:79;;:::i;:::-;7097:119;7255:1;7280:53;7325:7;7316:6;7305:9;7301:22;7280:53;:::i;:::-;7270:63;;7226:117;7382:2;7408:50;7450:7;7441:6;7430:9;7426:22;7408:50;:::i;:::-;7398:60;;7353:115;7007:468;;;;;:::o;7481:619::-;7558:6;7566;7574;7623:2;7611:9;7602:7;7598:23;7594:32;7591:119;;;7629:79;;:::i;:::-;7591:119;7749:1;7774:53;7819:7;7810:6;7799:9;7795:22;7774:53;:::i;:::-;7764:63;;7720:117;7876:2;7902:53;7947:7;7938:6;7927:9;7923:22;7902:53;:::i;:::-;7892:63;;7847:118;8004:2;8030:53;8075:7;8066:6;8055:9;8051:22;8030:53;:::i;:::-;8020:63;;7975:118;7481:619;;;;;:::o;8106:323::-;8162:6;8211:2;8199:9;8190:7;8186:23;8182:32;8179:119;;;8217:79;;:::i;:::-;8179:119;8337:1;8362:50;8404:7;8395:6;8384:9;8380:22;8362:50;:::i;:::-;8352:60;;8308:114;8106:323;;;;:::o;8435:474::-;8503:6;8511;8560:2;8548:9;8539:7;8535:23;8531:32;8528:119;;;8566:79;;:::i;:::-;8528:119;8686:1;8711:53;8756:7;8747:6;8736:9;8732:22;8711:53;:::i;:::-;8701:63;;8657:117;8813:2;8839:53;8884:7;8875:6;8864:9;8860:22;8839:53;:::i;:::-;8829:63;;8784:118;8435:474;;;;;:::o;8915:182::-;9055:34;9051:1;9043:6;9039:14;9032:58;8915:182;:::o;9103:366::-;9245:3;9266:67;9330:2;9325:3;9266:67;:::i;:::-;9259:74;;9342:93;9431:3;9342:93;:::i;:::-;9460:2;9455:3;9451:12;9444:19;;9103:366;;;:::o;9475:419::-;9641:4;9679:2;9668:9;9664:18;9656:26;;9728:9;9722:4;9718:20;9714:1;9703:9;9699:17;9692:47;9756:131;9882:4;9756:131;:::i;:::-;9748:139;;9475:419;;;:::o;9900:180::-;9948:77;9945:1;9938:88;10045:4;10042:1;10035:15;10069:4;10066:1;10059:15;10086:410;10126:7;10149:20;10167:1;10149:20;:::i;:::-;10144:25;;10183:20;10201:1;10183:20;:::i;:::-;10178:25;;10238:1;10235;10231:9;10260:30;10278:11;10260:30;:::i;:::-;10249:41;;10439:1;10430:7;10426:15;10423:1;10420:22;10400:1;10393:9;10373:83;10350:139;;10469:18;;:::i;:::-;10350:139;10134:362;10086:410;;;;:::o;10502:180::-;10550:77;10547:1;10540:88;10647:4;10644:1;10637:15;10671:4;10668:1;10661:15;10688:185;10728:1;10745:20;10763:1;10745:20;:::i;:::-;10740:25;;10779:20;10797:1;10779:20;:::i;:::-;10774:25;;10818:1;10808:35;;10823:18;;:::i;:::-;10808:35;10865:1;10862;10858:9;10853:14;;10688:185;;;;:::o;10879:234::-;11019:34;11015:1;11007:6;11003:14;10996:58;11088:17;11083:2;11075:6;11071:15;11064:42;10879:234;:::o;11119:366::-;11261:3;11282:67;11346:2;11341:3;11282:67;:::i;:::-;11275:74;;11358:93;11447:3;11358:93;:::i;:::-;11476:2;11471:3;11467:12;11460:19;;11119:366;;;:::o;11491:419::-;11657:4;11695:2;11684:9;11680:18;11672:26;;11744:9;11738:4;11734:20;11730:1;11719:9;11715:17;11708:47;11772:131;11898:4;11772:131;:::i;:::-;11764:139;;11491:419;;;:::o;11916:180::-;11964:77;11961:1;11954:88;12061:4;12058:1;12051:15;12085:4;12082:1;12075:15;12102:320;12146:6;12183:1;12177:4;12173:12;12163:22;;12230:1;12224:4;12220:12;12251:18;12241:81;;12307:4;12299:6;12295:17;12285:27;;12241:81;12369:2;12361:6;12358:14;12338:18;12335:38;12332:84;;12388:18;;:::i;:::-;12332:84;12153:269;12102:320;;;:::o;12428:191::-;12468:3;12487:20;12505:1;12487:20;:::i;:::-;12482:25;;12521:20;12539:1;12521:20;:::i;:::-;12516:25;;12564:1;12561;12557:9;12550:16;;12585:3;12582:1;12579:10;12576:36;;;12592:18;;:::i;:::-;12576:36;12428:191;;;;:::o;12625:179::-;12765:31;12761:1;12753:6;12749:14;12742:55;12625:179;:::o;12810:366::-;12952:3;12973:67;13037:2;13032:3;12973:67;:::i;:::-;12966:74;;13049:93;13138:3;13049:93;:::i;:::-;13167:2;13162:3;13158:12;13151:19;;12810:366;;;:::o;13182:419::-;13348:4;13386:2;13375:9;13371:18;13363:26;;13435:9;13429:4;13425:20;13421:1;13410:9;13406:17;13399:47;13463:131;13589:4;13463:131;:::i;:::-;13455:139;;13182:419;;;:::o;13607:244::-;13747:34;13743:1;13735:6;13731:14;13724:58;13816:27;13811:2;13803:6;13799:15;13792:52;13607:244;:::o;13857:366::-;13999:3;14020:67;14084:2;14079:3;14020:67;:::i;:::-;14013:74;;14096:93;14185:3;14096:93;:::i;:::-;14214:2;14209:3;14205:12;14198:19;;13857:366;;;:::o;14229:419::-;14395:4;14433:2;14422:9;14418:18;14410:26;;14482:9;14476:4;14472:20;14468:1;14457:9;14453:17;14446:47;14510:131;14636:4;14510:131;:::i;:::-;14502:139;;14229:419;;;:::o;14654:223::-;14794:34;14790:1;14782:6;14778:14;14771:58;14863:6;14858:2;14850:6;14846:15;14839:31;14654:223;:::o;14883:366::-;15025:3;15046:67;15110:2;15105:3;15046:67;:::i;:::-;15039:74;;15122:93;15211:3;15122:93;:::i;:::-;15240:2;15235:3;15231:12;15224:19;;14883:366;;;:::o;15255:419::-;15421:4;15459:2;15448:9;15444:18;15436:26;;15508:9;15502:4;15498:20;15494:1;15483:9;15479:17;15472:47;15536:131;15662:4;15536:131;:::i;:::-;15528:139;;15255:419;;;:::o;15680:240::-;15820:34;15816:1;15808:6;15804:14;15797:58;15889:23;15884:2;15876:6;15872:15;15865:48;15680:240;:::o;15926:366::-;16068:3;16089:67;16153:2;16148:3;16089:67;:::i;:::-;16082:74;;16165:93;16254:3;16165:93;:::i;:::-;16283:2;16278:3;16274:12;16267:19;;15926:366;;;:::o;16298:419::-;16464:4;16502:2;16491:9;16487:18;16479:26;;16551:9;16545:4;16541:20;16537:1;16526:9;16522:17;16515:47;16579:131;16705:4;16579:131;:::i;:::-;16571:139;;16298:419;;;:::o;16723:239::-;16863:34;16859:1;16851:6;16847:14;16840:58;16932:22;16927:2;16919:6;16915:15;16908:47;16723:239;:::o;16968:366::-;17110:3;17131:67;17195:2;17190:3;17131:67;:::i;:::-;17124:74;;17207:93;17296:3;17207:93;:::i;:::-;17325:2;17320:3;17316:12;17309:19;;16968:366;;;:::o;17340:419::-;17506:4;17544:2;17533:9;17529:18;17521:26;;17593:9;17587:4;17583:20;17579:1;17568:9;17564:17;17557:47;17621:131;17747:4;17621:131;:::i;:::-;17613:139;;17340:419;;;:::o;17765:225::-;17905:34;17901:1;17893:6;17889:14;17882:58;17974:8;17969:2;17961:6;17957:15;17950:33;17765:225;:::o;17996:366::-;18138:3;18159:67;18223:2;18218:3;18159:67;:::i;:::-;18152:74;;18235:93;18324:3;18235:93;:::i;:::-;18353:2;18348:3;18344:12;18337:19;;17996:366;;;:::o;18368:419::-;18534:4;18572:2;18561:9;18557:18;18549:26;;18621:9;18615:4;18611:20;18607:1;18596:9;18592:17;18585:47;18649:131;18775:4;18649:131;:::i;:::-;18641:139;;18368:419;;;:::o;18793:223::-;18933:34;18929:1;18921:6;18917:14;18910:58;19002:6;18997:2;18989:6;18985:15;18978:31;18793:223;:::o;19022:366::-;19164:3;19185:67;19249:2;19244:3;19185:67;:::i;:::-;19178:74;;19261:93;19350:3;19261:93;:::i;:::-;19379:2;19374:3;19370:12;19363:19;;19022:366;;;:::o;19394:419::-;19560:4;19598:2;19587:9;19583:18;19575:26;;19647:9;19641:4;19637:20;19633:1;19622:9;19618:17;19611:47;19675:131;19801:4;19675:131;:::i;:::-;19667:139;;19394:419;;;:::o;19819:221::-;19959:34;19955:1;19947:6;19943:14;19936:58;20028:4;20023:2;20015:6;20011:15;20004:29;19819:221;:::o;20046:366::-;20188:3;20209:67;20273:2;20268:3;20209:67;:::i;:::-;20202:74;;20285:93;20374:3;20285:93;:::i;:::-;20403:2;20398:3;20394:12;20387:19;;20046:366;;;:::o;20418:419::-;20584:4;20622:2;20611:9;20607:18;20599:26;;20671:9;20665:4;20661:20;20657:1;20646:9;20642:17;20635:47;20699:131;20825:4;20699:131;:::i;:::-;20691:139;;20418:419;;;:::o;20843:224::-;20983:34;20979:1;20971:6;20967:14;20960:58;21052:7;21047:2;21039:6;21035:15;21028:32;20843:224;:::o;21073:366::-;21215:3;21236:67;21300:2;21295:3;21236:67;:::i;:::-;21229:74;;21312:93;21401:3;21312:93;:::i;:::-;21430:2;21425:3;21421:12;21414:19;;21073:366;;;:::o;21445:419::-;21611:4;21649:2;21638:9;21634:18;21626:26;;21698:9;21692:4;21688:20;21684:1;21673:9;21669:17;21662:47;21726:131;21852:4;21726:131;:::i;:::-;21718:139;;21445:419;;;:::o;21870:222::-;22010:34;22006:1;21998:6;21994:14;21987:58;22079:5;22074:2;22066:6;22062:15;22055:30;21870:222;:::o;22098:366::-;22240:3;22261:67;22325:2;22320:3;22261:67;:::i;:::-;22254:74;;22337:93;22426:3;22337:93;:::i;:::-;22455:2;22450:3;22446:12;22439:19;;22098:366;;;:::o;22470:419::-;22636:4;22674:2;22663:9;22659:18;22651:26;;22723:9;22717:4;22713:20;22709:1;22698:9;22694:17;22687:47;22751:131;22877:4;22751:131;:::i;:::-;22743:139;;22470:419;;;:::o;22895:236::-;23035:34;23031:1;23023:6;23019:14;23012:58;23104:19;23099:2;23091:6;23087:15;23080:44;22895:236;:::o;23137:366::-;23279:3;23300:67;23364:2;23359:3;23300:67;:::i;:::-;23293:74;;23376:93;23465:3;23376:93;:::i;:::-;23494:2;23489:3;23485:12;23478:19;;23137:366;;;:::o;23509:419::-;23675:4;23713:2;23702:9;23698:18;23690:26;;23762:9;23756:4;23752:20;23748:1;23737:9;23733:17;23726:47;23790:131;23916:4;23790:131;:::i;:::-;23782:139;;23509:419;;;:::o;23934:172::-;24074:24;24070:1;24062:6;24058:14;24051:48;23934:172;:::o;24112:366::-;24254:3;24275:67;24339:2;24334:3;24275:67;:::i;:::-;24268:74;;24351:93;24440:3;24351:93;:::i;:::-;24469:2;24464:3;24460:12;24453:19;;24112:366;;;:::o;24484:419::-;24650:4;24688:2;24677:9;24673:18;24665:26;;24737:9;24731:4;24727:20;24723:1;24712:9;24708:17;24701:47;24765:131;24891:4;24765:131;:::i;:::-;24757:139;;24484:419;;;:::o;24909:297::-;25049:34;25045:1;25037:6;25033:14;25026:58;25118:34;25113:2;25105:6;25101:15;25094:59;25187:11;25182:2;25174:6;25170:15;25163:36;24909:297;:::o;25212:366::-;25354:3;25375:67;25439:2;25434:3;25375:67;:::i;:::-;25368:74;;25451:93;25540:3;25451:93;:::i;:::-;25569:2;25564:3;25560:12;25553:19;;25212:366;;;:::o;25584:419::-;25750:4;25788:2;25777:9;25773:18;25765:26;;25837:9;25831:4;25827:20;25823:1;25812:9;25808:17;25801:47;25865:131;25991:4;25865:131;:::i;:::-;25857:139;;25584:419;;;:::o;26009:240::-;26149:34;26145:1;26137:6;26133:14;26126:58;26218:23;26213:2;26205:6;26201:15;26194:48;26009:240;:::o;26255:366::-;26397:3;26418:67;26482:2;26477:3;26418:67;:::i;:::-;26411:74;;26494:93;26583:3;26494:93;:::i;:::-;26612:2;26607:3;26603:12;26596:19;;26255:366;;;:::o;26627:419::-;26793:4;26831:2;26820:9;26816:18;26808:26;;26880:9;26874:4;26870:20;26866:1;26855:9;26851:17;26844:47;26908:131;27034:4;26908:131;:::i;:::-;26900:139;;26627:419;;;:::o;27052:169::-;27192:21;27188:1;27180:6;27176:14;27169:45;27052:169;:::o;27227:366::-;27369:3;27390:67;27454:2;27449:3;27390:67;:::i;:::-;27383:74;;27466:93;27555:3;27466:93;:::i;:::-;27584:2;27579:3;27575:12;27568:19;;27227:366;;;:::o;27599:419::-;27765:4;27803:2;27792:9;27788:18;27780:26;;27852:9;27846:4;27842:20;27838:1;27827:9;27823:17;27816:47;27880:131;28006:4;27880:131;:::i;:::-;27872:139;;27599:419;;;:::o;28024:241::-;28164:34;28160:1;28152:6;28148:14;28141:58;28233:24;28228:2;28220:6;28216:15;28209:49;28024:241;:::o;28271:366::-;28413:3;28434:67;28498:2;28493:3;28434:67;:::i;:::-;28427:74;;28510:93;28599:3;28510:93;:::i;:::-;28628:2;28623:3;28619:12;28612:19;;28271:366;;;:::o;28643:419::-;28809:4;28847:2;28836:9;28832:18;28824:26;;28896:9;28890:4;28886:20;28882:1;28871:9;28867:17;28860:47;28924:131;29050:4;28924:131;:::i;:::-;28916:139;;28643:419;;;:::o;29068:194::-;29108:4;29128:20;29146:1;29128:20;:::i;:::-;29123:25;;29162:20;29180:1;29162:20;:::i;:::-;29157:25;;29206:1;29203;29199:9;29191:17;;29230:1;29224:4;29221:11;29218:37;;;29235:18;;:::i;:::-;29218:37;29068:194;;;;:::o;29268:177::-;29408:29;29404:1;29396:6;29392:14;29385:53;29268:177;:::o;29451:366::-;29593:3;29614:67;29678:2;29673:3;29614:67;:::i;:::-;29607:74;;29690:93;29779:3;29690:93;:::i;:::-;29808:2;29803:3;29799:12;29792:19;;29451:366;;;:::o;29823:419::-;29989:4;30027:2;30016:9;30012:18;30004:26;;30076:9;30070:4;30066:20;30062:1;30051:9;30047:17;30040:47;30104:131;30230:4;30104:131;:::i;:::-;30096:139;;29823:419;;;:::o;30248:147::-;30349:11;30386:3;30371:18;;30248:147;;;;:::o;30401:114::-;;:::o;30521:398::-;30680:3;30701:83;30782:1;30777:3;30701:83;:::i;:::-;30694:90;;30793:93;30882:3;30793:93;:::i;:::-;30911:1;30906:3;30902:11;30895:18;;30521:398;;;:::o;30925:379::-;31109:3;31131:147;31274:3;31131:147;:::i;:::-;31124:154;;31295:3;31288:10;;30925:379;;;:::o;31310:442::-;31459:4;31497:2;31486:9;31482:18;31474:26;;31510:71;31578:1;31567:9;31563:17;31554:6;31510:71;:::i;:::-;31591:72;31659:2;31648:9;31644:18;31635:6;31591:72;:::i;:::-;31673;31741:2;31730:9;31726:18;31717:6;31673:72;:::i;:::-;31310:442;;;;;;:::o;31758:220::-;31898:34;31894:1;31886:6;31882:14;31875:58;31967:3;31962:2;31954:6;31950:15;31943:28;31758:220;:::o;31984:366::-;32126:3;32147:67;32211:2;32206:3;32147:67;:::i;:::-;32140:74;;32223:93;32312:3;32223:93;:::i;:::-;32341:2;32336:3;32332:12;32325:19;;31984:366;;;:::o;32356:419::-;32522:4;32560:2;32549:9;32545:18;32537:26;;32609:9;32603:4;32599:20;32595:1;32584:9;32580:17;32573:47;32637:131;32763:4;32637:131;:::i;:::-;32629:139;;32356:419;;;:::o;32781:180::-;32829:77;32826:1;32819:88;32926:4;32923:1;32916:15;32950:4;32947:1;32940:15;32967:180;33015:77;33012:1;33005:88;33112:4;33109:1;33102:15;33136:4;33133:1;33126:15;33153:143;33210:5;33241:6;33235:13;33226:22;;33257:33;33284:5;33257:33;:::i;:::-;33153:143;;;;:::o;33302:351::-;33372:6;33421:2;33409:9;33400:7;33396:23;33392:32;33389:119;;;33427:79;;:::i;:::-;33389:119;33547:1;33572:64;33628:7;33619:6;33608:9;33604:22;33572:64;:::i;:::-;33562:74;;33518:128;33302:351;;;;:::o;33659:85::-;33704:7;33733:5;33722:16;;33659:85;;;:::o;33750:158::-;33808:9;33841:61;33859:42;33868:32;33894:5;33868:32;:::i;:::-;33859:42;:::i;:::-;33841:61;:::i;:::-;33828:74;;33750:158;;;:::o;33914:147::-;34009:45;34048:5;34009:45;:::i;:::-;34004:3;33997:58;33914:147;;:::o;34067:114::-;34134:6;34168:5;34162:12;34152:22;;34067:114;;;:::o;34187:184::-;34286:11;34320:6;34315:3;34308:19;34360:4;34355:3;34351:14;34336:29;;34187:184;;;;:::o;34377:132::-;34444:4;34467:3;34459:11;;34497:4;34492:3;34488:14;34480:22;;34377:132;;;:::o;34515:108::-;34592:24;34610:5;34592:24;:::i;:::-;34587:3;34580:37;34515:108;;:::o;34629:179::-;34698:10;34719:46;34761:3;34753:6;34719:46;:::i;:::-;34797:4;34792:3;34788:14;34774:28;;34629:179;;;;:::o;34814:113::-;34884:4;34916;34911:3;34907:14;34899:22;;34814:113;;;:::o;34963:732::-;35082:3;35111:54;35159:5;35111:54;:::i;:::-;35181:86;35260:6;35255:3;35181:86;:::i;:::-;35174:93;;35291:56;35341:5;35291:56;:::i;:::-;35370:7;35401:1;35386:284;35411:6;35408:1;35405:13;35386:284;;;35487:6;35481:13;35514:63;35573:3;35558:13;35514:63;:::i;:::-;35507:70;;35600:60;35653:6;35600:60;:::i;:::-;35590:70;;35446:224;35433:1;35430;35426:9;35421:14;;35386:284;;;35390:14;35686:3;35679:10;;35087:608;;;34963:732;;;;:::o;35701:831::-;35964:4;36002:3;35991:9;35987:19;35979:27;;36016:71;36084:1;36073:9;36069:17;36060:6;36016:71;:::i;:::-;36097:80;36173:2;36162:9;36158:18;36149:6;36097:80;:::i;:::-;36224:9;36218:4;36214:20;36209:2;36198:9;36194:18;36187:48;36252:108;36355:4;36346:6;36252:108;:::i;:::-;36244:116;;36370:72;36438:2;36427:9;36423:18;36414:6;36370:72;:::i;:::-;36452:73;36520:3;36509:9;36505:19;36496:6;36452:73;:::i;:::-;35701:831;;;;;;;;:::o;36538:807::-;36787:4;36825:3;36814:9;36810:19;36802:27;;36839:71;36907:1;36896:9;36892:17;36883:6;36839:71;:::i;:::-;36920:72;36988:2;36977:9;36973:18;36964:6;36920:72;:::i;:::-;37002:80;37078:2;37067:9;37063:18;37054:6;37002:80;:::i;:::-;37092;37168:2;37157:9;37153:18;37144:6;37092:80;:::i;:::-;37182:73;37250:3;37239:9;37235:19;37226:6;37182:73;:::i;:::-;37265;37333:3;37322:9;37318:19;37309:6;37265:73;:::i;:::-;36538:807;;;;;;;;;:::o;37351:143::-;37408:5;37439:6;37433:13;37424:22;;37455:33;37482:5;37455:33;:::i;:::-;37351:143;;;;:::o;37500:663::-;37588:6;37596;37604;37653:2;37641:9;37632:7;37628:23;37624:32;37621:119;;;37659:79;;:::i;:::-;37621:119;37779:1;37804:64;37860:7;37851:6;37840:9;37836:22;37804:64;:::i;:::-;37794:74;;37750:128;37917:2;37943:64;37999:7;37990:6;37979:9;37975:22;37943:64;:::i;:::-;37933:74;;37888:129;38056:2;38082:64;38138:7;38129:6;38118:9;38114:22;38082:64;:::i;:::-;38072:74;;38027:129;37500:663;;;;;:::o

Swarm Source

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