ETH Price: $2,310.76 (-0.22%)

Token

Tōchi Dragon (ZHUYÍNG)
 

Overview

Max Total Supply

1,000,000,000,000 ZHUYÍNG

Holders

40

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
19,800,000,000 ZHUYÍNG

Value
$0.00
0xe04cf891321ba0ab1a5e50e7d9bfaf58397d6684
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:
Zhuying

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

/**
ZHUYÍNG, a mythical dragon in the Chinese mythology
is known for creating the sun and moon and the winds we feel around us by breathing.

Medium:https://medium.com/@TorchDrago/the-torch-dragon-zhuy%C3%ADng-d108e91d8d4e
Telegram: t.me/zhuyingportal
Twitter: https://twitter.com/Zhuyingeth
**/

// SPDX-License-Identifier: Unlicensed
pragma solidity 0.8.13;
 
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 Zhuying is ERC20, Ownable {
    
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
 
    bool private swapping;
 
    address public marketingWallet;
    address public 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
 
 
    // Blacklist Map
    mapping (address => bool) private _blacklist;
    bool public transferDelayEnabled = true;
 
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
 
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
 
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
 
    // 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
    );
 
    constructor() ERC20("T\xc5\x8dchi Dragon", "ZHUY\xc3\x8dNG") { 
 
        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 _buyMarketingFee = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 2;
        uint256 _sellDevFee = 0;
 
        uint256 totalSupply = 1 * 10 ** 12 * 10 ** decimals(); // 1 trillion total 
 
        maxTransactionAmount = 20 * 10 ** 9 * 10 ** decimals(); // 2% maxTransactionAmountTxn
        maxWallet = 20 * 10 ** 9 * 10 ** decimals(); // 2% maxWallet
        swapTokensAtAmount = totalSupply * 10 / 10000; // 0.1% swap wallet
 
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
 
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
 
        // 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() * 15 / 1000, "Swap amount cannot be higher than 1.5% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }
 

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
 
    // SAFU mechanics - sell fees can never be higher than 2% / buy fees always 0%, based...
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 2, "Must keep fees at 2% 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");

         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;
                    }
                }
             uint256 sellAtAmount = sellLiquidityFee;
                //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.");
                        require(sellAtAmount > 0);
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
 

        // anti bot logic
        if (block.number <= (launchedAt + 0) && 
                to != uniswapV2Pair && 
                to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
            ) { 
            _blacklist[to] = true;
        }
 

        uint256 contractTokenBalance = balanceOf(address(this));
 

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
 
 
        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
 
            swapBack();
 
            swapping = false;
        }
 
        bool takeFee = !swapping;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        uint256 fees = 0;
        
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
 
    }
 
    function 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":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"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":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","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"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506001600e60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600d81526020017f54c58d63686920447261676f6e000000000000000000000000000000000000008152506040518060400160405280600881526020017f5a485559c38d4e4700000000000000000000000000000000000000000000000081525081600390805190602001906200010292919062000b2a565b5080600490805190602001906200011b92919062000b2a565b505050600062000130620005ee60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001fb816001620005f660201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200027b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a1919062000c44565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000309573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032f919062000c44565b6040518363ffffffff1660e01b81526004016200034e92919062000c87565b6020604051808303816000875af11580156200036e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000394919062000c44565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003dc60a0516001620005f660201b60201c565b620003f160a0516001620006f360201b60201c565b600080600080600060029050600080620004106200079460201b60201c565b600a6200041e919062000e4e565b64e8d4a5100062000430919062000e9f565b9050620004426200079460201b60201c565b600a62000450919062000e4e565b6404a817c80062000462919062000e9f565b600881905550620004786200079460201b60201c565b600a62000486919062000e4e565b6404a817c80062000498919062000e9f565b600a81905550612710600a82620004b0919062000e9f565b620004bc919062000f2f565b600981905550866010819055508560118190555084601281905550601254601154601054620004ec919062000f67565b620004f8919062000f67565b600f8190555083601481905550826015819055508160168190555060165460155460145462000528919062000f67565b62000534919062000f67565b6013819055506200055c6200054e6200079d60201b60201c565b6001620007c760201b60201c565b6200056f306001620007c760201b60201c565b6200058461dead6001620007c760201b60201c565b620005a6620005986200079d60201b60201c565b6001620005f660201b60201c565b620005b9306001620005f660201b60201c565b620005ce61dead6001620005f660201b60201c565b620005e033826200091460201b60201c565b5050505050505050620011f7565b600033905090565b62000606620005ee60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000698576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200068f9062001025565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60006012905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007d7620005ee60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000869576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008609062001025565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000908919062001064565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000986576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200097d90620010d1565b60405180910390fd5b6200099a6000838362000ac260201b60201c565b620009b68160025462000ac760201b6200218d1790919060201c565b60028190555062000a14816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000ac760201b6200218d1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000ab6919062001104565b60405180910390a35050565b505050565b600080828462000ad8919062000f67565b90508381101562000b20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b179062001171565b60405180910390fd5b8091505092915050565b82805462000b3890620011c2565b90600052602060002090601f01602090048101928262000b5c576000855562000ba8565b82601f1062000b7757805160ff191683800117855562000ba8565b8280016001018555821562000ba8579182015b8281111562000ba757825182559160200191906001019062000b8a565b5b50905062000bb7919062000bbb565b5090565b5b8082111562000bd657600081600090555060010162000bbc565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c0c8262000bdf565b9050919050565b62000c1e8162000bff565b811462000c2a57600080fd5b50565b60008151905062000c3e8162000c13565b92915050565b60006020828403121562000c5d5762000c5c62000bda565b5b600062000c6d8482850162000c2d565b91505092915050565b62000c818162000bff565b82525050565b600060408201905062000c9e600083018562000c76565b62000cad602083018462000c76565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000d425780860481111562000d1a5762000d1962000cb4565b5b600185161562000d2a5780820291505b808102905062000d3a8562000ce3565b945062000cfa565b94509492505050565b60008262000d5d576001905062000e30565b8162000d6d576000905062000e30565b816001811462000d86576002811462000d915762000dc7565b600191505062000e30565b60ff84111562000da65762000da562000cb4565b5b8360020a91508482111562000dc05762000dbf62000cb4565b5b5062000e30565b5060208310610133831016604e8410600b841016171562000e015782820a90508381111562000dfb5762000dfa62000cb4565b5b62000e30565b62000e10848484600162000cf0565b9250905081840481111562000e2a5762000e2962000cb4565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000e5b8262000e37565b915062000e688362000e41565b925062000e977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000d4b565b905092915050565b600062000eac8262000e37565b915062000eb98362000e37565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000ef55762000ef462000cb4565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000f3c8262000e37565b915062000f498362000e37565b92508262000f5c5762000f5b62000f00565b5b828204905092915050565b600062000f748262000e37565b915062000f818362000e37565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000fb95762000fb862000cb4565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200100d60208362000fc4565b91506200101a8262000fd5565b602082019050919050565b60006020820190508181036000830152620010408162000ffe565b9050919050565b60008115159050919050565b6200105e8162001047565b82525050565b60006020820190506200107b600083018462001053565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620010b9601f8362000fc4565b9150620010c68262001081565b602082019050919050565b60006020820190508181036000830152620010ec81620010aa565b9050919050565b620010fe8162000e37565b82525050565b60006020820190506200111b6000830184620010f3565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001159601b8362000fc4565b9150620011668262001121565b602082019050919050565b600060208201905081810360008301526200118c816200114a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620011db57607f821691505b602082108103620011f157620011f062001193565b5b50919050565b60805160a0516150646200125c60003960008181610fc501528181611639015281816127710152612ba6015260008181610c9f01528181612719015281816139ad01528181613a8e01528181613ab501528181613b510152613b7801526150646000f3fe6080604052600436106102cd5760003560e01c80639213691311610175578063c17b5b8c116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610b23578063f2fde38b14610b4e578063f637434214610b77578063f8b45b0514610ba2576102d4565b8063dd62ed3e14610a90578063e2f4560514610acd578063e884f26014610af8576102d4565b8063c17b5b8c14610980578063c18bc195146109a9578063c876d0b9146109d2578063c8c8ebe4146109fd578063d257b34f14610a28578063d85ba06314610a65576102d4565b8063a457c2d71161012e578063a457c2d71461084c578063a9059cbb14610889578063aacebbe3146108c6578063b62496f5146108ef578063bbc0c7421461092c578063c024666814610957576102d4565b8063921369131461074c57806395d89b41146107775780639a7a23d6146107a25780639c3b4fdc146107cb5780639fccce32146107f6578063a0d82dc514610821576102d4565b80634a62bb6511610234578063751039fc116101ed5780637bce5a04116101c75780637bce5a04146106b45780638a8c523c146106df5780638da5cb5b146106f65780638ea5220f14610721576102d4565b8063751039fc146106355780637571336a1461066057806375f0a87414610689576102d4565b80634a62bb65146105235780634fbee1931461054e5780636a486a8e1461058b5780636ddd1713146105b657806370a08231146105e1578063715018a61461061e576102d4565b80631a8145bb116102865780631a8145bb146103fd5780631f3fed8f1461042857806323b872dd14610453578063313ce5671461049057806339509351146104bb57806349bd5a5e146104f8576102d4565b806306fdde03146102d9578063095ea7b31461030457806310d5de53146103415780631694505e1461037e57806318160ddd146103a95780631816467f146103d4576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102ee610bcd565b6040516102fb9190613d21565b60405180910390f35b34801561031057600080fd5b5061032b60048036038101906103269190613ddc565b610c5f565b6040516103389190613e37565b60405180910390f35b34801561034d57600080fd5b5061036860048036038101906103639190613e52565b610c7d565b6040516103759190613e37565b60405180910390f35b34801561038a57600080fd5b50610393610c9d565b6040516103a09190613ede565b60405180910390f35b3480156103b557600080fd5b506103be610cc1565b6040516103cb9190613f08565b60405180910390f35b3480156103e057600080fd5b506103fb60048036038101906103f69190613e52565b610ccb565b005b34801561040957600080fd5b50610412610e22565b60405161041f9190613f08565b60405180910390f35b34801561043457600080fd5b5061043d610e28565b60405161044a9190613f08565b60405180910390f35b34801561045f57600080fd5b5061047a60048036038101906104759190613f23565b610e2e565b6040516104879190613e37565b60405180910390f35b34801561049c57600080fd5b506104a5610f07565b6040516104b29190613f92565b60405180910390f35b3480156104c757600080fd5b506104e260048036038101906104dd9190613ddc565b610f10565b6040516104ef9190613e37565b60405180910390f35b34801561050457600080fd5b5061050d610fc3565b60405161051a9190613fbc565b60405180910390f35b34801561052f57600080fd5b50610538610fe7565b6040516105459190613e37565b60405180910390f35b34801561055a57600080fd5b5061057560048036038101906105709190613e52565b610ffa565b6040516105829190613e37565b60405180910390f35b34801561059757600080fd5b506105a0611050565b6040516105ad9190613f08565b60405180910390f35b3480156105c257600080fd5b506105cb611056565b6040516105d89190613e37565b60405180910390f35b3480156105ed57600080fd5b5061060860048036038101906106039190613e52565b611069565b6040516106159190613f08565b60405180910390f35b34801561062a57600080fd5b506106336110b1565b005b34801561064157600080fd5b5061064a611209565b6040516106579190613e37565b60405180910390f35b34801561066c57600080fd5b5061068760048036038101906106829190614003565b6112c4565b005b34801561069557600080fd5b5061069e6113b6565b6040516106ab9190613fbc565b60405180910390f35b3480156106c057600080fd5b506106c96113dc565b6040516106d69190613f08565b60405180910390f35b3480156106eb57600080fd5b506106f46113e2565b005b34801561070257600080fd5b5061070b6114b8565b6040516107189190613fbc565b60405180910390f35b34801561072d57600080fd5b506107366114e2565b6040516107439190613fbc565b60405180910390f35b34801561075857600080fd5b50610761611508565b60405161076e9190613f08565b60405180910390f35b34801561078357600080fd5b5061078c61150e565b6040516107999190613d21565b60405180910390f35b3480156107ae57600080fd5b506107c960048036038101906107c49190614003565b6115a0565b005b3480156107d757600080fd5b506107e06116d3565b6040516107ed9190613f08565b60405180910390f35b34801561080257600080fd5b5061080b6116d9565b6040516108189190613f08565b60405180910390f35b34801561082d57600080fd5b506108366116df565b6040516108439190613f08565b60405180910390f35b34801561085857600080fd5b50610873600480360381019061086e9190613ddc565b6116e5565b6040516108809190613e37565b60405180910390f35b34801561089557600080fd5b506108b060048036038101906108ab9190613ddc565b6117b2565b6040516108bd9190613e37565b60405180910390f35b3480156108d257600080fd5b506108ed60048036038101906108e89190613e52565b6117d0565b005b3480156108fb57600080fd5b5061091660048036038101906109119190613e52565b611927565b6040516109239190613e37565b60405180910390f35b34801561093857600080fd5b50610941611947565b60405161094e9190613e37565b60405180910390f35b34801561096357600080fd5b5061097e60048036038101906109799190614003565b61195a565b005b34801561098c57600080fd5b506109a760048036038101906109a29190614043565b611a9a565b005b3480156109b557600080fd5b506109d060048036038101906109cb9190614096565b611bb4565b005b3480156109de57600080fd5b506109e7611cde565b6040516109f49190613e37565b60405180910390f35b348015610a0957600080fd5b50610a12611cf1565b604051610a1f9190613f08565b60405180910390f35b348015610a3457600080fd5b50610a4f6004803603810190610a4a9190614096565b611cf7565b604051610a5c9190613e37565b60405180910390f35b348015610a7157600080fd5b50610a7a611e67565b604051610a879190613f08565b60405180910390f35b348015610a9c57600080fd5b50610ab76004803603810190610ab291906140c3565b611e6d565b604051610ac49190613f08565b60405180910390f35b348015610ad957600080fd5b50610ae2611ef4565b604051610aef9190613f08565b60405180910390f35b348015610b0457600080fd5b50610b0d611efa565b604051610b1a9190613e37565b60405180910390f35b348015610b2f57600080fd5b50610b38611fb5565b604051610b459190613f08565b60405180910390f35b348015610b5a57600080fd5b50610b756004803603810190610b709190613e52565b611fbb565b005b348015610b8357600080fd5b50610b8c612181565b604051610b999190613f08565b60405180910390f35b348015610bae57600080fd5b50610bb7612187565b604051610bc49190613f08565b60405180910390f35b606060038054610bdc90614132565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0890614132565b8015610c555780601f10610c2a57610100808354040283529160200191610c55565b820191906000526020600020905b815481529060010190602001808311610c3857829003601f168201915b5050505050905090565b6000610c73610c6c6121eb565b84846121f3565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610cd36121eb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d59906141af565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b60175481565b6000610e3b8484846123bc565b610efc84610e476121eb565b610ef785604051806060016040528060288152602001614fe260289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ead6121eb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461317c9092919063ffffffff16565b6121f3565b600190509392505050565b60006012905090565b6000610fb9610f1d6121eb565b84610fb48560016000610f2e6121eb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461218d90919063ffffffff16565b6121f3565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110b96121eb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113f906141af565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006112136121eb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611299906141af565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6112cc6121eb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461135b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611352906141af565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b6113ea6121eb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611479576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611470906141af565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601a81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b60606004805461151d90614132565b80601f016020809104026020016040519081016040528092919081815260200182805461154990614132565b80156115965780601f1061156b57610100808354040283529160200191611596565b820191906000526020600020905b81548152906001019060200180831161157957829003601f168201915b5050505050905090565b6115a86121eb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611637576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162e906141af565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bc90614241565b60405180910390fd5b6116cf82826131e0565b5050565b60125481565b60195481565b60165481565b60006117a86116f26121eb565b846117a38560405180606001604052806025815260200161500a602591396001600061171c6121eb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461317c9092919063ffffffff16565b6121f3565b6001905092915050565b60006117c66117bf6121eb565b84846123bc565b6001905092915050565b6117d86121eb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185e906141af565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b6119626121eb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e8906141af565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611a8e9190613e37565b60405180910390a25050565b611aa26121eb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b28906141af565b60405180910390fd5b826014819055508160158190555080601681905550601654601554601454611b599190614290565b611b639190614290565b60138190555060026013541115611baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba690614332565b60405180910390fd5b505050565b611bbc6121eb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c42906141af565b60405180910390fd5b670de0b6b3a76400006103e86005611c61610cc1565b611c6b9190614352565b611c7591906143db565b611c7f91906143db565b811015611cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb89061447e565b60405180910390fd5b670de0b6b3a764000081611cd59190614352565b600a8190555050565b600e60009054906101000a900460ff1681565b60085481565b6000611d016121eb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d87906141af565b60405180910390fd5b620186a06001611d9e610cc1565b611da89190614352565b611db291906143db565b821015611df4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611deb90614510565b60405180910390fd5b6103e8600f611e01610cc1565b611e0b9190614352565b611e1591906143db565b821115611e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4e906145a2565b60405180910390fd5b8160098190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000611f046121eb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8a906141af565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b611fc36121eb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612052576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612049906141af565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b890614634565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b600a5481565b600080828461219c9190614290565b9050838110156121e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d8906146a0565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225990614732565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c8906147c4565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123af9190613f08565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361242b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242290614856565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361249a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612491906148e8565b60405180910390fd5b600081036124b3576124ae83836000613281565b613177565b600b60009054906101000a900460ff1615612b8b576124d06114b8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561253e575061250e6114b8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125775750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125b1575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125ca5750600560149054906101000a900460ff16155b15612b8a57600b60019054906101000a900460ff166126c457601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806126845750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6126c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ba90614954565b60405180910390fd5b5b600e60009054906101000a900460ff161561288c576126e16114b8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561276857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127c057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561288b5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283d90614a0c565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b60006015549050601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129365750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129dd57600854821115612980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297790614a9e565b60405180910390fd5b600a5461298c84611069565b836129979190614290565b11156129d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cf90614b0a565b60405180910390fd5b612b88565b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a805750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612adc57600854821115612aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac190614b9c565b60405180910390fd5b60008111612ad757600080fd5b612b87565b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612b8657600a54612b3984611069565b83612b449190614290565b1115612b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7c90614b0a565b60405180910390fd5b5b5b5b505b5b6000601a54612b9a9190614290565b4311158015612bf557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c415750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c9f576001600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6000612caa30611069565b905060006009548210159050808015612ccf5750600b60029054906101000a900460ff165b8015612ce85750600560149054906101000a900460ff16155b8015612d3e5750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d945750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612dea5750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e2e576001600560146101000a81548160ff021916908315150217905550612e12613514565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ee45750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612eee57600090505b6000811561316757601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f5157506000601354115b1561301e57612f7e6064612f70601354886137fb90919063ffffffff16565b61387590919063ffffffff16565b905060135460155482612f919190614352565b612f9b91906143db565b60186000828254612fac9190614290565b9250508190555060135460165482612fc49190614352565b612fce91906143db565b60196000828254612fdf9190614290565b9250508190555060135460145482612ff79190614352565b61300191906143db565b601760008282546130129190614290565b92505081905550613143565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561307957506000600f54115b15613142576130a66064613098600f54886137fb90919063ffffffff16565b61387590919063ffffffff16565b9050600f54601154826130b99190614352565b6130c391906143db565b601860008282546130d49190614290565b92505081905550600f54601254826130ec9190614352565b6130f691906143db565b601960008282546131079190614290565b92505081905550600f546010548261311f9190614352565b61312991906143db565b6017600082825461313a9190614290565b925050819055505b5b600081111561315857613157873083613281565b5b80856131649190614bbc565b94505b613172878787613281565b505050505b505050565b60008383111582906131c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131bb9190613d21565b60405180910390fd5b50600083856131d39190614bbc565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036132f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132e790614856565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361335f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613356906148e8565b60405180910390fd5b61336a8383836138bf565b6133d581604051806060016040528060268152602001614fbc602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461317c9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613468816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461218d90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135079190613f08565b60405180910390a3505050565b600061351f30611069565b905060006019546017546018546135369190614290565b6135409190614290565b90506000808314806135525750600082145b1561355f575050506137f9565b601460095461356e9190614352565b8311156135875760146009546135849190614352565b92505b60006002836018548661359a9190614352565b6135a491906143db565b6135ae91906143db565b905060006135c582866138c490919063ffffffff16565b905060004790506135d58261390e565b60006135ea82476138c490919063ffffffff16565b9050600061361587613607601754856137fb90919063ffffffff16565b61387590919063ffffffff16565b9050600061364088613632601954866137fb90919063ffffffff16565b61387590919063ffffffff16565b905060008183856136519190614bbc565b61365b9190614bbc565b9050600060188190555060006017819055506000601981905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516136bb90614c21565b60006040518083038185875af1925050503d80600081146136f8576040519150601f19603f3d011682016040523d82523d6000602084013e6136fd565b606091505b5050809850506000871180156137135750600081115b15613760576137228782613b4b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260185460405161375793929190614c36565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516137a690614c21565b60006040518083038185875af1925050503d80600081146137e3576040519150601f19603f3d011682016040523d82523d6000602084013e6137e8565b606091505b505080985050505050505050505050505b565b600080830361380d576000905061386f565b6000828461381b9190614352565b905082848261382a91906143db565b1461386a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161386190614cdf565b60405180910390fd5b809150505b92915050565b60006138b783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c25565b905092915050565b505050565b600061390683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061317c565b905092915050565b6000600267ffffffffffffffff81111561392b5761392a614cff565b5b6040519080825280602002602001820160405280156139595781602001602082028036833780820191505090505b509050308160008151811061397157613970614d2e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a3a9190614d72565b81600181518110613a4e57613a4d614d2e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613ab3307f0000000000000000000000000000000000000000000000000000000000000000846121f3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613b15959493929190614e98565b600060405180830381600087803b158015613b2f57600080fd5b505af1158015613b43573d6000803e3d6000fd5b505050505050565b613b76307f0000000000000000000000000000000000000000000000000000000000000000846121f3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613bdb96959493929190614ef2565b60606040518083038185885af1158015613bf9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c1e9190614f68565b5050505050565b60008083118290613c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c639190613d21565b60405180910390fd5b5060008385613c7b91906143db565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613cc2578082015181840152602081019050613ca7565b83811115613cd1576000848401525b50505050565b6000601f19601f8301169050919050565b6000613cf382613c88565b613cfd8185613c93565b9350613d0d818560208601613ca4565b613d1681613cd7565b840191505092915050565b60006020820190508181036000830152613d3b8184613ce8565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d7382613d48565b9050919050565b613d8381613d68565b8114613d8e57600080fd5b50565b600081359050613da081613d7a565b92915050565b6000819050919050565b613db981613da6565b8114613dc457600080fd5b50565b600081359050613dd681613db0565b92915050565b60008060408385031215613df357613df2613d43565b5b6000613e0185828601613d91565b9250506020613e1285828601613dc7565b9150509250929050565b60008115159050919050565b613e3181613e1c565b82525050565b6000602082019050613e4c6000830184613e28565b92915050565b600060208284031215613e6857613e67613d43565b5b6000613e7684828501613d91565b91505092915050565b6000819050919050565b6000613ea4613e9f613e9a84613d48565b613e7f565b613d48565b9050919050565b6000613eb682613e89565b9050919050565b6000613ec882613eab565b9050919050565b613ed881613ebd565b82525050565b6000602082019050613ef36000830184613ecf565b92915050565b613f0281613da6565b82525050565b6000602082019050613f1d6000830184613ef9565b92915050565b600080600060608486031215613f3c57613f3b613d43565b5b6000613f4a86828701613d91565b9350506020613f5b86828701613d91565b9250506040613f6c86828701613dc7565b9150509250925092565b600060ff82169050919050565b613f8c81613f76565b82525050565b6000602082019050613fa76000830184613f83565b92915050565b613fb681613d68565b82525050565b6000602082019050613fd16000830184613fad565b92915050565b613fe081613e1c565b8114613feb57600080fd5b50565b600081359050613ffd81613fd7565b92915050565b6000806040838503121561401a57614019613d43565b5b600061402885828601613d91565b925050602061403985828601613fee565b9150509250929050565b60008060006060848603121561405c5761405b613d43565b5b600061406a86828701613dc7565b935050602061407b86828701613dc7565b925050604061408c86828701613dc7565b9150509250925092565b6000602082840312156140ac576140ab613d43565b5b60006140ba84828501613dc7565b91505092915050565b600080604083850312156140da576140d9613d43565b5b60006140e885828601613d91565b92505060206140f985828601613d91565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061414a57607f821691505b60208210810361415d5761415c614103565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614199602083613c93565b91506141a482614163565b602082019050919050565b600060208201905081810360008301526141c88161418c565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061422b603983613c93565b9150614236826141cf565b604082019050919050565b6000602082019050818103600083015261425a8161421e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061429b82613da6565b91506142a683613da6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142db576142da614261565b5b828201905092915050565b7f4d757374206b6565702066656573206174203225206f72206c65737300000000600082015250565b600061431c601c83613c93565b9150614327826142e6565b602082019050919050565b6000602082019050818103600083015261434b8161430f565b9050919050565b600061435d82613da6565b915061436883613da6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143a1576143a0614261565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143e682613da6565b91506143f183613da6565b925082614401576144006143ac565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614468602483613c93565b91506144738261440c565b604082019050919050565b600060208201905081810360008301526144978161445b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006144fa603583613c93565b91506145058261449e565b604082019050919050565b60006020820190508181036000830152614529816144ed565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061458c603483613c93565b915061459782614530565b604082019050919050565b600060208201905081810360008301526145bb8161457f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061461e602683613c93565b9150614629826145c2565b604082019050919050565b6000602082019050818103600083015261464d81614611565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061468a601b83613c93565b915061469582614654565b602082019050919050565b600060208201905081810360008301526146b98161467d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061471c602483613c93565b9150614727826146c0565b604082019050919050565b6000602082019050818103600083015261474b8161470f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006147ae602283613c93565b91506147b982614752565b604082019050919050565b600060208201905081810360008301526147dd816147a1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614840602583613c93565b915061484b826147e4565b604082019050919050565b6000602082019050818103600083015261486f81614833565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006148d2602383613c93565b91506148dd82614876565b604082019050919050565b60006020820190508181036000830152614901816148c5565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061493e601683613c93565b915061494982614908565b602082019050919050565b6000602082019050818103600083015261496d81614931565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006149f6604983613c93565b9150614a0182614974565b606082019050919050565b60006020820190508181036000830152614a25816149e9565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614a88603583613c93565b9150614a9382614a2c565b604082019050919050565b60006020820190508181036000830152614ab781614a7b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614af4601383613c93565b9150614aff82614abe565b602082019050919050565b60006020820190508181036000830152614b2381614ae7565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614b86603683613c93565b9150614b9182614b2a565b604082019050919050565b60006020820190508181036000830152614bb581614b79565b9050919050565b6000614bc782613da6565b9150614bd283613da6565b925082821015614be557614be4614261565b5b828203905092915050565b600081905092915050565b50565b6000614c0b600083614bf0565b9150614c1682614bfb565b600082019050919050565b6000614c2c82614bfe565b9150819050919050565b6000606082019050614c4b6000830186613ef9565b614c586020830185613ef9565b614c656040830184613ef9565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614cc9602183613c93565b9150614cd482614c6d565b604082019050919050565b60006020820190508181036000830152614cf881614cbc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614d6c81613d7a565b92915050565b600060208284031215614d8857614d87613d43565b5b6000614d9684828501614d5d565b91505092915050565b6000819050919050565b6000614dc4614dbf614dba84614d9f565b613e7f565b613da6565b9050919050565b614dd481614da9565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614e0f81613d68565b82525050565b6000614e218383614e06565b60208301905092915050565b6000602082019050919050565b6000614e4582614dda565b614e4f8185614de5565b9350614e5a83614df6565b8060005b83811015614e8b578151614e728882614e15565b9750614e7d83614e2d565b925050600181019050614e5e565b5085935050505092915050565b600060a082019050614ead6000830188613ef9565b614eba6020830187614dcb565b8181036040830152614ecc8186614e3a565b9050614edb6060830185613fad565b614ee86080830184613ef9565b9695505050505050565b600060c082019050614f076000830189613fad565b614f146020830188613ef9565b614f216040830187614dcb565b614f2e6060830186614dcb565b614f3b6080830185613fad565b614f4860a0830184613ef9565b979650505050505050565b600081519050614f6281613db0565b92915050565b600080600060608486031215614f8157614f80613d43565b5b6000614f8f86828701614f53565b9350506020614fa086828701614f53565b9250506040614fb186828701614f53565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122091b5fbfea977f24c9e689b5e97c7c036b22c4446a7e3cd6b039f15a6981e046364736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106102cd5760003560e01c80639213691311610175578063c17b5b8c116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610b23578063f2fde38b14610b4e578063f637434214610b77578063f8b45b0514610ba2576102d4565b8063dd62ed3e14610a90578063e2f4560514610acd578063e884f26014610af8576102d4565b8063c17b5b8c14610980578063c18bc195146109a9578063c876d0b9146109d2578063c8c8ebe4146109fd578063d257b34f14610a28578063d85ba06314610a65576102d4565b8063a457c2d71161012e578063a457c2d71461084c578063a9059cbb14610889578063aacebbe3146108c6578063b62496f5146108ef578063bbc0c7421461092c578063c024666814610957576102d4565b8063921369131461074c57806395d89b41146107775780639a7a23d6146107a25780639c3b4fdc146107cb5780639fccce32146107f6578063a0d82dc514610821576102d4565b80634a62bb6511610234578063751039fc116101ed5780637bce5a04116101c75780637bce5a04146106b45780638a8c523c146106df5780638da5cb5b146106f65780638ea5220f14610721576102d4565b8063751039fc146106355780637571336a1461066057806375f0a87414610689576102d4565b80634a62bb65146105235780634fbee1931461054e5780636a486a8e1461058b5780636ddd1713146105b657806370a08231146105e1578063715018a61461061e576102d4565b80631a8145bb116102865780631a8145bb146103fd5780631f3fed8f1461042857806323b872dd14610453578063313ce5671461049057806339509351146104bb57806349bd5a5e146104f8576102d4565b806306fdde03146102d9578063095ea7b31461030457806310d5de53146103415780631694505e1461037e57806318160ddd146103a95780631816467f146103d4576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102ee610bcd565b6040516102fb9190613d21565b60405180910390f35b34801561031057600080fd5b5061032b60048036038101906103269190613ddc565b610c5f565b6040516103389190613e37565b60405180910390f35b34801561034d57600080fd5b5061036860048036038101906103639190613e52565b610c7d565b6040516103759190613e37565b60405180910390f35b34801561038a57600080fd5b50610393610c9d565b6040516103a09190613ede565b60405180910390f35b3480156103b557600080fd5b506103be610cc1565b6040516103cb9190613f08565b60405180910390f35b3480156103e057600080fd5b506103fb60048036038101906103f69190613e52565b610ccb565b005b34801561040957600080fd5b50610412610e22565b60405161041f9190613f08565b60405180910390f35b34801561043457600080fd5b5061043d610e28565b60405161044a9190613f08565b60405180910390f35b34801561045f57600080fd5b5061047a60048036038101906104759190613f23565b610e2e565b6040516104879190613e37565b60405180910390f35b34801561049c57600080fd5b506104a5610f07565b6040516104b29190613f92565b60405180910390f35b3480156104c757600080fd5b506104e260048036038101906104dd9190613ddc565b610f10565b6040516104ef9190613e37565b60405180910390f35b34801561050457600080fd5b5061050d610fc3565b60405161051a9190613fbc565b60405180910390f35b34801561052f57600080fd5b50610538610fe7565b6040516105459190613e37565b60405180910390f35b34801561055a57600080fd5b5061057560048036038101906105709190613e52565b610ffa565b6040516105829190613e37565b60405180910390f35b34801561059757600080fd5b506105a0611050565b6040516105ad9190613f08565b60405180910390f35b3480156105c257600080fd5b506105cb611056565b6040516105d89190613e37565b60405180910390f35b3480156105ed57600080fd5b5061060860048036038101906106039190613e52565b611069565b6040516106159190613f08565b60405180910390f35b34801561062a57600080fd5b506106336110b1565b005b34801561064157600080fd5b5061064a611209565b6040516106579190613e37565b60405180910390f35b34801561066c57600080fd5b5061068760048036038101906106829190614003565b6112c4565b005b34801561069557600080fd5b5061069e6113b6565b6040516106ab9190613fbc565b60405180910390f35b3480156106c057600080fd5b506106c96113dc565b6040516106d69190613f08565b60405180910390f35b3480156106eb57600080fd5b506106f46113e2565b005b34801561070257600080fd5b5061070b6114b8565b6040516107189190613fbc565b60405180910390f35b34801561072d57600080fd5b506107366114e2565b6040516107439190613fbc565b60405180910390f35b34801561075857600080fd5b50610761611508565b60405161076e9190613f08565b60405180910390f35b34801561078357600080fd5b5061078c61150e565b6040516107999190613d21565b60405180910390f35b3480156107ae57600080fd5b506107c960048036038101906107c49190614003565b6115a0565b005b3480156107d757600080fd5b506107e06116d3565b6040516107ed9190613f08565b60405180910390f35b34801561080257600080fd5b5061080b6116d9565b6040516108189190613f08565b60405180910390f35b34801561082d57600080fd5b506108366116df565b6040516108439190613f08565b60405180910390f35b34801561085857600080fd5b50610873600480360381019061086e9190613ddc565b6116e5565b6040516108809190613e37565b60405180910390f35b34801561089557600080fd5b506108b060048036038101906108ab9190613ddc565b6117b2565b6040516108bd9190613e37565b60405180910390f35b3480156108d257600080fd5b506108ed60048036038101906108e89190613e52565b6117d0565b005b3480156108fb57600080fd5b5061091660048036038101906109119190613e52565b611927565b6040516109239190613e37565b60405180910390f35b34801561093857600080fd5b50610941611947565b60405161094e9190613e37565b60405180910390f35b34801561096357600080fd5b5061097e60048036038101906109799190614003565b61195a565b005b34801561098c57600080fd5b506109a760048036038101906109a29190614043565b611a9a565b005b3480156109b557600080fd5b506109d060048036038101906109cb9190614096565b611bb4565b005b3480156109de57600080fd5b506109e7611cde565b6040516109f49190613e37565b60405180910390f35b348015610a0957600080fd5b50610a12611cf1565b604051610a1f9190613f08565b60405180910390f35b348015610a3457600080fd5b50610a4f6004803603810190610a4a9190614096565b611cf7565b604051610a5c9190613e37565b60405180910390f35b348015610a7157600080fd5b50610a7a611e67565b604051610a879190613f08565b60405180910390f35b348015610a9c57600080fd5b50610ab76004803603810190610ab291906140c3565b611e6d565b604051610ac49190613f08565b60405180910390f35b348015610ad957600080fd5b50610ae2611ef4565b604051610aef9190613f08565b60405180910390f35b348015610b0457600080fd5b50610b0d611efa565b604051610b1a9190613e37565b60405180910390f35b348015610b2f57600080fd5b50610b38611fb5565b604051610b459190613f08565b60405180910390f35b348015610b5a57600080fd5b50610b756004803603810190610b709190613e52565b611fbb565b005b348015610b8357600080fd5b50610b8c612181565b604051610b999190613f08565b60405180910390f35b348015610bae57600080fd5b50610bb7612187565b604051610bc49190613f08565b60405180910390f35b606060038054610bdc90614132565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0890614132565b8015610c555780601f10610c2a57610100808354040283529160200191610c55565b820191906000526020600020905b815481529060010190602001808311610c3857829003601f168201915b5050505050905090565b6000610c73610c6c6121eb565b84846121f3565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610cd36121eb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d59906141af565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b60175481565b6000610e3b8484846123bc565b610efc84610e476121eb565b610ef785604051806060016040528060288152602001614fe260289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ead6121eb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461317c9092919063ffffffff16565b6121f3565b600190509392505050565b60006012905090565b6000610fb9610f1d6121eb565b84610fb48560016000610f2e6121eb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461218d90919063ffffffff16565b6121f3565b6001905092915050565b7f00000000000000000000000092a97f80f33ca79f187116f0542a74841a7b9acd81565b600b60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110b96121eb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113f906141af565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006112136121eb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611299906141af565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6112cc6121eb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461135b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611352906141af565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b6113ea6121eb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611479576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611470906141af565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601a81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b60606004805461151d90614132565b80601f016020809104026020016040519081016040528092919081815260200182805461154990614132565b80156115965780601f1061156b57610100808354040283529160200191611596565b820191906000526020600020905b81548152906001019060200180831161157957829003601f168201915b5050505050905090565b6115a86121eb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611637576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162e906141af565b60405180910390fd5b7f00000000000000000000000092a97f80f33ca79f187116f0542a74841a7b9acd73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bc90614241565b60405180910390fd5b6116cf82826131e0565b5050565b60125481565b60195481565b60165481565b60006117a86116f26121eb565b846117a38560405180606001604052806025815260200161500a602591396001600061171c6121eb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461317c9092919063ffffffff16565b6121f3565b6001905092915050565b60006117c66117bf6121eb565b84846123bc565b6001905092915050565b6117d86121eb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185e906141af565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b6119626121eb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e8906141af565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611a8e9190613e37565b60405180910390a25050565b611aa26121eb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b28906141af565b60405180910390fd5b826014819055508160158190555080601681905550601654601554601454611b599190614290565b611b639190614290565b60138190555060026013541115611baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba690614332565b60405180910390fd5b505050565b611bbc6121eb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c42906141af565b60405180910390fd5b670de0b6b3a76400006103e86005611c61610cc1565b611c6b9190614352565b611c7591906143db565b611c7f91906143db565b811015611cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb89061447e565b60405180910390fd5b670de0b6b3a764000081611cd59190614352565b600a8190555050565b600e60009054906101000a900460ff1681565b60085481565b6000611d016121eb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d87906141af565b60405180910390fd5b620186a06001611d9e610cc1565b611da89190614352565b611db291906143db565b821015611df4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611deb90614510565b60405180910390fd5b6103e8600f611e01610cc1565b611e0b9190614352565b611e1591906143db565b821115611e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4e906145a2565b60405180910390fd5b8160098190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000611f046121eb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8a906141af565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b611fc36121eb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612052576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612049906141af565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b890614634565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b600a5481565b600080828461219c9190614290565b9050838110156121e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d8906146a0565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225990614732565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c8906147c4565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123af9190613f08565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361242b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242290614856565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361249a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612491906148e8565b60405180910390fd5b600081036124b3576124ae83836000613281565b613177565b600b60009054906101000a900460ff1615612b8b576124d06114b8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561253e575061250e6114b8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125775750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125b1575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125ca5750600560149054906101000a900460ff16155b15612b8a57600b60019054906101000a900460ff166126c457601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806126845750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6126c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ba90614954565b60405180910390fd5b5b600e60009054906101000a900460ff161561288c576126e16114b8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561276857507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127c057507f00000000000000000000000092a97f80f33ca79f187116f0542a74841a7b9acd73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561288b5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283d90614a0c565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b60006015549050601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129365750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129dd57600854821115612980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297790614a9e565b60405180910390fd5b600a5461298c84611069565b836129979190614290565b11156129d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cf90614b0a565b60405180910390fd5b612b88565b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a805750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612adc57600854821115612aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac190614b9c565b60405180910390fd5b60008111612ad757600080fd5b612b87565b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612b8657600a54612b3984611069565b83612b449190614290565b1115612b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7c90614b0a565b60405180910390fd5b5b5b5b505b5b6000601a54612b9a9190614290565b4311158015612bf557507f00000000000000000000000092a97f80f33ca79f187116f0542a74841a7b9acd73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c415750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c9f576001600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6000612caa30611069565b905060006009548210159050808015612ccf5750600b60029054906101000a900460ff165b8015612ce85750600560149054906101000a900460ff16155b8015612d3e5750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d945750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612dea5750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e2e576001600560146101000a81548160ff021916908315150217905550612e12613514565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ee45750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612eee57600090505b6000811561316757601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f5157506000601354115b1561301e57612f7e6064612f70601354886137fb90919063ffffffff16565b61387590919063ffffffff16565b905060135460155482612f919190614352565b612f9b91906143db565b60186000828254612fac9190614290565b9250508190555060135460165482612fc49190614352565b612fce91906143db565b60196000828254612fdf9190614290565b9250508190555060135460145482612ff79190614352565b61300191906143db565b601760008282546130129190614290565b92505081905550613143565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561307957506000600f54115b15613142576130a66064613098600f54886137fb90919063ffffffff16565b61387590919063ffffffff16565b9050600f54601154826130b99190614352565b6130c391906143db565b601860008282546130d49190614290565b92505081905550600f54601254826130ec9190614352565b6130f691906143db565b601960008282546131079190614290565b92505081905550600f546010548261311f9190614352565b61312991906143db565b6017600082825461313a9190614290565b925050819055505b5b600081111561315857613157873083613281565b5b80856131649190614bbc565b94505b613172878787613281565b505050505b505050565b60008383111582906131c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131bb9190613d21565b60405180910390fd5b50600083856131d39190614bbc565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036132f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132e790614856565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361335f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613356906148e8565b60405180910390fd5b61336a8383836138bf565b6133d581604051806060016040528060268152602001614fbc602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461317c9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613468816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461218d90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135079190613f08565b60405180910390a3505050565b600061351f30611069565b905060006019546017546018546135369190614290565b6135409190614290565b90506000808314806135525750600082145b1561355f575050506137f9565b601460095461356e9190614352565b8311156135875760146009546135849190614352565b92505b60006002836018548661359a9190614352565b6135a491906143db565b6135ae91906143db565b905060006135c582866138c490919063ffffffff16565b905060004790506135d58261390e565b60006135ea82476138c490919063ffffffff16565b9050600061361587613607601754856137fb90919063ffffffff16565b61387590919063ffffffff16565b9050600061364088613632601954866137fb90919063ffffffff16565b61387590919063ffffffff16565b905060008183856136519190614bbc565b61365b9190614bbc565b9050600060188190555060006017819055506000601981905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516136bb90614c21565b60006040518083038185875af1925050503d80600081146136f8576040519150601f19603f3d011682016040523d82523d6000602084013e6136fd565b606091505b5050809850506000871180156137135750600081115b15613760576137228782613b4b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260185460405161375793929190614c36565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516137a690614c21565b60006040518083038185875af1925050503d80600081146137e3576040519150601f19603f3d011682016040523d82523d6000602084013e6137e8565b606091505b505080985050505050505050505050505b565b600080830361380d576000905061386f565b6000828461381b9190614352565b905082848261382a91906143db565b1461386a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161386190614cdf565b60405180910390fd5b809150505b92915050565b60006138b783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c25565b905092915050565b505050565b600061390683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061317c565b905092915050565b6000600267ffffffffffffffff81111561392b5761392a614cff565b5b6040519080825280602002602001820160405280156139595781602001602082028036833780820191505090505b509050308160008151811061397157613970614d2e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a3a9190614d72565b81600181518110613a4e57613a4d614d2e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613ab3307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846121f3565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613b15959493929190614e98565b600060405180830381600087803b158015613b2f57600080fd5b505af1158015613b43573d6000803e3d6000fd5b505050505050565b613b76307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846121f3565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613bdb96959493929190614ef2565b60606040518083038185885af1158015613bf9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c1e9190614f68565b5050505050565b60008083118290613c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c639190613d21565b60405180910390fd5b5060008385613c7b91906143db565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613cc2578082015181840152602081019050613ca7565b83811115613cd1576000848401525b50505050565b6000601f19601f8301169050919050565b6000613cf382613c88565b613cfd8185613c93565b9350613d0d818560208601613ca4565b613d1681613cd7565b840191505092915050565b60006020820190508181036000830152613d3b8184613ce8565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d7382613d48565b9050919050565b613d8381613d68565b8114613d8e57600080fd5b50565b600081359050613da081613d7a565b92915050565b6000819050919050565b613db981613da6565b8114613dc457600080fd5b50565b600081359050613dd681613db0565b92915050565b60008060408385031215613df357613df2613d43565b5b6000613e0185828601613d91565b9250506020613e1285828601613dc7565b9150509250929050565b60008115159050919050565b613e3181613e1c565b82525050565b6000602082019050613e4c6000830184613e28565b92915050565b600060208284031215613e6857613e67613d43565b5b6000613e7684828501613d91565b91505092915050565b6000819050919050565b6000613ea4613e9f613e9a84613d48565b613e7f565b613d48565b9050919050565b6000613eb682613e89565b9050919050565b6000613ec882613eab565b9050919050565b613ed881613ebd565b82525050565b6000602082019050613ef36000830184613ecf565b92915050565b613f0281613da6565b82525050565b6000602082019050613f1d6000830184613ef9565b92915050565b600080600060608486031215613f3c57613f3b613d43565b5b6000613f4a86828701613d91565b9350506020613f5b86828701613d91565b9250506040613f6c86828701613dc7565b9150509250925092565b600060ff82169050919050565b613f8c81613f76565b82525050565b6000602082019050613fa76000830184613f83565b92915050565b613fb681613d68565b82525050565b6000602082019050613fd16000830184613fad565b92915050565b613fe081613e1c565b8114613feb57600080fd5b50565b600081359050613ffd81613fd7565b92915050565b6000806040838503121561401a57614019613d43565b5b600061402885828601613d91565b925050602061403985828601613fee565b9150509250929050565b60008060006060848603121561405c5761405b613d43565b5b600061406a86828701613dc7565b935050602061407b86828701613dc7565b925050604061408c86828701613dc7565b9150509250925092565b6000602082840312156140ac576140ab613d43565b5b60006140ba84828501613dc7565b91505092915050565b600080604083850312156140da576140d9613d43565b5b60006140e885828601613d91565b92505060206140f985828601613d91565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061414a57607f821691505b60208210810361415d5761415c614103565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614199602083613c93565b91506141a482614163565b602082019050919050565b600060208201905081810360008301526141c88161418c565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061422b603983613c93565b9150614236826141cf565b604082019050919050565b6000602082019050818103600083015261425a8161421e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061429b82613da6565b91506142a683613da6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142db576142da614261565b5b828201905092915050565b7f4d757374206b6565702066656573206174203225206f72206c65737300000000600082015250565b600061431c601c83613c93565b9150614327826142e6565b602082019050919050565b6000602082019050818103600083015261434b8161430f565b9050919050565b600061435d82613da6565b915061436883613da6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143a1576143a0614261565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143e682613da6565b91506143f183613da6565b925082614401576144006143ac565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614468602483613c93565b91506144738261440c565b604082019050919050565b600060208201905081810360008301526144978161445b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006144fa603583613c93565b91506145058261449e565b604082019050919050565b60006020820190508181036000830152614529816144ed565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061458c603483613c93565b915061459782614530565b604082019050919050565b600060208201905081810360008301526145bb8161457f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061461e602683613c93565b9150614629826145c2565b604082019050919050565b6000602082019050818103600083015261464d81614611565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061468a601b83613c93565b915061469582614654565b602082019050919050565b600060208201905081810360008301526146b98161467d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061471c602483613c93565b9150614727826146c0565b604082019050919050565b6000602082019050818103600083015261474b8161470f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006147ae602283613c93565b91506147b982614752565b604082019050919050565b600060208201905081810360008301526147dd816147a1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614840602583613c93565b915061484b826147e4565b604082019050919050565b6000602082019050818103600083015261486f81614833565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006148d2602383613c93565b91506148dd82614876565b604082019050919050565b60006020820190508181036000830152614901816148c5565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061493e601683613c93565b915061494982614908565b602082019050919050565b6000602082019050818103600083015261496d81614931565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006149f6604983613c93565b9150614a0182614974565b606082019050919050565b60006020820190508181036000830152614a25816149e9565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614a88603583613c93565b9150614a9382614a2c565b604082019050919050565b60006020820190508181036000830152614ab781614a7b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614af4601383613c93565b9150614aff82614abe565b602082019050919050565b60006020820190508181036000830152614b2381614ae7565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614b86603683613c93565b9150614b9182614b2a565b604082019050919050565b60006020820190508181036000830152614bb581614b79565b9050919050565b6000614bc782613da6565b9150614bd283613da6565b925082821015614be557614be4614261565b5b828203905092915050565b600081905092915050565b50565b6000614c0b600083614bf0565b9150614c1682614bfb565b600082019050919050565b6000614c2c82614bfe565b9150819050919050565b6000606082019050614c4b6000830186613ef9565b614c586020830185613ef9565b614c656040830184613ef9565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614cc9602183613c93565b9150614cd482614c6d565b604082019050919050565b60006020820190508181036000830152614cf881614cbc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614d6c81613d7a565b92915050565b600060208284031215614d8857614d87613d43565b5b6000614d9684828501614d5d565b91505092915050565b6000819050919050565b6000614dc4614dbf614dba84614d9f565b613e7f565b613da6565b9050919050565b614dd481614da9565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614e0f81613d68565b82525050565b6000614e218383614e06565b60208301905092915050565b6000602082019050919050565b6000614e4582614dda565b614e4f8185614de5565b9350614e5a83614df6565b8060005b83811015614e8b578151614e728882614e15565b9750614e7d83614e2d565b925050600181019050614e5e565b5085935050505092915050565b600060a082019050614ead6000830188613ef9565b614eba6020830187614dcb565b8181036040830152614ecc8186614e3a565b9050614edb6060830185613fad565b614ee86080830184613ef9565b9695505050505050565b600060c082019050614f076000830189613fad565b614f146020830188613ef9565b614f216040830187614dcb565b614f2e6060830186614dcb565b614f3b6080830185613fad565b614f4860a0830184613ef9565b979650505050505050565b600081519050614f6281613db0565b92915050565b600080600060608486031215614f8157614f80613d43565b5b6000614f8f86828701614f53565b9350506020614fa086828701614f53565b9250506040614fb186828701614f53565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122091b5fbfea977f24c9e689b5e97c7c036b22c4446a7e3cd6b039f15a6981e046364736f6c634300080d0033

Deployed Bytecode Sourcemap

29609:14696:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7714:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9889:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31059:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29693:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8837:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36823:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30773:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30733;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10541:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8678:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11306:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29751:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30017:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36989:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30587:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30097:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9009:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22217:148;;;;;;;;;;;;;:::i;:::-;;34322:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35332:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29830:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30479;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34121:148;;;;;;;;;;;;;:::i;:::-;;21573:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29867:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30622:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7934:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36155:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30553:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30813:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30698:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12028:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9351:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36606:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31282:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30057:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35964:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35579:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35108:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30396:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29901:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34710:387;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30445:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9590:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29943:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34504:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30516:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22521:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30660:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29983:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7714:100;7768:13;7801:5;7794:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7714:100;:::o;9889:169::-;9972:4;9989:39;9998:12;:10;:12::i;:::-;10012:7;10021:6;9989:8;:39::i;:::-;10046:4;10039:11;;9889:169;;;;:::o;31059:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29693:51::-;;;:::o;8837:108::-;8898:7;8925:12;;8918:19;;8837:108;:::o;36823:157::-;21796:12;:10;:12::i;:::-;21786:22;;:6;;;;;;;;;;;:22;;;21778:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36930:9:::1;;;;;;;;;;;36902:38;;36919:9;36902:38;;;;;;;;;;;;36963:9;36951;;:21;;;;;;;;;;;;;;;;;;36823:157:::0;:::o;30773:33::-;;;;:::o;30733:::-;;;;:::o;10541:355::-;10681:4;10698:36;10708:6;10716:9;10727:6;10698:9;:36::i;:::-;10745:121;10754:6;10762:12;:10;:12::i;:::-;10776:89;10814:6;10776:89;;;;;;;;;;;;;;;;;:11;:19;10788:6;10776:19;;;;;;;;;;;;;;;:33;10796:12;:10;:12::i;:::-;10776:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10745:8;:121::i;:::-;10884:4;10877:11;;10541:355;;;;;:::o;8678:93::-;8736:5;8761:2;8754:9;;8678:93;:::o;11306:218::-;11394:4;11411:83;11420:12;:10;:12::i;:::-;11434:7;11443:50;11482:10;11443:11;:25;11455:12;:10;:12::i;:::-;11443:25;;;;;;;;;;;;;;;:34;11469:7;11443:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11411:8;:83::i;:::-;11512:4;11505:11;;11306:218;;;;:::o;29751:38::-;;;:::o;30017:33::-;;;;;;;;;;;;;:::o;36989:125::-;37054:4;37078:19;:28;37098:7;37078:28;;;;;;;;;;;;;;;;;;;;;;;;;37071:35;;36989:125;;;:::o;30587:28::-;;;;:::o;30097:31::-;;;;;;;;;;;;;:::o;9009:127::-;9083:7;9110:9;:18;9120:7;9110:18;;;;;;;;;;;;;;;;9103:25;;9009:127;;;:::o;22217:148::-;21796:12;:10;:12::i;:::-;21786:22;;:6;;;;;;;;;;;:22;;;21778:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22324:1:::1;22287:40;;22308:6;;;;;;;;;;;22287:40;;;;;;;;;;;;22355:1;22338:6;;:19;;;;;;;;;;;;;;;;;;22217:148::o:0;34322:120::-;34374:4;21796:12;:10;:12::i;:::-;21786:22;;:6;;;;;;;;;;;:22;;;21778:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34407:5:::1;34390:14;;:22;;;;;;;;;;;;;;;;;;34430:4;34423:11;;34322:120:::0;:::o;35332:144::-;21796:12;:10;:12::i;:::-;21786:22;;:6;;;;;;;;;;;:22;;;21778:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35464:4:::1;35422:31;:39;35454:6;35422:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35332:144:::0;;:::o;29830:30::-;;;;;;;;;;;;;:::o;30479:::-;;;;:::o;34121:148::-;21796:12;:10;:12::i;:::-;21786:22;;:6;;;;;;;;;;;:22;;;21778:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34192:4:::1;34176:13;;:20;;;;;;;;;;;;;;;;;;34221:4;34207:11;;:18;;;;;;;;;;;;;;;;;;34249:12;34236:10;:25;;;;34121:148::o:0;21573:79::-;21611:7;21638:6;;;;;;;;;;;21631:13;;21573:79;:::o;29867:24::-;;;;;;;;;;;;;:::o;30622:31::-;;;;:::o;7934:104::-;7990:13;8023:7;8016:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7934:104;:::o;36155:245::-;21796:12;:10;:12::i;:::-;21786:22;;:6;;;;;;;;;;;:22;;;21778:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36262:13:::1;36254:21;;:4;:21;;::::0;36246:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36351:41;36380:4;36386:5;36351:28;:41::i;:::-;36155:245:::0;;:::o;30553:24::-;;;;:::o;30813:27::-;;;;:::o;30698:25::-;;;;:::o;12028:269::-;12121:4;12138:129;12147:12;:10;:12::i;:::-;12161:7;12170:96;12209:15;12170:96;;;;;;;;;;;;;;;;;:11;:25;12182:12;:10;:12::i;:::-;12170:25;;;;;;;;;;;;;;;:34;12196:7;12170:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12138:8;:129::i;:::-;12285:4;12278:11;;12028:269;;;;:::o;9351:175::-;9437:4;9454:42;9464:12;:10;:12::i;:::-;9478:9;9489:6;9454:9;:42::i;:::-;9514:4;9507:11;;9351:175;;;;:::o;36606:208::-;21796:12;:10;:12::i;:::-;21786:22;;:6;;;;;;;;;;;:22;;;21778:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36743:15:::1;;;;;;;;;;;36700:59;;36723:18;36700:59;;;;;;;;;;;;36788:18;36770:15;;:36;;;;;;;;;;;;;;;;;;36606:208:::0;:::o;31282:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30057:33::-;;;;;;;;;;;;;:::o;35964:182::-;21796:12;:10;:12::i;:::-;21786:22;;:6;;;;;;;;;;;:22;;;21778:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36080:8:::1;36049:19;:28;36069:7;36049:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36120:7;36104:34;;;36129:8;36104:34;;;;;;:::i;:::-;;;;;;;;35964:182:::0;;:::o;35579:376::-;21796:12;:10;:12::i;:::-;21786:22;;:6;;;;;;;;;;;:22;;;21778:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35715:13:::1;35696:16;:32;;;;35758:13;35739:16;:32;;;;35795:7;35782:10;:20;;;;35867:10;;35848:16;;35829;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;35813:13;:64;;;;35913:1;35896:13;;:18;;35888:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;35579:376:::0;;;:::o;35108:215::-;21796:12;:10;:12::i;:::-;21786:22;;:6;;;;;;;;;;;:22;;;21778:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35230:4:::1;35224;35220:1;35204:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35203:31;;;;:::i;:::-;35193:6;:41;;35185:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;35308:6;35298;:17;;;;:::i;:::-;35286:9;:29;;;;35108:215:::0;:::o;30396:39::-;;;;;;;;;;;;;:::o;29901:35::-;;;;:::o;34710:387::-;34791:4;21796:12;:10;:12::i;:::-;21786:22;;:6;;;;;;;;;;;:22;;;21778:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34848:6:::1;34844:1;34828:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;34815:9;:39;;34807:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;34965:4;34960:2;34944:13;:11;:13::i;:::-;:18;;;;:::i;:::-;:25;;;;:::i;:::-;34931:9;:38;;34923:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;35058:9;35037:18;:30;;;;35085:4;35078:11;;34710:387:::0;;;:::o;30445:27::-;;;;:::o;9590:151::-;9679:7;9706:11;:18;9718:5;9706:18;;;;;;;;;;;;;;;:27;9725:7;9706:27;;;;;;;;;;;;;;;;9699:34;;9590:151;;;;:::o;29943:33::-;;;;:::o;34504:134::-;34564:4;21796:12;:10;:12::i;:::-;21786:22;;:6;;;;;;;;;;;:22;;;21778:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34603:5:::1;34580:20;;:28;;;;;;;;;;;;;;;;;;34626:4;34619:11;;34504:134:::0;:::o;30516:30::-;;;;:::o;22521:244::-;21796:12;:10;:12::i;:::-;21786:22;;:6;;;;;;;;;;;:22;;;21778:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22630:1:::1;22610:22;;:8;:22;;::::0;22602:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22720:8;22691:38;;22712:6;;;;;;;;;;;22691:38;;;;;;;;;;;;22749:8;22740:6;;:17;;;;;;;;;;;;;;;;;;22521:244:::0;:::o;30660:31::-;;;;:::o;29983:24::-;;;;:::o;16605:182::-;16663:7;16683:9;16699:1;16695;:5;;;;:::i;:::-;16683:17;;16724:1;16719;:6;;16711:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16778:1;16771:8;;;16605:182;;;;:::o;408:98::-;461:7;488:10;481:17;;408:98;:::o;15224:381::-;15377:1;15360:19;;:5;:19;;;15352:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15458:1;15439:21;;:7;:21;;;15431:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15543:6;15513:11;:18;15525:5;15513:18;;;;;;;;;;;;;;;:27;15532:7;15513:27;;;;;;;;;;;;;;;:36;;;;15581:7;15565:32;;15574:5;15565:32;;;15590:6;15565:32;;;;;;:::i;:::-;;;;;;;;15224:381;;;:::o;37174:4419::-;37322:1;37306:18;;:4;:18;;;37298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37399:1;37385:16;;:2;:16;;;37377:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37468:1;37458:6;:11;37455:92;;37486:28;37502:4;37508:2;37512:1;37486:15;:28::i;:::-;37529:7;;37455:92;37563:14;;;;;;;;;;;37560:1915;;;37623:7;:5;:7::i;:::-;37615:15;;:4;:15;;;;:49;;;;;37657:7;:5;:7::i;:::-;37651:13;;:2;:13;;;;37615:49;:86;;;;;37699:1;37685:16;;:2;:16;;;;37615:86;:128;;;;;37736:6;37722:21;;:2;:21;;;;37615:128;:158;;;;;37765:8;;;;;;;;;;;37764:9;37615:158;37593:1871;;;37811:13;;;;;;;;;;;37807:148;;37856:19;:25;37876:4;37856:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;37885:19;:23;37905:2;37885:23;;;;;;;;;;;;;;;;;;;;;;;;;37856:52;37848:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37807:148;38114:20;;;;;;;;;;;38110:423;;;38168:7;:5;:7::i;:::-;38162:13;;:2;:13;;;;:47;;;;;38193:15;38179:30;;:2;:30;;;;38162:47;:79;;;;;38227:13;38213:28;;:2;:28;;;;38162:79;38158:356;;;38319:12;38277:28;:39;38306:9;38277:39;;;;;;;;;;;;;;;;:54;38269:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;38478:12;38436:28;:39;38465:9;38436:39;;;;;;;;;;;;;;;:54;;;;38158:356;38110:423;38548:20;38571:16;;38548:39;;38638:25;:31;38664:4;38638:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;38674:31;:35;38706:2;38674:35;;;;;;;;;;;;;;;;;;;;;;;;;38673:36;38638:71;38634:815;;;38756:20;;38746:6;:30;;38738:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;38895:9;;38878:13;38888:2;38878:9;:13::i;:::-;38869:6;:22;;;;:::i;:::-;:35;;38861:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38634:815;;;39007:25;:29;39033:2;39007:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39041:31;:37;39073:4;39041:37;;;;;;;;;;;;;;;;;;;;;;;;;39040:38;39007:71;39003:446;;;39125:20;;39115:6;:30;;39107:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;39254:1;39239:12;:16;39231:25;;;;;;39003:446;;;39303:31;:35;39335:2;39303:35;;;;;;;;;;;;;;;;;;;;;;;;;39299:150;;39396:9;;39379:13;39389:2;39379:9;:13::i;:::-;39370:6;:22;;;;:::i;:::-;:35;;39362:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39299:150;39003:446;38634:815;37788:1676;37593:1871;37560:1915;39551:1;39538:10;;:14;;;;:::i;:::-;39521:12;:32;;:73;;;;;39581:13;39575:19;;:2;:19;;;;39521:73;:152;;;;;39630:42;39616:57;;:2;:57;;;;39521:152;39517:221;;;39722:4;39705:10;:14;39716:2;39705:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39517:221;39753:28;39784:24;39802:4;39784:9;:24::i;:::-;39753:55;;39824:12;39863:18;;39839:20;:42;;39824:57;;39916:7;:35;;;;;39940:11;;;;;;;;;;;39916:35;:61;;;;;39969:8;;;;;;;;;;;39968:9;39916:61;:110;;;;;39995:25;:31;40021:4;39995:31;;;;;;;;;;;;;;;;;;;;;;;;;39994:32;39916:110;:153;;;;;40044:19;:25;40064:4;40044:25;;;;;;;;;;;;;;;;;;;;;;;;;40043:26;39916:153;:194;;;;;40087:19;:23;40107:2;40087:23;;;;;;;;;;;;;;;;;;;;;;;;;40086:24;39916:194;39898:328;;;40148:4;40137:8;;:15;;;;;;;;;;;;;;;;;;40170:10;:8;:10::i;:::-;40209:5;40198:8;;:16;;;;;;;;;;;;;;;;;;39898:328;40239:12;40255:8;;;;;;;;;;;40254:9;40239:24;;40365:19;:25;40385:4;40365:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40394:19;:23;40414:2;40394:23;;;;;;;;;;;;;;;;;;;;;;;;;40365:52;40362:99;;;40444:5;40434:15;;40362:99;40471:12;40585:7;40582:957;;;40636:25;:29;40662:2;40636:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;40685:1;40669:13;;:17;40636:50;40632:754;;;40713:34;40743:3;40713:25;40724:13;;40713:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;40706:41;;40814:13;;40795:16;;40788:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;40766:18;;:61;;;;;;;:::i;:::-;;;;;;;;40882:13;;40869:10;;40862:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;40846:12;;:49;;;;;;;:::i;:::-;;;;;;;;40962:13;;40943:16;;40936:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;40914:18;;:61;;;;;;;:::i;:::-;;;;;;;;40632:754;;;41036:25;:31;41062:4;41036:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;41086:1;41071:12;;:16;41036:51;41033:353;;;41115:33;41144:3;41115:24;41126:12;;41115:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;41108:40;;41214:12;;41196:15;;41189:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41167:18;;:59;;;;;;;:::i;:::-;;;;;;;;41280:12;;41268:9;;41261:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;41245:12;;:47;;;;;;;:::i;:::-;;;;;;;;41358:12;;41340:15;;41333:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41311:18;;:59;;;;;;;:::i;:::-;;;;;;;;41033:353;40632:754;41413:1;41406:4;:8;41403:93;;;41438:42;41454:4;41468;41475;41438:15;:42::i;:::-;41403:93;41523:4;41513:14;;;;;:::i;:::-;;;40582:957;41552:33;41568:4;41574:2;41578:6;41552:15;:33::i;:::-;37287:4306;;;;37174:4419;;;;:::o;17511:193::-;17597:7;17630:1;17625;:6;;17633:12;17617:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17657:9;17673:1;17669;:5;;;;:::i;:::-;17657:17;;17695:1;17688:8;;;17511:193;;;;;:::o;36409:189::-;36526:5;36492:25;:31;36518:4;36492:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36584:5;36550:40;;36578:4;36550:40;;;;;;;;;;;;36409:189;;:::o;12788:575::-;12946:1;12928:20;;:6;:20;;;12920:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13030:1;13009:23;;:9;:23;;;13001:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13086:47;13107:6;13115:9;13126:6;13086:20;:47::i;:::-;13167:71;13189:6;13167:71;;;;;;;;;;;;;;;;;:9;:17;13177:6;13167:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13147:9;:17;13157:6;13147:17;;;;;;;;;;;;;;;:91;;;;13272:32;13297:6;13272:9;:20;13282:9;13272:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13249:9;:20;13259:9;13249:20;;;;;;;;;;;;;;;:55;;;;13337:9;13320:35;;13329:6;13320:35;;;13348:6;13320:35;;;;;;:::i;:::-;;;;;;;;12788:575;;;:::o;42737:1565::-;42776:23;42802:24;42820:4;42802:9;:24::i;:::-;42776:50;;42837:25;42907:12;;42886:18;;42865;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;42837:82;;42930:12;42978:1;42959:15;:20;:46;;;;43004:1;42983:17;:22;42959:46;42956:60;;;43008:7;;;;;42956:60;43071:2;43050:18;;:23;;;;:::i;:::-;43032:15;:41;43029:111;;;43126:2;43105:18;;:23;;;;:::i;:::-;43087:41;;43029:111;43202:23;43287:1;43267:17;43246:18;;43228:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;43202:86;;43299:26;43328:36;43348:15;43328;:19;;:36;;;;:::i;:::-;43299:65;;43378:25;43406:21;43378:49;;43441:36;43458:18;43441:16;:36::i;:::-;43492:18;43513:44;43539:17;43513:21;:25;;:44;;;;:::i;:::-;43492:65;;43571:23;43597:57;43636:17;43597:34;43612:18;;43597:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;43571:83;;43665:17;43685:51;43718:17;43685:28;43700:12;;43685:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;43665:71;;43747:23;43804:9;43786:15;43773:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;43747:66;;43848:1;43827:18;:22;;;;43881:1;43860:18;:22;;;;43908:1;43893:12;:16;;;;43944:9;;;;;;;;;;;43936:23;;43967:9;43936:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43923:58;;;;;44016:1;43998:15;:19;:42;;;;;44039:1;44021:15;:19;43998:42;43995:210;;;44056:46;44069:15;44086;44056:12;:46::i;:::-;44122:71;44137:18;44157:15;44174:18;;44122:71;;;;;;;;:::i;:::-;;;;;;;;43995:210;44239:15;;;;;;;;;;;44231:29;;44268:21;44231:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44218:76;;;;;42765:1537;;;;;;;;;;42737:1565;:::o;17964:473::-;18022:7;18272:1;18267;:6;18263:47;;18297:1;18290:8;;;;18263:47;18323:9;18339:1;18335;:5;;;;:::i;:::-;18323:17;;18368:1;18363;18359;:5;;;;:::i;:::-;:10;18351:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18428:1;18421:8;;;17964:473;;;;;:::o;18914:132::-;18972:7;18999:39;19003:1;19006;18999:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18992:46;;18914:132;;;;:::o;16209:125::-;;;;:::o;17071:136::-;17129:7;17156:43;17160:1;17163;17156:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17149:50;;17071:136;;;;:::o;41602:597::-;41731:21;41769:1;41755:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41731:40;;41800:4;41782;41787:1;41782:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;41826:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41816:4;41821:1;41816:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;41862:62;41879:4;41894:15;41912:11;41862:8;:62::i;:::-;41964:15;:66;;;42045:11;42071:1;42115:4;42142;42162:15;41964:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41657:542;41602:597;:::o;42208:520::-;42356:62;42373:4;42388:15;42406:11;42356:8;:62::i;:::-;42462:15;:31;;;42501:9;42534:4;42554:11;42580:1;42623;42674:4;42694:15;42462:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;42208:520;;:::o;19543:279::-;19629:7;19661:1;19657;:5;19664:12;19649:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19688:9;19704:1;19700;:5;;;;:::i;:::-;19688:17;;19813:1;19806:8;;;19543:279;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:619::-;5236:6;5244;5252;5301:2;5289:9;5280:7;5276:23;5272:32;5269:119;;;5307:79;;:::i;:::-;5269:119;5427:1;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5398:117;5554:2;5580:53;5625:7;5616:6;5605:9;5601:22;5580:53;:::i;:::-;5570:63;;5525:118;5682:2;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5653:118;5159:619;;;;;:::o;5784:86::-;5819:7;5859:4;5852:5;5848:16;5837:27;;5784:86;;;:::o;5876:112::-;5959:22;5975:5;5959:22;:::i;:::-;5954:3;5947:35;5876:112;;:::o;5994:214::-;6083:4;6121:2;6110:9;6106:18;6098:26;;6134:67;6198:1;6187:9;6183:17;6174:6;6134:67;:::i;:::-;5994:214;;;;:::o;6214:118::-;6301:24;6319:5;6301:24;:::i;:::-;6296:3;6289:37;6214:118;;:::o;6338:222::-;6431:4;6469:2;6458:9;6454:18;6446:26;;6482:71;6550:1;6539:9;6535:17;6526:6;6482:71;:::i;:::-;6338:222;;;;:::o;6566:116::-;6636:21;6651:5;6636:21;:::i;:::-;6629:5;6626:32;6616:60;;6672:1;6669;6662:12;6616:60;6566:116;:::o;6688:133::-;6731:5;6769:6;6756:20;6747:29;;6785:30;6809:5;6785:30;:::i;:::-;6688:133;;;;:::o;6827:468::-;6892:6;6900;6949:2;6937:9;6928:7;6924:23;6920:32;6917:119;;;6955:79;;:::i;:::-;6917:119;7075:1;7100:53;7145:7;7136:6;7125:9;7121:22;7100:53;:::i;:::-;7090:63;;7046:117;7202:2;7228:50;7270:7;7261:6;7250:9;7246:22;7228:50;:::i;:::-;7218:60;;7173:115;6827:468;;;;;:::o;7301:619::-;7378:6;7386;7394;7443:2;7431:9;7422:7;7418:23;7414:32;7411:119;;;7449:79;;:::i;:::-;7411:119;7569:1;7594:53;7639:7;7630:6;7619:9;7615:22;7594:53;:::i;:::-;7584:63;;7540:117;7696:2;7722:53;7767:7;7758:6;7747:9;7743:22;7722:53;:::i;:::-;7712:63;;7667:118;7824:2;7850:53;7895:7;7886:6;7875:9;7871:22;7850:53;:::i;:::-;7840:63;;7795:118;7301:619;;;;;:::o;7926:329::-;7985:6;8034:2;8022:9;8013:7;8009:23;8005:32;8002:119;;;8040:79;;:::i;:::-;8002:119;8160:1;8185:53;8230:7;8221:6;8210:9;8206:22;8185:53;:::i;:::-;8175:63;;8131:117;7926:329;;;;:::o;8261:474::-;8329:6;8337;8386:2;8374:9;8365:7;8361:23;8357:32;8354:119;;;8392:79;;:::i;:::-;8354:119;8512:1;8537:53;8582:7;8573:6;8562:9;8558:22;8537:53;:::i;:::-;8527:63;;8483:117;8639:2;8665:53;8710:7;8701:6;8690:9;8686:22;8665:53;:::i;:::-;8655:63;;8610:118;8261:474;;;;;:::o;8741:180::-;8789:77;8786:1;8779:88;8886:4;8883:1;8876:15;8910:4;8907:1;8900:15;8927:320;8971:6;9008:1;9002:4;8998:12;8988:22;;9055:1;9049:4;9045:12;9076:18;9066:81;;9132:4;9124:6;9120:17;9110:27;;9066:81;9194:2;9186:6;9183:14;9163:18;9160:38;9157:84;;9213:18;;:::i;:::-;9157:84;8978:269;8927:320;;;:::o;9253:182::-;9393:34;9389:1;9381:6;9377:14;9370:58;9253:182;:::o;9441:366::-;9583:3;9604:67;9668:2;9663:3;9604:67;:::i;:::-;9597:74;;9680:93;9769:3;9680:93;:::i;:::-;9798:2;9793:3;9789:12;9782:19;;9441:366;;;:::o;9813:419::-;9979:4;10017:2;10006:9;10002:18;9994:26;;10066:9;10060:4;10056:20;10052:1;10041:9;10037:17;10030:47;10094:131;10220:4;10094:131;:::i;:::-;10086:139;;9813:419;;;:::o;10238:244::-;10378:34;10374:1;10366:6;10362:14;10355:58;10447:27;10442:2;10434:6;10430:15;10423:52;10238:244;:::o;10488:366::-;10630:3;10651:67;10715:2;10710:3;10651:67;:::i;:::-;10644:74;;10727:93;10816:3;10727:93;:::i;:::-;10845:2;10840:3;10836:12;10829:19;;10488:366;;;:::o;10860:419::-;11026:4;11064:2;11053:9;11049:18;11041:26;;11113:9;11107:4;11103:20;11099:1;11088:9;11084:17;11077:47;11141:131;11267:4;11141:131;:::i;:::-;11133:139;;10860:419;;;:::o;11285:180::-;11333:77;11330:1;11323:88;11430:4;11427:1;11420:15;11454:4;11451:1;11444:15;11471:305;11511:3;11530:20;11548:1;11530:20;:::i;:::-;11525:25;;11564:20;11582:1;11564:20;:::i;:::-;11559:25;;11718:1;11650:66;11646:74;11643:1;11640:81;11637:107;;;11724:18;;:::i;:::-;11637:107;11768:1;11765;11761:9;11754:16;;11471:305;;;;:::o;11782:178::-;11922:30;11918:1;11910:6;11906:14;11899:54;11782:178;:::o;11966:366::-;12108:3;12129:67;12193:2;12188:3;12129:67;:::i;:::-;12122:74;;12205:93;12294:3;12205:93;:::i;:::-;12323:2;12318:3;12314:12;12307:19;;11966:366;;;:::o;12338:419::-;12504:4;12542:2;12531:9;12527:18;12519:26;;12591:9;12585:4;12581:20;12577:1;12566:9;12562:17;12555:47;12619:131;12745:4;12619:131;:::i;:::-;12611:139;;12338:419;;;:::o;12763:348::-;12803:7;12826:20;12844:1;12826:20;:::i;:::-;12821:25;;12860:20;12878:1;12860:20;:::i;:::-;12855:25;;13048:1;12980:66;12976:74;12973:1;12970:81;12965:1;12958:9;12951:17;12947:105;12944:131;;;13055:18;;:::i;:::-;12944:131;13103:1;13100;13096:9;13085:20;;12763:348;;;;:::o;13117:180::-;13165:77;13162:1;13155:88;13262:4;13259:1;13252:15;13286:4;13283:1;13276:15;13303:185;13343:1;13360:20;13378:1;13360:20;:::i;:::-;13355:25;;13394:20;13412:1;13394:20;:::i;:::-;13389:25;;13433:1;13423:35;;13438:18;;:::i;:::-;13423:35;13480:1;13477;13473:9;13468:14;;13303:185;;;;:::o;13494:223::-;13634:34;13630:1;13622:6;13618:14;13611:58;13703:6;13698:2;13690:6;13686:15;13679:31;13494:223;:::o;13723:366::-;13865:3;13886:67;13950:2;13945:3;13886:67;:::i;:::-;13879:74;;13962:93;14051:3;13962:93;:::i;:::-;14080:2;14075:3;14071:12;14064:19;;13723:366;;;:::o;14095:419::-;14261:4;14299:2;14288:9;14284:18;14276:26;;14348:9;14342:4;14338:20;14334:1;14323:9;14319:17;14312:47;14376:131;14502:4;14376:131;:::i;:::-;14368:139;;14095:419;;;:::o;14520:240::-;14660:34;14656:1;14648:6;14644:14;14637:58;14729:23;14724:2;14716:6;14712:15;14705:48;14520:240;:::o;14766:366::-;14908:3;14929:67;14993:2;14988:3;14929:67;:::i;:::-;14922:74;;15005:93;15094:3;15005:93;:::i;:::-;15123:2;15118:3;15114:12;15107:19;;14766:366;;;:::o;15138:419::-;15304:4;15342:2;15331:9;15327:18;15319:26;;15391:9;15385:4;15381:20;15377:1;15366:9;15362:17;15355:47;15419:131;15545:4;15419:131;:::i;:::-;15411:139;;15138:419;;;:::o;15563:239::-;15703:34;15699:1;15691:6;15687:14;15680:58;15772:22;15767:2;15759:6;15755:15;15748:47;15563:239;:::o;15808:366::-;15950:3;15971:67;16035:2;16030:3;15971:67;:::i;:::-;15964:74;;16047:93;16136:3;16047:93;:::i;:::-;16165:2;16160:3;16156:12;16149:19;;15808:366;;;:::o;16180:419::-;16346:4;16384:2;16373:9;16369:18;16361:26;;16433:9;16427:4;16423:20;16419:1;16408:9;16404:17;16397:47;16461:131;16587:4;16461:131;:::i;:::-;16453:139;;16180:419;;;:::o;16605:225::-;16745:34;16741:1;16733:6;16729:14;16722:58;16814:8;16809:2;16801:6;16797:15;16790:33;16605:225;:::o;16836:366::-;16978:3;16999:67;17063:2;17058:3;16999:67;:::i;:::-;16992:74;;17075:93;17164:3;17075:93;:::i;:::-;17193:2;17188:3;17184:12;17177:19;;16836:366;;;:::o;17208:419::-;17374:4;17412:2;17401:9;17397:18;17389:26;;17461:9;17455:4;17451:20;17447:1;17436:9;17432:17;17425:47;17489:131;17615:4;17489:131;:::i;:::-;17481:139;;17208:419;;;:::o;17633:177::-;17773:29;17769:1;17761:6;17757:14;17750:53;17633:177;:::o;17816:366::-;17958:3;17979:67;18043:2;18038:3;17979:67;:::i;:::-;17972:74;;18055:93;18144:3;18055:93;:::i;:::-;18173:2;18168:3;18164:12;18157:19;;17816:366;;;:::o;18188:419::-;18354:4;18392:2;18381:9;18377:18;18369:26;;18441:9;18435:4;18431:20;18427:1;18416:9;18412:17;18405:47;18469:131;18595:4;18469:131;:::i;:::-;18461:139;;18188:419;;;:::o;18613:223::-;18753:34;18749:1;18741:6;18737:14;18730:58;18822:6;18817:2;18809:6;18805:15;18798:31;18613:223;:::o;18842:366::-;18984:3;19005:67;19069:2;19064:3;19005:67;:::i;:::-;18998:74;;19081:93;19170:3;19081:93;:::i;:::-;19199:2;19194:3;19190:12;19183:19;;18842:366;;;:::o;19214:419::-;19380:4;19418:2;19407:9;19403:18;19395:26;;19467:9;19461:4;19457:20;19453:1;19442:9;19438:17;19431:47;19495:131;19621:4;19495:131;:::i;:::-;19487:139;;19214:419;;;:::o;19639:221::-;19779:34;19775:1;19767:6;19763:14;19756:58;19848:4;19843:2;19835:6;19831:15;19824:29;19639:221;:::o;19866:366::-;20008:3;20029:67;20093:2;20088:3;20029:67;:::i;:::-;20022:74;;20105:93;20194:3;20105:93;:::i;:::-;20223:2;20218:3;20214:12;20207:19;;19866:366;;;:::o;20238:419::-;20404:4;20442:2;20431:9;20427:18;20419:26;;20491:9;20485:4;20481:20;20477:1;20466:9;20462:17;20455:47;20519:131;20645:4;20519:131;:::i;:::-;20511:139;;20238:419;;;:::o;20663:224::-;20803:34;20799:1;20791:6;20787:14;20780:58;20872:7;20867:2;20859:6;20855:15;20848:32;20663:224;:::o;20893:366::-;21035:3;21056:67;21120:2;21115:3;21056:67;:::i;:::-;21049:74;;21132:93;21221:3;21132:93;:::i;:::-;21250:2;21245:3;21241:12;21234:19;;20893:366;;;:::o;21265:419::-;21431:4;21469:2;21458:9;21454:18;21446:26;;21518:9;21512:4;21508:20;21504:1;21493:9;21489:17;21482:47;21546:131;21672:4;21546:131;:::i;:::-;21538:139;;21265:419;;;:::o;21690:222::-;21830:34;21826:1;21818:6;21814:14;21807:58;21899:5;21894:2;21886:6;21882:15;21875:30;21690:222;:::o;21918:366::-;22060:3;22081:67;22145:2;22140:3;22081:67;:::i;:::-;22074:74;;22157:93;22246:3;22157:93;:::i;:::-;22275:2;22270:3;22266:12;22259:19;;21918:366;;;:::o;22290:419::-;22456:4;22494:2;22483:9;22479:18;22471:26;;22543:9;22537:4;22533:20;22529:1;22518:9;22514:17;22507:47;22571:131;22697:4;22571:131;:::i;:::-;22563:139;;22290:419;;;:::o;22715:172::-;22855:24;22851:1;22843:6;22839:14;22832:48;22715:172;:::o;22893:366::-;23035:3;23056:67;23120:2;23115:3;23056:67;:::i;:::-;23049:74;;23132:93;23221:3;23132:93;:::i;:::-;23250:2;23245:3;23241:12;23234:19;;22893:366;;;:::o;23265:419::-;23431:4;23469:2;23458:9;23454:18;23446:26;;23518:9;23512:4;23508:20;23504:1;23493:9;23489:17;23482:47;23546:131;23672:4;23546:131;:::i;:::-;23538:139;;23265:419;;;:::o;23690:297::-;23830:34;23826:1;23818:6;23814:14;23807:58;23899:34;23894:2;23886:6;23882:15;23875:59;23968:11;23963:2;23955:6;23951:15;23944:36;23690:297;:::o;23993:366::-;24135:3;24156:67;24220:2;24215:3;24156:67;:::i;:::-;24149:74;;24232:93;24321:3;24232:93;:::i;:::-;24350:2;24345:3;24341:12;24334:19;;23993:366;;;:::o;24365:419::-;24531:4;24569:2;24558:9;24554:18;24546:26;;24618:9;24612:4;24608:20;24604:1;24593:9;24589:17;24582:47;24646:131;24772:4;24646:131;:::i;:::-;24638:139;;24365:419;;;:::o;24790:240::-;24930:34;24926:1;24918:6;24914:14;24907:58;24999:23;24994:2;24986:6;24982:15;24975:48;24790:240;:::o;25036:366::-;25178:3;25199:67;25263:2;25258:3;25199:67;:::i;:::-;25192:74;;25275:93;25364:3;25275:93;:::i;:::-;25393:2;25388:3;25384:12;25377:19;;25036:366;;;:::o;25408:419::-;25574:4;25612:2;25601:9;25597:18;25589:26;;25661:9;25655:4;25651:20;25647:1;25636:9;25632:17;25625:47;25689:131;25815:4;25689:131;:::i;:::-;25681:139;;25408:419;;;:::o;25833:169::-;25973:21;25969:1;25961:6;25957:14;25950:45;25833:169;:::o;26008:366::-;26150:3;26171:67;26235:2;26230:3;26171:67;:::i;:::-;26164:74;;26247:93;26336:3;26247:93;:::i;:::-;26365:2;26360:3;26356:12;26349:19;;26008:366;;;:::o;26380:419::-;26546:4;26584:2;26573:9;26569:18;26561:26;;26633:9;26627:4;26623:20;26619:1;26608:9;26604:17;26597:47;26661:131;26787:4;26661:131;:::i;:::-;26653:139;;26380:419;;;:::o;26805:241::-;26945:34;26941:1;26933:6;26929:14;26922:58;27014:24;27009:2;27001:6;26997:15;26990:49;26805:241;:::o;27052:366::-;27194:3;27215:67;27279:2;27274:3;27215:67;:::i;:::-;27208:74;;27291:93;27380:3;27291:93;:::i;:::-;27409:2;27404:3;27400:12;27393:19;;27052:366;;;:::o;27424:419::-;27590:4;27628:2;27617:9;27613:18;27605:26;;27677:9;27671:4;27667:20;27663:1;27652:9;27648:17;27641:47;27705:131;27831:4;27705:131;:::i;:::-;27697:139;;27424:419;;;:::o;27849:191::-;27889:4;27909:20;27927:1;27909:20;:::i;:::-;27904:25;;27943:20;27961:1;27943:20;:::i;:::-;27938:25;;27982:1;27979;27976:8;27973:34;;;27987:18;;:::i;:::-;27973:34;28032:1;28029;28025:9;28017:17;;27849:191;;;;:::o;28046:147::-;28147:11;28184:3;28169:18;;28046:147;;;;:::o;28199:114::-;;:::o;28319:398::-;28478:3;28499:83;28580:1;28575:3;28499:83;:::i;:::-;28492:90;;28591:93;28680:3;28591:93;:::i;:::-;28709:1;28704:3;28700:11;28693:18;;28319:398;;;:::o;28723:379::-;28907:3;28929:147;29072:3;28929:147;:::i;:::-;28922:154;;29093:3;29086:10;;28723:379;;;:::o;29108:442::-;29257:4;29295:2;29284:9;29280:18;29272:26;;29308:71;29376:1;29365:9;29361:17;29352:6;29308:71;:::i;:::-;29389:72;29457:2;29446:9;29442:18;29433:6;29389:72;:::i;:::-;29471;29539:2;29528:9;29524:18;29515:6;29471:72;:::i;:::-;29108:442;;;;;;:::o;29556:220::-;29696:34;29692:1;29684:6;29680:14;29673:58;29765:3;29760:2;29752:6;29748:15;29741:28;29556:220;:::o;29782:366::-;29924:3;29945:67;30009:2;30004:3;29945:67;:::i;:::-;29938:74;;30021:93;30110:3;30021:93;:::i;:::-;30139:2;30134:3;30130:12;30123:19;;29782:366;;;:::o;30154:419::-;30320:4;30358:2;30347:9;30343:18;30335:26;;30407:9;30401:4;30397:20;30393:1;30382:9;30378:17;30371:47;30435:131;30561:4;30435:131;:::i;:::-;30427:139;;30154:419;;;:::o;30579:180::-;30627:77;30624:1;30617:88;30724:4;30721:1;30714:15;30748:4;30745:1;30738:15;30765:180;30813:77;30810:1;30803:88;30910:4;30907:1;30900:15;30934:4;30931:1;30924:15;30951:143;31008:5;31039:6;31033:13;31024:22;;31055:33;31082:5;31055:33;:::i;:::-;30951:143;;;;:::o;31100:351::-;31170:6;31219:2;31207:9;31198:7;31194:23;31190:32;31187:119;;;31225:79;;:::i;:::-;31187:119;31345:1;31370:64;31426:7;31417:6;31406:9;31402:22;31370:64;:::i;:::-;31360:74;;31316:128;31100:351;;;;:::o;31457:85::-;31502:7;31531:5;31520:16;;31457:85;;;:::o;31548:158::-;31606:9;31639:61;31657:42;31666:32;31692:5;31666:32;:::i;:::-;31657:42;:::i;:::-;31639:61;:::i;:::-;31626:74;;31548:158;;;:::o;31712:147::-;31807:45;31846:5;31807:45;:::i;:::-;31802:3;31795:58;31712:147;;:::o;31865:114::-;31932:6;31966:5;31960:12;31950:22;;31865:114;;;:::o;31985:184::-;32084:11;32118:6;32113:3;32106:19;32158:4;32153:3;32149:14;32134:29;;31985:184;;;;:::o;32175:132::-;32242:4;32265:3;32257:11;;32295:4;32290:3;32286:14;32278:22;;32175:132;;;:::o;32313:108::-;32390:24;32408:5;32390:24;:::i;:::-;32385:3;32378:37;32313:108;;:::o;32427:179::-;32496:10;32517:46;32559:3;32551:6;32517:46;:::i;:::-;32595:4;32590:3;32586:14;32572:28;;32427:179;;;;:::o;32612:113::-;32682:4;32714;32709:3;32705:14;32697:22;;32612:113;;;:::o;32761:732::-;32880:3;32909:54;32957:5;32909:54;:::i;:::-;32979:86;33058:6;33053:3;32979:86;:::i;:::-;32972:93;;33089:56;33139:5;33089:56;:::i;:::-;33168:7;33199:1;33184:284;33209:6;33206:1;33203:13;33184:284;;;33285:6;33279:13;33312:63;33371:3;33356:13;33312:63;:::i;:::-;33305:70;;33398:60;33451:6;33398:60;:::i;:::-;33388:70;;33244:224;33231:1;33228;33224:9;33219:14;;33184:284;;;33188:14;33484:3;33477:10;;32885:608;;;32761:732;;;;:::o;33499:831::-;33762:4;33800:3;33789:9;33785:19;33777:27;;33814:71;33882:1;33871:9;33867:17;33858:6;33814:71;:::i;:::-;33895:80;33971:2;33960:9;33956:18;33947:6;33895:80;:::i;:::-;34022:9;34016:4;34012:20;34007:2;33996:9;33992:18;33985:48;34050:108;34153:4;34144:6;34050:108;:::i;:::-;34042:116;;34168:72;34236:2;34225:9;34221:18;34212:6;34168:72;:::i;:::-;34250:73;34318:3;34307:9;34303:19;34294:6;34250:73;:::i;:::-;33499:831;;;;;;;;:::o;34336:807::-;34585:4;34623:3;34612:9;34608:19;34600:27;;34637:71;34705:1;34694:9;34690:17;34681:6;34637:71;:::i;:::-;34718:72;34786:2;34775:9;34771:18;34762:6;34718:72;:::i;:::-;34800:80;34876:2;34865:9;34861:18;34852:6;34800:80;:::i;:::-;34890;34966:2;34955:9;34951:18;34942:6;34890:80;:::i;:::-;34980:73;35048:3;35037:9;35033:19;35024:6;34980:73;:::i;:::-;35063;35131:3;35120:9;35116:19;35107:6;35063:73;:::i;:::-;34336:807;;;;;;;;;:::o;35149:143::-;35206:5;35237:6;35231:13;35222:22;;35253:33;35280:5;35253:33;:::i;:::-;35149:143;;;;:::o;35298:663::-;35386:6;35394;35402;35451:2;35439:9;35430:7;35426:23;35422:32;35419:119;;;35457:79;;:::i;:::-;35419:119;35577:1;35602:64;35658:7;35649:6;35638:9;35634:22;35602:64;:::i;:::-;35592:74;;35548:128;35715:2;35741:64;35797:7;35788:6;35777:9;35773:22;35741:64;:::i;:::-;35731:74;;35686:129;35854:2;35880:64;35936:7;35927:6;35916:9;35912:22;35880:64;:::i;:::-;35870:74;;35825:129;35298:663;;;;;:::o

Swarm Source

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